Patch to add EH-related sections to MIPS linker scripts
Richard Sandiford
rsandifo@redhat.com
Mon May 3 20:21:00 GMT 2004
Most of the linker scripts in libgloss/mips lack section statements
for .eh_frame, .eh_frame_hdr, etc. We've got away with this in the
past because the sections have traditionally been read-write, which
causes ld's orphan code to place them next to .data. However, with
recent gccs, the sections are read-only, so the orphan code tries to
put them next to .rodata instead. Since these scripts don't create
a .rodata section (it all goes in .rdata), the orphaned sections end
up with a VMA of 0.
It's difficult to know which scripts to change. I've only really
been able to test ddb.ld and ddb-kseg0.ld, but lots of other scripts
obviously came from the same source, and have the same problem.
The patch below changes all those that obviously had the same
ancestor as ddb.ld.
Tested on mips64vrel-elf using the gcc testsuite. Also tested
on real ddb boards. OK to install?
Richard
* mips/array.ld, mips/cfe.ld, mips/ddb-kseg0.ld, mips/ddb.ld,
* mips/dve.ld, mips/idt32.ld, mips/idt64.ld, mips/idt.ld
* mips/jmr3904app.ld, mips/lsi.ld, mips/nullmon.ld, mips/pmon.ld
(.eh_frame_hdr, .eh_frame, .gcc_except_table, .jcr): New sections.
Index: libgloss/mips/array.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/array.ld,v
retrieving revision 1.2
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.2 array.ld
*** libgloss/mips/array.ld 12 Jul 2002 15:37:03 -0000 1.2
--- libgloss/mips/array.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 99,104 ****
--- 99,108 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/cfe.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/cfe.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 cfe.ld
*** libgloss/mips/cfe.ld 20 Aug 2003 19:32:52 -0000 1.3
--- libgloss/mips/cfe.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 54,59 ****
--- 54,63 ----
PROVIDE (etext = .);
_etext = .;
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/ddb-kseg0.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/ddb-kseg0.ld,v
retrieving revision 1.4
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.4 ddb-kseg0.ld
*** libgloss/mips/ddb-kseg0.ld 7 Oct 2002 16:24:00 -0000 1.4
--- libgloss/mips/ddb-kseg0.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 48,53 ****
--- 48,57 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/ddb.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/ddb.ld,v
retrieving revision 1.4
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.4 ddb.ld
*** libgloss/mips/ddb.ld 7 Oct 2002 16:24:00 -0000 1.4
--- libgloss/mips/ddb.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 48,53 ****
--- 48,57 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/dve.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/dve.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 dve.ld
*** libgloss/mips/dve.ld 1 Aug 2002 20:21:23 -0000 1.3
--- libgloss/mips/dve.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 48,53 ****
--- 48,57 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/idt32.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/idt32.ld,v
retrieving revision 1.2
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.2 idt32.ld
*** libgloss/mips/idt32.ld 12 Jul 2002 15:37:04 -0000 1.2
--- libgloss/mips/idt32.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 57,62 ****
--- 57,66 ----
_etext = .;
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/idt64.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/idt64.ld,v
retrieving revision 1.2
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.2 idt64.ld
*** libgloss/mips/idt64.ld 12 Jul 2002 15:37:04 -0000 1.2
--- libgloss/mips/idt64.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 56,61 ****
--- 56,65 ----
PROVIDE (etext = .);
_etext = .;
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/idt.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/idt.ld,v
retrieving revision 1.4
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.4 idt.ld
*** libgloss/mips/idt.ld 1 Aug 2002 20:21:23 -0000 1.4
--- libgloss/mips/idt.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 55,60 ****
--- 55,64 ----
PROVIDE (etext = .);
_etext = .;
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/jmr3904app.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/jmr3904app.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 jmr3904app.ld
*** libgloss/mips/jmr3904app.ld 1 Aug 2002 20:21:23 -0000 1.3
--- libgloss/mips/jmr3904app.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 47,52 ****
--- 47,56 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/lsi.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/lsi.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 lsi.ld
*** libgloss/mips/lsi.ld 1 Aug 2002 20:21:23 -0000 1.3
--- libgloss/mips/lsi.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 47,52 ****
--- 47,56 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/nullmon.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/nullmon.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 nullmon.ld
*** libgloss/mips/nullmon.ld 1 Aug 2002 20:21:23 -0000 1.3
--- libgloss/mips/nullmon.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 49,54 ****
--- 49,58 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
Index: libgloss/mips/pmon.ld
===================================================================
RCS file: /cvs/src/src/libgloss/mips/pmon.ld,v
retrieving revision 1.3
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.3 pmon.ld
*** libgloss/mips/pmon.ld 1 Aug 2002 20:21:23 -0000 1.3
--- libgloss/mips/pmon.ld 16 Apr 2004 14:56:59 -0000
*************** SECTIONS
*** 49,54 ****
--- 49,58 ----
_etext = .;
}
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .jcr : { KEEP (*(.jcr)) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of
More information about the Newlib
mailing list