<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>