Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[llvm-objcopy] Add SystemZ support #81841

Merged
merged 1 commit into from
Feb 16, 2024
Merged

Conversation

uweigand
Copy link
Member

This is also necessary for enabling ClangBuiltLinux: ClangBuiltLinux/linux#1530

This is also necessary for enabling ClangBuiltLinux:
ClangBuiltLinux/linux#1530
@llvmbot
Copy link

llvmbot commented Feb 15, 2024

@llvm/pr-subscribers-llvm-binary-utilities

Author: Ulrich Weigand (uweigand)

Changes

This is also necessary for enabling ClangBuiltLinux: ClangBuiltLinux/linux#1530


Full diff: https://github.com/llvm/llvm-project/pull/81841.diff

3 Files Affected:

  • (modified) llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test (+6)
  • (modified) llvm/test/tools/llvm-objcopy/ELF/cross-arch-headers.test (+7)
  • (modified) llvm/tools/llvm-objcopy/ObjcopyOptions.cpp (+2)
diff --git a/llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test b/llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test
index fc5856691f8dca..f88b7575002a94 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test
@@ -48,6 +48,9 @@
 # RUN: llvm-objcopy -I binary -O elf64-loongarch %t.txt %t.la64.o
 # RUN: llvm-readobj --file-headers %t.la64.o | FileCheck %s --check-prefixes=CHECK,LE,LA64,64
 
+# RUN: llvm-objcopy -I binary -O elf64-s390 %t.txt %t.s390x.o
+# RUN: llvm-readobj --file-headers %t.s390x.o | FileCheck %s --check-prefixes=CHECK,BE,S390X,64
+
 # CHECK: Format:
 # 32-SAME:      elf32-
 # 64-SAME:      elf64-
@@ -64,6 +67,7 @@
 # PPCLE-SAME:   powerpcle{{$}}
 # SPARC-SAME:   sparc
 # SPARCEL-SAME: sparc
+# S390X-SAME:   s390
 # X86-64-SAME:  x86-64
 
 # AARCH64-NEXT: Arch: aarch64
@@ -81,6 +85,7 @@
 # RISCV64-NEXT: Arch: riscv64
 # SPARC-NEXT:   Arch: sparc{{$}}
 # SPARCEL-NEXT: Arch: sparcel
+# S390X-NEXT:   Arch: s390x
 # X86-64-NEXT:  Arch: x86_64
 
 # 32-NEXT:      AddressSize: 32bit
@@ -116,6 +121,7 @@
 # RISCV64-NEXT:   Machine: EM_RISCV (0xF3)
 # SPARC-NEXT:     Machine: EM_SPARC (0x2)
 # SPARCEL-NEXT:   Machine: EM_SPARC (0x2)
+# S390X-NEXT:     Machine: EM_S390 (0x16)
 # X86-64-NEXT:    Machine: EM_X86_64 (0x3E)
 
 # CHECK-NEXT:     Version: 1
diff --git a/llvm/test/tools/llvm-objcopy/ELF/cross-arch-headers.test b/llvm/test/tools/llvm-objcopy/ELF/cross-arch-headers.test
index 882940c05e19c2..9a8128611792d5 100644
--- a/llvm/test/tools/llvm-objcopy/ELF/cross-arch-headers.test
+++ b/llvm/test/tools/llvm-objcopy/ELF/cross-arch-headers.test
@@ -117,6 +117,10 @@
 # RUN: llvm-readobj --file-headers %t.elf64_loongarch.o | FileCheck %s --check-prefixes=CHECK,LE,LA64,64,SYSV
 # RUN: llvm-readobj --file-headers %t.elf64_loongarch.dwo | FileCheck %s --check-prefixes=CHECK,LE,LA64,64,SYSV
 
+# RUN: llvm-objcopy %t.o -O elf64-s390 %t.elf64_s390.o --split-dwo=%t.elf64_s390.dwo
+# RUN: llvm-readobj --file-headers %t.elf64_s390.o | FileCheck %s --check-prefixes=CHECK,BE,S390X,64,SYSV
+# RUN: llvm-readobj --file-headers %t.elf64_s390.dwo | FileCheck %s --check-prefixes=CHECK,BE,S390X,64,SYSV
+
 !ELF
 FileHeader:
   Class:           ELFCLASS32
@@ -160,6 +164,7 @@ Symbols:
 # RISCV32-SAME: riscv{{$}}
 # RISCV64-SAME: riscv{{$}}
 # SPARC-SAME:   sparc
+# S390X-SAME:   s390
 # X86-64-SAME:  x86-64
 # DEFAULT-SAME: unknown
 
@@ -182,6 +187,7 @@ Symbols:
 # RISCV64-NEXT:  Arch: riscv64
 # SPARC-NEXT:    Arch: sparc{{$}}
 # SPARCEL-NEXT:  Arch: sparcel
+# S390X-NEXT:    Arch: s390x
 # X86-64-NEXT:   Arch: x86_64
 # DEFAULT-NEXT:  Arch: unknown
 
@@ -210,6 +216,7 @@ Symbols:
 # RISCV32: Machine: EM_RISCV (0xF3)
 # RISCV64: Machine: EM_RISCV (0xF3)
 # SPARC:   Machine: EM_SPARC (0x2)
+# S390X:   Machine: EM_S390 (0x16)
 # X86-64:  Machine: EM_X86_64 (0x3E)
 
 # 32: HeaderSize: 52
diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp
index 9a9b631e98bcf7..ec9dc0a2a814d4 100644
--- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp
+++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp
@@ -299,6 +299,8 @@ static const StringMap<MachineInfo> TargetMap{
     // LoongArch
     {"elf32-loongarch", {ELF::EM_LOONGARCH, false, true}},
     {"elf64-loongarch", {ELF::EM_LOONGARCH, true, true}},
+    // SystemZ
+    {"elf64-s390", {ELF::EM_S390, true, false}},
 };
 
 static Expected<TargetInfo>

Copy link
Member

@MaskRay MaskRay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but please wait for jh7370, who usually prefers to read these changes.

Copy link
Collaborator

@jh7370 jh7370 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, except it looks like we document the supported formats in the CommandGuide (see https://llvm.org/docs/CommandGuide/llvm-objcopy.html#supported-formats). Unfortunately, it looks like some of the newer ones are missing from that. If you're okay with doing so, it would be great if you could provide another PR that adds the remaining missing ones (I think it's just hexagon and loongarch, but could be wrong).

@uweigand uweigand merged commit 3c02cb7 into llvm:main Feb 16, 2024
6 checks passed
@uweigand uweigand deleted the s390x-objcopy branch February 16, 2024 10:58
@uweigand
Copy link
Member Author

Looks good, except it looks like we document the supported formats in the CommandGuide (see https://llvm.org/docs/CommandGuide/llvm-objcopy.html#supported-formats). Unfortunately, it looks like some of the newer ones are missing from that. If you're okay with doing so, it would be great if you could provide another PR that adds the remaining missing ones (I think it's just hexagon and loongarch, but could be wrong).

Submitted as #81981, thanks!

@uweigand
Copy link
Member Author

Can we backport this to LLVM 18 as well?

@jh7370
Copy link
Collaborator

jh7370 commented Feb 20, 2024

Can we backport this to LLVM 18 as well?

I don't know what's considered okay to, but this is fairly low-risk, so I think it's safe to. Please include the doc change in the backport too.

@uweigand
Copy link
Member Author

/cherry-pick 3c02cb7

@llvmbot
Copy link

llvmbot commented Feb 20, 2024

/cherry-pick 3c02cb7

Error: Command failed due to missing milestone.

@uweigand uweigand added this to the LLVM 18.X Release milestone Feb 20, 2024
@uweigand
Copy link
Member Author

/cherry-pick 3c02cb7

llvmbot pushed a commit to llvmbot/llvm-project that referenced this pull request Feb 20, 2024
This is also necessary for enabling ClangBuiltLinux:
ClangBuiltLinux/linux#1530

(cherry picked from commit 3c02cb7)
@llvmbot
Copy link

llvmbot commented Feb 20, 2024

/pull-request #82324

llvmbot pushed a commit to llvmbot/llvm-project that referenced this pull request Feb 21, 2024
This is also necessary for enabling ClangBuiltLinux:
ClangBuiltLinux/linux#1530

(cherry picked from commit 3c02cb7)
@pointhex pointhex mentioned this pull request May 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

Successfully merging this pull request may close these issues.

4 participants