Skip to content

Commit 9078036

Browse files
authored
[lld] Add emulation support for hexagon (#98857)
1 parent e094abd commit 9078036

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

lld/ELF/Driver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ 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+
.Case("hexagonelf", {ELF32LEKind, EM_HEXAGON})
205206
.Default({ELFNoneKind, EM_NONE});
206207

207208
if (ret.first == ELFNoneKind)

lld/ELF/ScriptParser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ 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})
455456
.Default({ELFNoneKind, EM_NONE});
456457
}
457458

lld/test/ELF/emulation-hexagon.s

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# REQUIRES: hexagon
2+
# RUN: llvm-mc -filetype=obj -triple=hexagon %s -o %t.o
3+
# RUN: ld.lld %t.o -o %t
4+
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s
5+
# RUN: ld.lld -m hexagonelf %t.o -o %t
6+
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s
7+
8+
# RUN: echo 'OUTPUT_FORMAT(elf32-littlehexagon)' > %t.script
9+
# RUN: ld.lld %t.script %t.o -o %t
10+
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s
11+
12+
# RUN: echo 'OUTPUT_FORMAT(elf32-hexagon)' > %t.script
13+
# RUN: ld.lld %t.script %t.o -o %t
14+
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s
15+
16+
# CHECK: ELF Header:
17+
# CHECK-NEXT: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
18+
# CHECK-NEXT: Class: ELF32
19+
# CHECK-NEXT: Data: 2's complement, little endian
20+
# CHECK-NEXT: Version: 1 (current)
21+
# CHECK-NEXT: OS/ABI: UNIX - System V
22+
# CHECK-NEXT: ABI Version: 0
23+
# CHECK-NEXT: Type: EXEC (Executable file)
24+
# CHECK-NEXT: Machine: Qualcomm Hexagon
25+
# CHECK-NEXT: Version: 0x1
26+
# CHECK-NEXT: Entry point address: 0x200B4
27+
# CHECK-NEXT: Start of program headers: 52 (bytes into file)
28+
# CHECK-NEXT: Start of section headers:
29+
# CHECK-NEXT: Flags: 0x60
30+
# CHECK-NEXT: Size of this header: 52 (bytes)
31+
# CHECK-NEXT: Size of program headers: 32 (bytes)
32+
33+
.globl _start
34+
_start:

0 commit comments

Comments
 (0)