summaryrefslogtreecommitdiffstats
path: root/arch/arm/lib/runtime-offset.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/lib/runtime-offset.S')
-rw-r--r--arch/arm/lib/runtime-offset.S28
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