mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-26 11:19:49 +08:00
pa.h (STARTING_FRAME_OFFSET): Change offset for TARGET_64BIT to 16.
* 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
This commit is contained in:
parent
f7aa343f42
commit
581d94049b
@ -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
|
||||
|
@ -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)"
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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 />
|
||||
|
Loading…
Reference in New Issue
Block a user