Discard all .dynsym sections from linker scripts
Remove all __dynsym_start definitions from linker scripts
Remove all __dynsym_start references from the codebase
Note: this touches include/asm-generic/sections.h, which
is not ARM-specific, but actual uses of __dynsym_start
are only in ARM, so this patch can safely go through
the ARM repository.
Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
Tested-by: Lubomir Popov <lpopov@mm-sol.com>
Tested-by: Jeroen Hofstee <jeroen@myspectrum.nl>
Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
16 files changed:
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
.bss : {
. = ALIGN(4);
__bss_start = .;
.bss : {
. = ALIGN(4);
__bss_start = .;
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
.bss : {
. = ALIGN(4);
__bss_start = .;
.bss : {
. = ALIGN(4);
__bss_start = .;
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
_end = .;
.bss __rel_dyn_start (OVERLAY) : {
_end = .;
.bss __rel_dyn_start (OVERLAY) : {
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/*
* fix .rel.dyn relocations
*/
/*
* fix .rel.dyn relocations
*/
- ldr r10, _dynsym_start_ofs /* r10 <- __dynsym_start local ofs */
- add r10, r10, r7 /* r10 <- SRC &__dynsym_start */
ldr r2, _rel_dyn_start_ofs /* r2 <- __rel_dyn_start local ofs */
add r2, r2, r7 /* r2 <- SRC &__rel_dyn_start */
ldr r3, _rel_dyn_end_ofs /* r3 <- __rel_dyn_end local ofs */
ldr r2, _rel_dyn_start_ofs /* r2 <- __rel_dyn_start local ofs */
add r2, r2, r7 /* r2 <- SRC &__rel_dyn_start */
ldr r3, _rel_dyn_end_ofs /* r3 <- __rel_dyn_end local ofs */
and r7, r1, #0xff
cmp r7, #23 /* relative fixup? */
beq fixrel
and r7, r1, #0xff
cmp r7, #23 /* relative fixup? */
beq fixrel
- cmp r7, #2 /* absolute fixup? */
- beq fixabs
/* ignore unknown type of fixup */
b fixnext
/* ignore unknown type of fixup */
b fixnext
-fixabs:
- /* absolute fix: set location to (offset) symbol value */
- mov r1, r1, LSR #4 /* r1 <- symbol index in .dynsym */
- add r1, r10, r1 /* r1 <- address of symbol in table */
- ldr r1, [r1, #4] /* r1 <- symbol value */
- add r1, r1, r9 /* r1 <- relocated sym addr */
- b fixnext
fixrel:
/* relative fix: increase location by offset */
ldr r1, [r0]
fixrel:
/* relative fix: increase location by offset */
ldr r1, [r0]
.word __rel_dyn_start - relocate_code
_rel_dyn_end_ofs:
.word __rel_dyn_end - relocate_code
.word __rel_dyn_start - relocate_code
_rel_dyn_end_ofs:
.word __rel_dyn_end - relocate_code
-_dynsym_start_ofs:
- .word __dynsym_start - relocate_code
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
__rel_dyn_end = .;
} >.sram
__rel_dyn_end = .;
} >.sram
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- } >.sram
-
__rel_dyn_end = .;
} >.sram
__rel_dyn_end = .;
} >.sram
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- } >.sram
-
__image_copy_end = .;
__rel_dyn_start = .;
__rel_dyn_end = .;
__image_copy_end = .;
__rel_dyn_start = .;
__rel_dyn_end = .;
__got_start = .;
. = ALIGN(4);
__got_start = .;
. = ALIGN(4);
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.plt*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
}
/DISCARD/ : { *(.bss*) }
}
/DISCARD/ : { *(.bss*) }
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynsym*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynsym*) }
/DISCARD/ : { *(.dynamic*) }
- .dynsym : {
- __dynsym_start = .;
- *(.dynsym)
- }
-
. = ALIGN(0x800);
_end = .;
. = ALIGN(0x800);
_end = .;
}
/DISCARD/ : { *(.bss*) }
}
/DISCARD/ : { *(.bss*) }
+ /DISCARD/ : { *(.dynsym) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynsym*) }
/DISCARD/ : { *(.dynamic*) }
/DISCARD/ : { *(.dynstr*) }
/DISCARD/ : { *(.dynsym*) }
/DISCARD/ : { *(.dynamic*) }
extern ulong _rel_dyn_start_ofs;
extern ulong _rel_dyn_end_ofs;
extern ulong _rel_dyn_start_ofs;
extern ulong _rel_dyn_end_ofs;
-/* Start/end of the relocation symbol table, as an offset from _start */
-extern ulong _dynsym_start_ofs;
-
/* End of the region to be relocated, as an offset form _start */
extern ulong _image_copy_end_ofs;
/* End of the region to be relocated, as an offset form _start */
extern ulong _image_copy_end_ofs;