hotspot/src/os/solaris/dtrace/libjvm_db.c
changeset 38133 78b95467b9f1
parent 33619 90563f58e60a
equal deleted inserted replaced
38132:ba888a4f352a 38133:78b95467b9f1
     1 /*
     1 /*
     2  * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   122   uint64_t nm;                  /* _nmethod */
   122   uint64_t nm;                  /* _nmethod */
   123   uint64_t pc;
   123   uint64_t pc;
   124   uint64_t pc_desc;
   124   uint64_t pc_desc;
   125 
   125 
   126   int32_t  orig_pc_offset;      /* _orig_pc_offset */
   126   int32_t  orig_pc_offset;      /* _orig_pc_offset */
   127   int32_t  instrs_beg;          /* _code_offset */
   127   uint64_t  instrs_beg;          /* _code_offset */
   128   int32_t  instrs_end;
   128   uint64_t  instrs_end;
   129   int32_t  deopt_beg;           /* _deoptimize_offset */
   129   uint64_t  deopt_beg;           /* _deoptimize_offset */
   130   int32_t  scopes_data_beg;     /* _scopes_data_offset */
   130   uint64_t  scopes_data_beg;     /* _scopes_data_begin */
   131   int32_t  scopes_data_end;
   131   int32_t  scopes_data_end;
   132   int32_t  metadata_beg;        /* _metadata_offset */
   132   int32_t  metadata_beg;        /* _metadata_offset */
   133   int32_t  metadata_end;
   133   int32_t  metadata_end;
   134   int32_t  scopes_pcs_beg;      /* _scopes_pcs_offset */
   134   int32_t  scopes_pcs_beg;      /* _scopes_pcs_offset */
   135   int32_t  scopes_pcs_end;
   135   int32_t  scopes_pcs_end;
   615 
   615 
   616   if (debug > 2 )
   616   if (debug > 2 )
   617       fprintf(stderr, "\t nmethod_info: BEGIN \n");
   617       fprintf(stderr, "\t nmethod_info: BEGIN \n");
   618 
   618 
   619   /* Instructions */
   619   /* Instructions */
   620   err = ps_pread(J->P, nm + OFFSET_CodeBlob_code_offset, &N->instrs_beg, SZ32);
   620   err = read_pointer(J, nm + OFFSET_CodeBlob_code_begin, &N->instrs_beg);
   621   CHECK_FAIL(err);
   621   CHECK_FAIL(err);
   622   err = ps_pread(J->P, nm + OFFSET_CodeBlob_data_offset, &N->instrs_end, SZ32);
   622   err = read_pointer(J, nm + OFFSET_CodeBlob_code_end, &N->instrs_end);
   623   CHECK_FAIL(err);
   623   CHECK_FAIL(err);
   624   err = ps_pread(J->P, nm + OFFSET_nmethod_deoptimize_offset, &N->deopt_beg, SZ32);
   624   err = read_pointer(J, nm + OFFSET_nmethod_deopt_handler_begin, &N->deopt_beg);
   625   CHECK_FAIL(err);
   625   CHECK_FAIL(err);
   626   err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32);
   626   err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32);
   627   CHECK_FAIL(err);
   627   CHECK_FAIL(err);
   628 
   628 
   629   /* Metadata */
   629   /* Metadata */
   630   err = ps_pread(J->P, nm + OFFSET_nmethod_metadata_offset, &N->metadata_beg, SZ32);
   630   err = ps_pread(J->P, nm + OFFSET_nmethod_metadata_offset, &N->metadata_beg, SZ32);
   631   CHECK_FAIL(err);
   631   CHECK_FAIL(err);
   632   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->metadata_end, SZ32);
   632   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_begin, &N->metadata_end, SZ32);
   633   CHECK_FAIL(err);
   633   CHECK_FAIL(err);
   634 
   634 
   635   /* scopes_pcs */
   635   /* scopes_pcs */
   636   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_pcs_offset, &N->scopes_pcs_beg, SZ32);
   636   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_pcs_offset, &N->scopes_pcs_beg, SZ32);
   637   CHECK_FAIL(err);
   637   CHECK_FAIL(err);
   638   err = ps_pread(J->P, nm + OFFSET_nmethod_dependencies_offset, &N->scopes_pcs_end, SZ32);
   638   err = ps_pread(J->P, nm + OFFSET_nmethod_dependencies_offset, &N->scopes_pcs_end, SZ32);
   639   CHECK_FAIL(err);
   639   CHECK_FAIL(err);
   640 
   640 
   641   /* scopes_data */
   641   /* scopes_data */
   642   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->scopes_data_beg, SZ32);
   642   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_begin, &N->scopes_data_beg, POINTER_SIZE);
   643   CHECK_FAIL(err);
   643   CHECK_FAIL(err);
   644 
   644 
   645   if (debug > 2 ) {
   645   if (debug > 2 ) {
   646       N->scopes_data_end = N->scopes_pcs_beg;
   646       N->scopes_data_end = N->scopes_pcs_beg;
   647 
   647 
   866   int32_t err;
   866   int32_t err;
   867 
   867 
   868   err = ps_pread(N->J->P, pc_desc + OFFSET_PcDesc_pc_offset, &pc_offset, SZ32);
   868   err = ps_pread(N->J->P, pc_desc + OFFSET_PcDesc_pc_offset, &pc_offset, SZ32);
   869   CHECK_FAIL(err);
   869   CHECK_FAIL(err);
   870 
   870 
   871   *real_pc = N->nm + N->instrs_beg + pc_offset;
   871   *real_pc = N->instrs_beg + pc_offset;
   872   if (debug > 2) {
   872   if (debug > 2) {
   873       fprintf(stderr, "\t\t get_real_pc: pc_offset: %lx, real_pc: %llx\n",
   873       fprintf(stderr, "\t\t get_real_pc: pc_offset: %lx, real_pc: %llx\n",
   874                        pc_offset, *real_pc);
   874                        pc_offset, *real_pc);
   875   }
   875   }
   876   return PS_OK;
   876   return PS_OK;
   940 
   940 
   941   if (debug > 2) {
   941   if (debug > 2) {
   942       fprintf(stderr, "\t\t scope_desc_at: BEGIN \n");
   942       fprintf(stderr, "\t\t scope_desc_at: BEGIN \n");
   943   }
   943   }
   944 
   944 
   945   buffer = N->nm + N->scopes_data_beg + decode_offset;
   945   buffer = N->scopes_data_beg + decode_offset;
   946 
   946 
   947   err = raw_read_int(N->J, &buffer, &vf->sender_decode_offset);
   947   err = raw_read_int(N->J, &buffer, &vf->sender_decode_offset);
   948   CHECK_FAIL(err);
   948   CHECK_FAIL(err);
   949 
   949 
   950   err = raw_read_int(N->J, &buffer, &vf->methodIdx);
   950   err = raw_read_int(N->J, &buffer, &vf->methodIdx);
  1050 
  1050 
  1051   err = nmethod_info(N);
  1051   err = nmethod_info(N);
  1052   CHECK_FAIL(err);
  1052   CHECK_FAIL(err);
  1053   if (debug) {
  1053   if (debug) {
  1054       fprintf(stderr, "name_for_nmethod: pc: %#llx, deopt_pc:  %#llx\n",
  1054       fprintf(stderr, "name_for_nmethod: pc: %#llx, deopt_pc:  %#llx\n",
  1055               pc, N->nm + N->deopt_beg);
  1055               pc, N->deopt_beg);
  1056   }
  1056   }
  1057 
  1057 
  1058   /* check for a deoptimized frame */
  1058   /* check for a deoptimized frame */
  1059   if ( pc == N->nm + N->deopt_beg) {
  1059   if ( pc == N->deopt_beg) {
  1060     uint64_t base;
  1060     uint64_t base;
  1061     if (debug) {
  1061     if (debug) {
  1062         fprintf(stderr, "name_for_nmethod: found deoptimized frame\n");
  1062         fprintf(stderr, "name_for_nmethod: found deoptimized frame\n");
  1063     }
  1063     }
  1064     if (J->prev_fr.sender_sp != 0) {
  1064     if (J->prev_fr.sender_sp != 0) {