From f1cf4606f967d6cd202d2157e43a25ab4af2bb00 Mon Sep 17 00:00:00 2001 From: Marc Espie Date: Fri, 13 Jul 2001 18:12:22 +0000 Subject: [PATCH] config.gcc (*-*-openbsd*): Add fragment to compile libgcc correctly for shared configurations. 2001-07-13 Marc Espie * config.gcc (*-*-openbsd*): Add fragment to compile libgcc correctly for shared configurations. * config/t-libgcc-pic: New. * config/{i386,m68k,sparc}/t-openbsd: New. * config/openbsd.h: Include cpu_spec in cpp_spec where needed. Support -shared. Support debugging libraries with -g. * config/i386/openbsd.h: Correct ASM_COMMENT_START. Ensure dwarf2 frame information does not emit pointer diffs. * config/sparc/openbsd.h: Ensure dwarf2 frame information does not emit pointer diffs. From-SVN: r43988 --- gcc/ChangeLog | 13 +++++++++++++ gcc/config.gcc | 8 +++++++- gcc/config/i386/openbsd.h | 6 ++++++ gcc/config/i386/t-openbsd | 6 ++++++ gcc/config/m68k/t-openbsd | 5 +++++ gcc/config/openbsd.h | 11 ++++++++--- gcc/config/sparc/openbsd.h | 3 ++- gcc/config/sparc/t-openbsd | 5 +++++ gcc/config/t-libgcc-pic | 2 ++ 9 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 gcc/config/i386/t-openbsd create mode 100644 gcc/config/m68k/t-openbsd create mode 100644 gcc/config/sparc/t-openbsd create mode 100644 gcc/config/t-libgcc-pic diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5143add5c67..7c5ec9c4b2e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2001-07-13 Marc Espie + + * config.gcc (*-*-openbsd*): Add fragment to compile libgcc + correctly for shared configurations. + * config/t-libgcc-pic: New. + * config/{i386,m68k,sparc}/t-openbsd: New. + * config/openbsd.h: Include cpu_spec in cpp_spec where needed. + Support -shared. Support debugging libraries with -g. + * config/i386/openbsd.h: Correct ASM_COMMENT_START. Ensure dwarf2 + frame information does not emit pointer diffs. + * config/sparc/openbsd.h: Ensure dwarf2 frame information does not + emit pointer diffs. + 2001-07-13 Geoffrey Keating Revert Jan Hubicka's patch of Fri Jul 13 14:46:21 CEST 2001. diff --git a/gcc/config.gcc b/gcc/config.gcc index b5d01dcb695..932b00dbb12 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -286,7 +286,7 @@ case $machine in ;; *-*-openbsd*) tm_file=${cpu_type}/openbsd.h - tmake_file="t-libc-ok t-openbsd" + tmake_file="t-libc-ok t-openbsd t-libgcc-pic" xm_defines=POSIX if test x$enable_threads = xyes; then thread_file='posix' @@ -1058,6 +1058,8 @@ i[34567]86-*-netbsd*) use_collect2=yes ;; i[34567]86-*-openbsd*) + # needed to unconfuse gdb + tmake_file="t-libc-ok t-openbsd i386/t-openbsd" # we need collect2 until our bug is fixed... use_collect2=yes ;; @@ -1859,6 +1861,8 @@ m68k*-*-netbsd*) use_collect2=yes ;; m68k*-*-openbsd*) + # needed to unconfuse gdb + tmake_file="t-libc-ok t-openbsd m68k/t-openbsd" float_format=m68k # we need collect2 until our bug is fixed... use_collect2=yes @@ -2830,6 +2834,8 @@ sparc-*-netbsd*) use_collect2=yes ;; sparc-*-openbsd*) + # needed to unconfuse gdb + tmake_file="t-libc-ok t-openbsd sparc/t-openbsd" # we need collect2 until our bug is fixed... use_collect2=yes ;; diff --git a/gcc/config/i386/openbsd.h b/gcc/config/i386/openbsd.h index 18b20e9915d..47057750537 100644 --- a/gcc/config/i386/openbsd.h +++ b/gcc/config/i386/openbsd.h @@ -111,6 +111,8 @@ Boston, MA 02111-1307, USA. */ configuration files... */ #define DWARF2_UNWIND_INFO 0 +#undef ASM_PREFERRED_EH_DATA_FORMAT + /* Assembler format: alignment output. */ /* A C statement to output to the stdio stream FILE an assembler @@ -130,3 +132,7 @@ Boston, MA 02111-1307, USA. */ #endif /* Note that we pick up ASM_OUTPUT_MI_THUNK from unix.h. */ + +#undef ASM_COMMENT_START +#define ASM_COMMENT_START ";#" + diff --git a/gcc/config/i386/t-openbsd b/gcc/config/i386/t-openbsd new file mode 100644 index 00000000000..18304634000 --- /dev/null +++ b/gcc/config/i386/t-openbsd @@ -0,0 +1,6 @@ +# gdb gets confused if pic code is linked with non pic +# We cope by building variants of libgcc. +MULTILIB_OPTIONS = fpic +MULTILIB_MATCHES=fpic=fPIC +LIBGCC = stmp-multilib +INSTALL_LIBGCC = install-multilib diff --git a/gcc/config/m68k/t-openbsd b/gcc/config/m68k/t-openbsd new file mode 100644 index 00000000000..24f9a43b000 --- /dev/null +++ b/gcc/config/m68k/t-openbsd @@ -0,0 +1,5 @@ +# gdb gets confused if pic code is linked with non pic +# We cope by building all variants of libgcc. +MULTILIB_OPTIONS = fpic/fPIC +LIBGCC = stmp-multilib +INSTALL_LIBGCC = install-multilib diff --git a/gcc/config/openbsd.h b/gcc/config/openbsd.h index 87b3a60567f..ff1c1ad540b 100644 --- a/gcc/config/openbsd.h +++ b/gcc/config/openbsd.h @@ -78,12 +78,16 @@ Boston, MA 02111-1307, USA. */ since all code must be compiled with -pthread to work. This two-stage defines makes it easy to pick that for targets that have subspecs. */ +#ifdef CPP_CPU_SPEC +#define OBSD_CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" +#else #define OBSD_CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" +#endif /* LIB_SPEC appropriate for OpenBSD. Select the appropriate libc, depending on profiling and threads. Basically, -lc(_r)?(_p)?, select _r for threads, and _p for p or pg. */ -#define OBSD_LIB_SPEC "-lc%{pthread:_r}%{p:_p}%{!p:%{pg:_p}}" +#define OBSD_LIB_SPEC "%{!shared:-lc%{pthread:_r}%{p:_p}%{!p:%{pg:_p}}}" #ifndef OBSD_HAS_CORRECT_SPECS @@ -103,6 +107,7 @@ Boston, MA 02111-1307, USA. */ pic code. */ #undef ASM_SPEC #define ASM_SPEC "%{fpic:-k} %{fPIC:-k -K} %|" + #else /* Since we use gas, stdin -> - is a good idea, but we don't want to override native specs just for that. */ @@ -116,10 +121,10 @@ Boston, MA 02111-1307, USA. */ #undef LINK_SPEC #ifdef OBSD_NO_DYNAMIC_LIBRARIES #define LINK_SPEC \ - "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{assert*}" + "%{g:%{!nostdlib:-L/usr/lib/debug}} %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{assert*}" #else #define LINK_SPEC \ - "%{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}}} %{shared:-Bshareable -x} -dc -dp %{R*} %{static:-Bstatic} %{assert*}" + "%{g:%{!nostdlib:-L/usr/lib/debug}} %{!shared:%{!nostdlib:%{!r*:%{!e*:-e start}}}} %{shared:-Bshareable -x} -dc -dp %{R*} %{static:-Bstatic} %{assert*}" #endif #undef LIB_SPEC diff --git a/gcc/config/sparc/openbsd.h b/gcc/config/sparc/openbsd.h index c5dc4431726..ba97ac7b9de 100644 --- a/gcc/config/sparc/openbsd.h +++ b/gcc/config/sparc/openbsd.h @@ -64,5 +64,6 @@ Boston, MA 02111-1307, USA. */ configuration files... */ #define DWARF2_UNWIND_INFO 0 -/* Default sparc.h does already define ASM_OUTPUT_MI_THUNK */ +#undef ASM_PREFERRED_EH_DATA_FORMAT +/* Default sparc.h does already define ASM_OUTPUT_MI_THUNK */ diff --git a/gcc/config/sparc/t-openbsd b/gcc/config/sparc/t-openbsd new file mode 100644 index 00000000000..898a24e079d --- /dev/null +++ b/gcc/config/sparc/t-openbsd @@ -0,0 +1,5 @@ +# The native linker doesn't handle linking -fpic code with -fPIC code. Ugh. +# We cope by building both variants of libgcc. +MULTILIB_OPTIONS = fpic/fPIC +LIBGCC = stmp-multilib +INSTALL_LIBGCC = install-multilib diff --git a/gcc/config/t-libgcc-pic b/gcc/config/t-libgcc-pic new file mode 100644 index 00000000000..ff935fe1e05 --- /dev/null +++ b/gcc/config/t-libgcc-pic @@ -0,0 +1,2 @@ +# Compile libgcc2.a with pic. +TARGET_LIBGCC2_CFLAGS = -fPIC -- 2.30.2