changeset 795:db69ea2c9293

Update various .ld and .ldi files to cope with C++ and fix some typos. Also add a test program for C++ support to infra package. See individual ChangeLogs for details.
author nickg
date Wed, 16 Apr 2003 17:55:07 +0000
parents 1d4e1e38bd0f
children d11d25c40632
files packages/hal/calmrisc16/core/current/ChangeLog packages/hal/calmrisc16/core/current/src/calm16_core.ld packages/hal/calmrisc32/core/current/ChangeLog packages/hal/calmrisc32/core/current/src/calm32_core.ld packages/hal/frv/arch/current/ChangeLog packages/hal/frv/arch/current/src/frv.ld packages/hal/h8300/h8300h/current/ChangeLog packages/hal/h8300/h8300h/current/src/h8300_h8300h.ld packages/hal/i386/arch/current/ChangeLog packages/hal/i386/arch/current/src/i386.ld packages/hal/i386/pc/current/ChangeLog packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_rom.ldi packages/hal/m68k/arch/current/src/m68k.ld packages/hal/mips/idt32334/current/ChangeLog packages/hal/mips/idt32334/current/src/mips_idt32334.ld packages/hal/mips/mips32/current/ChangeLog packages/hal/mips/mips32/current/src/mips_mips32.ld packages/hal/mips/mips64/current/ChangeLog packages/hal/mips/mips64/current/src/mips_mips64.ld packages/hal/mips/rm7000/var/current/ChangeLog packages/hal/mips/rm7000/var/current/src/mips_rm7000.ld packages/hal/mips/tx39/current/ChangeLog packages/hal/mips/tx39/current/src/mips_tx39.ld packages/hal/mips/tx49/current/ChangeLog packages/hal/mips/tx49/current/src/mips_tx49.ld packages/hal/mips/upd985xx/current/ChangeLog packages/hal/mips/upd985xx/current/src/hal_mips_upd985xx.ld packages/hal/mips/vr4300/current/ChangeLog packages/hal/mips/vr4300/current/src/mips_vr4300.ld packages/hal/mn10300/am31/current/ChangeLog packages/hal/mn10300/am31/current/src/mn10300_am31.ld packages/hal/mn10300/am33/current/ChangeLog packages/hal/mn10300/am33/current/src/mn10300_am33.ld packages/hal/powerpc/arch/current/ChangeLog packages/hal/powerpc/arch/current/src/powerpc.ld packages/hal/sh/arch/current/ChangeLog packages/hal/sh/arch/current/src/sh.ld packages/hal/sparc/arch/current/ChangeLog packages/hal/sparc/arch/current/src/sparc.ld packages/hal/sparclite/arch/current/ChangeLog packages/hal/sparclite/arch/current/src/sparclite.ld packages/hal/synth/arch/current/ChangeLog packages/hal/synth/arch/current/src/synth.ld packages/hal/v85x/ceb_v850/current/ChangeLog packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi packages/hal/v85x/v850/current/ChangeLog packages/hal/v85x/v850/current/src/v85x_v850.ld packages/infra/current/ChangeLog packages/infra/current/cdl/infra.cdl
diffstat 49 files changed, 398 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/calmrisc16/core/current/ChangeLog
+++ b/packages/hal/calmrisc16/core/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/calm16_core.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/calm16_core.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2001-06-08  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/var_cache.h: Correctly indicate absence of cache.
--- a/packages/hal/calmrisc16/core/current/src/calm16_core.ld
+++ b/packages/hal/calmrisc16/core/current/src/calm16_core.ld
@@ -49,7 +49,11 @@ ENTRY(_reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 0x40
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -283,7 +287,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/calmrisc32/core/current/ChangeLog
+++ b/packages/hal/calmrisc32/core/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/calm32_core.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/calm32_core.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2001-06-08  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/var_cache.h: Correctly indicate absence of cache.
--- a/packages/hal/calmrisc32/core/current/src/calm32_core.ld
+++ b/packages/hal/calmrisc32/core/current/src/calm32_core.ld
@@ -49,7 +49,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 0x40
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -283,7 +287,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/frv/arch/current/ChangeLog
+++ b/packages/hal/frv/arch/current/ChangeLog
@@ -1,3 +1,15 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/frv.ld:
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2003-01-31  Mark Salter  <msalter@redhat.com>
 
 	* src/hal_syscall.c (hal_syscall_handler): Let generic syscall code
--- a/packages/hal/frv/arch/current/src/frv.ld
+++ b/packages/hal/frv/arch/current/src/frv.ld
@@ -44,7 +44,11 @@ ENTRY(_start)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -126,6 +130,7 @@ GROUP(libtarget.a libgcc.a)
     __CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) __CTOR_END__ = ABSOLUTE (.); \
     __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \
     *(.sdata*) \
+    *(.eh_frame) \
     . = ALIGN (8); *(.2ram.*) \
     /* Global pointer stuff */ \
     . = ALIGN(8);    _gp = . + 2048;     __global = _gp; \
--- a/packages/hal/h8300/h8300h/current/ChangeLog
+++ b/packages/hal/h8300/h8300h/current/ChangeLog
@@ -1,3 +1,15 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/h8300_h8300h.ld: 
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.	
+
 2002-08-14  Yoshinori Sato  <qzb04471@nifty.ne.jp>
 
 	* include/mod_regs_wdt.h: New file. Providing watchdog hardware data.
--- a/packages/hal/h8300/h8300h/current/src/h8300_h8300h.ld
+++ b/packages/hal/h8300/h8300h/current/src/h8300_h8300h.ld
@@ -44,9 +44,11 @@ ENTRY(CYG_LABEL_DEFN(_start))
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
-
-
+#endif
 
 #define ALIGN_LMA 4
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -113,6 +115,7 @@ GROUP(libtarget.a libgcc.a)
     CYG_LABEL_DEFN(__DTOR_LIST__) = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) CYG_LABEL_DEFN(__DTOR_END__) = ABSOLUTE (.); \
     CYG_LABEL_DEFN(_GOT_START) = ABSOLUTE (.); CYG_LABEL_DEFN(_GLOBAL_OFFSET_TABLE_) = ABSOLUTE (.) + 32768; CYG_LABEL_DEFN(_SDA_BASE_) = ABSOLUTE (.); \
     *(.got.plt) *(.got) CYG_LABEL_DEFN(_GOT_END_) = ABSOLUTE (.); \
+    *(.eh_frame) \
     *(.dynamic) *(.sdata*) *(.sbss*) } \
     > _region_ \
     CYG_LABEL_DEFN(__rom_data_start) = LOADADDR (.data); \
--- a/packages/hal/i386/arch/current/ChangeLog
+++ b/packages/hal/i386/arch/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/i386.ld:
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2003-01-31  Mark Salter  <msalter@redhat.com>
 
 	* src/hal_syscall.c (hal_syscall_handler): Let generic syscall code
--- a/packages/hal/i386/arch/current/src/i386.ld
+++ b/packages/hal/i386/arch/current/src/i386.ld
@@ -53,7 +53,11 @@ ENTRY(_start)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/i386/pc/current/ChangeLog
+++ b/packages/hal/i386/pc/current/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* include/pkgconf/mlt_i386_pc_rom.ldi: Brought list of sections up
+	to date with other files.
+
 2003-01-22  Jonathan Larmour  <jifl@eCosCentric.com>
 
 	* include/pkgconf/hal_i386_pc.h: Old file. Remove.
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_rom.ldi
+++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_rom.ldi
@@ -19,6 +19,9 @@ SECTIONS
     SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA)
     SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA)
     SECTION_data (ram, 0x02000, FOLLOWING(.rodata))
+    SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA)
+    SECTION_rel__got (ram, ALIGN (0x1), LMA_EQ_VMA)
     SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA)
     SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA)
     CYG_LABEL_DEFN(__pci_window) = ALIGN(0x10); . = CYG_LABEL_DEFN(__pci_window) + 0x64000;
--- a/packages/hal/m68k/arch/current/src/m68k.ld
+++ b/packages/hal/m68k/arch/current/src/m68k.ld
@@ -45,7 +45,11 @@ ENTRY(__exception_reset)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 4
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -111,6 +115,7 @@ GROUP(libtarget.a libgcc.a)
     __GOT_START = ABSOLUTE(.); _GLOBAL_OFFSET_TABLE_ = ABSOLUTE(. + 32768);   \
     _SDA_BASE_ = ABSOLUTE(.); *(.got.plt) *(.got)                             \
     __GOT_END__ = ABSOLUTE(.);  *(.dynamic)                                   \
+    *(.eh_frame)                                                              \
       /* We want the small data sections together, so single-instruction */   \
       /* offsets can access them all, and initialized data all before    */   \
       /* uninitialized, so we can shorten the on-disk segment size.      */   \
--- a/packages/hal/mips/idt32334/current/ChangeLog
+++ b/packages/hal/mips/idt32334/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_idt32334.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_idt32334.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2003-02-13  Tim Michals  <t.michals@attbi.com>
 2003-02-13  Jonathan Larmour  <jifl@eCosCentric.com>
 
--- a/packages/hal/mips/idt32334/current/src/mips_idt32334.ld
+++ b/packages/hal/mips/idt32334/current/src/mips_idt32334.ld
@@ -62,7 +62,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the MIPS32
@@ -330,7 +334,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/mips32/current/ChangeLog
+++ b/packages/hal/mips/mips32/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_mips32.ld:
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.	
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_mips32.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2003-02-27  Nick Garnett  <nickg@calivar.com>
 
 	* cdl/hal_mips_mips32.cdl: Changed CYGPKG_HAL_MIPS_GDB_REPORT_CP0
--- a/packages/hal/mips/mips32/current/src/mips_mips32.ld
+++ b/packages/hal/mips/mips32/current/src/mips_mips32.ld
@@ -50,7 +50,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the MIPS32
@@ -302,7 +306,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/mips64/current/ChangeLog
+++ b/packages/hal/mips/mips64/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_mips64.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_mips64.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2002-05-24  Jesper Skov  <jskov@redhat.com>
 
 	* include/var_arch.h: Removed HAL_DIAG_IRQ_CHECK. It's not
--- a/packages/hal/mips/mips64/current/src/mips_mips64.ld
+++ b/packages/hal/mips/mips64/current/src/mips_mips64.ld
@@ -50,7 +50,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the MIPS64
@@ -302,7 +306,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/rm7000/var/current/ChangeLog
+++ b/packages/hal/mips/rm7000/var/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_rm7000.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_rm7000.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2001-08-09  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/var_intr.h: Move HAL_INTERRUPT_ interrupt controller
--- a/packages/hal/mips/rm7000/var/current/src/mips_rm7000.ld
+++ b/packages/hal/mips/rm7000/var/current/src/mips_rm7000.ld
@@ -50,7 +50,11 @@ ENTRY(reset_vector)
 #if defined(EXTRAS)
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the
@@ -288,7 +292,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/tx39/current/ChangeLog
+++ b/packages/hal/mips/tx39/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_tx39.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_tx39.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2000-10-20  Jesper Skov  <jskov@redhat.com>
 
 	* include/var_cache.h (HAL_DCACHE_INVALIDATE_ALL): Move volatile
--- a/packages/hal/mips/tx39/current/src/mips_tx39.ld
+++ b/packages/hal/mips/tx39/current/src/mips_tx39.ld
@@ -50,7 +50,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the JMR3904
@@ -299,7 +303,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/tx49/current/ChangeLog
+++ b/packages/hal/mips/tx49/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_tx49.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
+2003-04-09  Jonathan Larmour  <jifl@eCosCentric.com>
+
+	* src/mips_tx49.ld:
+        Fix .gnulinkonce.s -> .gnu.linkonce.s typo.
+
 2000-12-05  Jesper Skov  <jskov@redhat.com>
 
 	* include/var_cache.h (HAL_MIPS_CACHE_INSN_USES_LSB): The TX49
--- a/packages/hal/mips/tx49/current/src/mips_tx49.ld
+++ b/packages/hal/mips/tx49/current/src/mips_tx49.ld
@@ -50,7 +50,11 @@ ENTRY(reset_vector)
 #if defined(EXTRAS) && defined(CYGPKG_IO)
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 /* FIXME: The MLT should pass in the required alignment since it must be
  * the same as the VMA's alignment. As a result of this bug, all the REF4955
@@ -287,7 +291,7 @@ GROUP(libtarget.a libgcc.a)
 #define SECTION_sdata(_region_, _vma_, _lma_)                 \
   .sdata _vma_ : _lma_                                        \
     {                                                         \
-      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*)  \
+      FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnu.linkonce.s*)  \
     } > _region_
 
 #define SECTION_lit8(_region_, _vma_, _lma_)    \
--- a/packages/hal/mips/upd985xx/current/ChangeLog
+++ b/packages/hal/mips/upd985xx/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/hal_mips_upd985xx.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2002-04-02  Hugo Tyson  <hmt@redhat.com>
 2002-04-02  Anssi Pulkkinen <anssi.pulkkinen@ascom.com>
 
--- a/packages/hal/mips/upd985xx/current/src/hal_mips_upd985xx.ld
+++ b/packages/hal/mips/upd985xx/current/src/hal_mips_upd985xx.ld
@@ -45,7 +45,11 @@ OUTPUT_FORMAT("elf32-bigmips", "elf32-bi
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/mips/vr4300/current/ChangeLog
+++ b/packages/hal/mips/vr4300/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mips_vr4300.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2001-12-05  Nick Garnett  <nickg@redhat.com>
 
 	* include/variant.inc: Add ifdef around cache clearing code to
--- a/packages/hal/mips/vr4300/current/src/mips_vr4300.ld
+++ b/packages/hal/mips/vr4300/current/src/mips_vr4300.ld
@@ -45,7 +45,11 @@ OUTPUT_FORMAT("elf32-bigmips", "elf32-bi
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/mn10300/am31/current/ChangeLog
+++ b/packages/hal/mn10300/am31/current/ChangeLog
@@ -1,3 +1,13 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mn10300_am31.ld:
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.	
+
 2003-03-14  Bart Veer  <bartv@ecoscentric.com>
 
 	* src/mn10300_am31.ld: add entries for debug sections, needed by
--- a/packages/hal/mn10300/am31/current/src/mn10300_am31.ld
+++ b/packages/hal/mn10300/am31/current/src/mn10300_am31.ld
@@ -109,6 +109,7 @@ GROUP(libtarget.a libgcc.a)
     __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \
     _GOT_START = ABSOLUTE (.); _GLOBAL_OFFSET_TABLE_ = ABSOLUTE (.) + 32768; _SDA_BASE_ = ABSOLUTE (.); \
     *(.got.plt) *(.got) _GOT_END_ = ABSOLUTE (.); \
+    *(.eh_frame) \
     *(.dynamic) *(.sdata*) *(.sbss*) } \
     > _region_ \
     __rom_data_start = LOADADDR (.data); \
--- a/packages/hal/mn10300/am33/current/ChangeLog
+++ b/packages/hal/mn10300/am33/current/ChangeLog
@@ -1,3 +1,15 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/mn10300_am33.ld: 
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2003-03-14  Bart Veer  <bartv@ecoscentric.com>
 
 	* src/mn10300_am33.ld: add entries for debug sections, needed by
--- a/packages/hal/mn10300/am33/current/src/mn10300_am33.ld
+++ b/packages/hal/mn10300/am33/current/src/mn10300_am33.ld
@@ -45,7 +45,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 
 #define ALIGN_LMA 4
@@ -109,6 +113,7 @@ GROUP(libtarget.a libgcc.a)
     __DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) __DTOR_END__ = ABSOLUTE (.); \
     _GOT_START = ABSOLUTE (.); _GLOBAL_OFFSET_TABLE_ = ABSOLUTE (.) + 32768; _SDA_BASE_ = ABSOLUTE (.); \
     *(.got.plt) *(.got) _GOT_END_ = ABSOLUTE (.); \
+    *(.eh_frame) \
     *(.dynamic) *(.sdata*) *(.sbss*) } \
     > _region_ \
     __rom_data_start = LOADADDR (.data); \
--- a/packages/hal/powerpc/arch/current/ChangeLog
+++ b/packages/hal/powerpc/arch/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/powerpc.ld: 
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
 2003-01-03  Gary Thomas  <gary@mlbassoc.com>
 
 	* include/hal_mem.h (CYGARC_MEMDESC_NOCACHE_PA): New macro which
--- a/packages/hal/powerpc/arch/current/src/powerpc.ld
+++ b/packages/hal/powerpc/arch/current/src/powerpc.ld
@@ -53,7 +53,11 @@ ENTRY(__exception_reset)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -119,6 +123,7 @@ GROUP(libtarget.a libgcc.a)
     __GOT_START = ABSOLUTE(.); _GLOBAL_OFFSET_TABLE_ = ABSOLUTE(. + 32768);   \
     _SDA_BASE_ = ABSOLUTE(.); *(.got.plt) *(.got)                             \
     __GOT_END__ = ABSOLUTE(.);  *(.dynamic)                                   \
+    *(.eh_frame)                                                              \
       /* We want the small data sections together, so single-instruction */   \
       /* offsets can access them all, and initialized data all before    */   \
       /* uninitialized, so we can shorten the on-disk segment size.      */   \
--- a/packages/hal/sh/arch/current/ChangeLog
+++ b/packages/hal/sh/arch/current/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/sh.ld:
+	Added entry for .stack section in data section.
+
 2003-01-31  Mark Salter  <msalter@redhat.com>
 
 	* src/hal_syscall.c (hal_syscall_handler): Let generic syscall code
--- a/packages/hal/sh/arch/current/src/sh.ld
+++ b/packages/hal/sh/arch/current/src/sh.ld
@@ -94,6 +94,7 @@ GROUP(libtarget.a libgcc.a)
     . = ALIGN(8);							 \
       KEEP(*( SORT (.ecos.table.*))) ;					 \
     . = ALIGN(4);                                                        \
+     *(.stack)                                                           \     
     } > _region_							 \
     CYG_LABEL_DEFN(_rom_data_start) = LOADADDR(.data);			 \
     CYG_LABEL_DEFN(_ram_data_end) = .; PROVIDE(_ram_data_end = .);	 \
--- a/packages/hal/sparc/arch/current/ChangeLog
+++ b/packages/hal/sparc/arch/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/sparc.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2002-10-19  Jonathan Larmour  <jifl@eCosCentric.com>
 
 	Patch from Jiri Gaisler:
--- a/packages/hal/sparc/arch/current/src/sparc.ld
+++ b/packages/hal/sparc/arch/current/src/sparc.ld
@@ -42,7 +42,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/sparclite/arch/current/ChangeLog
+++ b/packages/hal/sparclite/arch/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/sparclite.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2002-04-29  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* src/vectors.S:
--- a/packages/hal/sparclite/arch/current/src/sparclite.ld
+++ b/packages/hal/sparclite/arch/current/src/sparclite.ld
@@ -42,7 +42,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/synth/arch/current/ChangeLog
+++ b/packages/hal/synth/arch/current/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/synth.ld: 
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2003-03-30  Bart Veer  <bartv@ecoscentric.com>
 
 	* src/synth_intr.c (synth_auxiliary_xchgmsg): fix typo reported
--- a/packages/hal/synth/arch/current/src/synth.ld
+++ b/packages/hal/synth/arch/current/src/synth.ld
@@ -53,7 +53,11 @@ ENTRY(_start)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 8
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
--- a/packages/hal/v85x/ceb_v850/current/ChangeLog
+++ b/packages/hal/v85x/ceb_v850/current/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* include/pkgconf/mlt_v85x_v850_ceb_ram.ldi:
+	Added SECTION_ram_vectors().
+
 2002-05-28  Jonathan Larmour  <jlarmour@redhat.com>
 
 	* include/hal_platform_setup.h: Correctly calculate wait states based
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi
+++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi
@@ -14,6 +14,7 @@ SECTIONS
     SECTIONS_BEGIN
     CYG_LABEL_DEFN(__reserved) = 0xfc0000; . = CYG_LABEL_DEFN(__reserved) + 0x4000;
     SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA)
+    SECTION_ram_vectors (ram, ALIGN (0x4), LMA_EQ_VMA)
     SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA)
     SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA)
     SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA)
--- a/packages/hal/v85x/v850/current/ChangeLog
+++ b/packages/hal/v85x/v850/current/ChangeLog
@@ -1,3 +1,15 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* src/v85x_v850.ld:
+	Added .eh_frame to data section. This is a stopgap fix to allow
+	C++ programs that define exceptions to link and run. It does not
+	allow them to actually throw exceptions, since that depends on
+	compiler changes that have not been made. Further, more
+	far-reaching, linker script changes will also be needs when that
+	happens.	
+	Added libsupc++.a to GROUP() directive for GCC versions later than
+	3.0.
+
 2002-05-23  Jesper Skov  <jskov@redhat.com>
 
 	* cdl/hal_v85x_v850.cdl: Don't run cache tests.
--- a/packages/hal/v85x/v850/current/src/v85x_v850.ld
+++ b/packages/hal/v85x/v850/current/src/v85x_v850.ld
@@ -51,7 +51,11 @@ ENTRY(reset_vector)
 #ifdef EXTRAS
 INPUT(extras.o)
 #endif
+#if (__GNUC__ >= 3)
+GROUP(libtarget.a libgcc.a libsupc++.a)
+#else
 GROUP(libtarget.a libgcc.a)
+#endif
 
 #define ALIGN_LMA 4
 #define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1))
@@ -126,6 +130,7 @@ GROUP(libtarget.a libgcc.a)
     KEEP(*( SORT (.ecos.table.*))) ; \
     ___CTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.ctors*))) ___CTOR_END__ = ABSOLUTE (.); \
     ___DTOR_LIST__ = ABSOLUTE (.); KEEP (*(SORT (.dtors*))) ___DTOR_END__ = ABSOLUTE (.); \
+    *(.eh_frame) \
     *(.dynamic) *(.sdata*) *(.sbss*) } \
     > _region_ \
     ___rom_data_start = LOADADDR (.data); \
--- a/packages/infra/current/ChangeLog
+++ b/packages/infra/current/ChangeLog
@@ -1,3 +1,30 @@
+2003-04-10  Nick Garnett  <nickg@balti.calivar.com>
+
+	* tests/cxxsupp.cxx: Added this test program to check that basic
+	C++ support is present. It checks that pure virtual functions can
+	be defined, that new and delete are present and functional, and
+	that calls to as-yet undefined inline functions work. Most of
+	these are linker and runtime system issues, so the actual run of
+	the program is almost a non-event.
+
+	* cdl/infra.cdl:
+	Added CYGFUN_INFRA_DUMMY_ABORT and CYGFUN_INFRA_DUMMY_STRLEN
+	options to control inclusion of dummy abort() and strlen()
+	functions. These are needed to be present by the compiler's C++
+	runtime system, although they should never be called.
+	Added CYGPKG_INFRA_TESTS to define test programs.
+	Added CYGPKG_INFRA_LDFLAGS_REMOVE and CYGPKG_INFRA_LDFLAGS_ADD to
+	modify the linkage options for the infra package
+	tests. Specifically they remove the --gc-sections option and make
+	all linker warning fatal. This is necessary if cxxsupp.cxx is to
+	test what it needs correctly.
+	
+	* src/abort.cxx: Added this dummy implementation of abort() to
+	satisfy references in the C++ runtime system.
+
+	* src/strlen.cxx: Added this dummy implementation of strlen() to
+	satisfy references in the C++ runtime system.
+
 2003-03-27  Bart Veer  <bartv@ecoscentric.com>
 
 	* src/pure.cxx, cdl/infra.cdl: new function __cxa_pure_virtual(),
--- a/packages/infra/current/cdl/infra.cdl
+++ b/packages/infra/current/cdl/infra.cdl
@@ -178,6 +178,39 @@ cdl_package CYGPKG_INFRA {
     }
 
     # ========================================================================
+
+    cdl_option CYGFUN_INFRA_DUMMY_ABORT {
+        display       "Provide dummy abort() function"
+        requires      !CYGINT_ISO_EXIT
+        default_value { CYGINT_ISO_EXIT == 0 }
+        compile       abort.cxx
+        description   "
+            This option controls the inclusion of a dummy abort() function.
+            Parts of the C and C++ compiler runtime systems contain references
+            to abort(), particulary in the C++ exception handling code. It is
+            not possible to eliminate these references, so this dummy function
+            in included to satisfy them. It is not expected that this function
+            will ever be called, so its current behaviour is to simply loop."
+    }
+
+    # ========================================================================
+
+    cdl_option CYGFUN_INFRA_DUMMY_STRLEN {
+        display       "Provide dummy strlen() function"
+        requires      !CYGINT_ISO_STRING_STRFUNCS
+        default_value { CYGINT_ISO_STRING_STRFUNCS == 0 }
+        compile       strlen.cxx
+        description   "
+            This option controls the inclusion of a dummy strlen() function.
+            Parts of the C and C++ compiler runtime systems contain references
+            to strlen(), particulary in the C++ exception handling code. It is
+            not possible to eliminate these references, so this dummy function
+            in included to satisfy them. While it is not expected that this function
+            will ever be called, it is functional but uses the simplest, smallest
+            algorithm. There is a faster version of strlen() in the C library."
+    }
+    
+    # ========================================================================
     # Debugging-related miscellania.
 
     define_proc {
@@ -245,5 +278,35 @@ cdl_package CYGPKG_INFRA {
                 building the eCos infra package. These flags are removed from
                 the set of global flags if present."
         }
+
+        cdl_option CYGPKG_INFRA_LDFLAGS_REMOVE {
+            display "Suppressed linker flags"
+            flavor  data
+            no_define
+            default_value { "-Wl,--gc-sections" }
+            description   "
+                This option modifies the set of linker flags for
+                building the eCos infra package tests. These flags are removed from
+                the set of global flags if present."
+        }
+
+        cdl_option CYGPKG_INFRA_LDFLAGS_ADD {
+            display "Additional linker flags"
+            flavor  data
+            no_define
+            default_value { "-Wl,--fatal-warnings" }
+            description   "
+                This option modifies the set of linker flags for
+                building the eCos infra package tests. These flags are added to
+                the set of global flags if present."
+        }
+
+        cdl_option CYGPKG_INFRA_TESTS {
+            display "Infra package tests"
+            flavor  data
+            no_define
+            calculated { "tests/cxxsupp" }
+        }
+
     }
 }