This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[java] fix some alpha/ia64 compile failures


Any symbol that is not defined in the current object file must be
marked DECL_EXTERNAL.  This fixes around 60 failures of the form

  ld: gp-relative relocation against dynamic symbol _Jv_intClass

Committed as obvious; these symbols are defined in C++ in libjava.

There is one more similar failure (PR375) where the target of the
relocation is instead java::lang::Boolean::TRUE, but I have no
idea how to fix it.  The DECL is created in add_field, and the
correct solution would appear to be to test

  is_compiled_class (class) != 2

except that read_class always sets current_class to the class
being loaded, so is_compiled_class always equals 2 at this point.

Ideas?


r~


        * class.c (build_class_ref): Mark _Jv_fooClass DECL_EXTERNAL.

Index: class.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/class.c,v
retrieving revision 1.121
diff -c -p -d -r1.121 class.c
*** class.c	2001/12/16 16:23:49	1.121
--- class.c	2001/12/21 19:22:16
*************** build_class_ref (type)
*** 1089,1094 ****
--- 1092,1098 ----
  	      decl = build_decl (VAR_DECL, decl_name, class_type_node);
  	      TREE_STATIC (decl) = 1;
  	      TREE_PUBLIC (decl) = 1;
+ 	      DECL_EXTERNAL (decl) = 1;
  	      make_decl_rtl (decl, NULL);
  	      pushdecl_top_level (decl);
  	      if (is_compiled == 1)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]