[PATCH] Put .gnu.linkonce.d.rel.ro.* sections into .data.rel.ro output section

Jakub Jelinek jakub@redhat.com
Wed Dec 14 14:09:00 GMT 2005


Hi!

As GCC keeps using .gnu.linkonce.*.* section names even when using COMDAT
and it probably will not change overnight, I think we need to help
it in the linker script to allow more accurate -z relro on C++ code.

I'll post a separate GCC patch to emit those sections soon (though, it
will be backwards compatible with older linkers, as worst case
the relro sections will end up in .data as they did before).

Ok to commit?

2005-12-14  Jakub Jelinek  <jakub@redhat.com>

	* scripttempl/elf.sc: Put .gnu.linkonce.d.rel.ro.* sections into
	.data.rel.ro output section.  Fix a pasto for -z nocombreloc
	.rela.data.rel.ro section content.

--- ld/scripttempl/elf.sc.jj	2005-12-14 13:50:35.000000000 +0100
+++ ld/scripttempl/elf.sc	2005-12-14 13:56:15.000000000 +0100
@@ -117,7 +117,7 @@ if test -z "$GOT"; then
 fi
 DYNAMIC=".dynamic      ${RELOCATING-0} : { *(.dynamic) }"
 RODATA=".rodata       ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
-DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.data.rel.ro*) }"
+DATARELRO=".data.rel.ro : { *(.data.rel.ro.local) *(.gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro*) *(.gnu.linkonce.d.rel.ro.*) }"
 STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }"
 if test -z "${NO_SMALL_DATA}"; then
   SBSS=".sbss         ${RELOCATING-0} :
@@ -282,8 +282,8 @@ eval $COMBRELOCCAT <<EOF
   .rel.rodata   ${RELOCATING-0} : { *(.rel.rodata${RELOCATING+ .rel.rodata.* .rel.gnu.linkonce.r.*}) }
   .rela.rodata  ${RELOCATING-0} : { *(.rela.rodata${RELOCATING+ .rela.rodata.* .rela.gnu.linkonce.r.*}) }
   ${OTHER_READONLY_RELOC_SECTIONS}
-  .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
-  .rela.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+*}) }
+  .rel.data.rel.ro ${RELOCATING-0} : { *(.rel.data.rel.ro${RELOCATING+* .rel.gnu.linkonce.d.rel.ro.*}) }
+  .rela.data.rel.ro ${RELOCATING-0} : { *(.rela.data.rel.ro${RELOCATING+* .rela.gnu.linkonce.d.rel.ro.*}) }
   .rel.data     ${RELOCATING-0} : { *(.rel.data${RELOCATING+ .rel.data.* .rel.gnu.linkonce.d.*}) }
   .rela.data    ${RELOCATING-0} : { *(.rela.data${RELOCATING+ .rela.data.* .rela.gnu.linkonce.d.*}) }
   .rel.tdata	${RELOCATING-0} : { *(.rel.tdata${RELOCATING+ .rel.tdata.* .rel.gnu.linkonce.td.*}) }

	Jakub



More information about the Binutils mailing list