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
This commit is contained in:
Matt Austern 2003-11-10 23:07:09 +00:00 committed by Matt Austern
parent 87a9cbf9ae
commit 6ce4806bb6
4 changed files with 40 additions and 0 deletions

View 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

View 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 *);

View 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

View 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))