From 8e0dcadec548ebd6d2f581c3bcc46d70e147a793 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 15 Jun 1999 22:01:04 +0000 Subject: Patch from Rosimildo DaSilva to make C++ exceptions work on the pc386 BSP with i386-elf. This patch also included changes to the i386-rtemself egcs configuration. --- c/src/lib/libbsp/i386/pc386/bsp_specs | 5 ++++- c/src/lib/libbsp/i386/pc386/startup/Makefile.in | 4 +++- c/src/lib/libbsp/i386/pc386/startup/linkcmds | 7 ++++++- c/src/lib/libbsp/shared/main.c | 10 ++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) (limited to 'c/src/lib') diff --git a/c/src/lib/libbsp/i386/pc386/bsp_specs b/c/src/lib/libbsp/i386/pc386/bsp_specs index 61dac86b53..4411a8f01d 100644 --- a/c/src/lib/libbsp/i386/pc386/bsp_specs +++ b/c/src/lib/libbsp/i386/pc386/bsp_specs @@ -7,6 +7,9 @@ *cpp: %(old_cpp) %{qrtems: -D__embedded__} -Asystem(embedded) +*endfile: +crtend.o%s crtn.o%s + *lib: %{!qrtems: %(old_lib)} %{qrtems: --start-group \ %{!qrtems_debug: -lrtemsall} %{qrtems_debug: -lrtemsall_g} \ @@ -15,7 +18,7 @@ *startfile: %{!qrtems: %(old_startfile)} %{qrtems: \ -%{!qrtems_debug: start.o%s} \ +%{!qrtems_debug: start.o%s crti.o%s crtbegin.o%s} \ %{qrtems_debug: start_g.o%s}} *link: diff --git a/c/src/lib/libbsp/i386/pc386/startup/Makefile.in b/c/src/lib/libbsp/i386/pc386/startup/Makefile.in index 6ff0dff45e..a9a359bea8 100644 --- a/c/src/lib/libbsp/i386/pc386/startup/Makefile.in +++ b/c/src/lib/libbsp/i386/pc386/startup/Makefile.in @@ -39,7 +39,9 @@ include $(RTEMS_ROOT)/make/leaf.cfg # (OPTIONAL) Add local stuff here using += # -DEFINES += +# USE_INIT_FINI tells main.c what C++ help we need. + +DEFINES += -DUSE_INIT_FINI CPPFLAGS += CFLAGS += diff --git a/c/src/lib/libbsp/i386/pc386/startup/linkcmds b/c/src/lib/libbsp/i386/pc386/startup/linkcmds index 5dd7a675a3..712c5cfae4 100644 --- a/c/src/lib/libbsp/i386/pc386/startup/linkcmds +++ b/c/src/lib/libbsp/i386/pc386/startup/linkcmds @@ -67,7 +67,12 @@ SECTIONS _etext = ALIGN( 0x10 ) ; } - .data ADDR( .text ) + SIZEOF( .text ): + .init : + { *( .init ) } = 0x9090 + .fini : + { *( .fini ) } = 0x9090 + + .data ADDR( .fini ) + SIZEOF( .fini ): { _data_start = . ; *(.data) diff --git a/c/src/lib/libbsp/shared/main.c b/c/src/lib/libbsp/shared/main.c index a23e2d8a45..d516ff9b08 100644 --- a/c/src/lib/libbsp/shared/main.c +++ b/c/src/lib/libbsp/shared/main.c @@ -28,6 +28,11 @@ extern rtems_configuration_table Configuration; extern rtems_configuration_table BSP_Configuration; extern rtems_cpu_table Cpu_table; +#if defined(USE_INIT_FINI) +extern void _fini( void ); +extern void _init( void ); +#endif + rtems_interrupt_level bsp_isr_level; /* @@ -82,6 +87,11 @@ int boot_card(int argc, char **argv) * are any. */ +#if defined(USE_INIT_FINI) + atexit( _fini ); + _init(); +#endif + status = main(argc, argv); /* -- cgit v1.2.3