Print this page


Split Close
Expand all
Collapse all
          --- old/agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java
          +++ new/agent/src/share/classes/sun/jvm/hotspot/runtime/sparc/SPARCFrame.java
↓ open down ↓ 563 lines elided ↑ open up ↑
 564  564      //        In order to do this correctly, the various subtypes of
 565  565      //        of frame (interpreted, compiled, glue, native),
 566  566      //        must be distinguished.  There is no need on SPARC for
 567  567      //        such distinctions, because all callee-save registers are
 568  568      //        preserved for all frames via SPARC-specific mechanisms.
 569  569      //
 570  570      //        *** HOWEVER, *** if and when we make any floating-point
 571  571      //        registers callee-saved, then we will have to copy over
 572  572      //        the RegisterMap update logic from the Intel code.
 573  573  
 574      -    if (isRicochetFrame()) return senderForRicochetFrame(map);
 575      -
 576  574      // The constructor of the sender must know whether this frame is interpreted so it can set the
 577  575      // sender's _interpreter_sp_adjustment field.
 578  576      if (VM.getVM().getInterpreter().contains(pc)) {
 579  577        isInterpreted = true;
 580  578        map.makeIntegerRegsUnsaved();
 581  579        map.shiftWindow(sp, youngerSP);
 582  580      } else {
 583  581        // Find a CodeBlob containing this frame's pc or elide the lookup and use the
 584  582        // supplied blob which is already known to be associated with this frame.
 585  583        cb = VM.getVM().getCodeCache().findBlob(pc);
↓ open down ↓ 352 lines elided ↑ open up ↑
 938  936      }
 939  937  
 940  938      if ((a1 == null) || (a2 == null)) {
 941  939        return false;
 942  940      }
 943  941  
 944  942      return (a1.equals(a2));
 945  943    }
 946  944  
 947  945  
 948      -  private Frame senderForRicochetFrame(SPARCRegisterMap map) {
 949      -    if (DEBUG) {
 950      -      System.out.println("senderForRicochetFrame");
 951      -    }
 952      -    //RicochetFrame* f = RicochetFrame::from_frame(fr);
 953      -    // Cf. is_interpreted_frame path of frame::sender
 954      -    Address youngerSP = getSP();
 955      -    Address sp        = getSenderSP();
 956      -    map.makeIntegerRegsUnsaved();
 957      -    map.shiftWindow(sp, youngerSP);
 958      -    boolean thisFrameAdjustedStack = true;  // I5_savedSP is live in this RF
 959      -    return new SPARCFrame(biasSP(sp), biasSP(youngerSP), thisFrameAdjustedStack);
 960      -  }
 961      -
 962  946    private Frame senderForEntryFrame(RegisterMap regMap) {
 963  947      SPARCRegisterMap map = (SPARCRegisterMap) regMap;
 964  948  
 965  949      if (Assert.ASSERTS_ENABLED) {
 966  950        Assert.that(map != null, "map must be set");
 967  951      }
 968  952      // Java frame called from C; skip all C frames and return top C
 969  953      // frame of that chunk as the sender
 970  954      JavaCallWrapper jcw = getEntryFrameCallWrapper();
 971  955      if (Assert.ASSERTS_ENABLED) {
↓ open down ↓ 125 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX