diff options
author | Matt Austern <austern@apple.com> | 2003-11-10 23:07:09 +0000 |
---|---|---|
committer | Matt Austern <austern@gcc.gnu.org> | 2003-11-10 23:07:09 +0000 |
commit | 6ce4806bb6f12a457ab34e72f0b838610faeb4a3 (patch) | |
tree | fa8c5589023376eb75a70c99f8eb770481c2c97d /gcc | |
parent | 87a9cbf9ae6557bd9946fd6384e040c589def3b2 (diff) | |
download | gcc-6ce4806bb6f12a457ab34e72f0b838610faeb4a3.zip gcc-6ce4806bb6f12a457ab34e72f0b838610faeb4a3.tar.gz gcc-6ce4806bb6f12a457ab34e72f0b838610faeb4a3.tar.bz2 |
darwin-protos.h (darwin_assemble_visibility): Declare.
* config/darwin-protos.h (darwin_assemble_visibility): Declare.
* config/darwin.c (darwin_assemble_visibility): Define. Warn for
anything other than VISIBILITY_DEFAULT and VISIBILITY_HIDDEN.
* config/darwin.h (TARGET_ASM_ASSEMBLE_VISIBILITY): Use
darwin_assemble_visibility instead of default.
From-SVN: r73430
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/darwin-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/darwin.c | 24 | ||||
-rw-r--r-- | gcc/config/darwin.h | 7 |
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 268e61f..d9e2c0a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2003-11-10 Matt Austern <austern@apple.com> + + * config/darwin-protos.h (darwin_assemble_visibility): Declare. + * config/darwin.c (darwin_assemble_visibility): Define. Warn for + anything other than VISIBILITY_DEFAULT and VISIBILITY_HIDDEN. + * config/darwin.h (TARGET_ASM_ASSEMBLE_VISIBILITY): Use + darwin_assemble_visibility instead of default. + 2003-11-10 Waldek Hebisch <hebisch@math.uni.wroc.pl> PR target/12865 diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h index 69b0b6f..41bad64 100644 --- a/gcc/config/darwin-protos.h +++ b/gcc/config/darwin-protos.h @@ -118,5 +118,6 @@ extern void machopic_output_stub (FILE *, const char *, const char *); extern void darwin_exception_section (void); extern void darwin_eh_frame_section (void); extern void darwin_globalize_label (FILE *, const char *); +extern void darwin_assemble_visibility (tree, int); extern void darwin_asm_output_dwarf_delta (FILE *, int, const char *, const char *); diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index dcb42d5..47ca65d 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -41,6 +41,7 @@ Boston, MA 02111-1307, USA. */ #include "ggc.h" #include "langhooks.h" #include "tm_p.h" +#include "errors.h" static int machopic_data_defined_p (const char *); static void update_non_lazy_ptrs (const char *); @@ -1324,6 +1325,29 @@ darwin_globalize_label (FILE *stream, const char *name) default_globalize_label (stream, name); } +/* Emit an assembler directive to set visibility for a symbol. The + only supported visibilities are VISIBILITY_DEFAULT and + VISIBILITY_HIDDEN; the latter corresponds to Darwin's "private + extern". There is no MACH-O equivalent of ELF's + VISIBILITY_INTERNAL or VISIBILITY_PROTECTED. */ + +void +darwin_assemble_visibility (tree decl, int vis) +{ + if (vis == VISIBILITY_DEFAULT) + ; + else if (vis == VISIBILITY_HIDDEN) + { + fputs ("\t.private_extern ", asm_out_file); + assemble_name (asm_out_file, + (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)))); + fputs ("\n", asm_out_file); + } + else + warning ("internal and protected visibility attributes not supported" + "in this configuration; ignored"); +} + /* Output a difference of two labels that will be an assembly time constant if the two labels are local. (.long lab1-lab2 will be very different if lab1 is at the boundary between two sections; it diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index ae5201a..0099ff2 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -708,6 +708,13 @@ objc_section_init (void) \ #define GLOBAL_ASM_OP ".globl " #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label +/* Emit an assembler directive to set visibility for a symbol. Used + to support visibility attribute and Darwin's private extern + feature. */ +#undef TARGET_ASM_ASSEMBLE_VISIBILITY +#define TARGET_ASM_ASSEMBLE_VISIBILITY darwin_assemble_visibility + + #undef ASM_GENERATE_INTERNAL_LABEL #define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ sprintf (LABEL, "*%s%ld", PREFIX, (long)(NUM)) |