diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2010-03-31 09:19:20 +0000 |
---|---|---|
committer | Rainer Orth <ro@gcc.gnu.org> | 2010-03-31 09:19:20 +0000 |
commit | f0c01ffd7723295ca7ca90a7e87351c8fb6f20e2 (patch) | |
tree | 1297185d6c10c8e9f9bb9a7ac745bf4d8d19eb84 | |
parent | 4a2f22ff85f6497078c1f56d2451663894847aa6 (diff) | |
download | gcc-f0c01ffd7723295ca7ca90a7e87351c8fb6f20e2.zip gcc-f0c01ffd7723295ca7ca90a7e87351c8fb6f20e2.tar.gz gcc-f0c01ffd7723295ca7ca90a7e87351c8fb6f20e2.tar.bz2 |
sol2.c: Include output.h.
gcc:
* config/sol2.c: Include output.h.
(solaris_assemble_visibility): New function.
* config/t-sol2 (sol2.o): Add output.h dependency.
* config/sol2-protos.h (solaris_assemble_visibility): Declare.
* config/sol2.h [!USE_GAS] (TARGET_ASM_ASSEMBLE_VISIBILITY):
Redefine.
gcc/testsuite:
* g++.dg/ext/visibility/pragma-override1.C: Allow for .hidden in
assembler output on *-*-solaris2*.
* g++.dg/ext/visibility/pragma-override2.C: Likewise.
From-SVN: r157856
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/sol2-protos.h | 3 | ||||
-rw-r--r-- | gcc/config/sol2.c | 42 | ||||
-rw-r--r-- | gcc/config/sol2.h | 5 | ||||
-rw-r--r-- | gcc/config/t-sol2 | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C | 3 |
8 files changed, 69 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0deb3bd..e1fd302 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/sol2.c: Include output.h. + (solaris_assemble_visibility): New function. + * config/t-sol2 (sol2.o): Add output.h dependency. + * config/sol2-protos.h (solaris_assemble_visibility): Declare. + * config/sol2.h [!USE_GAS] (TARGET_ASM_ASSEMBLE_VISIBILITY): + Redefine. + 2010-03-31 Jakub Jelinek <jakub@redhat.com> PR target/43580 diff --git a/gcc/config/sol2-protos.h b/gcc/config/sol2-protos.h index 45d5bcc..800629a 100644 --- a/gcc/config/sol2-protos.h +++ b/gcc/config/sol2-protos.h @@ -1,6 +1,6 @@ /* Operating system specific prototypes to be used when targeting GCC for any Solaris 2 system. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2007, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -21,3 +21,4 @@ along with GCC; see the file COPYING3. If not see extern void solaris_insert_attributes (tree, tree *); extern void solaris_register_pragmas (void); extern void solaris_output_init_fini (FILE *, tree); +extern void solaris_assemble_visibility (tree, int); diff --git a/gcc/config/sol2.c b/gcc/config/sol2.c index 493816c..3531e79 100644 --- a/gcc/config/sol2.c +++ b/gcc/config/sol2.c @@ -1,5 +1,5 @@ /* General Solaris system support. - Copyright (C) 2004, 2005 , 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 , 2007, 2010 Free Software Foundation, Inc. Contributed by CodeSourcery, LLC. This file is part of GCC. @@ -22,6 +22,7 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tree.h" +#include "output.h" #include "tm.h" #include "rtl.h" #include "tm_p.h" @@ -117,3 +118,42 @@ solaris_output_init_fini (FILE *file, tree decl) } } +/* Emit an assembler directive to set symbol for DECL visibility to + the visibility type VIS, which must not be VISIBILITY_DEFAULT. */ + +void +solaris_assemble_visibility (tree decl, int vis) +{ + /* Sun as uses .symbolic for STV_PROTECTED. STV_INTERNAL is marked as + `currently reserved', but the linker treats it like STV_HIDDEN. Sun + Studio 12.1 cc emits .hidden instead. + + There are 3 Sun extensions GCC doesn't yet know about: STV_EXPORTED, + STV_SINGLETON, and STV_ELIMINATE. + + See Linker and Libraries Guide, Ch. 2, Link-Editor, Defining + Additional Symbols with a mapfile, + http://docs.sun.com/app/docs/doc/819-0690/gdzmc?a=view + and Ch. 7, Object-File Format, Symbol Table Section, + http://docs.sun.com/app/docs/doc/819-0690/chapter6-79797?a=view */ + + static const char * const visibility_types[] = { + NULL, "symbolic", "hidden", "hidden" + }; + + const char *name, *type; + + name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); + type = visibility_types[vis]; + + /* .hidden dates back before Solaris 2.5, but .symbolic was only added in + Solaris 9 12/02. */ +#ifdef HAVE_GAS_HIDDEN + fprintf (asm_out_file, "\t.%s\t", type); + assemble_name (asm_out_file, name); + fprintf (asm_out_file, "\n"); +#else + warning (OPT_Wattributes, "visibility attribute not supported " + "in this configuration; ignored"); +#endif +} diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index a20c3b9..d77c0f8 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -284,6 +284,11 @@ __enable_execute_stack (void *addr) \ } \ while (0) +#ifndef USE_GAS +#undef TARGET_ASM_ASSEMBLE_VISIBILITY +#define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility +#endif + extern GTY(()) tree solaris_pending_aligns; extern GTY(()) tree solaris_pending_inits; extern GTY(()) tree solaris_pending_finis; diff --git a/gcc/config/t-sol2 b/gcc/config/t-sol2 index 28aa865..526ae40 100644 --- a/gcc/config/t-sol2 +++ b/gcc/config/t-sol2 @@ -1,4 +1,4 @@ -# Copyright (C) 2004, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2004, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of GCC. # @@ -25,6 +25,6 @@ sol2-c.o: $(srcdir)/config/sol2-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ # Solaris-specific attributes sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - tree.h $(TM_H) $(TM_P_H) toplev.h $(GGC_H) + tree.h output.h $(TM_H) $(TM_P_H) toplev.h $(GGC_H) $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(srcdir)/config/sol2.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1dcabdf..3e9329a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * g++.dg/ext/visibility/pragma-override1.C: Allow for .hidden in + assembler output on *-*-solaris2*. + * g++.dg/ext/visibility/pragma-override2.C: Likewise. + 2010-03-31 Jakub Jelinek <jakub@redhat.com> PR debug/43557 diff --git a/gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C b/gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C index e292df4..4300d1a 100644 --- a/gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C +++ b/gcc/testsuite/g++.dg/ext/visibility/pragma-override1.C @@ -1,7 +1,8 @@ /* Test that #pragma GCC visibility does not override class member specific settings. */ /* { dg-do compile } */ /* { dg-require-visibility "internal" } */ -/* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" } } */ +/* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" { target { ! *-*-solaris2* } } } } */ +/* { dg-final { scan-assembler "\\.(internal|hidden).*Foo.methodEv" { target *-*-solaris2* } } } */ #pragma GCC visibility push(hidden) class __attribute__ ((visibility ("internal"))) Foo diff --git a/gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C b/gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C index fe6c47f..f566cd2 100644 --- a/gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C +++ b/gcc/testsuite/g++.dg/ext/visibility/pragma-override2.C @@ -1,7 +1,8 @@ /* Test that #pragma GCC visibility does not override class member specific settings. */ /* { dg-do compile } */ /* { dg-require-visibility "internal" } */ -/* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" } } */ +/* { dg-final { scan-assembler "\\.internal.*Foo.methodEv" { target { ! *-*-solaris2* } } } } */ +/* { dg-final { scan-assembler "\\.(internal|hidden).*Foo.methodEv" { target *-*-solaris2* } } } */ #pragma GCC visibility push(hidden) class Foo |