darwin-protos.h (darwin_assemble_visibility): Declare.
authorMatt Austern <austern@apple.com>
Mon, 10 Nov 2003 23:07:09 +0000 (23:07 +0000)
committerMatt Austern <austern@gcc.gnu.org>
Mon, 10 Nov 2003 23:07:09 +0000 (23:07 +0000)
* 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

gcc/ChangeLog
gcc/config/darwin-protos.h
gcc/config/darwin.c
gcc/config/darwin.h

index 268e61f..d9e2c0a 100644 (file)
@@ -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
index 69b0b6f..41bad64 100644 (file)
@@ -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 *);
index dcb42d5..47ca65d 100644 (file)
@@ -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
index ae5201a..0099ff2 100644 (file)
@@ -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))