[llvm-commits] [llvm-gcc-4.2] r41537 - in /llvm-gcc-4.2/trunk/gcc/config/i386: cygming.h t-cygming t-mingw32 winnt.c

Anton Korobeynikov asl at math.spbu.ru
Tue Aug 28 05:24:18 PDT 2007


Author: asl
Date: Tue Aug 28 07:24:17 2007
New Revision: 41537

URL: http://llvm.org/viewvc/llvm-project?rev=41537&view=rev
Log:
Unbreak mingw32 build from merge bugs.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/i386/cygming.h
    llvm-gcc-4.2/trunk/gcc/config/i386/t-cygming
    llvm-gcc-4.2/trunk/gcc/config/i386/t-mingw32
    llvm-gcc-4.2/trunk/gcc/config/i386/winnt.c

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/cygming.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/cygming.h?rev=41537&r1=41536&r2=41537&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/cygming.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/cygming.h Tue Aug 28 07:24:17 2007
@@ -389,427 +389,15 @@
 #ifndef BUFSIZ
 # undef FILE
 #endif
-/* Operating system specific defines to be used when targeting GCC for
-   hosting on Windows32, using a Unix style C library and tools.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005
-   Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GCC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to
-the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
-
-#define DBX_DEBUGGING_INFO 1
-#define SDB_DEBUGGING_INFO 1
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-#ifdef HAVE_GAS_PE_SECREL32_RELOC
-#define DWARF2_DEBUGGING_INFO 1
-
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) (write_symbols == DWARF2_DEBUG   \
-                                ? svr4_dbx_register_map[n]      \
-                                : dbx_register_map[n])
-
-/* Use section relative relocations for debugging offsets.  Unlike
-   other targets that fake this by putting the section VMA at 0, PE
-   won't allow it.  */
-#define ASM_OUTPUT_DWARF_OFFSET(FILE, SIZE, LABEL, SECTION)	\
-  do {								\
-    if (SIZE != 4)						\
-      abort ();							\
-								\
-    fputs ("\t.secrel32\t", FILE);				\
-    assemble_name (FILE, LABEL);				\
-  } while (0)
-#endif
-
-#define TARGET_EXECUTABLE_SUFFIX ".exe"
-
-#include <stdio.h>
-
-#define MAYBE_UWIN_CPP_BUILTINS() /* Nothing.  */
-
-#define TARGET_OS_CPP_BUILTINS()					\
-  do									\
-    {									\
-	builtin_define ("_X86_=1");					\
-	builtin_assert ("system=winnt");				\
-	builtin_define ("__stdcall=__attribute__((__stdcall__))");	\
-	builtin_define ("__fastcall=__attribute__((__fastcall__))");	\
-	builtin_define ("__cdecl=__attribute__((__cdecl__))");		\
-	if (!flag_iso)							\
-	  {								\
-	    builtin_define ("_stdcall=__attribute__((__stdcall__))");	\
-	    builtin_define ("_fastcall=__attribute__((__fastcall__))");	\
-	    builtin_define ("_cdecl=__attribute__((__cdecl__))");	\
-	  }								\
-	/* Even though linkonce works with static libs, this is needed 	\
-	    to compare typeinfo symbols across dll boundaries.  */	\
-	builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0");		\
-	MAYBE_UWIN_CPP_BUILTINS ();					\
-	EXTRA_OS_CPP_BUILTINS ();					\
-  }									\
-  while (0)
-
-/* Get tree.c to declare a target-specific specialization of
-   merge_decl_attributes.  */
-#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 1
-
-/* This macro defines names of additional specifications to put in the specs
-   that can be used in various specifications like CC1_SPEC.  Its definition
-   is an initializer with a subgrouping for each command option.
-
-   Each subgrouping contains a string constant, that defines the
-   specification name, and a string constant that used by the GCC driver
-   program.
-
-   Do not define this macro if it does not need to do anything.  */
-
-#undef  SUBTARGET_EXTRA_SPECS
-#define SUBTARGET_EXTRA_SPECS						\
-  { "mingw_include_path", DEFAULT_TARGET_MACHINE }
-
-#undef MATH_LIBRARY
-#define MATH_LIBRARY ""
-
-#define SIZE_TYPE "unsigned int"
-#define PTRDIFF_TYPE "int"
-#define WCHAR_TYPE_SIZE 16
-#define WCHAR_TYPE "short unsigned int"
-
-
-/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop).  */
-#define HANDLE_PRAGMA_PACK_PUSH_POP 1
-
-union tree_node;
-#define TREE union tree_node *
-
-#define drectve_section() \
-  (fprintf (asm_out_file, "\t.section .drectve\n"), \
-   in_section = NULL)
-
-/* Older versions of gas don't handle 'r' as data.
-   Explicitly set data flag with 'd'.  */  
-#define READONLY_DATA_SECTION_ASM_OP "\t.section .rdata,\"dr\""
-
-/* Don't allow flag_pic to propagate since gas may produce invalid code
-   otherwise.  */
-
-#undef  SUBTARGET_OVERRIDE_OPTIONS
-#define SUBTARGET_OVERRIDE_OPTIONS					\
-do {									\
-  if (flag_pic)								\
-    {									\
-      warning (0, "-f%s ignored for target (all code is position independent)",\
-	       (flag_pic > 1) ? "PIC" : "pic");				\
-      flag_pic = 0;							\
-    }									\
-} while (0)								\
-
-/* Define this macro if references to a symbol must be treated
-   differently depending on something about the variable or
-   function named by the symbol (such as what section it is in).
-
-   On i386 running Windows NT, modify the assembler name with a suffix
-   consisting of an atsign (@) followed by string of digits that represents
-   the number of bytes of arguments passed to the function, if it has the
-   attribute STDCALL.
-
-   In addition, we must mark dll symbols specially. Definitions of
-   dllexport'd objects install some info in the .drectve section.
-   References to dllimport'd objects are fetched indirectly via
-   _imp__.  If both are declared, dllexport overrides.  This is also
-   needed to implement one-only vtables: they go into their own
-   section and we need to set DECL_SECTION_NAME so we do that here.
-   Note that we can be called twice on the same decl.  */
-
-#undef SUBTARGET_ENCODE_SECTION_INFO
-#define SUBTARGET_ENCODE_SECTION_INFO  i386_pe_encode_section_info
-#undef  TARGET_STRIP_NAME_ENCODING
-#define TARGET_STRIP_NAME_ENCODING  i386_pe_strip_name_encoding_full
-
-/* Output a reference to a label.  */
-#undef ASM_OUTPUT_LABELREF
-#define ASM_OUTPUT_LABELREF  i386_pe_output_labelref
-
-#undef  COMMON_ASM_OP
-#define COMMON_ASM_OP	"\t.comm\t"
-
- /* APPLE LOCAL begin mainline 2005-07-31 */
-#undef  COMMON_ASM_OP
-#define COMMON_ASM_OP	"\t.comm\t"
- /* APPLE LOCAL end mainline 2005-07-31 */
-
-/* Output a common block.  */
-#undef ASM_OUTPUT_COMMON
-#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED)	\
-do {							\
-  if (i386_pe_dllexport_name_p (NAME))			\
-    i386_pe_record_exported_symbol (NAME, 1);		\
-  if (! i386_pe_dllimport_name_p (NAME))		\
-    {							\
-      fprintf ((STREAM), "\t.comm\t");			\
-      assemble_name ((STREAM), (NAME));			\
-      fprintf ((STREAM), ", %d\t%s %d\n",		\
-	       (int)(ROUNDED), ASM_COMMENT_START, (int)(SIZE));	\
-    }							\
-} while (0)
-
-/* Output the label for an initialized variable.  */
-#undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL)	\
-do {							\
-  if (i386_pe_dllexport_name_p (NAME))			\
-    i386_pe_record_exported_symbol (NAME, 1);		\
-  ASM_OUTPUT_LABEL ((STREAM), (NAME));			\
-} while (0)
-
-
-/* Emit code to check the stack when allocating more that 4000
-   bytes in one go.  */
-
-#define CHECK_STACK_LIMIT 4000
-
-/* By default, target has a 80387, uses IEEE compatible arithmetic,
-   returns float values in the 387 and needs stack probes.
-   We also align doubles to 64-bits for MSVC default compatibility.  */
-
-#undef TARGET_SUBTARGET_DEFAULT
-#define TARGET_SUBTARGET_DEFAULT \
-   (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE \
-    | MASK_ALIGN_DOUBLE)
-
-/* This is how to output an assembler line
-   that says to advance the location counter
-   to a multiple of 2**LOG bytes.  */
-
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG)	\
-    if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG))
-
-/* Windows uses explicit import from shared libraries.  */
-#define MULTIPLE_SYMBOL_SPACES 1
-
-extern void i386_pe_unique_section (TREE, int);
-#define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
-#define TARGET_ASM_FUNCTION_RODATA_SECTION default_no_function_rodata_section
-
-#define SUPPORTS_ONE_ONLY 1
-
-/* Switch into a generic section.  */
-#define TARGET_ASM_NAMED_SECTION  i386_pe_asm_named_section
-
-/* Select attributes for named sections.  */
-#define TARGET_SECTION_TYPE_FLAGS  i386_pe_section_type_flags
-
-/* Write the extra assembler code needed to declare a function
-   properly.  If we are generating SDB debugging information, this
-   will happen automatically, so we only need to handle other cases.  */
-#undef ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)			\
-  do									\
-    {									\
-      if (i386_pe_dllexport_name_p (NAME))				\
-	i386_pe_record_exported_symbol (NAME, 0);			\
-      if (write_symbols != SDB_DEBUG)					\
-	i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL));	\
-      ASM_OUTPUT_LABEL (FILE, NAME);					\
-    }									\
-  while (0)
-
-/* Add an external function to the list of functions to be declared at
-   the end of the file.  */
-#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME)				\
-  do									\
-    {									\
-      if (TREE_CODE (DECL) == FUNCTION_DECL)				\
-	i386_pe_record_external_function ((DECL), (NAME));		\
-    }									\
-  while (0)
-
-/* Declare the type properly for any external libcall.  */
-#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
-  i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1)
-
-/* This says out to put a global symbol in the BSS section.  */
-#undef ASM_OUTPUT_ALIGNED_BSS
-#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
-  asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
-
-/* Output function declarations at the end of the file.  */
-#undef TARGET_ASM_FILE_END
-#define TARGET_ASM_FILE_END i386_pe_file_end
-
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START " #"
-
-/* DWARF2 Unwinding doesn't work with exception handling yet.  To make
-   it work, we need to build a libgcc_s.dll, and dcrt0.o should be
-   changed to call __register_frame_info/__deregister_frame_info.  */
-#define DWARF2_UNWIND_INFO 0
-
-/* Don't assume anything about the header files.  */
-#define NO_IMPLICIT_EXTERN_C
-
-#undef PROFILE_HOOK
-#define PROFILE_HOOK(LABEL)						\
-  if (MAIN_NAME_P (DECL_NAME (current_function_decl)))			\
-    {									\
-      emit_call_insn (gen_rtx_CALL (VOIDmode,				\
-	gen_rtx_MEM (FUNCTION_MODE,					\
-		     gen_rtx_SYMBOL_REF (Pmode, "_monstartup")),	\
-	const0_rtx));							\
-    }
-
-/* Java Native Interface (JNI) methods on Win32 are invoked using the
-   stdcall calling convention.  */
-#undef MODIFY_JNI_METHOD_CALL
-#define MODIFY_JNI_METHOD_CALL(MDECL)					      \
-  build_type_attribute_variant ((MDECL),				      \
-			       build_tree_list (get_identifier ("stdcall"),   \
-						NULL))
-
-/* External function declarations.  */
-
-extern void i386_pe_record_external_function (tree, const char *);
-extern void i386_pe_declare_function_type (FILE *, const char *, int);
-extern void i386_pe_record_exported_symbol (const char *, int);
-extern void i386_pe_file_end (void);
-extern int i386_pe_dllexport_name_p (const char *);
-extern int i386_pe_dllimport_name_p (const char *);
-extern int i386_pe_dllexport_p (tree);
-extern int i386_pe_dllimport_p (tree);
-
-/* For Win32 ABI compatibility */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* MSVC returns aggregate types of up to 8 bytes via registers.
-   See i386.c:ix86_return_in_memory.  */
-#undef MS_AGGREGATE_RETURN
-#define MS_AGGREGATE_RETURN 1
-
-/* No data type wants to be aligned rounder than this.  */
-#undef	BIGGEST_ALIGNMENT
-#define BIGGEST_ALIGNMENT 128
-
-/* Biggest alignment supported by the object file format of this
-   machine.  Use this macro to limit the alignment which can be
-   specified using the `__attribute__ ((aligned (N)))' construct.  If
-   not defined, the default value is `BIGGEST_ALIGNMENT'.  */
-#undef MAX_OFILE_ALIGNMENT
-/* IMAGE_SCN_ALIGN_8192BYTES is the largest section alignment flag
-   specified in the PECOFF60 spec.  Native MS compiler also limits
-   user-specified alignment to 8192 bytes.  */
-#define MAX_OFILE_ALIGNMENT (8192 * 8)
-
-/* Native complier aligns internal doubles in structures on dword boundaries.  */
-#undef	BIGGEST_FIELD_ALIGNMENT
-#define BIGGEST_FIELD_ALIGNMENT 64
-
-/* A bit-field declared as `int' forces `int' alignment for the struct.  */
-#undef PCC_BITFIELD_TYPE_MATTERS
-#define PCC_BITFIELD_TYPE_MATTERS 1
-#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec)
-
-/* Enable alias attribute support.  */
-#ifndef SET_ASM_OP
-#define SET_ASM_OP "\t.set\t"
-#endif
-/* This implements the `alias' attribute, keeping any stdcall or
-   fastcall decoration.  */
-#undef	ASM_OUTPUT_DEF_FROM_DECLS
-#define	ASM_OUTPUT_DEF_FROM_DECLS(STREAM, DECL, TARGET) 		\
-  do									\
-    {									\
-      const char *alias;						\
-      rtx rtlname = XEXP (DECL_RTL (DECL), 0);				\
-      if (GET_CODE (rtlname) == SYMBOL_REF)				\
-	alias = XSTR (rtlname, 0);					\
-      else								\
-	abort ();							\
-      if (TREE_CODE (DECL) == FUNCTION_DECL)				\
-	i386_pe_declare_function_type (STREAM, alias,			\
-				       TREE_PUBLIC (DECL));		\
-      ASM_OUTPUT_DEF (STREAM, alias, IDENTIFIER_POINTER (TARGET));	\
-    } while (0)
-
-/* GNU as supports weak symbols on PECOFF. */
-#ifdef HAVE_GAS_WEAK
-#define ASM_WEAKEN_LABEL(FILE, NAME)  \
-  do                                  \
-    {                                 \
-      fputs ("\t.weak\t", (FILE));    \
-      assemble_name ((FILE), (NAME)); \
-      fputc ('\n', (FILE));           \
-    }                                 \
-  while (0)
-#endif /* HAVE_GAS_WEAK */
-
-/* FIXME: SUPPORTS_WEAK && TARGET_HAVE_NAMED_SECTIONS is true,
-   but for .jcr section to work we also need crtbegin and crtend
-   objects.  */
-#define TARGET_USE_JCR_SECTION 0
-
-/* Decide whether it is safe to use a local alias for a virtual function
-   when constructing thunks.  */
-#undef TARGET_USE_LOCAL_THUNK_ALIAS_P
-#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) (!DECL_ONE_ONLY (DECL))
-
-#define SUBTARGET_ATTRIBUTE_TABLE \
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \
-  { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute }
-
-/*  mcount() does not need a counter variable.  */
-#undef NO_PROFILE_COUNTERS
-#define NO_PROFILE_COUNTERS 1
-
-#define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p
-#define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
-
- /* APPLE LOCAL begin mainline 2005-10-12 */
-#define TARGET_VALID_DLLIMPORT_ATTRIBUTE_P i386_pe_valid_dllimport_attribute_p
-#define TARGET_CXX_ADJUST_CLASS_AT_DEFINITION i386_pe_adjust_class_at_definition
- /* APPLE LOCAL end mainline 2005-10-12 */
-
- /* APPLE LOCAL begin mainline 2005-06-01 */
-/*  mcount() does not need a counter variable.  */
-#undef NO_PROFILE_COUNTERS
-#define NO_PROFILE_COUNTERS 1
- /* APPLE LOCAL end mainline 2005-06-01 */
-
- /* APPLE LOCAL begin mainline 2005-04-01 */
-#define SUBTARGET_ATTRIBUTE_TABLE \
-  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \
-  { "selectany", 0, 0, true, false, false, ix86_handle_selectany_attribute }
- /* APPLE LOCAL end mainline 2005-04-01 */
-
-#undef TREE
-
-#ifndef BUFSIZ
-# undef FILE
-#endif
 
 /* LLVM LOCAL begin */
 #ifdef ENABLE_LLVM
 
 /* LLVM specific stuff for supporting dllimport & dllexport linkage output */
 
+extern bool i386_pe_dllimport_p(tree);
+extern bool i386_pe_dllexport_p(tree);
+
 #define TARGET_ADJUST_LLVM_LINKAGE(GV, decl)            \
   {                                                     \
     if (i386_pe_dllimport_p((decl))) {                  \

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/t-cygming
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/t-cygming?rev=41537&r1=41536&r2=41537&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/t-cygming (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/t-cygming Tue Aug 28 07:24:17 2007
@@ -30,50 +30,3 @@
 	$(srcdir)/config/i386/winnt-stubs.c
 
 STMP_FIXINC=stmp-fixinc
-LIB1ASMSRC = i386/cygwin.asm
-LIB1ASMFUNCS = _chkstk
-
-# cygwin and mingw always have a limits.h, but, depending upon how we are
-# doing the build, it may not be installed yet.
-LIMITS_H_TEST = true
-
-# If we are building next to winsup, this will let us find the real
-# limits.h when building libgcc2.  Otherwise, winsup must be installed
-# first.
-LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/w32api/include
-
-winnt.o: $(srcdir)/config/i386/winnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
-  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
-  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-	$(srcdir)/config/i386/winnt.c
-
-winnt-cxx.o: $(srcdir)/config/i386/winnt-cxx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
-  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
-  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-	$(srcdir)/config/i386/winnt-cxx.c
-
-
-winnt-stubs.o: $(srcdir)/config/i386/winnt-stubs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
-  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
-  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-	$(srcdir)/config/i386/winnt-stubs.c
-
- # APPLE LOCAL begin mainline 2005-10-12
-winnt-cxx.o: $(srcdir)/config/i386/winnt-cxx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
-  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
-  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-	$(srcdir)/config/i386/winnt-cxx.c
-
-
-winnt-stubs.o: $(srcdir)/config/i386/winnt-stubs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
-  $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
-  $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
-	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-	$(srcdir)/config/i386/winnt-stubs.c
- # APPLE LOCAL end mainline 2005-10-12
-
-STMP_FIXINC=stmp-fixinc

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/t-mingw32
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/t-mingw32?rev=41537&r1=41536&r2=41537&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/t-mingw32 (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/t-mingw32 Tue Aug 28 07:24:17 2007
@@ -1,7 +1,3 @@
 # Match SYSTEM_INCLUDE_DIR
 NATIVE_SYSTEM_HEADER_DIR = /mingw/include
 
- # APPLE LOCAL begin mainline 2005-08-02
-# Match SYSTEM_INCLUDE_DIR
-NATIVE_SYSTEM_HEADER_DIR = /mingw/include
- # APPLE LOCAL end mainline 2005-08-02

Modified: llvm-gcc-4.2/trunk/gcc/config/i386/winnt.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/i386/winnt.c?rev=41537&r1=41536&r2=41537&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/i386/winnt.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/i386/winnt.c Tue Aug 28 07:24:17 2007
@@ -48,8 +48,6 @@
 
 static tree associated_type (tree);
 static tree gen_stdcall_or_fastcall_suffix (tree, bool);
-static bool i386_pe_dllexport_p (tree);
-static bool i386_pe_dllimport_p (tree);
 static void i386_pe_mark_dllexport (tree);
 static void i386_pe_mark_dllimport (tree);
 
@@ -115,7 +113,7 @@
 
 /* Return true if DECL is a dllexport'd object.  */
 
-static bool
+bool
 i386_pe_dllexport_p (tree decl)
 {
   if (TREE_CODE (decl) != VAR_DECL
@@ -134,7 +132,7 @@
   return false;
 }
 
-static bool
+bool
 i386_pe_dllimport_p (tree decl)
 {
   if (TREE_CODE (decl) != VAR_DECL
@@ -734,764 +732,3 @@
 }
 
 #include "gt-winnt.h"
-/* Subroutines for insn-output.c for Windows NT.
-   Contributed by Douglas Rupp (drupp at cs.washington.edu)
-   Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006  Free Software Foundation, Inc.
-
-This file is part of GCC.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "rtl.h"
-#include "regs.h"
-#include "hard-reg-set.h"
-#include "output.h"
-#include "tree.h"
-#include "flags.h"
-#include "tm_p.h"
-#include "toplev.h"
-#include "hashtab.h"
-#include "ggc.h"
-
-/* i386/PE specific attribute support.
-
-   i386/PE has two new attributes:
-   dllexport - for exporting a function/variable that will live in a dll
-   dllimport - for importing a function/variable from a dll
-
-   Microsoft allows multiple declspecs in one __declspec, separating
-   them with spaces.  We do NOT support this.  Instead, use __declspec
-   multiple times.
-*/
-
-static tree associated_type (tree);
-static tree gen_stdcall_or_fastcall_suffix (tree, bool);
-static bool i386_pe_dllexport_p (tree);
-static bool i386_pe_dllimport_p (tree);
-static void i386_pe_mark_dllexport (tree);
-static void i386_pe_mark_dllimport (tree);
-
-/* This is we how mark internal identifiers with dllimport or dllexport
-   attributes.  */
-#ifndef DLL_IMPORT_PREFIX
-#define DLL_IMPORT_PREFIX "#i."
-#endif
-#ifndef DLL_EXPORT_PREFIX
-#define DLL_EXPORT_PREFIX "#e."
-#endif
-
-/* Handle a "shared" attribute;
-   arguments as in struct attribute_spec.handler.  */
-tree
-ix86_handle_shared_attribute (tree *node, tree name,
-			      tree args ATTRIBUTE_UNUSED,
-			      int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
-{
-  if (TREE_CODE (*node) != VAR_DECL)
-    {
-      warning (OPT_Wattributes, "%qs attribute only applies to variables",
-	       IDENTIFIER_POINTER (name));
-      *no_add_attrs = true;
-    }
-
-  return NULL_TREE;
-}
-
-/* Handle a "selectany" attribute;
-   arguments as in struct attribute_spec.handler.  */
-tree
-ix86_handle_selectany_attribute (tree *node, tree name,
-			         tree args ATTRIBUTE_UNUSED,
-			         int flags ATTRIBUTE_UNUSED,
-				 bool *no_add_attrs)
-{
-  /* The attribute applies only to objects that are initialized and have
-     external linkage.  However, we may not know about initialization
-     until the language frontend has processed the decl. We'll check for
-     initialization later in encode_section_info.  */	
-  if (TREE_CODE (*node) != VAR_DECL || !TREE_PUBLIC (*node))
-    {	
-      error ("%qs attribute applies only to initialized variables"
-       	     " with external linkage",  IDENTIFIER_POINTER (name));
-      *no_add_attrs = true;
-    }
-
-  return NULL_TREE;
-}
-
-
-/* Return the type that we should use to determine if DECL is
-   imported or exported.  */
-
-static tree
-associated_type (tree decl)
-{
-  return  (DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)))
-            ?  DECL_CONTEXT (decl) : NULL_TREE;
-}
-
-
-/* Return true if DECL is a dllexport'd object.  */
-
-static bool
-i386_pe_dllexport_p (tree decl)
-{
-  if (TREE_CODE (decl) != VAR_DECL
-       && TREE_CODE (decl) != FUNCTION_DECL)
-    return false;
-
-  if (lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
-    return true;
-
-  /* Also mark class members of exported classes with dllexport.  */
-  if (associated_type (decl)
-      && lookup_attribute ("dllexport",
-			    TYPE_ATTRIBUTES (associated_type (decl))))
-    return i386_pe_type_dllexport_p (decl);
-
-  return false;
-}
-
-static bool
-i386_pe_dllimport_p (tree decl)
-{
-  if (TREE_CODE (decl) != VAR_DECL
-       && TREE_CODE (decl) != FUNCTION_DECL)
-    return false;
-
-  /* Lookup the attribute in addition to checking the DECL_DLLIMPORT_P flag.
-     We may need to override an earlier decision.  */
-  if (DECL_DLLIMPORT_P (decl)
-      && lookup_attribute ("dllimport", DECL_ATTRIBUTES (decl)))
-    {
-       /* Make a final check to see if this is a definition before we generate
-          RTL for an indirect reference.  */   
-       if (!DECL_EXTERNAL (decl))
-	{
-	  error ("%q+D: definition is marked as dllimport", decl);
-	  DECL_DLLIMPORT_P (decl) = 0;
-          return false;
-        }
-      return true;
-    }
-  /* The DECL_DLLIMPORT_P flag was set for decls in the class definition
-     by  targetm.cxx.adjust_class_at_definition.  Check again to emit
-     warnings if the class attribute has been overridden by an
-     out-of-class definition.  */
-  else if (associated_type (decl)
-           && lookup_attribute ("dllimport",
-				TYPE_ATTRIBUTES (associated_type (decl))))
-    return i386_pe_type_dllimport_p (decl);
-
-  return false;
-}
-
-/* Handle the -mno-fun-dllimport target switch.  */
-bool
-i386_pe_valid_dllimport_attribute_p (tree decl)
-{
-   if (TARGET_NOP_FUN_DLLIMPORT && TREE_CODE (decl) == FUNCTION_DECL)
-     return false;
-   return true;
-}
-
-/* Return nonzero if SYMBOL is marked as being dllexport'd.  */
-
-int
-i386_pe_dllexport_name_p (const char *symbol)
-{
-  return (strncmp (DLL_EXPORT_PREFIX, symbol,
-		   strlen (DLL_EXPORT_PREFIX)) == 0);
-}
-
-/* Return nonzero if SYMBOL is marked as being dllimport'd.  */
-
-int
-i386_pe_dllimport_name_p (const char *symbol)
-{
-  return (strncmp (DLL_IMPORT_PREFIX, symbol,
-		   strlen (DLL_IMPORT_PREFIX)) == 0);
-}
-
-/* Mark a DECL as being dllexport'd.
-   Note that we override the previous setting (e.g.: dllimport).  */
-
-static void
-i386_pe_mark_dllexport (tree decl)
-{
-  const char *oldname;
-  char  *newname;
-  rtx rtlname;
-  rtx symref;
-  tree idp;
-
-  rtlname = XEXP (DECL_RTL (decl), 0);
-  if (GET_CODE (rtlname) == MEM)
-    rtlname = XEXP (rtlname, 0);
-  gcc_assert (GET_CODE (rtlname) == SYMBOL_REF);
-  oldname = XSTR (rtlname, 0);
-  if (i386_pe_dllimport_name_p (oldname))
-    {
-      warning (0, "inconsistent dll linkage for %q+D, dllexport assumed",
-	       decl);
-     /* Remove DLL_IMPORT_PREFIX.  */
-      oldname += strlen (DLL_IMPORT_PREFIX);
-    }
-  else if (i386_pe_dllexport_name_p (oldname))
-    return;  /*  already done  */
-
-  newname = alloca (strlen (DLL_EXPORT_PREFIX) + strlen (oldname) + 1);
-  sprintf (newname, "%s%s", DLL_EXPORT_PREFIX, oldname);
-
-  /* We pass newname through get_identifier to ensure it has a unique
-     address.  RTL processing can sometimes peek inside the symbol ref
-     and compare the string's addresses to see if two symbols are
-     identical.  */
-  idp = get_identifier (newname);
-
-  symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
-  SET_SYMBOL_REF_DECL (symref, decl);
-  XEXP (DECL_RTL (decl), 0) = symref;
-}
-
-/* Mark a DECL as being dllimport'd.  */
-
-static void
-i386_pe_mark_dllimport (tree decl)
-{
-  const char *oldname;
-  char  *newname;
-  tree idp;
-  rtx rtlname, newrtl;
-  rtx symref;
-
-  rtlname = XEXP (DECL_RTL (decl), 0);
-  if (GET_CODE (rtlname) == MEM)
-    rtlname = XEXP (rtlname, 0);
-  gcc_assert (GET_CODE (rtlname) == SYMBOL_REF);
-  oldname = XSTR (rtlname, 0);
-  if (i386_pe_dllexport_name_p (oldname))
-    {
-      error ("%qs declared as both exported to and imported from a DLL",
-             IDENTIFIER_POINTER (DECL_NAME (decl)));
-      return;
-    }
-  else if (i386_pe_dllimport_name_p (oldname))
-    {
-      /* Already done, but do a sanity check to prevent assembler
-	 errors.  */
-      gcc_assert (DECL_EXTERNAL (decl) && TREE_PUBLIC (decl)
-		  && DECL_DLLIMPORT_P (decl));
-      return;
-    }
-
-  newname = alloca (strlen (DLL_IMPORT_PREFIX) + strlen (oldname) + 1);
-  sprintf (newname, "%s%s", DLL_IMPORT_PREFIX, oldname);
-
-  /* We pass newname through get_identifier to ensure it has a unique
-     address.  RTL processing can sometimes peek inside the symbol ref
-     and compare the string's addresses to see if two symbols are
-     identical.  */
-  idp = get_identifier (newname);
-
-  symref = gen_rtx_SYMBOL_REF (Pmode, IDENTIFIER_POINTER (idp));
-  SET_SYMBOL_REF_DECL (symref, decl);
-  newrtl = gen_rtx_MEM (Pmode,symref);
-  XEXP (DECL_RTL (decl), 0) = newrtl;
-
-  DECL_DLLIMPORT_P (decl) = 1;
-}
-
-/* Return string which is the former assembler name modified with a
-   suffix consisting of an atsign (@) followed by the number of bytes of
-   arguments.  If FASTCALL is true, also add the FASTCALL_PREFIX.  */
-
-static tree
-gen_stdcall_or_fastcall_suffix (tree decl, bool fastcall)
-{
-  int total = 0;
-  /* ??? This probably should use XSTR (XEXP (DECL_RTL (decl), 0), 0) instead
-     of DECL_ASSEMBLER_NAME.  */
-   const char *asmname =  IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-  char *newsym;
-  char *p;
-  tree formal_type;
-
-  /* Do not change the identifier if a verbatim asmspec or already done. */
-  if (*asmname == '*' || strchr (asmname, '@'))
-    return DECL_ASSEMBLER_NAME (decl);
-
-  formal_type = TYPE_ARG_TYPES (TREE_TYPE (decl));
-  if (formal_type != NULL_TREE)
-    {
-      /* These attributes are ignored for variadic functions in
-	 i386.c:ix86_return_pops_args. For compatibility with MS
-         compiler do not add @0 suffix here.  */ 
-      if (TREE_VALUE (tree_last (formal_type)) != void_type_node)
-        return DECL_ASSEMBLER_NAME (decl);
-
-      /* Quit if we hit an incomplete type.  Error is reported
-         by convert_arguments in c-typeck.c or cp/typeck.c.  */
-      while (TREE_VALUE (formal_type) != void_type_node
-	     && COMPLETE_TYPE_P (TREE_VALUE (formal_type)))	
-	{
-	  int parm_size
-	    = TREE_INT_CST_LOW (TYPE_SIZE (TREE_VALUE (formal_type)));
-	    /* Must round up to include padding.  This is done the same
-	       way as in store_one_arg.  */
-	  parm_size = ((parm_size + PARM_BOUNDARY - 1)
-		       / PARM_BOUNDARY * PARM_BOUNDARY);
-	  total += parm_size;
-	  formal_type = TREE_CHAIN (formal_type);\
-	}
-     }
-
-  /* Assume max of 8 base 10 digits in the suffix.  */
-  newsym = alloca (1 + strlen (asmname) + 1 + 8 + 1);
-  p = newsym;
-  if (fastcall)
-    *p++ = FASTCALL_PREFIX;
-  sprintf (p, "%s@%d", asmname, total/BITS_PER_UNIT);
-  return get_identifier (newsym);
-}
-
-void
-i386_pe_encode_section_info (tree decl, rtx rtl, int first)
-{
-  default_encode_section_info (decl, rtl, first);
-
-  if (first && TREE_CODE (decl) == FUNCTION_DECL)
-    {
-      tree type_attributes = TYPE_ATTRIBUTES (TREE_TYPE (decl));
-      tree newid = NULL_TREE;
-
-      if (lookup_attribute ("stdcall", type_attributes))
-	newid = gen_stdcall_or_fastcall_suffix (decl, false);
-      else if (lookup_attribute ("fastcall", type_attributes))
-	newid = gen_stdcall_or_fastcall_suffix (decl, true);
-      if (newid != NULL_TREE) 	
-	{
-	  rtx rtlname = XEXP (rtl, 0);
-	  if (GET_CODE (rtlname) == MEM)
-	    rtlname = XEXP (rtlname, 0);
-	  XSTR (rtlname, 0) = IDENTIFIER_POINTER (newid);
-	  /* These attributes must be present on first declaration,
-	     change_decl_assembler_name will warn if they are added
-	     later and the decl has been referenced, but duplicate_decls
-	     should catch the mismatch before this is called.  */ 
-	  change_decl_assembler_name (decl, newid);
-	}
-    }
-
-  else if (TREE_CODE (decl) == VAR_DECL
-           && lookup_attribute ("selectany", DECL_ATTRIBUTES (decl)))
-    {
-      if (DECL_INITIAL (decl)
- 	  /* If an object is initialized with a ctor, the static
-	     initialization and destruction code for it is present in
-	     each unit defining the object.  The code that calls the
-	     ctor is protected by a link-once guard variable, so that
-	     the object still has link-once semantics,  */
-    	   || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
-	make_decl_one_only (decl);
-      else
-	error ("%q+D:'selectany' attribute applies only to initialized objects",
-	       decl);
-    }
-
-  /* Mark the decl so we can tell from the rtl whether the object is
-     dllexport'd or dllimport'd.  tree.c: merge_dllimport_decl_attributes
-     handles dllexport/dllimport override semantics.  */
-
-  if (i386_pe_dllexport_p (decl))
-    i386_pe_mark_dllexport (decl);
-  else if (i386_pe_dllimport_p (decl))
-    i386_pe_mark_dllimport (decl);
-  /* It might be that DECL has been declared as dllimport, but a
-     subsequent definition nullified that.  Assert that
-     tree.c: merge_dllimport_decl_attributes has removed the attribute
-     before the RTL name was marked with the DLL_IMPORT_PREFIX.  */
-  else
-    gcc_assert (!((TREE_CODE (decl) == FUNCTION_DECL
-	    	   || TREE_CODE (decl) == VAR_DECL)
-		  && rtl != NULL_RTX
-		  && GET_CODE (rtl) == MEM
-		  && GET_CODE (XEXP (rtl, 0)) == MEM
-		  && GET_CODE (XEXP (XEXP (rtl, 0), 0)) == SYMBOL_REF
-		  && i386_pe_dllimport_name_p (XSTR (XEXP (XEXP (rtl, 0), 0), 0))));
-}
-
-/* Strip only the leading encoding, leaving the stdcall suffix and fastcall
-   prefix if it exists.  */
-
-const char *
-i386_pe_strip_name_encoding (const char *str)
-{
-  if (strncmp (str, DLL_IMPORT_PREFIX, strlen (DLL_IMPORT_PREFIX))
-      == 0)
-    str += strlen (DLL_IMPORT_PREFIX);
-  else if (strncmp (str, DLL_EXPORT_PREFIX, strlen (DLL_EXPORT_PREFIX))
-	   == 0)
-    str += strlen (DLL_EXPORT_PREFIX);
-  if (*str == '*')
-    str += 1;
-  return str;
-}
-
-/* Also strip the fastcall prefix and stdcall suffix.  */
-
-const char *
-i386_pe_strip_name_encoding_full (const char *str)
-{
-  const char *p;
-  const char *name = i386_pe_strip_name_encoding (str);
-
-  /* Strip leading '@' on fastcall symbols.  */
-  if (*name == '@')
-    name++;
-
-  /* Strip trailing "@n".  */
-  p = strchr (name, '@');
-  if (p)
-    return ggc_alloc_string (name, p - name);
-
-  return name;
-}
-
-/* Output a reference to a label. Fastcall symbols are prefixed with @,
-   whereas symbols for functions using other calling conventions don't
-   have a prefix (unless they are marked dllimport or dllexport).  */
-
-void i386_pe_output_labelref (FILE *stream, const char *name)
-{
-  if (strncmp (name, DLL_IMPORT_PREFIX, strlen (DLL_IMPORT_PREFIX))
-      == 0)
-    /* A dll import */
-    {
-      if (name[strlen (DLL_IMPORT_PREFIX)] == FASTCALL_PREFIX)
-      /* A dllimport fastcall symbol.  */
-        {
-          fprintf (stream, "__imp_%s",
-                   i386_pe_strip_name_encoding (name));
-        }
-      else
-      /* A dllimport non-fastcall symbol.  */
-        {
-          fprintf (stream, "__imp__%s",
-                   i386_pe_strip_name_encoding (name));
-        }
-    }
-  else if ((name[0] == FASTCALL_PREFIX)
-           || (strncmp (name, DLL_EXPORT_PREFIX, strlen (DLL_EXPORT_PREFIX))
-	       == 0
-	       && name[strlen (DLL_EXPORT_PREFIX)] == FASTCALL_PREFIX))
-    /* A fastcall symbol.  */
-    {
-      fprintf (stream, "%s",
-               i386_pe_strip_name_encoding (name));
-    }
-  else
-    /* Everything else.  */
-    {
-      fprintf (stream, "%s%s", USER_LABEL_PREFIX,
-               i386_pe_strip_name_encoding (name));
-    }
-}
-
-void
-i386_pe_unique_section (tree decl, int reloc)
-{
-  int len;
-  const char *name, *prefix;
-  char *string;
-
-  name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
-  name = i386_pe_strip_name_encoding_full (name);
-
-  /* The object is put in, for example, section .text$foo.
-     The linker will then ultimately place them in .text
-     (everything from the $ on is stripped). Don't put
-     read-only data in .rdata section to avoid a PE linker
-     bug when .rdata$* grouped sections are used in code
-     without a .rdata section.  */
-  if (TREE_CODE (decl) == FUNCTION_DECL)
-    prefix = ".text$";
-  else if (decl_readonly_section (decl, reloc))
-    prefix = ".rdata$";
-  else
-    prefix = ".data$";
-  len = strlen (name) + strlen (prefix);
-  string = alloca (len + 1);
-  sprintf (string, "%s%s", prefix, name);
-
-  DECL_SECTION_NAME (decl) = build_string (len, string);
-}
-
-/* Select a set of attributes for section NAME based on the properties
-   of DECL and whether or not RELOC indicates that DECL's initializer
-   might contain runtime relocations.
-
-   We make the section read-only and executable for a function decl,
-   read-only for a const data decl, and writable for a non-const data decl.
-
-   If the section has already been defined, to not allow it to have
-   different attributes, as (1) this is ambiguous since we're not seeing
-   all the declarations up front and (2) some assemblers (e.g. SVR4)
-   do not recognize section redefinitions.  */
-/* ??? This differs from the "standard" PE implementation in that we
-   handle the SHARED variable attribute.  Should this be done for all
-   PE targets?  */
-
-#define SECTION_PE_SHARED	SECTION_MACH_DEP
-
-unsigned int
-i386_pe_section_type_flags (tree decl, const char *name, int reloc)
-{
-  static htab_t htab;
-  unsigned int flags;
-  unsigned int **slot;
-
-  /* The names we put in the hashtable will always be the unique
-     versions given to us by the stringtable, so we can just use
-     their addresses as the keys.  */
-  if (!htab)
-    htab = htab_create (31, htab_hash_pointer, htab_eq_pointer, NULL);
-
-  if (decl && TREE_CODE (decl) == FUNCTION_DECL)
-    flags = SECTION_CODE;
-  else if (decl && decl_readonly_section (decl, reloc))
-    flags = 0;
-  else
-    {
-      flags = SECTION_WRITE;
-
-      if (decl && TREE_CODE (decl) == VAR_DECL
-	  && lookup_attribute ("shared", DECL_ATTRIBUTES (decl)))
-	flags |= SECTION_PE_SHARED;
-    }
-
-  if (decl && DECL_ONE_ONLY (decl))
-    flags |= SECTION_LINKONCE;
-
-  /* See if we already have an entry for this section.  */
-  slot = (unsigned int **) htab_find_slot (htab, name, INSERT);
-  if (!*slot)
-    {
-      *slot = (unsigned int *) xmalloc (sizeof (unsigned int));
-      **slot = flags;
-    }
-  else
-    {
-      if (decl && **slot != flags)
-	error ("%q+D causes a section type conflict", decl);
-    }
-
-  return flags;
-}
-
-void
-i386_pe_asm_named_section (const char *name, unsigned int flags, 
-			   tree decl)
-{
-  char flagchars[8], *f = flagchars;
-
-  if ((flags & (SECTION_CODE | SECTION_WRITE)) == 0)
-    /* readonly data */
-    {
-      *f++ ='d';  /* This is necessary for older versions of gas.  */
-      *f++ ='r';
-    }
-  else	
-    {
-      if (flags & SECTION_CODE)
-        *f++ = 'x';
-      if (flags & SECTION_WRITE)
-        *f++ = 'w';
-      if (flags & SECTION_PE_SHARED)
-        *f++ = 's';
-    }
-
-  *f = '\0';
-
-  fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars);
-
-  if (flags & SECTION_LINKONCE)
-    {
-      /* Functions may have been compiled at various levels of
-	 optimization so we can't use `same_size' here.
-	 Instead, have the linker pick one, without warning.
-	 If 'selectany' attribute has been specified,  MS compiler
-	 sets 'discard' characteristic, rather than telling linker
-	 to warn of size or content mismatch, so do the same.  */ 
-      bool discard = (flags & SECTION_CODE)
-		      || lookup_attribute ("selectany",
-					   DECL_ATTRIBUTES (decl));	 
-      fprintf (asm_out_file, "\t.linkonce %s\n",
-	       (discard  ? "discard" : "same_size"));
-    }
-}
- /* APPLE LOCAL begin mainline 2005-04-01 */
-
-/* Handle a "selectany" attribute;
-   arguments as in struct attribute_spec.handler.  */
-tree
-ix86_handle_selectany_attribute (tree *node, tree name,
-			         tree args ATTRIBUTE_UNUSED,
-			         int flags ATTRIBUTE_UNUSED,
-				 bool *no_add_attrs)
-{
-  /* The attribute applies only to objects that are initialized and have
-     external linkage.  However, we may not know about initialization
-     until the language frontend has processed the decl. We'll check for
-     initialization later in encode_section_info.  */	
-  if (TREE_CODE (*node) != VAR_DECL || !TREE_PUBLIC (*node))
-    {	
-      error ("%qs attribute applies only to initialized variables"
-       	     " with external linkage",  IDENTIFIER_POINTER (name));
-      *no_add_attrs = true;
-    }
-
-  return NULL_TREE;
-}
-
- /* APPLE LOCAL end mainline 2005-04-01 */
-
-/* The Microsoft linker requires that every function be marked as
-   DT_FCN.  When using gas on cygwin, we must emit appropriate .type
-   directives.  */
-
-#include "gsyms.h"
-
-/* Mark a function appropriately.  This should only be called for
-   functions for which we are not emitting COFF debugging information.
-   FILE is the assembler output file, NAME is the name of the
-   function, and PUBLIC is nonzero if the function is globally
-   visible.  */
-
-void
-i386_pe_declare_function_type (FILE *file, const char *name, int public)
-{
-  fprintf (file, "\t.def\t");
-  assemble_name (file, name);
-  fprintf (file, ";\t.scl\t%d;\t.type\t%d;\t.endef\n",
-	   public ? (int) C_EXT : (int) C_STAT,
-	   (int) DT_FCN << N_BTSHFT);
-}
-
-/* Keep a list of external functions.  */
-
-struct extern_list GTY(())
-{
-  struct extern_list *next;
-  tree decl;
-  const char *name;
-};
-
-static GTY(()) struct extern_list *extern_head;
-
-/* Assemble an external function reference.  We need to keep a list of
-   these, so that we can output the function types at the end of the
-   assembly.  We can't output the types now, because we might see a
-   definition of the function later on and emit debugging information
-   for it then.  */
-
-void
-i386_pe_record_external_function (tree decl, const char *name)
-{
-  struct extern_list *p;
-
-  p = (struct extern_list *) ggc_alloc (sizeof *p);
-  p->next = extern_head;
-  p->decl = decl;
-  p->name = name;
-  extern_head = p;
-}
-
-/* Keep a list of exported symbols.  */
-
-struct export_list GTY(())
-{
-  struct export_list *next;
-  const char *name;
-  int is_data;		/* used to type tag exported symbols.  */
-};
-
-static GTY(()) struct export_list *export_head;
-
-/* Assemble an export symbol entry.  We need to keep a list of
-   these, so that we can output the export list at the end of the
-   assembly.  We used to output these export symbols in each function,
-   but that causes problems with GNU ld when the sections are
-   linkonce.  */
-
-void
-i386_pe_record_exported_symbol (const char *name, int is_data)
-{
-  struct export_list *p;
-
-  p = (struct export_list *) ggc_alloc (sizeof *p);
-  p->next = export_head;
-  p->name = name;
-  p->is_data = is_data;
-  export_head = p;
-}
-
-/* This is called at the end of assembly.  For each external function
-   which has not been defined, we output a declaration now.  We also
-   output the .drectve section.  */
-
-void
-i386_pe_file_end (void)
-{
-  struct extern_list *p;
-
-  ix86_file_end ();
-
-  for (p = extern_head; p != NULL; p = p->next)
-    {
-      tree decl;
-
-      decl = p->decl;
-
-      /* Positively ensure only one declaration for any given symbol.  */
-      if (! TREE_ASM_WRITTEN (decl)
-	  && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
-	{
-	  TREE_ASM_WRITTEN (decl) = 1;
-	  i386_pe_declare_function_type (asm_out_file, p->name,
-					 TREE_PUBLIC (decl));
-	}
-    }
-
-  if (export_head)
-    {
-      struct export_list *q;
-      drectve_section ();
-      for (q = export_head; q != NULL; q = q->next)
-        {
-          fprintf (asm_out_file, "\t.ascii \" -export:%s%s\"\n",
-                   i386_pe_strip_name_encoding (q->name),
-                   (q->is_data) ? ",data" : "");
-        }
-    }
-}
-
-#include "gt-winnt.h"





More information about the llvm-commits mailing list