This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] Put .gnu.linkonce.d.rel.ro.* sections into .data.rel.ro output section
- From: Jakub Jelinek <jakub at redhat dot com>
- To: binutils at sources dot redhat dot com
- Cc: Ulrich Drepper <drepper at redhat dot com>
- Date: Wed, 14 Dec 2005 15:09:50 +0100
- Subject: [PATCH] Put .gnu.linkonce.d.rel.ro.* sections into .data.rel.ro output section
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
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