<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 14, 2015, at 11:02 PM, Philip Reames <<a href="mailto:listmail@philipreames.com" class="">listmail@philipreames.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="moz-cite-prefix" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">Comments inline.  I tried to reply to particular points of discussion downthread, so this is probably best read last. <span class="Apple-converted-space"> </span><br class=""><br class="">On 07/09/2015 02:04 PM, Juergen Ributzka wrote:<br class=""></div><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">Hi @ll,<div class=""><br class=""></div><div class="">over the past year we gained more experience with the patchpoint/stackmap/statepoint intrinsics and it exposed limitations in the stackmap format.</div><div class="">The following proposal includes feedback and request from several interested parties and I would like to hear your feedback.</div><div class=""><br class=""></div><div class="">Missing correlation between functions and stackmap records:</div><div class="">Originally the client had to keep track of the ID to know which stackmap record belongs to which function, but this would stop working once functions are inlined.</div><div class="">The new format fixes that by adding a direct reference from the function to the stackmap records.</div></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">+1</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><br class=""></div><div class="">Call Size and Function Size:</div><div class="">These are additional information that are of interest and have been added to the format.</div><div class="">@Swaroop: Could you please provide a little more detailed explanation on the "Call Size" field and what exactly is there recorded. Is it just the call instruction</div><div class="">or also the materialization code for the address? For what is this used for?</div></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">+1 subject to details being settled</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><br class=""></div><div class="">Flat format:</div><div class="">We think moving to a flat form will make parsing easier, because every record has a fixed size and offsets can be calculated easily.<span class="Apple-converted-space"> </span></div></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">I'm still not convinced this is actually a good idea, but I have no strong objection either. </span><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class="">The plan is to also</div><div class="">provide parsers for both stackmap versions (there is already one for the first format in tree) and a corresponding C-API to make it easier for clients to</div><div class="">adopt the new format. There is no plan to drop the original format and we will continue to support both formats. I will ask for feedback on the C API in a</div><div class="">separate RFC.<span class="Apple-converted-space"> </span><br class=""></div></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">I strongly feel that trying to support multiple versions of the file format in tree is a bad idea.  It's a distraction, support burden, and provides extremely little value.  What's the value in supporting a parser for a format that ToT will no longer be able to emit?  Anyone who is actually consuming the old format would have to be using the old version in process anyways.</span></div></blockquote><div><br class=""></div><div>I don’t think supporting multiple version will be that hard and I don’t plan to keep all current and future version in tree forever. But we should provide a reasonable long transition period that allows clients to transition from one version to another - basically one release cycle.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class=""> <span class="Apple-converted-space"> </span></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">(Possible exception: Is this intended to simplify the object caching model?  If so, have we ever given any guarantees about object caching in the JIT across versions?  That seems risky at best..)</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">I'm also opposed to the complexity of C API, but I'll defer that until the separate RFC is actually posted. <span class="Apple-converted-space"> </span></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><br class=""></div><div class="">Another benefit we hope to achieve from this format is to optimize for size by uniquing entries - but that is independent optimization and not required.</div><div class=""><br class=""></div><div class="">More detailed frame record:</div><div class="">Clients require more information about the function frame, such as spilled registers, etc. The frame base register i.e. might change when dynamic stack</div><div class="">realignment is performed on X86.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">If there is anything missing please let me know.</div><div class=""><br class=""></div><div class="">Thanks</div><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Juergen</div><div class=""><br class=""></div><div class=""><br class=""></div></blockquote><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">Is the format<span class="Apple-converted-space"> </span></span><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">Little endian, bit endian? native endian?<br class=""></font></div></blockquote><div><br class=""></div><div>I would say whatever the object file format is.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class=""></span><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New">Header v2 {<br class=""> <span class="Apple-converted-space"> </span>uint8  : Stack Map Version (2)<br class=""> <span class="Apple-converted-space"> </span>uint8  : Reserved [3] (0)<br class=""> <span class="Apple-converted-space"> </span>uint32 : Constants Offset (bytes)<br class=""> <span class="Apple-converted-space"> </span>uint32 : Frame Records Offset (bytes)<br class=""> <span class="Apple-converted-space"> </span>uint32 : Frame Registers Offset (bytes)<br class=""> <span class="Apple-converted-space"> </span>uint32 : StackMap Records Offset (bytes)<br class=""> <span class="Apple-converted-space"> </span>uint32 : Locations Offset (bytes)<br class=""> <span class="Apple-converted-space"> </span>uint32 : LiveOuts Offset (bytes)</font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">Let's reserve at least two uint32s for future field groups so that we can extend in a backwards compatible way.  Another option would be to steal one of the reserved bytes and require parsers to ignore sections they don't understand. <span class="Apple-converted-space"> </span></font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">Actually, so long as we document that there might be unknown bytes between Header.end and Constants.begin we should be fine.  It just needs to be *clearly* documented.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""></div></blockquote><div><br class=""></div><div>That was the idea. That way we could add new sections and old parsers would still work. They would just ignore those sections. Although with the addition of official parser in trees I am not sure how important this is anymore.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">As an example, if we need to add the SymbolConstants section mentioned down thread, that shouldn't require an version change.</span></div></blockquote><div><br class=""></div><div>Once we release a LLVM version any change should require a version change.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class=""> <span class="Apple-converted-space"> </span></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New">}<br class=""><br class="">align to 8 bytes<br class="">Constants[] {<br class=""> <span class="Apple-converted-space"> </span>uint64 : LargeConstant<br class="">}<br class=""><br class="">align to 8 bytes<br class="">FrameRecord[] {<br class=""> <span class="Apple-converted-space"> </span>uint64 : Function Address<br class=""> <span class="Apple-converted-space"> </span>uint32 : Function Size<br class=""> <span class="Apple-converted-space"> </span>uint32 : Stack Size<br class=""> <span class="Apple-converted-space"> </span>uint16 : Flags {<br class="">    bool : HasFrame<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">What does this mean?</font></div></blockquote><div><br class=""></div><div>If the function has a frame pointer.</div><br class=""><blockquote type="cite" class=""><div class=""><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""> <span class="Apple-converted-space"> </span></font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New">   <span class="Apple-converted-space"> </span>bool : HasVariableSizeAlloca<br class="">   <span class="Apple-converted-space"> </span>bool : HasStackRealignment<br class="">   <span class="Apple-converted-space"> </span>bool : HasLiveOutInfo<br class="">   <span class="Apple-converted-space"> </span>bool : Reserved [12]<br class=""></font></div></div></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>}<br class=""> <span class="Apple-converted-space"> </span>uint16 : Frame Base Register Dwarf RegNum<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">I don't think this is actually sufficient for dynamic stack realignment.  Don't you end up with some things indexed off RSP and others indexed off RBP?</font><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class="">  Actually, wait.. that's entirely handled within the record format.  What does tracking the Frame Base Register give us?  I think I'm missing a use case here.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>uint16 : Num Frame Registers<br class=""> <span class="Apple-converted-space"> </span>uint16 : Frame Register Index<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">Are these (begin, begin+length) offsets into the Frame Registers table?  If so, should we swap them?</font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""></div></blockquote><div><br class=""></div><div>Sure</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>uint16 : Num StackMap Records<br class=""> <span class="Apple-converted-space"> </span>uint16 : StackMap Record Index</font></div><div class=""><font class="" face="Courier New">}<br class=""><br class="">align to 4 bytes<br class="">FrameRegister[] {<br class=""> <span class="Apple-converted-space"> </span>uint16 : Dwarf RegNum<br class=""> <span class="Apple-converted-space"> </span>int16  : Offset<br class=""> <span class="Apple-converted-space"> </span>uint8  : Size in Bytes<br class=""> <span class="Apple-converted-space"> </span>uint8  : Flags {<br class="">    bool : IsSpilled<br class="">   <span class="Apple-converted-space"> </span>bool : Reserved [7]<br class=""> <span class="Apple-converted-space"> </span>}<br class="">}<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">This seems tied specifically to the assumption that registers are spilled on entry.  Given the recent work towards shrink wrapping, is that something we want to do?<br class=""><br class="">p.s. What's with the IsSpilled bit?  Why would you have a record for an unspilled register?<br class=""></font></div></blockquote><div><br class=""></div><div>This was done before shrink wrapping and pristine register support. The original problem was that the live-out set didn’t contain pristine registers and we have to add all callee-saved register to the live-out set too to make sure we didn’t miss anything. We could do better by recording which callee-save registers actually got spilled and which not.</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); float: none; display: inline !important;" class=""></span><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"><br class="">align to 8 bytes<br class="">StackMapRecord[] {<br class=""> <span class="Apple-converted-space"> </span>uint64 : PatchPoint ID<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">"ID" (remove the patchpoint since statepoint now has one too)</font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""></div></blockquote>sure</div><div><br class=""><blockquote type="cite" class=""><div class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>uint32 : Instruction Offset<br class=""> <span class="Apple-converted-space"> </span>uint8  : Call size (bytes)<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">"Patchable size" per down thread discussion</font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>uint8  : Flags {<br class="">    bool : HasLiveOutInfo<br class="">   <span class="Apple-converted-space"> </span>bool : Reserved [7]<br class=""> <span class="Apple-converted-space"> </span>}<br class=""></font></div></div></blockquote><font face="Courier New" style="font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class="">Why do we need these flags?  Isn't this Num LiveOuts == 0?</font><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""></div></blockquote><div><br class=""></div><div>A verification that the information was actually computed - we might have 0 live-outs too. We could also change this in the future to attach this information only to call-sites that have an attribute that request this information.</div><br class=""><blockquote type="cite" class=""><div class=""><blockquote cite="mid:BDBBE029-F849-4816-B35D-A975B845B978@apple.com" type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><div class=""><div class=""><font class="" face="Courier New"> <span class="Apple-converted-space"> </span>uint16 : Num Locations<br class=""> <span class="Apple-converted-space"> </span>uint16 : Location Index<br class=""> <span class="Apple-converted-space"> </span>uint16 : Num LiveOuts<br class=""> <span class="Apple-converted-space"> </span>uint16 : LiveOut Index<br class="">}</font></div><div class=""><span class="" style="font-family: 'Courier New';"><br class=""></span></div><div class=""><span class="" style="font-family: 'Courier New';">align to 4 bytes</span></div><div class=""><font class="" face="Courier New">Location[] {<br class=""> <span class="Apple-converted-space"> </span>uint8  : Register | Direct | Indirect | Constant | ConstantIndex<br class=""> <span class="Apple-converted-space"> </span>uint8  : Reserved (location flags)<br class=""> <span class="Apple-converted-space"> </span>uint16 : Dwarf RegNum<br class=""> <span class="Apple-converted-space"> </span>int32  : Offset or SmallConstant<br class="">}<br class=""><br class="">align to 2 bytes<br class="">LiveOuts[] {<br class=""> <span class="Apple-converted-space"> </span>uint16 : Dwarf RegNum<br class=""> <span class="Apple-converted-space"> </span>uint8  : Reserved<br class=""> <span class="Apple-converted-space"> </span>uint8  : Size in Bytes<br class="">}</font></div><div class=""><br class=""></div></div></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 14px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" class=""><br class="Apple-interchange-newline"></div></blockquote></div><br class=""></body></html>