In the upcoming multi image build process we will cat images together. To find the concatenated image we need to reliably find the end of the current binary. This adds a dummy section at the end of a pbl binary. Its only purpose is to mark the end of the image. The multi image patches will add something to this section so that it doesn't get discarded by the linker. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
53 lines
1 KiB
ArmAsm
53 lines
1 KiB
ArmAsm
#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.
|
|
*/
|
|
ENTRY(get_runtime_offset)
|
|
1: adr r0, 1b
|
|
ldr r1, linkadr
|
|
subs r0, r1, r0
|
|
THUMB( subs r0, r0, #1)
|
|
mov pc, lr
|
|
|
|
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 __rel_dyn_start
|
|
ld_var_entry __rel_dyn_end
|
|
ld_var_entry __dynsym_start
|
|
ld_var_entry __dynsym_end
|
|
ld_var_entry _barebox_image_size
|
|
ld_var_entry __bss_start
|
|
ld_var_entry __bss_stop
|
|
#ifdef __PBL__
|
|
ld_var_entry __image_end
|
|
#endif
|
|
|
|
1:
|
|
ldr r1, =__ld_var_base
|
|
adds r0, r0, r1
|
|
mov pc, lr
|