mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 00:16:25 +00:00
[RuntimeDyld] Apply padding and alignment bumps to all sections with stubs, and
increase the MachO/x86-64 stub alignment to 8. Stub alignment should be guaranteed for any section containing RuntimeDyld stubs/GOT-entries. To do this we should pad and align all sections containing stubs, not just code sections. This commit also bumps the MachO/x86-64 stub alignment to 8, so that GOT entries will be aligned. llvm-svn: 362139
This commit is contained in:
parent
9475df5938
commit
b37b37b6f7
@ -799,13 +799,12 @@ RuntimeDyldImpl::emitSection(const ObjectFile &Obj,
|
||||
pData = data.data();
|
||||
}
|
||||
|
||||
// Code section alignment needs to be at least as high as stub alignment or
|
||||
// padding calculations may by incorrect when the section is remapped to a
|
||||
// higher alignment.
|
||||
if (IsCode) {
|
||||
// If there are any stubs then the section alignment needs to be at least as
|
||||
// high as stub alignment or padding calculations may by incorrect when the
|
||||
// section is remapped.
|
||||
if (StubBufSize != 0) {
|
||||
Alignment = std::max(Alignment, getStubAlignment());
|
||||
if (StubBufSize > 0)
|
||||
PaddingSize += getStubAlignment() - 1;
|
||||
PaddingSize += getStubAlignment() - 1;
|
||||
}
|
||||
|
||||
// Some sections, such as debug info, don't need to be loaded for execution.
|
||||
|
@ -28,7 +28,7 @@ public:
|
||||
|
||||
unsigned getMaxStubSize() const override { return 8; }
|
||||
|
||||
unsigned getStubAlignment() override { return 1; }
|
||||
unsigned getStubAlignment() override { return 8; }
|
||||
|
||||
Expected<relocation_iterator>
|
||||
processRelocationRef(unsigned SectionID, relocation_iterator RelI,
|
||||
|
@ -22,8 +22,9 @@ insn2:
|
||||
movl x(%rip), %eax
|
||||
|
||||
# Test PC-rel GOT relocation.
|
||||
# Verify both the contents of the GOT entry for y, and that the movq instruction
|
||||
# references the correct GOT entry address:
|
||||
# Verify the alignment of the GOT entry, the contents of the GOT entry for y,
|
||||
# and that the movq instruction references the correct GOT entry address:
|
||||
# rtdyld-check: stub_addr(test_x86-64.o/__text, y)[2:0] = 0
|
||||
# rtdyld-check: *{8}(stub_addr(test_x86-64.o/__text, y)) = y
|
||||
# rtdyld-check: decode_operand(insn3, 4) = stub_addr(test_x86-64.o/__text, y) - next_pc(insn3)
|
||||
insn3:
|
||||
|
Loading…
Reference in New Issue
Block a user