From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13971 invoked by alias); 5 Jan 2011 17:01:17 -0000 Received: (qmail 13955 invoked by uid 22791); 5 Jan 2011 17:01:13 -0000 X-SWARE-Spam-Status: No, hits=-1.6 required=5.0 tests=AWL,BAYES_00,TW_CX,TW_GC,TW_IB,TW_LG,TW_XX,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from snape.CeBiTec.Uni-Bielefeld.DE (HELO smtp-relay.CeBiTec.Uni-Bielefeld.DE) (129.70.160.84) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 05 Jan 2011 17:01:08 +0000 Received: from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id B8C83FEE for ; Wed, 5 Jan 2011 18:01:05 +0100 (CET) Received: from smtp-relay.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (malfoy.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) (amavisd-new, port 10024) with LMTP id a5DrtRncFJyH for ; Wed, 5 Jan 2011 18:01:02 +0100 (CET) Received: from manam.CeBiTec.Uni-Bielefeld.DE (manam.CeBiTec.Uni-Bielefeld.DE [129.70.161.120]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPS id ECD82FEC for ; Wed, 5 Jan 2011 18:01:01 +0100 (CET) Received: (from ro@localhost) by manam.CeBiTec.Uni-Bielefeld.DE (8.14.4+Sun/8.14.4/Submit) id p05H114N017115; Wed, 5 Jan 2011 18:01:01 +0100 (MET) From: Rainer Orth To: java-patches@gcc.gnu.org Subject: Fix 64-bit PR16923 on Solaris 10+/x86 Date: Wed, 05 Jan 2011 17:01:00 -0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (usg-unix-v) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org X-SW-Source: 2011-q1/txt/msg00000.txt.bz2 The 64-bit PR16923 execution test was failing on Solaris 10+/x86. The stack looked like this: #0 0xfffffd7fff28c47a in _lwp_kill () from /lib/64/libc.so.1 #1 0xfffffd7fff280b6d in thr_kill () from /lib/64/libc.so.1 #2 0xfffffd7fff22db71 in raise () from /lib/64/libc.so.1 #3 0xfffffd7fff203801 in abort () from /lib/64/libc.so.1 #4 0xfffffd7fe8306a63 in _Jv_Throw (value=0x46ff00) at /vol/gcc/src/hg/trunk/solaris/libjava/exception.cc:127 #5 0xfffffd7fe8342902 in java::lang::Class::forName (className=0x47ff40, initialize=1 '\001', loader=0x0) at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/natClass.cc:101 #6 0xfffffd7fe835dbda in gnu.gcj.convert.UnicodeToBytes.getDefaultEncoder()gnu.gcj.convert.UnicodeToBytes () at /vol/gcc/src/hg/trunk/solaris/libjava/gnu/gcj/convert/UnicodeToBytes.java:51 #7 0xfffffd7fe86f0f63 in java.io.PrintStream.PrintStream(java.io.OutputStream, boolean) (this=@46ff30, out=, auto_flush=) at /vol/gcc/src/hg/trunk/solaris/libjava/java/io/PrintStream.java:121 #8 0xfffffd7fe870ce96 in java.lang.System.()void () at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/System.java:103 #9 0xfffffd7fe834252f in java::lang::Class::initializeClass (this=0xfffffd7fe9a1fa00) at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/natClass.cc:783 #10 0xfffffd7fe8713010 in java.lang.System.getProperty(java.lang.String)java.lang.String (key=@444e10) at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/System.java:367 #11 0xfffffd7fe87173d5 in java.lang.VMClassLoader.getSystemClassLoader()java.lang.ClassLoader () at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/VMClassLoader.java:327 #12 0xfffffd7fe871e10d in java.lang.ClassLoader.()void () at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/ClassLoader.java:172 #13 0xfffffd7fe834252f in java::lang::Class::initializeClass (this=0xfffffd7fe9a26800) at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/natClass.cc:783 #14 0xfffffd7fe82faa97 in _Jv_InitClass (vm_args=) at /vol/gcc/src/hg/trunk/solaris/libjava/java/lang/Class.h:742 #15 _Jv_CreateJavaVM (vm_args=) at /vol/gcc/src/hg/trunk/solaris/libjava/prims.cc:1666 #16 0xfffffd7fe5de0d48 in JNI_CreateJavaVM (vm=0xfffffd7fffdff748, penv=0xfffffd7fffdff750, args=) at /vol/gcc/src/hg/trunk/solaris/libjava/jni-libjvm.cc:54 #17 0x0000000000400e3f in main () i.e. _Jv_Throw abort()s with _URC_END_OF_STACK. Unfortunately, this proved to be terribly hard to debug since gdb couldn't print java variables and I had to go back to adding debug code. The problem turned out to be remarkably simple: the code wasn't linked with -shared-libgcc, and this caused the unwinder in libc (amd64 only, thus only a 64-bit failure) to be used which for some reason didn't call the Java personality function, breaking exception handling. I got a clue at the problem when trying a bootstrap with gld instead: /vol/gcc/bin/gld-2.21: warning: libgcc_s.so.1, needed by i386-pc-solaris2.11/amd64/libjava/.libs/libjvm.so, not found (try using -rpath or -rpath-link) i386-pc-solaris2.11/amd64/libjava/.libs/libgcj.so.12: undefined reference to `_Unwind_GetIPInfo@GCC_4.2.0' i386-pc-solaris2.11/amd64/libjava/.libs/libgcj.so.12: undefined reference to `_Unwind_GetTextRelBase@GCC_3.0' i386-pc-solaris2.11/amd64/libjava/.libs/libgcj.so.12: undefined reference to `_Unwind_FindEnclosingFunction@GCC_3.3' i386-pc-solaris2.11/amd64/libjava/.libs/libgcj.so.12: undefined reference to `_Unwind_GetDataRelBase@GCC_3.0' i386-pc-solaris2.11/amd64/libjava/.libs/libgcj.so.12: undefined reference to `_Unwind_Backtrace@GCC_3.3' collect2: ld returned 1 exit status By e.g. setting LD_LIBRARY_PATH before the link, both the error went away and the test worked. The patch below is obvious after this. At the same time, I noticed that -lsocket isn't used anymore (ldd -u reports it as unused and the test works without), so I'm removing it at the same time. Bootstrapped without regressions (and now clean libjava testsuite results for both ABIs) on i386-pc-solaris2.11. Will commit to mainline and the 4.4 and 4.5 branches once {i386-pc, sparc-sun}-solaris2.{8, 9, 10, 11} testing has completed. Rainer 2011-01-01 Rainer Orth * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation): Add -shared-libgcc to cxxflags for *-*-solaris*. Remove -lsocket. diff -r 893bae7716b8 libjava/testsuite/libjava.jni/jni.exp --- a/libjava/testsuite/libjava.jni/jni.exp Sat Jan 01 23:04:06 2011 +0100 +++ b/libjava/testsuite/libjava.jni/jni.exp Mon Jan 03 10:47:48 2011 +0100 @@ -274,8 +274,10 @@ eval lappend cxxflags "-shared-libgcc -lgcj $libiconv" } + # Make sure libgcc unwinder is used on 64-bit Solaris 10+/x86 rather than + # the libc one. if { [istarget "*-*-solaris*"] } { - lappend cxxflags "-lsocket" + lappend cxxflags "-shared-libgcc" } return $cxxflags -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University