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

## Test various details of llvm-objdump -h (--section-headers).

## Check leading and trailing whitespace for full lines.

# RUN: yaml2obj %s --docnum=1 -o %t-whitespace.o
# RUN: llvm-objdump -h --show-lma %t-whitespace.o \
# RUN:   | FileCheck %s --check-prefix=WHITESPACE --strict-whitespace
# RUN: llvm-objdump -h %t-whitespace.o \
# RUN:   | FileCheck %s --check-prefix=WHITESPACE-NO-LMA --strict-whitespace

# WHITESPACE:      {{^}}Sections:{{$}}
# WHITESPACE-NEXT: {{^}}Idx Name          Size     VMA              LMA              Type{{$}}
# WHITESPACE-NEXT: {{^}}  0               00000000 0000000000000000 0000000000000000 {{$}}
# WHITESPACE-NEXT: {{^}}  1 .text         00000000 0000000000000000 0000000000000000 TEXT{{$}}
# WHITESPACE-NEXT: {{^}}  2 .data         00000000 0000000000000000 0000000000000000 DATA{{$}}
# WHITESPACE-NEXT: {{^}}  3 .bss          00000000 0000000000000000 0000000000000000 BSS{{$}}
# WHITESPACE-NEXT: {{^}}  4 .other        00000000 0000000000000000 0000000000000000 {{$}}
# WHITESPACE-NEXT: {{^}}  5 .debug_abbrev 00000000 0000000000000000 0000000000000000 DEBUG{{$}}
# WHITESPACE-NEXT: {{^}}  6 .debug_info   00000000 0000000000000000 0000000000000000 DATA, DEBUG{{$}}
# WHITESPACE-NEXT: {{^}}  7 .mydata       00000000 0000000000000000 0000000000000000 DATA{{$}}
# WHITESPACE-NEXT: {{^}}  8 .bss1         00000000 0000000000000000 0000000000000000 BSS{{$}}
# WHITESPACE-NEXT: {{^}}  9 .nonalloc.bss 00000000 0000000000000000 0000000000000000 {{$}}

# WHITESPACE-NO-LMA:      {{^}}Sections:{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}Idx Name          Size     VMA              Type{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  0               00000000 0000000000000000 {{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  1 .text         00000000 0000000000000000 TEXT{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  2 .data         00000000 0000000000000000 DATA{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  3 .bss          00000000 0000000000000000 BSS{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  4 .other        00000000 0000000000000000 {{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  5 .debug_abbrev 00000000 0000000000000000 DEBUG{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  6 .debug_info   00000000 0000000000000000 DATA, DEBUG{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  7 .mydata       00000000 0000000000000000 DATA{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  8 .bss1         00000000 0000000000000000 BSS{{$}}
# WHITESPACE-NO-LMA-NEXT: {{^}}  9 .nonalloc.bss 00000000 0000000000000000 {{$}}

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:  .text
    Type:  SHT_PROGBITS
    Flags: [SHF_ALLOC, SHF_EXECINSTR]
  - Name:  .data
    Type:  SHT_PROGBITS
    Flags: [SHF_ALLOC, SHF_WRITE]
  - Name:  .bss
    Type:  SHT_NOBITS
    Flags: [SHF_ALLOC, SHF_WRITE]
  - Name:  .other
    Type:  SHT_REL
  - Name:  .debug_abbrev
    Type:  SHT_PROGBITS
  - Name:  .debug_info
    Type:  SHT_PROGBITS
    Flags: [ SHF_WRITE, SHF_ALLOC ]
  - Name:  .mydata
    Type:  0x70000000
    Flags: [ SHF_ALLOC ]
  - Name:  .bss1
    Type:  SHT_NOBITS
    Flags: [SHF_ALLOC]
  - Name:  .nonalloc.bss
    Type:  SHT_NOBITS
 
## Check that --section-headers and --headers are aliases for -h.
# RUN: llvm-objdump --section-headers --show-lma %t-whitespace.o \
# RUN:   | FileCheck %s --check-prefix=WHITESPACE --strict-whitespace
# RUN: llvm-objdump --headers --show-lma %t-whitespace.o \
# RUN:   | FileCheck %s --check-prefix=WHITESPACE --strict-whitespace

## The name field automatically expands past the default 13 columns when a
## section name is longer than that.
## Note: check with and without --show-lma to make sure resizing happens in
## both cases.

# RUN: yaml2obj %s --docnum=2 -o %t-name13chars.o
# RUN: llvm-objdump -h --show-lma %t-name13chars.o \
# RUN:   | FileCheck %s --check-prefix=NAME-13 --strict-whitespace
# RUN: llvm-objdump -h %t-name13chars.o \
# RUN:   | FileCheck %s --check-prefix=NAME-13 --strict-whitespace

# NAME-13:      Sections:
# NAME-13-NEXT: {{^}}Idx Name          Size
# NAME-13-NEXT: {{^}}  0               00000000
# NAME-13-NEXT: {{^}}  1 .foo          00000000
# NAME-13-NEXT: {{^}}  2 .thirteenchar 00000000
# NAME-13-NEXT: {{^}}  3 .bar          00000000

## Including a section with a name of length 14 expands the width of the "Name"
## column.
# RUN: yaml2obj %s --docnum=3 -o %t-name14chars.o
# RUN: llvm-objdump -h --show-lma %t-name14chars.o \
# RUN:   | FileCheck %s --check-prefix=NAME-14 --strict-whitespace
# RUN: llvm-objdump -h %t-name14chars.o \
# RUN:   | FileCheck %s --check-prefix=NAME-14 --strict-whitespace

# NAME-14:      Sections:
# NAME-14-NEXT: {{^}}Idx Name           Size
# NAME-14-NEXT: {{^}}  0                00000000
# NAME-14-NEXT: {{^}}  1 .foo           00000000
# NAME-14-NEXT: {{^}}  2 .fourteenchars 00000000
# NAME-14-NEXT: {{^}}  3 .bar           00000000

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: .thirteenchar
    Type: SHT_PROGBITS
  - Name: .bar
    Type: SHT_PROGBITS

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name: .foo
    Type: SHT_PROGBITS
  - Name: .fourteenchars
    Type: SHT_PROGBITS
  - Name: .bar
    Type: SHT_PROGBITS

## Check that objdump -h only prints the necessary amount of bytes for
## addresses.

# RUN: yaml2obj %s --docnum=4 -D BITS=32 -o %t-32bit.o
# RUN: yaml2obj %s --docnum=4 -D BITS=64 -o %t-64bit.o

# RUN: llvm-objdump -h --show-lma %t-32bit.o \
# RUN:   | FileCheck %s --check-prefix=32 --strict-whitespace
# 32: {{^}}Idx Name          Size     VMA      LMA      Type{{$}}
# 32: {{^}}  1 .foo          00000000 00000400 00000400 TEXT{{$}}

# RUN: llvm-objdump -h %t-32bit.o \
# RUN:   | FileCheck %s --check-prefix=32-NO-LMA --strict-whitespace
# 32-NO-LMA: {{^}}Idx Name          Size     VMA      Type{{$}}
# 32-NO-LMA: {{^}}  1 .foo          00000000 00000400 TEXT{{$}}

# RUN: llvm-objdump -h --show-lma %t-64bit.o \
# RUN:   | FileCheck %s --check-prefix=64 --strict-whitespace
# 64: {{^}}Idx Name          Size     VMA              LMA              Type{{$}}
# 64: {{^}}  1 .foo          00000000 0000000000000400 0000000000000400 TEXT{{$}}

# RUN: llvm-objdump -h %t-64bit.o \
# RUN:   | FileCheck %s --check-prefix=64-NO-LMA --strict-whitespace
# 64-NO-LMA: {{^}}Idx Name          Size     VMA              Type{{$}}
# 64-NO-LMA: {{^}}  1 .foo          00000000 0000000000000400 TEXT{{$}}

--- !ELF
FileHeader:
  Class:   ELFCLASS[[BITS]]
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_386
Sections:
  - Name:    .foo
    Type:    SHT_PROGBITS
    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
    Address: 0x400