diff options
author | Zack Weinberg <zack@gcc.gnu.org> | 2003-06-19 21:47:26 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2003-06-19 21:47:26 +0000 |
commit | 1bc7c5b629d70dab15eef0224ab6d9dae0b51b97 (patch) | |
tree | dfd0d874fe0ca79570b8c8107638e443f836c8f4 /gcc/config/pa | |
parent | b556e18c83e9cf595fa9452a956a4641d1337e52 (diff) | |
download | gcc-1bc7c5b629d70dab15eef0224ab6d9dae0b51b97.zip gcc-1bc7c5b629d70dab15eef0224ab6d9dae0b51b97.tar.gz gcc-1bc7c5b629d70dab15eef0224ab6d9dae0b51b97.tar.bz2 |
target.h (asm_out.file_start, [...]): New hooks.
* target.h (asm_out.file_start, file_start_app_off,
file_start_file_directive): New hooks.
* target-def.h (TARGET_ASM_FILE_START_FILE_DIRECTIVE,
TARGET_ASM_FILE_START_APP_OFF, TARGET_ASM_FILE_START):
New hook-definition macros.
* doc/tm.texi: Document new hooks; remove docs of ASM_FILE_START.
* varasm.c (default_file_start): New.
* output.h: Prototype it.
* toplev.c (init_asm_output): Use targetm.asm_out.file_start.
* system.h: Poison ASM_FILE_START.
* config/alpha/alpha.c (alpha_write_verstamp): Delete.
(alpha_file_start): New, define if !TARGET_ABI_UNICOSMK.
(unicosmk_asm_file_start): Rename unicosmk_file_start,
make static, take no arguments.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_END,
TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set as appropriate.
* config/alpha/unicosmk.h: Don't define ASM_FILE_START nor
TARGET_ASM_FILE_END. Remove reference to ASM_FILE_START in
comment.
* config/arc/arc.c (arc_asm_file_start): Rename
arc_file_start, take no arguments, make static.
(TARGET_ASM_FILE_START): Set it.
* config/arm/arm.c (aof_file_start): New static function.
(TARGET_ASM_FILE_START): Set it, when appropriate.
* config/arm/coff.h, config/arm/elf.h:
Set TARGET_ASM_FILE_START_APP_OFF to true.
* config/avr/avr.c (asm_file_start): Rename avr_file_start,
take no arguments, make static.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE):
Set them.
* config/c4x/c4x.c (c4x_file_start): New static function.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE):
Set them.
* config/cris/cris.c (cris_file_start): New static function.
(TARGET_ASM_FILE_START): Set it.
* config/dsp16xx/dsp16xx.c (coff_dsp16xx_file_start): Rename
dsp16xx_file_start, make static.
(luxworks_dsp16xx_file_start): Delete.
(TARGET_ASM_FILE_START): Set it.
* config/h8300/h8300.c (asm_file_start): Rename
h8300_file_start, make static, take no arguments.
(TARGET_ASM_FILE_START): Set it.
* config/i370/i370.c (i370_file_start): New static function.
(TARGET_ASM_FILE_START): Set it.
* config/i386/i386.c (x86_file_start): New static function.
(TARGET_ASM_FILE_START): Set it.
* config/i386/i386.h (X86_FILE_START_VERSION_DIRECTIVE,
X86_FILE_START_FLTUSED): New macros, default to false.
* config/i386/i386-interix.h: Override X86_FILE_START_FLTUSED to 1.
* config/i386/sysv4.h, config/i386/sco5.h: Override
X86_FILE_START_VERSION_DIRECTIVE to true.
* config/ia64/ia64.c (ia64_file_start): New static function.
(TARGET_ASM_FILE_START): Set it.
(emit_safe_across_calls): Take no arguments.
* config/ia64/ia64.md: Update to match.
* config/m32r/m32r.c (m32r_asm_file_start): Rename
m32r_file_start, make static, take no arguments.
(TARGET_ASM_FILE_START): Set it.
* config/m68hc11/m68hc11.c (m68hc11_asm_file_start): Rename
m68hc11_file_start, make static, take no arguments.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
(print_options): Delete.
* config/m68k/m68k.c (m68k_hp320_file_start): New static function.
(TARGET_ASM_FILE_START_APP_OFF): Set.
* config/m68k/hp320.h: Set TARGET_ASM_FILE_START to
m68k_hp320_file_start.
* config/mips/mips.c (iris6_asm_file_start, mips_asm_file_start):
Make static, take no arguments.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
* config/mmix/mmix.c (mmix_asm_file_start): Rename
mmix_file_start, make static, take no arguments.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
* config/mn10300/mn10300.c (asm_file_start): Rename
mn10300_file_start, make static, take no arguments.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
* config/ns32k/ns32k.c (TARGET_ASM_FILE_START_APP_OFF): Set.
* config/pa/pa.c (pa_file_start_level, pa_file_start_space,
pa_file_start_file, pa_file_start_mcount, pa_elf_file_start,
pa_som_file_start, pa_linux_file_start, pa_hpux64_gas_file_start,
pa_hpux64_hpas_file_start): New static functions.
* config/pa/elf.h: Set TARGET_ASM_FILE_START to pa_elf_file_start.
* config/pa/pa-linux.h: Set TARGET_ASM_FILE_START to
pa_linux_file_start.
* config/pa/pa64-hpux.h: Set TARGET_ASM_FILE_START to
pa_hpux64_gas_file_start or pa_hpux64_hpas_file_start, as
appropriate.
* config/pa/som.h: Set TARGET_ASM_FILE_START to pa_som_file_start.
* config/rs6000/rs6000.c: Include xcoffout.h when TARGET_XCOFF.
(rs6000_file_start): Make static, take no arguments. Reset
default_cpu under certain conditions.
(rs6000_xcoff_file_start): New function.
* config/rs6000/rs6000.h (TARGET_ASM_FILE_START): Set.
* config/rs6000/xcoff.h (TARGET_ASM_FILE_START,
TARGET_ASM_FILE_START_FILE_DIRECTIVE): Override.
* config/sh/sh.c (output_file_start): Rename
sh_file_start, make static, take no arguments. Merge in old
code from sh/elf.h's ASM_FILE_START, conditioned on TARGET_ELF.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
* config/sh/sh.c (TARGET_ELF): Define to 0.
* config/sh/elf.h (TARGET_ELF): Redefine to 1.
* config/v850/v850.c (asm_file_start): Delete.
(TARGET_ASM_FILE_START_FILE_DIRECTIVE): Set.
* config/vax/vax.c (vax_file_start): New static function.
(TARGET_ASM_FILE_START, TARGET_ASM_FILE_START_APP_OFF): Set.
* config/darwin.h: Override ASM_FILE_START_FILE_DIRECTIVE to false.
* config/elfos.h, config/svr3.h, config/arm/elf.h, config/arm/pe.h
* config/i386/att.h, config/i386/gas.h, config/i386/linux.h
* config/i386/sysv4.h, config/i386/sco5.h, config/i960/i960-coff.h
* config/m68k/coff.h, config/m68k/hp320.h, config/mcore/mcore-pe.h
* config/vax/vaxv.h: Set ASM_FILE_START_FILE_DIRECTIVE to true.
* config/darwin.h, config/elfos.h, config/alpha/elf.h
* config/alpha/openbsd.h, config/alpha/osf.h, config/alpha/vms.h
* config/arc/arc.h, config/arm/aof.h, config/arm/aout.h
* config/arm/coff.h, config/arm/elf.h, config/arm/pe.h
* config/avr/avr.h, config/c4x/c4x.h, config/cris/cris.h
* config/dsp16xx/dsp16xx.h, config/h8300/elf.h, config/h8300/h8300.h
* config/i370/i370.h, config/i386/att.h, config/i386/gas.h
* config/i386/i386-interix.h, config/i386/linux.h, config/i386/sysv4.h
* config/i386/sco5.h, config/i960/i960-coff.h, config/i960/i960.h
* config/ia64/ia64.h, config/ia64/sysv4.h, config/m32r/m32r.h
* config/m68hc11/m68hc11.h, config/m68k/coff.h, config/m68k/m68k.h
* config/mcore/mcore-pe.h, config/mips/iris6.h, config/mips/mips.h
* config/mmix/mmix.h, config/mn10300/mn10300.h, config/ns32k/ns32k.h
* config/pa/elf.h, config/pa/pa-linux.h, config/pa/pa64-hpux.h
* config/pa/som.h, config/pdp11/pdp11.h, config/rs6000/linux64.h
* config/rs6000/lynx.h, config/rs6000/xcoff.h, config/sh/elf.h
* config/sh/sh.h, config/sparc/sparc.h, config/v850/v850.h
* config/vax/vax.h, config/vax/vaxv.h: Don't (re)define ASM_FILE_START.
* config/alpha/alpha-protos.h, config/arc/arc-protos.h
* config/avr/avr-protos.h, config/dsp16xx/dsp16xx-protos.h
* config/h8300/h8300-protos.h, config/ia64/ia64-protos.h
* config/m32r/m32r-protos.h, config/m68hc11/m68hc11-protos.h
* config/mips/mips-protos.h, config/mmix/mmix-protos.h
* config/mn10300/mn10300-protos.h, config/rs6000/rs6000-protos.h
* config/sh/sh-protos.h, config/v850/v850-protos.h: Update.
* xcoffout.h, config/rs6000/aix.h, config/rs6000/xcoff.h:
Remove reference to ASM_FILE_START in comment.
* config/arm/aof.h, config/arm/aout.h, config/arm/freebsd.h
* config/arm/linux-gas.h, config/arm/netbsd-elf.h
* config/arm/netbsd.h: Delete definition of ARM_OS_NAME.
From-SVN: r68229
Diffstat (limited to 'gcc/config/pa')
-rw-r--r-- | gcc/config/pa/elf.h | 15 | ||||
-rw-r--r-- | gcc/config/pa/pa-linux.h | 24 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 109 | ||||
-rw-r--r-- | gcc/config/pa/pa64-hpux.h | 45 | ||||
-rw-r--r-- | gcc/config/pa/som.h | 24 |
5 files changed, 116 insertions, 101 deletions
diff --git a/gcc/config/pa/elf.h b/gcc/config/pa/elf.h index e5b7478..5b35178 100644 --- a/gcc/config/pa/elf.h +++ b/gcc/config/pa/elf.h @@ -32,20 +32,7 @@ Boston, MA 02111-1307, USA. */ #define DATA_SECTION_ASM_OP "\t.data" #define BSS_SECTION_ASM_OP "\t.section\t.bss" -#undef ASM_FILE_START -#define ASM_FILE_START(FILE) \ -do { \ - 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, ENTRY\n");\ - if (write_symbols != NO_DEBUG) \ - output_file_directive ((FILE), main_input_filename); \ - } while (0) +#define TARGET_ASM_FILE_START pa_elf_file_start #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ diff --git a/gcc/config/pa/pa-linux.h b/gcc/config/pa/pa-linux.h index fa20da0..ed7c82b 100644 --- a/gcc/config/pa/pa-linux.h +++ b/gcc/config/pa/pa-linux.h @@ -106,29 +106,7 @@ Boston, MA 02111-1307, USA. */ #define DATA_SECTION_ASM_OP "\t.data" #define BSS_SECTION_ASM_OP "\t.section\t.bss" -/* Output at beginning of assembler file. We override the definition - from <linux.h> so that we can get the proper .LEVEL directive. */ -#undef ASM_FILE_START -#define ASM_FILE_START(FILE) \ - do \ - { \ - if (write_symbols != NO_DEBUG) \ - { \ - output_file_directive (FILE, main_input_filename); \ - fputs ("\t.version\t\"01.01\"\n", FILE); \ - } \ - 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) \ - fputs ("\t.IMPORT _mcount, CODE\n", FILE); \ - } \ - while (0) +#define TARGET_ASM_FILE_START pa_linux_file_start /* We want local labels to start with period if made with asm_fprintf. */ #undef LOCAL_LABEL_PREFIX diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 23568be..b17d1dc 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -135,6 +135,15 @@ static void copy_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED; static int length_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED; static struct deferred_plabel *get_plabel PARAMS ((const char *)) ATTRIBUTE_UNUSED; +static inline void pa_file_start_level PARAMS ((void)) ATTRIBUTE_UNUSED; +static inline void pa_file_start_space PARAMS ((int)) ATTRIBUTE_UNUSED; +static inline void pa_file_start_file PARAMS ((int)) ATTRIBUTE_UNUSED; +static inline void pa_file_start_mcount PARAMS ((const char*)) ATTRIBUTE_UNUSED; +static void pa_elf_file_start PARAMS ((void)) ATTRIBUTE_UNUSED; +static void pa_som_file_start PARAMS ((void)) ATTRIBUTE_UNUSED; +static void pa_linux_file_start PARAMS ((void)) ATTRIBUTE_UNUSED; +static void pa_hpux64_gas_file_start PARAMS ((void)) ATTRIBUTE_UNUSED; +static void pa_hpux64_hpas_file_start PARAMS ((void)) ATTRIBUTE_UNUSED; static void output_deferred_plabels PARAMS ((void)); /* Save the operands last given to a compare for use when we @@ -4902,6 +4911,106 @@ output_global_address (file, x, round_constant) output_addr_const (file, x); } +/* Output boilerplate text to appear at the beginning of the file. + There are several possible versions. */ +#define aputs(x) fputs(x, asm_out_file) +static inline void +pa_file_start_level () +{ + if (TARGET_64BIT) + aputs ("\t.LEVEL 2.0w\n"); + else if (TARGET_PA_20) + aputs ("\t.LEVEL 2.0\n"); + else if (TARGET_PA_11) + aputs ("\t.LEVEL 1.1\n"); + else + aputs ("\t.LEVEL 1.0\n"); +} + +static inline void +pa_file_start_space (sortspace) + int sortspace; +{ + aputs ("\t.SPACE $PRIVATE$"); + if (sortspace) + aputs (",SORT=16"); + aputs ("\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$"); + if (sortspace) + aputs (",SORT=8"); + aputs ("\n\t.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44" + "\n\t.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n"); +} + +static inline void +pa_file_start_file (want_version) + int want_version; +{ + if (write_symbols != NO_DEBUG) + { + output_file_directive (asm_out_file, main_input_filename); + if (want_version) + aputs ("\t.version\t\"01.01\"\n"); + } +} + +static inline void +pa_file_start_mcount (aswhat) + const char *aswhat; +{ + if (profile_flag) + fprintf (asm_out_file, "\t.IMPORT _mcount,%s\n", aswhat); +} + +static void +pa_elf_file_start () +{ + pa_file_start_level (); + pa_file_start_mcount ("ENTRY"); + pa_file_start_file (0); +} + +static void +pa_som_file_start () +{ + pa_file_start_level (); + pa_file_start_space (0); + aputs ("\t.IMPORT $global$,DATA\n" + "\t.IMPORT $$dyncall,MILLICODE\n"); + pa_file_start_mcount ("CODE"); + pa_file_start_file (0); +} + +static void +pa_linux_file_start () +{ + pa_file_start_file (1); + pa_file_start_level (); + pa_file_start_mcount ("CODE"); +} + +static void +pa_hpux64_gas_file_start () +{ + pa_file_start_level (); +#ifdef ASM_OUTPUT_TYPE_DIRECTIVE + if (profile_flag) + ASM_OUTPUT_TYPE_DIRECTIVE (asm_out_file, "_mcount", "function"); +#endif + pa_file_start_file (1); +} + +static void +pa_hpux64_hpas_file_start () +{ + pa_file_start_level (); + pa_file_start_space (1); + pa_file_start_mcount ("CODE"); + pa_file_start_file (0); +} +#undef aputs + static struct deferred_plabel * get_plabel (fname) const char *fname; diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h index bd652c9..d16d741 100644 --- a/gcc/config/pa/pa64-hpux.h +++ b/gcc/config/pa/pa64-hpux.h @@ -100,25 +100,8 @@ Boston, MA 02111-1307, USA. */ /* 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) \ - 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) +#undef TARGET_ASM_FILE_START +#define TARGET_ASM_FILE_START pa_hpux64_gas_file_start /* This is how we output a null terminated string. */ #undef STRING_ASM_OP @@ -221,28 +204,8 @@ do { \ /* This target uses the ELF object file format. */ #define OBJECT_FORMAT_ELF -#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) +#undef TARGET_ASM_FILE_START +#define TARGET_ASM_FILE_START pa_hpux64_hpas_file_start #undef TEXT_SECTION_ASM_OP #define TEXT_SECTION_ASM_OP "\t.SUBSPA $CODE$\n" diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index 9a8d53d..db31c60 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -213,29 +213,7 @@ do { \ fputs ("\n", FILE); \ }} while (0) -/* Output at beginning of assembler file. */ - -#define ASM_FILE_START(FILE) \ -do { \ - 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$\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$\n\ -\t.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44\n\ -\t.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n\ -\t.IMPORT $global$,DATA\n\ -\t.IMPORT $$dyncall,MILLICODE\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 TARGET_ASM_FILE_START pa_som_file_start /* Output before code. */ |