hotspot/src/os/bsd/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_offset */
   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, base + OFFSET_VMStructEntryaddress, &vmp->address);
   621   CHECK_FAIL(err);
   621   err = read_pointer(J, nm + OFFSET_CodeBlob_code_begin, &N->instrs_beg);
   622   err = ps_pread(J->P, nm + OFFSET_CodeBlob_data_offset, &N->instrs_end, SZ32);
   622   CHECK_FAIL(err);
   623   CHECK_FAIL(err);
   623   err = read_pointer(J, nm + OFFSET_CodeBlob_code_end, &N->instrs_end);
   624   err = ps_pread(J->P, nm + OFFSET_nmethod_deoptimize_offset, &N->deopt_beg, SZ32);
   624   CHECK_FAIL(err);
       
   625   err = read_pointer(J, nm + OFFSET_nmethod_deopt_handler_begin, &N->deopt_beg);
   625   CHECK_FAIL(err);
   626   CHECK_FAIL(err);
   626   err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32);
   627   err = ps_pread(J->P, nm + OFFSET_nmethod_orig_pc_offset, &N->orig_pc_offset, SZ32);
   627   CHECK_FAIL(err);
   628   CHECK_FAIL(err);
   628 
   629 
   629   /* Metadata */
   630   /* Metadata */
   637   CHECK_FAIL(err);
   638   CHECK_FAIL(err);
   638   err = ps_pread(J->P, nm + OFFSET_nmethod_dependencies_offset, &N->scopes_pcs_end, SZ32);
   639   err = ps_pread(J->P, nm + OFFSET_nmethod_dependencies_offset, &N->scopes_pcs_end, SZ32);
   639   CHECK_FAIL(err);
   640   CHECK_FAIL(err);
   640 
   641 
   641   /* scopes_data */
   642   /* scopes_data */
   642   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_offset, &N->scopes_data_beg, SZ32);
   643   err = ps_pread(J->P, nm + OFFSET_nmethod_scopes_data_begin, &N->scopes_data_beg, POINTER_SIZE);
   643   CHECK_FAIL(err);
   644   CHECK_FAIL(err);
   644 
   645 
   645   if (debug > 2 ) {
   646   if (debug > 2 ) {
   646       N->scopes_data_end = N->scopes_pcs_beg;
   647       N->scopes_data_end = N->scopes_pcs_beg;
   647 
   648 
   866   int32_t err;
   867   int32_t err;
   867 
   868 
   868   err = ps_pread(N->J->P, pc_desc + OFFSET_PcDesc_pc_offset, &pc_offset, SZ32);
   869   err = ps_pread(N->J->P, pc_desc + OFFSET_PcDesc_pc_offset, &pc_offset, SZ32);
   869   CHECK_FAIL(err);
   870   CHECK_FAIL(err);
   870 
   871 
   871   *real_pc = N->nm + N->instrs_beg + pc_offset;
   872   *real_pc = N->instrs_beg + pc_offset;
   872   if (debug > 2) {
   873   if (debug > 2) {
   873       fprintf(stderr, "\t\t get_real_pc: pc_offset: %lx, real_pc: %llx\n",
   874       fprintf(stderr, "\t\t get_real_pc: pc_offset: %lx, real_pc: %llx\n",
   874                        pc_offset, *real_pc);
   875                        pc_offset, *real_pc);
   875   }
   876   }
   876   return PS_OK;
   877   return PS_OK;
   940 
   941 
   941   if (debug > 2) {
   942   if (debug > 2) {
   942       fprintf(stderr, "\t\t scope_desc_at: BEGIN \n");
   943       fprintf(stderr, "\t\t scope_desc_at: BEGIN \n");
   943   }
   944   }
   944 
   945 
   945   buffer = N->nm + N->scopes_data_beg + decode_offset;
   946   buffer = N->scopes_data_beg + decode_offset;
   946 
   947 
   947   err = raw_read_int(N->J, &buffer, &vf->sender_decode_offset);
   948   err = raw_read_int(N->J, &buffer, &vf->sender_decode_offset);
   948   CHECK_FAIL(err);
   949   CHECK_FAIL(err);
   949 
   950 
   950   err = raw_read_int(N->J, &buffer, &vf->methodIdx);
   951   err = raw_read_int(N->J, &buffer, &vf->methodIdx);
  1050 
  1051 
  1051   err = nmethod_info(N);
  1052   err = nmethod_info(N);
  1052   CHECK_FAIL(err);
  1053   CHECK_FAIL(err);
  1053   if (debug) {
  1054   if (debug) {
  1054       fprintf(stderr, "name_for_nmethod: pc: %#llx, deopt_pc:  %#llx\n",
  1055       fprintf(stderr, "name_for_nmethod: pc: %#llx, deopt_pc:  %#llx\n",
  1055               pc, N->nm + N->deopt_beg);
  1056               pc, N->deopt_beg);
  1056   }
  1057   }
  1057 
  1058 
  1058   /* check for a deoptimized frame */
  1059   /* check for a deoptimized frame */
  1059   if ( pc == N->nm + N->deopt_beg) {
  1060   if ( pc == N->deopt_beg) {
  1060     uint64_t base;
  1061     uint64_t base;
  1061     if (debug) {
  1062     if (debug) {
  1062         fprintf(stderr, "name_for_nmethod: found deoptimized frame\n");
  1063         fprintf(stderr, "name_for_nmethod: found deoptimized frame\n");
  1063     }
  1064     }
  1064     if (J->prev_fr.sender_sp != 0) {
  1065     if (J->prev_fr.sender_sp != 0) {