Hmm, reading javadoc for Thread.stop(Throwable):
"If there is a security manager installed, the checkAccess method of this thread is called, which may result in a SecurityException being raised (in the current thread).
If this thread is different from the current thread (that is, the current thread is trying to stop a thread other than itself) or obj is not an instance of ThreadDeath, the security manager's checkPermission method (with the RuntimePermission("stopThread") argument) is called in addition. Again, this may result in throwing a SecurityException (in the current thread).
If the argument obj is null, a NullPointerException is thrown (in the current thread). "
Current impl of DRLVM does not follow this description.
Note, checkPermission() for "stopThread" is called only for non-ThreadDeath throwables; and the documentation for stop() requires throwing exactly ThreadDeath instance. So there is inconsistency either in documentation or in impl of the overloaded stop() methods. I may guess stop() is equvalent of stop(new ThreadDeath()) and this is a hole in the javadoc.
PS. I suspect order of exceptions currently is incompatible in DRLVM: NPE should be thrown last, not first.