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);