diff --git a/ld_so/ld_script/aarch64-unknown-linux-gnu.ld b/ld_so/ld_script/aarch64-unknown-linux-gnu.ld index 1df7e5c015..a344feef5d 100644 --- a/ld_so/ld_script/aarch64-unknown-linux-gnu.ld +++ b/ld_so/ld_script/aarch64-unknown-linux-gnu.ld @@ -104,25 +104,25 @@ SECTIONS .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } .exception_ranges : ONLY_IF_RW { *(.exception_ranges*) } /* Thread Local Storage sections. */ - .tdata : + /* .tdata : { PROVIDE_HIDDEN (__tdata_start = .); *(.tdata .tdata.* .gnu.linkonce.td.*) } - .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } + .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } */ .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP (*(.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } - .init_array : + /* .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) PROVIDE_HIDDEN (__init_array_end = .); - } + } */ .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); @@ -248,6 +248,16 @@ SECTIONS .debug_sup 0 : { *(.debug_sup) } .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) } .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) } - /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.gnu_object_only) } + /DISCARD/ : { + *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) + /* + * XXX: As of now, ld.so links with relibc which has the main functionality. In the next refactor, + * ld.so will be moved out of relibc. So, till that time, we have to discard any sections + * that may reference use thread local storage. + * + * .init_array also depends on TLS and is discarded as we don't need it. + */ + *(.gnu.linkonce.tb.*) *(.tcommon) + *(.init_array) + } } -