aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2005-04-13 15:24:03 +0000
committerJulian Brown <jules@gcc.gnu.org>2005-04-13 15:24:03 +0000
commite22a7bcf2604c5e0b29200530eaa090e787a249b (patch)
treeeabd03b4a938ee28ef19ab97a08894ee5170b75d /gcc
parent2c43a1491ea2aa3d42c4b90f67dd3c1aa2a3f490 (diff)
downloadgcc-e22a7bcf2604c5e0b29200530eaa090e787a249b.zip
gcc-e22a7bcf2604c5e0b29200530eaa090e787a249b.tar.gz
gcc-e22a7bcf2604c5e0b29200530eaa090e787a249b.tar.bz2
elfos.h (MAKE_DECL_ONE_ONLY): Redefined to stop DECL_WEAK from being used for symbols with vague linkage when...
* gcc/config/elfos.h (MAKE_DECL_ONE_ONLY): Redefined to stop DECL_WEAK from being used for symbols with vague linkage when HAVE_GAS_COMDAT_GROUP is true. * gcc/java/decl.c (finish_method): Give methods once-only linkage. From-SVN: r98089
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/elfos.h10
-rw-r--r--gcc/java/ChangeLog4
-rw-r--r--gcc/java/decl.c7
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4da851e..1a5f5f8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-04-13 Julian Brown <julian@codesourcery.com>
+
+ * config/elfos.h (MAKE_DECL_ONE_ONLY): Redefined to stop DECL_WEAK from
+ being used for symbols with vague linkage when HAVE_GAS_COMDAT_GROUP
+ is true.
+
2005-04-13 Kazu Hirata <kazu@cs.umass.edu>
* basic-block.h, tree-ssa-uncprop.c, varasm.c,
diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h
index 9eed0d1..6e41bb2 100644
--- a/gcc/config/elfos.h
+++ b/gcc/config/elfos.h
@@ -212,7 +212,15 @@ Boston, MA 02111-1307, USA. */
fprintf ((FILE), "%s\n", ASM_SECTION_START_OP)
#endif
-#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+/* Don't use weak for entities with vague linkage when HAVE_GAS_COMDAT_GROUP
+ is true. */
+#define MAKE_DECL_ONE_ONLY(DECL) \
+ do \
+ { \
+ if (!HAVE_GAS_COMDAT_GROUP) \
+ DECL_WEAK(DECL) = 1; \
+ } \
+ while (0)
/* Switch into a generic section. */
#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 1044784..a0d1037 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,7 @@
+2005-04-13 Julian Brown <julian@codesourcery.com>
+
+ * decl.c (finish_method): Give methods once-only linkage.
+
2005-04-11 Richard Sandiford <rsandifo@redhat.com>
* lang.opt: Refer to the GCC internals documentation instead of c.opt.
diff --git a/gcc/java/decl.c b/gcc/java/decl.c
index 197c391..168d30d 100644
--- a/gcc/java/decl.c
+++ b/gcc/java/decl.c
@@ -2057,6 +2057,13 @@ finish_method (tree fndecl)
build2 (TRY_FINALLY_EXPR, void_type_node, *tp, exit));
}
+ /* Ensure non-abstract non-static non-private members are defined only once
+ when linking. This is an issue when using CNI to interface with C++ object
+ files. */
+ if (! METHOD_STATIC (fndecl) && ! METHOD_PRIVATE (fndecl)
+ && ! METHOD_ABSTRACT (fndecl) && ! METHOD_FINAL (fndecl))
+ make_decl_one_only (fndecl);
+
/* Prepend class initialization for static methods reachable from
other classes. */
if (METHOD_STATIC (fndecl)