2015-04-01 Alan Modra <amodra@gmail.com>
+ PR ld/18176
* ldlang.c (lang_size_sections): When alignment of sections
results in relro base adjustment being too large, don't go lower
than the initial value.
+2015-04-01 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/18176
+ * ld-x86-64/pr18176.d: New file.
+ * ld-x86-64/pr18176.s: Likewise.
+ * ld-x86-64/pr18176.t: Likewise.
+ * ld-x86-64/x86-64.exp: Run pr18176.
+
2015-03-31 H.J. Lu <hongjiu.lu@intel.com>
* ld-bootstrap/bootstrap.exp (extralibs): Add -lz.
--- /dev/null
+#name: PR ld/18176
+#as: --64
+#ld: -melf_x86_64 -shared -z relro -T pr18176.t -z max-page-size=0x200000 -z common-page-size=0x1000
+#readelf: -l --wide
+#target: x86_64-*-linux*
+
+#...
+ GNU_RELRO 0x04bd07 0x000000000024bd07 0x000000000024bd07 0x0022f9 0x0022f9 R 0x1
+#pass
--- /dev/null
+ .section .init,"ax",@progbits
+ .p2align 2
+ .space 0x1a
+ .section .text,"ax",@progbits
+ .p2align 4
+ .space 0x3ab96
+ .section .fini,"ax",@progbits
+ .p2align 2
+ .space 0x9
+ .section .foo_hdr,"a",@progbits
+ .p2align 2
+ .space 0xd14
+ .section .foo,"a",@progbits
+ .p2align 3
+ .space 0x4d5c
+ .section .rodata,"a",@progbits
+ .p2align 6
+ .space 0xa54d
+ .section .xxx,"a",@progbits
+ .space 0xf43
+ .section .yyy,"aw",@progbits
+ .space 0x1
+ .section .init_array,"aw",@init_array
+ .p2align 3
+ .space 0x10
+ .section .fini_array,"aw",@fini_array
+ .p2align 3
+ .space 0x8
+ .section .tdata,"awT",%progbits
+ .p2align 3
+ .space 0x4
+ .section .tbss,"awT",%nobits
+ .p2align 3
+ .space 0x40
+ .section .data.rel.ro,"aw",%progbits
+ .p2align 6
+ .space 0x1b60
+ .section .jcr,"aw",@progbits
+ .p2align 3
+ .space 0x8
+ .section .bar,"aw",@progbits
+ .p2align 3
+ .space 0x640
+ .section .data,"aw",%progbits
+ .p2align 5
+ .space 0x70
+ .section .bss,"aw",%nobits
+ .p2align 6
+ .space 0x8a0
+ .section BUS_ERROR_MAP,"aw",%progbits
+ .p2align 3
+ .space 0x230
--- /dev/null
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+ .hash : { *(.hash) }
+ .gnu.hash : { *(.gnu.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .init : { *(.init) }
+ .text : { *(.text) }
+ .fini : { *(.fini) }
+ .rodata : { *(.rodata) }
+ .foo_hdr : { *(.foo_hdr) }
+ .foo : { *(.foo) }
+ .xxx : { *(.xxx) }
+ . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
+ .yyy : { *(.yyy) }
+ .tdata : { *(.tdata) }
+ .tbss : { *(.tbss) }
+ .init_array : { *(.init_array) }
+ .fini_array : { *(.fini_array) }
+ .jcr : { *(.jcr) }
+ .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+ .dynamic : { *(.dynamic) }
+ .bar : { *(.bar) }
+ . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 24 ? 24 : 0, .);
+ .got.plt : { *(.got.plt) }
+ .data : { *(.data) }
+ __bss_start = .;
+ .bss :
+ {
+ *(.bss)
+ . = ALIGN(. != 0 ? 64 / 8 : 1);
+ }
+ . = ALIGN(64 / 8);
+ _end = .; PROVIDE (end = .);
+ . = DATA_SEGMENT_END (.);
+ /DISCARD/ : { *(.*) }
+}
run_dump_test "pr17935-1"
run_dump_test "pr17935-2"
run_dump_test "pr18160"
+run_dump_test "pr18176"
# Must be native with the C compiler
if { [isnative] && [which $CC] != 0 } {