Skip to content

Commit

Permalink
[lld] Add emulation support for hexagon
Browse files Browse the repository at this point in the history
  • Loading branch information
androm3da committed Jul 15, 2024
1 parent 8659c91 commit b6b6b41
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 0 deletions.
1 change: 1 addition & 0 deletions lld/ELF/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ static std::tuple<ELFKind, uint16_t, uint8_t> parseEmulation(StringRef emul) {
.Case("elf64_amdgpu", {ELF64LEKind, EM_AMDGPU})
.Case("elf64loongarch", {ELF64LEKind, EM_LOONGARCH})
.Case("elf64_s390", {ELF64BEKind, EM_S390})
.Case("hexagonelf", {ELF32LEKind, EM_HEXAGON})
.Default({ELFNoneKind, EM_NONE});

if (ret.first == ELFNoneKind)
Expand Down
1 change: 1 addition & 0 deletions lld/ELF/ScriptParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ static std::pair<ELFKind, uint16_t> parseBfdName(StringRef s) {
.Case("elf32-loongarch", {ELF32LEKind, EM_LOONGARCH})
.Case("elf64-loongarch", {ELF64LEKind, EM_LOONGARCH})
.Case("elf64-s390", {ELF64BEKind, EM_S390})
.Cases("elf32-hexagon", "elf32-littlehexagon", {ELF32LEKind, EM_HEXAGON})
.Default({ELFNoneKind, EM_NONE});
}

Expand Down
34 changes: 34 additions & 0 deletions lld/test/ELF/emulation-hexagon.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# REQUIRES: hexagon
# RUN: llvm-mc -filetype=obj -triple=hexagon %s -o %t.o
# RUN: ld.lld %t.o -o %t
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s
# RUN: ld.lld -m hexagonelf %t.o -o %t
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s

# RUN: echo 'OUTPUT_FORMAT(elf32-littlehexagon)' > %t.script
# RUN: ld.lld %t.script %t.o -o %t
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s

# RUN: echo 'OUTPUT_FORMAT(elf32-hexagon)' > %t.script
# RUN: ld.lld %t.script %t.o -o %t
# RUN: llvm-readelf --file-headers %t | FileCheck --check-prefix=CHECK %s

# CHECK: ELF Header:
# CHECK-NEXT: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
# CHECK-NEXT: Class: ELF32
# CHECK-NEXT: Data: 2's complement, little endian
# CHECK-NEXT: Version: 1 (current)
# CHECK-NEXT: OS/ABI: UNIX - System V
# CHECK-NEXT: ABI Version: 0
# CHECK-NEXT: Type: EXEC (Executable file)
# CHECK-NEXT: Machine: Qualcomm Hexagon
# CHECK-NEXT: Version: 0x1
# CHECK-NEXT: Entry point address: 0x200B4
# CHECK-NEXT: Start of program headers: 52 (bytes into file)
# CHECK-NEXT: Start of section headers:
# CHECK-NEXT: Flags: 0x60
# CHECK-NEXT: Size of this header: 52 (bytes)
# CHECK-NEXT: Size of program headers: 32 (bytes)

.globl _start
_start:

0 comments on commit b6b6b41

Please sign in to comment.