Merge

Mon, 11 Mar 2013 15:37:10 +0100

author
kevinw
date
Mon, 11 Mar 2013 15:37:10 +0100
changeset 4737
71f619500f9b
parent 4736
167812fe00bb
parent 4735
1f3354851c91
child 4738
1c88b99a2b01

Merge

     1.1 --- a/.hgtags	Mon Mar 11 12:56:00 2013 +0000
     1.2 +++ b/.hgtags	Mon Mar 11 15:37:10 2013 +0100
     1.3 @@ -320,3 +320,5 @@
     1.4  555ec35a250783110aa070dbc8a8603f6cabe41f hs25-b20
     1.5  6691814929b606fe0e7954fd6e485dd876505c83 jdk8-b79
     1.6  df5396524152118535c36da5801d828b560d19a2 hs25-b21
     1.7 +4a198b201f3ce84433fa94a3ca65d061473e7c4c jdk8-b80
     1.8 +dd6350b4abc4a6c19c89dd982cc0e4f3d119885c hs25-b22
     2.1 --- a/agent/src/os/bsd/MacosxDebuggerLocal.m	Mon Mar 11 12:56:00 2013 +0000
     2.2 +++ b/agent/src/os/bsd/MacosxDebuggerLocal.m	Mon Mar 11 15:37:10 2013 +0100
     2.3 @@ -160,7 +160,7 @@
     2.4    CHECK_EXCEPTION_(0);
     2.5  
     2.6    unsigned long alignedAddress;
     2.7 -  unsigned long alignedLength;
     2.8 +  unsigned long alignedLength = 0;
     2.9    kern_return_t result;
    2.10    vm_offset_t *pages;
    2.11    int *mapped;
    2.12 @@ -630,7 +630,7 @@
    2.13      /* Couldn't find entry point.  error_message should contain some
    2.14       * platform dependent error message.
    2.15       */
    2.16 -    THROW_NEW_DEBUGGER_EXCEPTION(error_message);
    2.17 +    THROW_NEW_DEBUGGER_EXCEPTION_(error_message, (jlong)func);
    2.18    }
    2.19    return (jlong)func;
    2.20  }
     3.1 --- a/agent/src/os/linux/LinuxDebuggerLocal.c	Mon Mar 11 12:56:00 2013 +0000
     3.2 +++ b/agent/src/os/linux/LinuxDebuggerLocal.c	Mon Mar 11 15:37:10 2013 +0100
     3.3 @@ -1,5 +1,5 @@
     3.4  /*
     3.5 - * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
     3.6 + * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
     3.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3.8   *
     3.9   * This code is free software; you can redistribute it and/or modify it
    3.10 @@ -25,6 +25,13 @@
    3.11  #include <jni.h>
    3.12  #include "libproc.h"
    3.13  
    3.14 +#include <elf.h>
    3.15 +#include <sys/types.h>
    3.16 +#include <sys/stat.h>
    3.17 +#include <fcntl.h>
    3.18 +#include <string.h>
    3.19 +#include <limits.h>
    3.20 +
    3.21  #if defined(x86_64) && !defined(amd64)
    3.22  #define amd64 1
    3.23  #endif
    3.24 @@ -154,6 +161,39 @@
    3.25    }
    3.26  }
    3.27  
    3.28 +
    3.29 +/*
    3.30 + * Verify that a named ELF binary file (core or executable) has the same
    3.31 + * bitness as ourselves.
    3.32 + * Throw an exception if there is a mismatch or other problem.
    3.33 + *
    3.34 + * If we proceed using a mismatched debugger/debuggee, the best to hope
    3.35 + * for is a missing symbol, the worst is a crash searching for debug symbols.
    3.36 + */
    3.37 +void verifyBitness(JNIEnv *env, const char *binaryName) {
    3.38 +  int fd = open(binaryName, O_RDONLY);
    3.39 +  if (fd < 0) {
    3.40 +    THROW_NEW_DEBUGGER_EXCEPTION("cannot open binary file");
    3.41 +  }
    3.42 +  unsigned char elf_ident[EI_NIDENT];
    3.43 +  int i = read(fd, &elf_ident, sizeof(elf_ident));
    3.44 +  close(fd);
    3.45 +
    3.46 +  if (i < 0) {
    3.47 +    THROW_NEW_DEBUGGER_EXCEPTION("cannot read binary file");
    3.48 +  }
    3.49 +#ifndef _LP64
    3.50 +  if (elf_ident[EI_CLASS] == ELFCLASS64) {
    3.51 +    THROW_NEW_DEBUGGER_EXCEPTION("debuggee is 64 bit, use 64-bit java for debugger");
    3.52 +  }
    3.53 +#else
    3.54 +  if (elf_ident[EI_CLASS] != ELFCLASS64) {
    3.55 +    THROW_NEW_DEBUGGER_EXCEPTION("debuggee is 32 bit, use 32 bit java for debugger");
    3.56 +  }
    3.57 +#endif
    3.58 +}
    3.59 +
    3.60 +
    3.61  /*
    3.62   * Class:     sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal
    3.63   * Method:    attach0
    3.64 @@ -162,6 +202,12 @@
    3.65  JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__I
    3.66    (JNIEnv *env, jobject this_obj, jint jpid) {
    3.67  
    3.68 +  // For bitness checking, locate binary at /proc/jpid/exe
    3.69 +  char buf[PATH_MAX];
    3.70 +  snprintf((char *) &buf, PATH_MAX, "/proc/%d/exe", jpid);
    3.71 +  verifyBitness(env, (char *) &buf);
    3.72 +  CHECK_EXCEPTION;
    3.73 +
    3.74    struct ps_prochandle* ph;
    3.75    if ( (ph = Pgrab(jpid)) == NULL) {
    3.76      THROW_NEW_DEBUGGER_EXCEPTION("Can't attach to the process");
    3.77 @@ -187,6 +233,9 @@
    3.78    coreName_cstr = (*env)->GetStringUTFChars(env, coreName, &isCopy);
    3.79    CHECK_EXCEPTION;
    3.80  
    3.81 +  verifyBitness(env, execName_cstr);
    3.82 +  CHECK_EXCEPTION;
    3.83 +
    3.84    if ( (ph = Pgrab_core(execName_cstr, coreName_cstr)) == NULL) {
    3.85      (*env)->ReleaseStringUTFChars(env, execName, execName_cstr);
    3.86      (*env)->ReleaseStringUTFChars(env, coreName, coreName_cstr);
     4.1 --- a/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java	Mon Mar 11 12:56:00 2013 +0000
     4.2 +++ b/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/amd64/LinuxAMD64CFrame.java	Mon Mar 11 15:37:10 2013 +0100
     4.3 @@ -60,8 +60,13 @@
     4.4          return null;
     4.5        }
     4.6  
     4.7 +      // Check alignment of rbp
     4.8 +      if ( dbg.getAddressValue(rbp) % ADDRESS_SIZE != 0) {
     4.9 +        return null;
    4.10 +      }
    4.11 +
    4.12        Address nextRBP = rbp.getAddressAt( 0 * ADDRESS_SIZE);
    4.13 -      if (nextRBP == null) {
    4.14 +      if (nextRBP == null || nextRBP.lessThanOrEqual(rbp)) {
    4.15          return null;
    4.16        }
    4.17        Address nextPC  = rbp.getAddressAt( 1 * ADDRESS_SIZE);
     5.1 --- a/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java	Mon Mar 11 12:56:00 2013 +0000
     5.2 +++ b/agent/src/share/classes/sun/jvm/hotspot/debugger/linux/x86/LinuxX86CFrame.java	Mon Mar 11 15:37:10 2013 +0100
     5.3 @@ -61,8 +61,13 @@
     5.4          return null;
     5.5        }
     5.6  
     5.7 +      // Check alignment of ebp
     5.8 +      if ( dbg.getAddressValue(ebp) % ADDRESS_SIZE != 0) {
     5.9 +        return null;
    5.10 +      }
    5.11 +
    5.12        Address nextEBP = ebp.getAddressAt( 0 * ADDRESS_SIZE);
    5.13 -      if (nextEBP == null) {
    5.14 +      if (nextEBP == null || nextEBP.lessThanOrEqual(ebp)) {
    5.15          return null;
    5.16        }
    5.17        Address nextPC  = ebp.getAddressAt( 1 * ADDRESS_SIZE);
     6.1 --- a/make/hotspot_version	Mon Mar 11 12:56:00 2013 +0000
     6.2 +++ b/make/hotspot_version	Mon Mar 11 15:37:10 2013 +0100
     6.3 @@ -35,7 +35,7 @@
     6.4  
     6.5  HS_MAJOR_VER=25
     6.6  HS_MINOR_VER=0
     6.7 -HS_BUILD_NUMBER=22
     6.8 +HS_BUILD_NUMBER=23
     6.9  
    6.10  JDK_MAJOR_VER=1
    6.11  JDK_MINOR_VER=8
     7.1 --- a/src/os/bsd/vm/os_bsd.cpp	Mon Mar 11 12:56:00 2013 +0000
     7.2 +++ b/src/os/bsd/vm/os_bsd.cpp	Mon Mar 11 15:37:10 2013 +0100
     7.3 @@ -2695,7 +2695,7 @@
     7.4    assert(thread->is_VM_thread(), "Must be VMThread");
     7.5    // read current suspend action
     7.6    int action = osthread->sr.suspend_action();
     7.7 -  if (action == SR_SUSPEND) {
     7.8 +  if (action == os::Bsd::SuspendResume::SR_SUSPEND) {
     7.9      suspend_save_context(osthread, siginfo, context);
    7.10  
    7.11      // Notify the suspend action is about to be completed. do_suspend()
    7.12 @@ -2717,12 +2717,12 @@
    7.13      do {
    7.14        sigsuspend(&suspend_set);
    7.15        // ignore all returns until we get a resume signal
    7.16 -    } while (osthread->sr.suspend_action() != SR_CONTINUE);
    7.17 +    } while (osthread->sr.suspend_action() != os::Bsd::SuspendResume::SR_CONTINUE);
    7.18  
    7.19      resume_clear_context(osthread);
    7.20  
    7.21    } else {
    7.22 -    assert(action == SR_CONTINUE, "unexpected sr action");
    7.23 +    assert(action == os::Bsd::SuspendResume::SR_CONTINUE, "unexpected sr action");
    7.24      // nothing special to do - just leave the handler
    7.25    }
    7.26  
    7.27 @@ -2776,7 +2776,7 @@
    7.28  // but this seems the normal response to library errors
    7.29  static bool do_suspend(OSThread* osthread) {
    7.30    // mark as suspended and send signal
    7.31 -  osthread->sr.set_suspend_action(SR_SUSPEND);
    7.32 +  osthread->sr.set_suspend_action(os::Bsd::SuspendResume::SR_SUSPEND);
    7.33    int status = pthread_kill(osthread->pthread_id(), SR_signum);
    7.34    assert_status(status == 0, status, "pthread_kill");
    7.35  
    7.36 @@ -2785,18 +2785,18 @@
    7.37      for (int i = 0; !osthread->sr.is_suspended(); i++) {
    7.38        os::yield_all(i);
    7.39      }
    7.40 -    osthread->sr.set_suspend_action(SR_NONE);
    7.41 +    osthread->sr.set_suspend_action(os::Bsd::SuspendResume::SR_NONE);
    7.42      return true;
    7.43    }
    7.44    else {
    7.45 -    osthread->sr.set_suspend_action(SR_NONE);
    7.46 +    osthread->sr.set_suspend_action(os::Bsd::SuspendResume::SR_NONE);
    7.47      return false;
    7.48    }
    7.49  }
    7.50  
    7.51  static void do_resume(OSThread* osthread) {
    7.52    assert(osthread->sr.is_suspended(), "thread should be suspended");
    7.53 -  osthread->sr.set_suspend_action(SR_CONTINUE);
    7.54 +  osthread->sr.set_suspend_action(os::Bsd::SuspendResume::SR_CONTINUE);
    7.55  
    7.56    int status = pthread_kill(osthread->pthread_id(), SR_signum);
    7.57    assert_status(status == 0, status, "pthread_kill");
    7.58 @@ -2806,7 +2806,7 @@
    7.59        os::yield_all(i);
    7.60      }
    7.61    }
    7.62 -  osthread->sr.set_suspend_action(SR_NONE);
    7.63 +  osthread->sr.set_suspend_action(os::Bsd::SuspendResume::SR_NONE);
    7.64  }
    7.65  
    7.66  ////////////////////////////////////////////////////////////////////////////////
    7.67 @@ -3903,15 +3903,27 @@
    7.68  jlong os::current_thread_cpu_time() {
    7.69  #ifdef __APPLE__
    7.70    return os::thread_cpu_time(Thread::current(), true /* user + sys */);
    7.71 +#else
    7.72 +  Unimplemented();
    7.73 +  return 0;
    7.74  #endif
    7.75  }
    7.76  
    7.77  jlong os::thread_cpu_time(Thread* thread) {
    7.78 +#ifdef __APPLE__
    7.79 +  return os::thread_cpu_time(thread, true /* user + sys */);
    7.80 +#else
    7.81 +  Unimplemented();
    7.82 +  return 0;
    7.83 +#endif
    7.84  }
    7.85  
    7.86  jlong os::current_thread_cpu_time(bool user_sys_cpu_time) {
    7.87  #ifdef __APPLE__
    7.88    return os::thread_cpu_time(Thread::current(), user_sys_cpu_time);
    7.89 +#else
    7.90 +  Unimplemented();
    7.91 +  return 0;
    7.92  #endif
    7.93  }
    7.94  
    7.95 @@ -3935,6 +3947,9 @@
    7.96    } else {
    7.97      return ((jlong)tinfo.user_time.seconds * 1000000000) + ((jlong)tinfo.user_time.microseconds * (jlong)1000);
    7.98    }
    7.99 +#else
   7.100 +  Unimplemented();
   7.101 +  return 0;
   7.102  #endif
   7.103  }
   7.104  
     8.1 --- a/src/os/bsd/vm/os_bsd.hpp	Mon Mar 11 12:56:00 2013 +0000
     8.2 +++ b/src/os/bsd/vm/os_bsd.hpp	Mon Mar 11 15:37:10 2013 +0100
     8.3 @@ -1,5 +1,5 @@
     8.4  /*
     8.5 - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
     8.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
     8.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     8.8   *
     8.9   * This code is free software; you can redistribute it and/or modify it
    8.10 @@ -151,36 +151,25 @@
    8.11    // for BsdThreads are no longer needed.
    8.12    class SuspendResume {
    8.13    private:
    8.14 -    volatile int _suspend_action;
    8.15 +    volatile int  _suspend_action;
    8.16 +    volatile jint _state;
    8.17 +  public:
    8.18      // values for suspend_action:
    8.19 -    #define SR_NONE               (0x00)
    8.20 -    #define SR_SUSPEND            (0x01)  // suspend request
    8.21 -    #define SR_CONTINUE           (0x02)  // resume request
    8.22 +    enum {
    8.23 +      SR_NONE              = 0x00,
    8.24 +      SR_SUSPEND           = 0x01,  // suspend request
    8.25 +      SR_CONTINUE          = 0x02,  // resume request
    8.26 +      SR_SUSPENDED         = 0x20   // values for _state: + SR_NONE
    8.27 +    };
    8.28  
    8.29 -    volatile jint _state;
    8.30 -    // values for _state: + SR_NONE
    8.31 -    #define SR_SUSPENDED          (0x20)
    8.32 -  public:
    8.33      SuspendResume() { _suspend_action = SR_NONE; _state = SR_NONE; }
    8.34  
    8.35      int suspend_action() const     { return _suspend_action; }
    8.36      void set_suspend_action(int x) { _suspend_action = x;    }
    8.37  
    8.38      // atomic updates for _state
    8.39 -    void set_suspended()           {
    8.40 -      jint temp, temp2;
    8.41 -      do {
    8.42 -        temp = _state;
    8.43 -        temp2 = Atomic::cmpxchg(temp | SR_SUSPENDED, &_state, temp);
    8.44 -      } while (temp2 != temp);
    8.45 -    }
    8.46 -    void clear_suspended()        {
    8.47 -      jint temp, temp2;
    8.48 -      do {
    8.49 -        temp = _state;
    8.50 -        temp2 = Atomic::cmpxchg(temp & ~SR_SUSPENDED, &_state, temp);
    8.51 -      } while (temp2 != temp);
    8.52 -    }
    8.53 +    inline void set_suspended();
    8.54 +    inline void clear_suspended();
    8.55      bool is_suspended()            { return _state & SR_SUSPENDED;       }
    8.56  
    8.57      #undef SR_SUSPENDED
     9.1 --- a/src/os/bsd/vm/os_bsd.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
     9.2 +++ b/src/os/bsd/vm/os_bsd.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
     9.3 @@ -25,7 +25,6 @@
     9.4  #ifndef OS_BSD_VM_OS_BSD_INLINE_HPP
     9.5  #define OS_BSD_VM_OS_BSD_INLINE_HPP
     9.6  
     9.7 -#include "runtime/atomic.hpp"
     9.8  #include "runtime/atomic.inline.hpp"
     9.9  #include "runtime/os.hpp"
    9.10  
    9.11 @@ -286,4 +285,21 @@
    9.12                              const char* optval, socklen_t optlen) {
    9.13    return ::setsockopt(fd, level, optname, optval, optlen);
    9.14  }
    9.15 +
    9.16 +inline void os::Bsd::SuspendResume::set_suspended()           {
    9.17 +  jint temp, temp2;
    9.18 +  do {
    9.19 +    temp = _state;
    9.20 +    temp2 = Atomic::cmpxchg(temp | SR_SUSPENDED, &_state, temp);
    9.21 +  } while (temp2 != temp);
    9.22 +}
    9.23 +
    9.24 +inline void os::Bsd::SuspendResume::clear_suspended()        {
    9.25 +  jint temp, temp2;
    9.26 +  do {
    9.27 +    temp = _state;
    9.28 +    temp2 = Atomic::cmpxchg(temp & ~SR_SUSPENDED, &_state, temp);
    9.29 +  } while (temp2 != temp);
    9.30 +}
    9.31 +
    9.32  #endif // OS_BSD_VM_OS_BSD_INLINE_HPP
    10.1 --- a/src/os/linux/vm/os_linux.cpp	Mon Mar 11 12:56:00 2013 +0000
    10.2 +++ b/src/os/linux/vm/os_linux.cpp	Mon Mar 11 15:37:10 2013 +0100
    10.3 @@ -3461,7 +3461,7 @@
    10.4    assert(thread->is_VM_thread(), "Must be VMThread");
    10.5    // read current suspend action
    10.6    int action = osthread->sr.suspend_action();
    10.7 -  if (action == SR_SUSPEND) {
    10.8 +  if (action == os::Linux::SuspendResume::SR_SUSPEND) {
    10.9      suspend_save_context(osthread, siginfo, context);
   10.10  
   10.11      // Notify the suspend action is about to be completed. do_suspend()
   10.12 @@ -3483,12 +3483,12 @@
   10.13      do {
   10.14        sigsuspend(&suspend_set);
   10.15        // ignore all returns until we get a resume signal
   10.16 -    } while (osthread->sr.suspend_action() != SR_CONTINUE);
   10.17 +    } while (osthread->sr.suspend_action() != os::Linux::SuspendResume::SR_CONTINUE);
   10.18  
   10.19      resume_clear_context(osthread);
   10.20  
   10.21    } else {
   10.22 -    assert(action == SR_CONTINUE, "unexpected sr action");
   10.23 +    assert(action == os::Linux::SuspendResume::SR_CONTINUE, "unexpected sr action");
   10.24      // nothing special to do - just leave the handler
   10.25    }
   10.26  
   10.27 @@ -3542,7 +3542,7 @@
   10.28  // but this seems the normal response to library errors
   10.29  static bool do_suspend(OSThread* osthread) {
   10.30    // mark as suspended and send signal
   10.31 -  osthread->sr.set_suspend_action(SR_SUSPEND);
   10.32 +  osthread->sr.set_suspend_action(os::Linux::SuspendResume::SR_SUSPEND);
   10.33    int status = pthread_kill(osthread->pthread_id(), SR_signum);
   10.34    assert_status(status == 0, status, "pthread_kill");
   10.35  
   10.36 @@ -3551,18 +3551,18 @@
   10.37      for (int i = 0; !osthread->sr.is_suspended(); i++) {
   10.38        os::yield_all(i);
   10.39      }
   10.40 -    osthread->sr.set_suspend_action(SR_NONE);
   10.41 +    osthread->sr.set_suspend_action(os::Linux::SuspendResume::SR_NONE);
   10.42      return true;
   10.43    }
   10.44    else {
   10.45 -    osthread->sr.set_suspend_action(SR_NONE);
   10.46 +    osthread->sr.set_suspend_action(os::Linux::SuspendResume::SR_NONE);
   10.47      return false;
   10.48    }
   10.49  }
   10.50  
   10.51  static void do_resume(OSThread* osthread) {
   10.52    assert(osthread->sr.is_suspended(), "thread should be suspended");
   10.53 -  osthread->sr.set_suspend_action(SR_CONTINUE);
   10.54 +  osthread->sr.set_suspend_action(os::Linux::SuspendResume::SR_CONTINUE);
   10.55  
   10.56    int status = pthread_kill(osthread->pthread_id(), SR_signum);
   10.57    assert_status(status == 0, status, "pthread_kill");
   10.58 @@ -3572,7 +3572,7 @@
   10.59        os::yield_all(i);
   10.60      }
   10.61    }
   10.62 -  osthread->sr.set_suspend_action(SR_NONE);
   10.63 +  osthread->sr.set_suspend_action(os::Linux::SuspendResume::SR_NONE);
   10.64  }
   10.65  
   10.66  ////////////////////////////////////////////////////////////////////////////////
    11.1 --- a/src/os/linux/vm/os_linux.hpp	Mon Mar 11 12:56:00 2013 +0000
    11.2 +++ b/src/os/linux/vm/os_linux.hpp	Mon Mar 11 15:37:10 2013 +0100
    11.3 @@ -1,5 +1,5 @@
    11.4  /*
    11.5 - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
    11.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    11.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    11.8   *
    11.9   * This code is free software; you can redistribute it and/or modify it
   11.10 @@ -209,39 +209,27 @@
   11.11    // for LinuxThreads are no longer needed.
   11.12    class SuspendResume {
   11.13    private:
   11.14 -    volatile int _suspend_action;
   11.15 +    volatile int  _suspend_action;
   11.16 +    volatile jint _state;
   11.17 +  public:
   11.18      // values for suspend_action:
   11.19 -    #define SR_NONE               (0x00)
   11.20 -    #define SR_SUSPEND            (0x01)  // suspend request
   11.21 -    #define SR_CONTINUE           (0x02)  // resume request
   11.22 +    enum {
   11.23 +      SR_NONE              = 0x00,
   11.24 +      SR_SUSPEND           = 0x01,  // suspend request
   11.25 +      SR_CONTINUE          = 0x02,  // resume request
   11.26 +      SR_SUSPENDED         = 0x20   // values for _state: + SR_NONE
   11.27 +    };
   11.28  
   11.29 -    volatile jint _state;
   11.30 -    // values for _state: + SR_NONE
   11.31 -    #define SR_SUSPENDED          (0x20)
   11.32 -  public:
   11.33      SuspendResume() { _suspend_action = SR_NONE; _state = SR_NONE; }
   11.34  
   11.35      int suspend_action() const     { return _suspend_action; }
   11.36      void set_suspend_action(int x) { _suspend_action = x;    }
   11.37  
   11.38      // atomic updates for _state
   11.39 -    void set_suspended()           {
   11.40 -      jint temp, temp2;
   11.41 -      do {
   11.42 -        temp = _state;
   11.43 -        temp2 = Atomic::cmpxchg(temp | SR_SUSPENDED, &_state, temp);
   11.44 -      } while (temp2 != temp);
   11.45 -    }
   11.46 -    void clear_suspended()        {
   11.47 -      jint temp, temp2;
   11.48 -      do {
   11.49 -        temp = _state;
   11.50 -        temp2 = Atomic::cmpxchg(temp & ~SR_SUSPENDED, &_state, temp);
   11.51 -      } while (temp2 != temp);
   11.52 -    }
   11.53 +    inline void set_suspended();
   11.54 +    inline void clear_suspended();
   11.55      bool is_suspended()            { return _state & SR_SUSPENDED;       }
   11.56  
   11.57 -    #undef SR_SUSPENDED
   11.58    };
   11.59  
   11.60  private:
    12.1 --- a/src/os/linux/vm/os_linux.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    12.2 +++ b/src/os/linux/vm/os_linux.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    12.3 @@ -25,7 +25,6 @@
    12.4  #ifndef OS_LINUX_VM_OS_LINUX_INLINE_HPP
    12.5  #define OS_LINUX_VM_OS_LINUX_INLINE_HPP
    12.6  
    12.7 -#include "runtime/atomic.hpp"
    12.8  #include "runtime/atomic.inline.hpp"
    12.9  #include "runtime/os.hpp"
   12.10  
   12.11 @@ -288,4 +287,21 @@
   12.12                              const char* optval, socklen_t optlen) {
   12.13    return ::setsockopt(fd, level, optname, optval, optlen);
   12.14  }
   12.15 +
   12.16 +inline void os::Linux::SuspendResume::set_suspended() {
   12.17 +  jint temp, temp2;
   12.18 +  do {
   12.19 +    temp = _state;
   12.20 +    temp2 = Atomic::cmpxchg(temp | SR_SUSPENDED, &_state, temp);
   12.21 +  } while (temp2 != temp);
   12.22 +}
   12.23 +
   12.24 +inline void os::Linux::SuspendResume::clear_suspended()        {
   12.25 +  jint temp, temp2;
   12.26 +  do {
   12.27 +    temp = _state;
   12.28 +    temp2 = Atomic::cmpxchg(temp & ~SR_SUSPENDED, &_state, temp);
   12.29 +  } while (temp2 != temp);
   12.30 +}
   12.31 +
   12.32  #endif // OS_LINUX_VM_OS_LINUX_INLINE_HPP
    13.1 --- a/src/os/solaris/vm/os_solaris.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    13.2 +++ b/src/os/solaris/vm/os_solaris.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    13.3 @@ -25,7 +25,6 @@
    13.4  #ifndef OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
    13.5  #define OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
    13.6  
    13.7 -#include "runtime/atomic.hpp"
    13.8  #include "runtime/atomic.inline.hpp"
    13.9  #include "runtime/os.hpp"
   13.10  
    14.1 --- a/src/os/windows/vm/decoder_windows.cpp	Mon Mar 11 12:56:00 2013 +0000
    14.2 +++ b/src/os/windows/vm/decoder_windows.cpp	Mon Mar 11 15:37:10 2013 +0100
    14.3 @@ -1,5 +1,5 @@
    14.4  /*
    14.5 - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    14.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
    14.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    14.8   *
    14.9   * This code is free software; you can redistribute it and/or modify it
   14.10 @@ -24,6 +24,7 @@
   14.11  
   14.12  #include "precompiled.hpp"
   14.13  #include "prims/jvm.h"
   14.14 +#include "runtime/arguments.hpp"
   14.15  #include "decoder_windows.hpp"
   14.16  
   14.17  WindowsDecoder::WindowsDecoder() {
    15.1 --- a/src/os/windows/vm/os_windows.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    15.2 +++ b/src/os/windows/vm/os_windows.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    15.3 @@ -25,7 +25,6 @@
    15.4  #ifndef OS_WINDOWS_VM_OS_WINDOWS_INLINE_HPP
    15.5  #define OS_WINDOWS_VM_OS_WINDOWS_INLINE_HPP
    15.6  
    15.7 -#include "runtime/atomic.hpp"
    15.8  #include "runtime/atomic.inline.hpp"
    15.9  #include "runtime/os.hpp"
   15.10  
    16.1 --- a/src/os_cpu/bsd_x86/vm/atomic_bsd_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    16.2 +++ b/src/os_cpu/bsd_x86/vm/atomic_bsd_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    16.3 @@ -1,5 +1,5 @@
    16.4  /*
    16.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    16.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    16.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    16.8   *
    16.9   * This code is free software; you can redistribute it and/or modify it
   16.10 @@ -25,7 +25,6 @@
   16.11  #ifndef OS_CPU_BSD_X86_VM_ATOMIC_BSD_X86_INLINE_HPP
   16.12  #define OS_CPU_BSD_X86_VM_ATOMIC_BSD_X86_INLINE_HPP
   16.13  
   16.14 -#include "orderAccess_bsd_x86.inline.hpp"
   16.15  #include "runtime/atomic.hpp"
   16.16  #include "runtime/os.hpp"
   16.17  #include "vm_version_x86.hpp"
    17.1 --- a/src/os_cpu/bsd_x86/vm/orderAccess_bsd_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    17.2 +++ b/src/os_cpu/bsd_x86/vm/orderAccess_bsd_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    17.3 @@ -1,5 +1,5 @@
    17.4  /*
    17.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    17.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    17.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    17.8   *
    17.9   * This code is free software; you can redistribute it and/or modify it
   17.10 @@ -25,8 +25,9 @@
   17.11  #ifndef OS_CPU_BSD_X86_VM_ORDERACCESS_BSD_X86_INLINE_HPP
   17.12  #define OS_CPU_BSD_X86_VM_ORDERACCESS_BSD_X86_INLINE_HPP
   17.13  
   17.14 -#include "runtime/atomic.hpp"
   17.15 +#include "runtime/atomic.inline.hpp"
   17.16  #include "runtime/orderAccess.hpp"
   17.17 +#include "runtime/os.hpp"
   17.18  #include "vm_version_x86.hpp"
   17.19  
   17.20  // Implementation of class OrderAccess.
    18.1 --- a/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    18.2 +++ b/src/os_cpu/bsd_zero/vm/atomic_bsd_zero.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    18.3 @@ -1,5 +1,5 @@
    18.4  /*
    18.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    18.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    18.7   * Copyright 2007, 2008, 2011 Red Hat, Inc.
    18.8   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    18.9   *
   18.10 @@ -26,7 +26,6 @@
   18.11  #ifndef OS_CPU_BSD_ZERO_VM_ATOMIC_BSD_ZERO_INLINE_HPP
   18.12  #define OS_CPU_BSD_ZERO_VM_ATOMIC_BSD_ZERO_INLINE_HPP
   18.13  
   18.14 -#include "orderAccess_bsd_zero.inline.hpp"
   18.15  #include "runtime/atomic.hpp"
   18.16  #include "runtime/os.hpp"
   18.17  #include "vm_version_zero.hpp"
    19.1 --- a/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    19.2 +++ b/src/os_cpu/linux_sparc/vm/atomic_linux_sparc.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    19.3 @@ -1,5 +1,5 @@
    19.4  /*
    19.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    19.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    19.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    19.8   *
    19.9   * This code is free software; you can redistribute it and/or modify it
   19.10 @@ -25,7 +25,6 @@
   19.11  #ifndef OS_CPU_LINUX_SPARC_VM_ATOMIC_LINUX_SPARC_INLINE_HPP
   19.12  #define OS_CPU_LINUX_SPARC_VM_ATOMIC_LINUX_SPARC_INLINE_HPP
   19.13  
   19.14 -#include "orderAccess_linux_sparc.inline.hpp"
   19.15  #include "runtime/atomic.hpp"
   19.16  #include "runtime/os.hpp"
   19.17  #include "vm_version_sparc.hpp"
    20.1 --- a/src/os_cpu/linux_x86/vm/atomic_linux_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    20.2 +++ b/src/os_cpu/linux_x86/vm/atomic_linux_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    20.3 @@ -1,5 +1,5 @@
    20.4  /*
    20.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    20.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    20.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    20.8   *
    20.9   * This code is free software; you can redistribute it and/or modify it
   20.10 @@ -25,7 +25,6 @@
   20.11  #ifndef OS_CPU_LINUX_X86_VM_ATOMIC_LINUX_X86_INLINE_HPP
   20.12  #define OS_CPU_LINUX_X86_VM_ATOMIC_LINUX_X86_INLINE_HPP
   20.13  
   20.14 -#include "orderAccess_linux_x86.inline.hpp"
   20.15  #include "runtime/atomic.hpp"
   20.16  #include "runtime/os.hpp"
   20.17  #include "vm_version_x86.hpp"
    21.1 --- a/src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    21.2 +++ b/src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    21.3 @@ -1,5 +1,5 @@
    21.4  /*
    21.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    21.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    21.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    21.8   *
    21.9   * This code is free software; you can redistribute it and/or modify it
   21.10 @@ -25,8 +25,9 @@
   21.11  #ifndef OS_CPU_LINUX_X86_VM_ORDERACCESS_LINUX_X86_INLINE_HPP
   21.12  #define OS_CPU_LINUX_X86_VM_ORDERACCESS_LINUX_X86_INLINE_HPP
   21.13  
   21.14 -#include "runtime/atomic.hpp"
   21.15 +#include "runtime/atomic.inline.hpp"
   21.16  #include "runtime/orderAccess.hpp"
   21.17 +#include "runtime/os.hpp"
   21.18  #include "vm_version_x86.hpp"
   21.19  
   21.20  // Implementation of class OrderAccess.
    22.1 --- a/src/os_cpu/linux_zero/vm/atomic_linux_zero.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    22.2 +++ b/src/os_cpu/linux_zero/vm/atomic_linux_zero.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    22.3 @@ -1,5 +1,5 @@
    22.4  /*
    22.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    22.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    22.7   * Copyright 2007, 2008, 2011 Red Hat, Inc.
    22.8   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    22.9   *
   22.10 @@ -26,7 +26,6 @@
   22.11  #ifndef OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_INLINE_HPP
   22.12  #define OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_INLINE_HPP
   22.13  
   22.14 -#include "orderAccess_linux_zero.inline.hpp"
   22.15  #include "runtime/atomic.hpp"
   22.16  #include "runtime/os.hpp"
   22.17  #include "vm_version_zero.hpp"
    23.1 --- a/src/os_cpu/solaris_sparc/vm/atomic_solaris_sparc.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    23.2 +++ b/src/os_cpu/solaris_sparc/vm/atomic_solaris_sparc.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    23.3 @@ -1,5 +1,5 @@
    23.4  /*
    23.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    23.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    23.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    23.8   *
    23.9   * This code is free software; you can redistribute it and/or modify it
   23.10 @@ -25,7 +25,6 @@
   23.11  #ifndef OS_CPU_SOLARIS_SPARC_VM_ATOMIC_SOLARIS_SPARC_INLINE_HPP
   23.12  #define OS_CPU_SOLARIS_SPARC_VM_ATOMIC_SOLARIS_SPARC_INLINE_HPP
   23.13  
   23.14 -#include "orderAccess_solaris_sparc.inline.hpp"
   23.15  #include "runtime/atomic.hpp"
   23.16  #include "runtime/os.hpp"
   23.17  #include "vm_version_sparc.hpp"
    24.1 --- a/src/os_cpu/solaris_sparc/vm/orderAccess_solaris_sparc.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    24.2 +++ b/src/os_cpu/solaris_sparc/vm/orderAccess_solaris_sparc.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    24.3 @@ -1,5 +1,5 @@
    24.4  /*
    24.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    24.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    24.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    24.8   *
    24.9   * This code is free software; you can redistribute it and/or modify it
   24.10 @@ -25,6 +25,7 @@
   24.11  #ifndef OS_CPU_SOLARIS_SPARC_VM_ORDERACCESS_SOLARIS_SPARC_INLINE_HPP
   24.12  #define OS_CPU_SOLARIS_SPARC_VM_ORDERACCESS_SOLARIS_SPARC_INLINE_HPP
   24.13  
   24.14 +#include "runtime/atomic.inline.hpp"
   24.15  #include "runtime/orderAccess.hpp"
   24.16  #include "vm_version_sparc.hpp"
   24.17  
    25.1 --- a/src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    25.2 +++ b/src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    25.3 @@ -1,5 +1,5 @@
    25.4  /*
    25.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    25.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    25.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    25.8   *
    25.9   * This code is free software; you can redistribute it and/or modify it
   25.10 @@ -25,7 +25,6 @@
   25.11  #ifndef OS_CPU_SOLARIS_X86_VM_ATOMIC_SOLARIS_X86_INLINE_HPP
   25.12  #define OS_CPU_SOLARIS_X86_VM_ATOMIC_SOLARIS_X86_INLINE_HPP
   25.13  
   25.14 -#include "orderAccess_solaris_x86.inline.hpp"
   25.15  #include "runtime/atomic.hpp"
   25.16  #include "runtime/os.hpp"
   25.17  #include "vm_version_x86.hpp"
    26.1 --- a/src/os_cpu/solaris_x86/vm/orderAccess_solaris_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    26.2 +++ b/src/os_cpu/solaris_x86/vm/orderAccess_solaris_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    26.3 @@ -1,5 +1,5 @@
    26.4  /*
    26.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    26.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    26.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    26.8   *
    26.9   * This code is free software; you can redistribute it and/or modify it
   26.10 @@ -25,7 +25,7 @@
   26.11  #ifndef OS_CPU_SOLARIS_X86_VM_ORDERACCESS_SOLARIS_X86_INLINE_HPP
   26.12  #define OS_CPU_SOLARIS_X86_VM_ORDERACCESS_SOLARIS_X86_INLINE_HPP
   26.13  
   26.14 -#include "runtime/atomic.hpp"
   26.15 +#include "runtime/atomic.inline.hpp"
   26.16  #include "runtime/orderAccess.hpp"
   26.17  #include "runtime/os.hpp"
   26.18  #include "vm_version_x86.hpp"
    27.1 --- a/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    27.2 +++ b/src/os_cpu/windows_x86/vm/atomic_windows_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    27.3 @@ -1,5 +1,5 @@
    27.4  /*
    27.5 - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
    27.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
    27.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    27.8   *
    27.9   * This code is free software; you can redistribute it and/or modify it
   27.10 @@ -25,7 +25,6 @@
   27.11  #ifndef OS_CPU_WINDOWS_X86_VM_ATOMIC_WINDOWS_X86_INLINE_HPP
   27.12  #define OS_CPU_WINDOWS_X86_VM_ATOMIC_WINDOWS_X86_INLINE_HPP
   27.13  
   27.14 -#include "orderAccess_windows_x86.inline.hpp"
   27.15  #include "runtime/atomic.hpp"
   27.16  #include "runtime/os.hpp"
   27.17  #include "vm_version_x86.hpp"
    28.1 --- a/src/os_cpu/windows_x86/vm/orderAccess_windows_x86.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    28.2 +++ b/src/os_cpu/windows_x86/vm/orderAccess_windows_x86.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    28.3 @@ -1,5 +1,5 @@
    28.4  /*
    28.5 - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
    28.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    28.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    28.8   *
    28.9   * This code is free software; you can redistribute it and/or modify it
   28.10 @@ -25,12 +25,11 @@
   28.11  #ifndef OS_CPU_WINDOWS_X86_VM_ORDERACCESS_WINDOWS_X86_INLINE_HPP
   28.12  #define OS_CPU_WINDOWS_X86_VM_ORDERACCESS_WINDOWS_X86_INLINE_HPP
   28.13  
   28.14 -#include "runtime/atomic.hpp"
   28.15 +#include "runtime/atomic.inline.hpp"
   28.16  #include "runtime/orderAccess.hpp"
   28.17 +#include "runtime/os.hpp"
   28.18  #include "vm_version_x86.hpp"
   28.19  
   28.20 -#pragma warning(disable: 4035) // Disables warnings reporting missing return statement
   28.21 -
   28.22  // Implementation of class OrderAccess.
   28.23  
   28.24  inline void OrderAccess::loadload()   { acquire(); }
   28.25 @@ -214,6 +213,4 @@
   28.26  #endif // AMD64
   28.27  }
   28.28  
   28.29 -#pragma warning(default: 4035) // Enables warnings reporting missing return statement
   28.30 -
   28.31  #endif // OS_CPU_WINDOWS_X86_VM_ORDERACCESS_WINDOWS_X86_INLINE_HPP
    29.1 --- a/src/share/vm/c1/c1_FrameMap.cpp	Mon Mar 11 12:56:00 2013 +0000
    29.2 +++ b/src/share/vm/c1/c1_FrameMap.cpp	Mon Mar 11 15:37:10 2013 +0100
    29.3 @@ -308,27 +308,6 @@
    29.4    return sp_offset_for_monitor_base(index) + in_ByteSize(BasicObjectLock::obj_offset_in_bytes());
    29.5  }
    29.6  
    29.7 -void FrameMap::print_frame_layout() const {
    29.8 -  int svar;
    29.9 -  tty->print_cr("#####################################");
   29.10 -  tty->print_cr("Frame size in words %d", framesize());
   29.11 -
   29.12 -  if( _num_monitors > 0) {
   29.13 -    tty->print_cr("monitor [0]:%d | [%2d]:%d",
   29.14 -                  in_bytes(sp_offset_for_monitor_base(0)),
   29.15 -                  in_bytes(sp_offset_for_monitor_base(_num_monitors)));
   29.16 -  }
   29.17 -  if( _num_spills > 0) {
   29.18 -    svar = _num_spills - 1;
   29.19 -    if(svar == 0)
   29.20 -      tty->print_cr("spill   [0]:%d", in_bytes(sp_offset_for_spill(0)));
   29.21 -    else
   29.22 -      tty->print_cr("spill   [0]:%d | [%2d]:%d", in_bytes(sp_offset_for_spill(0)),
   29.23 -                    svar,
   29.24 -                    in_bytes(sp_offset_for_spill(svar)));
   29.25 -  }
   29.26 -}
   29.27 -
   29.28  
   29.29  // For OopMaps, map a local variable or spill index to an VMReg.
   29.30  // This is the offset from sp() in the frame of the slot for the index,
    30.1 --- a/src/share/vm/c1/c1_FrameMap.hpp	Mon Mar 11 12:56:00 2013 +0000
    30.2 +++ b/src/share/vm/c1/c1_FrameMap.hpp	Mon Mar 11 15:37:10 2013 +0100
    30.3 @@ -226,8 +226,6 @@
    30.4      return make_new_address(sp_offset_for_monitor_object(monitor_index));
    30.5    }
    30.6  
    30.7 -  void print_frame_layout() const;
    30.8 -
    30.9    // Creates Location describing desired slot and returns it via pointer
   30.10    // to Location object. Returns true if the stack frame offset was legal
   30.11    // (as defined by Location::legal_offset_in_bytes()), false otherwise.
    31.1 --- a/src/share/vm/classfile/classLoaderData.hpp	Mon Mar 11 12:56:00 2013 +0000
    31.2 +++ b/src/share/vm/classfile/classLoaderData.hpp	Mon Mar 11 15:37:10 2013 +0100
    31.3 @@ -234,6 +234,7 @@
    31.4    void add_to_deallocate_list(Metadata* m);
    31.5  
    31.6    static ClassLoaderData* class_loader_data(oop loader);
    31.7 +  static ClassLoaderData* class_loader_data_or_null(oop loader);
    31.8    static ClassLoaderData* anonymous_class_loader_data(oop loader, TRAPS);
    31.9    static void print_loader(ClassLoaderData *loader_data, outputStream *out);
   31.10  
    32.1 --- a/src/share/vm/classfile/classLoaderData.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    32.2 +++ b/src/share/vm/classfile/classLoaderData.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    32.3 @@ -25,9 +25,15 @@
    32.4  #include "classfile/classLoaderData.hpp"
    32.5  #include "classfile/javaClasses.hpp"
    32.6  
    32.7 +inline ClassLoaderData* ClassLoaderData::class_loader_data_or_null(oop loader) {
    32.8 +  if (loader == NULL) {
    32.9 +    return ClassLoaderData::the_null_class_loader_data();
   32.10 +  }
   32.11 +  return java_lang_ClassLoader::loader_data(loader);
   32.12 +}
   32.13 +
   32.14  inline ClassLoaderData* ClassLoaderData::class_loader_data(oop loader) {
   32.15 -  if (loader == NULL) return ClassLoaderData::the_null_class_loader_data();
   32.16 -  ClassLoaderData* loader_data = java_lang_ClassLoader::loader_data(loader);
   32.17 +  ClassLoaderData* loader_data = class_loader_data_or_null(loader);
   32.18    assert(loader_data != NULL, "Must be");
   32.19    return loader_data;
   32.20  }
    33.1 --- a/src/share/vm/classfile/dictionary.cpp	Mon Mar 11 12:56:00 2013 +0000
    33.2 +++ b/src/share/vm/classfile/dictionary.cpp	Mon Mar 11 15:37:10 2013 +0100
    33.3 @@ -347,6 +347,7 @@
    33.4    assert_locked_or_safepoint(SystemDictionary_lock);
    33.5    assert(obj() != NULL, "adding NULL obj");
    33.6    assert(obj()->name() == class_name, "sanity check on name");
    33.7 +  assert(loader_data != NULL, "Must be non-NULL");
    33.8  
    33.9    unsigned int hash = compute_hash(class_name, loader_data);
   33.10    int index = hash_to_index(hash);
    34.1 --- a/src/share/vm/classfile/systemDictionary.cpp	Mon Mar 11 12:56:00 2013 +0000
    34.2 +++ b/src/share/vm/classfile/systemDictionary.cpp	Mon Mar 11 15:37:10 2013 +0100
    34.3 @@ -866,16 +866,22 @@
    34.4  // the new entry.
    34.5  
    34.6  Klass* SystemDictionary::find(Symbol* class_name,
    34.7 -                                Handle class_loader,
    34.8 -                                Handle protection_domain,
    34.9 -                                TRAPS) {
   34.10 +                              Handle class_loader,
   34.11 +                              Handle protection_domain,
   34.12 +                              TRAPS) {
   34.13  
   34.14    // UseNewReflection
   34.15    // The result of this call should be consistent with the result
   34.16    // of the call to resolve_instance_class_or_null().
   34.17    // See evaluation 6790209 and 4474172 for more details.
   34.18    class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
   34.19 -  ClassLoaderData* loader_data = register_loader(class_loader, CHECK_NULL);
   34.20 +  ClassLoaderData* loader_data = ClassLoaderData::class_loader_data_or_null(class_loader());
   34.21 +
   34.22 +  if (loader_data == NULL) {
   34.23 +    // If the ClassLoaderData has not been setup,
   34.24 +    // then the class loader has no entries in the dictionary.
   34.25 +    return NULL;
   34.26 +  }
   34.27  
   34.28    unsigned int d_hash = dictionary()->compute_hash(class_name, loader_data);
   34.29    int d_index = dictionary()->hash_to_index(d_hash);
    35.1 --- a/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp	Mon Mar 11 12:56:00 2013 +0000
    35.2 +++ b/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp	Mon Mar 11 15:37:10 2013 +0100
    35.3 @@ -373,6 +373,8 @@
    35.4                           " does not exceed used.end() = " PTR_FORMAT ","
    35.5                           " yet last_chunk_index_to_check " INTPTR_FORMAT
    35.6                           " exceeds last_chunk_index " INTPTR_FORMAT,
    35.7 +                         last_block, last_block + last_block_size,
    35.8 +                         used.end(),
    35.9                           last_chunk_index_to_check, last_chunk_index));
   35.10            assert(sp->used_region().end() > used.end(),
   35.11                   err_msg("Expansion did not happen: "
    36.1 --- a/src/share/vm/memory/allocation.inline.hpp	Mon Mar 11 12:56:00 2013 +0000
    36.2 +++ b/src/share/vm/memory/allocation.inline.hpp	Mon Mar 11 15:37:10 2013 +0100
    36.3 @@ -1,5 +1,5 @@
    36.4  /*
    36.5 - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    36.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
    36.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    36.8   *
    36.9   * This code is free software; you can redistribute it and/or modify it
   36.10 @@ -25,6 +25,7 @@
   36.11  #ifndef SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
   36.12  #define SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
   36.13  
   36.14 +#include "runtime/atomic.inline.hpp"
   36.15  #include "runtime/os.hpp"
   36.16  
   36.17  // Explicit C-heap memory management
    37.1 --- a/src/share/vm/memory/cardTableModRefBS.cpp	Mon Mar 11 12:56:00 2013 +0000
    37.2 +++ b/src/share/vm/memory/cardTableModRefBS.cpp	Mon Mar 11 15:37:10 2013 +0100
    37.3 @@ -694,7 +694,7 @@
    37.4      if (failed) {
    37.5        if (!failures) {
    37.6          tty->cr();
    37.7 -        tty->print_cr("== CT verification failed: ["PTR_FORMAT","PTR_FORMAT"]");
    37.8 +        tty->print_cr("== CT verification failed: ["PTR_FORMAT","PTR_FORMAT"]", start, end);
    37.9          tty->print_cr("==   %sexpecting value: %d",
   37.10                        (val_equals) ? "" : "not ", val);
   37.11          failures = true;
    38.1 --- a/src/share/vm/memory/cardTableRS.cpp	Mon Mar 11 12:56:00 2013 +0000
    38.2 +++ b/src/share/vm/memory/cardTableRS.cpp	Mon Mar 11 15:37:10 2013 +0100
    38.3 @@ -353,7 +353,7 @@
    38.4      assert(jp >= _begin && jp < _end,
    38.5             err_msg("Error: jp " PTR_FORMAT " should be within "
    38.6                     "[_begin, _end) = [" PTR_FORMAT "," PTR_FORMAT ")",
    38.7 -                   _begin, _end));
    38.8 +                   jp, _begin, _end));
    38.9      oop obj = oopDesc::load_decode_heap_oop(p);
   38.10      guarantee(obj == NULL || (HeapWord*)obj >= _boundary,
   38.11                err_msg("pointer " PTR_FORMAT " at " PTR_FORMAT " on "
    39.1 --- a/src/share/vm/oops/instanceKlass.cpp	Mon Mar 11 12:56:00 2013 +0000
    39.2 +++ b/src/share/vm/oops/instanceKlass.cpp	Mon Mar 11 15:37:10 2013 +0100
    39.3 @@ -2170,7 +2170,11 @@
    39.4        if (impl != NULL) {
    39.5          if (!impl->is_loader_alive(is_alive)) {
    39.6            // remove this guy
    39.7 -          *adr_implementor() = NULL;
    39.8 +          Klass** klass = adr_implementor();
    39.9 +          assert(klass != NULL, "null klass");
   39.10 +          if (klass != NULL) {
   39.11 +            *klass = NULL;
   39.12 +          }
   39.13          }
   39.14        }
   39.15      }
   39.16 @@ -3151,9 +3155,10 @@
   39.17    if (protection_domain() != NULL) {
   39.18      guarantee(protection_domain()->is_oop(), "should be oop");
   39.19    }
   39.20 -  if (host_klass() != NULL) {
   39.21 -    guarantee(host_klass()->is_metadata(), "should be in metaspace");
   39.22 -    guarantee(host_klass()->is_klass(), "should be klass");
   39.23 +  const Klass* host = host_klass();
   39.24 +  if (host != NULL) {
   39.25 +    guarantee(host->is_metadata(), "should be in metaspace");
   39.26 +    guarantee(host->is_klass(), "should be klass");
   39.27    }
   39.28    if (signers() != NULL) {
   39.29      guarantee(signers()->is_objArray(), "should be obj array");
    40.1 --- a/src/share/vm/oops/instanceKlass.hpp	Mon Mar 11 12:56:00 2013 +0000
    40.2 +++ b/src/share/vm/oops/instanceKlass.hpp	Mon Mar 11 15:37:10 2013 +0100
    40.3 @@ -536,7 +536,9 @@
    40.4      assert(is_anonymous(), "not anonymous");
    40.5      Klass** addr = (Klass**)adr_host_klass();
    40.6      assert(addr != NULL, "no reversed space");
    40.7 -    *addr = host;
    40.8 +    if (addr != NULL) {
    40.9 +      *addr = host;
   40.10 +    }
   40.11    }
   40.12    bool is_anonymous() const                {
   40.13      return (_misc_flags & _misc_is_anonymous) != 0;
   40.14 @@ -758,7 +760,10 @@
   40.15    void set_implementor(Klass* k) {
   40.16      assert(is_interface(), "not interface");
   40.17      Klass** addr = adr_implementor();
   40.18 -    *addr = k;
   40.19 +    assert(addr != NULL, "null addr");
   40.20 +    if (addr != NULL) {
   40.21 +      *addr = k;
   40.22 +    }
   40.23    }
   40.24  
   40.25    int  nof_implementors() const       {
    41.1 --- a/src/share/vm/oops/symbol.cpp	Mon Mar 11 12:56:00 2013 +0000
    41.2 +++ b/src/share/vm/oops/symbol.cpp	Mon Mar 11 15:37:10 2013 +0100
    41.3 @@ -1,5 +1,5 @@
    41.4  /*
    41.5 - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    41.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
    41.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    41.8   *
    41.9   * This code is free software; you can redistribute it and/or modify it
   41.10 @@ -27,6 +27,7 @@
   41.11  #include "classfile/altHashing.hpp"
   41.12  #include "classfile/classLoaderData.hpp"
   41.13  #include "oops/symbol.hpp"
   41.14 +#include "runtime/atomic.inline.hpp"
   41.15  #include "runtime/os.hpp"
   41.16  #include "memory/allocation.inline.hpp"
   41.17  #include "memory/resourceArea.hpp"
   41.18 @@ -210,6 +211,28 @@
   41.19    return AltHashing::murmur3_32(seed, (const jbyte*)as_C_string(), utf8_length());
   41.20  }
   41.21  
   41.22 +void Symbol::increment_refcount() {
   41.23 +  // Only increment the refcount if positive.  If negative either
   41.24 +  // overflow has occurred or it is a permanent symbol in a read only
   41.25 +  // shared archive.
   41.26 +  if (_refcount >= 0) {
   41.27 +    Atomic::inc(&_refcount);
   41.28 +    NOT_PRODUCT(Atomic::inc(&_total_count);)
   41.29 +  }
   41.30 +}
   41.31 +
   41.32 +void Symbol::decrement_refcount() {
   41.33 +  if (_refcount >= 0) {
   41.34 +    Atomic::dec(&_refcount);
   41.35 +#ifdef ASSERT
   41.36 +    if (_refcount < 0) {
   41.37 +      print();
   41.38 +      assert(false, "reference count underflow for symbol");
   41.39 +    }
   41.40 +#endif
   41.41 +  }
   41.42 +}
   41.43 +
   41.44  void Symbol::print_on(outputStream* st) const {
   41.45    if (this == NULL) {
   41.46      st->print_cr("NULL");
    42.1 --- a/src/share/vm/oops/symbol.hpp	Mon Mar 11 12:56:00 2013 +0000
    42.2 +++ b/src/share/vm/oops/symbol.hpp	Mon Mar 11 15:37:10 2013 +0100
    42.3 @@ -1,5 +1,5 @@
    42.4  /*
    42.5 - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
    42.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
    42.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    42.8   *
    42.9   * This code is free software; you can redistribute it and/or modify it
   42.10 @@ -27,7 +27,6 @@
   42.11  
   42.12  #include "utilities/utf8.hpp"
   42.13  #include "memory/allocation.hpp"
   42.14 -#include "runtime/atomic.hpp"
   42.15  
   42.16  // A Symbol is a canonicalized string.
   42.17  // All Symbols reside in global SymbolTable and are reference counted.
   42.18 @@ -150,8 +149,8 @@
   42.19  
   42.20    // Reference counting.  See comments above this class for when to use.
   42.21    int refcount() const      { return _refcount; }
   42.22 -  inline void increment_refcount();
   42.23 -  inline void decrement_refcount();
   42.24 +  void increment_refcount();
   42.25 +  void decrement_refcount();
   42.26  
   42.27    int byte_at(int index) const {
   42.28      assert(index >=0 && index < _length, "symbol index overflow");
   42.29 @@ -232,26 +231,4 @@
   42.30   return (((uintptr_t)this < (uintptr_t)other) ? -1
   42.31     : ((uintptr_t)this == (uintptr_t) other) ? 0 : 1);
   42.32  }
   42.33 -
   42.34 -inline void Symbol::increment_refcount() {
   42.35 -  // Only increment the refcount if positive.  If negative either
   42.36 -  // overflow has occurred or it is a permanent symbol in a read only
   42.37 -  // shared archive.
   42.38 -  if (_refcount >= 0) {
   42.39 -    Atomic::inc(&_refcount);
   42.40 -    NOT_PRODUCT(Atomic::inc(&_total_count);)
   42.41 -  }
   42.42 -}
   42.43 -
   42.44 -inline void Symbol::decrement_refcount() {
   42.45 -  if (_refcount >= 0) {
   42.46 -    Atomic::dec(&_refcount);
   42.47 -#ifdef ASSERT
   42.48 -    if (_refcount < 0) {
   42.49 -      print();
   42.50 -      assert(false, "reference count underflow for symbol");
   42.51 -    }
   42.52 -#endif
   42.53 -  }
   42.54 -}
   42.55  #endif // SHARE_VM_OOPS_SYMBOL_HPP
    43.1 --- a/src/share/vm/opto/c2_globals.hpp	Mon Mar 11 12:56:00 2013 +0000
    43.2 +++ b/src/share/vm/opto/c2_globals.hpp	Mon Mar 11 15:37:10 2013 +0100
    43.3 @@ -54,6 +54,12 @@
    43.4  
    43.5  #define C2_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct) \
    43.6                                                                              \
    43.7 +  develop(bool, StressLCM, false,                                           \
    43.8 +          "Randomize instruction scheduling in LCM")                        \
    43.9 +                                                                            \
   43.10 +  develop(bool, StressGCM, false,                                           \
   43.11 +          "Randomize instruction scheduling in GCM")                        \
   43.12 +                                                                            \
   43.13    notproduct(intx, CompileZapFirst, 0,                                      \
   43.14            "If +ZapDeadCompiledLocals, "                                     \
   43.15            "skip this many before compiling in zap calls")                   \
    44.1 --- a/src/share/vm/opto/compile.cpp	Mon Mar 11 12:56:00 2013 +0000
    44.2 +++ b/src/share/vm/opto/compile.cpp	Mon Mar 11 15:37:10 2013 +0100
    44.3 @@ -2899,6 +2899,13 @@
    44.4        }
    44.5      }
    44.6      break;
    44.7 +  case Op_MemBarStoreStore:
    44.8 +    // Break the link with AllocateNode: it is no longer useful and
    44.9 +    // confuses register allocation.
   44.10 +    if (n->req() > MemBarNode::Precedent) {
   44.11 +      n->set_req(MemBarNode::Precedent, top());
   44.12 +    }
   44.13 +    break;
   44.14    default:
   44.15      assert( !n->is_Call(), "" );
   44.16      assert( !n->is_Mem(), "" );
   44.17 @@ -3669,3 +3676,38 @@
   44.18      n->set_req(0, NULL);
   44.19    }
   44.20  }
   44.21 +
   44.22 +// Auxiliary method to support randomized stressing/fuzzing.
   44.23 +//
   44.24 +// This method can be called the arbitrary number of times, with current count
   44.25 +// as the argument. The logic allows selecting a single candidate from the
   44.26 +// running list of candidates as follows:
   44.27 +//    int count = 0;
   44.28 +//    Cand* selected = null;
   44.29 +//    while(cand = cand->next()) {
   44.30 +//      if (randomized_select(++count)) {
   44.31 +//        selected = cand;
   44.32 +//      }
   44.33 +//    }
   44.34 +//
   44.35 +// Including count equalizes the chances any candidate is "selected".
   44.36 +// This is useful when we don't have the complete list of candidates to choose
   44.37 +// from uniformly. In this case, we need to adjust the randomicity of the
   44.38 +// selection, or else we will end up biasing the selection towards the latter
   44.39 +// candidates.
   44.40 +//
   44.41 +// Quick back-envelope calculation shows that for the list of n candidates
   44.42 +// the equal probability for the candidate to persist as "best" can be
   44.43 +// achieved by replacing it with "next" k-th candidate with the probability
   44.44 +// of 1/k. It can be easily shown that by the end of the run, the
   44.45 +// probability for any candidate is converged to 1/n, thus giving the
   44.46 +// uniform distribution among all the candidates.
   44.47 +//
   44.48 +// We don't care about the domain size as long as (RANDOMIZED_DOMAIN / count) is large.
   44.49 +#define RANDOMIZED_DOMAIN_POW 29
   44.50 +#define RANDOMIZED_DOMAIN (1 << RANDOMIZED_DOMAIN_POW)
   44.51 +#define RANDOMIZED_DOMAIN_MASK ((1 << (RANDOMIZED_DOMAIN_POW + 1)) - 1)
   44.52 +bool Compile::randomized_select(int count) {
   44.53 +  assert(count > 0, "only positive");
   44.54 +  return (os::random() & RANDOMIZED_DOMAIN_MASK) < (RANDOMIZED_DOMAIN / count);
   44.55 +}
    45.1 --- a/src/share/vm/opto/compile.hpp	Mon Mar 11 12:56:00 2013 +0000
    45.2 +++ b/src/share/vm/opto/compile.hpp	Mon Mar 11 15:37:10 2013 +0100
    45.3 @@ -678,6 +678,7 @@
    45.4    void         record_dead_node(uint idx)  { if (_dead_node_list.test_set(idx)) return;
    45.5                                               _dead_node_count++;
    45.6                                             }
    45.7 +  bool         is_dead_node(uint idx)      { return _dead_node_list.test(idx) != 0; }
    45.8    uint         dead_node_count()           { return _dead_node_count; }
    45.9    void         reset_dead_node_list()      { _dead_node_list.Reset();
   45.10                                               _dead_node_count = 0;
   45.11 @@ -1086,6 +1087,9 @@
   45.12  
   45.13    // Definitions of pd methods
   45.14    static void pd_compiler2_init();
   45.15 +
   45.16 +  // Auxiliary method for randomized fuzzing/stressing
   45.17 +  static bool randomized_select(int count);
   45.18  };
   45.19  
   45.20  #endif // SHARE_VM_OPTO_COMPILE_HPP
    46.1 --- a/src/share/vm/opto/gcm.cpp	Mon Mar 11 12:56:00 2013 +0000
    46.2 +++ b/src/share/vm/opto/gcm.cpp	Mon Mar 11 15:37:10 2013 +0100
    46.3 @@ -1046,6 +1046,8 @@
    46.4    }
    46.5  #endif
    46.6  
    46.7 +  int cand_cnt = 0;  // number of candidates tried
    46.8 +
    46.9    // Walk up the dominator tree from LCA (Lowest common ancestor) to
   46.10    // the earliest legal location.  Capture the least execution frequency.
   46.11    while (LCA != early) {
   46.12 @@ -1071,8 +1073,11 @@
   46.13          LCA->_pre_order, LCA->_nodes[0]->_idx, start_lat, end_idx, end_lat, LCA_freq);
   46.14      }
   46.15  #endif
   46.16 +    cand_cnt++;
   46.17      if (LCA_freq < least_freq              || // Better Frequency
   46.18 -        ( !in_latency                   &&    // No block containing latency
   46.19 +        (StressGCM && Compile::randomized_select(cand_cnt)) || // Should be randomly accepted in stress mode
   46.20 +         (!StressGCM                    &&    // Otherwise, choose with latency
   46.21 +          !in_latency                   &&    // No block containing latency
   46.22            LCA_freq < least_freq * delta &&    // No worse frequency
   46.23            target >= end_lat             &&    // within latency range
   46.24            !self->is_iteratively_computed() )  // But don't hoist IV increments
   46.25 @@ -1210,7 +1215,8 @@
   46.26      }
   46.27  
   46.28      // If there is no opportunity to hoist, then we're done.
   46.29 -    bool try_to_hoist = (LCA != early);
   46.30 +    // In stress mode, try to hoist even the single operations.
   46.31 +    bool try_to_hoist = StressGCM || (LCA != early);
   46.32  
   46.33      // Must clone guys stay next to use; no hoisting allowed.
   46.34      // Also cannot hoist guys that alter memory or are otherwise not
    47.1 --- a/src/share/vm/opto/lcm.cpp	Mon Mar 11 12:56:00 2013 +0000
    47.2 +++ b/src/share/vm/opto/lcm.cpp	Mon Mar 11 15:37:10 2013 +0100
    47.3 @@ -421,6 +421,7 @@
    47.4    uint latency = 0; // Bigger is scheduled first
    47.5    uint score   = 0; // Bigger is better
    47.6    int idx = -1;     // Index in worklist
    47.7 +  int cand_cnt = 0; // Candidate count
    47.8  
    47.9    for( uint i=0; i<cnt; i++ ) { // Inspect entire worklist
   47.10      // Order in worklist is used to break ties.
   47.11 @@ -503,11 +504,14 @@
   47.12      uint n_score   = n->req();   // Many inputs get high score to break ties
   47.13  
   47.14      // Keep best latency found
   47.15 -    if( choice < n_choice ||
   47.16 -        ( choice == n_choice &&
   47.17 -          ( latency < n_latency ||
   47.18 -            ( latency == n_latency &&
   47.19 -              ( score < n_score ))))) {
   47.20 +    cand_cnt++;
   47.21 +    if (choice < n_choice ||
   47.22 +        (choice == n_choice &&
   47.23 +         ((StressLCM && Compile::randomized_select(cand_cnt)) ||
   47.24 +          (!StressLCM &&
   47.25 +           (latency < n_latency ||
   47.26 +            (latency == n_latency &&
   47.27 +             (score < n_score))))))) {
   47.28        choice  = n_choice;
   47.29        latency = n_latency;
   47.30        score   = n_score;
    48.1 --- a/src/share/vm/opto/macro.cpp	Mon Mar 11 12:56:00 2013 +0000
    48.2 +++ b/src/share/vm/opto/macro.cpp	Mon Mar 11 15:37:10 2013 +0100
    48.3 @@ -1101,12 +1101,6 @@
    48.4    Node* klass_node        = alloc->in(AllocateNode::KlassNode);
    48.5    Node* initial_slow_test = alloc->in(AllocateNode::InitialTest);
    48.6  
    48.7 -  Node* storestore = alloc->storestore();
    48.8 -  if (storestore != NULL) {
    48.9 -    // Break this link that is no longer useful and confuses register allocation
   48.10 -    storestore->set_req(MemBarNode::Precedent, top());
   48.11 -  }
   48.12 -
   48.13    assert(ctrl != NULL, "must have control");
   48.14    // We need a Region and corresponding Phi's to merge the slow-path and fast-path results.
   48.15    // they will not be used if "always_slow" is set
   48.16 @@ -1324,7 +1318,7 @@
   48.17          // No InitializeNode or no stores captured by zeroing
   48.18          // elimination. Simply add the MemBarStoreStore after object
   48.19          // initialization.
   48.20 -        MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot, fast_oop_rawmem);
   48.21 +        MemBarNode* mb = MemBarNode::make(C, Op_MemBarStoreStore, Compile::AliasIdxBot);
   48.22          transform_later(mb);
   48.23  
   48.24          mb->init_req(TypeFunc::Memory, fast_oop_rawmem);
    49.1 --- a/src/share/vm/opto/memnode.cpp	Mon Mar 11 12:56:00 2013 +0000
    49.2 +++ b/src/share/vm/opto/memnode.cpp	Mon Mar 11 15:37:10 2013 +0100
    49.3 @@ -238,7 +238,7 @@
    49.4      return this;
    49.5    ctl = in(MemNode::Control);
    49.6    // Don't bother trying to transform a dead node
    49.7 -  if( ctl && ctl->is_top() )  return NodeSentinel;
    49.8 +  if (ctl && ctl->is_top())  return NodeSentinel;
    49.9  
   49.10    PhaseIterGVN *igvn = phase->is_IterGVN();
   49.11    // Wait if control on the worklist.
   49.12 @@ -262,8 +262,8 @@
   49.13    }
   49.14    // Ignore if memory is dead, or self-loop
   49.15    Node *mem = in(MemNode::Memory);
   49.16 -  if( phase->type( mem ) == Type::TOP ) return NodeSentinel; // caller will return NULL
   49.17 -  assert( mem != this, "dead loop in MemNode::Ideal" );
   49.18 +  if (phase->type( mem ) == Type::TOP) return NodeSentinel; // caller will return NULL
   49.19 +  assert(mem != this, "dead loop in MemNode::Ideal");
   49.20  
   49.21    if (can_reshape && igvn != NULL && igvn->_worklist.member(mem)) {
   49.22      // This memory slice may be dead.
   49.23 @@ -273,12 +273,12 @@
   49.24    }
   49.25  
   49.26    Node *address = in(MemNode::Address);
   49.27 -  const Type *t_adr = phase->type( address );
   49.28 -  if( t_adr == Type::TOP )              return NodeSentinel; // caller will return NULL
   49.29 -
   49.30 -  if( can_reshape && igvn != NULL &&
   49.31 +  const Type *t_adr = phase->type(address);
   49.32 +  if (t_adr == Type::TOP)              return NodeSentinel; // caller will return NULL
   49.33 +
   49.34 +  if (can_reshape && igvn != NULL &&
   49.35        (igvn->_worklist.member(address) ||
   49.36 -       igvn->_worklist.size() > 0 && (phase->type(address) != adr_type())) ) {
   49.37 +       igvn->_worklist.size() > 0 && (t_adr != adr_type())) ) {
   49.38      // The address's base and type may change when the address is processed.
   49.39      // Delay this mem node transformation until the address is processed.
   49.40      phase->is_IterGVN()->_worklist.push(this);
   49.41 @@ -288,7 +288,7 @@
   49.42    // Do NOT remove or optimize the next lines: ensure a new alias index
   49.43    // is allocated for an oop pointer type before Escape Analysis.
   49.44    // Note: C++ will not remove it since the call has side effect.
   49.45 -  if ( t_adr->isa_oopptr() ) {
   49.46 +  if (t_adr->isa_oopptr()) {
   49.47      int alias_idx = phase->C->get_alias_index(t_adr->is_ptr());
   49.48    }
   49.49  
   49.50 @@ -296,6 +296,26 @@
   49.51    Node* base = NULL;
   49.52    if (address->is_AddP())
   49.53      base = address->in(AddPNode::Base);
   49.54 +  if (base != NULL && phase->type(base)->higher_equal(TypePtr::NULL_PTR) &&
   49.55 +      !t_adr->isa_rawptr()) {
   49.56 +    // Note: raw address has TOP base and top->higher_equal(TypePtr::NULL_PTR) is true.
   49.57 +    Compile* C = phase->C;
   49.58 +    tty->cr();
   49.59 +    tty->print_cr("===== NULL+offs not RAW address =====");
   49.60 +    if (C->is_dead_node(this->_idx))    tty->print_cr("'this' is dead");
   49.61 +    if ((ctl != NULL) && C->is_dead_node(ctl->_idx)) tty->print_cr("'ctl' is dead");
   49.62 +    if (C->is_dead_node(mem->_idx))     tty->print_cr("'mem' is dead");
   49.63 +    if (C->is_dead_node(address->_idx)) tty->print_cr("'address' is dead");
   49.64 +    if (C->is_dead_node(base->_idx))    tty->print_cr("'base' is dead");
   49.65 +    tty->cr();
   49.66 +    base->dump(1);
   49.67 +    tty->cr();
   49.68 +    this->dump(2);
   49.69 +    tty->print("this->adr_type():     "); adr_type()->dump(); tty->cr();
   49.70 +    tty->print("phase->type(address): "); t_adr->dump(); tty->cr();
   49.71 +    tty->print("phase->type(base):    "); phase->type(address)->dump(); tty->cr();
   49.72 +    tty->cr();
   49.73 +  }
   49.74    assert(base == NULL || t_adr->isa_rawptr() ||
   49.75          !phase->type(base)->higher_equal(TypePtr::NULL_PTR), "NULL+offs not RAW address?");
   49.76  #endif
    50.1 --- a/src/share/vm/prims/jvmtiEnter.xsl	Mon Mar 11 12:56:00 2013 +0000
    50.2 +++ b/src/share/vm/prims/jvmtiEnter.xsl	Mon Mar 11 15:37:10 2013 +0100
    50.3 @@ -773,7 +773,7 @@
    50.4  </xsl:text>
    50.5      <xsl:apply-templates select=".." mode="traceError">     
    50.6        <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
    50.7 -      <xsl:with-param name="comment"> - jthread resolved to NULL - jthread = %0x%x</xsl:with-param>
    50.8 +      <xsl:with-param name="comment"> - jthread resolved to NULL - jthread = 0x%x</xsl:with-param>
    50.9        <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   50.10      </xsl:apply-templates>
   50.11      <xsl:text>
   50.12 @@ -782,7 +782,7 @@
   50.13  </xsl:text>
   50.14      <xsl:apply-templates select=".." mode="traceError">     
   50.15        <xsl:with-param name="err">JVMTI_ERROR_INVALID_THREAD</xsl:with-param>
   50.16 -      <xsl:with-param name="comment"> - oop is not a thread - jthread = %0x%x</xsl:with-param>
   50.17 +      <xsl:with-param name="comment"> - oop is not a thread - jthread = 0x%x</xsl:with-param>
   50.18        <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   50.19      </xsl:apply-templates>
   50.20      <xsl:text>
   50.21 @@ -794,7 +794,7 @@
   50.22        <xsl:with-param name="err">
   50.23          <xsl:text>JVMTI_ERROR_THREAD_NOT_ALIVE</xsl:text>
   50.24        </xsl:with-param>
   50.25 -      <xsl:with-param name="comment"> - not a Java thread - jthread = %0x%x</xsl:with-param>
   50.26 +      <xsl:with-param name="comment"> - not a Java thread - jthread = 0x%x</xsl:with-param>
   50.27        <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   50.28      </xsl:apply-templates>
   50.29      <xsl:text>
   50.30 @@ -838,7 +838,7 @@
   50.31  </xsl:text>
   50.32      <xsl:apply-templates select=".." mode="traceError">     
   50.33        <xsl:with-param name="err">JVMTI_ERROR_ILLEGAL_ARGUMENT</xsl:with-param>
   50.34 -      <xsl:with-param name="comment"> - negative depth - jthread = %0x%x</xsl:with-param>
   50.35 +      <xsl:with-param name="comment"> - negative depth - jthread = 0x%x</xsl:with-param>
   50.36        <xsl:with-param name="extraValue">, <xsl:value-of select="$name"/></xsl:with-param>
   50.37      </xsl:apply-templates>
   50.38      <xsl:text>
    51.1 --- a/src/share/vm/prims/jvmtiEnvBase.cpp	Mon Mar 11 12:56:00 2013 +0000
    51.2 +++ b/src/share/vm/prims/jvmtiEnvBase.cpp	Mon Mar 11 15:37:10 2013 +0100
    51.3 @@ -997,13 +997,19 @@
    51.4        // move our object at this point. However, our owner value is safe
    51.5        // since it is either the Lock word on a stack or a JavaThread *.
    51.6        owning_thread = Threads::owning_thread_from_monitor_owner(owner, !at_safepoint);
    51.7 -      assert(owning_thread != NULL, "sanity check");
    51.8 -      if (owning_thread != NULL) {  // robustness
    51.9 +      // Cannot assume (owning_thread != NULL) here because this function
   51.10 +      // may not have been called at a safepoint and the owning_thread
   51.11 +      // might not be suspended.
   51.12 +      if (owning_thread != NULL) {
   51.13          // The monitor's owner either has to be the current thread, at safepoint
   51.14          // or it has to be suspended. Any of these conditions will prevent both
   51.15          // contending and waiting threads from modifying the state of
   51.16          // the monitor.
   51.17          if (!at_safepoint && !JvmtiEnv::is_thread_fully_suspended(owning_thread, true, &debug_bits)) {
   51.18 +          // Don't worry! This return of JVMTI_ERROR_THREAD_NOT_SUSPENDED
   51.19 +          // will not make it back to the JVM/TI agent. The error code will
   51.20 +          // get intercepted in JvmtiEnv::GetObjectMonitorUsage() which
   51.21 +          // will retry the call via a VM_GetObjectMonitorUsage VM op.
   51.22            return JVMTI_ERROR_THREAD_NOT_SUSPENDED;
   51.23          }
   51.24          HandleMark hm;
    52.1 --- a/src/share/vm/runtime/frame.cpp	Mon Mar 11 12:56:00 2013 +0000
    52.2 +++ b/src/share/vm/runtime/frame.cpp	Mon Mar 11 15:37:10 2013 +0100
    52.3 @@ -1070,7 +1070,12 @@
    52.4  
    52.5    // First consult the ADLC on where it puts parameter 0 for this signature.
    52.6    VMReg reg = SharedRuntime::name_for_receiver();
    52.7 -  oop r = *caller.oopmapreg_to_location(reg, reg_map);
    52.8 +  oop* oop_adr = caller.oopmapreg_to_location(reg, reg_map);
    52.9 +  if (oop_adr == NULL) {
   52.10 +    guarantee(oop_adr != NULL, "bad register save location");
   52.11 +    return NULL;
   52.12 +  }
   52.13 +  oop r = *oop_adr;
   52.14    assert(Universe::heap()->is_in_or_null(r), err_msg("bad receiver: " INTPTR_FORMAT " (" INTX_FORMAT ")", (intptr_t) r, (intptr_t) r));
   52.15    return r;
   52.16  }
    53.1 --- a/src/share/vm/runtime/synchronizer.cpp	Mon Mar 11 12:56:00 2013 +0000
    53.2 +++ b/src/share/vm/runtime/synchronizer.cpp	Mon Mar 11 15:37:10 2013 +0100
    53.3 @@ -813,6 +813,7 @@
    53.4    }
    53.5  
    53.6    if (owner != NULL) {
    53.7 +    // owning_thread_from_monitor_owner() may also return NULL here
    53.8      return Threads::owning_thread_from_monitor_owner(owner, doLock);
    53.9    }
   53.10  
    54.1 --- a/src/share/vm/runtime/thread.cpp	Mon Mar 11 12:56:00 2013 +0000
    54.2 +++ b/src/share/vm/runtime/thread.cpp	Mon Mar 11 15:37:10 2013 +0100
    54.3 @@ -4285,7 +4285,9 @@
    54.4        if (owner == (address)p) return p;
    54.5      }
    54.6    }
    54.7 -  assert(UseHeavyMonitors == false, "Did not find owning Java thread with UseHeavyMonitors enabled");
    54.8 +  // Cannot assert on lack of success here since this function may be
    54.9 +  // used by code that is trying to report useful problem information
   54.10 +  // like deadlock detection.
   54.11    if (UseHeavyMonitors) return NULL;
   54.12  
   54.13    //
   54.14 @@ -4303,7 +4305,7 @@
   54.15        }
   54.16      }
   54.17    }
   54.18 -  assert(the_owner != NULL, "Did not find owning Java thread for lock word address");
   54.19 +  // cannot assert on lack of success here; see above comment
   54.20    return the_owner;
   54.21  }
   54.22  
    55.1 --- a/src/share/vm/services/memReporter.cpp	Mon Mar 11 12:56:00 2013 +0000
    55.2 +++ b/src/share/vm/services/memReporter.cpp	Mon Mar 11 15:37:10 2013 +0100
    55.3 @@ -419,7 +419,7 @@
    55.4        _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset);
    55.5        _output->print("%28s", " ");
    55.6      } else {
    55.7 -      _output->print("[" PTR_FORMAT "]%18s", " ");
    55.8 +      _output->print("[" PTR_FORMAT "]%18s", pc, " ");
    55.9      }
   55.10  
   55.11      _output->print_cr("(mmap: reserved=%d%s, committed=%d%s)",
   55.12 @@ -596,7 +596,7 @@
   55.13          _output->print_cr("[" PTR_FORMAT "] %s+0x%x", pc, buf, offset);
   55.14          _output->print("%28s", " ");
   55.15        } else {
   55.16 -        _output->print("[" PTR_FORMAT "]%18s", " ");
   55.17 +        _output->print("[" PTR_FORMAT "]%18s", pc, " ");
   55.18        }
   55.19      }
   55.20  
    56.1 --- a/src/share/vm/services/threadService.cpp	Mon Mar 11 12:56:00 2013 +0000
    56.2 +++ b/src/share/vm/services/threadService.cpp	Mon Mar 11 15:37:10 2013 +0100
    56.3 @@ -1,5 +1,5 @@
    56.4  /*
    56.5 - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
    56.6 + * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
    56.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    56.8   *
    56.9   * This code is free software; you can redistribute it and/or modify it
   56.10 @@ -327,8 +327,28 @@
   56.11      while (waitingToLockMonitor != NULL || waitingToLockBlocker != NULL) {
   56.12        cycle->add_thread(currentThread);
   56.13        if (waitingToLockMonitor != NULL) {
   56.14 -        currentThread = Threads::owning_thread_from_monitor_owner((address)waitingToLockMonitor->owner(),
   56.15 -                                                                  false /* no locking needed */);
   56.16 +        currentThread = Threads::owning_thread_from_monitor_owner(
   56.17 +                          (address)waitingToLockMonitor->owner(),
   56.18 +                          false /* no locking needed */);
   56.19 +        if (currentThread == NULL) {
   56.20 +          // This function is called at a safepoint so the JavaThread
   56.21 +          // that owns waitingToLockMonitor should be findable, but
   56.22 +          // if it is not findable, then the previous currentThread is
   56.23 +          // blocked permanently. We record this as a deadlock.
   56.24 +          num_deadlocks++;
   56.25 +
   56.26 +          cycle->set_deadlock(true);
   56.27 +
   56.28 +          // add this cycle to the deadlocks list
   56.29 +          if (deadlocks == NULL) {
   56.30 +            deadlocks = cycle;
   56.31 +          } else {
   56.32 +            last->set_next(cycle);
   56.33 +          }
   56.34 +          last = cycle;
   56.35 +          cycle = new DeadlockCycle();
   56.36 +          break;
   56.37 +        }
   56.38        } else {
   56.39          if (concurrent_locks) {
   56.40            if (waitingToLockBlocker->is_a(SystemDictionary::abstract_ownable_synchronizer_klass())) {
   56.41 @@ -841,7 +861,17 @@
   56.42          owner_desc = " (JVMTI raw monitor),\n  which is held by";
   56.43        }
   56.44        currentThread = Threads::owning_thread_from_monitor_owner(
   56.45 -        (address)waitingToLockMonitor->owner(), false /* no locking needed */);
   56.46 +                        (address)waitingToLockMonitor->owner(),
   56.47 +                        false /* no locking needed */);
   56.48 +      if (currentThread == NULL) {
   56.49 +        // The deadlock was detected at a safepoint so the JavaThread
   56.50 +        // that owns waitingToLockMonitor should be findable, but
   56.51 +        // if it is not findable, then the previous currentThread is
   56.52 +        // blocked permanently.
   56.53 +        st->print("%s UNKNOWN_owner_addr=" PTR_FORMAT, owner_desc,
   56.54 +                  (address)waitingToLockMonitor->owner());
   56.55 +        continue;
   56.56 +      }
   56.57      } else {
   56.58        st->print("  waiting for ownable synchronizer " INTPTR_FORMAT ", (a %s)",
   56.59                  (address)waitingToLockBlocker,
    57.1 --- a/src/share/vm/utilities/numberSeq.cpp	Mon Mar 11 12:56:00 2013 +0000
    57.2 +++ b/src/share/vm/utilities/numberSeq.cpp	Mon Mar 11 15:37:10 2013 +0100
    57.3 @@ -245,7 +245,7 @@
    57.4  
    57.5  void NumberSeq::dump_on(outputStream* s) {
    57.6    AbsSeq::dump_on(s);
    57.7 -  s->print_cr("\t\t _last = %7.3f, _maximum = %7.3f");
    57.8 +  s->print_cr("\t\t _last = %7.3f, _maximum = %7.3f", _last, _maximum);
    57.9  }
   57.10  
   57.11  void TruncatedSeq::dump_on(outputStream* s) {
    58.1 --- a/test/compiler/6431242/Test.java	Mon Mar 11 12:56:00 2013 +0000
    58.2 +++ b/test/compiler/6431242/Test.java	Mon Mar 11 15:37:10 2013 +0100
    58.3 @@ -25,7 +25,7 @@
    58.4  /*
    58.5   * @test
    58.6   * @bug 6431242
    58.7 - * @run main/othervm -server -XX:+PrintCompilation Test
    58.8 + * @run main Test
    58.9   */
   58.10  
   58.11  public class Test{
    59.1 --- a/test/compiler/6589834/Test_ia32.java	Mon Mar 11 12:56:00 2013 +0000
    59.2 +++ b/test/compiler/6589834/Test_ia32.java	Mon Mar 11 15:37:10 2013 +0100
    59.3 @@ -26,7 +26,7 @@
    59.4   * @bug 6589834
    59.5   * @summary deoptimization problem with -XX:+DeoptimizeALot
    59.6   *
    59.7 - * @run main/othervm -server Test_ia32
    59.8 + * @run main Test_ia32
    59.9   */
   59.10  
   59.11  /***************************************************************************************
    60.1 --- a/test/compiler/6636138/Test1.java	Mon Mar 11 12:56:00 2013 +0000
    60.2 +++ b/test/compiler/6636138/Test1.java	Mon Mar 11 15:37:10 2013 +0100
    60.3 @@ -26,7 +26,7 @@
    60.4   * @bug 6636138
    60.5   * @summary SuperWord::co_locate_pack(Node_List* p) generates memory graph that leads to memory order violation.
    60.6   *
    60.7 - * @run main/othervm -server -Xbatch -XX:CompileOnly=Test1.init Test1
    60.8 + * @run main/othervm -Xbatch -XX:CompileOnly=Test1.init Test1
    60.9   */
   60.10  
   60.11  public class Test1 {
    61.1 --- a/test/compiler/6636138/Test2.java	Mon Mar 11 12:56:00 2013 +0000
    61.2 +++ b/test/compiler/6636138/Test2.java	Mon Mar 11 15:37:10 2013 +0100
    61.3 @@ -26,7 +26,7 @@
    61.4   * @bug 6636138
    61.5   * @summary SuperWord::co_locate_pack(Node_List* p) generates memory graph that leads to memory order violation.
    61.6   *
    61.7 - * @run main/othervm -server -Xbatch -XX:CompileOnly=Test2.shift Test2
    61.8 + * @run main/othervm -Xbatch -XX:CompileOnly=Test2.shift Test2
    61.9   */
   61.10  
   61.11  public class Test2 {
    62.1 --- a/test/compiler/6795161/Test.java	Mon Mar 11 12:56:00 2013 +0000
    62.2 +++ b/test/compiler/6795161/Test.java	Mon Mar 11 15:37:10 2013 +0100
    62.3 @@ -26,7 +26,7 @@
    62.4   * @test
    62.5   * @bug 6795161
    62.6   * @summary Escape analysis leads to data corruption
    62.7 - * @run main/othervm -server  -XX:+IgnoreUnrecognizedVMOptions -Xcomp -XX:CompileOnly=Test -XX:+DoEscapeAnalysis Test
    62.8 + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -Xcomp -XX:CompileOnly=Test -XX:+DoEscapeAnalysis Test
    62.9   */
   62.10  
   62.11  class Test_Class_1 {
    63.1 --- a/test/compiler/6946040/TestCharShortByteSwap.java	Mon Mar 11 12:56:00 2013 +0000
    63.2 +++ b/test/compiler/6946040/TestCharShortByteSwap.java	Mon Mar 11 15:37:10 2013 +0100
    63.3 @@ -26,7 +26,7 @@
    63.4   * @test
    63.5   * @bug 6946040
    63.6   * @summary Tests Character/Short.reverseBytes and their intrinsics implementation in the server compiler
    63.7 - * @run main/othervm -Xbatch -server -XX:CompileOnly=.testChar,.testShort TestCharShortByteSwap
    63.8 + * @run main/othervm -Xbatch -XX:CompileOnly=.testChar,.testShort TestCharShortByteSwap
    63.9   */
   63.10  
   63.11  // This test must run without any command line arguments.
    64.1 --- a/test/compiler/7068051/Test7068051.sh	Mon Mar 11 12:56:00 2013 +0000
    64.2 +++ b/test/compiler/7068051/Test7068051.sh	Mon Mar 11 15:37:10 2013 +0100
    64.3 @@ -45,5 +45,5 @@
    64.4  
    64.5  ${TESTJAVA}/bin/javac -d . Test7068051.java
    64.6  
    64.7 -${TESTJAVA}/bin/java -showversion -Xbatch ${TESTVMOPTS} Test7068051 foo.jar
    64.8 +${TESTJAVA}/bin/java ${TESTVMOPTS} -showversion -Xbatch Test7068051 foo.jar
    64.9  
    65.1 --- a/test/compiler/8000805/Test8000805.java	Mon Mar 11 12:56:00 2013 +0000
    65.2 +++ b/test/compiler/8000805/Test8000805.java	Mon Mar 11 15:37:10 2013 +0100
    65.3 @@ -26,7 +26,7 @@
    65.4   * @bug 8000805
    65.5   * @summary JMM issue: short loads are non-atomic
    65.6   *
    65.7 - * @run main/othervm -server -XX:-TieredCompilation -Xcomp -XX:+PrintCompilation -XX:CompileOnly=Test8000805.loadS2LmaskFF,Test8000805.loadS2Lmask16,Test8000805.loadS2Lmask13,Test8000805.loadUS_signExt,Test8000805.loadB2L_mask8 Test8000805
    65.8 + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Xcomp -XX:+PrintCompilation -XX:CompileOnly=Test8000805.loadS2LmaskFF,Test8000805.loadS2Lmask16,Test8000805.loadS2Lmask13,Test8000805.loadUS_signExt,Test8000805.loadB2L_mask8 Test8000805
    65.9   */
   65.10  
   65.11  public class Test8000805 {

mercurial