Mercurial > hg > truffle
comparison src/os/solaris/dtrace/libjvm_db.c @ 2344:8a3f8defe568
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
author | coleenp |
---|---|
date | Wed, 16 Mar 2011 14:57:49 -0400 |
parents | 3582bf76420e |
children | 1d1603768966 |
comparison
equal
deleted
inserted
replaced
2343:65f880e2869b | 2344:8a3f8defe568 |
---|---|
522 /* To get name string */ | 522 /* To get name string */ |
523 err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_name_index, &nameIndex, 2); | 523 err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_name_index, &nameIndex, 2); |
524 CHECK_FAIL(err); | 524 CHECK_FAIL(err); |
525 err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &nameSymbol); | 525 err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &nameSymbol); |
526 CHECK_FAIL(err); | 526 CHECK_FAIL(err); |
527 // The symbol is a CPSlot and has lower bit set to indicate metadata | |
528 nameSymbol &= (~1); // remove metadata lsb | |
527 err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_length, &nameSymbolLength, 2); | 529 err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_length, &nameSymbolLength, 2); |
528 CHECK_FAIL(err); | 530 CHECK_FAIL(err); |
529 nameString = (char*)calloc(nameSymbolLength + 1, 1); | 531 nameString = (char*)calloc(nameSymbolLength + 1, 1); |
530 err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_body, nameString, nameSymbolLength); | 532 err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_body, nameString, nameSymbolLength); |
531 CHECK_FAIL(err); | 533 CHECK_FAIL(err); |
533 /* To get signature string */ | 535 /* To get signature string */ |
534 err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_signature_index, &signatureIndex, 2); | 536 err = ps_pread(J->P, constMethod + OFFSET_constMethodOopDesc_signature_index, &signatureIndex, 2); |
535 CHECK_FAIL(err); | 537 CHECK_FAIL(err); |
536 err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &signatureSymbol); | 538 err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_constantPoolOopDesc, &signatureSymbol); |
537 CHECK_FAIL(err); | 539 CHECK_FAIL(err); |
540 signatureSymbol &= (~1); // remove metadata lsb | |
538 err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2); | 541 err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2); |
539 CHECK_FAIL(err); | 542 CHECK_FAIL(err); |
540 signatureString = (char*)calloc(signatureSymbolLength + 1, 1); | 543 signatureString = (char*)calloc(signatureSymbolLength + 1, 1); |
541 err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength); | 544 err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength); |
542 CHECK_FAIL(err); | 545 CHECK_FAIL(err); |