In the linker script, I defined PROVIDE(__KERNEL_BEGIN__ = .);
.
The address can be accessed from:
extern uint32_t __KERNEL_BEGIN__[];
>
This is more in reference to your follow-up question beneath Ryan's post, however it may help answer your original question as well.
"Variables" defined in linker scripts aren't treated the same as those defined in C; they're more symbols than anything. When accessing these symbols defined in your linker scripts, you must use the & operator.
For example, if we had the following section in our linker script:
.data :
{
_sdata = .;
*(.data*);
_edata = .;
} > ram AT >rom
We could get a pointer to the start of the .data
section like so:
uint8_t *data_ptr = &_sdata;
For further reading, try the binutils docs, or this excellent primer on linker scripts
Cheers