xref: /llvm-project/llvm/test/tools/llvm-objcopy/ELF/binary-output-target.test (revision 3c02cb7492fc78fb678264cebf57ff88e478e14f)
1# RUN: echo abcd > %t.txt
2
3# RUN: llvm-objcopy -I binary -O elf64-littleaarch64 %t.txt %t.aarch64.o
4# RUN: llvm-readobj --file-headers %t.aarch64.o | FileCheck %s --check-prefixes=CHECK,LE,AARCH64,64
5
6# RUN: llvm-objcopy -I binary -O elf32-littlearm %t.txt %t.arm.o
7# RUN: llvm-readobj --file-headers %t.arm.o | FileCheck %s --check-prefixes=CHECK,LE,ARM,32
8
9# RUN: llvm-objcopy -I binary -O elf32-i386 %t.txt %t.i386.o
10# RUN: llvm-readobj --file-headers %t.i386.o | FileCheck %s --check-prefixes=CHECK,LE,I386,32
11
12# RUN: llvm-objcopy -I binary -O elf64-x86-64 %t.txt %t.x86-64.o
13# RUN: llvm-readobj --file-headers %t.x86-64.o | FileCheck %s --check-prefixes=CHECK,LE,X86-64,64
14
15# RUN: llvm-objcopy -I binary -O elf32-bigmips %t.txt %t.mips.o
16# RUN: llvm-readobj --file-headers %t.mips.o | FileCheck %s --check-prefixes=CHECK,BE,MIPS,32
17
18# RUN: llvm-objcopy -I binary -O elf32-powerpc %t.txt %t.ppc32be.o
19# RUN: llvm-readobj --file-headers %t.ppc32be.o | FileCheck %s --check-prefixes=CHECK,BE,PPC32,PPC32BE,32
20
21# RUN: llvm-objcopy -I binary -O elf32-powerpcle %t.txt %t.ppc32le.o
22# RUN: llvm-readobj --file-headers %t.ppc32le.o | FileCheck %s --check-prefixes=CHECK,LE,PPC32,PPC32LE,32
23
24# RUN: llvm-objcopy -I binary -O elf64-powerpc %t.txt %t.ppc64be.o
25# RUN: llvm-readobj --file-headers %t.ppc64be.o | FileCheck %s --check-prefixes=CHECK,BE,PPC64,PPC64BE,64
26
27# RUN: llvm-objcopy -I binary -O elf64-powerpcle %t.txt %t.ppc64le.o
28# RUN: llvm-readobj --file-headers %t.ppc64le.o | FileCheck %s --check-prefixes=CHECK,LE,PPC64,PPC64LE,64
29
30# RUN: llvm-objcopy -I binary -O elf32-littleriscv %t.txt %t.rv32.o
31# RUN: llvm-readobj --file-headers %t.rv32.o | FileCheck %s --check-prefixes=CHECK,LE,RISCV32,32
32
33# RUN: llvm-objcopy -I binary -O elf64-littleriscv %t.txt %t.rv64.o
34# RUN: llvm-readobj --file-headers %t.rv64.o | FileCheck %s --check-prefixes=CHECK,LE,RISCV64,64
35
36# RUN: llvm-objcopy -I binary -O elf32-sparc %t.txt %t.sparc.o
37# RUN: llvm-readobj --file-headers %t.sparc.o | FileCheck %s --check-prefixes=CHECK,BE,SPARC,32
38
39# RUN: llvm-objcopy -I binary -O elf32-sparcel %t.txt %t.sparcel.o
40# RUN: llvm-readobj --file-headers %t.sparcel.o | FileCheck %s --check-prefixes=CHECK,LE,SPARCEL,32
41
42# RUN: llvm-objcopy -I binary -O elf32-hexagon %t.txt %t.hexagon.o
43# RUN: llvm-readobj --file-headers %t.hexagon.o | FileCheck %s --check-prefixes=CHECK,LE,HEXAGON,32
44
45# RUN: llvm-objcopy -I binary -O elf32-loongarch %t.txt %t.la32.o
46# RUN: llvm-readobj --file-headers %t.la32.o | FileCheck %s --check-prefixes=CHECK,LE,LA32,32
47
48# RUN: llvm-objcopy -I binary -O elf64-loongarch %t.txt %t.la64.o
49# RUN: llvm-readobj --file-headers %t.la64.o | FileCheck %s --check-prefixes=CHECK,LE,LA64,64
50
51# RUN: llvm-objcopy -I binary -O elf64-s390 %t.txt %t.s390x.o
52# RUN: llvm-readobj --file-headers %t.s390x.o | FileCheck %s --check-prefixes=CHECK,BE,S390X,64
53
54# CHECK: Format:
55# 32-SAME:      elf32-
56# 64-SAME:      elf64-
57# AARCH64-SAME: littleaarch64
58# ARM-SAME:     littlearm
59# HEXAGON-SAME: hexagon
60# I386-SAME:    i386
61# LA32-SAME:    loongarch{{$}}
62# LA64-SAME:    loongarch{{$}}
63# MIPS-SAME:    mips{{$}}
64# RISCV32-SAME: riscv{{$}}
65# RISCV64-SAME: riscv{{$}}
66# PPCBE-SAME:   powerpc{{$}}
67# PPCLE-SAME:   powerpcle{{$}}
68# SPARC-SAME:   sparc
69# SPARCEL-SAME: sparc
70# S390X-SAME:   s390
71# X86-64-SAME:  x86-64
72
73# AARCH64-NEXT: Arch: aarch64
74# ARM-NEXT:     Arch: arm
75# HEXAGON-NEXT: Arch: hexagon
76# I386-NEXT:    Arch: i386
77# LA32-NEXT:    Arch: loongarch32
78# LA64-NEXT:    Arch: loongarch64
79# MIPS-NEXT:    Arch: mips{{$}}
80# PPC32BE-NEXT: Arch: powerpc{{$}}
81# PPC32LE-NEXT: Arch: powerpcle{{$}}
82# PPC64BE-NEXT: Arch: powerpc64{{$}}
83# PPC64LE-NEXT: Arch: powerpc64le{{$}}
84# RISCV32-NEXT: Arch: riscv32
85# RISCV64-NEXT: Arch: riscv64
86# SPARC-NEXT:   Arch: sparc{{$}}
87# SPARCEL-NEXT: Arch: sparcel
88# S390X-NEXT:   Arch: s390x
89# X86-64-NEXT:  Arch: x86_64
90
91# 32-NEXT:      AddressSize: 32bit
92# 64-NEXT:      AddressSize: 64bit
93
94# CHECK:        ElfHeader {
95# CHECK-NEXT:     Ident {
96# CHECK-NEXT:       Magic: (7F 45 4C 46)
97# 32-NEXT:          Class: 32-bit (0x1)
98# 64-NEXT:          Class: 64-bit (0x2)
99# LE-NEXT:          DataEncoding: LittleEndian (0x1)
100# BE-NEXT:          DataEncoding: BigEndian (0x2)
101# CHECK-NEXT:       FileVersion: 1
102# CHECK-NEXT:       OS/ABI: SystemV (0x0)
103# CHECK-NEXT:       ABIVersion: 0
104# CHECK-NEXT:       Unused: (00 00 00 00 00 00 00)
105# CHECK-NEXT:     }
106# CHECK-NEXT:     Type: Relocatable (0x1)
107
108## In GNU objcopy, e_machine is EM_NONE unless -B is specifid.
109## It is not very clear why it behaves this way.
110## We fill in the field regardless of -B.
111# AARCH64-NEXT:   Machine: EM_AARCH64 (0xB7)
112# ARM-NEXT:       Machine: EM_ARM (0x28)
113# HEXAGON-NEXT:   Machine: EM_HEXAGON (0xA4)
114# I386-NEXT:      Machine: EM_386 (0x3)
115# LA32-NEXT:      Machine: EM_LOONGARCH (0x102)
116# LA64-NEXT:      Machine: EM_LOONGARCH (0x102)
117# MIPS-NEXT:      Machine: EM_MIPS (0x8)
118# PPC32-NEXT:     Machine: EM_PPC (0x14)
119# PPC64-NEXT:     Machine: EM_PPC64 (0x15)
120# RISCV32-NEXT:   Machine: EM_RISCV (0xF3)
121# RISCV64-NEXT:   Machine: EM_RISCV (0xF3)
122# SPARC-NEXT:     Machine: EM_SPARC (0x2)
123# SPARCEL-NEXT:   Machine: EM_SPARC (0x2)
124# S390X-NEXT:     Machine: EM_S390 (0x16)
125# X86-64-NEXT:    Machine: EM_X86_64 (0x3E)
126
127# CHECK-NEXT:     Version: 1
128# CHECK-NEXT:     Entry: 0x0
129# CHECK-NEXT:     ProgramHeaderOffset:
130# CHECK-NEXT:     SectionHeaderOffset:
131# CHECK-NEXT:     Flags [ (0x0)
132# CHECK-NEXT:     ]
133# 32-NEXT:        HeaderSize: 52
134# 64-NEXT:        HeaderSize: 64
135# 32-NEXT:        ProgramHeaderEntrySize: 0
136# 64-NEXT:        ProgramHeaderEntrySize: 0
137# CHECK-NEXT:     ProgramHeaderCount: 0
138# 32-NEXT:        SectionHeaderEntrySize: 40
139# 64-NEXT:        SectionHeaderEntrySize: 64
140# CHECK-NEXT:     SectionHeaderCount: 4
141# CHECK-NEXT:     StringTableSectionIndex:
142# CHECK-NEXT:   }
143
144## ELFOSABI_NONE = ELFOSABI_SYSV = 0 is the default.
145## "-freebsd" suffixed target name can change the field to ELFOSABI_FREEBSD.
146
147## Many uses of objcopy use no spaces in the flags, make sure that also works.
148# RUN: llvm-objcopy -Ibinary -O elf64-x86-64-freebsd %t.txt %t.freebsd.o
149# RUN: llvm-readobj --file-headers %t.freebsd.o | FileCheck %s --check-prefixes=FREEBSD
150
151# FREEBSD: OS/ABI: FreeBSD
152