# HG changeset patch # User kvn # Date 1241741388 25200 # Node ID 9b3a41ccc9273ba3ceda7c437b38eef3474ce08c # Parent a58ad611cc63d74843ff0926efd79fb3a48d2593# Parent f96f285ed3ddddef8cbfdecd0e1fa28805e36d6d Merge diff -r a58ad611cc63 -r 9b3a41ccc927 agent/src/os/linux/Makefile --- a/agent/src/os/linux/Makefile Thu May 07 13:54:48 2009 -0700 +++ b/agent/src/os/linux/Makefile Thu May 07 17:09:48 2009 -0700 @@ -60,6 +60,14 @@ LFLAGS_LIBSA = -Xlinker --version-script=mapfile endif +# If this is a --hash-style=gnu system, use --hash-style=both +# The gnu .hash section won't work on some Linux systems like SuSE 10. +_HAS_HASH_STYLE_GNU:=$(shell $(CC) -dumpspecs | grep -- '--hash-style=gnu') +ifneq ($(_HAS_HASH_STYLE_GNU),) + LDFLAGS_HASH_STYLE = -Wl,--hash-style=both +endif +LFLAGS_LIBSA += $(LDFLAGS_HASH_STYLE) + $(LIBSA): $(OBJS) mapfile if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi $(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS) diff -r a58ad611cc63 -r 9b3a41ccc927 make/linux/makefiles/jsig.make --- a/make/linux/makefiles/jsig.make Thu May 07 13:54:48 2009 -0700 +++ b/make/linux/makefiles/jsig.make Thu May 07 17:09:48 2009 -0700 @@ -39,7 +39,7 @@ # cause problems with interposing. See CR: 6466665 # LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE)) -LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT +LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE) $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) @echo Making signal interposition lib... diff -r a58ad611cc63 -r 9b3a41ccc927 make/linux/makefiles/saproc.make --- a/make/linux/makefiles/saproc.make Thu May 07 13:54:48 2009 -0700 +++ b/make/linux/makefiles/saproc.make Thu May 07 17:09:48 2009 -0700 @@ -51,7 +51,7 @@ $(MAKE) -f vm.make $(LIBSAPROC); \ fi -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) +SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) $(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \ diff -r a58ad611cc63 -r 9b3a41ccc927 src/share/vm/opto/connode.cpp --- a/src/share/vm/opto/connode.cpp Thu May 07 13:54:48 2009 -0700 +++ b/src/share/vm/opto/connode.cpp Thu May 07 17:09:48 2009 -0700 @@ -128,6 +128,10 @@ // Swapped Cmp is OK (phase->eqv(cmp->in(2),f) && phase->eqv(cmp->in(1),t)) ) { + // Give up this identity check for floating points because it may choose incorrect + // value around 0.0 and -0.0 + if ( cmp->Opcode()==Op_CmpF || cmp->Opcode()==Op_CmpD ) + return NULL; // Check for "(t==f)?t:f;" and replace with "f" if( b->_test._test == BoolTest::eq ) return f; diff -r a58ad611cc63 -r 9b3a41ccc927 src/share/vm/opto/divnode.cpp --- a/src/share/vm/opto/divnode.cpp Thu May 07 13:54:48 2009 -0700 +++ b/src/share/vm/opto/divnode.cpp Thu May 07 17:09:48 2009 -0700 @@ -298,8 +298,10 @@ // 6732154: Construct both w1 and w2 before transforming, so t // doesn't go dead prematurely. + // 6837011: We need to transform w2 before w1 because the + // transformation of w1 could return t. + w2 = phase->transform(w2); w1 = phase->transform(w1); - w2 = phase->transform(w2); // w1 = u0*v1 + w1; Node* u0v1 = phase->transform(new (phase->C, 3) MulLNode(u0, v1)); diff -r a58ad611cc63 -r 9b3a41ccc927 test/compiler/6837011/Test6837011.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/compiler/6837011/Test6837011.java Thu May 07 17:09:48 2009 -0700 @@ -0,0 +1,45 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/** + * @test + * @bug 6837011 + * @summary SIGSEGV in PhaseIdealLoop in 32bit jvm + * + * @run main/othervm -Xcomp -XX:CompileOnly=Test6837011.main Test6837011 + */ + +public class Test6837011 { + static boolean var_3 = true; + + public static void main(String[] args) { + double var_5; + char var_7 = 1; + double var_11 = 0; + + do { + var_11++; + var_5 = (var_7 /= ( var_3 ? ~1L : 3 ) ); + } while (var_11 < 1); + } +}