Skip to content

Commit

Permalink
[lld][Hexagon]Support HEX_32 when building shared objects
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D66105

llvm-svn: 369121
  • Loading branch information
SidManning committed Aug 16, 2019
1 parent 05e9c2a commit 2d3ebeb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
7 changes: 7 additions & 0 deletions lld/ELF/Arch/Hexagon.cpp
Expand Up @@ -29,6 +29,7 @@ class Hexagon final : public TargetInfo {
uint32_t calcEFlags() const override;
RelExpr getRelExpr(RelType type, const Symbol &s,
const uint8_t *loc) const override;
RelType getDynRel(RelType type) const override;
void relocateOne(uint8_t *loc, RelType type, uint64_t val) const override;
void writePltHeader(uint8_t *buf) const override;
void writePlt(uint8_t *buf, uint64_t gotPltEntryAddr, uint64_t pltEntryAddr,
Expand Down Expand Up @@ -285,6 +286,12 @@ void Hexagon::writePlt(uint8_t *buf, uint64_t gotPltEntryAddr,
relocateOne(buf + 4, R_HEX_6_PCREL_X, gotPltEntryAddr - pltEntryAddr);
}

RelType Hexagon::getDynRel(RelType type) const {
if (type == R_HEX_32)
return type;
return R_HEX_NONE;
}

TargetInfo *elf::getHexagonTargetInfo() {
static Hexagon target;
return ⌖
Expand Down
25 changes: 22 additions & 3 deletions lld/test/ELF/hexagon-shared.s
Expand Up @@ -6,6 +6,7 @@
# RUN: llvm-objdump -d -j .plt %t4.so | FileCheck --check-prefix=PLT %s
# RUN: llvm-objdump -d -j .text %t4.so | FileCheck --check-prefix=TEXT %s
# RUN: llvm-objdump -D -j .got %t4.so | FileCheck --check-prefix=GOT %s
# RUN: llvm-readelf -r %t4.so | FileCheck --check-prefix=RELO %s

.global foo
foo:
Expand All @@ -25,22 +26,40 @@ jumpr r0
# R_HEX_GOT_16_X
r0 = add(r1,##bar@GOT)

# R_HEX_32
.data
.global var
.type var,@object
.p2align 2
var:
.word 10
.size var, 4
.global pvar
.type pvar,@object
pvar:
.word var
.size pvar, 4

# PLT: { immext(#131008
# PLT: r28 = add(pc,##131024) }
# PLT: r28 = add(pc,##131032) }
# PLT: { r14 -= add(r28,#16)
# PLT: r15 = memw(r28+#8)
# PLT: r28 = memw(r28+#4) }
# PLT: { r14 = asr(r14,#2)
# PLT: jumpr r28 }
# PLT: { trap0(#219) }
# PLT: immext(#131008)
# PLT: r14 = add(pc,##131008) }
# PLT: r14 = add(pc,##131016) }
# PLT: r28 = memw(r14+#0) }
# PLT: jumpr r28 }

# TEXT: 10000: 00 00 01 00 00010000
# TEXT: { call 0x10050 }
# TEXT: r0 = add(r1,##-65408) }
# TEXT: r0 = add(r1,##-65416) }

# GOT: .got:
# GOT: 20080: 00 00 00 00 00000000 <unknown>

# RELO: 00020080 00000121 R_HEX_GLOB_DAT
# RELO: 00030004 00000406 R_HEX_32
# RELO: 00030018 00000122 R_HEX_JMP_SLOT

0 comments on commit 2d3ebeb

Please sign in to comment.