Author: tstellar Date: Mon Oct 22 09:52:14 2018 New Revision: 344920 URL: http://llvm.org/viewvc/llvm-project?rev=344920&view=rev Log: Merging r344264:
------------------------------------------------------------------------ r344264 | mstorsjo | 2018-10-11 10:45:51 -0700 (Thu, 11 Oct 2018) | 8 lines [COFF] Set proper pointer size alignment for LocalImportChunk When these are accessed with load/store instructions on ARM64, it becomes strictly necessary to have them properly aligned. This fixes PR39228. Differential Revision: https://reviews.llvm.org/D53128 ------------------------------------------------------------------------ Added: lld/branches/release_70/test/COFF/arm64-localimport-align.s Modified: lld/branches/release_70/COFF/Chunks.h Modified: lld/branches/release_70/COFF/Chunks.h URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_70/COFF/Chunks.h?rev=344920&r1=344919&r2=344920&view=diff ============================================================================== --- lld/branches/release_70/COFF/Chunks.h (original) +++ lld/branches/release_70/COFF/Chunks.h Mon Oct 22 09:52:14 2018 @@ -345,7 +345,9 @@ private: // See comments for DefinedLocalImport class. class LocalImportChunk : public Chunk { public: - explicit LocalImportChunk(Defined *S) : Sym(S) {} + explicit LocalImportChunk(Defined *S) : Sym(S) { + Alignment = Config->is64() ? 8 : 4; + } size_t getSize() const override; void getBaserels(std::vector<Baserel> *Res) override; void writeTo(uint8_t *Buf) const override; Added: lld/branches/release_70/test/COFF/arm64-localimport-align.s URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_70/test/COFF/arm64-localimport-align.s?rev=344920&view=auto ============================================================================== --- lld/branches/release_70/test/COFF/arm64-localimport-align.s (added) +++ lld/branches/release_70/test/COFF/arm64-localimport-align.s Mon Oct 22 09:52:14 2018 @@ -0,0 +1,24 @@ +// REQUIRES: aarch64 +// RUN: llvm-mc -filetype=obj -triple=aarch64-windows %s -o %t.obj +// RUN: lld-link -entry:main -subsystem:console %t.obj -out:%t.exe +// Don't check the output, just make sure it links fine and doesn't +// error out due to a misaligned load. + .text + .globl main + .globl myfunc +main: + adrp x8, __imp_myfunc + ldr x0, [x8, :lo12:__imp_myfunc] + br x0 + ret +myfunc: + ret + + .section .rdata, "dr" + // Start the .rdata section with a 4 byte chunk, to expose the alignment + // of the next chunk in the section. +mydata: + .byte 42 + // The synthesized LocalImportChunk gets stored here in the .rdata + // section, but needs to get proper 8 byte alignment since it is a + // pointer, just like regular LookupChunks in the IAT. _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits