JDK-4496456 : Segmentation fault introspecting ((Throwable) obj).backtrace[0][0]
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 1.3.1,1.4.0
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • OS: linux,solaris_7
  • CPU: x86,sparc
  • Submitted: 2001-08-25
  • Updated: 2014-02-06
  • Resolved: 2002-02-24
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.4.1 hopperFixed
Related Reports
Relates :  
Relates :  
Relates :  
Relates :  
Description

Name: rmT116609			Date: 08/24/2001


java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)


In constructing a generic object introspection tool for debugging purposes, we
found that retrieving the class name for the object at throwable.backtrace[0][0]
consistently segfaults (where throwable is an instance of java.lang.Throwable).
(see comments)

A minimal test case:

import java.lang.reflect.*;

class ThrowableIntrospectionSegfault {
    static public void main( String[] argv)
    {
        //  Construct a throwable object.
        Throwable throwable = new Throwable();
        throwable.fillInStackTrace();
        
        //  Retrieve a reflection handle to the private backtrace field.
        Class class1 = throwable.getClass();
        Field field;
        try {
            field = class1.getDeclaredField("backtrace");
        }
        catch (NoSuchFieldException e) {
            System.err.println("Can't retrieve field handle Throwable.backtrace: " + e.toString());
            return;
        }
        field.setAccessible(true);

        //  Retrieve the value of the backtrace field.
        Object backtrace;
        try {
            backtrace = field.get(throwable);
        }
        catch (IllegalAccessException e) {
            System.err.println( "Can't retrieve field value for Throwable.backtrace: " + e.toString());
            return;
        }

        //  Retrieve the class of throwable.backtrace[0][0].
        Class class2 = ((Object[]) ((Object[]) backtrace)[0])[0].getClass();
        
        //  Segfault occurs while executing this line, to retrieve the name of
        //  this class.
        String class2Name = class2.getName();
        
        System.err.println("class2Name=" + class2Name);
    }
}


The behavior I would expect for this test program would be anything aside
from a segmentation fault. :) In the ideal case, this program would reach
this line:

    System.err.println("class2Name=" + class2Name);

And print

    class2Name=<some value>


If the alternative is a segmentation fault, it would have been confusing,
but tolerable, for this line to raise an IllegalAccessException:

    backtrace = field.get(throwable);



With JDK1.3.1:
-----------
Unexpected Signal : 11 occurred at PC=0x4020e5e1
Function name=as_C_string__C13symbolOopDesc
Library=/usr/java/jdk1.3.1/jre/lib/i386/client/libjvm.so

Current Java thread:
        at java.lang.Class.getName(Native Method)
        at ThrowableIntrospectionSegfault.main(ThrowableIntrospectionSegfault.java:37)

Dynamic libraries:
08048000-0804c000 r-xp 00000000 03:06 1240713    /usr/java/jdk1.3.1/bin/i386/native_threads/java
0804c000-0804d000 rw-p 00003000 03:06 1240713    /usr/java/jdk1.3.1/bin/i386/native_threads/java
40000000-40016000 r-xp 00000000 03:06 244823     /lib/ld-2.2.2.so
40016000-40017000 rw-p 00015000 03:06 244823     /lib/ld-2.2.2.so
40018000-40019000 r--p 00000000 03:06 1762565    /usr/lib/locale/en_US/LC_IDENTIFICATION
40019000-4001a000 r--p 00000000 03:06 1762566    /usr/lib/locale/en_US/LC_MEASUREMENT
4001a000-4001b000 r--p 00000000 03:06 1762569    /usr/lib/locale/en_US/LC_TELEPHONE
4001b000-4001c000 r--p 00000000 03:06 1762564    /usr/lib/locale/en_US/LC_ADDRESS
4001c000-4001d000 r--p 00000000 03:06 1762567    /usr/lib/locale/en_US/LC_NAME
4001d000-4001e000 r--p 00000000 03:06 1762568    /usr/lib/locale/en_US/LC_PAPER
4001e000-4001f000 r--p 00000000 03:06 1632012    /usr/lib/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES
4001f000-40020000 r--p 00000000 03:06 864968     /usr/lib/locale/en_US/LC_MONETARY
40020000-40026000 r--p 00000000 03:06 571211     /usr/lib/locale/en_US/LC_COLLATE
40026000-40027000 r--p 00000000 03:06 1762570    /usr/lib/locale/en_US/LC_TIME
40027000-40034000 r-xp 00000000 03:06 1729951    /lib/i686/libpthread-0.9.so
40034000-4003c000 rw-p 0000c000 03:06 1729951    /lib/i686/libpthread-0.9.so
4003c000-40045000 r-xp 00000000 03:06 946930     /usr/java/jdk1.3.1/jre/lib/i386/native_threads/libhpi.so
40045000-40046000 rw-p 00008000 03:06 946930     /usr/java/jdk1.3.1/jre/lib/i386/native_threads/libhpi.so
40046000-402ad000 r-xp 00000000 03:06 555551     /usr/java/jdk1.3.1/jre/lib/i386/client/libjvm.so
402ad000-40413000 rw-p 00266000 03:06 555551     /usr/java/jdk1.3.1/jre/lib/i386/client/libjvm.so
4042a000-4042d000 r-xp 00000000 03:06 244836     /lib/libdl-2.2.2.so
4042d000-4042e000 rw-p 00002000 03:06 244836     /lib/libdl-2.2.2.so
4042e000-40554000 r-xp 00000000 03:06 1729947    /lib/i686/libc-2.2.2.so
40554000-4055a000 rw-p 00125000 03:06 1729947    /lib/i686/libc-2.2.2.so
4055e000-40571000 r-xp 00000000 03:06 244841     /lib/libnsl-2.2.2.so
40571000-40573000 rw-p 00012000 03:06 244841     /lib/libnsl-2.2.2.so
40575000-40598000 r-xp 00000000 03:06 1729949    /lib/i686/libm-2.2.2.so
40598000-40599000 rw-p 00022000 03:06 1729949    /lib/i686/libm-2.2.2.so
4059a000-405ce000 r-xp 00000000 03:06 636514     /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
405ce000-405da000 rw-p 00033000 03:06 636514     /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
405dc000-405ed000 r-xp 00000000 03:06 1518265    /usr/java/jdk1.3.1/jre/lib/i386/libverify.so
405ed000-405ef000 rw-p 00010000 03:06 1518265    /usr/java/jdk1.3.1/jre/lib/i386/libverify.so
405ef000-40610000 r-xp 00000000 03:06 1518256    /usr/java/jdk1.3.1/jre/lib/i386/libjava.so
40610000-40612000 rw-p 00020000 03:06 1518256    /usr/java/jdk1.3.1/jre/lib/i386/libjava.so
40613000-40627000 r-xp 00000000 03:06 1518266    /usr/java/jdk1.3.1/jre/lib/i386/libzip.so
40627000-4062a000 rw-p 00013000 03:06 1518266    /usr/java/jdk1.3.1/jre/lib/i386/libzip.so
4062a000-41343000 r--s 00000000 03:06 506689     /usr/java/jdk1.3.1/jre/lib/rt.jar
41370000-41615000 r--s 00000000 03:06 506682     /usr/java/jdk1.3.1/jre/lib/i18n.jar
41615000-4162b000 r--s 00000000 03:06 506690     /usr/java/jdk1.3.1/jre/lib/sunrsasign.jar
436d3000-436d4000 r--p 00000000 03:06 342731     /usr/lib/locale/en_US/LC_NUMERIC
436d4000-436de000 r-xp 00000000 03:06 244857     /lib/libnss_files-2.2.2.so
436de000-436df000 rw-p 00009000 03:06 244857     /lib/libnss_files-2.2.2.so
49d3f000-49d5a000 r--p 00000000 03:06 1680972    /usr/lib/locale/en_US/LC_CTYPE

Local Time = Fri Aug 24 11:36:48 2001
Elapsed Time = 0
#
# HotSpot Virtual Machine Error : 11
# Error ID : 4F530E43505002CC
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Java VM: Java HotSpot(TM) Client VM (1.3.1-b24 mixed mode)
#
# An error report file has been saved as hs_err_pid13573.log.
# Please refer to the file for further information.
#



With JDK1.4.0-beta:
----------------

Unexpected Signal : 11 occurred at PC=0x40256C61
Function=as_C_string__C13symbolOopDesc+0x15
Library=/usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so

Current Java thread:
        at java.lang.Class.getName(Native Method)
        at ThrowableIntrospectionSegfault.main(ThrowableIntrospectionSegfault.java:37)

Dynamic libraries:
08048000-08051000 r-xp 00000000 03:06 538914     /usr/java/j2sdk1.4.0/bin/i386/native_threads/java
08051000-08053000 rw-p 00008000 03:06 538914     /usr/java/j2sdk1.4.0/bin/i386/native_threads/java
40000000-40016000 r-xp 00000000 03:06 244823     /lib/ld-2.2.2.so
40016000-40017000 rw-p 00015000 03:06 244823     /lib/ld-2.2.2.so
40018000-40021000 r-xp 00000000 03:06 293938     /usr/java/j2sdk1.4.0/jre/lib/i386/native_threads/libhpi.so
40021000-40022000 rw-p 00008000 03:06 293938     /usr/java/j2sdk1.4.0/jre/lib/i386/native_threads/libhpi.so
40022000-40023000 r--p 00000000 03:06 1762565    /usr/lib/locale/en_US/LC_IDENTIFICATION
40023000-40024000 r--p 00000000 03:06 1762566    /usr/lib/locale/en_US/LC_MEASUREMENT
40024000-40025000 r--p 00000000 03:06 1762569    /usr/lib/locale/en_US/LC_TELEPHONE
40025000-40026000 r--p 00000000 03:06 1762564    /usr/lib/locale/en_US/LC_ADDRESS
40026000-40027000 r--p 00000000 03:06 1762567    /usr/lib/locale/en_US/LC_NAME
40027000-40034000 r-xp 00000000 03:06 1729951    /lib/i686/libpthread-0.9.so
40034000-4003c000 rw-p 0000c000 03:06 1729951    /lib/i686/libpthread-0.9.so
4003c000-40338000 r-xp 00000000 03:06 1991764    /usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so
40338000-40508000 rw-p 002fb000 03:06 1991764    /usr/java/j2sdk1.4.0/jre/lib/i386/client/libjvm.so
4051c000-4051f000 r-xp 00000000 03:06 244836     /lib/libdl-2.2.2.so
4051f000-40520000 rw-p 00002000 03:06 244836     /lib/libdl-2.2.2.so
40520000-40646000 r-xp 00000000 03:06 1729947    /lib/i686/libc-2.2.2.so
40646000-4064c000 rw-p 00125000 03:06 1729947    /lib/i686/libc-2.2.2.so
40650000-40663000 r-xp 00000000 03:06 244841     /lib/libnsl-2.2.2.so
40663000-40665000 rw-p 00012000 03:06 244841     /lib/libnsl-2.2.2.so
40667000-4069b000 r-xp 00000000 03:06 636514     /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
4069b000-406a7000 rw-p 00033000 03:06 636514     /usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
406a9000-406cc000 r-xp 00000000 03:06 1729949    /lib/i686/libm-2.2.2.so
406cc000-406cd000 rw-p 00022000 03:06 1729949    /lib/i686/libm-2.2.2.so
406ce000-406e3000 r-xp 00000000 03:06 1975470    /usr/java/j2sdk1.4.0/jre/lib/i386/libverify.so
406e3000-406e6000 rw-p 00014000 03:06 1975470    /usr/java/j2sdk1.4.0/jre/lib/i386/libverify.so
406e6000-4070c000 r-xp 00000000 03:06 1975460    /usr/java/j2sdk1.4.0/jre/lib/i386/libjava.so
4070c000-4070f000 rw-p 00025000 03:06 1975460    /usr/java/j2sdk1.4.0/jre/lib/i386/libjava.so
40710000-40724000 r-xp 00000000 03:06 1975471    /usr/java/j2sdk1.4.0/jre/lib/i386/libzip.so
40724000-40727000 rw-p 00013000 03:06 1975471    /usr/java/j2sdk1.4.0/jre/lib/i386/libzip.so
40727000-41bad000 r--s 00000000 03:06 1110421    /usr/java/j2sdk1.4.0/jre/lib/rt.jar
41bec000-41edf000 r--s 00000000 03:06 1110411    /usr/java/j2sdk1.4.0/jre/lib/i18n.jar
41edf000-41ef4000 r--s 00000000 03:06 1110422    /usr/java/j2sdk1.4.0/jre/lib/sunrsasign.jar
41ef4000-41f6e000 r--s 00000000 03:06 1110414    /usr/java/j2sdk1.4.0/jre/lib/jsse.jar
41f6e000-41f80000 r--s 00000000 03:06 1110413    /usr/java/j2sdk1.4.0/jre/lib/jce.jar
44028000-44029000 r--p 00000000 03:06 1762568    /usr/lib/locale/en_US/LC_PAPER
44029000-4402a000 r--p 00000000 03:06 1632012    /usr/lib/locale/en_US/LC_MESSAGES/SYS_LC_MESSAGES
4402a000-4402b000 r--p 00000000 03:06 864968     /usr/lib/locale/en_US/LC_MONETARY
4402b000-4402c000 r--p 00000000 03:06 1762570    /usr/lib/locale/en_US/LC_TIME
4402c000-4402d000 r--p 00000000 03:06 342731     /usr/lib/locale/en_US/LC_NUMERIC
4402d000-4402f000 r--s 00000000 03:06 1828068    /usr/java/j2sdk1.4.0/jre/lib/ext/dnsns.jar
4a690000-4a6ab000 r--p 00000000 03:06 1680972    /usr/lib/locale/en_US/LC_CTYPE
4a6ab000-4a6b1000 r--p 00000000 03:06 571211     /usr/lib/locale/en_US/LC_COLLATE
4a6b1000-4a6be000 r--s 00000000 03:06 1828069    /usr/java/j2sdk1.4.0/jre/lib/ext/ldapsec.jar
4a6c0000-4a6ca000 r-xp 00000000 03:06 244857     /lib/libnss_files-2.2.2.so
4a6ca000-4a6cb000 rw-p 00009000 03:06 244857     /lib/libnss_files-2.2.2.so
4aef6000-4af14000 r--s 00000000 03:06 1828070    /usr/java/j2sdk1.4.0/jre/lib/ext/sunjce_provider.jar

Local Time = Fri Aug 24 11:39:05 2001
Elapsed Time = 0
#
# HotSpot Virtual Machine Error : 11
# Error ID : 4F530E43505002D7
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Java VM: Java HotSpot(TM) Client VM (1.4.0-beta-b65 mixed mode)
#
# An error report file has been saved as hs_err_pid13664.log.
# Please refer to the file for further information.
#
(Review ID: 129722) 
======================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: hopper FIXED IN: hopper INTEGRATED IN: hopper
14-06-2004

WORK AROUND Name: rmT116609 Date: 08/24/2001 We prevented our program from inspecting a field "backtrace" where the class name is "java.lang.Throwable". ======================================================================
11-06-2004

EVALUATION User program is inspecting VM internal data, which do not have external class names. Trying to obtain class name would crash VM. Ideally, VM should tell user this is internal structure. Alternatively, VM can throw an exception. ###@###.### 2001-09-20 As it turns out, the simpliest fix for this problem is to filter out Throwable.backtrace in the reflection code, so that this field is not visible to user programs. Please see also 4446677. ###@###.### 2002-01-24
24-01-2002