llvm.org GIT mirror llvm / release_90 test / tools / llvm-readobj / gnu-notes.test
release_90

Tree @release_90 (Download .tar.gz)

gnu-notes.test @release_90raw · history · blame

## Test tools are able to dump different types of notes.

# RUN: yaml2obj --docnum=1 %s > %t1.so
# RUN: llvm-readelf --notes %t1.so | FileCheck %s --check-prefix=GNU
# RUN: llvm-readobj --notes %t1.so | FileCheck %s --check-prefix=LLVM

# GNU:      Displaying notes found at file offset 0x00000200 with length 0x00000020:
# GNU-NEXT:   Owner                 Data size       Description
# GNU-NEXT:   GNU                   0x00000010      NT_GNU_ABI_TAG (ABI version tag)
# GNU-NEXT:     OS: Linux, ABI: 2.6.32

# GNU:      Displaying notes found at file offset 0x00000220 with length 0x00000020:
# GNU-NEXT:   Owner                 Data size       Description
# GNU-NEXT:   GNU                  0x00000010       NT_GNU_BUILD_ID (unique build ID bitstring)
# GNU-NEXT:     Build ID: 4fcb712aa6387724a9f465a32cd8c14b

# GNU:      Displaying notes found at file offset 0x00000240 with length 0x0000001c:
# GNU-NEXT:   Owner                 Data size       Description
# GNU-NEXT:   GNU                  0x00000009       NT_GNU_GOLD_VERSION (gold version)
# GNU-NEXT:     Version: gold 1.11

# LLVM:      Notes [
# LLVM-NEXT:   NoteSection {
# LLVM-NEXT:     Offset: 0x200
# LLVM-NEXT:     Size: 0x20
# LLVM-NEXT:     Note {
# LLVM-NEXT:       Owner: GNU
# LLVM-NEXT:       Data size: 0x10
# LLVM-NEXT:       Type: NT_GNU_ABI_TAG (ABI version tag)
# LLVM-NEXT:       OS: Linux
# LLVM-NEXT:       ABI: 2.6.32
# LLVM-NEXT:     }
# LLVM-NEXT:   }
# LLVM-NEXT:   NoteSection {
# LLVM-NEXT:     Offset: 0x220
# LLVM-NEXT:     Size: 0x20
# LLVM-NEXT:     Note {
# LLVM-NEXT:       Owner: GNU
# LLVM-NEXT:       Data size: 0x10
# LLVM-NEXT:       Type: NT_GNU_BUILD_ID (unique build ID bitstring)
# LLVM-NEXT:       Build ID: 4fcb712aa6387724a9f465a32cd8c14b
# LLVM-NEXT:     }
# LLVM-NEXT:   }
# LLVM-NEXT:   NoteSection {
# LLVM-NEXT:     Offset: 0x240
# LLVM-NEXT:     Size: 0x1C
# LLVM-NEXT:     Note {
# LLVM-NEXT:       Owner: GNU
# LLVM-NEXT:       Data size: 0x9
# LLVM-NEXT:       Type: NT_GNU_GOLD_VERSION (gold version)
# LLVM-NEXT:       Version: gold 1.11
# LLVM-NEXT:     }
# LLVM-NEXT:   }
# LLVM-NEXT: ]

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:         .note.ABI-tag
    Type:         SHT_NOTE
    AddressAlign: 0x0000000000000004
    Content:      040000001000000001000000474E550000000000020000000600000020000000
  - Name:         .note.gnu.build-id
    Type:         SHT_NOTE
    Flags:        [ SHF_ALLOC ]
    Address:      0x0000000000400120
    AddressAlign: 0x0000000000000004
    Content:      040000001000000003000000474E55004FCB712AA6387724A9F465A32CD8C14B
  - Name:         .note.gnu.gold-version
    Type:         SHT_NOTE
    AddressAlign: 0x0000000000000004
    Content:      040000000900000004000000474E5500676F6C6420312E3131000000

## Test tools report an error if a note section has an invalid offset
## that goes past the end of file.

# RUN: yaml2obj --docnum=2 %s > %t2.so
# RUN: not llvm-readelf --notes %t2.so 2>&1 | FileCheck %s --check-prefix=ERR1
# RUN: not llvm-readobj --notes %t2.so 2>&1 | FileCheck %s --check-prefix=ERR1

# ERR1: error: SHT_NOTE section [index 1] has invalid offset (0xffff0000) or size (0x0)

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:     .note
    Type:     SHT_NOTE
    ShOffset: 0xffff0000

## Test tools report an error if a note section has invalid size
## that goes past the end of file.

# RUN: yaml2obj --docnum=3 %s > %t3.so
# RUN: not llvm-readelf --notes %t3.so 2>&1 | FileCheck %s --check-prefix=ERR2
# RUN: not llvm-readobj --notes %t3.so 2>&1 | FileCheck %s --check-prefix=ERR2

# ERR2: error: SHT_NOTE section [index 1] has invalid offset (0x180) or size (0xffff0000)

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:   .note
    Type:   SHT_NOTE
    ShSize: 0xffff0000

## Test tools report an error if a note program header has an invalid offset that
## goes past the end of file.

# RUN: yaml2obj --docnum=4 %s > %t4.so
# RUN: not llvm-readelf --notes %t4.so 2>&1 | FileCheck %s --check-prefix=ERR3
# RUN: not llvm-readobj --notes %t4.so 2>&1 | FileCheck %s --check-prefix=ERR3

# ERR3: error: PT_NOTE header has invalid offset (0xffff0000) or size (0x0)

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_CORE
  Machine: EM_X86_64
Sections:
  - Name: .note
    Type: SHT_NOTE
ProgramHeaders:
  - Type: PT_NOTE
    Offset: 0xffff0000
    Sections:
      - Section: .note

## Test tools report an error if a note program header has an invalid size that
## goes past the end of file.

# RUN: yaml2obj --docnum=5 %s > %t5.so
# RUN: not llvm-readelf --notes %t5.so 2>&1 | FileCheck %s --check-prefix=ERR4
# RUN: not llvm-readobj --notes %t5.so 2>&1 | FileCheck %s --check-prefix=ERR4

# ERR4: error: PT_NOTE header has invalid offset (0x1b8) or size (0xffff0000)

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_CORE
  Machine: EM_X86_64
Sections:
  - Name: .note
    Type: SHT_NOTE
ProgramHeaders:
  - Type: PT_NOTE
    FileSize: 0xffff0000
    Sections:
      - Section: .note