Skip to content

Commit 5342030

Browse files
committed
[lld] Add emulation support for hexagon
1 parent 6441df3 commit 5342030

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

lld/ELF/Driver.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ static std::tuple<ELFKind, uint16_t, uint8_t> parseEmulation(StringRef emul) {
202202
.Case("elf64_amdgpu", {ELF64LEKind, EM_AMDGPU})
203203
.Case("elf64loongarch", {ELF64LEKind, EM_LOONGARCH})
204204
.Case("elf64_s390", {ELF64BEKind, EM_S390})
205+
.Cases("elf32_littlehexagon", "elf32_hexagon",
206+
{ELF32LEKind, EM_HEXAGON})
205207
.Default({ELFNoneKind, EM_NONE});
206208

207209
if (ret.first == ELFNoneKind)

lld/ELF/ScriptParser.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,8 @@ static std::pair<ELFKind, uint16_t> parseBfdName(StringRef s) {
452452
.Case("elf32-loongarch", {ELF32LEKind, EM_LOONGARCH})
453453
.Case("elf64-loongarch", {ELF64LEKind, EM_LOONGARCH})
454454
.Case("elf64-s390", {ELF64BEKind, EM_S390})
455+
.Cases("elf32-hexagon", "elf32-littlehexagon", {ELF32LEKind, EM_HEXAGON})
456+
.Case("elf32-bighexagon", {ELF32BEKind, EM_HEXAGON})
455457
.Default({ELFNoneKind, EM_NONE});
456458
}
457459

lld/test/ELF/emulation-hexagon.s

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# REQUIRES: hexagon
2+
3+
# RUN: llvm-mc -filetype=obj -triple=hexagon %s -o %t.o
4+
# RUN: ld.lld %t.o -o %t
5+
# RUN: llvm-readobj --file-headers %t | FileCheck --check-prefixes=HEXAGON,LE %s
6+
# RUN: ld.lld -m elf32_littlehexagon %t.o -o %t
7+
# RUN: llvm-readobj --file-headers %t | FileCheck --check-prefixes=HEXAGON,LE %s
8+
# RUN: echo 'OUTPUT_FORMAT(elf32-hexagon)' > %t.script
9+
# RUN: ld.lld %t.script %t.o -o %t
10+
# RUN: llvm-readobj --file-headers %t | FileCheck --check-prefixes=HEXAGON,LE %s
11+
12+
# HEXAGON: ElfHeader {
13+
# HEXAGON-NEXT: Ident {
14+
# HEXAGON-NEXT: Magic: (7F 45 4C 46)
15+
# HEXAGON-NEXT: Class: 32-bit (0x1)
16+
# LE-NEXT: DataEncoding: LittleEndian (0x1)
17+
# BE-NEXT: DataEncoding: BigEndian (0x2)
18+
# HEXAGON-NEXT: FileVersion: 1
19+
# HEXAGON-NEXT: OS/ABI: SystemV (0x0)
20+
# HEXAGON-NEXT: ABIVersion: 0
21+
# HEXAGON-NEXT: Unused: (00 00 00 00 00 00 00)
22+
# HEXAGON-NEXT: }
23+
# HEXAGON-NEXT: Type: Executable (0x2)
24+
# HEXAGON-NEXT: Machine: EM_HEXAGON (0xA4)
25+
# HEXAGON-NEXT: Version: 1
26+
# HEXAGON-NEXT: Entry: 0x200B4
27+
# HEXAGON-NEXT: ProgramHeaderOffset: 0x34
28+
# HEXAGON-NEXT: SectionHeaderOffset:
29+
# HEXAGON-NEXT: Flags [ (0x60)
30+
# HEXAGON-NEXT: 0x20
31+
# HEXAGON-NEXT: 0x40
32+
# HEXAGON-NEXT: ]
33+
34+
.globl _start
35+
_start:

0 commit comments

Comments
 (0)