]> gcc.gnu.org Git - gcc.git/commitdiff
pa.h (STARTING_FRAME_OFFSET): Change offset for TARGET_64BIT to 16.
authorJohn David Anglin <dave@hiauly1.hia.nrc.ca>
Sun, 10 Nov 2002 01:14:48 +0000 (01:14 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sun, 10 Nov 2002 01:14:48 +0000 (01:14 +0000)
* pa.h (STARTING_FRAME_OFFSET): Change offset for TARGET_64BIT to 16.
* config.gcc (hppa*64*-*-linux*): Shorten lines in tm_file define.
(hppa*64*-*-hpux11*): Likewise.  Use elfos.h with gas.
* pa.c (output_millicode_call): Use symbol difference rather than
$PIC_pcrel$0 when using HP assembler.
* pa64-hpux.h (TARGET_GAS): Define to 1 or 0 depending on whether or
not elfos.h (i.e., gas) is being used.
(ASM_FILE_START, STRING_ASM_OP, TEXT_SECTION_ASM_OP,
DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_COMMON,
ASM_OUTPUT_ALIGNED_LOCAL, GLOBAL_ASM_OP, ASM_DECLARE_FUNCTION_NAME,
ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL,
ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL): Define when
using elfos.h.
(TARGET_ASM_GLOBALIZE_LABEL): Undefine when using elfos.h.
(DWARF2_ASM_LINE_DEBUG_INFO): Delete.
(ASM_FILE_START): Add standard .SPACE and .SUBSPA defines when not
using elfos.h.
(TEXT_SECTION_ASM_OP, READONLY_DATA_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
BSS_SECTION_ASM_OP): New HP style defines when not using elfos.h.
(TARGET_ASM_NAMED_SECTION, MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL):
Don't define when not using elfos.h.
(ASM_DECLARE_RESULT): Don't define.
* doc/install.texi (hppa*-hp-hpux*): Remove statement that HP assembler
doesn't work on hppa64-hp-hpux11.
(hppa*-hp-hpux11): Update.

From-SVN: r58967

gcc/ChangeLog
gcc/config.gcc
gcc/config/pa/pa.c
gcc/config/pa/pa.h
gcc/config/pa/pa64-hpux.h
gcc/doc/install.texi

index 540c69a95866c19be2a07728fa8a0177940d31d0..e07c1c0c67aa48009bea49864f7bcc27be3f2fe7 100644 (file)
@@ -1,3 +1,32 @@
+2002-11-09  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+       * pa.h (STARTING_FRAME_OFFSET): Change offset for TARGET_64BIT to 16.
+
+       * config.gcc (hppa*64*-*-linux*): Shorten lines in tm_file define.
+       (hppa*64*-*-hpux11*): Likewise.  Use elfos.h with gas.
+       * pa.c (output_millicode_call): Use symbol difference rather than
+       $PIC_pcrel$0 when using HP assembler.
+       * pa64-hpux.h (TARGET_GAS): Define to 1 or 0 depending on whether or
+       not elfos.h (i.e., gas) is being used.
+       (ASM_FILE_START, STRING_ASM_OP, TEXT_SECTION_ASM_OP,
+       DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_COMMON,
+       ASM_OUTPUT_ALIGNED_LOCAL, GLOBAL_ASM_OP, ASM_DECLARE_FUNCTION_NAME,
+       ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL,
+       ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL): Define when
+       using elfos.h.
+       (TARGET_ASM_GLOBALIZE_LABEL): Undefine when using elfos.h.
+       (DWARF2_ASM_LINE_DEBUG_INFO): Delete.
+       (ASM_FILE_START): Add standard .SPACE and .SUBSPA defines when not
+       using elfos.h.
+       (TEXT_SECTION_ASM_OP, READONLY_DATA_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
+       BSS_SECTION_ASM_OP): New HP style defines when not using elfos.h.
+       (TARGET_ASM_NAMED_SECTION, MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL):
+       Don't define when not using elfos.h.
+       (ASM_DECLARE_RESULT): Don't define.
+       * doc/install.texi (hppa*-hp-hpux*): Remove statement that HP assembler
+       doesn't work on hppa64-hp-hpux11.
+       (hppa*-hp-hpux11): Update.
+
 2002-11-09  Jason Thorpe  <thorpej@wasabisystems.com>
 
        * config/mips/netbsd.h (SUBTARGET_ASM_SPEC): Don't pass -KPIC
index edfe51bfe46d3df559184c325804b550cfc19a08..27bff5229efd36d872a3c15efc1cf83ed3892319 100644 (file)
@@ -733,8 +733,8 @@ h8300-*-*)
        ;;
 hppa*64*-*-linux* | parisc*64*-*-linux*)
        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"
+       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=pa/t-linux64
        gas=yes gnu_ld=yes
        ;;
@@ -867,7 +867,16 @@ hppa1.0-*-hpux10*)
        ;;
 hppa*64*-*-hpux11*)
        xm_defines=POSIX
-       tm_file="pa/pa64-start.h ${tm_file} pa/pa64-regs.h pa/long_double.h pa/elf.h pa/pa-hpux.h pa/pa-hpux11.h pa/pa-64.h pa/pa64-hpux.h"
+       if test x$gas = xyes
+       then
+               tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h  \
+                        pa/pa64-regs.h pa/long_double.h pa/pa-hpux.h \
+                        pa/pa-hpux11.h pa/pa-64.h pa/pa64-hpux.h"
+       else
+               tm_file="pa/pa64-start.h ${tm_file} dbxelf.h pa/elf.h \
+                        pa/pa64-regs.h pa/long_double.h pa/pa-hpux.h \
+                        pa/pa-hpux11.h pa/pa-64.h pa/pa64-hpux.h"
+       fi
        tmake_file="pa/t-pa64 pa/t-pa-hpux"
        xmake_file="pa/x-ada"
        target_cpu_default="(MASK_PA_11|MASK_PA_20|MASK_GAS)"
index b51e946852c253b98d3ce5f3b8e89791199e531b..034a647e9bac03de3a7526908ba25c1e1d05ed65 100644 (file)
@@ -6238,8 +6238,21 @@ output_millicode_call (insn, call_dest)
             loaded objects.  Using a pc-relative sequence also avoids
             problems related to the implicit use of the gp register.  */
          output_asm_insn ("b,l .+8,%%r1", xoperands);
-         output_asm_insn ("addil L'%0-$PIC_pcrel$0+4,%%r1", xoperands);
-         output_asm_insn ("ldo R'%0-$PIC_pcrel$0+8(%%r1),%%r1", xoperands);
+
+         if (TARGET_GAS)
+           {
+             output_asm_insn ("addil L'%0-$PIC_pcrel$0+4,%%r1", xoperands);
+             output_asm_insn ("ldo R'%0-$PIC_pcrel$0+8(%%r1),%%r1", xoperands);
+           }
+         else
+           {
+             xoperands[1] = gen_label_rtx ();
+             output_asm_insn ("addil L'%0-%l1,%%r1", xoperands);
+             ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
+                                        CODE_LABEL_NUMBER (xoperands[1]));
+             output_asm_insn ("ldo R'%0-%l1(%%r1),%%r1", xoperands);
+           }
+
          output_asm_insn ("bve,l (%%r1),%%r2", xoperands);
        }
       else if (TARGET_PORTABLE_RUNTIME)
@@ -6269,6 +6282,9 @@ output_millicode_call (insn, call_dest)
        }
       else
        {
+         output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
+         output_asm_insn ("addi 16,%%r1,%%r31", xoperands);
+
          if (TARGET_SOM || !TARGET_GAS)
            {
              /* The HP assembler can generate relocations for the
@@ -6276,8 +6292,6 @@ output_millicode_call (insn, call_dest)
                 millicode symbol but not an arbitrary external
                 symbol when generating SOM output.  */
              xoperands[1] = gen_label_rtx ();
-             output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
-             output_asm_insn ("addi 16,%%r1,%%r31", xoperands);
              ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L",
                                         CODE_LABEL_NUMBER (xoperands[1]));
              output_asm_insn ("addil L'%0-%l1,%%r1", xoperands);
@@ -6285,8 +6299,6 @@ output_millicode_call (insn, call_dest)
            }
          else
            {
-             output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
-             output_asm_insn ("addi 16,%%r1,%%r31", xoperands);
              output_asm_insn ("addil L'%0-$PIC_pcrel$0+8,%%r1", xoperands);
              output_asm_insn ("ldo R'%0-$PIC_pcrel$0+12(%%r1),%%r1",
                               xoperands);
index a3f24b6d6e341d7ae6b9cc83618f83aafaf62d73..d01aedf0bff0803b731cb3761039537f9314f92c 100644 (file)
@@ -672,8 +672,10 @@ extern struct rtx_def *hppa_pic_save_rtx PARAMS ((void));
 /* Offset within stack frame to start allocating local variables at.
    If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
    first local allocated.  Otherwise, it is the offset to the BEGINNING
-   of the first local allocated.  */
-#define STARTING_FRAME_OFFSET 8
+   of the first local allocated.  The start of the locals must lie on
+   a STACK_BOUNDARY or else the frame size of leaf functions will not
+   be zero.  */
+#define STARTING_FRAME_OFFSET (TARGET_64BIT ? 16 : 8)
 
 /* If we generate an insn to push BYTES bytes,
    this says how many the stack pointer really advances by.
index 6d9728d6bff678b122ab7af4a85a494e2adaf00c..1966a40420fccdb520567454ac0a96b2c7f6c8c6 100644 (file)
@@ -72,50 +72,165 @@ Boston, MA 02111-1307, USA.  */
 #define MD_STARTFILE_PREFIX_1 "/opt/langtools/lib/pa20_64/"
 #endif
 
-/* hpux11 has the new HP assembler.  It's still lousy, but it's a whole lot
-   better than the assembler shipped with older versions of hpux.  */
-#undef NEW_HP_ASSEMBLER
-#define NEW_HP_ASSEMBLER 1
+/* Due to limitations in the target structure, it isn't currently possible
+   to dynamically switch between the GNU and HP assemblers.  */
+#undef TARGET_GAS
+
+/* Configure selects the standard ELFOS defines for use with GAS.  */
+#ifdef USING_ELFOS_H
+
+/* We are using GAS.  */
+#define TARGET_GAS 1
 
 #undef ASM_FILE_START
 #define ASM_FILE_START(FILE) \
-do {  \
-     if (TARGET_64BIT) \
-       fputs("\t.LEVEL 2.0w\n", FILE); \
-     else if (TARGET_PA_20) \
-       fputs("\t.LEVEL 2.0\n", FILE); \
-     else if (TARGET_PA_11) \
-       fputs("\t.LEVEL 1.1\n", FILE); \
-     else \
-       fputs("\t.LEVEL 1.0\n", FILE); \
-     if (profile_flag)\
-       fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\
-     if (write_symbols != NO_DEBUG) \
-       output_file_directive ((FILE), main_input_filename); \
-   } while (0)
+do {                                                           \
+  if (TARGET_64BIT)                                            \
+    fputs("\t.LEVEL 2.0w\n", FILE);                            \
+  else if (TARGET_PA_20)                                       \
+    fputs("\t.LEVEL 2.0\n", FILE);                             \
+  else if (TARGET_PA_11)                                       \
+    fputs("\t.LEVEL 1.1\n", FILE);                             \
+  else                                                         \
+    fputs("\t.LEVEL 1.0\n", FILE);                             \
+  if (profile_flag)                                            \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, "_mcount", "function");   \
+  if (write_symbols != NO_DEBUG)                               \
+    {                                                          \
+      output_file_directive ((FILE), main_input_filename);     \
+      fputs ("\t.version\t\"01.01\"\n", FILE);                 \
+    }                                                          \
+} while (0)
+
+/* This is how we output a null terminated string.  */
+#undef STRING_ASM_OP
+#define STRING_ASM_OP  "\t.stringz\t"
+
+#define TEXT_SECTION_ASM_OP    "\t.text"
+#define DATA_SECTION_ASM_OP    "\t.data"
+#define BSS_SECTION_ASM_OP     "\t.section\t.bss"
+
+#undef ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)             \
+do {                                                                   \
+  bss_section ();                                                      \
+  assemble_name ((FILE), (NAME));                                      \
+  fputs ("\t.comm ", (FILE));                                          \
+  fprintf ((FILE), "%d\n", MAX ((SIZE), ((ALIGN) / BITS_PER_UNIT)));   \
+} while (0)
+
+#undef ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)              \
+do {                                                                   \
+  bss_section ();                                                      \
+  fprintf ((FILE), "\t.align %d\n", ((ALIGN) / BITS_PER_UNIT));                \
+  assemble_name ((FILE), (NAME));                                      \
+  fprintf ((FILE), "\n\t.block %d\n", (SIZE));                         \
+} while (0)
+
+/* The define in pa.h doesn't work with the alias attribute.  The
+   default is ok with the following define for GLOBAL_ASM_OP.  */
+#undef TARGET_ASM_GLOBALIZE_LABEL
+
+/* This is how we globalize a label.  */
+#define GLOBAL_ASM_OP  "\t.globl\t"
+
+/* Hacked version from elfos.h that doesn't output a label.  */
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)            \
+do {                                                           \
+  ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");          \
+  ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));               \
+} while (0)
+
+/* The type of external references must be set correctly for the
+   dynamic loader to work correctly.  This is equivalent to the
+   HP assembler's .IMPORT directive but relates more directly to
+   ELF object file types.  */
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME)                          \
+do {                                                                   \
+  int save_referenced;                                                 \
+  save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL));\
+  if (FUNCTION_NAME_P (NAME))                                          \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");                        \
+  else                                                                 \
+    ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");                  \
+  TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced;\
+} while (0)
+
+/* We need set the type for external libcalls.  Also note that not all
+   libcall names are passed to targetm.encode_section_info (e.g., __main).
+   Thus, we also have to do the section encoding if it hasn't been done
+   already.  */
+#undef ASM_OUTPUT_EXTERNAL_LIBCALL
+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN)                 \
+do {                                                           \
+  if (!FUNCTION_NAME_P (XSTR (FUN, 0)))                                \
+    hppa_encode_label (FUN);                                   \
+  ASM_OUTPUT_TYPE_DIRECTIVE (FILE, XSTR (FUN, 0), "function"); \
+} while (0)
+
+/* We need to use the HP style for internal labels.  */
+#undef  ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM)   \
+  fprintf (FILE, "%c$%s%04d\n", (PREFIX)[0], (PREFIX) + 1, NUM)
+
+#undef ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)        \
+  sprintf (LABEL, "*%c$%s%04ld", (PREFIX)[0], (PREFIX) + 1, (long)(NUM))
+
+#else /* USING_ELFOS_H */
+
+/* We are not using GAS.  */
+#define TARGET_GAS 0
+
+/* HPUX 11 has the "new" HP assembler.  It's still lousy, but it's a whole
+   lot better than the assembler shipped with older versions of hpux.
+   However, it doesn't support weak symbols and is a bad fit with ELF.  */
+#undef NEW_HP_ASSEMBLER
+#define NEW_HP_ASSEMBLER 1
 
 /* It looks like DWARF2 will be the easiest debug format to handle on this
    platform.  */
-#define OBJECT_FORMAT_ELF
 #define DWARF2_DEBUGGING_INFO 1
 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-/* This isn't quite ready yet.  I'm seeing it mess up some line
-   tables.  For example, we're getting lines starting/ending at
-   impossible addresses.  */
-#define DWARF2_ASM_LINE_DEBUG_INFO 1
 
+/* This target uses the ELF object file format.  */
+#define OBJECT_FORMAT_ELF
 
-/* The rest of this file is copied from the generic svr4.h.  One day we
-   would like to simply include svr4.h instead of copying all these
-   definitions.  */
+#undef ASM_FILE_START
+#define ASM_FILE_START(FILE)                                   \
+do {                                                           \
+  if (TARGET_64BIT)                                            \
+    fputs("\t.LEVEL 2.0w\n", FILE);                            \
+  else if (TARGET_PA_20)                                       \
+    fputs("\t.LEVEL 2.0\n", FILE);                             \
+  else if (TARGET_PA_11)                                       \
+    fputs("\t.LEVEL 1.1\n", FILE);                             \
+  else                                                         \
+    fputs("\t.LEVEL 1.0\n", FILE);                             \
+  fputs("\t.SPACE $PRIVATE$,SORT=16\n\
+\t.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31\n\
+\t.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82\n\
+\t.SPACE $TEXT$,SORT=8\n\
+\t.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44\n\
+\t.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n", FILE); \
+  if (profile_flag)                                            \
+    fprintf (FILE, "\t.IMPORT _mcount, CODE\n");               \
+  if (write_symbols != NO_DEBUG)                               \
+    output_file_directive ((FILE), main_input_filename);       \
+} while (0)
 
-#define READONLY_DATA_SECTION_ASM_OP   "\t.section\t.rodata"
+#undef TEXT_SECTION_ASM_OP
+#define TEXT_SECTION_ASM_OP "\t.SUBSPA $CODE$\n"
+#undef READONLY_DATA_SECTION_ASM_OP
+#define READONLY_DATA_SECTION_ASM_OP "\t.SUBSPA $LIT$\n"
+#undef DATA_SECTION_ASM_OP
+#define DATA_SECTION_ASM_OP "\t.SUBSPA $DATA$\n"
+#undef BSS_SECTION_ASM_OP
+#define BSS_SECTION_ASM_OP "\t.SUBSPA $BSS$\n"
 
-/* On svr4, we *do* have support for the .init and .fini sections, and we
-   can put stuff in there to be executed before and after `main'.  We let
-   crtstuff.c and other files know this by defining the following symbols.
-   The definitions say how to change sections to the .init and .fini
-   sections.  This is the same for all known svr4 assemblers.  */
+#endif /* USING_ELFOS_H */
 
 /* For the time being, we aren't using init sections.  `P' relocations
    are currently used for function references.  However, P relocations are
@@ -124,10 +239,9 @@ do {  \
    weak symbols in crtbegin.o (e.g., __register_frame_info).  Possibly
    Q relocations might avoid this problem but the GNU assembler doesn't
    support them.  */
-#if 0
-#define INIT_SECTION_ASM_OP    "\t.section\t.init"
-#define FINI_SECTION_ASM_OP    "\t.section\t.fini"
-#else
+#undef INIT_SECTION_ASM_OP
+#undef FINI_SECTION_ASM_OP
+
 #define EH_FRAME_IN_DATA_SECTION 1
 
 #undef ENDFILE_SPEC
@@ -144,32 +258,13 @@ do {  \
    of running ldd, but unfortunately the options are different for
    the two linkers.  */
 #define LDD_SUFFIX "/usr/ccs/bin/ldd"
+
 /* Skip to first '>' then advance to '/' at the beginning of the filename.  */
 #define PARSE_LDD_OUTPUT(PTR)                                  \
 do {                                                           \
   while (*PTR != '>') PTR++;                                   \
   while (*PTR != '/') PTR++;                                   \
 } while (0)
-#endif
-
-/* Switch into a generic section.  */
-#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
-
-#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
-
-/* This is how we tell the assembler that a symbol is weak.  */
-
-#define ASM_WEAKEN_LABEL(FILE,NAME) \
-  do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-       fputc ('\n', FILE); } while (0)
-
-/* Write the extra assembler code needed to declare a function's result.
-   Most svr4 assemblers don't require any special declaration of the
-   result value, but there are exceptions.  */
-
-#ifndef ASM_DECLARE_RESULT
-#define ASM_DECLARE_RESULT(FILE, RESULT)
-#endif
 
 /* If using HP ld do not call pxdb.  Use size as a program that does nothing
    and returns 0.  /bin/true cannot be used because it is a script without
index 2c042c711f2075e1268d2fe3559635494eabe800..b0828e8e8e60be2ff00c9f2371ed3c1acbb10c86 100644 (file)
@@ -2059,8 +2059,7 @@ longer a multiple of 2 bytes.
 
 We @emph{highly} recommend using gas/binutils 2.8 or newer on all hppa
 platforms; you may encounter a variety of problems when using the HP
-assembler.  The HP assembler does not work with the @samp{hppa64-hp-hpux11*}
-port.
+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
@@ -2162,16 +2161,27 @@ compile GCC 3.0 and up.  Refer to @uref{binaries.html,,binaries} for
 information about obtaining precompiled GCC binaries for HP-UX.
 
 GNU binutils 2.13 or later is recommended with the 64-bit port.
-The HP assembler is not supported.  It is @emph{highly} recommended
-that the GNU linker be used as well.  Either binutils must be built
-prior to gcc, or a binary distribution of gcc or binutils must be
-obtained for the initial builds.  When starting with a HP compiler,
-it is preferable to use the ANSI compiler as the bundled compiler
-only supports traditional C.  Bootstrapping with the bundled compiler
-is tested infrequently and problems often arise because of the subtle
-differences in semantics between traditional and ISO C.  There also
-have been problems reported with various binary distributions.  This
-port still is undergoing significant development.
+The HP assembler has many limitations and is not recommended.  For
+example, it does not support weak symbols or alias definitions.
+As a result, explicit template instantiations are required when
+using C++.  Either the HP or GNU linker can be used but it may be
+necessary to use the GNU linker when dwarf2 exception support is
+implemented.
+
+There are several possible approaches to building the distribution.
+Binutils can be built first using the HP tools.  Then, the GCC
+distribution can be built.  The second approach is to build GCC
+first using the HP tools, then build binutils, then rebuild GCC.
+There have been problems with various binary distributions, so
+it is best not to start from a binary distribution.
+
+When starting with a HP compiler, it is preferable to use the ANSI
+compiler as the bundled compiler only supports traditional C.
+Bootstrapping with the bundled compiler is tested infrequently and
+problems often arise because of the subtle differences in semantics
+between traditional and ISO C.
+
+This port still is undergoing significant development.
 
 @html
 <hr />
This page took 0.095394 seconds and 5 git commands to generate.