diff options
author | Geoffrey Keating <geoffk@apple.com> | 2004-10-27 23:02:39 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2004-10-27 23:02:39 +0000 |
commit | 005c1a13e5649b1c7a213c8d76f8e0e20d25a891 (patch) | |
tree | cfb4cd621b8390f148fe008b597f52830668a28b /gcc | |
parent | 9a3137c336cf8e3f34d86a36a8eb76043abec00b (diff) | |
download | gcc-005c1a13e5649b1c7a213c8d76f8e0e20d25a891.zip gcc-005c1a13e5649b1c7a213c8d76f8e0e20d25a891.tar.gz gcc-005c1a13e5649b1c7a213c8d76f8e0e20d25a891.tar.bz2 |
Index: fixincludes/ChangeLog
2004-10-27 Geoffrey Keating <geoffk@apple.com>
* inclhack.def (darwin_gcc4_breakage): New.
* fixincl.x: Regenerate.
Index: gcc/ChangeLog
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.
Index: gcc/testsuite/ChangeLog
2004-10-27 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/darwin-weakimport-1.c: New.
From-SVN: r89716
Diffstat (limited to 'gcc')
-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 |
7 files changed, 65 insertions, 3 deletions
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" } */ |