re PR libgcj/25187 (dereferencing type-punned pointer warnings while building libgcj)
authorBryce McKinlay <mckinlay@redhat.com>
Thu, 9 Feb 2006 01:35:33 +0000 (01:35 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Thu, 9 Feb 2006 01:35:33 +0000 (01:35 +0000)
2006-02-08  Bryce McKinlay  <mckinlay@redhat.com>

        PR libgcj/25187:
        * gnu/gcj/io/natSimpleSHSStream.cc
        (gnu::gcj::io::SimpleSHSStream::shsFinal): Remove bogus cast.
        * interpret.cc (_Jv_InterpMethod::run): Simplify arguments to
        _Jv_InterpFrame().
        * boehm.cc: #undef some autoconf macros before including gc-config.h.
        (_Jv_MarkObject): Don't mark the class, it is reachable via the vtable.
        (_Jv_MarkArray): Likewise.
        * java/lang/ref/natReference.cc (java::lang::ref::Reference::create):
        Simplify _Jv_GCRegisterDisappearingLink() call.
        * java/lang/Class.h (getComponentType): Use element_type.
        (element_type): New field declaration, as a union with "methods".
        * java/lang/natClassLoader.cc (_Jv_NewArrayClass): Use "element_type".
        * java/net/natVMNetworkInterfacePosix.cc
        (java::net::VMNetworkInterface::getInterfaces): Add "int" cast to
        avoid sign comparison warning.
        * include/java-interp.h (_Jv_InterpFrame): Take thread as second
        argument, not parent call frame.
        * include/x86_64-signal.h (MAKE_THROW_FRAME): Use "gregs" directly,
        without a cast.
        (restore_rt): Declare with hidden visibility, not "static".
        * posix.cc (_Jv_platform_initProperties): Make "tmpdir" a string
        constant.
        * jni.cc (_Jv_JNI_DestroyJavaVM): Use a union to avoid strict alias
        warning

From-SVN: r110783

12 files changed:
libjava/ChangeLog
libjava/boehm.cc
libjava/gnu/gcj/io/natSimpleSHSStream.cc
libjava/include/java-interp.h
libjava/include/x86_64-signal.h
libjava/interpret.cc
libjava/java/lang/Class.h
libjava/java/lang/natClassLoader.cc
libjava/java/lang/ref/natReference.cc
libjava/java/net/natVMNetworkInterfacePosix.cc
libjava/jni.cc
libjava/posix.cc

index 5e93e681fc8021326ffbfa80cbdb4450d00a35df..894add7fa3f870f14dca3a6c95bd6fe57d696dd4 100644 (file)
@@ -1,3 +1,31 @@
+2006-02-08  Bryce McKinlay  <mckinlay@redhat.com>
+
+       PR libgcj/25187:
+       * gnu/gcj/io/natSimpleSHSStream.cc
+       (gnu::gcj::io::SimpleSHSStream::shsFinal): Remove bogus cast.
+       * interpret.cc (_Jv_InterpMethod::run): Simplify arguments to
+       _Jv_InterpFrame(). 
+       * boehm.cc: #undef some autoconf macros before including gc-config.h.
+       (_Jv_MarkObject): Don't mark the class, it is reachable via the vtable.
+       (_Jv_MarkArray): Likewise.
+       * java/lang/ref/natReference.cc (java::lang::ref::Reference::create):
+       Simplify _Jv_GCRegisterDisappearingLink() call.
+       * java/lang/Class.h (getComponentType): Use element_type.
+       (element_type): New field declaration, as a union with "methods".
+       * java/lang/natClassLoader.cc (_Jv_NewArrayClass): Use "element_type".
+       * java/net/natVMNetworkInterfacePosix.cc
+       (java::net::VMNetworkInterface::getInterfaces): Add "int" cast to
+       avoid sign comparison warning.  
+       * include/java-interp.h (_Jv_InterpFrame): Take thread as second
+       argument, not parent call frame.
+       * include/x86_64-signal.h (MAKE_THROW_FRAME): Use "gregs" directly,
+       without a cast.
+       (restore_rt): Declare with hidden visibility, not "static".
+       * posix.cc (_Jv_platform_initProperties): Make "tmpdir" a string
+       constant.
+       * jni.cc (_Jv_JNI_DestroyJavaVM): Use a union to avoid strict alias
+       warning.
+
 2006-02-08  Bryce McKinlay  <mckinlay@redhat.com>
 
        PR libgcj/26113:
index fc75bdb70055f76ea031a6acc94f8d1eaf329f2d..7066e286b4960394f535f34ede81c4650f5460f3 100644 (file)
@@ -26,6 +26,12 @@ details.  */
 #undef TRUE
 #undef FALSE
 
+// We include two autoconf headers. Avoid multiple definition warnings.
+#undef PACKAGE_NAME
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+#undef PACKAGE_VERSION
+
 extern "C"
 {
 #include <gc_config.h>
@@ -93,9 +99,6 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void *env)
     p = (GC_PTR) obj->sync_info;
     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj);
 # endif
-  // Mark the object's class.
-  p = (GC_PTR) klass;
-  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, obj);
 
   if (__builtin_expect (klass == &java::lang::Class::class$, false))
     {
@@ -208,7 +211,6 @@ _Jv_MarkArray (void *addr, void *msp, void *msl, void *env)
   // we may need to round up the size.
   if (__builtin_expect (! dt || !(dt -> get_finalizer()), false))
     return mark_stack_ptr;
-  jclass klass = dt->clas;
   GC_PTR p;
 
   p = (GC_PTR) dt;
@@ -219,9 +221,6 @@ _Jv_MarkArray (void *addr, void *msp, void *msl, void *env)
     p = (GC_PTR) array->sync_info;
     MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, array);
 # endif
-  // Mark the object's class.
-  p = (GC_PTR) klass;
-  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, &(dt -> clas));
 
   for (int i = 0; i < JvGetArrayLength (array); ++i)
     {
index 5e7b84600122623934ef82d8cdef471fe52e6175..0487ce740be6da54d3d5b3d196e8978e2ef99a87 100644 (file)
@@ -29,7 +29,7 @@ gnu::gcj::io::SimpleSHSStream::shsFinal (jbyteArray shs_info)
   ::shsFinal (info);
 
   jbyteArray buffer = JvNewByteArray (SHS_DIGESTSIZE);
-  memcpy (elements (buffer), (jbyte *)&info->digest, SHS_DIGESTSIZE);
+  memcpy (elements (buffer), &info->digest, SHS_DIGESTSIZE);
   return buffer;
 }
     
index 73ab2fe0ae67f697098871d0aa9b373274ca2946..aed642b576d30ec45eb2f510dc6dc9c3e15fdeef 100644 (file)
@@ -22,6 +22,8 @@ details.  */
 #include <java/lang/Class.h>
 #include <java/lang/ClassLoader.h>
 #include <java/lang/reflect/Modifier.h>
+#include <java/lang/Thread.h>
+#include <gnu/gcj/RawData.h>
 
 // Define this to get the direct-threaded interpreter.  If undefined,
 // we revert to a basic bytecode interpreter.  The former is faster
@@ -290,22 +292,22 @@ public:
 struct _Jv_InterpFrame
 {
   _Jv_InterpMethod *self;
-  _Jv_InterpFrame **ptr;
+  java::lang::Thread *thread;
   _Jv_InterpFrame *next;
   pc_t pc;
 
-  _Jv_InterpFrame (_Jv_InterpMethod *s, _Jv_InterpFrame **n)
+  _Jv_InterpFrame (_Jv_InterpMethod *s, java::lang::Thread *thr)
   {
     self = s;
-    ptr = n;
-    next = *n;
-    *n = this;
+    thread = thr;
+    next = (_Jv_InterpFrame *) thr->interp_frame;
+    thr->interp_frame = (gnu::gcj::RawData *) this;
     pc = NULL;
   }
 
   ~_Jv_InterpFrame ()
   {
-    *ptr = next;
+    thread->interp_frame = (gnu::gcj::RawData *) next;
   }
 };
 
index 1e769f484b62dc6dabe0ada677f746f748faa345..f6df7d71732e86620d6170a8c4a8c392d670f940 100644 (file)
@@ -41,8 +41,7 @@ do                                                                         \
      instruction:  the x86_64 exception handler expects                             \
      the PC to point to the instruction after a call. */                    \
   struct ucontext *_uc = (struct ucontext *)_p;                                     \
-  volatile struct sigcontext *_sc = (struct sigcontext *) &_uc->uc_mcontext; \
-  _sc->rip += 2;                                                            \
+  _uc->uc_mcontext.gregs[REG_RIP] += 2;                                             \
 }                                                                           \
 while (0)
 
@@ -60,7 +59,8 @@ asm                                           \
 
 /* The return code for realtime-signals.  */
 RESTORE (restore_rt, __NR_rt_sigreturn)
-static void restore_rt (void) asm ("__restore_rt");
+void restore_rt (void) asm ("__restore_rt")
+  __attribute__ ((visibility ("hidden")));
 
 #define INIT_SEGV                                              \
 do                                                             \
index 4e5e5df7028298881aebc2bf08eb47528a66dfdd..ddb469788f0c116051c9064c34bbce409dec8121 100644 (file)
@@ -807,8 +807,7 @@ _Jv_InterpMethod::run (void *retp, ffi_raw *args, _Jv_InterpMethod *meth)
   // destructor so it cleans up automatically when the interpreter
   // returns.
   java::lang::Thread *thread = java::lang::Thread::currentThread();
-  _Jv_InterpFrame frame_desc (meth,
-                             (_Jv_InterpFrame **) &thread->interp_frame);
+  _Jv_InterpFrame frame_desc (meth, thread);
 
   _Jv_word stack[meth->max_stack];
   _Jv_word *sp = stack;
index c94b6d3921751e892ae61cc03f20c8ed1f18425b..62e280ced827f6baf8eba354d8ddf49b1c225a65 100644 (file)
@@ -368,7 +368,7 @@ public:
 
   inline jclass getComponentType (void)
     {
-      return isArray () ? (* (jclass *) &methods) : 0;
+      return isArray () ? element_type : 0;
     }
 
   jboolean isAssignableFrom (jclass cls);
@@ -554,7 +554,11 @@ private:
   _Jv_Constants constants;
   // Methods.  If this is an array class, then this field holds a
   // pointer to the element type.
-  _Jv_Method *methods;
+  union
+  {
+    _Jv_Method *methods;
+    jclass element_type;
+  };
   // Number of methods.  If this class is primitive, this holds the
   // character used to represent this type in a signature.
   jshort method_count;
index 5f4d957f61cb11f9d87a98ec006f3d5ee64a7d83..fa6f201db468a2f98c1abd4e750b05abf381da67 100644 (file)
@@ -458,7 +458,7 @@ _Jv_NewArrayClass (jclass element, java::lang::ClassLoader *loader,
     = java::lang::Object::class$.vtable_method_count;
 
   // Stash the pointer to the element type.
-  array_class->methods = (_Jv_Method *) element;
+  array_class->element_type = element;
 
   // Register our interfaces.
   static jclass interfaces[] =
index 5ad5b1074059fe3f35379699027085526fd23501..23f435f4def20b1ed18e98eaa863b054979bf193 100644 (file)
@@ -363,8 +363,8 @@ void
       // finalizer for ourselves as well.
       _Jv_RegisterFinalizer (this, finalize_reference);
       _Jv_RegisterFinalizer (referent, finalize_referred_to_object);
-      jobject *objp = reinterpret_cast<jobject *> (&referent);
-      _Jv_GCRegisterDisappearingLink (objp);
+      gnu::gcj::RawData **p = &referent;
+     _Jv_GCRegisterDisappearingLink ((jobject *) p);
       add_to_hash (this);
     }
 }
index c3a222aed6b9003bfea604066001fbcd58fd246e..b840907ccab3c8d589a98050294365a2fb3a03c8 100644 (file)
@@ -75,7 +75,7 @@ java::net::VMNetworkInterface::getInterfaces ()
       if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0)
         throw new java::net::SocketException;
     }
-  while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces));
+  while (if_data.ifc_len >= (int) (sizeof (struct ifreq) * num_interfaces));
 
   // Get addresses of all interfaces.
   if_record = if_data.ifc_req;
index 5a93753f006db5afd9147941ffffea5f72bb55e5..62a96ce9c6f69eff90b1f469476c6f50eaeec9bd 100644 (file)
@@ -2426,7 +2426,12 @@ _Jv_JNI_DestroyJavaVM (JavaVM *vm)
 {
   JvAssert (the_vm && vm == the_vm);
 
-  JNIEnv *env;
+  union
+  {
+    JNIEnv *env;
+    void *env_p;
+  };
+
   if (_Jv_ThreadCurrent () != NULL)
     {
       jstring main_name;
@@ -2440,8 +2445,7 @@ _Jv_JNI_DestroyJavaVM (JavaVM *vm)
          return JNI_ERR;
        }
 
-      jint r = _Jv_JNI_AttachCurrentThread (vm, main_name,
-                                           reinterpret_cast<void **> (&env),
+      jint r = _Jv_JNI_AttachCurrentThread (vm, main_name, &env_p,
                                            NULL, false);
       if (r < 0)
        return r;
index 73c0f5f4329c938956df4285e3f3f35ac3a50371..3b551966fca3a930f208557aa5681b143cced463 100644 (file)
@@ -98,7 +98,7 @@ _Jv_platform_initProperties (java::util::Properties* newprops)
   SET ("file.separator", "/");
   SET ("path.separator", ":");
   SET ("line.separator", "\n");
-  char *tmpdir = ::getenv("TMPDIR");
+  const char *tmpdir = ::getenv("TMPDIR");
   if (! tmpdir)
     tmpdir = "/tmp";
   SET ("java.io.tmpdir", tmpdir);