[llvm] [llvm-rc] Support ARM64EC resource generation (PR #78908)

Billy Laws via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 30 16:03:11 PST 2024


https://github.com/bylaws updated https://github.com/llvm/llvm-project/pull/78908

>From a0af1ed356c01f464d92ef93431fa466ca0b036d Mon Sep 17 00:00:00 2001
From: Billy Laws <blaws05 at gmail.com>
Date: Sun, 21 Jan 2024 18:43:56 +0000
Subject: [PATCH] [llvm-rc] Support ARM64EC resource generation

---
 llvm/test/tools/llvm-rc/windres-prefix.test | 8 ++++++++
 llvm/tools/llvm-rc/llvm-rc.cpp              | 5 ++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/llvm/test/tools/llvm-rc/windres-prefix.test b/llvm/test/tools/llvm-rc/windres-prefix.test
index 9d24bf9ee7b2a..4c53fdfc3db65 100644
--- a/llvm/test/tools/llvm-rc/windres-prefix.test
+++ b/llvm/test/tools/llvm-rc/windres-prefix.test
@@ -5,14 +5,22 @@
 ; Check that a triple prefix on the executable gets picked up as target triple.
 
 ; RUN: ln -fs llvm-windres %t/aarch64-w64-mingw32-windres
+; RUN: ln -fs llvm-windres %t/arm64ec-w64-mingw32-windres
 ; RUN: %t/aarch64-w64-mingw32-windres -### %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK-PREPROC
+; RUN: %t/arm64ec-w64-mingw32-windres -### %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK-PREPROC-EC
 ; CHECK-PREPROC: "clang" "--driver-mode=gcc" "-target" "aarch64-w64-mingw32"
+; CHECK-PREPROC-EC: "clang" "--driver-mode=gcc" "-target" "arm64ec-w64-mingw32"
 
 ; Check that the triple prefix also affects the output object file type.
 
 ; RUN: %t/aarch64-w64-mingw32-windres --no-preprocess %p/Inputs/tag-stringtable-basic.rc %t.o
+; RUN: %t/arm64ec-w64-mingw32-windres --no-preprocess %p/Inputs/tag-stringtable-basic.rc %t-ec.o
 ; RUN: llvm-readobj --coff-resources %t.o | FileCheck %s --check-prefix=CHECK-OBJ
+; RUN: llvm-readobj --coff-resources %t-ec.o | FileCheck %s --check-prefix=CHECK-OBJ-EC
 
 ; CHECK-OBJ: Format: COFF-ARM64
 ; CHECK-OBJ: Resources [
 ; CHECK-OBJ:   Total Number of Resources:
+; CHECK-OBJ-EC: Format: COFF-ARM64EC
+; CHECK-OBJ-EC: Resources [
+; CHECK-OBJ-EC:   Total Number of Resources:
diff --git a/llvm/tools/llvm-rc/llvm-rc.cpp b/llvm/tools/llvm-rc/llvm-rc.cpp
index 1c3379a3a9678..51214524adeef 100644
--- a/llvm/tools/llvm-rc/llvm-rc.cpp
+++ b/llvm/tools/llvm-rc/llvm-rc.cpp
@@ -710,7 +710,10 @@ void doCvtres(std::string Src, std::string Dest, std::string TargetTriple) {
     MachineType = COFF::IMAGE_FILE_MACHINE_ARMNT;
     break;
   case Triple::aarch64:
-    MachineType = COFF::IMAGE_FILE_MACHINE_ARM64;
+    if (T.isWindowsArm64EC())
+      MachineType = COFF::IMAGE_FILE_MACHINE_ARM64EC;
+    else
+      MachineType = COFF::IMAGE_FILE_MACHINE_ARM64;
     break;
   default:
     fatalError("Unsupported architecture in target '" + Twine(TargetTriple) +



More information about the llvm-commits mailing list