OSDN Git Service

* target.h (asm_out.file_start, file_start_app_off,
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jun 2003 21:47:26 +0000 (21:47 +0000)
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jun 2003 21:47:26 +0000 (21:47 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68229 138bc75d-0d04-0410-961f-82ee72b054a4

111 files changed:
gcc/ChangeLog
gcc/config/alpha/alpha-protos.h
gcc/config/alpha/alpha.c
gcc/config/alpha/elf.h
gcc/config/alpha/openbsd.h
gcc/config/alpha/osf.h
gcc/config/alpha/unicosmk.h
gcc/config/alpha/vms.h
gcc/config/arc/arc-protos.h
gcc/config/arc/arc.c
gcc/config/arc/arc.h
gcc/config/arm/aof.h
gcc/config/arm/aout.h
gcc/config/arm/arm.c
gcc/config/arm/coff.h
gcc/config/arm/elf.h
gcc/config/arm/freebsd.h
gcc/config/arm/linux-gas.h
gcc/config/arm/netbsd-elf.h
gcc/config/arm/netbsd.h
gcc/config/arm/pe.h
gcc/config/avr/avr-protos.h
gcc/config/avr/avr.c
gcc/config/avr/avr.h
gcc/config/c4x/c4x.c
gcc/config/c4x/c4x.h
gcc/config/cris/cris.c
gcc/config/cris/cris.h
gcc/config/darwin.h
gcc/config/dsp16xx/dsp16xx-protos.h
gcc/config/dsp16xx/dsp16xx.c
gcc/config/dsp16xx/dsp16xx.h
gcc/config/elfos.h
gcc/config/h8300/elf.h
gcc/config/h8300/h8300-protos.h
gcc/config/h8300/h8300.c
gcc/config/h8300/h8300.h
gcc/config/i370/i370.c
gcc/config/i370/i370.h
gcc/config/i386/att.h
gcc/config/i386/gas.h
gcc/config/i386/i386-interix.h
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/linux.h
gcc/config/i386/sco5.h
gcc/config/i386/sysv4.h
gcc/config/i960/i960-coff.h
gcc/config/i960/i960.h
gcc/config/ia64/ia64-protos.h
gcc/config/ia64/ia64.c
gcc/config/ia64/ia64.h
gcc/config/ia64/ia64.md
gcc/config/ia64/sysv4.h
gcc/config/m32r/m32r-protos.h
gcc/config/m32r/m32r.c
gcc/config/m32r/m32r.h
gcc/config/m68hc11/m68hc11-protos.h
gcc/config/m68hc11/m68hc11.c
gcc/config/m68hc11/m68hc11.h
gcc/config/m68k/coff.h
gcc/config/m68k/hp320.h
gcc/config/m68k/m68k.c
gcc/config/m68k/m68k.h
gcc/config/mcore/mcore-pe.h
gcc/config/mips/iris6.h
gcc/config/mips/mips-protos.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h
gcc/config/mmix/mmix-protos.h
gcc/config/mmix/mmix.c
gcc/config/mmix/mmix.h
gcc/config/mn10300/mn10300-protos.h
gcc/config/mn10300/mn10300.c
gcc/config/mn10300/mn10300.h
gcc/config/ns32k/ns32k.c
gcc/config/ns32k/ns32k.h
gcc/config/pa/elf.h
gcc/config/pa/pa-linux.h
gcc/config/pa/pa.c
gcc/config/pa/pa64-hpux.h
gcc/config/pa/som.h
gcc/config/pdp11/pdp11.h
gcc/config/rs6000/aix.h
gcc/config/rs6000/linux64.h
gcc/config/rs6000/lynx.h
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/sysv4.h
gcc/config/rs6000/xcoff.h
gcc/config/sh/elf.h
gcc/config/sh/sh-protos.h
gcc/config/sh/sh.c
gcc/config/sh/sh.h
gcc/config/sparc/sparc.h
gcc/config/svr3.h
gcc/config/v850/v850-protos.h
gcc/config/v850/v850.c
gcc/config/v850/v850.h
gcc/config/vax/vax.c
gcc/config/vax/vax.h
gcc/config/vax/vaxv.h
gcc/doc/tm.texi
gcc/output.h
gcc/system.h
gcc/target-def.h
gcc/target.h
gcc/toplev.c
gcc/varasm.c
gcc/xcoffout.h

index 161cbf0..f337601 100644 (file)
@@ -1,3 +1,151 @@
+2003-06-19  Zack Weinberg  <zack@codesourcery.com>
+
+       * 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.
+
 2003-06-19  Graeme Peterson <gp@qnx.com>
 
        * gcc.c (target_sysroot_suffix, target_sysroot_hdrs_suffix,
 
 2003-06-19  Aldy Hernandez  <aldyh@redhat.com>
 
-        * expr.c (const_vector_from_tree): Initialize remaining elements
-        to 0.
+       * expr.c (const_vector_from_tree): Initialize remaining elements
+       to 0.
 
 2003-06-19  Aldy Hernandez  <aldyh@redhat.com>
 
 
 2003-06-18  Richard Henderson  <rth@redhat.com>
 
-        * config/ia64/unwind-ia64.c (_Unwind_GetCFA): New.
-        (_Unwind_FindEnclosingFunction): Implement.
+       * config/ia64/unwind-ia64.c (_Unwind_GetCFA): New.
+       (_Unwind_FindEnclosingFunction): Implement.
 
 2003-06-18  Kazu Hirata  <kazu@cs.umass.edu>
 
        INSN_SCHEDULING is defined.
 
 2003-06-18  Stephen Clarke <stephen.clarke@superh.com>
-            J"orn Rennecke <joern.rennecke@superh.com>
+           J"orn Rennecke <joern.rennecke@superh.com>
 
        * bt-load.c: New file.
        * Makefile.in (OBJS): Include bt-load.o
 2003-06-18  Nick Clifton  <nickc@redhat.com>
 
        * config.gcc: Add an extra_header for ARM targets.
-        Support configuring with --with-cpu=iwmmxt.
+       Support configuring with --with-cpu=iwmmxt.
        * doc/invoke.texi: Document new value for -mcpu= ARM switch.
-        * config/arm/aof.h (REGISTER_NAMES): Add iwmmxt register
+       * config/arm/aof.h (REGISTER_NAMES): Add iwmmxt register
        names.  Fix formatting.
-        * config/arm/aout.h (REGISTER_NAMES): Add iwmmxt register
+       * config/arm/aout.h (REGISTER_NAMES): Add iwmmxt register
        names.
-        * config/arm/arm-protos.h (arm_emit_vector_const): New
+       * config/arm/arm-protos.h (arm_emit_vector_const): New
        prototype.
        (arm_output_load_gr): New prototype.
        * config/arm/arm.c (extra_reg_names1): Delete.
-        (TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN, FL_IWMMXT,
+       (TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN, FL_IWMMXT,
        * arch_is_iwmmxt): Define.
        (all_cores, all_architecture): Add entry for iwmmxt.
        (arm_override_options): Add support for iwmmxt.
        (add_minipool_backward_ref, add_minipool_offsets,
        dump_minipool, push_minipool_fix): Likewise.
        (struct builtin_description): New struct.
-        (builtin_description): New array of iwmmxt builtin functions.
-        (arm_init_iwmmxt_builtins): New function.
-        (arm_init_builtins): New function.
-        (safe_vector_operand): New function.
-        (arm_expand_binop_builtin): New function.
-        (arm_expand_unop_builtin): New function.
-        (arm_expand_builtin): New function.
-        (arm_emit_vector_const): New function.
-        (arm_output_load_gr): New function.
-        * config/arm/arm.h (TARGET_CPU_iwmmxt, TARGET_IWMMXT,
+       (builtin_description): New array of iwmmxt builtin functions.
+       (arm_init_iwmmxt_builtins): New function.
+       (arm_init_builtins): New function.
+       (safe_vector_operand): New function.
+       (arm_expand_binop_builtin): New function.
+       (arm_expand_unop_builtin): New function.
+       (arm_expand_builtin): New function.
+       (arm_emit_vector_const): New function.
+       (arm_output_load_gr): New function.
+       * config/arm/arm.h (TARGET_CPU_iwmmxt, TARGET_IWMMXT,
        TARGET_REALLY_IWMMXT, arm_arch_iwmmxt, IWMMXT_ALIGNMENT,
        TYPE_NEEDS_IWMMXT_ALIGNMENT, ADJUST_FIELD_ALIGN,
        DATA_ALIGNMENT, LOCAL_ALIGNMENT, VECTOR_MODE_SUPPORTED_P): Define.
-        (BIGGEST_ALIGNMENT): Set to 64 if ATPCS support is enabled.
-        (CPP_CPU_ARCH_SPEC): Add entries for iwmmxt.
-        (FIXED_REGISTERS, CALL_USED_REGISTERS, REG_ALLOC_ORDER,
+       (BIGGEST_ALIGNMENT): Set to 64 if ATPCS support is enabled.
+       (CPP_CPU_ARCH_SPEC): Add entries for iwmmxt.
+       (FIXED_REGISTERS, CALL_USED_REGISTERS, REG_ALLOC_ORDER,
        reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
        REG_CLASS_FOR_LETTER): Add iwmmxt registers.
-        (SUBTARGET_CONDITIONAL_REGISTER_USAGE): Disable iwmmxt
+       (SUBTARGET_CONDITIONAL_REGISTER_USAGE): Disable iwmmxt
        registers unless the iwmmxt target is selected.
-        (FIRST_IWMMXT_GR_REGNUM, LAST_IWMMXT_GR_REGNUM,
+       (FIRST_IWMMXT_GR_REGNUM, LAST_IWMMXT_GR_REGNUM,
        FIRST_IWMMXT_REGNUM, LAST_IWMMXT_REGNUM, IS_IWMMXT_REGNUM,
        IS_IWMMXT_GR_REGNUM): Define.
-        (FIRST_PSEUDO_REGISTER): Bump to 63.
-        (struct machine_function): Add sibcall_blocked field.
-        (Struct CUMULATIVE_ARGS): Add iwmmxt_nregs, named_count and
+       (FIRST_PSEUDO_REGISTER): Bump to 63.
+       (struct machine_function): Add sibcall_blocked field.
+       (Struct CUMULATIVE_ARGS): Add iwmmxt_nregs, named_count and
        nargs fields.
-        (enum arm_builtins): New enum list.
-        * config/arm/arm.md (UNSPEC_WSHUFH, UNSPEC_WACC,
+       (enum arm_builtins): New enum list.
+       * config/arm/arm.md (UNSPEC_WSHUFH, UNSPEC_WACC,
        UNSPEC_TMOVMSK, UNSPEC_WSAD, UNSPEC_WSADZ, UNSPEC_WMACS,
        UNSPEC_WMACU, UNSPEC_WMACSZ, UNSPEC_WMACUZ, UNSPEC_CLRDI,
        UNSPEC_WMADDS, UNSPEC_WMADDU): New unspecs.
        (VUNSPEC_TMRC, VUNSPEC_TMCR, VUNSPEC_ALIGN8, VUNSPEC_WCMP_EQ,
        VUNSPEC_WCMP_GTU, VUNSPEC_WCMP_GT): New vunspecs.
-        (movv2si, movv4hi, movv8qi): New expands for vector moves.
-        Include iwmmxt.md.
+       (movv2si, movv4hi, movv8qi): New expands for vector moves.
+       Include iwmmxt.md.
        * config/arm/t-xscale-elf (MULTILIB_OPITONS): Add iwmmxt
        multilib.
-        (MULTILIB_DIRNAMES, MULTILIB_REDUNDANT_DIRS): Likewise.
-        * config/arm/mmintrin.h: New ARM specific header file.
-        * config/arm/iwmmx.md: New iWMMXt specific machine patterns.
+       (MULTILIB_DIRNAMES, MULTILIB_REDUNDANT_DIRS): Likewise.
+       * config/arm/mmintrin.h: New ARM specific header file.
+       * config/arm/iwmmx.md: New iWMMXt specific machine patterns.
 
 2003-06-18  J"orn Rennecke <joern.rennecke@superh.com>
 
        * config/ns32k/NOTES: Likewise.
 
 2003-06-17  Ranjit Mathew  <rmathew@hotmail.com>
-            Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
+           Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
 
        * doc/sourcebuild.texi (libgcj Tests): Simplify instructions on how
        to run Java runtime tests separately.
index 9e96d18..3a342eb 100644 (file)
@@ -30,7 +30,6 @@ extern HOST_WIDE_INT alpha_initial_elimination_offset (unsigned int,
                                                       unsigned int);
 extern int alpha_pv_save_size (void);
 extern int alpha_using_fp (void);
-extern void alpha_write_verstamp (FILE *);
 extern void alpha_expand_prologue (void);
 extern void alpha_expand_epilogue (void);
 extern void alpha_output_filename (FILE *, const char *);
@@ -169,7 +168,6 @@ extern void unicosmk_add_extern (const char *);
 extern void unicosmk_output_align (FILE *, int);
 extern char * unicosmk_text_section (void);
 extern char * unicosmk_data_section (void);
-extern void unicosmk_asm_file_start (FILE *);
 extern void unicosmk_output_common (FILE *, const char *, int, int);
 extern int unicosmk_initial_elimination_offset (int, int);
 #endif
index cb937df..31f03fc 100644 (file)
@@ -6780,20 +6780,6 @@ alpha_does_function_need_gp (void)
   return 0;
 }
 
-/* Write a version stamp.  Don't write anything if we are running as a
-   cross-compiler.  Otherwise, use the versions in /usr/include/stamp.h.  */
-
-#ifdef HAVE_STAMP_H
-#include <stamp.h>
-#endif
-
-void
-alpha_write_verstamp (FILE *file ATTRIBUTE_UNUSED)
-{
-#ifdef MS_STAMP
-  fprintf (file, "\t.verstamp %d %d\n", MS_STAMP, LS_STAMP);
-#endif
-}
 \f
 /* Helper function to set RTX_FRAME_RELATED_P on instructions, including
    sequences.  */
@@ -8687,6 +8673,36 @@ alpha_reorg (void)
     }
 }
 \f
+#if !TARGET_ABI_UNICOSMK
+
+#ifdef HAVE_STAMP_H
+#include <stamp.h>
+#endif
+
+static void
+alpha_file_start (void)
+{
+  default_file_start ();
+#ifdef MS_STAMP
+  fprintf (file, "\t.verstamp %d %d\n", MS_STAMP, LS_STAMP);
+#endif
+
+  fputs ("\t.set noreorder\n", asm_out_file);
+  fputs ("\t.set volatile\n", asm_out_file);
+  if (!TARGET_ABI_OPEN_VMS)
+    fputs ("\t.set noat\n", asm_out_file);
+  if (TARGET_EXPLICIT_RELOCS)
+    fputs ("\t.set nomacro\n", asm_out_file);
+  if (TARGET_SUPPORT_ARCH | TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX)
+    fprintf (asm_out_file,
+            "\t.arch %s\n",
+            TARGET_CPU_EV6 ? "ev6"        
+            : (TARGET_CPU_EV5
+               ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5")
+               : "ev4"));
+}
+#endif
+
 #ifdef OBJECT_FORMAT_ELF
 
 /* Switch to the section to which we should output X.  The only thing
@@ -9728,14 +9744,14 @@ unicosmk_output_dex (FILE *file)
 
 /* Output text that to appear at the beginning of an assembler file.  */
 
-void 
-unicosmk_asm_file_start (FILE *file)
+static void 
+unicosmk_file_start (void)
 {
   int i;
 
-  fputs ("\t.ident\t", file);
-  unicosmk_output_module_name (file);
-  fputs ("\n\n", file);
+  fputs ("\t.ident\t", asm_out_file);
+  unicosmk_output_module_name (asm_out_file);
+  fputs ("\n\n", asm_out_file);
 
   /* The Unicos/Mk assembler uses different register names. Instead of trying
      to support them, we simply use micro definitions.  */
@@ -9746,12 +9762,12 @@ unicosmk_asm_file_start (FILE *file)
      register.  */
 
   for (i = 0; i < 32; ++i)
-    fprintf (file, "$%d <- r%d\n", i, i);
+    fprintf (asm_out_file, "$%d <- r%d\n", i, i);
 
   for (i = 0; i < 32; ++i)
-    fprintf (file, "$f%d <- f%d\n", i, i);
+    fprintf (asm_out_file, "$f%d <- f%d\n", i, i);
 
-  putc ('\n', file);
+  putc ('\n', asm_out_file);
 
   /* The .align directive fill unused space with zeroes which does not work
      in code sections. We define the macro 'gcc@code@align' which uses nops
@@ -9759,24 +9775,24 @@ unicosmk_asm_file_start (FILE *file)
      biggest possible alignment since . refers to the current offset from
      the beginning of the section.  */
 
-  fputs ("\t.macro gcc@code@align n\n", file);
-  fputs ("gcc@n@bytes = 1 << n\n", file);
-  fputs ("gcc@here = . % gcc@n@bytes\n", file);
-  fputs ("\t.if ne, gcc@here, 0\n", file);
-  fputs ("\t.repeat (gcc@n@bytes - gcc@here) / 4\n", file);
-  fputs ("\tbis r31,r31,r31\n", file);
-  fputs ("\t.endr\n", file);
-  fputs ("\t.endif\n", file);
-  fputs ("\t.endm gcc@code@align\n\n", file);
+  fputs ("\t.macro gcc@code@align n\n", asm_out_file);
+  fputs ("gcc@n@bytes = 1 << n\n", asm_out_file);
+  fputs ("gcc@here = . % gcc@n@bytes\n", asm_out_file);
+  fputs ("\t.if ne, gcc@here, 0\n", asm_out_file);
+  fputs ("\t.repeat (gcc@n@bytes - gcc@here) / 4\n", asm_out_file);
+  fputs ("\tbis r31,r31,r31\n", asm_out_file);
+  fputs ("\t.endr\n", asm_out_file);
+  fputs ("\t.endif\n", asm_out_file);
+  fputs ("\t.endm gcc@code@align\n\n", asm_out_file);
 
   /* Output extern declarations which should always be visible.  */
-  unicosmk_output_default_externs (file);
+  unicosmk_output_default_externs (asm_out_file);
 
   /* Open a dummy section. We always need to be inside a section for the
      section-switching code to work correctly.
      ??? This should be a module id or something like that. I still have to
      figure out what the rules for those are.  */
-  fputs ("\n\t.psect\t$SG00000,data\n", file);
+  fputs ("\n\t.psect\t$SG00000,data\n", asm_out_file);
 }
 
 /* Output text to appear at the end of an assembler file. This includes all
@@ -9877,6 +9893,18 @@ unicosmk_need_dex (rtx x ATTRIBUTE_UNUSED)
 #undef TARGET_ASM_FUNCTION_END_PROLOGUE
 #define TARGET_ASM_FUNCTION_END_PROLOGUE alpha_output_function_end_prologue
 
+#if TARGET_ABI_UNICOSMK
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START unicosmk_file_start
+#undef TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END unicosmk_file_end
+#else
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START alpha_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+#endif
+
 #undef TARGET_SCHED_ADJUST_COST
 #define TARGET_SCHED_ADJUST_COST alpha_adjust_cost
 #undef TARGET_SCHED_ISSUE_RATE
index 986d5ed..8fdfc3e 100644 (file)
@@ -49,27 +49,6 @@ Boston, MA 02111-1307, USA.    */
 #undef  ASM_SPEC
 #define ASM_SPEC  "%{G*} %{relax:-relax} %{!gstabs*:-no-mdebug}%{gstabs*:-mdebug}"
 
-/* Output at beginning of assembler file.  */
-#undef  ASM_FILE_START
-#define ASM_FILE_START(FILE)                                   \
-do {                                                           \
-  if (write_symbols == DBX_DEBUG)                              \
-    {                                                          \
-      alpha_write_verstamp (FILE);                             \
-      output_file_directive (FILE, main_input_filename);       \
-    }                                                          \
-  fprintf (FILE, "\t.set noat\n");                             \
-  fprintf (FILE, "\t.set noreorder\n");                                \
-  if (TARGET_EXPLICIT_RELOCS)                                  \
-    fprintf (FILE, "\t.set nomacro\n");                                \
-  if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX)       \
-    {                                                          \
-      fprintf (FILE, "\t.arch %s\n",                           \
-               (TARGET_CPU_EV6 ? "ev6"                         \
-                : TARGET_MAX ? "pca56" : "ev56"));             \
-    }                                                          \
-} while (0)
-
 #undef  IDENT_ASM_OP
 #define IDENT_ASM_OP "\t.ident\t"
 
index 0bab68b..f574e8d 100644 (file)
@@ -88,29 +88,6 @@ Boston, MA 02111-1307, USA.  */
 #define DWARF2_UNWIND_INFO 0
 #endif
 
-/* Assembler format: file framework.  */
-
-/* Taken from alpha/osf.h. This used to be common to all alpha
-   configurations, but elf has departed from it.
-   Check alpha/alpha.h, alpha/osf.h for it when egcs is upgraded.  */
-#ifndef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                   \
-{                                                              \
-  alpha_write_verstamp (FILE);                                 \
-  fprintf (FILE, "\t.set noreorder\n");                                \
-  fprintf (FILE, "\t.set volatile\n");                          \
-  fprintf (FILE, "\t.set noat\n");                             \
-  if (TARGET_SUPPORT_ARCH)                                     \
-    fprintf (FILE, "\t.arch %s\n",                             \
-             TARGET_CPU_EV6 ? "ev6"                            \
-            : (TARGET_CPU_EV5                                  \
-               ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5") \
-               : "ev4"));                                      \
-                                                               \
-  ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename);      \
-}
-#endif
-
 /* Assembler format: label output.  */
 
 #define ASM_OUTPUT_WEAK_ALIAS(FILE,NAME,VALUE) \
index 529a9a3..3d7936e 100644 (file)
@@ -84,22 +84,6 @@ Boston, MA 02111-1307, USA.  */
 
 #define MD_STARTFILE_PREFIX "/usr/lib/cmplrs/cc/"
 
-#define ASM_FILE_START(FILE)                                   \
-{                                                              \
-  alpha_write_verstamp (FILE);                                 \
-  fprintf (FILE, "\t.set noreorder\n");                                \
-  fprintf (FILE, "\t.set volatile\n");                          \
-  fprintf (FILE, "\t.set noat\n");                             \
-  if (TARGET_SUPPORT_ARCH)                                     \
-    fprintf (FILE, "\t.arch %s\n",                             \
-             TARGET_CPU_EV6 ? "ev6"                            \
-            : (TARGET_CPU_EV5                                  \
-               ? (TARGET_MAX ? "pca56" : TARGET_BWX ? "ev56" : "ev5") \
-               : "ev4"));                                      \
-                                                               \
-  ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename);      \
-}
-
 /* Tru64 UNIX V5.1 requires a special as flag.  Empty by default.  */
 
 #define ASM_OLDAS_SPEC ""
index a5ed941..8b186f6 100644 (file)
@@ -333,16 +333,7 @@ ssib_section ()                    \
   in_section = in_ssib;                \
 }
 
-/* This outputs text to go at the start of an assembler file.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)   unicosmk_asm_file_start (FILE)
-
-/* This outputs text to go at the end of an assembler file.  */
-
-#define TARGET_ASM_FILE_END    unicosmk_file_end
-
-/* We take care of that in ASM_FILE_START.  */
+/* We take care of this in unicosmk_file_start.  */
 
 #undef ASM_OUTPUT_SOURCE_FILENAME
 
index fe12fba..f02e199 100644 (file)
@@ -242,21 +242,6 @@ typedef struct {int num_args; enum avms_arg_type atypes[6];} avms_arg_info;
 #undef STACK_CHECK_BUILTIN
 #define STACK_CHECK_BUILTIN 0
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                   \
-{                                                              \
-  alpha_write_verstamp (FILE);                                 \
-  fprintf (FILE, "\t.set noreorder\n");                                \
-  fprintf (FILE, "\t.set volatile\n");                         \
-  if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX)       \
-    {                                                          \
-      fprintf (FILE, "\t.arch %s\n",                           \
-               (TARGET_CPU_EV6 ? "ev6"                         \
-                : TARGET_MAX ? "pca56" : "ev56"));             \
-    }                                                          \
-  ASM_OUTPUT_SOURCE_FILENAME (FILE, main_input_filename);      \
-}
-
 #define LINK_SECTION_ASM_OP "\t.link"
 #define READONLY_DATA_SECTION_ASM_OP "\t.rdata"
 #define LITERALS_SECTION_ASM_OP "\t.literals"
index 717845e..f557989 100644 (file)
@@ -66,7 +66,6 @@ extern void arc_setup_incoming_varargs PARAMS ((CUMULATIVE_ARGS *,
 
 
 extern void arc_init PARAMS ((void));
-extern void arc_asm_file_start PARAMS ((FILE *));
 extern unsigned int arc_compute_frame_size PARAMS ((int));
 extern void arc_save_restore PARAMS ((FILE *, const char *, unsigned int,
                                      unsigned int, const char *));
index 7673f6f..67e1b73 100644 (file)
@@ -94,6 +94,7 @@ static tree arc_handle_interrupt_attribute PARAMS ((tree *, tree, tree, int, boo
 static bool arc_assemble_integer PARAMS ((rtx, unsigned int, int));
 static void arc_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
 static void arc_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
+static void arc_file_start PARAMS ((void));
 static void arc_internal_label PARAMS ((FILE *, const char *, unsigned long));
 static bool arc_rtx_costs PARAMS ((rtx, int, int, int *));
 static int arc_address_cost PARAMS ((rtx));
@@ -110,6 +111,8 @@ static int arc_address_cost PARAMS ((rtx));
 #define TARGET_ASM_FUNCTION_PROLOGUE arc_output_function_prologue
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE arc_output_function_epilogue
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START arc_file_start
 #undef TARGET_ATTRIBUTE_TABLE
 #define TARGET_ATTRIBUTE_TABLE arc_attribute_table
 #undef TARGET_ASM_INTERNAL_LABEL
@@ -1657,11 +1660,11 @@ arc_initialize_trampoline (tramp, fnaddr, cxt)
 /* Set the cpu type and print out other fancy things,
    at the top of the file.  */
 
-void
-arc_asm_file_start (file)
-     FILE *file;
+static void
+arc_file_start ()
 {
-  fprintf (file, "\t.cpu %s\n", arc_cpu_string);
+  default_file_start ();
+  fprintf (asm_out_file, "\t.cpu %s\n", arc_cpu_string);
 }
 \f
 /* Print operand X (an rtx) in assembler syntax to file FILE.
index 7bb9231..16d6d71 100644 (file)
@@ -1110,10 +1110,6 @@ extern const char *arc_text_section, *arc_data_section, *arc_rodata_section;
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) arc_asm_file_start (FILE)
-
 /* A C string constant describing how to begin a comment in the target
    assembler language.  The compiler assumes that the comment will
    end at the end of the line.  */
index 39f2cc3..2650a0e 100644 (file)
    whole table generation until the end of the function.  */
 #define JUMP_TABLES_IN_TEXT_SECTION 1
 
-#ifndef ARM_OS_NAME
-#define ARM_OS_NAME "(generic)"
-#endif
-
-/* For the AOF linker, we need to reference __main to force the standard
-   library to get linked in. */
-
-#define ASM_FILE_START(STREAM)                                 \
-{                                                              \
-  fprintf ((STREAM), "%s Generated by gcc %s for ARM/%s\n",    \
-          ASM_COMMENT_START, version_string, ARM_OS_NAME);     \
-  fprintf ((STREAM), "__r0\tRN\t0\n");                         \
-  fprintf ((STREAM), "__a1\tRN\t0\n");                         \
-  fprintf ((STREAM), "__a2\tRN\t1\n");                         \
-  fprintf ((STREAM), "__a3\tRN\t2\n");                         \
-  fprintf ((STREAM), "__a4\tRN\t3\n");                         \
-  fprintf ((STREAM), "__v1\tRN\t4\n");                         \
-  fprintf ((STREAM), "__v2\tRN\t5\n");                         \
-  fprintf ((STREAM), "__v3\tRN\t6\n");                         \
-  fprintf ((STREAM), "__v4\tRN\t7\n");                         \
-  fprintf ((STREAM), "__v5\tRN\t8\n");                         \
-  fprintf ((STREAM), "__v6\tRN\t9\n");                         \
-  fprintf ((STREAM), "__sl\tRN\t10\n");                                \
-  fprintf ((STREAM), "__fp\tRN\t11\n");                                \
-  fprintf ((STREAM), "__ip\tRN\t12\n");                                \
-  fprintf ((STREAM), "__sp\tRN\t13\n");                                \
-  fprintf ((STREAM), "__lr\tRN\t14\n");                                \
-  fprintf ((STREAM), "__pc\tRN\t15\n");                                \
-  fprintf ((STREAM), "__f0\tFN\t0\n");                         \
-  fprintf ((STREAM), "__f1\tFN\t1\n");                         \
-  fprintf ((STREAM), "__f2\tFN\t2\n");                         \
-  fprintf ((STREAM), "__f3\tFN\t3\n");                         \
-  fprintf ((STREAM), "__f4\tFN\t4\n");                         \
-  fprintf ((STREAM), "__f5\tFN\t5\n");                         \
-  fprintf ((STREAM), "__f6\tFN\t6\n");                         \
-  fprintf ((STREAM), "__f7\tFN\t7\n");                         \
-  text_section ();                                             \
-}
-
 /* Some systems use __main in a way incompatible with its use in gcc, in these
    cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
    give the same symbol without quotes for an alternative entry point.  You
@@ -285,7 +246,7 @@ do {                                        \
   "wr0",   "wr1",   "wr2",   "wr3",            \
   "wr4",   "wr5",   "wr6",   "wr7",            \
   "wr8",   "wr9",   "wr10",  "wr11",           \
-  "wr12",  "wr13",  "wr14",  "wr15"
+  "wr12",  "wr13",  "wr14",  "wr15"            \
 }
 
 #define ADDITIONAL_REGISTER_NAMES              \
index 23679eb..1f060fa 100644 (file)
    the Free Software Foundation, 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#ifndef ARM_OS_NAME
-#define ARM_OS_NAME "(generic)"
-#endif
-
-/* The text to go at the start of the assembler file.  */
-#ifndef ASM_FILE_START
-#define ASM_FILE_START(STREAM)             \
-{                                          \
-  asm_fprintf (STREAM,"%Rrfp\t.req\t%Rr9\n"); \
-  asm_fprintf (STREAM,"%Rsl\t.req\t%Rr10\n"); \
-  asm_fprintf (STREAM,"%Rfp\t.req\t%Rr11\n"); \
-  asm_fprintf (STREAM,"%Rip\t.req\t%Rr12\n"); \
-  asm_fprintf (STREAM,"%Rsp\t.req\t%Rr13\n"); \
-  asm_fprintf (STREAM,"%Rlr\t.req\t%Rr14\n"); \
-  asm_fprintf (STREAM,"%Rpc\t.req\t%Rr15\n"); \
-}
-#endif
-
 #ifndef ASM_APP_ON
 #define ASM_APP_ON             ""
 #endif
index e5b1324..c0ee99e 100644 (file)
@@ -147,6 +147,7 @@ static void arm_encode_section_info (tree, rtx, int);
 static void aof_globalize_label (FILE *, const char *);
 static void aof_dump_imports (FILE *);
 static void aof_dump_pic_table (FILE *);
+static void aof_file_start (void);
 static void aof_file_end (void);
 #endif
 
@@ -169,6 +170,8 @@ static void aof_file_end (void);
 #define TARGET_ASM_ALIGNED_SI_OP "\tDCD\t"
 #undef TARGET_ASM_GLOBALIZE_LABEL
 #define TARGET_ASM_GLOBALIZE_LABEL aof_globalize_label
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START aof_file_start
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END aof_file_end
 #else
@@ -12839,6 +12842,37 @@ aof_globalize_label (FILE *stream, const char *name)
 }
 
 static void
+aof_file_start ()
+{
+  fputs ("__r0\tRN\t0\n", asm_out_file);
+  fputs ("__a1\tRN\t0\n", asm_out_file);
+  fputs ("__a2\tRN\t1\n", asm_out_file);
+  fputs ("__a3\tRN\t2\n", asm_out_file);
+  fputs ("__a4\tRN\t3\n", asm_out_file);
+  fputs ("__v1\tRN\t4\n", asm_out_file);
+  fputs ("__v2\tRN\t5\n", asm_out_file);
+  fputs ("__v3\tRN\t6\n", asm_out_file);
+  fputs ("__v4\tRN\t7\n", asm_out_file);
+  fputs ("__v5\tRN\t8\n", asm_out_file);
+  fputs ("__v6\tRN\t9\n", asm_out_file);
+  fputs ("__sl\tRN\t10\n", asm_out_file);
+  fputs ("__fp\tRN\t11\n", asm_out_file);
+  fputs ("__ip\tRN\t12\n", asm_out_file);
+  fputs ("__sp\tRN\t13\n", asm_out_file);
+  fputs ("__lr\tRN\t14\n", asm_out_file);
+  fputs ("__pc\tRN\t15\n", asm_out_file);
+  fputs ("__f0\tFN\t0\n", asm_out_file);
+  fputs ("__f1\tFN\t1\n", asm_out_file);
+  fputs ("__f2\tFN\t2\n", asm_out_file);
+  fputs ("__f3\tFN\t3\n", asm_out_file);
+  fputs ("__f4\tFN\t4\n", asm_out_file);
+  fputs ("__f5\tFN\t5\n", asm_out_file);
+  fputs ("__f6\tFN\t6\n", asm_out_file);
+  fputs ("__f7\tFN\t7\n", asm_out_file);
+  text_section ();
+}
+
+static void
 aof_file_end (void)
 {
   if (flag_pic)
index df47bcf..c4f0932 100644 (file)
 
 #include "dbxcoff.h"
 \f
-/* A C statement to output assembler commands which will identify the
-   object file as having been compiled with GCC (or another GNU
-   compiler).  */
-
-/* This outputs a lot of .req's to define alias for various registers.
-   Let's try to avoid this.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(STREAM)                                 \
-  do                                                           \
-    {                                                          \
-      fprintf (STREAM, "%s Generated by gcc %s for ARM/coff\n",        \
-              ASM_COMMENT_START, version_string);              \
-      fprintf (STREAM, ASM_APP_OFF);                           \
-    }                                                          \
-  while (0)
+#define TARGET_ASM_FILE_START_APP_OFF true
 
 /* Switch into a generic section.  */
 #define TARGET_ASM_NAMED_SECTION  default_coff_asm_named_section
index 89f18f2..581f726 100644 (file)
   { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
 #endif
 \f
-
-/* This outputs a lot of .req's to define alias for various registers.
-   Let's try to avoid this.  */
-#ifndef ASM_FILE_START
-#define ASM_FILE_START(STREAM)                                 \
-  do                                                           \
-    {                                                          \
-      fprintf (STREAM, "%s Generated by gcc %s for ARM/elf\n", \
-              ASM_COMMENT_START, version_string);              \
-      output_file_directive (STREAM, main_input_filename);     \
-      fprintf (STREAM, ASM_APP_OFF);                           \
-    }                                                          \
-  while (0)
-#endif
+#define TARGET_ASM_FILE_START_APP_OFF true
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 \f
 #undef  TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION  arm_elf_asm_named_section
index ef599ad..fd79f1f 100644 (file)
@@ -47,8 +47,5 @@
 #undef  SUBTARGET_CPU_DEFAULT
 #define SUBTARGET_CPU_DEFAULT  TARGET_CPU_strongarm
 
-#undef  ARM_OS_NAME
-#define ARM_OS_NAME "FreeBSD"
-
 #undef  TARGET_VERSION
 #define TARGET_VERSION fprintf (stderr, " (FreeBSD/StrongARM ELF)");
index f3ed5f8..6911284 100644 (file)
 /* This is how we tell the assembler that a symbol is weak.
    GAS always supports weak symbols.  */
 
-/* This is used in ASM_FILE_START.  */
-#undef  ARM_OS_NAME
-#define ARM_OS_NAME "Linux"
-
 /* Unsigned chars produces much better code than signed.  */
 #define DEFAULT_SIGNED_CHAR 0
 
index 91ba9cd..a8b43f6 100644 (file)
 #undef TARGET_VERSION
 #define TARGET_VERSION fputs (" (NetBSD/arm ELF)", stderr);
 
-/* This is used in ASM_FILE_START.  */
-#undef ARM_OS_NAME
-#define ARM_OS_NAME "NetBSD"
-
 /* arm.h defaults to ARM6 CPU.  */
 
 /* This defaults us to little-endian.  */
index d7e6837..c1db2df 100644 (file)
 #undef  TARGET_VERSION
 #define TARGET_VERSION fputs (" (ARM/NetBSD)", stderr);
 
-/* This is used in ASM_FILE_START.  */
-#undef ARM_OS_NAME
-#define ARM_OS_NAME "NetBSD"
-
 /* Unsigned chars produces much better code than signed.  */
 #define DEFAULT_SIGNED_CHAR  0
 
index a8ca0d4..bd0b660 100644 (file)
 #undef  TARGET_ASM_NAMED_SECTION
 #define TARGET_ASM_NAMED_SECTION  default_pe_asm_named_section
 \f
-/* This outputs a lot of .req's to define alias for various registers.
-   Let's try to avoid this.  */
-#undef  ASM_FILE_START
-#define ASM_FILE_START(STREAM)                                 \
-  do                                                           \
-    {                                                          \
-      asm_fprintf (STREAM, "%@ Generated by gcc %s for ARM/pe\n",\
-          version_string);                                     \
-      output_file_directive ((STREAM), main_input_filename);   \
-    }                                                          \
-  while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 /* Output a reference to a label.  */
 #undef  ASM_OUTPUT_LABELREF
index f495388..fafd36c 100644 (file)
@@ -22,7 +22,6 @@
 
 
 extern int    function_arg_regno_p              PARAMS ((int r));
-extern void   asm_file_start                    PARAMS ((FILE *file));
 extern void   avr_init_once                     PARAMS ((void));
 extern void   avr_override_options              PARAMS ((void));
 extern void   avr_optimization_options         PARAMS ((int level, int size));
index fe883f9..d6fcd47 100644 (file)
@@ -63,6 +63,7 @@ static tree   avr_handle_progmem_attribute PARAMS ((tree *, tree, tree, int, boo
 static tree   avr_handle_fndecl_attribute PARAMS ((tree *, tree, tree, int, bool *));
 const struct attribute_spec avr_attribute_table[];
 static bool   avr_assemble_integer PARAMS ((rtx, unsigned int, int));
+static void   avr_file_start PARAMS ((void));
 static void   avr_file_end PARAMS ((void));
 static void   avr_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
 static void   avr_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
@@ -219,6 +220,10 @@ int avr_case_values_threshold = 30000;
 #define TARGET_ASM_ALIGNED_HI_OP "\t.word\t"
 #undef TARGET_ASM_INTEGER
 #define TARGET_ASM_INTEGER avr_assemble_integer
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START avr_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END avr_file_end
 
@@ -4888,30 +4893,30 @@ avr_section_type_flags (decl, name, reloc)
   return flags;
 }
 
-/* Outputs to the stdio stream FILE some
-   appropriate text to go at the start of an assembler file.  */
+/* Outputs some appropriate text to go at the start of an assembler
+   file.  */
 
-void
-asm_file_start (file)
-     FILE *file;
+static void
+avr_file_start ()
 {
   if (avr_asm_only_p)
     error ("MCU `%s' supported for assembler only", avr_mcu_name);
 
-  output_file_directive (file, main_input_filename);
-  fprintf (file, "\t.arch %s\n", avr_mcu_name);
+  default_file_start ();
+
+  fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);
   fputs ("__SREG__ = 0x3f\n"
         "__SP_H__ = 0x3e\n"
-        "__SP_L__ = 0x3d\n", file);
+        "__SP_L__ = 0x3d\n", asm_out_file);
   
   fputs ("__tmp_reg__ = 0\n" 
-         "__zero_reg__ = 1\n", file);
+         "__zero_reg__ = 1\n", asm_out_file);
 
   /* FIXME: output these only if there is anything in the .data / .bss
      sections - some code size could be saved by not linking in the
      initialization code from libgcc if one or both sections are empty.  */
-  fputs ("\t.global __do_copy_data\n", file);
-  fputs ("\t.global __do_clear_bss\n", file);
+  fputs ("\t.global __do_copy_data\n", asm_out_file);
+  fputs ("\t.global __do_clear_bss\n", asm_out_file);
 
   commands_in_file = 0;
   commands_in_prologues = 0;
index 4bdad07..8255e19 100644 (file)
@@ -1687,18 +1687,6 @@ progmem_section ()                                                             \
    This macro is irrelevant if there is no separate readonly data
    section.  */
 
-#define ASM_FILE_START(STREAM) asm_file_start (STREAM)
-/* A C expression which outputs to the stdio stream STREAM some
-   appropriate text to go at the start of an assembler file.
-
-   Normally this macro is defined to output a line containing
-   `#NO_APP', which is a comment that has no effect on most
-   assemblers but tells the GNU assembler that it can save time by not
-   checking for certain assembler constructs.
-
-   On systems that use SDB, it is necessary to output certain
-   commands; see `attasm.h'.  */
-
 #define ASM_COMMENT_START " ; "
 /* A C string constant describing how to begin a comment in the target
    assembler language.  The compiler assumes that the comment will
index 06bb737..5d097cc 100644 (file)
@@ -185,6 +185,7 @@ static int c4x_valid_operands PARAMS ((enum rtx_code, rtx *,
                                       enum machine_mode, int));
 static int c4x_arn_reg_operand PARAMS ((rtx, enum machine_mode, unsigned int));
 static int c4x_arn_mem_operand PARAMS ((rtx, enum machine_mode, unsigned int));
+static void c4x_file_start PARAMS ((void));
 static void c4x_file_end PARAMS ((void));
 static void c4x_check_attribute PARAMS ((const char *, tree, tree, tree *));
 static int c4x_r11_set_p PARAMS ((rtx));
@@ -207,6 +208,10 @@ static int c4x_address_cost PARAMS ((rtx));
 #define TARGET_ASM_ALIGNED_HI_OP NULL
 #undef TARGET_ASM_ALIGNED_SI_OP
 #define TARGET_ASM_ALIGNED_SI_OP NULL
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START c4x_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END c4x_file_end
 
@@ -4563,6 +4568,26 @@ c4x_external_ref (name)
   extern_head = p;
 }
 
+/* We need to have a data section we can identify so that we can set
+   the DP register back to a data pointer in the small memory model.
+   This is only required for ISRs if we are paranoid that someone
+   may have quietly changed this register on the sly.  */
+static void
+c4x_file_start ()
+{
+  int dspversion = 0;
+  if (TARGET_C30) dspversion = 30;
+  if (TARGET_C31) dspversion = 31;
+  if (TARGET_C32) dspversion = 32;
+  if (TARGET_C33) dspversion = 33;
+  if (TARGET_C40) dspversion = 40;
+  if (TARGET_C44) dspversion = 44;
+
+  default_file_start ();
+  fprintf (asm_out_file, "\t.version\t%d\n", dspversion);
+  fputs ("\n\t.data\ndata_sec:\n", asm_out_file);
+}
+
 
 static void
 c4x_file_end ()
index bea00ff..fb3622b 100644 (file)
@@ -1548,35 +1548,6 @@ fini_section ()                                                  \
 
 
 /* Overall Framework of an Assembler File.  */
-/* We need to have a data section we can identify so that we can set
-   the DP register back to a data pointer in the small memory model.
-   This is only required for ISRs if we are paranoid that someone
-   may have quietly changed this register on the sly.  */
-
-#define ASM_FILE_START(FILE)                                   \
-{                                                              \
-    int dspversion = 0;                                                \
-    if (TARGET_C30) dspversion = 30;                           \
-    if (TARGET_C31) dspversion = 31;                           \
-    if (TARGET_C32) dspversion = 32;                           \
-    if (TARGET_C33) dspversion = 33;                            \
-    if (TARGET_C40) dspversion = 40;                           \
-    if (TARGET_C44) dspversion = 44;                           \
-    fprintf (FILE, "\t.version\t%d\n", dspversion);            \
-    fprintf (FILE, "\t.file\t");                               \
-    if (TARGET_TI)                                             \
-      {                                                                \
-        const char *p;                                         \
-        const char *after_dir = main_input_filename;           \
-       for (p = main_input_filename; *p; p++)                  \
-         if (*p == '/')                                        \
-           after_dir = p + 1;                                  \
-       output_quoted_string (FILE, after_dir);                 \
-      }                                                                \
-    else                                                       \
-      output_quoted_string (FILE, main_input_filename);                \
-    fputs ("\n\t.data\ndata_sec:\n", FILE);                    \
-}
 
 #define ASM_COMMENT_START ";"
 
index bff96df..7136672 100644 (file)
@@ -105,6 +105,8 @@ static void cris_operand_lossage PARAMS ((const char *, rtx));
 static void cris_asm_output_mi_thunk
   PARAMS ((FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree));
 
+static void cris_file_start PARAMS ((void));
+
 static bool cris_rtx_costs PARAMS ((rtx, int, int, int *));
 static int cris_address_cost PARAMS ((rtx));
 
@@ -162,6 +164,9 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION;
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START cris_file_start
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS cris_rtx_costs
 #undef TARGET_ADDRESS_COST
@@ -2761,6 +2766,24 @@ cris_asm_output_mi_thunk (stream, thunkdecl, delta, vcall_offset, funcdecl)
     }
 }
 
+/* Boilerplate emitted at start of file.  
+
+   NO_APP *only at file start* means faster assembly.  It also means
+   comments are not allowed.  In some cases comments will be output
+   for debugging purposes.  Make sure they are allowed then.
+
+   We want a .file directive only if TARGET_ELF.  */
+static void
+cris_file_start ()
+{
+  /* These expressions can vary at run time, so we cannot put
+     them into TARGET_INITIALIZER.  */
+  targetm.file_start_app_off = !(TARGET_PDEBUG || flag_print_asm_name);
+  targetm.file_start_file_directive = TARGET_ELF;
+
+  default_file_start ();
+}
+
 /* The EXPAND_BUILTIN_VA_ARG worker.  This is modified from the
    "standard" implementation of va_arg: read the value from the current
    address and increment by the size of one or two registers.  The
index a517830..6517cc5 100644 (file)
@@ -1392,24 +1392,6 @@ call_ ## FUNC (void)                                             \
 
 /* Node: File Framework */
 
-/* NO_APP *only at file start* means faster assembly.
-   It also means comments are not allowed.
-   In some cases comments will be output for debugging purposes.
-   Make sure they are allowed then.  */
-/* Override previous definitions (elfos.h).  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(STREAM)                                 \
-  do                                                           \
-    {                                                          \
-      if (TARGET_PDEBUG || flag_print_asm_name)                        \
-       fprintf ((STREAM), "#APP\n");                           \
-      else                                                     \
-       fprintf ((STREAM), "#NO_APP\n");                        \
-      if (TARGET_ELF)                                          \
-       output_file_directive ((STREAM), main_input_filename);  \
-    }                                                          \
-  while (0)
-
 /* We don't want an .ident for gcc.  To avoid that but still support
    #ident, we override ASM_OUTPUT_IDENT and, since the gcc .ident is its
    only use besides ASM_OUTPUT_IDENT, undef IDENT_ASM_OP from elfos.h.  */
index eebb0ee..7d26c26 100644 (file)
@@ -326,9 +326,8 @@ do { text_section ();                                                       \
 
 /* Don't output a .file directive.  That is only used by the assembler for
    error reporting.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)
+#undef ASM_FILE_START_FILE_DIRECTIVE
+#define ASM_FILE_START_FILE_DIRECTIVE false
 
 #undef  TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END darwin_file_end
index 91496d9..7e2683f 100644 (file)
@@ -77,9 +77,6 @@ extern int initial_frame_pointer_offset PARAMS ((void));
 extern void asm_output_common PARAMS ((FILE *, const char *, int, int));
 extern void asm_output_local PARAMS ((FILE *, const char *, int, int));
 extern void asm_output_float PARAMS ((FILE *, double));
-extern void dsp16xx_file_start PARAMS ((void));
-extern void coff_dsp16xx_file_start PARAMS ((FILE *));
-extern void luxworks_dsp16xx_file_start PARAMS ((FILE *));
 extern bool dsp16xx_compare_gen;
 extern int hard_regno_mode_ok PARAMS ((int, enum machine_mode));
 extern enum reg_class dsp16xx_reg_class_from_letter PARAMS ((int));
index 60b8deb..d858706 100644 (file)
@@ -151,6 +151,7 @@ static const char *const lshift_right_asm_first[] =
 static int reg_save_size PARAMS ((void));
 static void dsp16xx_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
 static void dsp16xx_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
+static void dsp16xx_file_start PARAMS ((void));
 static bool dsp16xx_rtx_costs PARAMS ((rtx, int, int, int *));
 static int dsp16xx_address_cost PARAMS ((rtx));
 \f
@@ -168,6 +169,9 @@ static int dsp16xx_address_cost PARAMS ((rtx));
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE dsp16xx_output_function_epilogue
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START dsp16xx_file_start
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS dsp16xx_rtx_costs
 #undef TARGET_ADDRESS_COST
@@ -2373,49 +2377,10 @@ dsp16xx_function_arg_advance (cum, mode, type, named)
     }
 }
 
-void
-coff_dsp16xx_file_start (file)
-     FILE *file;
-{
-  fprintf (file, "#include <%s.h>\n", save_chip_name);
-}
-
-void
-luxworks_dsp16xx_file_start (file)
-     FILE *file;
+static void
+dsp16xx_file_start ()
 {
-  char *temp_filename;
-  int len, err_code;
-
-
-  fprintf (file, "\t.debug ");
-  err_code = (TARGET_DEBUG) ? fprintf (file, "yes, ") : fprintf (file, "no, ");
-  err_code = (TARGET_SAVE_TEMPS) ? fprintf (file, "asm, ") : fprintf (file, "temp, ");
-  len = strlen (main_input_filename);
-  temp_filename = (char *) xmalloc (len + 2);
-  strcpy (temp_filename, main_input_filename);
-#ifdef __CYGWIN32__
-    p = temp_filename;
-    while (*p != '\0') {
-    if (*p == '\\')
-        *p = '/';
-         p++;
-         }
-#endif
-    fprintf (file, "\"%s\"\n", temp_filename);
-
-  fprintf (file, "#include <%s.h>\n", save_chip_name);
-
-   /*
-    * Add dummy sections, so that they always exist in the 
-    * object code. These have been created so that the number and
-    * type of sections remain consistent with and without -g option. Note
-    * that the .data, .text, .const and .bss are always created when -g
-    * is provided as an option.  */
-   fprintf (file, "\t.rsect \".text\" , nodelete\n");
-   fprintf (file, "\t.rsect \".data\" , nodelete\n");
-   fprintf (file, "\t.rsect \".const\" , nodelete\n");
-   fprintf (file, "\t.rsect \".bss\" , nodelete\n");
+  fprintf (asm_out_file, "#include <%s.h>\n", save_chip_name);
 }
 
 rtx
index 03e237d..83df033 100644 (file)
@@ -1487,9 +1487,6 @@ extern struct dsp16xx_frame_info current_frame_info;
 \f
 /* THE OVERALL FRAMEWORK OF AN ASSEMBLER FILE */
 
-/* Output at beginning of assembler file.  */
-#define ASM_FILE_START(FILE) coff_dsp16xx_file_start (FILE) 
-
 /* A C string constant describing how to begin a comment in the target
    assembler language.  */
 #define ASM_COMMENT_START ""
index 3a04661..ed9efc6 100644 (file)
@@ -96,16 +96,9 @@ Boston, MA 02111-1307, USA.  */
 #undef  SET_ASM_OP
 #define SET_ASM_OP     "\t.set\t"
 
-/* This is how to begin an assembly language file.  Most svr4 assemblers want
-   at least a .file directive to come first, and some want to see a .version
-   directive come right after that.  Here we just establish a default
-   which generates only the .file directive.  If you need a .version
-   directive for any specific target, you should override this definition
-   in the target-specific file which includes this one.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                            \
-  output_file_directive ((FILE), main_input_filename)
+/* Most svr4 assemblers want a .file directive at the beginning of
+   their input file.  */
+#define ASM_FILE_START_FILE_DIRECTIVE true
 
 /* This is how to allocate empty space in some section.  The .zero
    pseudo-op is used for this on most svr4 assemblers.  */
index c306993..7f67a3a 100644 (file)
                        %{pg:gcrti.o%s}%{!pg:crti.o%s} \
                        crtbegin.o%s"
 
-/* Output at beginning/end of assembler file.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                            \
-  (output_file_directive ((FILE), main_input_filename), \
-   asm_file_start (FILE))
-
 #undef USER_LABEL_PREFIX
 #define USER_LABEL_PREFIX "_"
 
index 320e031..b86b8ab 100644 (file)
@@ -94,7 +94,6 @@ extern int h8300_can_use_return_insn_p (void);
 extern void h8300_expand_prologue (void);
 extern void h8300_expand_epilogue (void);
 extern int h8300_current_function_interrupt_function_p (void);
-extern void asm_file_start (FILE *);
 extern int h8300_initial_elimination_offset (int, int);
 
 struct cpp_reader;
index 8690a3c..826cd6c 100644 (file)
@@ -655,29 +655,15 @@ h8300_current_function_interrupt_function_p (void)
 
 /* Output assembly code for the start of the file.  */
 
-void
-asm_file_start (FILE *file)
+static void
+h8300_file_start (void)
 {
-  fprintf (file, ";\tGCC For the Hitachi H8/300\n");
-  fprintf (file, ";\tBy Hitachi America Ltd and Cygnus Support\n");
+  default_file_start ();
 
-  if (optimize_size)
-    fprintf (file, "; -Os\n");
-  else if (optimize)
-    fprintf (file, "; -O%d\n", optimize);
   if (TARGET_H8300H)
-    if (TARGET_NORMAL_MODE)
-      fprintf (file, "\n\t.h8300hn\n");
-    else
-      fprintf (file, "\n\t.h8300h\n");
+    fputs (TARGET_NORMAL_MODE ? "\t.h8300hn\n" : "\t.h8300h\n", asm_out_file);
   else if (TARGET_H8300S)
-    if (TARGET_NORMAL_MODE)
-      fprintf (file, "\n\t.h8300sn\n");
-    else
-      fprintf (file, "\n\t.h8300s\n");
-  else
-    fprintf (file, "\n\n");
-  output_file_directive (file, main_input_filename);
+    fputs (TARGET_NORMAL_MODE ? "\t.h8300sn\n" : "\t.h8300s\n", asm_out_file);
 }
 
 /* Output assembly language code for the end of file.  */
@@ -4360,6 +4346,11 @@ byte_accesses_mergeable_p (rtx addr1, rtx addr2)
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE h8300_output_function_epilogue
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START h8300_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END h8300_file_end
 
index 03b4cc3..0bbeb2c 100644 (file)
@@ -1030,10 +1030,6 @@ struct cum_arg
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning/end of assembler file.  */
-
-#define ASM_FILE_START(FILE) asm_file_start (FILE)
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index cbb118b..501e353 100644 (file)
@@ -107,6 +107,7 @@ static void i370_globalize_label PARAMS ((FILE *, const char *));
 #endif
 static void i370_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
 static void i370_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
+static void i370_file_start PARAMS ((void));
 static void i370_file_end PARAMS ((void));
 
 #ifdef LONGEXTERNAL
@@ -320,6 +321,8 @@ static const unsigned char ebcasc[256] =
 #define TARGET_ASM_FUNCTION_PROLOGUE i370_output_function_prologue
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE i370_output_function_epilogue
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START i370_file_start
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END i370_file_end
 #undef TARGET_ASM_INTERNAL_LABEL
@@ -1603,6 +1606,12 @@ i370_output_function_epilogue (file, l)
 }
 
 static void
+i370_file_start ()
+{
+  fputs ("\tRMODE\tANY\n\tCSECT\n", asm_out_file);
+}
+
+static void
 i370_file_end ()
 {
   fputs ("\tEND\n", asm_out_file);
index dd82a6f..93e6ea6 100644 (file)
@@ -1029,10 +1029,6 @@ enum reg_class
   "0",  "2",  "4",  "6"                                                        \
 }
 
-#define ASM_FILE_START(FILE)                                           \
-{ fputs ("\tRMODE\tANY\n", FILE);                                      \
-  fputs ("\tCSECT\n", FILE); }
-
 #define ASM_COMMENT_START "*"
 #define ASM_APP_OFF ""
 #define ASM_APP_ON ""
index c95b6ad..b51f66b 100644 (file)
@@ -45,14 +45,7 @@ do                                                           \
 } while (0)
 
 /* Output at beginning of assembler file.  */
-/* The .file command should always begin the output.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                           \
-  do {                                                                 \
-       output_file_directive (FILE, main_input_filename);              \
-       if (ix86_asm_dialect == ASM_INTEL)                              \
-         fputs ("\t.intel_syntax\n", FILE);                            \
-  } while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 /* This is how to output an assembler line
    that says to advance the location counter
index 6dec86e..7104ac3 100644 (file)
@@ -121,12 +121,4 @@ Boston, MA 02111-1307, USA.  */
 /* Print opcodes the way that GAS expects them.  */
 #define GAS_MNEMONICS 1
 
-/* Output at beginning of assembler file.  */
-/* The .file command should always begin the output.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                           \
-  do {                                                                 \
-        output_file_directive (FILE, main_input_filename);             \
-       if (ix86_asm_dialect == ASM_INTEL)                              \
-         fputs ("\t.intel_syntax\n", FILE);                            \
-  } while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
index 4d3f860..c58d07b 100644 (file)
@@ -92,16 +92,8 @@ Boston, MA 02111-1307, USA.  */
 /* The global __fltused is necessary to cause the printf/scanf routines
    for outputting/inputting floating point numbers to be loaded.  Since this
    is kind of hard to detect, we just do it all the time.  */
-
-#ifdef ASM_FILE_START
-#undef ASM_FILE_START
-#endif
-#define ASM_FILE_START(FILE) \
-  do {  fprintf (FILE, "\t.file\t");                            \
-        output_quoted_string (FILE, dump_base_name);            \
-        fprintf (FILE, "\n");                                   \
-        fprintf (FILE, ".global\t__fltused\n");                 \
-  } while (0)
+#undef X86_FILE_START_FLTUSED
+#define X86_FILE_START_FLTUSED 1
 
 /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
    ASM_OUTPUT_LIMITED_STRING macros.  Each byte in the table
index bc1604f..8409def 100644 (file)
@@ -829,6 +829,7 @@ static void x86_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                         HOST_WIDE_INT, tree));
 static bool x86_can_output_mi_thunk PARAMS ((tree, HOST_WIDE_INT,
                                             HOST_WIDE_INT, tree));
+static void x86_file_start PARAMS ((void));
 static void ix86_reorg PARAMS ((void));
 bool ix86_expand_carry_flag_compare PARAMS ((enum rtx_code, rtx, rtx, rtx*));
 
@@ -1006,6 +1007,9 @@ static void init_ext_80387_constants PARAMS ((void));
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK x86_can_output_mi_thunk
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START x86_file_start
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS ix86_rtx_costs
 #undef TARGET_ADDRESS_COST
@@ -15532,6 +15536,18 @@ x86_output_mi_thunk (file, thunk, delta, vcall_offset, function)
     }
 }
 
+static void
+x86_file_start ()
+{
+  default_file_start ();
+  if (X86_FILE_START_VERSION_DIRECTIVE)
+    fputs ("\t.version\t\"01.01\"\n", asm_out_file);
+  if (X86_FILE_START_FLTUSED)
+    fputs ("\t.global\t__fltused\n", asm_out_file);
+  if (ix86_asm_dialect == ASM_INTEL)
+    fputs ("\t.intel_syntax\n", asm_out_file);
+}
+
 int
 x86_field_alignment (field, computed)
      tree field;
index b8a6b7b..cfc96b5 100644 (file)
@@ -3229,6 +3229,10 @@ struct machine_function GTY(())
 #define ix86_save_varrargs_registers (cfun->machine->save_varrargs_registers)
 #define ix86_optimize_mode_switching (cfun->machine->optimize_mode_switching)
 
+/* Control behavior of x86_file_start.  */
+#define X86_FILE_START_VERSION_DIRECTIVE false
+#define X86_FILE_START_FLTUSED false
+
 /*
 Local variables:
 version-control: t
index ae6e8d0..98a25a9 100644 (file)
@@ -25,13 +25,7 @@ Boston, MA 02111-1307, USA.  */
 
 /* Output at beginning of assembler file.  */
 /* The .file command should always begin the output.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                           \
-  do {                                                                 \
-       output_file_directive (FILE, main_input_filename);              \
-       if (ix86_asm_dialect == ASM_INTEL)                              \
-         fputs ("\t.intel_syntax\n", FILE);                            \
-  } while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 #define TARGET_VERSION fprintf (stderr, " (i386 Linux/ELF)");
 
index b4096a7..b53bc21 100644 (file)
@@ -44,12 +44,9 @@ Boston, MA 02111-1307, USA.  */
 #define CTORS_SECTION_ASM_OP           "\t.section\t.ctors, \"aw\""
 #define DTORS_SECTION_ASM_OP           "\t.section\t.dtors, \"aw\""
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                           \
-do {                                                                   \
-  output_file_directive((FILE),main_input_filename);                   \
-  fprintf ((FILE), "\t.version\t\"01.01\"\n");                         \
-} while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+#undef X86_FILE_START_VERSION_DIRECTIVE
+#define X86_FILE_START_VERSION_DIRECTIVE true
 
 /* A C statement (sans semicolon) to output to the stdio stream
    FILE the assembler definition of uninitialized global DECL named
index 6b3335e..d3e2d8b 100644 (file)
@@ -34,12 +34,9 @@ Boston, MA 02111-1307, USA.  */
 /* Output at beginning of assembler file.  */
 /* The .file command should always begin the output.  */
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                           \
-  do {                                                                 \
-       output_file_directive (FILE, main_input_filename);              \
-       fprintf (FILE, "\t.version\t\"01.01\"\n");                      \
-  } while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+#undef X86_FILE_START_VERSION_DIRECTIVE
+#define X86_FILE_START_VERSION_DIRECTIVE true
 
 #undef DBX_REGISTER_NUMBER
 #define DBX_REGISTER_NUMBER(n)  svr4_dbx_register_map[n]
index 47bcc8d..1a8ab46 100644 (file)
@@ -32,9 +32,8 @@ Boston, MA 02111-1307, USA.  */
    use the standard definition of LIB_SPEC.  */
 #undef LIB_SPEC
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) \
-  output_file_directive ((FILE), main_input_filename)
+/* Emit a .file directive.  */
+#define ASM_FILE_START_FILE_DIRECTIVE true
 
 /* Support the ctors and dtors sections for g++.  */
 
index 8af0a70..89bd554 100644 (file)
@@ -1161,10 +1161,6 @@ extern struct rtx_def *i960_compare_op0, *i960_compare_op1;
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-
-#define ASM_FILE_START(file)
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index e0760f3..030c5ed 100644 (file)
@@ -134,7 +134,7 @@ extern int ia64_register_move_cost PARAMS((enum machine_mode, enum reg_class,
                                           enum reg_class));
 extern int ia64_epilogue_uses PARAMS((int));
 extern int ia64_eh_uses PARAMS((int));
-extern void emit_safe_across_calls PARAMS((FILE *));
+extern void emit_safe_across_calls PARAMS((void));
 extern void ia64_init_builtins PARAMS((void));
 extern void ia64_override_options PARAMS((void));
 extern int ia64_dbx_register_number PARAMS((int));
index 59c2652..eea13a7 100644 (file)
@@ -241,6 +241,7 @@ static void bundling PARAMS ((FILE *, int, rtx, rtx));
 
 static void ia64_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                          HOST_WIDE_INT, tree));
+static void ia64_file_start PARAMS ((void));
 
 static void ia64_select_rtx_section PARAMS ((enum machine_mode, rtx,
                                             unsigned HOST_WIDE_INT));
@@ -356,6 +357,9 @@ static const struct attribute_spec ia64_attribute_table[] =
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START ia64_file_start
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS ia64_rtx_costs
 #undef TARGET_ADDRESS_COST
@@ -1608,9 +1612,15 @@ ia64_split_call (retval, addr, retaddr, scratch_r, scratch_b,
 \f
 /* Begin the assembly file.  */
 
+static void
+ia64_file_start ()
+{
+  default_file_start ();
+  emit_safe_across_calls ();
+}
+
 void
-emit_safe_across_calls (f)
-     FILE *f;
+emit_safe_across_calls ()
 {
   unsigned int rs, re;
   int out_state;
@@ -1627,19 +1637,19 @@ emit_safe_across_calls (f)
        continue;
       if (out_state == 0)
        {
-         fputs ("\t.pred.safe_across_calls ", f);
+         fputs ("\t.pred.safe_across_calls ", asm_out_file);
          out_state = 1;
        }
       else
-       fputc (',', f);
+       fputc (',', asm_out_file);
       if (re == rs + 1)
-       fprintf (f, "p%u", rs);
+       fprintf (asm_out_file, "p%u", rs);
       else
-       fprintf (f, "p%u-p%u", rs, re - 1);
+       fprintf (asm_out_file, "p%u-p%u", rs, re - 1);
       rs = re + 1;
     }
   if (out_state)
-    fputc ('\n', f);
+    fputc ('\n', asm_out_file);
 }
 
 /* Helper function for ia64_compute_frame_size: find an appropriate general
index 9e1a513..4215c5b 100644 (file)
@@ -1456,11 +1456,6 @@ do {                                                                     \
 
 #define EH_USES(REGNO) ia64_eh_uses (REGNO)
 
-/* Output at beginning of assembler file.  */
-
-#define ASM_FILE_START(FILE) \
-  emit_safe_across_calls (FILE)
-
 /* Output part N of a function descriptor for DECL.  For ia64, both
    words are emitted with a single relocation, so ignore N > 0.  */
 #define ASM_OUTPUT_FDESC(FILE, DECL, PART)                             \
index 3187211..d0c65de 100644 (file)
   [(unspec_volatile [(const_int 0)] UNSPECV_PSAC_NORMAL)]
   ""
 {
-  emit_safe_across_calls (asm_out_file);
+  emit_safe_across_calls ();
   return "";
 }
   [(set_attr "itanium_class" "ignore")
index 39809cf..5db1089 100644 (file)
@@ -117,26 +117,6 @@ do {                                                                       \
   fputc ('\n', FILE);                                                  \
 } while (0)
 
-/* A C expression which outputs to the stdio stream STREAM some appropriate
-   text to go at the start of an assembler file.  */
-
-/* ??? Looks like almost every port, except for a few original ones, get this
-   wrong.  Must emit #NO_APP as first line of file to turn of special assembler
-   preprocessing of files.  */
-
-/* ??? Even worse, it doesn't work, because gas does not accept the tab chars
-   that dwarf2out.c emits when #NO_APP.  */
-
-/* ??? Unrelated, but dwarf2out.c emits unnecessary newlines after strings,
-   may as well fix at the same time.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(STREAM) \
-do {                                                                   \
-  output_file_directive (STREAM, main_input_filename);                 \
-  emit_safe_across_calls (STREAM);                                     \
-} while (0)
-
 /* Override default elf definition.  */
 #undef TARGET_ASM_SELECT_RTX_SECTION
 #define TARGET_ASM_SELECT_RTX_SECTION  ia64_select_rtx_section
index 103bff7..db84b7a 100644 (file)
@@ -30,7 +30,6 @@ extern unsigned m32r_compute_frame_size               PARAMS ((int));
 extern int    m32r_first_insn_address          PARAMS ((void));
 extern void   m32r_expand_prologue             PARAMS ((void));
 extern void   m32r_finalize_pic                        PARAMS ((void));
-extern void   m32r_asm_file_start              PARAMS ((FILE *));
 extern int    direct_return                    PARAMS ((void));
 #ifdef TREE_CODE
 extern enum m32r_function_type m32r_compute_function_type PARAMS ((tree));
index 55b7cf7..3622d06 100644 (file)
@@ -77,6 +77,8 @@ static tree  m32r_handle_model_attribute PARAMS ((tree *, tree, tree, int, bool
 static void  m32r_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
 static void  m32r_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
 
+static void  m32r_file_start PARAMS ((void));
+
 static int    m32r_adjust_cost            PARAMS ((rtx, rtx, rtx, int));
 static int    m32r_adjust_priority PARAMS ((rtx, int));
 static void   m32r_sched_init     PARAMS ((FILE *, int, int));
@@ -103,6 +105,9 @@ static bool m32r_rtx_costs PARAMS ((rtx, int, int, int *));
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE m32r_output_function_epilogue
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START m32r_file_start
+
 #undef TARGET_SCHED_ADJUST_COST
 #define TARGET_SCHED_ADJUST_COST m32r_adjust_cost
 #undef TARGET_SCHED_ADJUST_PRIORITY
@@ -2215,15 +2220,13 @@ m32r_initialize_trampoline (tramp, fnaddr, cxt)
 {
 }
 \f
-/* Set the cpu type and print out other fancy things,
-   at the top of the file.  */
-
-void
-m32r_asm_file_start (file)
-     FILE * file;
+static void
+m32r_file_start ()
 {
+  default_file_start ();
+
   if (flag_verbose_asm)
-    fprintf (file,
+    fprintf (asm_out_file,
             "%s M32R/D special options: -G " HOST_WIDE_INT_PRINT_UNSIGNED "\n",
             ASM_COMMENT_START, g_switch_value);
 }
index b490683..815de10 100644 (file)
@@ -30,7 +30,6 @@ Boston, MA 02111-1307, USA.  */
 #undef PTRDIFF_TYPE
 #undef WCHAR_TYPE
 #undef WCHAR_TYPE_SIZE
-#undef ASM_FILE_START
 #undef ASM_OUTPUT_EXTERNAL_LIBCALL
 #undef TARGET_VERSION
 #undef CPP_SPEC
@@ -1517,9 +1516,6 @@ do {                                                                      \
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-#define ASM_FILE_START(FILE) m32r_asm_file_start (FILE)
-
 /* A C string constant describing how to begin a comment in the target
    assembler language.  The compiler assumes that the comment will
    end at the end of the line.  */
index d2d5338..ff670a9 100644 (file)
@@ -33,8 +33,6 @@ extern int m68hc11_initial_elimination_offset PARAMS((int, int));
 extern void expand_prologue PARAMS((void));
 extern void expand_epilogue PARAMS((void));
 
-extern void m68hc11_asm_file_start PARAMS((FILE*, const char*));
-
 #ifdef TREE_CODE
 extern void m68hc11_function_arg_advance PARAMS((CUMULATIVE_ARGS*,
                                                  enum machine_mode,
index dd46dbd..b40c4e7 100644 (file)
@@ -58,7 +58,6 @@ Note:
 #include "target.h"
 #include "target-def.h"
 
-static void print_options PARAMS ((FILE *));
 static void emit_move_after_reload PARAMS ((rtx, rtx, rtx));
 static rtx simplify_logical PARAMS ((enum machine_mode, int, rtx, rtx *));
 static void m68hc11_emit_logical PARAMS ((enum machine_mode, int, rtx *));
@@ -82,6 +81,7 @@ static void asm_print_register PARAMS ((FILE *, int));
 static void m68hc11_output_function_epilogue PARAMS ((FILE *, HOST_WIDE_INT));
 static void m68hc11_asm_out_constructor PARAMS ((rtx, int));
 static void m68hc11_asm_out_destructor PARAMS ((rtx, int));
+static void m68hc11_file_start PARAMS ((void));
 static void m68hc11_encode_section_info PARAMS((tree, rtx, int));
 static int autoinc_mode PARAMS((rtx));
 static int m68hc11_make_autoinc_notes PARAMS((rtx *, void *));
@@ -230,6 +230,11 @@ static int nb_soft_regs;
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE m68hc11_output_function_epilogue
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START m68hc11_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
 #undef TARGET_ENCODE_SECTION_INFO
 #define TARGET_ENCODE_SECTION_INFO  m68hc11_encode_section_info
 
@@ -5660,62 +5665,12 @@ m68hc11_rtx_costs (x, code, outer_code, total)
 }
 \f
 
-/* print_options - called at the start of the code generation for a
-   module.  */
-
-#include <time.h>
-#include <sys/types.h>
-
 static void
-print_options (out)
-     FILE *out;
-{
-  const char *a_time;
-  long c_time;
-  int i;
-  extern int save_argc;
-  extern char **save_argv;
-
-  fprintf (out, ";;; Command:\t");
-  for (i = 0; i < save_argc; i++)
-    {
-      fprintf (out, "%s", save_argv[i]);
-      if (i + 1 < save_argc)
-       fprintf (out, " ");
-    }
-  fprintf (out, "\n");
-  c_time = time (0);
-  a_time = ctime (&c_time);
-  fprintf (out, ";;; Compiled:\t%s", a_time);
-#ifdef __GNUC__
-#ifndef __VERSION__
-#define __VERSION__ "[unknown]"
-#endif
-  fprintf (out, ";;; (META)compiled by GNU C version %s.\n", __VERSION__);
-#else
-  fprintf (out, ";;; (META)compiled by CC.\n");
-#endif
-}
-
-void
-m68hc11_asm_file_start (out, main_file)
-     FILE *out;
-     const char *main_file;
+m68hc11_file_start ()
 {
-  fprintf (out, ";;;-----------------------------------------\n");
-  fprintf (out, ";;; Start %s gcc assembly output\n",
-           TARGET_M6811
-           ? "MC68HC11"
-           : TARGET_M68S12 ? "MC68HCS12" : "MC68HC12");
-  fprintf (out, ";;; gcc compiler %s\n", version_string);
-  print_options (out);
-  fprintf (out, ";;;-----------------------------------------\n");
-  output_file_directive (out, main_file);
-
-  if (TARGET_SHORT)
-    fprintf (out, "\t.mode mshort\n");
-  else
-    fprintf (out, "\t.mode mlong\n");
+  default_file_start ();
+  
+  fprintf (asm_out_file, "\t.mode %s\n", TARGET_SHORT ? "mshort" : "mlong");
 }
 
 
index d2c7090..1492c77 100644 (file)
@@ -1511,17 +1511,6 @@ do {                                                                    \
 #define TARGET_ASM_CONSTRUCTOR  m68hc11_asm_out_constructor
 #define TARGET_ASM_DESTRUCTOR   m68hc11_asm_out_destructor
 
-/* This is how to begin an assembly language file.  Most svr4 assemblers want
-   at least a .file directive to come first, and some want to see a .version
-   directive come right after that.  Here we just establish a default
-   which generates only the .file directive.  If you need a .version
-   directive for any specific target, you should override this definition
-   in the target-specific file which includes this one.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                            \
-    m68hc11_asm_file_start ((FILE), main_input_filename)
-
 /* Comment character */
 #define ASM_COMMENT_START      ";"
 
index 062a4b6..824805d 100644 (file)
@@ -76,9 +76,7 @@ Boston, MA 02111-1307, USA.  */
  "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%sp",       \
  "%fp0", "%fp1", "%fp2", "%fp3", "%fp4", "%fp5", "%fp6", "%fp7" }
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) \
-  output_file_directive ((FILE), main_input_filename)
+#define ASM_FILE_START_FILE_DIRECTIVE true
 
 /* If defined, a C expression whose value is a string containing the
    assembler operation to identify the following data as uninitialized global
index 0830707..a755aca 100644 (file)
@@ -112,7 +112,6 @@ Boston, MA 02111-1307, USA.  */
 
 #endif /* default is -msoft-float */
 
-
 /* -m68000 requires special flags to the assembler.  */
 #define ASM_SPEC \
  "%{m68000:-mc68000}%{mc68000:-mc68000}%{!mc68000:%{!m68000:-mc68020}}"
@@ -168,7 +167,6 @@ Boston, MA 02111-1307, USA.  */
 #undef REGISTER_NAMES
 #undef ASM_OUTPUT_REG_PUSH
 #undef ASM_OUTPUT_REG_POP
-#undef ASM_FILE_START
 #undef ASM_APP_ON
 #undef ASM_APP_OFF
 #undef TEXT_SECTION_ASM_OP
@@ -211,16 +209,7 @@ Boston, MA 02111-1307, USA.  */
   fprintf (FILE, "\tmov.l (%%sp)+,%s\n", reg_names[REGNO])
 
 /* For HPUX versions before 6.5, define this macro as empty.  */
-#define ASM_FILE_START(FILE)                                           \
-  if (TARGET_68020)                                                    \
-    {                                                                  \
-      if (TARGET_68881)                                                        \
-        fprintf (FILE, "\tversion 3\n"); /* 68020 fp regs saved */     \
-      else                                                             \
-        fprintf (FILE, "\tversion 2\n"); /* 68020 no fp regs saved */  \
-    }                                                                  \
-  else                                                                 \
-    fprintf (FILE, "\tversion 1\n");   /* 68010 */
+#define TARGET_ASM_FILE_START m68k_hp320_file_start
 
 #define ASM_APP_ON ""
 
index 02b0911..d4df6cf 100644 (file)
@@ -59,6 +59,7 @@ static void m68k_svr3_asm_out_constructor PARAMS ((rtx, int));
 #endif
 #ifdef HPUX_ASM
 static void m68k_hp320_internal_label PARAMS ((FILE *, const char *, unsigned long));
+static void m68k_hp320_file_start PARAMS ((void));
 #endif
 static void m68k_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                          HOST_WIDE_INT, tree));
@@ -131,6 +132,9 @@ int m68k_last_compare_had_fp_operands;
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
 
+#undef TARGET_ASM_FILE_START_APP_OFF
+#define TARGET_ASM_FILE_START_APP_OFF true
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS m68k_rtx_costs
 
@@ -3663,6 +3667,16 @@ m68k_hp320_internal_label (stream, prefix, labelno)
   else
     fprintf (stream, "%s%ld:\n", prefix, labelno);
 }
+
+static void
+m68k_hp320_file_start ()
+{
+  /* version 1: 68010.
+             2: 68020 without FPU.
+            3: 68020 with FPU.  */
+  fprintf (asm_out_file, "\tversion %d\n",
+          TARGET_68020 ? (TARGET_68881 ? 3 : 2) : 1);
+}
 #endif
 
 static void
index a3f04e6..12c30b8 100644 (file)
@@ -1292,11 +1292,6 @@ __transfer_from_trampoline ()                                    \
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-
-#define ASM_FILE_START(FILE)   \
-  fprintf (FILE, "#NO_APP\n");
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index 2aaa977..35055e5 100644 (file)
@@ -105,15 +105,7 @@ drectve_section ()                                         \
     }                                                          \
   while (0);
 
-#undef  ASM_FILE_START
-#define ASM_FILE_START(STREAM)                                 \
-  do                                                           \
-    {                                                          \
-      fprintf (STREAM, "%s Generated by gcc %s for MCore/pe\n",        \
-          ASM_COMMENT_START, version_string);                  \
-      output_file_directive ((STREAM), main_input_filename);   \
-    }                                                          \
-  while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 #undef  ASM_OUTPUT_SOURCE_LINE
 #define ASM_OUTPUT_SOURCE_LINE(FILE, LINE, COUNTER)                      \
index 9ba7d21..6a3e792 100644 (file)
@@ -356,8 +356,6 @@ current_section_flags ()                                            \
 /* SGI assembler needs all sorts of extra help to do alignment properly.  */
 #undef ASM_OUTPUT_ALIGN
 #define ASM_OUTPUT_ALIGN iris6_asm_output_align
-#undef ASM_FILE_START
-#define ASM_FILE_START  iris6_asm_file_start
 
 #undef MAX_OFILE_ALIGNMENT
 #define MAX_OFILE_ALIGNMENT (32768*8)
index 41b3073..217647b 100644 (file)
@@ -28,8 +28,6 @@ Boston, MA 02111-1307, USA.  */
 
 extern HOST_WIDE_INT   compute_frame_size PARAMS ((HOST_WIDE_INT));
 extern int             mips_initial_elimination_offset PARAMS ((int, int));
-extern void            mips_asm_file_start PARAMS ((FILE *));
-extern void            iris6_asm_file_start PARAMS ((FILE *));
 extern void            iris6_asm_output_align PARAMS ((FILE *, unsigned));
 extern const char *    current_section_name PARAMS ((void));
 extern unsigned int    current_section_flags PARAMS ((void));
index 714f637..ef43a1a 100644 (file)
@@ -276,6 +276,7 @@ static void iris6_asm_named_section         PARAMS ((const char *,
 static int iris_section_align_entry_eq         PARAMS ((const void *, const void *));
 static hashval_t iris_section_align_entry_hash PARAMS ((const void *));
 static int iris6_section_align_1               PARAMS ((void **, void *));
+static void iris6_file_start                   PARAMS ((void));
 static void iris6_file_end                     PARAMS ((void));
 #endif
 static int mips_adjust_cost                    PARAMS ((rtx, rtx, rtx, int));
@@ -292,6 +293,7 @@ static int mips_use_dfa_pipeline_interface      PARAMS ((void));
 static bool mips_rtx_costs                     PARAMS ((rtx, int, int, int *));
 static int mips_address_cost                    PARAMS ((rtx));
 static void mips_encode_section_info            PARAMS ((tree, rtx, int));
+static void mips_file_start                    PARAMS ((void));
 static void mips_file_end                      PARAMS ((void));
 
 /* Structure to be filled in by compute_frame_size with register
@@ -875,12 +877,17 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
 #undef TARGET_MACHINE_DEPENDENT_REORG
 #define TARGET_MACHINE_DEPENDENT_REORG mips_reorg
 
+#undef TARGET_ASM_FILE_START
 #undef TARGET_ASM_FILE_END
 #ifdef TARGET_IRIX6
+#define TARGET_ASM_FILE_START iris6_file_start
 #define TARGET_ASM_FILE_END iris6_file_end
 #else
+#define TARGET_ASM_FILE_START mips_file_start
 #define TARGET_ASM_FILE_END mips_file_end
 #endif
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
@@ -6101,11 +6108,10 @@ mips_output_ascii (stream, string_param, len)
    relevant .comm/.lcomm/.extern/.sdata declaration when the code is
    processed, it generates a two instruction sequence.  */
 
-void
-mips_asm_file_start (stream)
-     FILE *stream;
+static void
+mips_file_start ()
 {
-  ASM_OUTPUT_SOURCE_FILENAME (stream, main_input_filename);
+  default_file_start ();
 
   /* Versions of the MIPS assembler before 2.20 generate errors if a branch
      inside of a .set noreorder section jumps to a label outside of the .set
@@ -6113,7 +6119,7 @@ mips_asm_file_start (stream)
      fixing the bug.  */
 
   if (TARGET_MIPS_AS && optimize && flag_delayed_branch)
-    fprintf (stream, "\t.set\tnobopt\n");
+    fprintf (asm_out_file, "\t.set\tnobopt\n");
 
   if (TARGET_GAS)
     {
@@ -6141,28 +6147,26 @@ mips_asm_file_start (stream)
         because in this way we can avoid creating an allocated section.  We
         do not want this section to take up any space in the running
         executable.  */
-      fprintf (stream, "\t.section .mdebug.%s\n", abi_string);
+      fprintf (asm_out_file, "\t.section .mdebug.%s\n", abi_string);
 
       /* Restore the default section.  */
-      fprintf (stream, "\t.previous\n");
+      fprintf (asm_out_file, "\t.previous\n");
 #endif
     }
 
-
-
   /* Generate the pseudo ops that System V.4 wants.  */
 #ifndef ABICALLS_ASM_OP
 #define ABICALLS_ASM_OP "\t.abicalls"
 #endif
   if (TARGET_ABICALLS)
     /* ??? but do not want this (or want pic0) if -non-shared? */
-    fprintf (stream, "%s\n", ABICALLS_ASM_OP);
+    fprintf (asm_out_file, "%s\n", ABICALLS_ASM_OP);
 
   if (TARGET_MIPS16)
-    fprintf (stream, "\t.set\tmips16\n");
+    fprintf (asm_out_file, "\t.set\tmips16\n");
 
   if (flag_verbose_asm)
-    fprintf (stream, "\n%s -G value = %d, Arch = %s, ISA = %d\n",
+    fprintf (asm_out_file, "\n%s -G value = %d, Arch = %s, ISA = %d\n",
             ASM_COMMENT_START,
             mips_section_threshold, mips_arch_info->name, mips_isa);
 }
@@ -10336,15 +10340,13 @@ iris6_asm_output_align (file, log)
    switching games so that we can emit a .section directive at the
    beginning of the file with the proper alignment attached.  */
 
-void
-iris6_asm_file_start (stream)
-     FILE *stream;
+static void
+iris6_file_start ()
 {
-  mips_asm_file_start (stream);
+  mips_file_start ();
 
   iris_orig_asm_out_file = asm_out_file;
-  stream = tmpfile ();
-  asm_out_file = stream;
+  asm_out_file = tmpfile ();
 
   iris_section_align_htab = htab_create (31, iris_section_align_entry_hash,
                                         iris_section_align_entry_eq, NULL);
index b00c52a..bd1d8b6 100644 (file)
@@ -3276,17 +3276,6 @@ typedef struct mips_args {
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.
-   If we are optimizing to use the global pointer, create a temporary
-   file to hold all of the text stuff, and write it out to the end.
-   This is needed because the MIPS assembler is evidently one pass,
-   and if it hasn't seen the relevant .comm/.lcomm/.extern/.sdata
-   declaration when the code is processed, it generates a two
-   instruction sequence.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(STREAM) mips_asm_file_start (STREAM)
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index 24ba481..7e04d6a 100644 (file)
@@ -33,7 +33,6 @@ extern int mmix_register_move_cost
   PARAMS ((enum machine_mode, enum reg_class, enum reg_class));
 extern const char *mmix_text_section_asm_op PARAMS ((void));
 extern const char *mmix_data_section_asm_op PARAMS ((void));
-extern void mmix_asm_file_start PARAMS ((FILE *));
 extern void mmix_asm_output_source_filename PARAMS ((FILE *, const char *));
 extern void mmix_output_quoted_string PARAMS ((FILE *, const char *, int));
 extern void mmix_asm_output_source_line  PARAMS ((FILE *, int));
index bf2a4a2..290b5d8 100644 (file)
@@ -135,6 +135,7 @@ static void mmix_target_asm_function_epilogue
 static void mmix_reorg PARAMS ((void));
 static void mmix_asm_output_mi_thunk
   PARAMS ((FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree));
+static void mmix_file_start PARAMS ((void));
 static void mmix_file_end PARAMS ((void));
 static bool mmix_rtx_costs
   PARAMS ((rtx, int, int, int *));
@@ -174,6 +175,10 @@ static bool mmix_rtx_costs
 #define TARGET_ASM_OUTPUT_MI_THUNK mmix_asm_output_mi_thunk
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK default_can_output_mi_thunk_no_vcall
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START mmix_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 #undef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END mmix_file_end
 
@@ -1297,17 +1302,15 @@ mmix_strip_name_encoding (name)
   return name;
 }
 
-/* ASM_FILE_START.  */
+/* TARGET_ASM_FILE_START.
+   We just emit a little comment for the time being.  */
 
-void
-mmix_asm_file_start (stream)
-     FILE * stream;
+static void
+mmix_file_start ()
 {
-  /* We just emit a little comment for the time being.  FIXME: Perhaps add
-     -mstandalone and some segment and prefix setup here.  */
-  ASM_OUTPUT_SOURCE_FILENAME (stream, main_input_filename);
+  default_file_start ();
 
-  fprintf (stream, "! mmixal:= 8H LOC Data_Section\n");
+  fputs ("! mmixal:= 8H LOC Data_Section\n", asm_out_file);
 
   /* Make sure each file starts with the text section. */
   text_section ();
index fbfd91b..95c6444 100644 (file)
@@ -919,9 +919,6 @@ typedef struct { int regs; int lib; } CUMULATIVE_ARGS;
 
 /* Node: File Framework */
 
-#define ASM_FILE_START(STREAM) \
- mmix_asm_file_start (STREAM)
-
 /* While any other punctuation character but ";" would do, we prefer "%"
    or "!"; "!" is an unary operator and so will not be mistakenly included
    in correctly formed expressions.  The hash character adds mass; catches
index 4816e6f..209a7e6 100644 (file)
@@ -53,7 +53,6 @@ extern struct rtx_def *mn10300_va_arg PARAMS ((tree, tree));
 #endif /* TREE_CODE */
 
 extern struct rtx_def *mn10300_builtin_saveregs PARAMS ((void));
-extern void asm_file_start PARAMS ((FILE *));
 extern void expand_prologue PARAMS ((void));
 extern void expand_epilogue PARAMS ((void));
 extern int initial_offset PARAMS ((int, int));
index 5a28126..da2185d 100644 (file)
@@ -58,6 +58,7 @@ Boston, MA 02111-1307, USA.  */
 static int mn10300_address_cost_1 PARAMS ((rtx, int *));
 static int mn10300_address_cost PARAMS ((rtx));
 static bool mn10300_rtx_costs PARAMS ((rtx, int, int, int *));
+static void mn10300_file_start PARAMS ((void));
 
 \f
 /* Initialize the GCC target structure.  */
@@ -69,21 +70,20 @@ static bool mn10300_rtx_costs PARAMS ((rtx, int, int, int *));
 #undef TARGET_ADDRESS_COST
 #define TARGET_ADDRESS_COST mn10300_address_cost
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START mn10300_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
-void
-asm_file_start (file)
-     FILE *file;
+static void
+mn10300_file_start ()
 {
-  fprintf (file, "#\tGCC For the Matsushita MN10300\n");
-  if (optimize)
-    fprintf (file, "# -O%d\n", optimize);
-  else
-    fprintf (file, "\n\n");
+  default_file_start ();
 
   if (TARGET_AM33)
-    fprintf (file, "\t.am33\n");
-  output_file_directive (file, main_input_filename);
+    fprintf (asm_out_file, "\t.am33\n");
 }
 \f
 
index 88d6fdc..cae8f2a 100644 (file)
@@ -839,10 +839,6 @@ struct cum_arg {int nbytes; };
 #define DATA_SECTION_ASM_OP "\t.section .data"
 #define BSS_SECTION_ASM_OP "\t.section .bss"
 
-/* Output at beginning/end of assembler file.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) asm_file_start(FILE)
-
 #define ASM_COMMENT_START "#"
 
 /* Output to assembler file text saying following lines
index 248e9b4..10ee5cf 100644 (file)
@@ -96,6 +96,9 @@ static int ns32k_address_cost PARAMS ((rtx));
 #undef TARGET_ADDRESS_COST
 #define TARGET_ADDRESS_COST ns32k_address_cost
 
+#undef TARGET_ASM_FILE_START_APP_OFF
+#define TARGET_ASM_FILE_START_APP_OFF true
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 /* Generate the assembly code for function entry.  FILE is a stdio
index 17979fb..0236a42 100644 (file)
@@ -1256,10 +1256,6 @@ __transfer_from_trampoline ()            \
 
 /* Define the output Assembly Language */
 
-/* Output at beginning of assembler file.  */
-
-#define ASM_FILE_START(FILE) fprintf (FILE, "#NO_APP\n");
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index e5b7478..5b35178 100644 (file)
@@ -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) \
index fa20da0..ed7c82b 100644 (file)
@@ -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
index 23568be..b17d1dc 100644 (file)
@@ -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;
index bd652c9..d16d741 100644 (file)
@@ -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"
index 9a8d53d..db31c60 100644 (file)
@@ -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.  */
 
index 5016145..317eda9 100644 (file)
@@ -990,20 +990,6 @@ extern struct rtx_def *cc0_reg_rtx;
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-
-#if 0
-#define ASM_FILE_START(FILE) \
-(                                                              \
-fprintf (FILE, "\t.data\n"),                                   \
-fprintf (FILE, "$help$: . = .+8 ; space for tmp moves!\n")     \
-/* do we need reg def's R0 = %0 etc ??? */                     \
-)
-#else
-#define ASM_FILE_START(FILE)
-#endif
-
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index 0ca22cd..d402215 100644 (file)
@@ -87,8 +87,8 @@
    Don't do this until the fixed IBM assembler is more generally available.
    When this becomes permanently defined, the ASM_OUTPUT_EXTERNAL,
    ASM_OUTPUT_EXTERNAL_LIBCALL, and RS6000_OUTPUT_BASENAME macros will no
-   longer be needed.  Also, the extern declaration of mcount in ASM_FILE_START
-   will no longer be needed.  */
+   longer be needed.  Also, the extern declaration of mcount in 
+   rs6000_xcoff_file_start will no longer be needed.  */
 
 /* #define ASM_SPEC "-u %(asm_cpu)" */
 
index 5119390..c1c1edb 100644 (file)
   rs6000_override_options (((TARGET_DEFAULT ^ target_flags) & MASK_64BIT) \
                           ? (char *) 0 : TARGET_CPU_DEFAULT)
 
-#undef ASM_FILE_START
-#define        ASM_FILE_START(FILE)                                                \
-  do                                                                       \
-    {                                                                       \
-      output_file_directive ((FILE), main_input_filename);                 \
-      rs6000_file_start (FILE, (((TARGET_DEFAULT ^ target_flags)           \
-                                & MASK_64BIT)                              \
-                               ? (char *) 0 : TARGET_CPU_DEFAULT));        \
-    }                                                                      \
-  while (0)
-
 #endif
 
 #undef ASM_DEFAULT_SPEC
index 82e35b2..464b243 100644 (file)
@@ -24,7 +24,6 @@
 #undef PTRDIFF_TYPE
 #undef WCHAR_TYPE
 #undef WCHAR_TYPE_SIZE
-#undef ASM_FILE_START
 #undef EXTRA_SECTIONS
 #undef READONLY_DATA_SECTION
 #undef READONLY_DATA_SECTION_ASM_OP
index 9c5df76..051da02 100644 (file)
@@ -167,7 +167,6 @@ extern enum direction function_arg_padding PARAMS ((enum machine_mode, tree));
 
 extern void optimization_options PARAMS ((int, int));
 extern void rs6000_override_options PARAMS ((const char *));
-extern void rs6000_file_start PARAMS ((FILE *, const char *));
 extern int direct_return PARAMS ((void));
 extern union tree_node *rs6000_build_va_list PARAMS ((void));
 extern int first_reg_to_save PARAMS ((void));
index 5f7b361..2e1ceef 100644 (file)
@@ -51,6 +51,9 @@
 #include "langhooks.h"
 #include "reload.h"
 #include "cfglayout.h"
+#if TARGET_XCOFF
+#include "xcoffout.h"  /* get declarations of xcoff_*_section_name */
+#endif
 
 #ifndef TARGET_NO_PROTOTYPE
 #define TARGET_NO_PROTOTYPE 0
@@ -235,6 +238,7 @@ static void rs6000_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                            HOST_WIDE_INT, tree));
 static rtx rs6000_emit_set_long_const PARAMS ((rtx,
   HOST_WIDE_INT, HOST_WIDE_INT));
+static void rs6000_file_start PARAMS ((void));
 #if TARGET_ELF
 static unsigned int rs6000_elf_section_type_flags PARAMS ((tree, const char *,
                                                           int));
@@ -259,6 +263,7 @@ static void rs6000_xcoff_select_rtx_section PARAMS ((enum machine_mode, rtx,
                                                     unsigned HOST_WIDE_INT));
 static const char * rs6000_xcoff_strip_name_encoding PARAMS ((const char *));
 static unsigned int rs6000_xcoff_section_type_flags PARAMS ((tree, const char *, int));
+static void rs6000_xcoff_file_start PARAMS ((void));
 static void rs6000_xcoff_file_end PARAMS ((void));
 #endif
 #if TARGET_MACHO
@@ -941,15 +946,22 @@ optimization_options (level, size)
 \f
 /* Do anything needed at the start of the asm file.  */
 
-void
-rs6000_file_start (file, default_cpu)
-     FILE *file;
-     const char *default_cpu;
+static void
+rs6000_file_start ()
 {
   size_t i;
   char buffer[80];
   const char *start = buffer;
   struct rs6000_cpu_select *ptr;
+  const char *default_cpu = TARGET_CPU_DEFAULT;
+  FILE *file = asm_out_file;
+
+  default_file_start ();
+
+#ifdef TARGET_BI_ARCH
+  if ((TARGET_DEFAULT ^ target_flags) & MASK_64BIT)
+    default_cpu = 0;
+#endif
 
   if (flag_verbose_asm)
     {
@@ -14179,6 +14191,40 @@ rs6000_xcoff_section_type_flags (decl, name, reloc)
   return flags | (exact_log2 (align) & SECTION_ENTSIZE);
 }
 
+/* Output at beginning of assembler file.
+
+   Initialize the section names for the RS/6000 at this point.
+
+   Specify filename, including full path, to assembler.
+
+   We want to go into the TOC section so at least one .toc will be emitted.
+   Also, in order to output proper .bs/.es pairs, we need at least one static
+   [RW] section emitted.
+
+   Finally, declare mcount when profiling to make the assembler happy.  */
+
+static void
+rs6000_xcoff_file_start ()
+{
+  rs6000_gen_section_name (&xcoff_bss_section_name,
+                          main_input_filename, ".bss_");
+  rs6000_gen_section_name (&xcoff_private_data_section_name,
+                          main_input_filename, ".rw_");
+  rs6000_gen_section_name (&xcoff_read_only_section_name,
+                          main_input_filename, ".ro_");
+
+  fputs ("\t.file\t", asm_out_file);
+  output_quoted_string (asm_out_file, main_input_filename);
+  fputc ('\n', asm_out_file);
+  toc_section ();
+  if (write_symbols != NO_DEBUG)
+    private_data_section ();
+  text_section ();
+  if (profile_flag)
+    fprintf (asm_out_file, "\t.extern %s\n", RS6000_MCOUNT);
+  rs6000_file_start ();
+}
+
 /* Output at end of assembler file.
    On the RS/6000, referencing data should automatically pull in text.  */
 
index 8d63a4f..991e888 100644 (file)
@@ -2429,6 +2429,8 @@ extern int toc_initialized;
     }                                                                  \
    while (0)
 
+#define TARGET_ASM_FILE_START rs6000_file_start
+
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index 0982698..822a438 100644 (file)
@@ -710,16 +710,6 @@ do {                                                                       \
    || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V'                  \
    || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G')
 
-/* Output .file.  */
-/* Override elfos.h definition.  */
-#undef ASM_FILE_START
-#define        ASM_FILE_START(FILE)                                            \
-do {                                                                   \
-  output_file_directive ((FILE), main_input_filename);                 \
-  rs6000_file_start (FILE, TARGET_CPU_DEFAULT);                                \
-} while (0)
-
-
 extern int fixuplabelno;
 
 /* Handle constructors specially for -mrelocatable.  */
index affe073..26d79ec 100644 (file)
@@ -108,9 +108,10 @@ toc_section ()                                             \
 {                                                      \
   if (TARGET_MINIMAL_TOC)                              \
     {                                                  \
-      /* toc_section is always called at least once from ASM_FILE_START, \
-        so this is guaranteed to always be defined once and only once   \
-        in each file.  */                                               \
+      /* toc_section is always called at least once    \
+         from rs6000_xcoff_file_start, so this is      \
+        guaranteed to always be defined once and       \
+        only once in each file.  */                    \
       if (! toc_initialized)                           \
        {                                               \
          fputs ("\t.toc\nLCTOC..1:\n", asm_out_file);  \
@@ -200,40 +201,11 @@ toc_section ()                                            \
 /* Globalizing directive for a label.  */
 #define GLOBAL_ASM_OP "\t.globl "
 
-/* Output at beginning of assembler file.
-
-   Initialize the section names for the RS/6000 at this point.
-
-   Specify filename, including full path, to assembler.
-
-   We want to go into the TOC section so at least one .toc will be emitted.
-   Also, in order to output proper .bs/.es pairs, we need at least one static
-   [RW] section emitted.
-
-   Finally, declare mcount when profiling to make the assembler happy.  */
-
-#define ASM_FILE_START(FILE)                                   \
-{                                                              \
-  rs6000_gen_section_name (&xcoff_bss_section_name,            \
-                          main_input_filename, ".bss_");       \
-  rs6000_gen_section_name (&xcoff_private_data_section_name,   \
-                          main_input_filename, ".rw_");        \
-  rs6000_gen_section_name (&xcoff_read_only_section_name,      \
-                          main_input_filename, ".ro_");        \
-                                                               \
-  fputs ("\t.file\t", FILE);                                    \
-  output_quoted_string (FILE, main_input_filename);             \
-  fputc ('\n', FILE);                                           \
-  toc_section ();                                              \
-  if (write_symbols != NO_DEBUG)                               \
-    private_data_section ();                                   \
-  text_section ();                                             \
-  if (profile_flag)                                            \
-    fprintf (FILE, "\t.extern %s\n", RS6000_MCOUNT);           \
-  rs6000_file_start (FILE, TARGET_CPU_DEFAULT);                        \
-}
-
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START rs6000_xcoff_file_start
 #define TARGET_ASM_FILE_END rs6000_xcoff_file_end
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
 
 /* This macro produces the initial definition of a function name.
    On the RS/6000, we need to place an extra '.' in the function name and
index 6b2a6c9..5793082 100644 (file)
@@ -19,6 +19,10 @@ along with GNU CC; see the file COPYING.  If not, write to
 the Free Software Foundation, 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
+/* Let sh.c know this is ELF.  */
+#undef TARGET_ELF
+#define TARGET_ELF 1
+
 /* Generate DWARF2 debugging information and make it the default */
 #define DWARF2_DEBUGGING_INFO 1
 
@@ -43,21 +47,6 @@ Boston, MA 02111-1307, USA.  */
 #undef LOCAL_LABEL_PREFIX
 #define LOCAL_LABEL_PREFIX "."
 
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) do {                              \
-  output_file_directive ((FILE), main_input_filename);         \
-/* We also need to show the text section with the proper       \
-   attributes as in TEXT_SECTION_ASM_OP, before dwarf2out      \
-   emits it without attributes in TEXT_SECTION, else GAS       \
-   will complain.  We can teach GAS specifically about the     \
-   default attributes for our choice of text section, but      \
-   then we would have to change GAS again if/when we change    \
-   the text section name.  */                                  \
-   fprintf ((FILE), "%s\n", TEXT_SECTION_ASM_OP);              \
-  if (TARGET_LITTLE_ENDIAN)                                    \
-    fprintf ((FILE), "\t.little\n");                           \
-} while (0)
-
 #undef SIZE_TYPE
 #define SIZE_TYPE (TARGET_SH5 ? "long unsigned int" : "unsigned int")
 
index 95c1884..10ef2e4 100644 (file)
@@ -111,7 +111,6 @@ extern tree sh_build_va_list PARAMS ((void));
 extern const char *output_jump_label_table PARAMS ((void));
 extern int sh_handle_pragma PARAMS ((int (*)(void), void (*)(int), const char *));
 extern struct rtx_def *get_fpscr_rtx PARAMS ((void));
-extern void output_file_start PARAMS ((FILE *));
 extern int sh_media_register_for_return PARAMS ((void));
 extern void sh_expand_prologue PARAMS ((void));
 extern void sh_expand_epilogue PARAMS ((void));
index 3dfa6ee..1fca14f 100644 (file)
@@ -220,6 +220,7 @@ static void sh_media_init_builtins PARAMS ((void));
 static rtx sh_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
 static void sh_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                        HOST_WIDE_INT, tree));
+static void sh_file_start PARAMS ((void));
 static int flow_dependent_p PARAMS ((rtx, rtx));
 static void flow_dependent_p_1 PARAMS ((rtx, rtx, void *));
 static int shiftcosts PARAMS ((rtx));
@@ -259,6 +260,11 @@ static int shmedia_target_regs_stack_adjust (HARD_REG_SET *);
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START sh_file_start
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
 #undef TARGET_INSERT_ATTRIBUTES
 #define TARGET_INSERT_ATTRIBUTES sh_insert_attributes
 
@@ -1302,26 +1308,38 @@ output_ieee_ccmpeq (insn, operands)
   return output_branchy_insn (NE, "bt\t%l9\\;fcmp/eq\t%1,%0", insn, operands);
 }
 \f
-/* Output to FILE the start of the assembler file.  */
-
-void
-output_file_start (file)
-     FILE *file;
-{
-  output_file_directive (file, main_input_filename);
+/* Output the start of the assembler file.  */
 
-  /* Switch to the data section so that the coffsem symbol
-     isn't in the text section.  */
-  data_section ();
+static void
+sh_file_start ()
+{
+  default_file_start ();
+
+  if (TARGET_ELF)
+    /* We need to show the text section with the proper
+       attributes as in TEXT_SECTION_ASM_OP, before dwarf2out
+       emits it without attributes in TEXT_SECTION, else GAS
+       will complain.  We can teach GAS specifically about the
+       default attributes for our choice of text section, but
+       then we would have to change GAS again if/when we change
+       the text section name.  */
+    fprintf (asm_out_file, "%s\n", TEXT_SECTION_ASM_OP);
+  else
+    /* Switch to the data section so that the coffsem symbol
+       isn't in the text section.  */
+    data_section ();
 
   if (TARGET_LITTLE_ENDIAN)
-    fprintf (file, "\t.little\n");
+    fputs ("\t.little\n", asm_out_file);
 
-  if (TARGET_SHCOMPACT)
-    fprintf (file, "\t.mode\tSHcompact\n");
-  else if (TARGET_SHMEDIA)
-    fprintf (file, "\t.mode\tSHmedia\n\t.abi\t%i\n",
-            TARGET_SHMEDIA64 ? 64 : 32);
+  if (!TARGET_ELF)
+    {
+      if (TARGET_SHCOMPACT)
+       fputs ("\t.mode\tSHcompact\n", asm_out_file);
+      else if (TARGET_SHMEDIA)
+       fprintf (asm_out_file, "\t.mode\tSHmedia\n\t.abi\t%i\n",
+                TARGET_SHMEDIA64 ? 64 : 32);
+    }
 }
 \f
 /* Check if PAT includes UNSPEC_CALLER unspec pattern.  */
index ac5924f..c74bb3a 100644 (file)
@@ -152,6 +152,9 @@ extern int target_flags;
 #define IEEE_BIT (1<<30)
 #define SAVE_ALL_TR_BIT (1<<2)
 
+/* Nonzero if this is an ELF target - compile time only */
+#define TARGET_ELF 0
+
 /* Nonzero if we should dump out instruction size info.  */
 #define TARGET_DUMPISIZE  (target_flags & ISIZE_BIT)
 
@@ -2972,10 +2975,6 @@ while (0)
    the end of the line.  */
 #define ASM_COMMENT_START "!"
 
-/* The text to go at the start of the assembler file.  */
-#define ASM_FILE_START(STREAM) \
-  output_file_start (STREAM)
-
 #define ASM_APP_ON             ""
 #define ASM_APP_OFF            ""
 #define FILE_ASM_OP            "\t.file\n"
index fdbd0fd..872f224 100644 (file)
@@ -2668,10 +2668,6 @@ do {                                                                    \
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-
-#define ASM_FILE_START(file)
-
 /* A C string constant describing how to begin a comment in the target
    assembler language.  The compiler assumes that the comment will end at
    the end of the line.  */
index a4aa189..21595ea 100644 (file)
@@ -29,13 +29,8 @@ Boston, MA 02111-1307, USA. */
 
 /* Assembler, linker, library, and startfile spec's.  */
 
-/* Output at beginning of assembler file.  */
 /* The .file command should always begin the output.  */
-
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE)                                   \
-  do { output_file_directive ((FILE), main_input_filename);    \
-     } while (0)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 /* This says how to output an assembler line
    to define a global common symbol.  */
index f12e22a..f96abbd 100644 (file)
@@ -35,7 +35,6 @@ extern void   zdata_section                 PARAMS ((void));
 extern void   rozdata_section               PARAMS ((void));
 extern void   zbss_section                  PARAMS ((void));
 extern int    v850_handle_pragma            PARAMS ((int (*)(void), void (*)(int), char *));
-extern void   asm_file_start                PARAMS ((FILE *));
 extern void   override_options              PARAMS ((void));
 extern int    compute_register_save_size    PARAMS ((long *));
 extern int    compute_frame_size            PARAMS ((int, long *));
index e0fc724..4db79a9 100644 (file)
@@ -105,6 +105,9 @@ static int v850_interrupt_p = FALSE;
 #undef TARGET_ENCODE_SECTION_INFO
 #define TARGET_ENCODE_SECTION_INFO v850_encode_section_info
 
+#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
 #undef TARGET_RTX_COSTS
 #define TARGET_RTX_COSTS v850_rtx_costs
 #undef TARGET_ADDRESS_COST
@@ -159,15 +162,6 @@ override_options ()
 }
 
 \f
-/* Output assembly code for the start of the file.  */
-
-void
-asm_file_start (file)
-     FILE *file;
-{
-  output_file_directive (file, main_input_filename);
-}
-\f
 
 /* Return an RTX to represent where a value with mode MODE will be returned
    from a function.  If the result is 0, the argument is pushed.  */
index 68c0d3f..52e6313 100644 (file)
@@ -1144,10 +1144,6 @@ zbss_section ()                                                          \
 #define ZCOMMON_ASM_OP                "\t.zcomm\t"
 #define TCOMMON_ASM_OP                "\t.tcomm\t"
 
-/* Output at beginning/end of assembler file.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) asm_file_start(FILE)
-
 #define ASM_COMMENT_START "#"
 
 /* Output to assembler file text saying following lines
index 66b943b..fea970e 100644 (file)
@@ -43,6 +43,7 @@ Boston, MA 02111-1307, USA.  */
 
 static int follows_p PARAMS ((rtx, rtx));
 static void vax_output_function_prologue PARAMS ((FILE *, HOST_WIDE_INT));
+static void vax_file_start PARAMS ((void));
 static void vax_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
                                         HOST_WIDE_INT, tree));
 static int vax_address_cost_1 PARAMS ((rtx));
@@ -57,6 +58,11 @@ static bool vax_rtx_costs PARAMS ((rtx, int, int, int *));
 #undef TARGET_ASM_FUNCTION_PROLOGUE
 #define TARGET_ASM_FUNCTION_PROLOGUE vax_output_function_prologue
 
+#undef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START vax_file_start
+#undef TARGET_ASM_FILE_START_APP_OFF
+#define TARGET_ASM_FILE_START_APP_OFF true
+
 #undef TARGET_ASM_OUTPUT_MI_THUNK
 #define TARGET_ASM_OUTPUT_MI_THUNK vax_output_mi_thunk
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
@@ -126,6 +132,18 @@ vax_output_function_prologue (file, size)
     asm_fprintf (file, "\tsubl2 $%wd,%Rsp\n", size);
 }
 
+/* When debugging with stabs, we want to output an extra dummy label
+   so that gas can distinguish between D_float and G_float prior to
+   processing the .stabs directive identifying type double.  */
+static void
+vax_file_start ()
+{
+  default_file_start ();
+
+  if (write_symbols == DBX_DEBUG)
+    fprintf (asm_out_file, "___vax_%c_doubles:\n", ASM_DOUBLE_CHAR);
+}
+
 /* This is like nonimmediate_operand with a restriction on the type of MEM.  */
 
 void
index 731a8bd..bb1450d 100644 (file)
@@ -938,19 +938,6 @@ enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };
 \f
 /* Control the assembler format that we output.  */
 
-/* Output at beginning of assembler file.  */
-/* When debugging, we want to output an extra dummy label so that gas
-   can distinguish between D_float and G_float prior to processing the
-   .stabs directive identifying type double.  */
-
-#define ASM_FILE_START(FILE) \
-  do {                                                         \
-    fputs (ASM_APP_OFF, FILE);                                 \
-    if (write_symbols == DBX_DEBUG)                            \
-      fprintf (FILE, "___vax_%c_doubles:\n", ASM_DOUBLE_CHAR); \
-  } while (0)
-
-
 /* Output to assembler file text saying following lines
    may contain character constants, extra white space, comments, etc.  */
 
index 5e8c249..c85cf4a 100644 (file)
@@ -40,9 +40,7 @@ Boston, MA 02111-1307, USA.  */
 #undef LIB_SPEC
 
 /* The .file command should always begin the output.  */
-#undef ASM_FILE_START
-#define ASM_FILE_START(FILE) \
-output_file_directive ((FILE), main_input_filename)
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
 
 #undef ASM_OUTPUT_ALIGN
 #define ASM_OUTPUT_ALIGN(FILE,LOG) \
index 52697e1..670b5a2 100644 (file)
@@ -6190,19 +6190,38 @@ instructions do.
 @cindex output of assembler code
 
 @c prevent bad page break with this line
-This describes the overall framework of an assembler file.
+This describes the overall framework of an assembly file.
+
+@deftypefn {Target Hook} void TARGET_ASM_FILE_START ()
+@findex default_file_start
+Output to @code{asm_out_file} any text which the assembler expects to
+find at the beginning of a file.  The default behavior is controlled
+by two flags, documented below.  Unless your target's assembler is
+quite unusual, if you override the default, you should call
+@code{default_file_start} at some point in your target hook.  This
+lets other target files rely on these variables.
+@end deftypefn
 
-@table @code
-@findex ASM_FILE_START
-@item ASM_FILE_START (@var{stream})
-A C expression which outputs to the stdio stream @var{stream}
-some appropriate text to go at the start of an assembler file.
-
-Normally this macro is defined to output a line containing
-@samp{#NO_APP}, which is a comment that has no effect on most
-assemblers but tells the GNU assembler that it can save time by not
-checking for certain assembler constructs.
-@end table
+@deftypevr {Target Hook} bool TARGET_ASM_FILE_START_APP_OFF
+If this flag is true, the text of the macro @code{ASM_APP_OFF} will be
+printed as the very first line in the assembly file, unless
+@option{-fverbose-asm} is in effect.  (If that macro has been defined
+to the empty string, this variable has no effect.)  With the normal
+definition of @code{ASM_APP_OFF}, the effect is to notify the GNU
+assembler that it need not bother stripping comments or extra
+whitespace from its input.  This allows it to work a bit faster.
+
+The default is false.  You should not set it to true unless you have
+verified that your port does not generate any extra whitespace or
+comments that will cause GAS to issue errors in NO_APP mode.
+@end deftypevr
+
+@deftypevr {Target Hook} bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
+If this flag is true, @code{output_file_directive} will be called
+for the primary source file, immediately after printing
+@code{ASM_APP_OFF} (if that is enabled).  Most ELF assemblers expect
+this to be done.  The default is false.
+@end deftypevr
 
 @deftypefn {Target Hook} void TARGET_ASM_FILE_END ()
 Output to @code{asm_out_file} any text which the assembler expects
index 2bfc64d..aaaeaa2 100644 (file)
@@ -519,6 +519,7 @@ extern bool default_binds_local_p PARAMS ((tree));
 extern bool default_binds_local_p_1 PARAMS ((tree, int));
 extern void default_globalize_label PARAMS ((FILE *, const char *));
 extern void default_internal_label PARAMS ((FILE *, const char *, unsigned long));
+extern void default_file_start PARAMS ((void));
 extern void file_end_indicate_exec_stack PARAMS ((void));
 extern bool default_valid_pointer_mode PARAMS ((enum machine_mode));
 
index 3214f7a..cafaea6 100644 (file)
@@ -598,7 +598,7 @@ typedef char _Bool;
        WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION \
        ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL     \
        ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS     \
-       ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_END
+       ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END
 
 /* Other obsolete target macros, or macros that used to be in target
    headers and were not used, and may be obsolete or may never have
index f339868..d6950e4 100644 (file)
@@ -150,10 +150,22 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 #define TARGET_ASM_EH_FRAME_SECTION default_eh_frame_section
 #endif
 
+#ifndef TARGET_ASM_FILE_START
+#define TARGET_ASM_FILE_START default_file_start
+#endif
+
 #ifndef TARGET_ASM_FILE_END
 #define TARGET_ASM_FILE_END hook_void_void
 #endif
 
+#ifndef TARGET_ASM_FILE_START_APP_OFF
+#define TARGET_ASM_FILE_START_APP_OFF false
+#endif
+
+#ifndef TARGET_ASM_FILE_START_FILE_DIRECTIVE
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE false
+#endif
+
 #define TARGET_ASM_ALIGNED_INT_OP                              \
                       {TARGET_ASM_ALIGNED_HI_OP,               \
                        TARGET_ASM_ALIGNED_SI_OP,               \
@@ -189,6 +201,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
                        TARGET_ASM_DESTRUCTOR,                  \
                         TARGET_ASM_OUTPUT_MI_THUNK,             \
                         TARGET_ASM_CAN_OUTPUT_MI_THUNK,         \
+                        TARGET_ASM_FILE_START,                  \
                         TARGET_ASM_FILE_END}
 
 /* Scheduler hooks.  All of these default to null pointers, which
@@ -329,7 +342,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   TARGET_HAVE_CTORS_DTORS,                     \
   TARGET_HAVE_TLS,                             \
   TARGET_HAVE_SRODATA_SECTION,                 \
-  TARGET_TERMINATE_DW2_EH_FRAME_INFO           \
+  TARGET_TERMINATE_DW2_EH_FRAME_INFO,          \
+  TARGET_ASM_FILE_START_APP_OFF,               \
+  TARGET_ASM_FILE_START_FILE_DIRECTIVE,                \
 }
 
 #include "hooks.h"
index d6e30e3..4ba369d 100644 (file)
@@ -143,7 +143,12 @@ struct gcc_target
                                          HOST_WIDE_INT vcall_offset,
                                          tree function_decl));
 
-    /* Output any boilerplate text needed at the end of a translation unit.  */
+    /* Output any boilerplate text needed at the beginning of a
+       translation unit.  */
+    void (*file_start) PARAMS ((void));
+
+    /* Output any boilerplate text needed at the end of a
+       translation unit.  */
     void (*file_end) PARAMS ((void));
   } asm_out;
 
@@ -368,6 +373,14 @@ struct gcc_target
 
   /* True if EH frame info sections should be zero-terminated.  */
   bool terminate_dw2_eh_frame_info;
+
+  /* True if #NO_APP should be emitted at the beginning of
+     assembly output.  */
+  bool file_start_app_off;
+
+  /* True if output_file_directive should be called for main_input_filename
+     at the beginning of assembly output.  */
+  bool file_start_file_directive;
 };
 
 extern struct gcc_target targetm;
index 259765f..602ce6f 100644 (file)
@@ -4819,9 +4819,7 @@ init_asm_output (const char *name)
 
   if (!flag_syntax_only)
     {
-#ifdef ASM_FILE_START
-      ASM_FILE_START (asm_out_file);
-#endif
+      targetm.asm_out.file_start ();
 
 #ifdef ASM_COMMENT_START
       if (flag_verbose_asm)
index 6879559..a76d23a 100644 (file)
@@ -5363,6 +5363,18 @@ default_internal_label (stream, prefix, labelno)
   ASM_OUTPUT_LABEL (stream, buf);
 }
 
+/* This is the default behavior at the beginning of a file.  It's
+   controlled by two other target-hook toggles.  */
+void
+default_file_start ()
+{
+  if (targetm.file_start_app_off && !flag_verbose_asm)
+    fputs (ASM_APP_OFF, asm_out_file);
+
+  if (targetm.file_start_file_directive)
+    output_file_directive (asm_out_file, main_input_filename);
+}
+
 /* This is a generic routine suitable for use as TARGET_ASM_FILE_END
    which emits a special section directive used to indicate whether or
    not this object file needs an executable stack.  This is primarily
index dd630c9..8e41770 100644 (file)
@@ -138,8 +138,8 @@ extern const char *xcoff_lastfile;
 
 /* Write out main source file name using ".file" rather than ".stabs".
    We don't actually do this here, because the assembler gets confused if there
-   is more than one .file directive.  ASM_FILE_START in config/rs6000/rs6000.h
-   is already emitting a .file directory, so we don't output one here also.
+   is more than one .file directive.  rs6000_xcoff_file_start is already
+   emitting a .file directory, so we don't output one here also.
    Initialize xcoff_lastfile.  */
 #define DBX_OUTPUT_MAIN_SOURCE_FILENAME(FILE,FILENAME) \
   xcoff_lastfile = (FILENAME)