7019165: Incorrect symbols in pstack output after SymbolTable changes

Wed, 16 Mar 2011 14:57:49 -0400

author
coleenp
date
Wed, 16 Mar 2011 14:57:49 -0400
changeset 2626
8a3f8defe568
parent 2625
65f880e2869b
child 2629
2074c95f707e

7019165: Incorrect symbols in pstack output after SymbolTable changes
Summary: And out lsb which is set for symbols in constant pool slots to distinguish them from strings
Reviewed-by: phh, dholmes, never, dcubed

src/os/solaris/dtrace/libjvm_db.c file | annotate | diff | comparison | revisions
     1.1 --- a/src/os/solaris/dtrace/libjvm_db.c	Tue Mar 15 06:50:01 2011 -0700
     1.2 +++ b/src/os/solaris/dtrace/libjvm_db.c	Wed Mar 16 14:57:49 2011 -0400
     1.3 @@ -524,6 +524,8 @@
     1.4    CHECK_FAIL(err);
     1.5    err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &nameSymbol);
     1.6    CHECK_FAIL(err);
     1.7 +  // The symbol is a CPSlot and has lower bit set to indicate metadata
     1.8 +  nameSymbol &= (~1); // remove metadata lsb
     1.9    err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_length, &nameSymbolLength, 2);
    1.10    CHECK_FAIL(err);
    1.11    nameString = (char*)calloc(nameSymbolLength + 1, 1);
    1.12 @@ -535,6 +537,7 @@
    1.13    CHECK_FAIL(err);
    1.14    err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &signatureSymbol);
    1.15    CHECK_FAIL(err);
    1.16 +  signatureSymbol &= (~1);  // remove metadata lsb
    1.17    err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2);
    1.18    CHECK_FAIL(err);
    1.19    signatureString = (char*)calloc(signatureSymbolLength + 1, 1);

mercurial