From a7cc94aa453a5b092723df12f2d5abe2fb7c9bbd Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 13 Apr 2005 15:24:03 +0000 Subject: [PATCH 1/1] * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98089 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/config/elfos.h | 10 +++++++++- gcc/java/ChangeLog | 4 ++++ gcc/java/decl.c | 7 +++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4da851e1853..1a5f5f85d90 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-04-13 Julian Brown + + * 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 * basic-block.h, tree-ssa-uncprop.c, varasm.c, diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h index 9eed0d13fe3..6e41bb26936 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 1044784186b..a0d1037dd2f 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,7 @@ +2005-04-13 Julian Brown + + * decl.c (finish_method): Give methods once-only linkage. + 2005-04-11 Richard Sandiford * 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 197c391e27c..168d30dba2a 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) -- 2.11.0