[llvm-objdump] Add --file-headers (-f) option

llvm-svn: 336284
diff --git a/llvm/test/tools/llvm-objdump/file-headers-coff.test b/llvm/test/tools/llvm-objdump/file-headers-coff.test
new file mode 100644
index 0000000..784b012
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/file-headers-coff.test
@@ -0,0 +1,13 @@
+# RUN: yaml2obj %s > %t
+# RUN: llvm-objdump -f %t | FileCheck %s
+# RUN: llvm-objdump -file-headers %t | FileCheck %s
+
+!COFF
+header: !Header
+  Machine: IMAGE_FILE_MACHINE_I386 # (0x14c)
+  Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ]
+sections:
+symbols:
+
+# CHECK: architecture: i386
+# CHECK: start address: 0x0000
diff --git a/llvm/test/tools/llvm-objdump/file-headers-elf.test b/llvm/test/tools/llvm-objdump/file-headers-elf.test
new file mode 100644
index 0000000..ade59cf
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/file-headers-elf.test
@@ -0,0 +1,14 @@
+# RUN: yaml2obj %s > %t
+# RUN: llvm-objdump -f %t | FileCheck %s
+# RUN: llvm-objdump -file-headers %t | FileCheck %s
+
+!ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_X86_64
+  Entry:           0x123456
+
+# CHECK: architecture: x86_64
+# CHECK: start address: 0x00123456
diff --git a/llvm/test/tools/llvm-objdump/file-headers-pe.test b/llvm/test/tools/llvm-objdump/file-headers-pe.test
new file mode 100644
index 0000000..1e2fb2c
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/file-headers-pe.test
@@ -0,0 +1,33 @@
+# RUN: yaml2obj %s > %t
+# RUN: llvm-objdump -f %t | FileCheck %s
+# RUN: llvm-objdump -file-headers %t | FileCheck %s
+
+!COFF
+header: !Header
+  Machine: IMAGE_FILE_MACHINE_I386
+  Characteristics: [ IMAGE_FILE_DEBUG_STRIPPED ]
+OptionalHeader:
+  AddressOfEntryPoint: 0x1234
+# Unfortunately, all these flags are mandatory to set AddressOfEntryPoint.
+# All the values are randomly picked. They can't interfere in what
+# we are testing here.
+  SizeOfHeapCommit: 1024
+  SizeOfHeapReserve: 1024
+  SizeOfStackCommit: 1024
+  SizeOfStackReserve: 1024
+  DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE ]
+  Subsystem: IMAGE_SUBSYSTEM_NATIVE
+  MinorSubsystemVersion: 1
+  MajorSubsystemVersion: 1
+  MinorImageVersion: 1
+  MajorImageVersion: 1
+  MinorOperatingSystemVersion: 1
+  MajorOperatingSystemVersion: 1
+  FileAlignment: 8
+  SectionAlignment: 8
+  ImageBase: 0x12
+sections:
+symbols:
+
+# CHECK: architecture: i386
+# CHECK: start address: 0x1234
diff --git a/llvm/test/tools/llvm-objdump/file-headers-unsupported.test b/llvm/test/tools/llvm-objdump/file-headers-unsupported.test
new file mode 100644
index 0000000..f9fc118
--- /dev/null
+++ b/llvm/test/tools/llvm-objdump/file-headers-unsupported.test
@@ -0,0 +1,3 @@
+# RUN: not llvm-objdump -file-headers %p/Inputs/trivial.obj.wasm 2>&1 | FileCheck %s
+
+# CHECK: Invalid/Unsupported object file format