<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-CA" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi all,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Some background: I’m working on a project to replace a custom VM with various components of llvm.  We have everything running just peachy keen with one recent exception, one of our executables crashes when attempting run a JIT’d function. 
 We have llvm building and running on 64 bit Windows and Linux, using Visual Studio 2008 on Windows and gcc on Linux, and we have the llvm static libs linked into one of a DLLs, which is then linked to several different EXE’s.  The DLL contains the code to
 compile to llvm IR, JIT and run code written in our proprietary language.  Each EXE calls into this DLL the same way.  The same chunk of IR, when JIT’d in 3 of the EXE’s runs perfectly, but in the last program, it dies in a call instruction out into an invalid
 memory location.  All compiler and linker options are the same for all 4 exe’s.  The one difference I’ve seen when debugging the assembly is that the 3 that work all have JIT function pointer addresses less than a 32 bit value but the one that is failing has
 a 64 bit address, as indicated in the snippet below:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">000007FFFFC511D7  pop         rbp  <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511D8  ret              <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511D9  sub         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511DD  mov         rcx,qword ptr [rbp-70h] <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511E1  mov         edx,0FFFFFFFEh <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511E6  xor         r8d,r8d <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511E9  call        rsi  <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511EB  add         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511EF  test        al,1 <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511F2  je          000007FFFFC511C3 <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511F8  sub         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC511FC  mov         rax,7FFFFC30030h <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51206  mov         rcx,rdi <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51209  mov         edx,0FFFFFFFEh <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC5120E  xor         r8d,r8d <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51211  call        rax  <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51213  add         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51217  test        al,1 <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC5121A  je          000007FFFFC511C3 <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51220  mov         qword ptr [rbp-68h],rdi <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51224  mov         eax,10h <o:p></o:p></p>
<p class="MsoNormal"><b>000007FFFFC51229  call        0000080077B3F1D0 <o:p></o:p></b></p>
<p class="MsoNormal">000007FFFFC5122E  sub         rsp,rax <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51231  mov         rdx,rsp <o:p></o:p></p>
<p class="MsoNormal">000007FFFFC51234  mov         qword ptr [rbp-0F0h],rdx <o:p>
</o:p></p>
<p class="MsoNormal">000007FFFFC5123B  sub         rsp,20h<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The call instruction at 000007FFFFC51229  is the one that jumps into invalid memory at 80077B3F1D0.  I’m not sure why this particular EXE causes llvm to use such large address values, but it looks like there might be some 32 bit vs 64 bit
 address calculation/offset problem when emitting the assembly.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The code that works looks like this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">0000000002931211  call        rax  <o:p></o:p></p>
<p class="MsoNormal">0000000002931213  add         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">0000000002931217  test        al,1 <o:p></o:p></p>
<p class="MsoNormal">000000000293121A  je          00000000029311C3 <o:p></o:p></p>
<p class="MsoNormal">0000000002931220  mov         qword ptr [rbp-68h],rdi <o:p></o:p></p>
<p class="MsoNormal">0000000002931224  mov         eax,10h <o:p></o:p></p>
<p class="MsoNormal">0000000002931229  call        0000000077B3F1D0 <o:p></o:p></p>
<p class="MsoNormal">000000000293122E  sub         rsp,rax <o:p></o:p></p>
<p class="MsoNormal">0000000002931231  mov         rdx,rsp <o:p></o:p></p>
<p class="MsoNormal">0000000002931234  mov         qword ptr [rbp-0F0h],rdx <o:p>
</o:p></p>
<p class="MsoNormal">000000000293123B  sub         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000000000293123F  mov         r12,180071AD0h <o:p></o:p></p>
<p class="MsoNormal">0000000002931249  mov         ecx,0FFFFFFEEh <o:p></o:p></p>
<p class="MsoNormal">000000000293124E  xor         r8d,r8d <o:p></o:p></p>
<p class="MsoNormal">0000000002931251  mov         r9,29C02EAh <o:p></o:p></p>
<p class="MsoNormal">000000000293125B  call        r12  <o:p></o:p></p>
<p class="MsoNormal">000000000293125E  add         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">0000000002931262  mov         eax,10h <o:p></o:p></p>
<p class="MsoNormal"><b>0000000002931267  call        0000000077B3F1D0 <o:p></o:p></b></p>
<p class="MsoNormal">000000000293126C  sub         rsp,rax <o:p></o:p></p>
<p class="MsoNormal">000000000293126F  mov         rdx,rsp <o:p></o:p></p>
<p class="MsoNormal">0000000002931272  mov         qword ptr [rbp-58h],rdx <o:p></o:p></p>
<p class="MsoNormal">0000000002931276  sub         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">000000000293127A  mov         ecx,0FFFFFFEEh <o:p></o:p></p>
<p class="MsoNormal">000000000293127F  xor         r8d,r8d <o:p></o:p></p>
<p class="MsoNormal">0000000002931282  mov         r9,29C02EAh <o:p></o:p></p>
<p class="MsoNormal">000000000293128C  call        r12  <o:p></o:p></p>
<p class="MsoNormal">000000000293128F  add         rsp,20h <o:p></o:p></p>
<p class="MsoNormal">0000000002931293  mov         eax,10h <o:p></o:p></p>
<p class="MsoNormal">0000000002931298  call        0000000077B3F1D0 <o:p></o:p></p>
<p class="MsoNormal">000000000293129D  sub         rsp,rax <o:p></o:p></p>
<p class="MsoNormal">00000000029312A0  mov         rax,rsp<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And the code at 77B3F1D0 is this:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">0000000077B3F1BE  nop              <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1BF  nop              <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C0  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C1  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C2  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C3  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C4  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C5  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1C6  nop         word ptr [rax+rax] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1D0  sub         rsp,10h <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1D4  mov         qword ptr [rsp],r10 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1D8  mov         qword ptr [rsp+8],r11 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1DD  xor         r11,r11 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1E0  lea         r10,[rsp+18h] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1E5  sub         r10,rax <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1E8  cmovb       r10,r11 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1EC  mov         r11,qword ptr gs:[10h] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1F5  cmp         r10,r11 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1F8  jae         0000000077B3F210 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F1FA  and         r10w,0F000h <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F200  lea         r11,[r11-1000h] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F207  mov         byte ptr [r11],0 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F20B  cmp         r10,r11 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F20E  jne         0000000077B3F200 <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F210  mov         r10,qword ptr [rsp] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F214  mov         r11,qword ptr [rsp+8] <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F219  add         rsp,10h <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F21D  ret              <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F21E  nop              <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F21F  nop              <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F220  int         3    <o:p></o:p></p>
<p class="MsoNormal">0000000077B3F221  int         3    <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">  I searched the bug database for various topics but didn’t see anything specific other than one mention in bug 5201 to do with 32 bit address truncating.  My dev system is a dual-core xeon with 16 gigs of ram.  I’m no expert in how llvm
 works to output the asm, but I’m not afraid to delve into it to see what’s happening.  Has anyone else run into this?  Does anyone have a suggestion of where I might start to debug in the X86 emitter code?  I’m not even sure how to create a test case that
 would use a large starting address for the JIT?  Any help is greatly appreciated.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks in advance, <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">.r.<o:p></o:p></p>
</div>
</body>
</html>