<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>ps: translating to C for Win32 or C++ for any targets nets you whatever is the local optimized exception handling runtime, including certainly this stuff on NT.<div><br></div><div>Sometimes that might merely be a similar setjmp/longjmp based system, but often not.</div><div><br></div><div>But we need higher level m3cg operations for exception handling to do this (or some awful reverse induction in the backend..)</div><div><br></div><div> - Jay<br><br><br><div><hr id="stopSpelling">From: jay.krell@cornell.edu<br>CC: jay.krell@cornell.edu; m3devel@elegosoft.com<br>Subject: Re: [M3devel] frame per procedure instead of frame per TRY?<br>Date: Sun, 19 Jul 2015 10:46:36 -0700<br>To: estellnb@elstel.org<br><br><div><div style="">NT/amd64 & likely all NT architectures except x86: The pdata gives function boundaries and the xdata provides information to restore nonvolatile registers, including rsp and return address. Locals may be enregistered across function calls in nonvolatile registers. </div><div style=""><br></div><div style=""><br></div><div style="">There is no linked list.</div>There is a reliable stack walker including restoring nonvolatile registers provided by ther operating system (RtlUnwind, RtlVirtualUnwind).</div><div><br></div><div><br> - Jay</div><div><br>On Jul 19, 2015, at 5:02 AM, Elmar Stellnberger <<a href="mailto:estellnb@elstel.org">estellnb@elstel.org</a>> wrote:<br><br></div><blockquote><div>
  
    
  
  
    <br>
    <div class="ecxmoz-cite-prefix">Am 2015-07-19 um 12:19 schrieb Jay K:<br>
    </div>
    <blockquote cite="mid:COL130-W98F71B1447317E3FAF027E6860@phx.gbl">
      <style><!--
.ExternalClass .ecxhmmessage P {
padding:0px;
}

.ExternalClass body.ecxhmmessage {
font-size:12pt;
font-family:Calibri;
}

--></style>
      <div dir="ltr">
        <div>And all the other NT platforms are faster.</div>
      </div>
    </blockquote>
    <blockquote cite="mid:COL130-W98F71B1447317E3FAF027E6860@phx.gbl">
      <div dir="ltr">
        <div>They don't link/unlink anything.</div>
        <div>They have metadata describing prologs.</div>
        <div>The runtime can use that to restore nonvolatile registers
          (including</div>
        <div>the stack) at any point.</div>
      </div>
    </blockquote>
    <br>
    including NT-AMD64 or not? - <br>
    but PowerPC, MIPS, Alpha, Itanium and ARM?<br>
    <br>
    interesting. What happens if I have a variable being kept in a
    register<br>
    like register int x? These registers would still need to be saved as
    <br>
    a prolog could never tell us (i.e. we would then again need a linked
    <br>
    list) ...<br>
    <br>
    ... and then if we have prologues we would not need to pin down<br>
    any word that could refer as a refany to the traced heap in our <br>
    locales area but only those which really do (The question is of<br>
    course what data is in these prologues and what data is not.).<br>
    <br>
    <br>
    <br>
  

</div></blockquote></div></div>                                           </div></body>
</html>