diff options
Diffstat (limited to 'arch/arm/lib/runtime-offset.S')
-rw-r--r-- | arch/arm/lib/runtime-offset.S | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/arm/lib/runtime-offset.S b/arch/arm/lib/runtime-offset.S index ffa668cd7e..aa56c7b105 100644 --- a/arch/arm/lib/runtime-offset.S +++ b/arch/arm/lib/runtime-offset.S @@ -1,6 +1,8 @@ #include <linux/linkage.h> #include <asm/assembler.h> +.section ".text_bare_init","ax" + /* * Get the offset between the link address and the address * we are currently running at. @@ -15,3 +17,29 @@ THUMB( subs r0, r0, #1) linkadr: .word get_runtime_offset ENDPROC(get_runtime_offset) + +.globl __ld_var_base +__ld_var_base: + +/* + * Functions to calculate selected linker supplied variables during runtime. + * This is needed for relocatable binaries when the linker variables are + * needed before finxing up the relocations. + */ +.macro ld_var_entry name + ENTRY(__ld_var_\name) + ldr r0, __\name + b 1f + __\name: .word \name - __ld_var_base + ENDPROC(__ld_var_\name) +.endm + +ld_var_entry _text +ld_var_entry _barebox_image_size +ld_var_entry __bss_start +ld_var_entry __bss_stop + +1: + ldr r1, =__ld_var_base + adds r0, r0, r1 + mov pc, lr |