<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:m="http://schemas.microsoft.com/office/2004/12/omml" 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;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        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;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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-US link=blue vlink=purple><div class=WordSection1><p class=MsoPlainText>On Dec 9, 2011, at 13:34 AM, Eric Christopher wrote:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>>>On Dec 8, 2011, at 10:09 AM, Malea, Daniel wrote:<o:p></o:p></p><p class=MsoPlainText>>>  <o:p></o:p></p><p class=MsoPlainText>>> Please find the attached patch for review. It is the first step toward enabling lli ?use-mcjit to work with ELF objects.<o:p></o:p></p><p class=MsoPlainText>>>  <o:p></o:p></p><p class=MsoPlainText>>> Basic ELF loader in MCJIT (on behalf of Andy Kaylor):<o:p></o:p></p><p class=MsoPlainText>>> -        Supports loading ELF object files emitted by MC<o:p></o:p></p><p class=MsoPlainText>>> -        Adds minimal x86 relocation support (function calls)<o:p></o:p></p><p class=MsoPlainText>>> <o:p></o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>Why the change away from "isKnownFormat"?<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>It seemed better to re-use the existing function to identify the format rather than partially duplicating the functionality in each dynamic loader implementation and having the base RuntimeDyld object deduce the file type by trial and error (though I suppose that trial and error is still happening in the IdentifyFileType function).<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>><o:p> </o:p></p><p class=MsoPlainText>>-    if (RuntimeDyldMachO::isKnownFormat(InputBuffer))<o:p></o:p></p><p class=MsoPlainText>>-      Dyld = new RuntimeDyldMachO(MM);<o:p></o:p></p><p class=MsoPlainText>>-    else<o:p></o:p></p><p class=MsoPlainText>>-      report_fatal_error("Unknown object format!");<o:p></o:p></p><p class=MsoPlainText>>+    sys::LLVMFileType type = sys::IdentifyFileType(InputBuffer->getBufferStart(),<o:p></o:p></p><p class=MsoPlainText>>+                            static_cast<unsigned>(InputBuffer->getBufferSize()));<o:p></o:p></p><p class=MsoPlainText>>+    switch (type) {<o:p></o:p></p><p class=MsoPlainText>>+      case sys::ELF_Relocatable_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::ELF_Executable_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::ELF_SharedObject_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::ELF_Core_FileType:<o:p></o:p></p><p class=MsoPlainText>>+          Dyld = new RuntimeDyldELF(MM);<o:p></o:p></p><p class=MsoPlainText>>+          break;<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_Object_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_Executable_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_FixedVirtualMemorySharedLib_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_Core_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_PreloadExecutable_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_DynamicallyLinkedSharedLib_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_DynamicLinker_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_Bundle_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_DynamicallyLinkedSharedLibStub_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      case sys::Mach_O_DSYMCompanion_FileType:<o:p></o:p></p><p class=MsoPlainText>>+          Dyld = new RuntimeDyldMachO(MM);<o:p></o:p></p><p class=MsoPlainText>>+          break;<o:p></o:p></p><p class=MsoPlainText>>+      case sys::COFF_FileType:<o:p></o:p></p><p class=MsoPlainText>>+      default:<o:p></o:p></p><p class=MsoPlainText>>+          report_fatal_error("Unknown object format!");<o:p></o:p></p><p class=MsoPlainText>>+    }<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>>I don't have a problem with using sys::IdentifyFileType, but basically the function is now unused and should be deleted, though it >makes a convenient interface if we want to keep it around.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal>Yes, I probably should have deleted the RuntimeDyldMachO::isKnownFormat function.  The corresponding isCompatibleFormat function will still be used once a dynamic loader is instantiated, and so the implementation of isKnownFormat can be moved to there.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>-Andy<o:p></o:p></p></div></body></html>