<div dir="ltr">Now that the amount of code in LLD to support AMDGPU is amazingly small. It is just 17 LOC. Can't be simpler than it.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 9, 2016 at 1:37 PM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Wed Mar  9 15:37:22 2016<br>
New Revision: 263063<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=263063&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=263063&view=rev</a><br>
Log:<br>
ELF: Remove non-standard ELF features from AMDGPU target.<br>
<br>
Patch by Tom Stellard!<br>
<br>
Modified:<br>
    lld/trunk/ELF/OutputSections.cpp<br>
    lld/trunk/ELF/Symbols.cpp<br>
    lld/trunk/ELF/Writer.cpp<br>
    lld/trunk/test/ELF/amdgpu-globals.s<br>
    lld/trunk/test/ELF/amdgpu-kernels.s<br>
<br>
Modified: lld/trunk/ELF/OutputSections.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=263063&r1=263062&r2=263063&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=263063&r1=263062&r2=263063&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/OutputSections.cpp (original)<br>
+++ lld/trunk/ELF/OutputSections.cpp Wed Mar  9 15:37:22 2016<br>
@@ -1463,13 +1463,7 @@ void SymbolTableSection<ELFT>::writeLoca<br>
         const OutputSectionBase<ELFT> *OutSec = Section->OutSec;<br>
         ESym->st_shndx = OutSec->SectionIndex;<br>
         VA = Section->getOffset(*Sym);<br>
-<br>
-        // Symbol offsets for AMDGPU are the offsets in bytes of the<br>
-        // symbols from the beginning of the section. There seems to be no<br>
-        // reason for that deviation -- it's just that the definition of<br>
-        // st_value field in AMDGPU's ELF is odd.<br>
-        if (Config->EMachine != EM_AMDGPU)<br>
-          VA += OutSec->getVA();<br>
+        VA += OutSec->getVA();<br>
       }<br>
       ESym->st_name = P.second;<br>
       ESym->st_size = Sym->st_size;<br>
<br>
Modified: lld/trunk/ELF/Symbols.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.cpp?rev=263063&r1=263062&r2=263063&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.cpp?rev=263063&r1=263062&r2=263063&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Symbols.cpp (original)<br>
+++ lld/trunk/ELF/Symbols.cpp Wed Mar  9 15:37:22 2016<br>
@@ -44,12 +44,6 @@ typename ELFFile<ELFT>::uintX_t SymbolBo<br>
       return D->Sym.st_value;<br>
     assert(SC->Live);<br>
<br>
-    // Symbol offsets for AMDGPU are the offsets in bytes of the symbols<br>
-    // from the beginning of the section. Note that this part of AMDGPU's<br>
-    // ELF spec is odd and not in line with the standard ELF.<br>
-    if (Config->EMachine == EM_AMDGPU)<br>
-      return SC->getOffset(D->Sym);<br>
-<br>
     if (D->Sym.getType() == STT_TLS)<br>
       return SC->OutSec->getVA() + SC->getOffset(D->Sym) -<br>
              Out<ELFT>::TlsPhdr->p_vaddr;<br>
<br>
Modified: lld/trunk/ELF/Writer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=263063&r1=263062&r2=263063&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=263063&r1=263062&r2=263063&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Writer.cpp (original)<br>
+++ lld/trunk/ELF/Writer.cpp Wed Mar  9 15:37:22 2016<br>
@@ -1221,18 +1221,6 @@ static uint32_t toPhdrFlags(uint64_t Fla<br>
   return Ret;<br>
 }<br>
<br>
-/// For AMDGPU we need to use custom segment kinds in order to specify which<br>
-/// address space data should be loaded into.<br>
-template <class ELFT><br>
-static uint32_t getAmdgpuPhdr(OutputSectionBase<ELFT> *Sec) {<br>
-  uint32_t Flags = Sec->getFlags();<br>
-  if (Flags & SHF_AMDGPU_HSA_CODE)<br>
-    return PT_AMDGPU_HSA_LOAD_CODE_AGENT;<br>
-  if ((Flags & SHF_AMDGPU_HSA_GLOBAL) && !(Flags & SHF_AMDGPU_HSA_AGENT))<br>
-    return PT_AMDGPU_HSA_LOAD_GLOBAL_PROGRAM;<br>
-  return PT_LOAD;<br>
-}<br>
-<br>
 // Decide which program headers to create and which sections to include in each<br>
 // one.<br>
 template <class ELFT> void Writer<ELFT>::createPhdrs() {<br>
@@ -1281,9 +1269,7 @@ template <class ELFT> void Writer<ELFT>:<br>
     // If flags changed then we want new load segment.<br>
     uintX_t NewFlags = toPhdrFlags(Sec->getFlags());<br>
     if (Flags != NewFlags) {<br>
-      uint32_t LoadType = (Config->EMachine == EM_AMDGPU) ? getAmdgpuPhdr(Sec)<br>
-                                                          : (uint32_t)PT_LOAD;<br>
-      Load = AddHdr(LoadType, NewFlags);<br>
+      Load = AddHdr(PT_LOAD, NewFlags);<br>
       Flags = NewFlags;<br>
     }<br>
<br>
<br>
Modified: lld/trunk/test/ELF/amdgpu-globals.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/amdgpu-globals.s?rev=263063&r1=263062&r2=263063&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/amdgpu-globals.s?rev=263063&r1=263062&r2=263063&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/ELF/amdgpu-globals.s (original)<br>
+++ lld/trunk/test/ELF/amdgpu-globals.s Wed Mar  9 15:37:22 2016<br>
@@ -77,7 +77,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: module_global_agent<br>
-# CHECK: Value: 0x0<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Local<br>
 # CHECK: Section: .hsadata_global_agent<br>
@@ -85,7 +85,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: module_global_program<br>
-# CHECK: Value: 0x0<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Local<br>
 # CHECK: Section: .hsadata_global_program<br>
@@ -93,7 +93,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: module_global_readonly<br>
-# CHECK: Value: 0x0<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Local<br>
 # CHECK: Type: Object<br>
@@ -102,7 +102,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: program_global_agent<br>
-# CHECK: Value: 0x4<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Global<br>
 # CHECK: Type: Object<br>
@@ -111,7 +111,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: program_global_program<br>
-# CHECK: Value: 0x4<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Global<br>
 # CHECK: Type: Object<br>
@@ -120,7 +120,7 @@ program_global_readonly:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: program_global_readonly<br>
-# CHECK: Value: 0x4<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Global<br>
 # CHECK: Type: Object<br>
@@ -128,11 +128,11 @@ program_global_readonly:<br>
 # CHECK: }<br>
<br>
 # CHECK: ProgramHeader {<br>
-# CHECK: Type: PT_AMDGPU_HSA_LOAD_GLOBAL_PROGRAM<br>
-# CHECK: VirtualAddress: [[HSADATA_GLOBAL_PROGRAM_ADDR]]<br>
+# CHECK: Type: PT_LOAD<br>
+# CHECK: VirtualAddress:<br>
 # CHECK: }<br>
<br>
 # CHECK: ProgramHeader {<br>
-# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT<br>
-# CHECK: VirtualAddress: [[HSATEXT_ADDR]]<br>
+# CHECK: Type: PT_LOAD<br>
+# CHECK: VirtualAddress:<br>
 # CHECK: }<br>
<br>
Modified: lld/trunk/test/ELF/amdgpu-kernels.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/amdgpu-kernels.s?rev=263063&r1=263062&r2=263063&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/amdgpu-kernels.s?rev=263063&r1=263062&r2=263063&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/ELF/amdgpu-kernels.s (original)<br>
+++ lld/trunk/test/ELF/amdgpu-kernels.s Wed Mar  9 15:37:22 2016<br>
@@ -41,7 +41,7 @@ kernel1:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: kernel0<br>
-# CHECK: Value: 0x0<br>
+# CHECK: Value:<br>
 # CHECK: Size: 4<br>
 # CHECK: Binding: Global<br>
 # CHECK: Type: AMDGPU_HSA_KERNEL<br>
@@ -50,7 +50,7 @@ kernel1:<br>
<br>
 # CHECK: Symbol {<br>
 # CHECK: Name: kernel1<br>
-# CHECK: Value: 0x100<br>
+# CHECK: Value:<br>
 # CHECK: Size: 8<br>
 # CHECK: Binding: Global<br>
 # CHECK: Type: AMDGPU_HSA_KERNEL<br>
@@ -58,6 +58,6 @@ kernel1:<br>
 # CHECK: }<br>
<br>
 # CHECK: ProgramHeader {<br>
-# CHECK: Type: PT_AMDGPU_HSA_LOAD_CODE_AGENT<br>
-# CHECK: VirtualAddress: [[HSATEXT_ADDR]]<br>
+# CHECK: Type: PT_LOAD<br>
+# CHECK: VirtualAddress:<br>
 # CHECK: }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>