mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 13:35:38 +08:00
Add comment on AMDGPU that the difference has no obvious reason.
llvm-svn: 262026
This commit is contained in:
@@ -1456,8 +1456,11 @@ void SymbolTableSection<ELFT>::writeLocalSymbols(uint8_t *&Buf) {
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -44,10 +44,12 @@ typename ELFFile<ELFT>::uintX_t SymbolBody::getVA() const {
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user