blob: 4af2d0514bf494b90af2fffebeb4afa3ad2abadf [file] [log] [blame]
Jordan Rupprechtcf676332018-08-17 18:51:11 +00001# RUN: echo abcd > %t.txt
2
Fangrui Songba530302019-09-14 01:36:16 +00003# RUN: llvm-objcopy -I binary -O elf64-littleaarch64 %t.txt %t.aarch64.o
Jordan Rupprecht2b329022019-04-18 14:22:37 +00004# RUN: llvm-readobj --file-headers %t.aarch64.o | FileCheck %s --check-prefixes=CHECK,LE,AARCH64,64
Jordan Rupprechtcf676332018-08-17 18:51:11 +00005
Fangrui Songba530302019-09-14 01:36:16 +00006# RUN: llvm-objcopy -I binary -O elf32-littlearm %t.txt %t.arm.o
Jordan Rupprecht2b329022019-04-18 14:22:37 +00007# RUN: llvm-readobj --file-headers %t.arm.o | FileCheck %s --check-prefixes=CHECK,LE,ARM,32
Jordan Rupprechtcf676332018-08-17 18:51:11 +00008
Fangrui Songba530302019-09-14 01:36:16 +00009# RUN: llvm-objcopy -I binary -O elf32-i386 %t.txt %t.i386.o
Jordan Rupprecht2b329022019-04-18 14:22:37 +000010# RUN: llvm-readobj --file-headers %t.i386.o | FileCheck %s --check-prefixes=CHECK,LE,I386,32
Jordan Rupprechtcf676332018-08-17 18:51:11 +000011
Fangrui Songba530302019-09-14 01:36:16 +000012# 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
Jordan Rupprecht2b329022019-04-18 14:22:37 +000014
Fangrui Songba530302019-09-14 01:36:16 +000015# RUN: llvm-objcopy -I binary -O elf32-bigmips %t.txt %t.mips.o
Jordan Rupprecht2b329022019-04-18 14:22:37 +000016# RUN: llvm-readobj --file-headers %t.mips.o | FileCheck %s --check-prefixes=CHECK,BE,MIPS,32
Jordan Rupprechtcf676332018-08-17 18:51:11 +000017
Fangrui Songba530302019-09-14 01:36:16 +000018# RUN: llvm-objcopy -I binary -O elf64-powerpcle %t.txt %t.ppc64le.o
19# RUN: llvm-readobj --file-headers %t.ppc64le.o | FileCheck %s --check-prefixes=CHECK,LE,PPC64,64
Jordan Rupprechtcf676332018-08-17 18:51:11 +000020
Fangrui Songba530302019-09-14 01:36:16 +000021# RUN: llvm-objcopy -I binary -O elf32-littleriscv %t.txt %t.rv32.o
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000022# RUN: llvm-readobj --file-headers %t.rv32.o | FileCheck %s --check-prefixes=CHECK,LE,RISCV32,32
23
Fangrui Songba530302019-09-14 01:36:16 +000024# RUN: llvm-objcopy -I binary -O elf64-littleriscv %t.txt %t.rv64.o
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000025# RUN: llvm-readobj --file-headers %t.rv64.o | FileCheck %s --check-prefixes=CHECK,LE,RISCV64,64
26
Fangrui Songba530302019-09-14 01:36:16 +000027# RUN: llvm-objcopy -I binary -O elf32-sparc %t.txt %t.sparc.o
Seiya Nutab1027a42019-06-13 23:24:12 +000028# RUN: llvm-readobj --file-headers %t.sparc.o | FileCheck %s --check-prefixes=CHECK,BE,SPARC,32
29
Fangrui Songba530302019-09-14 01:36:16 +000030# RUN: llvm-objcopy -I binary -O elf32-sparcel %t.txt %t.sparcel.o
Seiya Nutab1027a42019-06-13 23:24:12 +000031# RUN: llvm-readobj --file-headers %t.sparcel.o | FileCheck %s --check-prefixes=CHECK,LE,SPARCEL,32
Jordan Rupprechtcf676332018-08-17 18:51:11 +000032
Jordan Rupprechtcf676332018-08-17 18:51:11 +000033# CHECK: Format:
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000034# 32-SAME: ELF32-
35# 64-SAME: ELF64-
36# AARCH64-SAME: aarch64-little
37# ARM-SAME: arm-little
38# I386-SAME: i386
39# MIPS-SAME: mips{{$}}
40# RISCV32-SAME: riscv{{$}}
41# RISCV64-SAME: riscv{{$}}
Fangrui Songba530302019-09-14 01:36:16 +000042# PPC-SAME: ppc{{$}}
43# PPC64le-SAME: ppc64
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000044# SPARC-SAME: sparc
Seiya Nutab1027a42019-06-13 23:24:12 +000045# SPARCEL-SAME: sparc
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000046# X86-64-SAME: x86-64
Jordan Rupprechtcf676332018-08-17 18:51:11 +000047
48# AARCH64-NEXT: Arch: aarch64
49# ARM-NEXT: Arch: arm
50# I386-NEXT: Arch: i386
Fangrui Songba530302019-09-14 01:36:16 +000051# MIPS-NEXT: Arch: mips{{$}}
52# PPC-NEXT: Arch: powerpc{{$}}
53# PPC64-NEXT: Arch: powerpc64le
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000054# RISCV32-NEXT: Arch: riscv32
55# RISCV64-NEXT: Arch: riscv64
Seiya Nutab1027a42019-06-13 23:24:12 +000056# SPARC-NEXT: Arch: sparc{{$}}
57# SPARCEL-NEXT: Arch: sparcel
Jordan Rupprechtcf676332018-08-17 18:51:11 +000058# X86-64-NEXT: Arch: x86_64
59
60# 32-NEXT: AddressSize: 32bit
61# 64-NEXT: AddressSize: 64bit
62
63# CHECK: ElfHeader {
64# CHECK-NEXT: Ident {
65# CHECK-NEXT: Magic: (7F 45 4C 46)
66# 32-NEXT: Class: 32-bit (0x1)
67# 64-NEXT: Class: 64-bit (0x2)
Jordan Rupprecht2b329022019-04-18 14:22:37 +000068# LE-NEXT: DataEncoding: LittleEndian (0x1)
69# BE-NEXT: DataEncoding: BigEndian (0x2)
Jordan Rupprechtcf676332018-08-17 18:51:11 +000070# CHECK-NEXT: FileVersion: 1
71# CHECK-NEXT: OS/ABI: SystemV (0x0)
72# CHECK-NEXT: ABIVersion: 0
73# CHECK-NEXT: Unused: (00 00 00 00 00 00 00)
74# CHECK-NEXT: }
75# CHECK-NEXT: Type: Relocatable (0x1)
Fangrui Songba530302019-09-14 01:36:16 +000076
77## In GNU objcopy, e_machine is EM_NONE unless -B is specifid.
78## It is not very clear why it behaves this way.
79## We fill in the field regardless of -B.
Jordan Rupprechtcf676332018-08-17 18:51:11 +000080# AARCH64-NEXT: Machine: EM_AARCH64 (0xB7)
81# ARM-NEXT: Machine: EM_ARM (0x28)
82# I386-NEXT: Machine: EM_386 (0x3)
Jordan Rupprecht2b329022019-04-18 14:22:37 +000083# MIPS-NEXT: Machine: EM_MIPS (0x8)
Fangrui Songba530302019-09-14 01:36:16 +000084# PPC-NEXT: Machine: EM_PPC (0x14)
85# PPC64-NEXT: Machine: EM_PPC64 (0x15)
Jordan Rupprecht96bbb1d2019-04-30 15:21:36 +000086# RISCV32-NEXT: Machine: EM_RISCV (0xF3)
87# RISCV64-NEXT: Machine: EM_RISCV (0xF3)
Jordan Rupprechtcf676332018-08-17 18:51:11 +000088# SPARC-NEXT: Machine: EM_SPARC (0x2)
Seiya Nutab1027a42019-06-13 23:24:12 +000089# SPARCEL-NEXT: Machine: EM_SPARC (0x2)
Jordan Rupprechtcf676332018-08-17 18:51:11 +000090# X86-64-NEXT: Machine: EM_X86_64 (0x3E)
Fangrui Songba530302019-09-14 01:36:16 +000091
Jordan Rupprechtcf676332018-08-17 18:51:11 +000092# CHECK-NEXT: Version: 1
93# CHECK-NEXT: Entry: 0x0
94# CHECK-NEXT: ProgramHeaderOffset:
95# CHECK-NEXT: SectionHeaderOffset:
96# CHECK-NEXT: Flags [ (0x0)
97# CHECK-NEXT: ]
98# 32-NEXT: HeaderSize: 52
99# 64-NEXT: HeaderSize: 64
Julie Hockett468722e2018-09-12 17:56:31 +0000100# 32-NEXT: ProgramHeaderEntrySize: 0
101# 64-NEXT: ProgramHeaderEntrySize: 0
Jordan Rupprechtcf676332018-08-17 18:51:11 +0000102# CHECK-NEXT: ProgramHeaderCount: 0
103# 32-NEXT: SectionHeaderEntrySize: 40
104# 64-NEXT: SectionHeaderEntrySize: 64
105# CHECK-NEXT: SectionHeaderCount: 4
106# CHECK-NEXT: StringTableSectionIndex:
107# CHECK-NEXT: }
Fangrui Songf2bbfa02019-09-25 03:41:01 +0000108
109## ELFOSABI_NONE = ELFOSABI_SYSV = 0 is the default.
110## "-freebsd" suffixed target name can change the field to ELFOSABI_FREEBSD.
111
112## Many uses of objcopy use no spaces in the flags, make sure that also works.
113# RUN: llvm-objcopy -Ibinary -O elf64-x86-64-freebsd %t.txt %t.freebsd.o
114# RUN: llvm-readobj --file-headers %t.freebsd.o | FileCheck %s --check-prefixes=FREEBSD
115
116# FREEBSD: OS/ABI: FreeBSD