diff options
| -rw-r--r-- | fixincludes/ChangeLog | 5 | ||||
| -rw-r--r-- | fixincludes/fixincl.x | 53 | ||||
| -rw-r--r-- | fixincludes/inclhack.def | 17 | ||||
| -rw-r--r-- | gcc/ChangeLog | 10 | ||||
| -rw-r--r-- | gcc/config/darwin-protos.h | 4 | ||||
| -rw-r--r-- | gcc/config/darwin.c | 23 | ||||
| -rw-r--r-- | gcc/config/darwin.h | 8 | ||||
| -rw-r--r-- | gcc/config/rs6000/rs6000.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.dg/darwin-weakimport-1.c | 16 | 
10 files changed, 135 insertions, 8 deletions
| diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index c50e4d7..defdb65 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,8 @@ +2004-10-27  Geoffrey Keating  <geoffk@apple.com> + +	* inclhack.def (darwin_gcc4_breakage): New. +	* fixincl.x: Regenerate. +  2004-10-27  Aaron W. LaFramboise  <aaronavay62@aaronwl.com>  	PR bootstrap/17832 diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index f6d1300..69098ae 100644 --- a/fixincludes/fixincl.x +++ b/fixincludes/fixincl.x @@ -2,11 +2,11 @@   *    * DO NOT EDIT THIS FILE   (fixincl.x)   *  - * It has been AutoGen-ed  Saturday September 18, 2004 at 10:59:03 AM MDT + * It has been AutoGen-ed  Tuesday October 26, 2004 at 01:55:22 PM PDT   * From the definitions    inclhack.def   * and the template file   fixincl   */ -/* DO NOT CVS-MERGE THIS FILE, EITHER Sat Sep 18 10:59:03 MDT 2004 +/* DO NOT CVS-MERGE THIS FILE, EITHER Tue Oct 26 13:55:22 PDT 2004   *   * You must regenerate it.  Use the ./genfixes script.   * @@ -15,7 +15,7 @@   * certain ANSI-incompatible system header files which are fixed to work   * correctly with ANSI C and placed in a directory that GNU C will search.   * - * This file contains 179 fixup descriptions. + * This file contains 180 fixup descriptions.   *   * See README for more information.   * @@ -1642,6 +1642,43 @@ extern \"C\" {\n\  /* * * * * * * * * * * * * * * * * * * * * * * * * *   * + *  Description of Darwin_Gcc4_Breakage fix + */ +tSCC zDarwin_Gcc4_BreakageName[] = +     "darwin_gcc4_breakage"; + +/* + *  File name selection pattern + */ +tSCC zDarwin_Gcc4_BreakageList[] = +  "|AvailabilityMacros.h|"; +/* + *  Machine/OS name selection pattern + */ +tSCC* apzDarwin_Gcc4_BreakageMachs[] = { +        "*-*-darwin*", +        (const char*)NULL }; + +/* + *  content selection pattern - do fix if pattern found + */ +tSCC zDarwin_Gcc4_BreakageSelect0[] = +       "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)"; + +#define    DARWIN_GCC4_BREAKAGE_TEST_CT  1 +static tTestDesc aDarwin_Gcc4_BreakageTests[] = { +  { TT_EGREP,    zDarwin_Gcc4_BreakageSelect0, (regex_t*)NULL }, }; + +/* + *  Fix Command Arguments for Darwin_Gcc4_Breakage + */ +static const char* apzDarwin_Gcc4_BreakagePatch[] = { +    "format", +    "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))", +    (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + *   *  Description of Darwin_Private_Extern fix   */  tSCC zDarwin_Private_ExternName[] = @@ -7102,9 +7139,9 @@ static const char* apzX11_SprintfPatch[] = {   *   *  List of all fixes   */ -#define REGEX_COUNT          202 +#define REGEX_COUNT          203  #define MACH_LIST_SIZE_LIMIT 261 -#define FIX_COUNT            179 +#define FIX_COUNT            180  /*   *  Enumerate the fixes @@ -7148,6 +7185,7 @@ typedef enum {      CTRL_QUOTES_DEF_FIXIDX,      CTRL_QUOTES_USE_FIXIDX,      CXX_UNREADY_FIXIDX, +    DARWIN_GCC4_BREAKAGE_FIXIDX,      DARWIN_PRIVATE_EXTERN_FIXIDX,      DEC_INTERN_ASM_FIXIDX,      DJGPP_WCHAR_H_FIXIDX, @@ -7482,6 +7520,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {       CXX_UNREADY_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,       aCxx_UnreadyTests,   apzCxx_UnreadyPatch, 0 }, +  {  zDarwin_Gcc4_BreakageName,    zDarwin_Gcc4_BreakageList, +     apzDarwin_Gcc4_BreakageMachs, +     DARWIN_GCC4_BREAKAGE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, +     aDarwin_Gcc4_BreakageTests,   apzDarwin_Gcc4_BreakagePatch, 0 }, +    {  zDarwin_Private_ExternName,    zDarwin_Private_ExternList,       apzDarwin_Private_ExternMachs,       DARWIN_PRIVATE_EXTERN_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 38021c3..00c5ae6 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -978,6 +978,23 @@ fix = {  /* + * AvailabilityMacros.h on Darwin breaks with GCC 4.0, because of + * bad __GNUC__ tests. + */ + +fix = { +  hackname  = darwin_gcc4_breakage; +  mach      = "*-*-darwin*"; +  files     = AvailabilityMacros.h; +  select    = "\\(__GNUC__ >= 3\\) && \\(__GNUC_MINOR__ >= 1\\)"; +  c_fix     = format; +  c_fix_arg = "((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))"; +  test_text = "#if defined(__GNUC__) && (__GNUC__ >= 3) && " +  	      "(__GNUC_MINOR__ >= 1)\n"; +}; + + +/*   *  __private_extern__ doesn't exist in FSF GCC.  Even if it did,   *  why would you ever put it in a system header file?   */ diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6f7587a..8199b2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -8,6 +8,16 @@  2004-10-27  Geoffrey Keating  <geoffk@apple.com> +	* config/rs6000/rs6000.c (rs6000_attribute_table): Add +	SUBTARGET_ATTRIBUTE_TABLE. +	* config/darwin.h (ASM_WEAKEN_DECL): Handle weak_import. +	(SUBTARGET_ATTRIBUTE_TABLE): Define. +	* config/darwin.c (darwin_handle_weak_import_attribute): New. +	(HAVE_DEAD_STRIP): Delete. +	(no_dead_strip): Don't test HAVE_DEAD_STRIP. +	* config/darwin-protos.h (darwin_handle_weak_import_attribute): +	Prototype. +  	* doc/tm.texi (USE_SELECT_SECTION_FOR_FUNCTIONS): Document.  	* config/darwin.h (GTHREAD_USE_WEAK): Define. diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h index 9a915a2..43ea4cd 100644 --- a/gcc/config/darwin-protos.h +++ b/gcc/config/darwin-protos.h @@ -82,6 +82,10 @@ extern void darwin_file_end (void);  extern void darwin_mark_decl_preserved (const char *); +extern tree darwin_handle_weak_import_attribute (tree *node, tree name, +						 tree args, int flags, +						 bool * no_add_attrs); +  /* Expanded by EXTRA_SECTION_FUNCTIONS into varasm.o.  */  extern void text_coal_section (void);  extern void text_unlikely_section (void); diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 0c39fd8..73581f7 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -1209,13 +1209,30 @@ darwin_unique_section (tree decl ATTRIBUTE_UNUSED, int reloc ATTRIBUTE_UNUSED)    /* Darwin does not use unique sections.  */  } -#define HAVE_DEAD_STRIP 0 +/* Handle a "weak_import" attribute; arguments as in +   struct attribute_spec.handler.  */ + +tree +darwin_handle_weak_import_attribute (tree *node, tree name, +				     tree ARG_UNUSED (args), +				     int ARG_UNUSED (flags), +				     bool * no_add_attrs) +{ +  if (TREE_CODE (*node) != FUNCTION_DECL) +    { +      warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); +      *no_add_attrs = true; +    } +  else +    declare_weak (*node); + +  return NULL_TREE; +}  static void  no_dead_strip (FILE *file, const char *lab)  { -  if (HAVE_DEAD_STRIP) -    fprintf (file, ".no_dead_strip %s\n", lab); +  fprintf (file, ".no_dead_strip %s\n", lab);  }  /* Emit a label for an FDE, making it global and/or weak if appropriate.  diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 917f4a9..098caa2 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -385,6 +385,9 @@ extern const char *darwin_fix_and_continue_switch;        targetm.asm_out.globalize_label (FILE, NAME);			\      if (DECL_EXTERNAL (DECL))						\        fputs ("\t.weak_reference ", FILE);				\ +    else if (! lookup_attribute ("weak", DECL_ATTRIBUTES (DECL))	\ +	&& lookup_attribute ("weak_import", DECL_ATTRIBUTES (DECL)))	\ +      break;								\      else if (TREE_PUBLIC (DECL))					\        fputs ("\t.weak_definition ", FILE);				\      else								\ @@ -862,6 +865,11 @@ objc_section_init (void)			\  #undef TARGET_ASM_ASSEMBLE_VISIBILITY  #define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility +/* Extra attributes for Darwin.  */ +#define SUBTARGET_ATTRIBUTE_TABLE					     \ +  /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ \ +  { "weak_import", 0, 0, true, false, false,				     \ +    darwin_handle_weak_import_attribute }  #undef ASM_GENERATE_INTERNAL_LABEL  #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)	\ diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index bfea353..e2f97d7 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -16659,6 +16659,9 @@ const struct attribute_spec rs6000_attribute_table[] =    { "altivec",   1, 1, false, true,  false, rs6000_handle_altivec_attribute },    { "longcall",  0, 0, false, true,  true,  rs6000_handle_longcall_attribute },    { "shortcall", 0, 0, false, true,  true,  rs6000_handle_longcall_attribute }, +#ifdef SUBTARGET_ATTRIBUTE_TABLE +  SUBTARGET_ATTRIBUTE_TABLE, +#endif    { NULL,        0, 0, false, false, false, NULL }  }; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d984cc..647ab55 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-10-27  Geoffrey Keating  <geoffk@apple.com> + +	* gcc.dg/darwin-weakimport-1.c: New. +  2004-10-28  Ben Elliston  <bje@au.ibm.com>  	* gcc.dg/tree-ssa/sra-1.c: Pass --param sra-max-structure-size. diff --git a/gcc/testsuite/gcc.dg/darwin-weakimport-1.c b/gcc/testsuite/gcc.dg/darwin-weakimport-1.c new file mode 100644 index 0000000..c797720 --- /dev/null +++ b/gcc/testsuite/gcc.dg/darwin-weakimport-1.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target *-*-darwin* } } */ +/* { dg-require-weak "" } */ +/* { dg-options "-fno-common" } */ + +/* { dg-final { scan-assembler "weak_reference _a" } } */ +/* { dg-final { scan-assembler-not "weak_\[a-z \t\]*_b" } } */ + +extern void a (void) __attribute__((weak_import)); +extern void b (void) __attribute__((weak_import)); + +void b(void) +{ +  a(); +} + +extern int c __attribute__((weak_import)); /* { dg-warning "ignored" } */ | 
