[lld] r262026 - Add comment on AMDGPU that the difference has no obvious reason.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 26 07:39:26 PST 2016
Author: ruiu
Date: Fri Feb 26 09:39:26 2016
New Revision: 262026
URL: http://llvm.org/viewvc/llvm-project?rev=262026&view=rev
Log:
Add comment on AMDGPU that the difference has no obvious reason.
Modified:
lld/trunk/ELF/OutputSections.cpp
lld/trunk/ELF/Symbols.cpp
Modified: lld/trunk/ELF/OutputSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=262026&r1=262025&r2=262026&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.cpp (original)
+++ lld/trunk/ELF/OutputSections.cpp Fri Feb 26 09:39:26 2016
@@ -1456,8 +1456,11 @@ void SymbolTableSection<ELFT>::writeLoca
const OutputSectionBase<ELFT> *OutSec = Section->OutSec;
ESym->st_shndx = OutSec->SectionIndex;
VA = Section->getOffset(*Sym);
- // Symbol offsets for AMDGPU need to be the offset in bytes of the
- // symbol from the beginning of the section.
+
+ // Symbol offsets for AMDGPU are the offsets in bytes of the
+ // symbols from the beginning of the section. There seems to be no
+ // reason for that deviation -- it's just that the definition of
+ // st_value field in AMDGPU's ELF is odd.
if (Config->EMachine != EM_AMDGPU)
VA += OutSec->getVA();
}
Modified: lld/trunk/ELF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.cpp?rev=262026&r1=262025&r2=262026&view=diff
==============================================================================
--- lld/trunk/ELF/Symbols.cpp (original)
+++ lld/trunk/ELF/Symbols.cpp Fri Feb 26 09:39:26 2016
@@ -44,10 +44,12 @@ typename ELFFile<ELFT>::uintX_t SymbolBo
return D->Sym.st_value;
assert(SC->Live);
- // Symbol offsets for AMDGPU need to be the offset in bytes of the symbol
- // from the beginning of the section.
+ // Symbol offsets for AMDGPU are the offsets in bytes of the symbols
+ // from the beginning of the section. Note that this part of AMDGPU's
+ // ELF spec is odd and not in line with the standard ELF.
if (Config->EMachine == EM_AMDGPU)
return SC->getOffset(D->Sym);
+
if (D->Sym.getType() == STT_TLS)
return SC->OutSec->getVA() + SC->getOffset(D->Sym) -
Out<ELFT>::TlsPhdr->p_vaddr;
More information about the llvm-commits
mailing list