[lld] 9078036 - [lld] Add emulation support for hexagon (#98857)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 16 13:01:30 PDT 2024


Author: Brian Cain
Date: 2024-07-16T15:01:27-05:00
New Revision: 9078036685af5b170380ce223e875659e3674e76

URL: https://github.com/llvm/llvm-project/commit/9078036685af5b170380ce223e875659e3674e76
DIFF: https://github.com/llvm/llvm-project/commit/9078036685af5b170380ce223e875659e3674e76.diff

LOG: [lld] Add emulation support for hexagon (#98857)

Added: 
    lld/test/ELF/emulation-hexagon.s

Modified: 
    lld/ELF/Driver.cpp
    lld/ELF/ScriptParser.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 710f5a642a227..40e095a133d95 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -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)

diff  --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp
index 649e2d0e29c22..92ef9330141fc 100644
--- a/lld/ELF/ScriptParser.cpp
+++ b/lld/ELF/ScriptParser.cpp
@@ -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});
 }
 

diff  --git a/lld/test/ELF/emulation-hexagon.s b/lld/test/ELF/emulation-hexagon.s
new file mode 100644
index 0000000000000..a8a02d4c428b5
--- /dev/null
+++ b/lld/test/ELF/emulation-hexagon.s
@@ -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:


        


More information about the llvm-commits mailing list