<div dir="ltr">Seems like a silly nit, but SubTarget is pretty loaded in llvm. Also a lot of it seems subtarget and target for various parts of the example. Curious what's going on with the example :)<br><div><br></div><div>-eric</div></div><br><div class="gmail_quote">On Wed Feb 25 2015 at 4:53:04 PM Michael J. Spencer <<a href="mailto:bigcheesegs@gmail.com">bigcheesegs@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mspencer<br>
Date: Wed Feb 25 18:48:10 2015<br>
New Revision: 230594<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=230594&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=230594&view=rev</a><br>
Log:<br>
Add Example Sub Target.<br>
<br>
Added:<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>CMakeLists.txt<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.cpp<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.h<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.cpp<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.h<br>
    lld/trunk/test/elf/X86_64/<u></u>ExampleTarget/<br>
    lld/trunk/test/elf/X86_64/<u></u>ExampleTarget/triple.test<br>
Modified:<br>
    lld/trunk/include/lld/<u></u>ReaderWriter/ELFTargets.h<br>
    lld/trunk/lib/Driver/<u></u>CMakeLists.txt<br>
    lld/trunk/lib/Driver/<u></u>GnuLdDriver.cpp<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/CMakeLists.txt<br>
<br>
Modified: lld/trunk/include/lld/<u></u>ReaderWriter/ELFTargets.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFTargets.h?rev=230594&r1=230593&r2=230594&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/include/lld/<u></u>ReaderWriter/ELFTargets.h?rev=<u></u>230594&r1=230593&r2=230594&<u></u>view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/include/lld/<u></u>ReaderWriter/ELFTargets.h (original)<br>
+++ lld/trunk/include/lld/<u></u>ReaderWriter/ELFTargets.h Wed Feb 25 18:48:10 2015<br>
@@ -27,6 +27,7 @@ LLVM_TARGET(ARM)<br>
 LLVM_TARGET(Hexagon)<br>
 LLVM_TARGET(Mips)<br>
 LLVM_TARGET(X86)<br>
+LLVM_TARGET(Example)<br>
 LLVM_TARGET(X86_64)<br>
<br>
 #undef LLVM_TARGET<br>
<br>
Modified: lld/trunk/lib/Driver/<u></u>CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/CMakeLists.txt?rev=230594&r1=230593&r2=230594&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/Driver/<u></u>CMakeLists.txt?rev=230594&r1=<u></u>230593&r2=230594&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/Driver/<u></u>CMakeLists.txt (original)<br>
+++ lld/trunk/lib/Driver/<u></u>CMakeLists.txt Wed Feb 25 18:48:10 2015<br>
@@ -28,6 +28,7 @@ add_llvm_library(lldDriver<br>
     lldHexagonELFTarget<br>
     lldMipsELFTarget<br>
     lldX86ELFTarget<br>
+    lldExampleSubTarget<br>
     lldX86_64ELFTarget<br>
     lldCore<br>
     lldNative<br>
<br>
Modified: lld/trunk/lib/Driver/<u></u>GnuLdDriver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=230594&r1=230593&r2=230594&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/Driver/<u></u>GnuLdDriver.cpp?rev=230594&r1=<u></u>230593&r2=230594&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/Driver/<u></u>GnuLdDriver.cpp (original)<br>
+++ lld/trunk/lib/Driver/<u></u>GnuLdDriver.cpp Wed Feb 25 18:48:10 2015<br>
@@ -353,6 +353,7 @@ GnuLdDriver::<u></u>createELFLinkingContext(llv<br>
   LLVM_TARGET(Hexagon)<br>
   LLVM_TARGET(Mips)<br>
   LLVM_TARGET(X86)<br>
+  LLVM_TARGET(Example)<br>
   LLVM_TARGET(X86_64)<br>
 #undef LLVM_TARGET<br>
   return nullptr;<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/CMakeLists.txt?rev=230594&r1=230593&r2=230594&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>CMakeLists.txt?rev=230594&r1=<u></u>230593&r2=230594&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/CMakeLists.txt (original)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/CMakeLists.txt Wed Feb 25 18:48:10 2015<br>
@@ -9,3 +9,5 @@ add_llvm_library(lldX86_<u></u>64ELFTarget<br>
     LLVMObject<br>
     LLVMSupport<br>
   )<br>
+<br>
+add_subdirectory(<u></u>ExampleSubTarget)<br>
<br>
Added: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/CMakeLists.txt?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>ExampleSubTarget/CMakeLists.<u></u>txt?rev=230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>CMakeLists.txt (added)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>CMakeLists.txt Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,6 @@<br>
+add_llvm_library(<u></u>lldExampleSubTarget<br>
+  ExampleLinkingContext.cpp<br>
+  ExampleTargetHandler.cpp<br>
+  LINK_LIBS<br>
+    lldX86_64ELFTarget<br>
+  )<br>
<br>
Added: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.cpp?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>ExampleSubTarget/<u></u>ExampleLinkingContext.cpp?rev=<u></u>230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.cpp (added)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.cpp Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,36 @@<br>
+//===- lib/ReaderWriter/ELF/X86_64/<u></u>ExampleTarget/<u></u>ExampleLinkingContext.cpp ----===//<br>
+//<br>
+//                             The LLVM Linker<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<u></u>------------------------------<u></u>----------------===//<br>
+<br>
+#include "ExampleLinkingContext.h"<br>
+<br>
+#include "ExampleTargetHandler.h"<br>
+<br>
+using namespace lld;<br>
+using namespace elf;<br>
+<br>
+std::unique_ptr<<u></u>ELFLinkingContext><br>
+ExampleLinkingContext::<u></u>create(llvm::Triple triple) {<br>
+  if (triple.getVendorName() == "example")<br>
+    return llvm::make_unique<<u></u>ExampleLinkingContext>(triple)<u></u>;<br>
+  return nullptr;<br>
+}<br>
+<br>
+ExampleLinkingContext::<u></u>ExampleLinkingContext(llvm::<u></u>Triple triple)<br>
+    : X86_64LinkingContext(triple, std::unique_ptr<<u></u>TargetHandlerBase>(<br>
+                                       new ExampleTargetHandler(*this))) {<br>
+  _outputELFType = llvm::ELF::ET_LOPROC;<br>
+}<br>
+<br>
+StringRef ExampleLinkingContext::<u></u>entrySymbolName() const {<br>
+  return "_start";<br>
+}<br>
+<br>
+void ExampleLinkingContext::<u></u>addPasses(PassManager &p) {<br>
+  ELFLinkingContext::addPasses(<u></u>p);<br>
+}<br>
<br>
Added: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleLinkingContext.h?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>ExampleSubTarget/<u></u>ExampleLinkingContext.h?rev=<u></u>230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.h (added)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleLinkingContext.h Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,31 @@<br>
+//===- lib/ReaderWriter/ELF/X86_64/<u></u>ExampleTarget/<u></u>ExampleLinkingContext.h --===//<br>
+//<br>
+//                             The LLVM Linker<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<u></u>------------------------------<u></u>----------------===//<br>
+<br>
+#ifndef LLD_READER_WRITER_ELF_X86_64_<u></u>EXAMPLE_TARGET_EXAMPLE_<u></u>LINKING_CONTEXT<br>
+#define LLD_READER_WRITER_ELF_X86_64_<u></u>EXAMPLE_TARGET_EXAMPLE_<u></u>LINKING_CONTEXT<br>
+<br>
+#include "../X86_64LinkingContext.h"<br>
+#include "../X86_64TargetHandler.h"<br>
+<br>
+namespace lld {<br>
+namespace elf {<br>
+<br>
+class ExampleLinkingContext final : public X86_64LinkingContext {<br>
+public:<br>
+  static std::unique_ptr<<u></u>ELFLinkingContext> create(llvm::Triple);<br>
+  ExampleLinkingContext(llvm::<u></u>Triple triple);<br>
+<br>
+  StringRef entrySymbolName() const override;<br>
+  void addPasses(PassManager &) override;<br>
+};<br>
+<br>
+} // end namespace elf<br>
+} // end namespace lld<br>
+<br>
+#endif<br>
<br>
Added: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.cpp?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>ExampleSubTarget/<u></u>ExampleTargetHandler.cpp?rev=<u></u>230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.cpp (added)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.cpp Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,24 @@<br>
+//===- lib/ReaderWriter/ELF/X86_64/<u></u>ExampleTarget/<u></u>ExampleTargetHandler.cpp -===//<br>
+//<br>
+//                             The LLVM Linker<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<u></u>------------------------------<u></u>----------------===//<br>
+<br>
+#include "ExampleTargetHandler.h"<br>
+<br>
+#include "ExampleLinkingContext.h"<br>
+#include "../X86_64ExecutableWriter.h"<br>
+<br>
+using namespace lld;<br>
+using namespace elf;<br>
+<br>
+ExampleTargetHandler::<u></u>ExampleTargetHandler(<u></u>ExampleLinkingContext &c)<br>
+    : X86_64TargetHandler(c), _exampleContext(c) {}<br>
+<br>
+std::unique_ptr<Writer> ExampleTargetHandler::<u></u>getWriter() {<br>
+  return std::unique_ptr<Writer>(<br>
+      new X86_64ExecutableWriter(_<u></u>exampleContext, *_x86_64TargetLayout));<br>
+}<br>
<br>
Added: lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/X86_64/ExampleSubTarget/ExampleTargetHandler.h?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/X86_64/<u></u>ExampleSubTarget/<u></u>ExampleTargetHandler.h?rev=<u></u>230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.h (added)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/X86_64/ExampleSubTarget/<u></u>ExampleTargetHandler.h Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,31 @@<br>
+//===- lib/ReaderWriter/ELF/X86_64/<u></u>ExampleTarget/<u></u>ExampleTargetHandler.h ---===//<br>
+//<br>
+//                             The LLVM Linker<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<u></u>------------------------------<u></u>----------------===//<br>
+<br>
+#ifndef LLD_READER_WRITER_ELF_X86_64_<u></u>EXAMPLE_TARGET_EXAMPLE_TARGET_<u></u>HANDLER_H<br>
+#define LLD_READER_WRITER_ELF_X86_64_<u></u>EXAMPLE_TARGET_EXAMPLE_TARGET_<u></u>HANDLER_H<br>
+<br>
+#include "../X86_64TargetHandler.h"<br>
+<br>
+namespace lld {<br>
+namespace elf {<br>
+class ExampleLinkingContext;<br>
+<br>
+class ExampleTargetHandler final : public X86_64TargetHandler {<br>
+public:<br>
+  ExampleTargetHandler(<u></u>ExampleLinkingContext &c);<br>
+<br>
+  std::unique_ptr<Writer> getWriter() override;<br>
+<br>
+private:<br>
+  ExampleLinkingContext &_exampleContext;<br>
+};<br>
+} // end namespace elf<br>
+} // end namespace lld<br>
+<br>
+#endif<br>
<br>
Added: lld/trunk/test/elf/X86_64/<u></u>ExampleTarget/triple.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/ExampleTarget/triple.test?rev=230594&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/test/elf/<u></u>X86_64/ExampleTarget/triple.<u></u>test?rev=230594&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/test/elf/X86_64/<u></u>ExampleTarget/triple.test (added)<br>
+++ lld/trunk/test/elf/X86_64/<u></u>ExampleTarget/triple.test Wed Feb 25 18:48:10 2015<br>
@@ -0,0 +1,32 @@<br>
+# Check that the Example Target is actually used.<br>
+<br>
+# RUN: yaml2obj -format=elf %s -o %t.o<br>
+# RUN: lld -flavor gnu -target x86_64-example-freebsd9 %t.o -o %t.exe<br>
+# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s<br>
+#<br>
+# CHECK: Type: 0xFF00<br>
+<br>
+# object<br>
+<br>
+FileHeader:<br>
+  Class:           ELFCLASS64<br>
+  Data:            ELFDATA2LSB<br>
+  OSABI:           ELFOSABI_GNU<br>
+  Type:            ET_REL<br>
+  Machine:         EM_X86_64<br>
+Sections:<br>
+  - Name:            .text<br>
+    Type:            SHT_PROGBITS<br>
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]<br>
+    AddressAlign:    0x0000000000000010<br>
+    Content:         554889E5B864000000C745FC000000<u></u>005DC366666666662E0F1F84000000<u></u>0000554889E531C05DC3<br>
+Symbols:<br>
+  Local:<br>
+    - Name:            .text<br>
+      Type:            STT_SECTION<br>
+      Section:         .text<br>
+  Global:<br>
+    - Name:            _start<br>
+      Type:            STT_FUNC<br>
+      Section:         .text<br>
+      Size:            0x0000000000000000<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>