This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Tidy up arm-elf header files


Hi Richard, Hi Rod,

> > /usr/bin/ld: cannot open crt0.o: No such file or directory
> 
> Ah, linux uses crt1.o.  Nick, you've pruned too much.

Oopsie!  Actually it turns out that the real problem was that when I
moved the header files into the tm_file variable, I put them in the
wrong order, so elfos.h was being included *after* linux-elf.h and so
overriding the definition of STARTFILE_SPEC.

The revised patch below fixes this problem.  Rod, Phil, can you have a
go with this one and let me know if arm-linux bootstraps now work ?

Cheers
        Nick

Index: config.gcc
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config.gcc,v
retrieving revision 1.86
diff -p -r1.86 config.gcc
*** config.gcc	2001/08/30 18:22:55	1.86
--- config.gcc	2001/09/07 10:12:35
*************** arc-*-elf*)
*** 523,529 ****
  	extra_parts="crtinit.o crtfini.o"
  	;;
  arm*-*-rtems*)
! 	tm_file=arm/rtems-elf.h
  	tmake_file="arm/t-arm-elf t-rtems"
  	if test x$enable_threads = xyes; then
  	  thread_file='rtems'
--- 523,529 ----
  	extra_parts="crtinit.o crtfini.o"
  	;;
  arm*-*-rtems*)
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/rtems-elf.h rtems.h"
  	tmake_file="arm/t-arm-elf t-rtems"
  	if test x$enable_threads = xyes; then
  	  thread_file='rtems'
*************** arm*-*-netbsd*)
*** 568,574 ****
  	;;
  arm*-*-linux*)			# ARM GNU/Linux with ELF
  	xmake_file=x-linux
! 	tm_file="arm/linux-elf.h"
  	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
  	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
  	gnu_ld=yes
--- 568,574 ----
  	;;
  arm*-*-linux*)			# ARM GNU/Linux with ELF
  	xmake_file=x-linux
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
  	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
  	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
  	gnu_ld=yes
*************** arm*-*-linux*)			# ARM GNU/Linux with EL
*** 579,585 ****
  	esac
  	;;
  arm*-*-uclinux*)		# ARM ucLinux
! 	tm_file=arm/uclinux-elf.h
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-aout)
--- 579,585 ----
  	esac
  	;;
  arm*-*-uclinux*)		# ARM ucLinux
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/linux-gas.h arm/linux-elf.h arm/uclinux-elf.h"
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-aout)
*************** arm*-*-aout)
*** 587,605 ****
  	tmake_file=arm/t-arm-aout
  	;;
  arm*-*-ecos-elf)
! 	tm_file=arm/ecos-elf.h
  	tmake_file=arm/t-arm-elf
  	;; 
  arm*-*-elf)
! 	tm_file=arm/unknown-elf.h
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-conix*)
! 	tm_file=arm/conix-elf.h
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-oabi)
! 	tm_file=arm/unknown-elf-oabi.h
  	tmake_file=arm/t-arm-elf
  	;;
  arm-*-pe*)
--- 587,605 ----
  	tmake_file=arm/t-arm-aout
  	;;
  arm*-*-ecos-elf)
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/ecos-elf.h"
  	tmake_file=arm/t-arm-elf
  	;; 
  arm*-*-elf)
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h"
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-conix*)
! 	tm_file="elfos.h arm/unknown-elf.h arm/elf.h arm/conix-elf.h"
  	tmake_file=arm/t-arm-elf
  	;;
  arm*-*-oabi)
! 	tm_file="arm/unknown-elf-oabi.h elfos.h arm/unknown-elf.h arm/elf.h"
  	tmake_file=arm/t-arm-elf
  	;;
  arm-*-pe*)
*************** stormy16-*-elf)
*** 3109,3115 ****
  	extra_parts="crtbegin.o crtend.o"
  	;;
  strongarm-*-elf*)
! 	tm_file=arm/strongarm-elf.h
  	tmake_file=arm/t-strongarm-elf
  	out_file=arm/arm.c
  	md_file=arm/arm.md
--- 3109,3115 ----
  	extra_parts="crtbegin.o crtend.o"
  	;;
  strongarm-*-elf*)
! 	tm_file="arm/strongarm-elf.h elfos.h arm/unknown-elf.h arm/elf.h"
  	tmake_file=arm/t-strongarm-elf
  	out_file=arm/arm.c
  	md_file=arm/arm.md
*************** we32k-att-sysv*)
*** 3195,3201 ****
  	use_collect2=yes
  	;;
  xscale-*-elf)
! 	tm_file=arm/xscale-elf.h
  	tmake_file=arm/t-xscale-elf
  	out_file=arm/arm.c
  	md_file=arm/arm.md
--- 3195,3201 ----
  	use_collect2=yes
  	;;
  xscale-*-elf)
! 	tm_file="arm/xscale-elf.h elfos.h arm/unknown-elf.h arm/elf.h"
  	tmake_file=arm/t-xscale-elf
  	out_file=arm/arm.c
  	md_file=arm/arm.md
Index: config/arm/aout.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/aout.h,v
retrieving revision 1.18
diff -p -r1.18 aout.h
*** aout.h	2001/07/09 06:09:59	1.18
--- aout.h	2001/09/07 10:12:35
*************** Boston, MA 02111-1307, USA.  */
*** 105,111 ****
--- 105,113 ----
  /* Arm Assembler barfs on dollars */
  #define DOLLARS_IN_IDENTIFIERS 0
  
+ #ifndef NO_DOLLAR_IN_LABEL
  #define NO_DOLLAR_IN_LABEL 1
+ #endif
  
  /* DBX register number for a given compiler register number */
  #define DBX_REGISTER_NUMBER(REGNO)  (REGNO)
*************** Boston, MA 02111-1307, USA.  */
*** 257,266 ****
--- 259,270 ----
  #define ASM_OUTPUT_BYTE(STREAM, VALUE)  	\
    fprintf (STREAM, "\t.byte\t%d\n", VALUE)
  
+ #undef  ASM_OUTPUT_ASCII
  #define ASM_OUTPUT_ASCII(STREAM, PTR, LEN)  \
    output_ascii_pseudo_op (STREAM, (const unsigned char *)(PTR), LEN)
  
  /* Output a gap.  In fact we fill it with nulls.  */
+ #undef  ASM_OUTPUT_SKIP
  #define ASM_OUTPUT_SKIP(STREAM, NBYTES) 	\
    fprintf (STREAM, "\t.space\t%d\n", NBYTES)
  
Index: config/arm/arm.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/arm.h,v
retrieving revision 1.113
diff -p -r1.113 arm.h
*** arm.h	2001/08/18 20:25:50	1.113
--- arm.h	2001/09/07 10:12:36
*************** Unrecognized value in TARGET_CPU_DEFAULT
*** 259,265 ****
--- 259,267 ----
  %{!mthumb-interwork:%{!mno-thumb-interwork:%(cpp_interwork_default)}}	\
  "
  
+ #ifndef CC1_SPEC
  #define CC1_SPEC ""
+ #endif
  
  /* This macro defines names of additional specifications to put in the specs
     that can be used in various specifications like CC1_SPEC.  Its definition
*************** extern enum floating_point_type arm_fpu_
*** 549,555 ****
--- 551,559 ----
  
  /* Default floating point architecture.  Override in sub-target if
     necessary.  */
+ #ifndef FP_DEFAULT
  #define FP_DEFAULT FP_SOFT2
+ #endif
  
  /* Nonzero if the processor has a fast multiply insn, and one that does
     a 64-bit multiply of two 32-bit values.  */
*************** extern int arm_is_6_or_7;
*** 587,592 ****
--- 591,597 ----
     that is controlled by the APCS-FRAME option.  */
  #define CAN_DEBUG_WITHOUT_FP
  
+ #undef  TARGET_MEM_FUNCTIONS
  #define TARGET_MEM_FUNCTIONS 1
  
  #define OVERRIDE_OPTIONS  arm_override_options ()
*************** typedef struct
*** 1555,1560 ****
--- 1560,1566 ----
  
     The ``mov ip,lr'' seems like a good idea to stick with cc convention.
     ``prof'' doesn't seem to mind about this!  */
+ #ifndef ARM_FUNCTION_PROFILER
  #define ARM_FUNCTION_PROFILER(STREAM, LABELNO)  	\
  {							\
    char temp[20];					\
*************** typedef struct
*** 1568,1573 ****
--- 1574,1580 ----
    sym = gen_rtx (SYMBOL_REF, Pmode, temp);		\
    ASM_OUTPUT_INT (STREAM, sym);				\
  }
+ #endif
  
  #define THUMB_FUNCTION_PROFILER(STREAM, LABELNO)	\
  {							\
*************** extern int making_const_table;
*** 2579,2584 ****
--- 2586,2592 ----
  
  /* This is how to output a label which precedes a jumptable.  Since
     Thumb instructions are 2 bytes, we may need explicit alignment here.  */
+ #undef  ASM_OUTPUT_CASE_LABEL
  #define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, JUMPTABLE)	\
    do								\
      {								\
Index: config/arm/conix-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/conix-elf.h,v
retrieving revision 1.8
diff -p -r1.8 conix-elf.h
*** conix-elf.h	2001/08/13 22:05:16	1.8
--- conix-elf.h	2001/09/07 10:12:36
***************
*** 1,6 ****
  /* Definitions of target machine for GNU compiler,
     for ARM with ConiX OS.
!    Copyright (C) 2000 Free Software Foundation, Inc.
     Contributed by Philip Blundell <pb@futuretv.com>
     
  This file is part of GNU CC.
--- 1,6 ----
  /* Definitions of target machine for GNU compiler,
     for ARM with ConiX OS.
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
     Contributed by Philip Blundell <pb@futuretv.com>
     
  This file is part of GNU CC.
*************** GNU General Public License for more deta
*** 18,113 ****
  You should have received a copy of the GNU General Public License
  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.  */
  
  /* Run-time Target Specification.  */
! #ifndef TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF ConiX)", stderr);
- #endif
  
  /* Default to using APCS-32 and software floating point.  */
! #ifndef TARGET_DEFAULT
  #define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
- #endif
- 
- /* Now we define the strings used to build the spec file.  */
- #define STARTFILE_SPEC		"crtbegin%O%s crt0%O%s"
  
- #define ENDFILE_SPEC		"crtend%O%s"
- 
- #define USER_LABEL_PREFIX 	""
- #define LOCAL_LABEL_PREFIX 	"."
- 
- #define TEXT_SECTION		"\t.text"
- 
- /* Debugging */
- #define DWARF2_DEBUGGING_INFO
- #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
- 
- /* Support for Constructors and Destructors.  */
- #define READONLY_DATA_SECTION	rdata_section
- 
- /* A list of other sections which the compiler might be "in" at any
-    given time.  */
- #define SUBTARGET_EXTRA_SECTIONS in_rdata,
- 
- /* A list of extra section function definitions.  */
- #define SUBTARGET_EXTRA_SECTION_FUNCTIONS	RDATA_SECTION_FUNCTION
-   
- #define RDATA_SECTION_ASM_OP	"\t.section .rodata"
- 
- #define RDATA_SECTION_FUNCTION 					\
- void								\
- rdata_section ()						\
- {								\
-   if (in_section != in_rdata)					\
-     {								\
-       fprintf (asm_out_file, "%s\n", RDATA_SECTION_ASM_OP);	\
-       in_section = in_rdata;					\
-     }								\
- }
- 
- /* Switch into a generic section.  */
- #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
- 
- /* The ARM development system defines __main.  */
- #define NAME__MAIN "__gccmain"
- #define SYMBOL__MAIN __gccmain
- 
- #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
- #define UNIQUE_SECTION(DECL,RELOC)				\
-   do								\
-     {								\
-       int len;							\
-       char * name, * string, * prefix;				\
-       								\
-       name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));	\
-       								\
-       if (! DECL_ONE_ONLY (DECL))				\
- 	{							\
- 	  prefix = ".";                                         \
- 	  if (TREE_CODE (DECL) == FUNCTION_DECL)		\
- 	    prefix = ".text.";					\
- 	  else if (DECL_READONLY_SECTION (DECL, RELOC))		\
- 	    prefix = ".rodata.";				\
- 	  else							\
- 	    prefix = ".data.";					\
- 	}							\
-       else if (TREE_CODE (DECL) == FUNCTION_DECL)		\
- 	prefix = ".gnu.linkonce.t.";				\
-       else if (DECL_READONLY_SECTION (DECL, RELOC))		\
- 	prefix = ".gnu.linkonce.r.";				\
-       else							\
- 	prefix = ".gnu.linkonce.d.";				\
-       								\
-       len = strlen (name) + strlen (prefix);			\
-       string = alloca (len + 1);				\
-       sprintf (string, "%s%s", prefix, name);			\
-       								\
-       DECL_SECTION_NAME (DECL) = build_string (len, string);	\
-     }								\
-   while (0)
- 
  #ifndef CPP_APCS_PC_DEFAULT_SPEC
  #define CPP_APCS_PC_DEFAULT_SPEC	"-D__APCS_32__"
  #endif
--- 18,36 ----
  You should have received a copy of the GNU General Public License
  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.  */
  
+ /* elfos.h should have already been included.  Now just override
+    any conflicting definitions and add any extras.  */
+ 
  /* Run-time Target Specification.  */
! #undef  TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF ConiX)", stderr);
  
  /* Default to using APCS-32 and software floating point.  */
! #undef  TARGET_DEFAULT
  #define TARGET_DEFAULT	(ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32)
  
  #ifndef CPP_APCS_PC_DEFAULT_SPEC
  #define CPP_APCS_PC_DEFAULT_SPEC	"-D__APCS_32__"
  #endif
*************** rdata_section ()						\
*** 116,123 ****
  #define SUBTARGET_CPU_DEFAULT 		TARGET_CPU_arm7tdmi
  #endif
       
  #define CPP_PREDEFINES \
    "-D__arm__ -D__CONIX__ -Acpu=arm -Amachine=arm -D__ELF__"
- 
- /* Now get the routine arm-elf definitions.  */
- #include "arm/elf.h"
--- 39,44 ----
  #define SUBTARGET_CPU_DEFAULT 		TARGET_CPU_arm7tdmi
  #endif
       
+ #undef  CPP_PREDEFINES
  #define CPP_PREDEFINES \
    "-D__arm__ -D__CONIX__ -Acpu=arm -Amachine=arm -D__ELF__"
Index: config/arm/ecos-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/ecos-elf.h,v
retrieving revision 1.2
diff -p -r1.2 ecos-elf.h
*** ecos-elf.h	1998/12/16 21:01:33	1.2
--- ecos-elf.h	2001/09/07 10:12:36
***************
*** 1,5 ****
  /* Definitions for ecos based ARM systems using ELF
!    Copyright (C) 1998 Free Software Foundation, Inc.
   
  This file is part of GNU CC.
   
--- 1,5 ----
  /* Definitions for ecos based ARM systems using ELF
!    Copyright (C) 1998, 2001 Free Software Foundation, Inc.
   
  This file is part of GNU CC.
   
*************** the Free Software Foundation, 59 Temple 
*** 19,29 ****
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
  #define TARGET_VERSION	fputs (" (ARM/ELF Ecos)", stderr);
  
  #define HAS_INIT_SECTION
- 
- #include "unknown-elf.h"
  
  #undef INVOKE_main
  
--- 19,28 ----
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
+ #undef  TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF Ecos)", stderr);
  
  #define HAS_INIT_SECTION
  
  #undef INVOKE_main
  
Index: config/arm/elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/elf.h,v
retrieving revision 1.29
diff -p -r1.29 elf.h
*** elf.h	2001/08/09 22:33:21	1.29
--- elf.h	2001/09/07 10:12:36
*************** along with GNU CC; see the file COPYING.
*** 22,38 ****
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
! 
! #define OBJECT_FORMAT_ELF
  
  #ifndef LOCAL_LABEL_PREFIX
  #define LOCAL_LABEL_PREFIX "."
  #endif
  
- #ifndef USER_LABEL_PREFIX
- #define USER_LABEL_PREFIX ""
- #endif
- 
  #ifndef SUBTARGET_CPP_SPEC
  #define SUBTARGET_CPP_SPEC  "-D__ELF__"
  #endif
--- 22,35 ----
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
! #ifndef OBJECT_FORMAT_ELF
!  #error elf.h included before elfos.h
! #endif
  
  #ifndef LOCAL_LABEL_PREFIX
  #define LOCAL_LABEL_PREFIX "."
  #endif
  
  #ifndef SUBTARGET_CPP_SPEC
  #define SUBTARGET_CPP_SPEC  "-D__ELF__"
  #endif
*************** Boston, MA 02111-1307, USA.  */
*** 58,87 ****
  %(subtarget_extra_asm_spec)"
  #endif
  
! /* The following macro defines the format used to output the second
!    operand of the .type assembler directive.  Different svr4 assemblers
!    expect various different forms for this operand.  The one given here
!    is just a default.  You may need to override it in your machine-
!    specific tm.h file (depending upon the particulars of your assembler).  */
  #define TYPE_OPERAND_FMT	"%s"
  
! /* Write the extra assembler code needed to declare a function's result.
!    Most svr4 assemblers don't require any special declaration of the
!    result value, but there are exceptions.  */
! #ifndef ASM_DECLARE_RESULT
! #define ASM_DECLARE_RESULT(FILE, RESULT)
! #endif
! 
! /* These macros generate the special .type and .size directives which
!    are used to set the corresponding fields of the linker symbol table
!    entries in an ELF object file under SVR4.  These macros also output
!    the starting labels for the relevant functions/objects.  */
! #define TYPE_ASM_OP     "\t.type\t"
! #define SIZE_ASM_OP     "\t.size\t"
! 
! /* Write the extra assembler code needed to declare a function properly.
!    Some svr4 assemblers need to also have something extra said about the
!    function's return value.  We allow for that here.  */
  #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)	\
    do							\
      {							\
--- 55,67 ----
  %(subtarget_extra_asm_spec)"
  #endif
  
! /* The ARM uses @ are a comment character so we need to redefine
!    TYPE_OPERAND_FMT.  */
! #undef  TYPE_OPERAND_FMT
  #define TYPE_OPERAND_FMT	"%s"
  
! /* We might need a ARM specific header to function declarations.  */
! #undef  ASM_DECLARE_FUNCTION_NAME
  #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)	\
    do							\
      {							\
*************** Boston, MA 02111-1307, USA.  */
*** 95,151 ****
        ASM_OUTPUT_LABEL(FILE, NAME);			\
      }							\
    while (0)
- 
- /* Write the extra assembler code needed to declare an object properly.  */
- #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)		\
-   do								\
-     {								\
-       fprintf (FILE, "%s", TYPE_ASM_OP);			\
-       assemble_name (FILE, NAME);				\
-       putc (',', FILE);						\
-       fprintf (FILE, TYPE_OPERAND_FMT, "object");		\
-       putc ('\n', FILE);					\
-       size_directive_output = 0;				\
-       if (!flag_inhibit_size_directive && DECL_SIZE (DECL))	\
-         {							\
- 	  size_directive_output = 1;				\
- 	  fprintf (FILE, "%s", SIZE_ASM_OP);			\
- 	  assemble_name (FILE, NAME);				\
- 	  putc (',', FILE);					\
- 	  fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,		\
- 		   int_size_in_bytes (TREE_TYPE (DECL)));	\
- 	  fputc ('\n', FILE);					\
-         }							\
-       ASM_OUTPUT_LABEL(FILE, NAME);				\
-     }								\
-   while (0)
- 
- /* Output the size directive for a decl in rest_of_decl_compilation
-    in the case where we did not do so before the initializer.
-    Once we find the error_mark_node, we know that the value of
-    size_directive_output was set
-    by ASM_DECLARE_OBJECT_NAME when it was run for the same decl.  */
- #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)	\
-   do									\
-     {									\
-       const char * name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);		\
-       if (!flag_inhibit_size_directive && DECL_SIZE (DECL)		\
-           && ! AT_END && TOP_LEVEL					\
- 	  && DECL_INITIAL (DECL) == error_mark_node			\
- 	  && !size_directive_output)					\
-         {								\
- 	  size_directive_output = 1;					\
- 	  fprintf (FILE, "%s", SIZE_ASM_OP);				\
- 	  assemble_name (FILE, name);					\
- 	  putc (',', FILE);						\
- 	  fprintf (FILE, HOST_WIDE_INT_PRINT_DEC,			\
- 		  int_size_in_bytes (TREE_TYPE (DECL)));		\
- 	 fputc ('\n', FILE);						\
-         }								\
-     }									\
-   while (0)
  
! /* This is how to declare the size of a function.  */
  #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)		\
    do								\
      {								\
--- 75,83 ----
        ASM_OUTPUT_LABEL(FILE, NAME);			\
      }							\
    while (0)
  
! /* We might need an ARM specific trailer for function declarations.  */
! #undef  ASM_DECLARE_FUNCTION_SIZE
  #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)		\
    do								\
      {								\
*************** Boston, MA 02111-1307, USA.  */
*** 207,213 ****
  #endif
  
  /* Output an internal label definition.  */
! #ifndef ASM_OUTPUT_INTERNAL_LABEL
  #define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM)  	\
    do								\
      {								\
--- 139,145 ----
  #endif
  
  /* Output an internal label definition.  */
! #undef  ASM_OUTPUT_INTERNAL_LABEL
  #define ASM_OUTPUT_INTERNAL_LABEL(STREAM, PREFIX, NUM)  	\
    do								\
      {								\
*************** Boston, MA 02111-1307, USA.  */
*** 216,273 ****
        extern rtx arm_target_insn;				\
  								\
        if (arm_ccfsm_state == 3 && arm_target_label == (NUM)	\
! 	&& !strcmp (PREFIX, "L"))				\
  	{							\
  	  arm_ccfsm_state = 0;					\
  	  arm_target_insn = NULL;				\
  	}							\
! 	ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM));	\
!         ASM_OUTPUT_LABEL (STREAM, s);		                \
      }								\
    while (0)
- #endif
  
! /* A list of other sections which the compiler might be "in" at any
!    given time.  */
! #ifndef SUBTARGET_EXTRA_SECTIONS
! #define SUBTARGET_EXTRA_SECTIONS
! #endif
! 
! #ifndef EXTRA_SECTIONS
! #define EXTRA_SECTIONS SUBTARGET_EXTRA_SECTIONS
! #endif
! 
! /* A list of extra section function definitions.  */
! #ifndef SUBTARGET_EXTRA_SECTION_FUNCTIONS
! #define SUBTARGET_EXTRA_SECTION_FUNCTIONS
! #endif
! 
! #ifndef EXTRA_SECTION_FUNCTIONS
! #define EXTRA_SECTION_FUNCTIONS 		\
!   SUBTARGET_EXTRA_SECTION_FUNCTIONS
! #endif
! 
! /* Switch into a generic section.  */
! #undef TARGET_ASM_NAMED_SECTION
  #define TARGET_ASM_NAMED_SECTION  arm_elf_asm_named_section
  
! /* Support the ctors/dtors sections for g++.  */
! #ifndef INT_ASM_OP
! #define INT_ASM_OP 	"\t.word\t"
! #endif
! 
! /* This is how we tell the assembler that a symbol is weak.  */
! 
! #define ASM_WEAKEN_LABEL(FILE, NAME)		\
!   do						\
!     {						\
!       fputs ("\t.weak\t", FILE);		\
!       assemble_name (FILE, NAME);		\
!       fputc ('\n', FILE);			\
!     }						\
!   while (0)
! 
! #ifndef ASM_OUTPUT_ALIGNED_COMMON
  #define ASM_OUTPUT_ALIGNED_COMMON(STREAM, NAME, SIZE, ALIGN)	\
    do								\
      {								\
--- 148,167 ----
        extern rtx arm_target_insn;				\
  								\
        if (arm_ccfsm_state == 3 && arm_target_label == (NUM)	\
! 	  && !strcmp (PREFIX, "L"))				\
  	{							\
  	  arm_ccfsm_state = 0;					\
  	  arm_target_insn = NULL;				\
  	}							\
!       ASM_GENERATE_INTERNAL_LABEL (s, (PREFIX), (NUM));		\
!       ASM_OUTPUT_LABEL (STREAM, s);		                \
      }								\
    while (0)
  
! #undef  TARGET_ASM_NAMED_SECTION
  #define TARGET_ASM_NAMED_SECTION  arm_elf_asm_named_section
  
! #undef  ASM_OUTPUT_ALIGNED_COMMON
  #define ASM_OUTPUT_ALIGNED_COMMON(STREAM, NAME, SIZE, ALIGN)	\
    do								\
      {								\
*************** Boston, MA 02111-1307, USA.  */
*** 276,282 ****
        fprintf (STREAM, ", %d, %d\n", SIZE, ALIGN);		\
      }								\
    while (0)
- #endif
  
  /* For PIC code we need to explicitly specify (PLT) and (GOT) relocs.  */
  #define NEED_PLT_RELOC	flag_pic
--- 170,175 ----
Index: config/arm/linux-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/linux-elf.h,v
retrieving revision 1.27
diff -p -r1.27 linux-elf.h
*** linux-elf.h	2001/08/04 01:31:33	1.27
--- linux-elf.h	2001/09/07 10:12:36
*************** along with this program; see the file CO
*** 20,40 ****
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
  #define TARGET_VERSION  fputs (" (ARM GNU/Linux with ELF)", stderr);
  
  /* Do not assume anything about header files.  */
  #define NO_IMPLICIT_EXTERN_C
  
  /* Default is to use APCS-32 mode.  */
  #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
  #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
  #define MULTILIB_DEFAULTS \
  	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
- #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
  
! /* Handle #pragma weak and #pragma pack.  */
! #define HANDLE_SYSV_PRAGMA
  
  /* Now we define the strings used to build the spec file.  */
  #define LIB_SPEC \
--- 20,46 ----
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
+ /* elfos.h should have already been included.  Now just override
+    any conflicting definitions and add any extras.  */
+ 
  /* Run-time Target Specification.  */
+ #undef  TARGET_VERSION
  #define TARGET_VERSION  fputs (" (ARM GNU/Linux with ELF)", stderr);
  
  /* Do not assume anything about header files.  */
  #define NO_IMPLICIT_EXTERN_C
  
  /* Default is to use APCS-32 mode.  */
+ #undef  TARGET_DEFAULT
  #define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
+ 
  #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
+ 
+ #undef  MULTILIB_DEFAULTS
  #define MULTILIB_DEFAULTS \
  	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
  
! #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
  
  /* Now we define the strings used to build the spec file.  */
  #define LIB_SPEC \
*************** Boston, MA 02111-1307, USA.  */
*** 42,48 ****
     %{!shared: %{pthread:-lpthread} \
     %{profile:-lc_p} %{!profile: -lc}}"
  
- 
  #define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
  
  /* Provide a STARTFILE_SPEC appropriate for GNU/Linux.  Here we add
--- 48,53 ----
*************** Boston, MA 02111-1307, USA.  */
*** 50,55 ****
--- 55,61 ----
     provides part of the support for getting C++ file-scope static
     object constructed before entering `main'. */
     
+ #undef  STARTFILE_SPEC
  #define STARTFILE_SPEC \
    "%{!shared: \
       %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
*************** Boston, MA 02111-1307, USA.  */
*** 63,71 ****
--- 69,79 ----
     object constructed before entering `main', followed by a normal
     GNU/Linux "finalizer" file, `crtn.o'.  */
  
+ #undef  ENDFILE_SPEC
  #define ENDFILE_SPEC \
    "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
  
+ #undef  LINK_SPEC
  #define LINK_SPEC "%{h*} %{version:-v} \
     %{b} %{Wl,*:%*} \
     %{static:-Bstatic} \
*************** Boston, MA 02111-1307, USA.  */
*** 85,243 ****
  /* Allow #sccs in preprocessor.  */
  #define SCCS_DIRECTIVE
  
- #define USER_LABEL_PREFIX 	""	/* For ELF the default is no underscores */
- #define LOCAL_LABEL_PREFIX 	"."
- 
- #define IDENT_ASM_OP 	"\t.ident\t"
- 
- /* Output #ident as a .ident.  */
- #define ASM_OUTPUT_IDENT(FILE, NAME) \
-   fprintf (FILE, "%s\"%s\"\n", IDENT_ASM_OP, NAME);
- 
- /* Support const sections and the ctors and dtors sections for g++.
-    Note that there appears to be two different ways to support const
-    sections at the moment.  You can either #define the symbol
-    READONLY_DATA_SECTION (giving it some code which switches to the
-    readonly data section) or else you can #define the symbols
-    EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
-    SELECT_RTX_SECTION.  We do both here just to be on the safe side.  */
- #define USE_CONST_SECTION	1
- 
- /* Support for Constructors and Destructors.  */
- #define READONLY_DATA_SECTION() const_section ()
- 
- /* A default list of other sections which we might be "in" at any given
-    time.  For targets that use additional sections (e.g. .tdesc) you
-    should override this definition in the target-specific file which
-    includes this file.  */
- #define SUBTARGET_EXTRA_SECTIONS in_const,
- 
- /* A default list of extra section function definitions.  For targets
-    that use additional sections (e.g. .tdesc) you should override this
-    definition in the target-specific file which includes this file.  */
- #define SUBTARGET_EXTRA_SECTION_FUNCTIONS	CONST_SECTION_FUNCTION
- 
- #define CONST_SECTION_ASM_OP	"\t.section\t.rodata"
- 
- #define CONST_SECTION_FUNCTION						\
- void									\
- const_section ()							\
- {									\
-   if (!USE_CONST_SECTION)						\
-     text_section ();							\
-   else if (in_section != in_const)					\
-     {									\
-       fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP);		\
-       in_section = in_const;						\
-     }									\
- }
- 
- /* Switch into a generic section.  */
- #define TARGET_ASM_NAMED_SECTION  arm_elf_asm_named_section
- 
- /* A C statement or statements to switch to the appropriate
-    section for output of DECL.  DECL is either a `VAR_DECL' node
-    or a constant of some sort.  RELOC indicates whether forming
-    the initial value of DECL requires link-time relocations.  */
- #define SELECT_SECTION(DECL,RELOC)					\
- {									\
-   if (TREE_CODE (DECL) == STRING_CST)					\
-     {									\
-       if (! flag_writable_strings)					\
- 	const_section ();						\
-       else								\
- 	data_section ();						\
-     }									\
-   else if (TREE_CODE (DECL) == VAR_DECL)				\
-     {									\
-       if ((flag_pic && RELOC)						\
- 	  || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)		\
- 	  || !DECL_INITIAL (DECL)					\
- 	  || (DECL_INITIAL (DECL) != error_mark_node			\
- 	      && !TREE_CONSTANT (DECL_INITIAL (DECL))))			\
- 	data_section ();						\
-       else								\
- 	const_section ();						\
-     }									\
-   else									\
-     const_section ();							\
- }
- 
- #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
- #define UNIQUE_SECTION(DECL, RELOC)				\
-   do								\
-     {								\
-       int len;							\
-       char * name;						\
-       char * string;						\
-       char * prefix;						\
- 								\
-       name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));	\
-       								\
-       if (! DECL_ONE_ONLY (DECL))				\
- 	{							\
- 	  prefix = ".";                                         \
- 	  if (TREE_CODE (DECL) == FUNCTION_DECL)		\
- 	    prefix = ".text.";					\
- 	  else if (DECL_READONLY_SECTION (DECL, RELOC))		\
- 	    prefix = ".rodata.";				\
- 	  else							\
- 	    prefix = ".data.";					\
- 	}							\
-       else if (TREE_CODE (DECL) == FUNCTION_DECL)		\
- 	prefix = ".gnu.linkonce.t.";				\
-       else if (DECL_READONLY_SECTION (DECL, RELOC))		\
- 	prefix = ".gnu.linkonce.r.";				\
-       else							\
- 	prefix = ".gnu.linkonce.d.";				\
-       								\
-       len = strlen (name) + strlen (prefix);			\
-       string = alloca (len + 1);				\
-       sprintf (string, "%s%s", prefix, name);			\
-       								\
-       DECL_SECTION_NAME (DECL) = build_string (len, string);	\
-     }								\
-   while (0)
- 
- /* A C statement or statements to switch to the appropriate
-    section for output of RTX in mode MODE.  RTX is some kind
-    of constant in RTL.  The argument MODE is redundant except
-    in the case of a `const_int' rtx.  Currently, these always
-    go into the const section.  */
- #define SELECT_RTX_SECTION(MODE,RTX) const_section ()
- 
- /* On svr4, we *do* have support for the .init and .fini sections, and we
-    can put stuff in there to be executed before and after `main'.  We let
-    crtstuff.c and other files know this by defining the following symbols.
-    The definitions say how to change sections to the .init and .fini
-    sections.  This is the same for all known svr4 assemblers.  */
- #define INIT_SECTION_ASM_OP	"\t.section\t.init"
- #define FINI_SECTION_ASM_OP	"\t.section\t.fini"
- 
- 
- /* This is how we tell the assembler that a symbol is weak.  */
- #define ASM_WEAKEN_LABEL(FILE,NAME) \
-   do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
-        fputc ('\n', FILE); } while (0)
- 
  /* This is how we tell the assembler that two symbols have the same value.  */
! 
! #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
!   do { assemble_name (FILE, NAME1); 	 \
!        fputs (" = ", FILE);		 \
!        assemble_name (FILE, NAME2);	 \
!        fputc ('\n', FILE); } while (0)
! 
! /* Make DWARF2 an option, but keep DBX as the default for now.
!    Use -gdwarf-2 to turn on DWARF2.  */
! #define DWARF2_DEBUGGING_INFO
! #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
! 
! /* Get the standard ELF stabs definitions.  */
! #include "dbxelf.h"
! 
! #include "arm/elf.h"
! #include "arm/linux-gas.h"
  
  /* NWFPE always understands FPA instructions.  */
  #undef  FP_DEFAULT
--- 93,108 ----
  /* Allow #sccs in preprocessor.  */
  #define SCCS_DIRECTIVE
  
  /* This is how we tell the assembler that two symbols have the same value.  */
! #define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
!   do					   \
!     {					   \
!       assemble_name (FILE, NAME1); 	   \
!       fputs (" = ", FILE);		   \
!       assemble_name (FILE, NAME2);	   \
!       fputc ('\n', FILE);		   \
!     }					   \
!   while (0)
  
  /* NWFPE always understands FPA instructions.  */
  #undef  FP_DEFAULT
Index: config/arm/linux-gas.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/linux-gas.h,v
retrieving revision 1.7
diff -p -r1.7 linux-gas.h
*** linux-gas.h	2001/01/02 13:38:41	1.7
--- linux-gas.h	2001/09/07 10:12:36
*************** along with this program; see the file CO
*** 20,43 ****
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
! /*
!  * We are using GAS, so stabs should work.
!  */
  
! #ifndef DBX_DEBUGGING_INFO
! #define DBX_DEBUGGING_INFO 1
! #endif
! 
! /*
!  * This is how we tell the assembler that a symbol is weak.  GAS always
!  * supports weak symbols.
!  */
! 
! #define ASM_WEAKEN_LABEL(FILE,NAME) \
!   do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
!        fputc ('\n', FILE); } while (0)
! 
! /* This is used in ASM_FILE_START */
  #undef  ARM_OS_NAME
  #define ARM_OS_NAME "Linux"
  
--- 20,29 ----
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
! /* 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"
  
Index: config/arm/rtems-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/rtems-elf.h,v
retrieving revision 1.1
diff -p -r1.1 rtems-elf.h
*** rtems-elf.h	2000/12/07 02:42:01	1.1
--- rtems-elf.h	2001/09/07 10:12:36
***************
*** 1,5 ****
  /* Definitions for RTEMS based ARM systems using ELF
!    Copyright (C) 2000 Free Software Foundation, Inc.
   
  This file is part of GNU CC.
   
--- 1,5 ----
  /* Definitions for RTEMS based ARM systems using ELF
!    Copyright (C) 2000, 2001 Free Software Foundation, Inc.
   
  This file is part of GNU CC.
   
*************** the Free Software Foundation, 59 Temple 
*** 19,37 ****
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
  #define TARGET_VERSION  fputs (" (ARM/ELF RTEMS)", stderr);
  
  #define HAS_INIT_SECTION
  
! #include "unknown-elf.h"
! 
! #undef CPP_PREDEFINES
  #define CPP_PREDEFINES "-Darm -Darm_elf -Drtems -D__rtems__ -D__ELF__ \
     -Asystem(rtems) -Acpu(arm) -Amachine(arm)"
  
  /*#undef INVOKE_main*/
- 
- /* Get machine-independent configuration parameters for RTEMS.  */
- #include <rtems.h>
  
  
--- 19,33 ----
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
+ #undef  TARGET_VERSION
  #define TARGET_VERSION  fputs (" (ARM/ELF RTEMS)", stderr);
  
  #define HAS_INIT_SECTION
  
! #undef  CPP_PREDEFINES
  #define CPP_PREDEFINES "-Darm -Darm_elf -Drtems -D__rtems__ -D__ELF__ \
     -Asystem(rtems) -Acpu(arm) -Amachine(arm)"
  
  /*#undef INVOKE_main*/
  
  
Index: config/arm/strongarm-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/strongarm-elf.h,v
retrieving revision 1.2
diff -p -r1.2 strongarm-elf.h
*** strongarm-elf.h	2000/04/08 14:29:52	1.2
--- strongarm-elf.h	2001/09/07 10:12:36
***************
*** 1,5 ****
  /* Definitions for non-Linux based StrongARM systems using ELF
!    Copyright (C) 1999 Free Software Foundation, Inc.
     Contributed by Catherine Moore <clm@cygnus.com>
  
  This file is part of GNU CC.
--- 1,5 ----
  /* Definitions for non-Linux based StrongARM systems using ELF
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
     Contributed by Catherine Moore <clm@cygnus.com>
  
  This file is part of GNU CC.
*************** Boston, MA 02111-1307, USA.  */
*** 28,31 ****
  #define SUBTARGET_CPU_DEFAULT 		TARGET_CPU_strongarm
  #endif
  
- #include "unknown-elf.h"
--- 28,30 ----
Index: config/arm/uclinux-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/uclinux-elf.h,v
retrieving revision 1.3
diff -p -r1.3 uclinux-elf.h
*** uclinux-elf.h	1999/12/18 13:34:21	1.3
--- uclinux-elf.h	2001/09/07 10:12:36
***************
*** 1,5 ****
  /* Definitions for ARM running ucLinux using ELF
!    Copyright (C) 1999 Free Software Foundation, Inc.
     Contributed by Philip Blundell <pb@nexus.co.uk>
  
  This file is part of GNU CC.
--- 1,5 ----
  /* Definitions for ARM running ucLinux using ELF
!    Copyright (C) 1999, 2001 Free Software Foundation, Inc.
     Contributed by Philip Blundell <pb@nexus.co.uk>
  
  This file is part of GNU CC.
*************** You should have received a copy of the G
*** 18,25 ****
  along with this program; see the file COPYING.  If not, write to
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
- 
- #include "arm/linux-elf.h"
  
  /* We don't want a PLT.  */
  #undef  NEED_PLT_RELOC
--- 18,23 ----
Index: config/arm/unknown-elf-oabi.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/unknown-elf-oabi.h,v
retrieving revision 1.3
diff -p -r1.3 unknown-elf-oabi.h
*** unknown-elf-oabi.h	2000/11/02 23:29:08	1.3
--- unknown-elf-oabi.h	2001/09/07 10:12:36
*************** the Free Software Foundation, 59 Temple 
*** 20,36 ****
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
! #ifndef TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF non-Linux old abi)", stderr);
- #endif
  
  #define CPP_PREDEFINES "-Darm_oabi -Darm -Darm_elf -Acpu=arm -Amachine=arm -D__ELF__"
  
! #ifndef ASM_SPEC
  #define ASM_SPEC "-moabi %{mbig-endian:-EB} %{mcpu=*:-m%*} %{march=*:-m%*} \
   %{mapcs-*:-mapcs-%*} %{mthumb-interwork:-mthumb-interwork}"
- #endif
  
- /* Now get the routine arm-elf definitions.  */
- #include "arm/unknown-elf.h"
- #include "arm/elf.h"
--- 20,32 ----
  Boston, MA 02111-1307, USA.  */
  
  /* Run-time Target Specification.  */
! #undef  TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF non-Linux old abi)", stderr);
  
+ #undef  CPP_PREDEFINES
  #define CPP_PREDEFINES "-Darm_oabi -Darm -Darm_elf -Acpu=arm -Amachine=arm -D__ELF__"
  
! #undef  ASM_SPEC
  #define ASM_SPEC "-moabi %{mbig-endian:-EB} %{mcpu=*:-m%*} %{march=*:-m%*} \
   %{mapcs-*:-mapcs-%*} %{mthumb-interwork:-mthumb-interwork}"
  
Index: config/arm/unknown-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/unknown-elf.h,v
retrieving revision 1.21
diff -p -r1.21 unknown-elf.h
*** unknown-elf.h	2001/08/31 17:09:58	1.21
--- unknown-elf.h	2001/09/07 10:12:36
*************** along with this program; see the file CO
*** 19,24 ****
--- 19,27 ----
  the Free Software Foundation, 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.  */
  
+ /* elfos.h should have already been included.  Now just override
+    any conflicting definitions and add any extras.  */
+ 
  /* Run-time Target Specification.  */
  #ifndef TARGET_VERSION
  #define TARGET_VERSION	fputs (" (ARM/ELF non-Linux)", stderr);
*************** Boston, MA 02111-1307, USA.  */
*** 30,83 ****
  #endif
  
  /* Now we define the strings used to build the spec file.  */
  #define STARTFILE_SPEC	"crtbegin%O%s crt0%O%s"
  
  #define ENDFILE_SPEC	"crtend%O%s"
  
- #define USER_LABEL_PREFIX 	""
- #define LOCAL_LABEL_PREFIX 	"."
- 
- #define TEXT_SECTION_ASM_OP 	"\t.text"
- #define INIT_SECTION_ASM_OP	"\t.section\t.init"
- #define FINI_SECTION_ASM_OP	"\t.section\t.fini"
- 
  #define INVOKE__main
  
! /* Debugging */
! #define DWARF_DEBUGGING_INFO
! #define DWARF2_DEBUGGING_INFO
  #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
  
- /* Support for Constructors and Destrcutors .  */
- #define READONLY_DATA_SECTION	rdata_section
- 
- /* A list of other sections which the compiler might be "in" at any
-    given time.  */
- #define SUBTARGET_EXTRA_SECTIONS in_rdata
- 
- /* A list of extra section function definitions.  */
- #define SUBTARGET_EXTRA_SECTION_FUNCTIONS	RDATA_SECTION_FUNCTION
-   
- #define RDATA_SECTION_ASM_OP	"\t.section .rodata"
- 
- #define RDATA_SECTION_FUNCTION 					\
- void rdata_section PARAMS ((void));				\
- 								\
- void								\
- rdata_section ()						\
- {								\
-   if (in_section != in_rdata)					\
-     {								\
-       fprintf (asm_out_file, "%s\n", RDATA_SECTION_ASM_OP);	\
-       in_section = in_rdata;					\
-     }								\
- }
- 
- /* Switch into a generic section.  */
- #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
- 
  /* The ARM development system defines __main.  */
! #define NAME__MAIN "__gccmain"
  #define SYMBOL__MAIN __gccmain
  
  /* Return a non-zero value if DECL has a section attribute.  */
--- 33,51 ----
  #endif
  
  /* Now we define the strings used to build the spec file.  */
+ #undef  STARTFILE_SPEC
  #define STARTFILE_SPEC	"crtbegin%O%s crt0%O%s"
  
+ #undef  ENDFILE_SPEC
  #define ENDFILE_SPEC	"crtend%O%s"
  
  #define INVOKE__main
  
! #undef  PREFERRED_DEBUGGING_TYPE
  #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
  
  /* The ARM development system defines __main.  */
! #define NAME__MAIN  "__gccmain"
  #define SYMBOL__MAIN __gccmain
  
  /* Return a non-zero value if DECL has a section attribute.  */
*************** rdata_section ()						\
*** 85,132 ****
    ((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL)	\
     && DECL_SECTION_NAME (DECL) != NULL_TREE)
  
- #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
- 
- #define UNIQUE_SECTION(DECL, RELOC)					\
-   do									\
-     {									\
-       int len;								\
-       int sec;								\
-       const char * name;						\
-       char * string;							\
-       char * prefix;							\
-       static char * prefixes[4][2] =					\
-       {									\
- 	{ ".text.",   ".gnu.linkonce.t." },				\
- 	{ ".rodata.", ".gnu.linkonce.r." },				\
- 	{ ".data.",   ".gnu.linkonce.d." },				\
-         { ".bss.",    ".gnu.linkonce.b." }				\
-       };								\
-       									\
-       if (TREE_CODE (DECL) == FUNCTION_DECL)				\
- 	sec = 0;							\
-       else if (DECL_READONLY_SECTION (DECL, RELOC))			\
- 	sec = 1;							\
-       else if (DECL_INITIAL (DECL) == NULL_TREE)			\
- 	sec = 3;							\
-       else								\
- 	sec = 2;							\
-       									\
-       prefix = prefixes[sec][DECL_ONE_ONLY(DECL)];			\
-       name   = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));		\
-       									\
-       /* Strip off any encoding in name.  */				\
-       STRIP_NAME_ENCODING (name, name);					\
- 									\
-       len    = strlen (name) + strlen (prefix);				\
-       string = alloca (len + 1);					\
-       									\
-       sprintf (string, "%s%s", prefix, name);				\
-       									\
-       DECL_SECTION_NAME (DECL) = build_string (len, string);		\
-     }									\
-   while (0)
- 
  #undef  ASM_OUTPUT_ALIGNED_BSS
  #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN)   	\
    do									\
--- 53,58 ----
*************** rdata_section ()						\
*** 169,173 ****
  #define SUBTARGET_CPU_DEFAULT 		TARGET_CPU_arm7tdmi
  #endif
  
- /* Now get the routine arm-elf definitions.  */
- #include "elf.h"
--- 95,97 ----
Index: config/arm/xscale-elf.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/arm/xscale-elf.h,v
retrieving revision 1.1
diff -p -r1.1 xscale-elf.h
*** xscale-elf.h	2000/12/04 00:23:35	1.1
--- xscale-elf.h	2001/09/07 10:12:36
***************
*** 1,5 ****
  /* Definitions for XScale architectures using ELF
!    Copyright (C) 1999, 2000 Free Software Foundation, Inc.
     Contributed by Catherine Moore <clm@cygnus.com>
  
  This file is part of GNU CC.
--- 1,5 ----
  /* Definitions for XScale architectures using ELF
!    Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
     Contributed by Catherine Moore <clm@cygnus.com>
  
  This file is part of GNU CC.
*************** Boston, MA 02111-1307, USA.  */
*** 34,38 ****
  #define MULTILIB_DEFAULTS \
    { "mlittle-endian", "mno-thumb-interwork", "marm" }
  #endif
- 
- #include "unknown-elf.h"
--- 34,36 ----

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]