+2004-08-25 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR libstdc++/17005 (fix for HP-UX 11.11)
+ * config.gcc (hppa*-*-*): Move MASK_BIG_SWITCH to target_cpu_default2.
+ (hppa*-*-hpux*): Consolidate hppa1.0-*-* code. Rework handling of
+ tm_file including pa-hpux1010.h or pa-hpux1111.h when appropriate.
+ * config/pa/pa-hpux1010.h, config/pa/pa-hpux1111.h: New files.
+ * config/pa/pa-hpux.h (TARGET_HPUX): Define.
+ (LINK_SPEC): Handle march=1.0 option.
+ * config/pa/pa-hpux10.h (TARGET_OS_CPP_BUILTINS): Predefine _XOPEN_UNIX
+ and _XOPEN_SOURCE_EXTENDED for UNIX 95.
+ (SUBTARGET_OPTIONS): New define.
+ (LINK_SPEC): Handle march=1.0 option.
+ (STARTFILE_SPEC): New define.
+ * config/pa/pa-hpux11.h (TARGET_OS_CPP_BUILTINS): Predefine _XOPEN_UNIX
+ and _XOPEN_SOURCE_EXTENDED for UNIX 95. Additionally, predefine
+ _INCLUDE__STDC_A1_SOURCE and _INCLUDE_XOPEN_SOURCE_500 for UNIX 98.
+ (SUBTARGET_OPTIONS): New define.
+ (LINK_SPEC): Handle march=1.0 option.
+ (STARTFILE_SPEC): New define.
+ * config/pa/pa.c (override_options): Add code to process -munix= option.
+ * config/pa/pa.h (pa_unix_string, flag_pa_unix): Declare.
+ (TARGET_HPUX, TARGET_HPUX_10_10, TARGET_HPUX_11_11): Provide default
+ defines.
+ (TARGET_OPTIONS): Add SUBTARGET_OPTIONS to option list.
+ (SUBTARGET_OPTIONS): Provide default define.
+ * config/pa/pa64-hpux.h (STANDARD_STARTFILE_PREFIX_1,
+ STANDARD_STARTFILE_PREFIX_2): New defines.
+ (STARTFILE_SPEC): Provide unix95.o or unix98.o startfiles as necessary.
+ (ENDFILE_SPEC): Use %O.
+ * doc/install.texi (hppa*-*-hpux*): Reword paragraph on -g and gas.
+ Mention issue caused by changing namespace and runtime to UNIX 95/98.
+ * doc/invoke.texi (HPPA options): Move misplaced text to FRV options.
+ Document -munix=std option.
+
2004-08-25 Steven Bosscher <stevenb@suse.de>
* cse.c (cse_around_loop, cse_check_loop_start,
use_fixproto=yes
;;
hppa*64*-*-linux* | parisc*64*-*-linux*)
- target_cpu_default="(MASK_PA_11 | MASK_PA_20 | MASK_BIG_SWITCH)"
+ target_cpu_default="MASK_PA_11|MASK_PA_20"
tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h svr4.h linux.h \
pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h pa/pa64-linux.h"
tmake_file="${tmake_file} pa/t-linux64"
need_64bit_hwint=yes
;;
hppa*-*-linux* | parisc*-*-linux*)
- target_cpu_default="(MASK_PA_11 | MASK_NO_SPACE_REGS | MASK_BIG_SWITCH)"
+ target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS"
tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h pa/pa-linux.h \
pa/pa32-regs.h pa/pa32-linux.h"
tmake_file="${tmake_file} pa/t-linux"
;;
# port not yet contributed.
#hppa*-*-openbsd*)
-# target_cpu_default="(MASK_PA_11 | MASK_BIG_SWITCH)"
+# target_cpu_default="MASK_PA_11"
# ;;
hppa1.1-*-pro*)
- target_cpu_default="(MASK_JUMP_IN_DELAY | MASK_PORTABLE_RUNTIME | MASK_GAS | MASK_NO_SPACE_REGS | MASK_SOFT_FLOAT | MASK_BIG_SWITCH)"
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h pa/pa-pro-end.h libgloss.h"
+ target_cpu_default="MASK_PORTABLE_RUNTIME|MASK_NO_SPACE_REGS|MASK_SOFT_FLOAT"
+ tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h \
+ pa/pa-pro-end.h libgloss.h"
tmake_file="pa/t-pro"
;;
hppa1.1-*-osf*)
- target_cpu_default="(MASK_PA_11 | MASK_BIG_SWITCH)"
+ target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-osf.h"
tmake_file="pa/t-pa"
use_collect2=yes
;;
hppa1.1-*-rtems*)
- target_cpu_default="(MASK_JUMP_IN_DELAY | MASK_PORTABLE_RUNTIME | MASK_GAS | MASK_NO_SPACE_REGS | MASK_SOFT_FLOAT | MASK_BIG_SWITCH)"
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h pa/pa-pro-end.h libgloss.h pa/rtems.h rtems.h"
+ target_cpu_default="MASK_PORTABLE_RUNTIME|MASK_NO_SPACE_REGS|MASK_SOFT_FLOAT"
+ tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h \
+ pa/pa-pro-end.h libgloss.h pa/rtems.h rtems.h"
tmake_file="pa/t-pro t-rtems"
;;
hppa1.1-*-bsd*)
- target_cpu_default="(MASK_PA_11 | MASK_BIG_SWITCH)"
+ target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h"
tmake_file="pa/t-pa"
use_collect2=yes
;;
-hppa1.1-*-hpux10* | hppa2*-*-hpux10*)
- target_cpu_default="(MASK_PA_11 | MASK_BIG_SWITCH)"
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-hpux.h pa/pa-hpux10.h"
- tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
- case ${enable_threads} in
- "")
- if test x$have_pthread_h = xyes ; then
- tmake_file="${tmake_file} pa/t-dce-thr"
- fi
- ;;
- yes | dce)
- tmake_file="${tmake_file} pa/t-dce-thr"
- ;;
+hppa[12]*-*-hpux10*)
+ case ${target} in
+ hppa1.1-*-* | hppa2*-*-*)
+ target_cpu_default="MASK_PA_11"
+ ;;
+ esac
+ tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \
+ pa/pa-hpux.h pa/pa-hpux10.h"
+ case ${target} in
+ *-*-hpux10.[1-9]*)
+ tm_file="${tm_file} pa/pa-hpux1010.h"
+ ;;
esac
- use_collect2=yes
- use_fixproto=yes
- ;;
-hppa1.0-*-hpux10*)
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-hpux.h pa/pa-hpux10.h"
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
case ${enable_threads} in
"")
use_fixproto=yes
;;
hppa*64*-*-hpux11*)
+ target_cpu_default="MASK_PA_11|MASK_PA_20"
if test x$gnu_ld = xyes
then
- target_cpu_default="(MASK_PA_11 | MASK_PA_20 | MASK_GAS | MASK_GNU_LD | MASK_BIG_SWITCH)"
- else
- target_cpu_default="(MASK_PA_11 | MASK_PA_20 | MASK_GAS | MASK_BIG_SWITCH)"
+ target_cpu_default="${target_cpu_default}|MASK_GNU_LD"
fi
if test x$gas = xyes
then
- tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h \
- pa/pa64-regs.h pa/pa-hpux.h \
- pa/pa-hpux11.h pa/pa-64.h pa/pa64-hpux.h"
+ tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h \
+ pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux11.h"
else
tm_file="pa/pa64-start.h ${tm_file} dbxelf.h pa/elf.h \
- pa/pa64-regs.h pa/pa-hpux.h \
- pa/pa-hpux11.h pa/pa-64.h pa/pa64-hpux.h"
+ pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux11.h"
fi
+ case ${target} in
+ *-*-hpux11.11)
+ tm_file="${tm_file} pa/pa-hpux1111.h pa/pa-64.h pa/pa64-hpux.h"
+ ;;
+ *)
+ tm_file="${tm_file} pa/pa-64.h pa/pa64-hpux.h"
+ ;;
+ esac
need_64bit_hwint=yes
tmake_file="pa/t-pa64 pa/t-pa-hpux"
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
;;
esac
;;
-hppa1.1-*-hpux11* | hppa2*-*-hpux11*)
- target_cpu_default="(MASK_PA_11 | MASK_BIG_SWITCH)"
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-hpux.h pa/pa-hpux11.h"
- tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
- case x${enable_threads} in
- xyes | xposix )
- thread_file=posix
+hppa[12]*-*-hpux11*)
+ case ${target} in
+ hppa1.1-*-* | hppa2*-*-*)
+ target_cpu_default="MASK_PA_11"
+ ;;
+ esac
+ tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h \
+ pa/pa-hpux.h pa/pa-hpux11.h"
+ case ${target} in
+ *-*-hpux11.[1-9]*)
+ tm_file="${tm_file} pa/pa-hpux1111.h"
;;
esac
- use_collect2=yes
- ;;
-hppa1.0-*-hpux11*)
- tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-hpux.h pa/pa-hpux11.h"
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
case x${enable_threads} in
xyes | xposix )
;;
hppa*-*-* | parisc*-*-*)
+ target_cpu_default2="MASK_BIG_SWITCH"
if test x$gas = xyes
then
- target_cpu_default2="MASK_GAS|MASK_JUMP_IN_DELAY"
+ target_cpu_default2="${target_cpu_default2}|MASK_GAS|MASK_JUMP_IN_DELAY"
fi
;;
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+/* HP-UX UNIX features. */
+#undef TARGET_HPUX
+#define TARGET_HPUX 1
+
#undef TARGET_DEFAULT
#define TARGET_DEFAULT MASK_BIG_SWITCH
#undef LINK_SPEC
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_PA_11)
#define LINK_SPEC \
- "%{!mpa-risc-1-0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}%{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{g*:-a archive} %{shared:-b}"
+ "%{!mpa-risc-1-0:%{!march=1.0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}}%{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{g*:-a archive} %{shared:-b}"
#else
#define LINK_SPEC \
"%{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{g*:-a archive} %{shared:-b}"
support). We define __STDCPP__ to get certain system headers
(notably assert.h) to assume standard preprocessor behavior in C++. */
#undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_assert ("system=hpux"); \
- builtin_assert ("system=unix"); \
- builtin_define ("__hp9000s800"); \
- builtin_define ("__hp9000s800__"); \
- builtin_define ("__hpux"); \
- builtin_define ("__hpux__"); \
- builtin_define ("__unix"); \
- builtin_define ("__unix__"); \
- if (c_dialect_cxx ()) \
- { \
- builtin_define ("_HPUX_SOURCE"); \
- builtin_define ("_INCLUDE_LONGLONG"); \
- builtin_define ("__STDC_EXT__"); \
- builtin_define ("__STDCPP__"); \
- } \
- else if (!flag_iso) \
- { \
- builtin_define ("_HPUX_SOURCE"); \
- if (preprocessing_trad_p ()) \
- { \
- builtin_define ("hp9000s800"); \
- builtin_define ("hppa"); \
- builtin_define ("hpux"); \
- builtin_define ("unix"); \
- builtin_define ("__CLASSIC_C__"); \
- builtin_define ("_PWB"); \
- builtin_define ("PWB"); \
- } \
- else \
- builtin_define ("__STDC_EXT__"); \
- } \
- if (TARGET_SIO) \
- builtin_define ("_SIO"); \
- else \
- { \
- builtin_define ("__hp9000s700"); \
- builtin_define ("__hp9000s700__"); \
- builtin_define ("_WSIO"); \
- } \
- } \
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_assert ("system=hpux"); \
+ builtin_assert ("system=unix"); \
+ builtin_define ("__hp9000s800"); \
+ builtin_define ("__hp9000s800__"); \
+ builtin_define ("__hpux"); \
+ builtin_define ("__hpux__"); \
+ builtin_define ("__unix"); \
+ builtin_define ("__unix__"); \
+ if (c_dialect_cxx ()) \
+ { \
+ builtin_define ("_HPUX_SOURCE"); \
+ builtin_define ("_INCLUDE_LONGLONG"); \
+ builtin_define ("__STDC_EXT__"); \
+ builtin_define ("__STDCPP__"); \
+ } \
+ else if (!flag_iso) \
+ { \
+ builtin_define ("_HPUX_SOURCE"); \
+ if (preprocessing_trad_p ()) \
+ { \
+ builtin_define ("hp9000s800"); \
+ builtin_define ("hppa"); \
+ builtin_define ("hpux"); \
+ builtin_define ("unix"); \
+ builtin_define ("__CLASSIC_C__"); \
+ builtin_define ("_PWB"); \
+ builtin_define ("PWB"); \
+ } \
+ else \
+ builtin_define ("__STDC_EXT__"); \
+ } \
+ if (flag_pa_unix >= 1995) \
+ { \
+ builtin_define ("_XOPEN_UNIX"); \
+ builtin_define ("_XOPEN_SOURCE_EXTENDED"); \
+ } \
+ if (TARGET_SIO) \
+ builtin_define ("_SIO"); \
+ else \
+ { \
+ builtin_define ("__hp9000s700"); \
+ builtin_define ("__hp9000s700__"); \
+ builtin_define ("_WSIO"); \
+ } \
+ } \
while (0)
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS \
+ { "unix=", &pa_unix_string, \
+ N_("Specify UNIX standard for predefines and linking.\n" \
+ "Supported value is 93."), 0}
+
#define CPP_SPEC "%{threads: -D_REENTRANT -D_DCE_THREADS}"
/* We can debug dynamically linked executables on hpux9; we also want
#undef LINK_SPEC
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_PA_11)
#define LINK_SPEC \
- "%{!mpa-risc-1-0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}\
+ "%{!mpa-risc-1-0:%{!march=1.0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}}\
%{!shared:%{p:-L/lib/libp %{!static:\
%nWarning: consider linking with `-static' as system libraries with\n\
%n profiling support are only provided in archive format}}}\
--- /dev/null
+/* Definitions of target machine for GNU compiler, for HP PA-RISC
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* HP-UX 10.10 UNIX 95 features. */
+#undef TARGET_HPUX_10_10
+#define TARGET_HPUX_10_10 1
+
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS \
+ { "unix=", &pa_unix_string, \
+ N_("Specify UNIX standard for predefines and linking.\n" \
+ "Supported values are 93 and 95."), 0}
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}} \
+ %{!munix=93:unix95%O%s}}"
the definition of __cplusplus. We define _INCLUDE_LONGLONG
to prevent nlist.h from defining __STDC_32_MODE__ (no longlong
support). We define __STDCPP__ to get certain system headers
- (notably assert.h) to assume standard preprocessor behavior in C++.
-
- The C99 support is incomplete. We define _INCLUDE__STDC_A1_SOURCE
- to provide the extended multibyte and wide-character utilities available
- under HP-UX 11i. Defining _HPUX_SOURCE would give us some more
- features but it also adds stuff that isn't in C99. */
+ (notably assert.h) to assume standard preprocessor behavior in C++. */
#undef TARGET_OS_CPP_BUILTINS
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_assert ("system=hpux"); \
- builtin_assert ("system=unix"); \
- builtin_define ("__hp9000s800"); \
- builtin_define ("__hp9000s800__"); \
- builtin_define ("__hpux"); \
- builtin_define ("__hpux__"); \
- builtin_define ("__unix"); \
- builtin_define ("__unix__"); \
- if (c_dialect_cxx ()) \
- { \
- builtin_define ("_HPUX_SOURCE"); \
- builtin_define ("_INCLUDE_LONGLONG"); \
- builtin_define ("_INCLUDE__STDC_A1_SOURCE"); \
- builtin_define ("__STDC_EXT__"); \
- builtin_define ("__STDCPP__"); \
- } \
- else \
- { \
- if (!flag_iso) \
- { \
- builtin_define ("_HPUX_SOURCE"); \
- builtin_define ("_INCLUDE__STDC_A1_SOURCE"); \
- if (preprocessing_trad_p ()) \
- { \
- builtin_define ("hp9000s800"); \
- builtin_define ("hppa"); \
- builtin_define ("hpux"); \
- builtin_define ("unix"); \
- builtin_define ("__CLASSIC_C__"); \
- builtin_define ("_PWB"); \
- builtin_define ("PWB"); \
- } \
- else \
- builtin_define ("__STDC_EXT__"); \
- } \
- else if (flag_isoc99) \
- { \
- builtin_define ("_INCLUDE__STDC_A1_SOURCE"); \
- } \
- if (!TARGET_64BIT) \
- builtin_define ("_ILP32"); \
- } \
- if (TARGET_SIO) \
- builtin_define ("_SIO"); \
- else \
- { \
- builtin_define ("__hp9000s700"); \
- builtin_define ("__hp9000s700__"); \
- builtin_define ("_WSIO"); \
- } \
- } \
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_assert ("system=hpux"); \
+ builtin_assert ("system=unix"); \
+ builtin_define ("__hp9000s800"); \
+ builtin_define ("__hp9000s800__"); \
+ builtin_define ("__hpux"); \
+ builtin_define ("__hpux__"); \
+ builtin_define ("__unix"); \
+ builtin_define ("__unix__"); \
+ if (c_dialect_cxx ()) \
+ { \
+ builtin_define ("_HPUX_SOURCE"); \
+ builtin_define ("_INCLUDE_LONGLONG"); \
+ builtin_define ("__STDC_EXT__"); \
+ builtin_define ("__STDCPP__"); \
+ } \
+ else \
+ { \
+ if (!flag_iso) \
+ { \
+ builtin_define ("_HPUX_SOURCE"); \
+ if (preprocessing_trad_p ()) \
+ { \
+ builtin_define ("hp9000s800"); \
+ builtin_define ("hppa"); \
+ builtin_define ("hpux"); \
+ builtin_define ("unix"); \
+ builtin_define ("__CLASSIC_C__"); \
+ builtin_define ("_PWB"); \
+ builtin_define ("PWB"); \
+ } \
+ else \
+ builtin_define ("__STDC_EXT__"); \
+ } \
+ } \
+ if (!TARGET_64BIT) \
+ builtin_define ("_ILP32"); \
+ if (flag_pa_unix >= 1995) \
+ { \
+ builtin_define ("_XOPEN_UNIX"); \
+ builtin_define ("_XOPEN_SOURCE_EXTENDED"); \
+ } \
+ if (TARGET_HPUX_11_11) \
+ { \
+ if (flag_pa_unix >= 1998) \
+ { \
+ builtin_define ("_INCLUDE__STDC_A1_SOURCE"); \
+ builtin_define ("_INCLUDE_XOPEN_SOURCE_500"); \
+ } \
+ else if (flag_isoc94 || flag_isoc99 || c_dialect_cxx ()) \
+ warning ("-munix=98 option required for C89 " \
+ "Amendment 1 features.\n"); \
+ } \
+ if (TARGET_SIO) \
+ builtin_define ("_SIO"); \
+ else \
+ { \
+ builtin_define ("__hp9000s700"); \
+ builtin_define ("__hp9000s700__"); \
+ builtin_define ("_WSIO"); \
+ } \
+ } \
while (0)
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS \
+ { "unix=", &pa_unix_string, \
+ N_("Specify UNIX standard for predefines and linking.\n" \
+ "Supported values are 93 and 95."), 0}
+
#undef CPP_SPEC
#define CPP_SPEC \
"%{mt|pthread:-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L}"
#undef LINK_SPEC
#if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & MASK_PA_11)
#define LINK_SPEC \
- "%{!mpa-risc-1-0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}\
+ "%{!mpa-risc-1-0:%{!march=1.0:%{!shared:-L/lib/pa1.1 -L/usr/lib/pa1.1 }}}\
%{!shared:%{p:-L/lib/libp -L/usr/lib/libp %{!static:\
%nWarning: consider linking with `-static' as system libraries with\n\
%n profiling support are only provided in archive format}}}\
%{mt|pthread:-lpthread} -lc \
%{static:%{!nolibdld:-a shared -ldld -a archive -lc}}}"
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}} \
+ %{!munix=93:unix95%O%s}}"
+
/* Under hpux11, the normal location of the `ld' and `as' programs is the
/usr/ccs/bin directory. */
--- /dev/null
+/* Definitions of target machine for GNU compiler, for HP PA-RISC
+ Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA. */
+
+/* HP-UX 11i multibyte and UNIX 98 extensions. */
+#undef TARGET_HPUX_11_11
+#define TARGET_HPUX_11_11 1
+
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS \
+ { "unix=", &pa_unix_string, \
+ N_("Specify UNIX standard for predefines and linking.\n" \
+ "Supported values are 93, 95 and 98."), 0}
+
+#undef STARTFILE_SPEC
+#define STARTFILE_SPEC \
+ "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}} \
+ %{munix=95:unix95%O%s}%{!munix=93:%{!munix=95:unix98%O%s}}}"
/* String to hold which cpu we are scheduling for. */
const char *pa_cpu_string;
+/* String used with the -munix= option. */
+const char *pa_unix_string;
+
+/* The UNIX standard to use for predefines and linking. */
+int flag_pa_unix;
+
/* Counts for the number of callee-saved general and floating point
registers which were saved by the current function's prologue. */
static int gr_saved, fr_saved;
warning ("unknown -march= option (%s).\nValid options are 1.0, 1.1, and 2.0\n", pa_arch_string);
}
+ if (TARGET_HPUX)
+ {
+ /* Set the default UNIX standard for HP-UX. This affects the
+ predefines and startfiles used for the target. */
+ if (pa_unix_string == NULL)
+ pa_unix_string
+ = TARGET_HPUX_11_11 ? "98" : (TARGET_HPUX_10_10 ? "95" : "93");
+
+ if (!strcmp (pa_unix_string, "93"))
+ flag_pa_unix = 1993;
+ else if (!strcmp (pa_unix_string, "95"))
+ flag_pa_unix = 1995;
+ else if (TARGET_HPUX_11_11)
+ {
+ if (!strcmp (pa_unix_string, "98"))
+ flag_pa_unix = 1998;
+ else
+ warning ("unknown -munix= option (%s).\n"
+ "Valid options are 93, 95 and 98.\n",
+ pa_unix_string);
+ }
+ else if (TARGET_HPUX_10_10)
+ warning ("unknown -munix= option (%s)."
+ "\nValid options are 93 and 95.\n",
+ pa_unix_string);
+ else
+ warning ("unknown -munix= option (%s).\nValid option is 93.\n",
+ pa_unix_string);
+ }
+
if (pa_fixed_range_string)
fix_range (pa_fixed_range_string);
extern const char *pa_cpu_string;
extern enum processor_type pa_cpu;
+/* For -munix= option. */
+extern const char *pa_unix_string;
+extern int flag_pa_unix;
+
#define pa_cpu_attr ((enum attr_cpu)pa_cpu)
/* Print subsidiary information on the compiler version in use. */
#define TARGET_SOM 0
#endif
+/* HP-UX UNIX features. */
+#ifndef TARGET_HPUX
+#define TARGET_HPUX 0
+#endif
+
+/* HP-UX 10.10 UNIX 95 features. */
+#ifndef TARGET_HPUX_10_10
+#define TARGET_HPUX_10_10 0
+#endif
+
+/* HP-UX 11i multibyte and UNIX 98 extensions. */
+#ifndef TARGET_HPUX_11_11
+#define TARGET_HPUX_11_11 0
+#endif
+
/* The following three defines are potential target switches. The current
defines are optimal given the current capabilities of GAS and GNU ld. */
#define TARGET_OPTIONS \
{ \
{ "arch=", &pa_arch_string, \
- N_("Specify PA-RISC architecture for code generation. " \
+ N_("Specify PA-RISC architecture for code generation.\n" \
"Values are 1.0, 1.1 and 2.0."), 0}, \
{ "fixed-range=", &pa_fixed_range_string, \
- N_("Specify range of registers to make fixed"), 0}, \
+ N_("Specify range of registers to make fixed."), 0}, \
{ "schedule=", &pa_cpu_string, \
- N_("Specify CPU for scheduling purposes"), 0} \
+ N_("Specify CPU for scheduling purposes."), 0}, \
+ SUBTARGET_OPTIONS \
}
+#ifndef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS
+#endif
+
/* Support for a compile-time default CPU, et cetera. The rules are:
--with-schedule is ignored if -mschedule is specified.
--with-arch is ignored if -march is specified. */
#define MD_EXEC_PREFIX "/usr/ccs/bin"
#endif
+/* Default prefixes. */
+
+#undef STANDARD_STARTFILE_PREFIX_1
+#define STANDARD_STARTFILE_PREFIX_1 "/lib/pa20_64/"
+
+#undef STANDARD_STARTFILE_PREFIX_2
+#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/pa20_64/"
+
/* Under hpux11 the normal location of the various pa20_64 *crt*.o files
is the /usr/ccs/lib/pa20_64 directory. Some files may also be in the
/opt/langtools/lib/pa20_64 directory. */
/* The following STARTFILE_SPEC and ENDFILE_SPEC defines provide the
magic needed to run initializers and finalizers. */
#undef STARTFILE_SPEC
+#if TARGET_HPUX_11_11
#define STARTFILE_SPEC \
- "%{!shared: %{!symbolic: crt0.o%s}} %{static:crtbeginT.o%s} \
- %{!static:%{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
+ "%{!shared: %{!symbolic: crt0%O%s} %{munix=95:unix95.o%s} \
+ %{!munix=93:%{!munix=95:unix98%O%s}}} %{static:crtbeginT%Oos} \
+ %{!static:%{!shared:crtbegin%O%s} %{shared:crtbeginS%O%s}}"
+#else
+#define STARTFILE_SPEC \
+ "%{!shared: %{!symbolic: crt0%O%s} %{munix=95:unix95%O%s}} \
+ %{static:crtbeginT%O%s} %{!static:%{!shared:crtbegin%O%s} \
+ %{shared:crtbeginS%O%s}}"
+#endif
#undef ENDFILE_SPEC
-#define ENDFILE_SPEC "%{!shared:crtend.o%s} %{shared:crtendS.o%s}"
+#define ENDFILE_SPEC "%{!shared:crtend%O%s} %{shared:crtendS%O%s}"
/* Since HP uses the .init and .fini sections for array initializers
and finalizers, we need different defines for INIT_SECTION_ASM_OP
you may encounter a variety of problems when using the HP assembler.
Specifically, @option{-g} does not work on HP-UX (since that system
-uses a peculiar debugging format which GCC does not know about), unless you
-use GAS and GDB and configure GCC with the
+uses a peculiar debugging format which GCC does not know about), unless
+you use GAS and GDB. It may be helpful to configure GCC with the
@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
-@option{--with-as=@dots{}} options.
+@option{--with-as=@dots{}} options to ensure that GCC can find GAS.
If you wish to use the pa-risc 2.0 architecture support with a 32-bit
runtime, you must use either the HP assembler, or gas/binutils 2.11
TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different
default scheduling model is desired.
+As of GCC 3.5, GCC uses the UNIX 95 namespace for HP-UX 10.10
+through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later.
+This namespace change might cause problems when bootstrapping with
+an earlier version of GCC or the HP compiler as essentially the same
+namespace is required for an entire build. This problem can be avoided
+in a number of ways. With HP cc, @env{UNIX_STD} can be set to @samp{95}
+or @samp{98}. Another way is to add an appropriate set of predefines
+to @env{CC}. The description for the @option{munix=} option contains
+a list of the predefines used with each standard.
+
More specific information to @samp{hppa*-hp-hpux*} targets follows.
@html
-mno-space-regs -msoft-float -mpa-risc-1-0 @gol
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime @gol
-mschedule=@var{cpu-type} -mspace-regs -msio -mwsio @gol
--nolibdld -static -threads}
+-munix=@var{unix-std} -nolibdld -static -threads}
@emph{i386 and x86-64 Options}
@gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol
Do not use multiply and add/subtract instructions.
+@item -mfdpic
+@opindex mfdpic
+
+Select the FDPIC ABI, that uses function descriptors to represent
+pointers to functions. Without any PIC/PIE-related options, it
+implies @option{-fPIE}. With @option{-fpic} or @option{-fpie}, it
+assumes GOT entries and small data are within a 12-bit range from the
+GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
+are computed with 32 bits.
+
+@item -minline-plt
+@opindex minline-plt
+
+Enable inlining of PLT entries in function calls to functions that are
+not known to bind locally. It has no effect without @option{-mfdpic}.
+It's enabled by default if optimizing for speed and compiling for
+shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
+optimization option such as @option{-O3} or above is present in the
+command line.
+
+@item -mgprel-ro
+@opindex mgprel-ro
+
+Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
+that is known to be in read-only sections. It's enabled by default,
+except for @option{-fpic} or @option{-fpie}: even though it may help
+make the global offset table smaller, it trades 1 instruction for 4.
+With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
+one of which may be shared by multiple symbols, and it avoids the need
+for a GOT entry for the referenced symbol, so it's more likely to be a
+win. If it is not, @option{-mno-gprel-ro} can be used to disable it.
+
+@item -multilib-library-pic
+@opindex multilib-library-pic
+
+Link with the (library, not FD) pic libraries. It's implied by
+@option{-mlibrary-pic}, as well as by @option{-fPIC} and
+@option{-fpic} without @option{-mfdpic}. You should never have to use
+it explicitly.
+
+@item -mlinked-fp
+@opindex mlinked-fp
+
+Follow the EABI requirement of always creating a frame pointer whenever
+a stack frame is allocated. This option is enabled by default and can
+be disabled with @option{-mno-linked-fp}.
+
@item -mlibrary-pic
@opindex mlibrary-pic
architectures will run on higher numbered architectures, but not the
other way around.
-PA 2.0 support currently requires gas snapshot 19990413 or later. The
-next release of binutils (current is 2.9.1) will probably contain PA 2.0
-support.
-
@item -mpa-risc-1-0
@itemx -mpa-risc-1-1
@itemx -mpa-risc-2-0
@env{PATH}. The linker used by GCC can be printed using @samp{which
`gcc -print-prog-name=ld`}.
-@item -mfdpic
-@opindex mfdpic
-
-Select the FDPIC ABI, that uses function descriptors to represent
-pointers to functions. Without any PIC/PIE-related options, it
-implies @option{-fPIE}. With @option{-fpic} or @option{-fpie}, it
-assumes GOT entries and small data are within a 12-bit range from the
-GOT base address; with @option{-fPIC} or @option{-fPIE}, GOT offsets
-are computed with 32 bits.
-
-@item -minline-plt
-@opindex minline-plt
-
-Enable inlining of PLT entries in function calls to functions that are
-not known to bind locally. It has no effect without @option{-mfdpic}.
-It's enabled by default if optimizing for speed and compiling for
-shared libraries (i.e., @option{-fPIC} or @option{-fpic}), or when an
-optimization option such as @option{-O3} or above is present in the
-command line.
-
-@item -mgprel-ro
-@opindex mgprel-ro
-
-Enable the use of @code{GPREL} relocations in the FDPIC ABI for data
-that is known to be in read-only sections. It's enabled by default,
-except for @option{-fpic} or @option{-fpie}: even though it may help
-make the global offset table smaller, it trades 1 instruction for 4.
-With @option{-fPIC} or @option{-fPIE}, it trades 3 instructions for 4,
-one of which may be shared by multiple symbols, and it avoids the need
-for a GOT entry for the referenced symbol, so it's more likely to be a
-win. If it is not, @option{-mno-gprel-ro} can be used to disable it.
-
-@item -multilib-library-pic
-@opindex multilib-library-pic
-
-Link with the (library, not FD) pic libraries. It's implied by
-@option{-mlibrary-pic}, as well as by @option{-fPIC} and
-@option{-fpic} without @option{-mfdpic}. You should never have to use
-it explicitly.
-
-@item -mlinked-fp
-@opindex mlinked-fp
-
-Follow the EABI requirement of always creating a frame pointer whenever
-a stack frame is allocated. This option is enabled by default and can
-be disabled with @option{-mno-linked-fp}.
-
@item -mlong-calls
@opindex mno-long-calls
Generate code that uses long call sequences. This ensures that a call
However, an indirect call is used on 32-bit ELF systems in pic code
and it is quite long.
+@item -munix=@var{unix-std}
+@opindex march
+Generate compiler predefines and select a startfile for the specified
+UNIX standard. The choices for @var{unix-std} are @samp{93}, @samp{95}
+and @samp{98}. @samp{93} is supported on all HP-UX versions. @samp{95}
+is available on HP-UX 10.10 and later. @samp{98} is available on HP-UX
+11.11 and later. The default values are @samp{93} for HP-UX 10.00,
+@samp{95} for HP-UX 10.10 though to 11.00, and @samp{98} for HP-UX 11.11
+and later.
+
+@option{-munix=93} provides the same predefines as GCC 3.3 and 3.4.
+@option{-munix=95} provides additional predefines for @code{XOPEN_UNIX}
+and @code{_XOPEN_SOURCE_EXTENDED}, and the startfile @file{unix95.o}.
+@option{-munix=98} provides additional predefines for @code{_XOPEN_UNIX},
+@code{_XOPEN_SOURCE_EXTENDED}, @code{_INCLUDE__STDC_A1_SOURCE} and
+@code{_INCLUDE_XOPEN_SOURCE_500}, and the startfile @file{unix98.o}.
+
+It is @emph{important} to note that this option changes the interfaces
+for various library routines. It also affects the operational behavior
+of the C library. Thus, @emph{extreme} care is needed in using this
+option.
+
+Library code that is intended to operate with more than one UNIX
+standard must test, set and restore the variable @var{__xpg4_extended_mask}
+as appropriate. Most GNU software doesn't provide this capability.
+
@item -nolibdld
@opindex nolibdld
Suppress the generation of link options to search libdld.sl when the