< prev index next >

src/java.base/solaris/native/libjvm_db/libjvm_db.c

Print this page




 535   short klassSymbolLength;
 536   short nameSymbolLength;
 537   short signatureSymbolLength;
 538   char * nameString = NULL;
 539   char * klassString = NULL;
 540   char * signatureString = NULL;
 541   int err;
 542 
 543   err = read_pointer(J, methodPtr + OFFSET_Method_constMethod, &constMethod);
 544   CHECK_FAIL(err);
 545   err = read_pointer(J, constMethod + OFFSET_ConstMethod_constants, &constantPool);
 546   CHECK_FAIL(err);
 547 
 548   /* To get name string */
 549   err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_name_index, &nameIndex, 2);
 550   CHECK_FAIL(err);
 551   err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_ConstantPool, &nameSymbol);
 552   CHECK_FAIL(err);
 553   // The symbol is a CPSlot and has lower bit set to indicate metadata
 554   nameSymbol &= (~1); // remove metadata lsb
 555   err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_length, &nameSymbolLength, 2);

 556   CHECK_FAIL(err);
 557   nameString = (char*)calloc(nameSymbolLength + 1, 1);
 558   err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_body, nameString, nameSymbolLength);
 559   CHECK_FAIL(err);
 560 
 561   /* To get signature string */
 562   err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_signature_index, &signatureIndex, 2);
 563   CHECK_FAIL(err);
 564   err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_ConstantPool, &signatureSymbol);
 565   CHECK_FAIL(err);
 566   signatureSymbol &= (~1);  // remove metadata lsb
 567   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length, &signatureSymbolLength, 2);
 568   CHECK_FAIL(err);
 569   signatureString = (char*)calloc(signatureSymbolLength + 1, 1);
 570   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength);
 571   CHECK_FAIL(err);
 572 
 573   /* To get klass string */
 574   err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr);
 575   CHECK_FAIL(err);
 576   err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol);
 577   CHECK_FAIL(err);
 578   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length, &klassSymbolLength, 2);
 579   CHECK_FAIL(err);
 580   klassString = (char*)calloc(klassSymbolLength + 1, 1);
 581   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_body, klassString, klassSymbolLength);
 582   CHECK_FAIL(err);
 583 
 584   result[0] = '\0';
 585   if (snprintf(result, size,
 586     "%s.%s%s",
 587     klassString,
 588     nameString,
 589     signatureString) >= size) {
 590     // truncation
 591     goto fail;
 592   }
 593 
 594   if (nameString != NULL) free(nameString);
 595   if (klassString != NULL) free(klassString);
 596   if (signatureString != NULL) free(signatureString);
 597 
 598   return PS_OK;




 535   short klassSymbolLength;
 536   short nameSymbolLength;
 537   short signatureSymbolLength;
 538   char * nameString = NULL;
 539   char * klassString = NULL;
 540   char * signatureString = NULL;
 541   int err;
 542 
 543   err = read_pointer(J, methodPtr + OFFSET_Method_constMethod, &constMethod);
 544   CHECK_FAIL(err);
 545   err = read_pointer(J, constMethod + OFFSET_ConstMethod_constants, &constantPool);
 546   CHECK_FAIL(err);
 547 
 548   /* To get name string */
 549   err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_name_index, &nameIndex, 2);
 550   CHECK_FAIL(err);
 551   err = read_pointer(J, constantPool + nameIndex * POINTER_SIZE + SIZE_ConstantPool, &nameSymbol);
 552   CHECK_FAIL(err);
 553   // The symbol is a CPSlot and has lower bit set to indicate metadata
 554   nameSymbol &= (~1); // remove metadata lsb
 555   // The length is in the top half of the word.
 556   err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_length_and_refcount, &nameSymbolLength, 2);
 557   CHECK_FAIL(err);
 558   nameString = (char*)calloc(nameSymbolLength + 1, 1);
 559   err = ps_pread(J->P, nameSymbol + OFFSET_Symbol_body, nameString, nameSymbolLength);
 560   CHECK_FAIL(err);
 561 
 562   /* To get signature string */
 563   err = ps_pread(J->P, constMethod + OFFSET_ConstMethod_signature_index, &signatureIndex, 2);
 564   CHECK_FAIL(err);
 565   err = read_pointer(J, constantPool + signatureIndex * POINTER_SIZE + SIZE_ConstantPool, &signatureSymbol);
 566   CHECK_FAIL(err);
 567   signatureSymbol &= (~1);  // remove metadata lsb
 568   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_length_and_refcount, &signatureSymbolLength, 2);
 569   CHECK_FAIL(err);
 570   signatureString = (char*)calloc(signatureSymbolLength + 1, 1);
 571   err = ps_pread(J->P, signatureSymbol + OFFSET_Symbol_body, signatureString, signatureSymbolLength);
 572   CHECK_FAIL(err);
 573 
 574   /* To get klass string */
 575   err = read_pointer(J, constantPool + OFFSET_ConstantPool_pool_holder, &klassPtr);
 576   CHECK_FAIL(err);
 577   err = read_pointer(J, klassPtr + OFFSET_Klass_name, &klassSymbol);
 578   CHECK_FAIL(err);
 579   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_length_and_refcount, &klassSymbolLength, 2);
 580   CHECK_FAIL(err);
 581   klassString = (char*)calloc(klassSymbolLength + 1, 1);
 582   err = ps_pread(J->P, klassSymbol + OFFSET_Symbol_body, klassString, klassSymbolLength);
 583   CHECK_FAIL(err);
 584 
 585   result[0] = '\0';
 586   if (snprintf(result, size,
 587     "%s.%s%s",
 588     klassString,
 589     nameString,
 590     signatureString) >= size) {
 591     // truncation
 592     goto fail;
 593   }
 594 
 595   if (nameString != NULL) free(nameString);
 596   if (klassString != NULL) free(klassString);
 597   if (signatureString != NULL) free(signatureString);
 598 
 599   return PS_OK;


< prev index next >