llvm/llvm/test/tools/llvm-objdump/section-filter.test

## Test that --section works correctly for -h.
## We test the LMA here too, because the code at the time of writing uses the 
## value of --section when looking up section LMAs.
# RUN: yaml2obj %s --docnum=1 -o %t.h.elf
# RUN: llvm-objdump -h %t.h.elf -j.text --section=.bss \
# RUN:   | FileCheck %s --check-prefix=SHDRS --implicit-check-not=.data --implicit-check-not=.text2

# SHDRS: Name  Size     VMA              LMA
# SHDRS: .text 00000001 0000000000000400 0000000000001000
# SHDRS: .bss  00000001 0000000000000420 0000000000003000

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:         .text
    Type:         SHT_PROGBITS
    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
    Address:      0x400
    AddressAlign: 0x10
    Content:      'c3'
  - Name:         .text2
    Type:         SHT_PROGBITS
    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
    Address:      0x401
    Content:      '90'
  - Name:         .data
    Type:         SHT_PROGBITS
    Flags:        [SHF_ALLOC, SHF_WRITE]
    Address:      0x410
    AddressAlign: 0x10
    Content:      '42'
  - Name:         .bss
    Type:         SHT_NOBITS
    Flags:        [SHF_ALLOC, SHF_WRITE]
    Address:      0x420
    AddressAlign: 0x10
    Size:         1
ProgramHeaders:
  - Type:     PT_LOAD
    VAddr:    0x400
    PAddr:    0x1000
    FirstSec: .text
    LastSec:  .text2
  - Type:     PT_LOAD
    VAddr:    0x410
    PAddr:    0x2000
    FirstSec: .data
    LastSec:  .data
  - Type:     PT_LOAD
    VAddr:    0x420
    PAddr:    0x3000
    FirstSec: .bss
    LastSec:  .bss

## Test that --section works with --fault-map-section.
# RUN: yaml2obj %s --docnum=2 -o %t.o
# RUN: llvm-objdump %t.o --fault-map-section -j __clangast \
# RUN:   | FileCheck %s --check-prefixes=FAULTMAP,NO-FAULTMAP
# RUN: llvm-objdump %t.o --fault-map-section -j .llvm_faultmaps \
# RUN:   | FileCheck %s --check-prefixes=FAULTMAP,WITH-FAULTMAP

# FAULTMAP:           FaultMap table:
# NO-FAULTMAP-NEXT:   <not found>
# WITH-FAULTMAP-NEXT: Version: 0x1
# WITH-FAULTMAP-NEXT: NumFunctions: 0

## Test that --section works with --raw-clang-ast.
# RUN: llvm-objdump %t.o --raw-clang-ast -j .llvm_faultmaps \
# RUN:   | FileCheck %s --check-prefix=NO-AST --allow-empty
# RUN: llvm-objdump %t.o --raw-clang-ast -j __clangast \
# RUN:   | FileCheck %s --check-prefix=CLANG-AST

# NO-AST-NOT: {{.}}
# CLANG-AST: foobar

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_REL
  Machine: EM_X86_64
Sections:
  - Name:    .llvm_faultmaps
    Type:    SHT_PROGBITS
    Content: '0100000000000000'
  - Name:    __clangast
    Type:    SHT_PROGBITS
    Content: '666f6f626172' # "foobar"

## Test that the -j alias can be used flexibly. Create a baseline and ensure
## all other combinations compatible with POSIX are identical.
# RUN: llvm-objdump %t.h.elf -h -s --section .symtab > %t.full
# RUN: llvm-objdump %t.h.elf -h -s -j .symtab > %t.1
# RUN: llvm-objdump %t.h.elf -h -s -j.symtab > %t.2
# RUN: llvm-objdump %t.h.elf -hsj .symtab > %t.3
# RUN: llvm-objdump %t.h.elf -hsj.symtab > %t.4

# RUN: cmp %t.full %t.1
# RUN: cmp %t.full %t.2
# RUN: cmp %t.full %t.3
# RUN: cmp %t.full %t.4

## Test that an unknown section name causes all section output to be suppressed.
# RUN: llvm-objdump %t.h.elf -h --section foobar \
# RUN:   | FileCheck %s --check-prefix=NO-SECTION

# NO-SECTION:      Sections:
# NO-SECTION-NEXT: Idx Name Size VMA Type
# NO-SECTION-NOT:  {{.}}