[lld] r262026 - Add comment on AMDGPU that the difference has no obvious reason.
Rafael Espíndola via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 26 10:40:16 PST 2016
As mentioned before, according to the ELF spec executable and shared
object files *must* use virtual addresses, not offsets. This is simply
not valid ELF and a very slippery slope I would much prefer lld and
llvm to not be on. This has the potential of hitting far more places
than the IsMips64EL issue.
We are now adding support for -r, where it is correct (required) to
use offsets. Could you please delete this code and just require that
-r be used with the AMDGPU target?
On 26 February 2016 at 10:39, Rui Ueyama via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: ruiu
> Date: Fri Feb 26 09:39:26 2016
> New Revision: 262026
> URL: http://llvm.org/viewvc/llvm-project?rev=262026&view=rev
> Add comment on AMDGPU that the difference has no obvious reason.
> 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;
> - // 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) -
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
More information about the llvm-commits