[llvm-size][test] Improve llvm-size testing

This patch significantly improves the llvm-size testing. The changes
made are:

1) Change all tests to use yaml2obj instead of assembly or pre-canned
   inputs.
2) Move the tests out of the X86 directory, since they don't need to be
   there after 1).
3) Increased test coverage.
4) Added comments to explain purpose of tests.

I haven't attempted to add test coverage for all Mach-O related code, as
I am not familiar enough with that file format to be able to.

Reviewers: grimar, MaskRay

Differential Revision: https://reviews.llvm.org/D66134

llvm-svn: 368821
This commit is contained in:
James Henderson 2019-08-14 10:17:34 +00:00
parent 32f1e1a01d
commit a8eef4e5f5
27 changed files with 1088 additions and 143 deletions

View File

@ -1,55 +0,0 @@
# RUN: yaml2obj %s > %t.o
# RUN: llvm-size -B %t.o | FileCheck %s
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .bss
Type: SHT_NOBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 1
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .unusual_name_for_code
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 64
- Name: .eh_frame
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Size: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 8
- Name: .moar_stuff
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 128
- Name: .text.but_not_really
Type: SHT_PROGBITS
Flags: [ ]
Size: 256
- Name: .debug_info
Type: SHT_PROGBITS
Flags: [ ]
Size: 16
- Name: .init_array
Type: SHT_INIT_ARRAY
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 32
# text is .text, .eh_frame, .unusual_name_for_code: 2 + 4 + 64 = 70
# data is .data, .init_array, .moar_stuff: 8 + 32 + 128 = 168
# bss is .bss: 1
# total: 239
# unaccounted for (not affecting total) is .debug_info, .text.but_not_really
# CHECK: text data bss dec
# CHECK: 70 168 1 239

View File

@ -1,15 +0,0 @@
// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
// RUN: llvm-size -B -t %t.o | FileCheck %s --strict-whitespace
.text
.zero 4
.data
.long foo
.bss
.zero 4
// Note: this test enables --strict-whitespace to check for literal tabs
// between each field.
// CHECK: text {{ *}}data {{ *}}bss {{ *}}dec {{ *}}hex {{ *}}filename
// CHECK-NEXT: 4 {{ *}}4 {{ *}}4 {{ *}}12 {{ *}}c {{ *}}{{[ -\(\)_A-Za-z0-9.\\/:]+}}
// CHECK-NEXT: 4 {{ *}}4 {{ *}}4 {{ *}}12 {{ *}}c {{ *}}(TOTALS)

View File

@ -1,29 +0,0 @@
// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
// RUN: llvm-size -A %t.o | FileCheck --check-prefix="SYSV" %s
// RUN: llvm-size -B -t %t.o| FileCheck --check-prefix="BSD" %s
.text
.zero 4
.data
.long foo
.bss
.zero 4
.ident "foo"
.section foo
.long 42
.cfi_startproc
.cfi_endproc
// SYSV: {{[ -\(\)_A-Za-z0-9.\\/:]+}} :
// SYSV-NEXT: section size addr
// SYSV-NEXT: .text 4 0
// SYSV-NEXT: .data 4 0
// SYSV-NEXT: .bss 4 0
// SYSV-NEXT: .comment 5 0
// SYSV-NEXT: foo 4 0
// SYSV-NEXT: .eh_frame 48 0
// SYSV-NEXT: Total 69
// BSD: text data bss dec hex filename
// BSD-NEXT: 52 4 4 60 3c {{[ -\(\)_A-Za-z0-9.\\/:]+}}
// BSD-NEXT: 52 4 4 60 3c (TOTALS)

View File

@ -1,2 +0,0 @@
if not 'X86' in config.root.targets:
config.unsupported = True

View File

@ -1,29 +0,0 @@
// #Check that with common switch commons are added to bss or
// #Shown as *COM* otherwise their size is discounted
// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
// RUN: llvm-size -A --common %t.o | FileCheck --check-prefix=SYSV %s
// RUN: llvm-size -B --common %t.o | FileCheck --check-prefix=BSD %s
// RUN: llvm-size -A %t.o | FileCheck --check-prefix=SYSVNOCOMM %s
// RUN: llvm-size -B %t.o | FileCheck --check-prefix=BSDNOCOMM %s
.type x,@object
.comm x,4,4
.type y,@object
.comm y,4,4
.type z,@object
.comm z,4,4
// SYSV: {{[ -\(\)_A-Za-z0-9.\\/:]+}} :
// SYSV-NEXT: section size addr
// SYSV-NEXT: .text 0 0
// SYSV-NEXT: *COM* 12 0
// SYSV-NEXT: Total 12
// SYSVNOCOMM: {{[ -\(\)_A-Za-z0-9.\\/:]+}} :
// SYSVNOCOMM-NEXT: section size addr
// SYSVNOCOMM-NEXT: .text 0 0
// SYSVNOCOMM-NEXT: Total 0
// BSD: text data bss dec hex filename
// BSD-NEXT: 0 0 12 12 c {{[ -\(\)_A-Za-z0-9.\\/:]+}}
// BSDNOCOMM: text data bss dec hex filename
// BSDNOCOMM-NEXT: 0 0 0 0 0 {{[ -\(\)_A-Za-z0-9.\\/:]+}}

View File

@ -0,0 +1,125 @@
## Show how llvm-size behaves when passed in an archive.
# RUN: yaml2obj %s --docnum=1 -o %t1
# RUN: yaml2obj %s --docnum=2 -o %t2
## Case 1: Empty archive. No output expected.
# RUN: rm -f %t1.a
# RUN: llvm-ar rc %t1.a
# RUN: llvm-size -B %t1.a | count 0
## Sysv output prints a single blank line in this case.
# RUN: llvm-size -A %t1.a | FileCheck %s --implicit-check-not={{.}}
## Case 2: Single member.
# RUN: rm -f %t2.a
# RUN: llvm-ar rc %t2.a %t1
# RUN: llvm-size -B %t2.a | FileCheck %s -DARCHIVE=%t2.a --check-prefix=BERKELEY-1
# RUN: llvm-size -A %t2.a | FileCheck %s -DARCHIVE=%t2.a --check-prefix=SYSV-1
## Case 3: Multiple members.
# RUN: rm -f %t3.a
# RUN: llvm-ar rc %t3.a %t1 %t2
# RUN: llvm-size -B %t3.a | FileCheck %s -DARCHIVE=%t3.a --check-prefixes=BERKELEY-1,BERKELEY-2
# RUN: llvm-size -A %t3.a | FileCheck %s -DARCHIVE=%t3.a --check-prefixes=SYSV-1,SYSV-2
## Case 4: Mixing archives and non-archives produces sensible output:
# RUN: llvm-size -B %t1 %t2.a %t2 %t3.a \
# RUN: | FileCheck %s -DARCHIVE=%t3.a -DARCHIVE2=%t2.a -DFILE1=%t1 -DFILE2=%t2 \
# RUN: --check-prefixes=BERKELEY-1,BERKELEY-2,BERKELEY-3
# RUN: llvm-size -A %t1 %t2.a %t2 %t3.a \
# RUN: | FileCheck %s -DARCHIVE=%t3.a -DARCHIVE2=%t2.a -DFILE1=%t1 -DFILE2=%t2 \
# RUN: --check-prefixes=SYSV-1,SYSV-2,SYSV-3
# BERKELEY-1: text data bss dec hex filename
# BERKELEY-3-NEXT: 1 2 4 7 7 [[FILE1]]
# BERKELEY-3-NEXT: 1 2 4 7 7 archive.test.tmp1 (ex [[ARCHIVE2]])
# BERKELEY-3-NEXT: 8 16 32 56 38 [[FILE2]]
# BERKELEY-1-NEXT: 1 2 4 7 7 archive.test.tmp1 (ex [[ARCHIVE]])
# BERKELEY-2-NEXT: 8 16 32 56 38 archive.test.tmp2 (ex [[ARCHIVE]])
# BERKELEY-1-NOT:{{.}}
# SYSV-3: [[FILE1]] :
# SYSV-3-NEXT: section size addr
# SYSV-3-NEXT: .text 1 4
# SYSV-3-NEXT: .data 2 2
# SYSV-3-NEXT: .bss 4 1
# SYSV-3-NEXT: Total 7
# SYSV-3-EMPTY:
# SYSV-3-NEXT: archive.test.tmp1 (ex [[ARCHIVE2]]):
# SYSV-3-NEXT: section size addr
# SYSV-3-NEXT: .text 1 4
# SYSV-3-NEXT: .data 2 2
# SYSV-3-NEXT: .bss 4 1
# SYSV-3-NEXT: Total 7
# SYSV-3-EMPTY:
# SYSV-3-NEXT: [[FILE2]] :
# SYSV-3-NEXT: section size addr
# SYSV-3-NEXT: .text 8 32
# SYSV-3-NEXT: .data 16 16
# SYSV-3-NEXT: .bss 32 8
# SYSV-3-NEXT: Total 56
# SYSV-3-EMPTY:
# SYSV-1: archive.test.tmp1 (ex [[ARCHIVE]]):
# SYSV-1-NEXT: section size addr
# SYSV-1-NEXT: .text 1 4
# SYSV-1-NEXT: .data 2 2
# SYSV-1-NEXT: .bss 4 1
# SYSV-1-NEXT: Total 7
# SYSV-2-NEXT: archive.test.tmp2 (ex [[ARCHIVE]]):
# SYSV-2-NEXT: section size addr
# SYSV-2-NEXT: .text 8 32
# SYSV-2-NEXT: .data 16 16
# SYSV-2-NEXT: .bss 32 8
# SYSV-2-NEXT: Total 56
# SYSV-1-NOT:{{.}}
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 1
Address: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 2
Address: 2
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 4
Address: 1
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 8
Address: 32
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 16
Address: 16
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 32
Address: 8

View File

@ -1,2 +0,0 @@
RUN: not llvm-size %t.blah 2>&1 | FileCheck --check-prefix=ENOENT %s
ENOENT: {{.*}}llvm-size{{(\.EXE|\.exe)?}}: {{.*}}basic.test.tmp.blah {{[Nn]}}o such file or directory

View File

@ -0,0 +1,44 @@
## Check that with the common switch common symbols are added to bss (Berkeley
## output) or shown as *COM* (sysv output). Otherwise their size is ignored.
# RUN: yaml2obj %s -o %t.o
# RUN: llvm-size -A --common %t.o | FileCheck --check-prefix=SYSV %s
# RUN: llvm-size -B --common %t.o | FileCheck --check-prefix=BSD %s
# RUN: llvm-size -A %t.o | FileCheck --check-prefix=SYSVNOCOMM %s
# RUN: llvm-size -B %t.o | FileCheck --check-prefix=BSDNOCOMM %s
# SYSV: {{.*}}.o :
# SYSV-NEXT: section size addr
# SYSV-NEXT: .text 0 0
# SYSV-NEXT: *COM* 8 0
# SYSV-NEXT: Total 8
# SYSVNOCOMM: {{.*}}.o :
# SYSVNOCOMM-NEXT: section size addr
# SYSVNOCOMM-NEXT: .text 0 0
# SYSVNOCOMM-NEXT: Total 0
# BSD: text data bss dec hex filename
# BSD-NEXT: 0 0 8 8 8 {{.*}}.o
# BSDNOCOMM: text data bss dec hex filename
# BSDNOCOMM-NEXT: 0 0 0 0 0 {{.*}}.o
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Symbols:
- Name: y
Type: STT_OBJECT
Size: 4
Index: SHN_COMMON
- Name: z
Type: STT_OBJECT
Size: 4
Index: SHN_COMMON

View File

@ -1,11 +1,123 @@
RUN: llvm-size -m %p/Inputs/darwin-m.o | FileCheck --check-prefix="DARWIN" %s
RUN: llvm-size -m %p/Inputs/darwin-m.o %p/Inputs/darwin-m1.o | FileCheck --check-prefix="DARWIN2" %s
## Show that -m/--format=darwin produces darwin-style output.
DARWIN: Segment : 8
DARWIN-NEXT: Section (__TEXT, __text): 4
DARWIN-NEXT: Section (__DATA, __data): 4
DARWIN-NEXT: total 8
DARWIN-NEXT: total 8
# RUN: yaml2obj %s --docnum=1 -o %t
# RUN: yaml2obj %s --docnum=2 -o %t2
# RUN: llvm-size -m %t \
# RUN: | FileCheck --check-prefix=DARWIN %s --implicit-check-not={{.}} \
# RUN: --strict-whitespace --match-full-lines
# RUN: llvm-size -m %t %t2 \
# RUN: | FileCheck --check-prefixes=DARWIN,DARWIN2 %s --implicit-check-not={{.}} \
# RUN: -DFILE1=%t -DFILE2=%t2 --strict-whitespace --match-full-lines
# RUN: llvm-size --format=darwin %t \
# RUN: | FileCheck --check-prefix=DARWIN %s --implicit-check-not={{.}} \
# RUN: --strict-whitespace --match-full-lines
# RUN: llvm-size --format=darwin %t %t2 \
# RUN: | FileCheck --check-prefixes=DARWIN,DARWIN2 %s --implicit-check-not={{.}} \
# RUN: -DFILE1=%t -DFILE2=%t2 --strict-whitespace --match-full-lines
DARWIN2: Inputs/darwin-m.o:
DARWIN2: Inputs/darwin-m1.o:
# DARWIN2:[[FILE1]]:
# DARWIN:Segment : 12
# DARWIN-NEXT: Section (__TEXT, __text): 4
# DARWIN-NEXT: Section (__DATA, __data): 8
# DARWIN-NEXT: total 12
# DARWIN-NEXT:total 12
# DARWIN2:[[FILE2]]:
# DARWIN2-NEXT:Segment : 48
# DARWIN2-NEXT: Section (__TEXT, __text): 16
# DARWIN2-NEXT: Section (__DATA, __data): 32
# DARWIN2-NEXT: total 48
# DARWIN2-NEXT:total 48
--- !mach-o
FileHeader:
magic: 0xFEEDFACE
cputype: 0x0000000C
cpusubtype: 0x00000009
filetype: 0x00000001
ncmds: 1
sizeofcmds: 192
flags: 0x00000000
LoadCommands:
- cmd: LC_SEGMENT
cmdsize: 192
segname: ''
vmaddr: 0
vmsize: 12
fileoff: 220
filesize: 12
maxprot: 7
initprot: 7
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x0000000000000000
size: 4
offset: 0x000000DC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x80000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
- sectname: __data
segname: __DATA
addr: 0x0000000000000004
size: 8
offset: 0x000000E0
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x00000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
--- !mach-o
FileHeader:
magic: 0xFEEDFACE
cputype: 0x0000000C
cpusubtype: 0x00000009
filetype: 0x00000001
ncmds: 1
sizeofcmds: 192
flags: 0x00000000
LoadCommands:
- cmd: LC_SEGMENT
cmdsize: 192
segname: ''
vmaddr: 0
vmsize: 48
fileoff: 220
filesize: 48
maxprot: 7
initprot: 7
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x0000000000000000
size: 16
offset: 0x000000DC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x80000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
- sectname: __data
segname: __DATA
addr: 0x0000000000000010
size: 32
offset: 0x000000EC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x00000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000

View File

@ -0,0 +1,66 @@
## Show that llvm-sizes works correctly on a typical ELF input for Berkeley
## format. It also shows that the formatting is correct (including using tabs as
## field separators).
# RUN: yaml2obj %s > %t.o
# RUN: llvm-size -B %t.o \
# RUN: | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
# RUN: llvm-size --format=berkeley %t.o \
# RUN: | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
## Also show that the default output format is Berkeley.
# RUN: llvm-size %t.o \
# RUN: | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
## text is .text, .eh_frame, .unusual_name_for_code: 2 + 4 + 64 = 70
## data is .data, .init_array, .moar_stuff: 8 + 32 + 128 = 168
## bss is .bss: 1
## total: 239
## unaccounted for (not affecting total) is .debug_info, .text.but_not_really
# CHECK: text data bss dec hex filename
# CHECK-NEXT: 70 168 1 239 ef [[FILE]]
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .bss
Type: SHT_NOBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 1
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 2
- Name: .unusual_name_for_code
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 64
- Name: .eh_frame
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC ]
Size: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 8
- Name: .moar_stuff
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 128
- Name: .text.but_not_really
Type: SHT_PROGBITS
Flags: [ ]
Size: 256
- Name: .debug_info
Type: SHT_PROGBITS
Flags: [ ]
Size: 16
- Name: .init_array
Type: SHT_INIT_ARRAY
Flags: [ SHF_ALLOC, SHF_WRITE ]
Size: 32

View File

@ -0,0 +1,18 @@
## Show that llvm-size falls back to Berkeley output if --format=darwin is
## specified and the input is not Mach-O.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size -m %t | FileCheck %s
# RUN: llvm-size --format=darwin %t | FileCheck %s
## FIXME: The input filename should be printed but isn't currently due to
## https://bugs.llvm.org/show_bug.cgi?id=42971.
# CHECK: text data bss dec hex filename
# CHECK-NEXT: 0 0 0 0 0
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64

View File

@ -0,0 +1,129 @@
## Show that llvm-sizes works correctly on a typical ELF input for sysv
## format. It also shows that the formatting is correct.
## FIXME: The rules demonstrated by this test are not quite what GNU size
## follows. See https://bugs.llvm.org/show_bug.cgi?id=42934.
# RUN: yaml2obj %s > %t.o
# RUN: llvm-size --format=sysv %t.o \
# RUN: | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
# RUN: llvm-size -A %t.o \
# RUN: | FileCheck %s --match-full-lines --strict-whitespace -DFILE=%t.o --implicit-check-not={{.}}
# CHECK:[[FILE]] :
# CHECK-NEXT:section size addr
# CHECK-NEXT:.progbits 1 2097152
# CHECK-NEXT:.symtab_shndx 4 524288
# CHECK-NEXT:.hash 64 65536
# CHECK-NEXT:.dynamic 128 32768
# CHECK-NEXT:.note 256 16384
# CHECK-NEXT:.nobits 512 8192
# CHECK-NEXT:.shlib 2048 2048
# CHECK-NEXT:.dynsym 4096 1024
# CHECK-NEXT:.init_array 8192 512
# CHECK-NEXT:.fini_array 16384 256
# CHECK-NEXT:.preinit_array 32768 128
# CHECK-NEXT:.group 65536 64
# CHECK-NEXT:.relr 131072 32
# CHECK-NEXT:.os_specific 262144 16
# CHECK-NEXT:.proc_specific 524288 8
# CHECK-NEXT:.user_specific 1048576 4
# CHECK-NEXT:Total 2096069
!ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .progbits
Type: SHT_PROGBITS
ShSize: 0x1
Address: 0x200000
- Name: .strtab
Type: SHT_STRTAB
ShSize: 0x2
Address: 0x100000
- Name: .symtab_shndx
Link: .symtab
Type: SHT_SYMTAB_SHNDX
ShSize: 0x4
Address: 0x80000
Entries:
- Name: .symtab
Type: SHT_SYMTAB
## .symtab's size has to be based on .symtab_shndx's size, hence the
## size not following the pattern of the other sections.
ShSize: 0x18
Address: 0x40000
- Name: .rela
Type: SHT_RELA
ShSize: 0x20
Address: 0x20000
- Name: .hash
Type: SHT_HASH
ShSize: 0x40
Address: 0x10000
- Name: .dynamic
Type: SHT_DYNAMIC
ShSize: 0x80
Address: 0x8000
- Name: .note
Type: SHT_NOTE
ShSize: 0x100
Address: 0x4000
- Name: .nobits
Type: SHT_NOBITS
ShSize: 0x200
Address: 0x2000
- Name: .rel
Type: SHT_REL
ShSize: 0x400
Address: 0x1000
- Name: .shlib
Type: SHT_SHLIB
ShSize: 0x800
Address: 0x800
- Name: .dynsym
Type: SHT_DYNSYM
ShSize: 0x1000
Address: 0x400
- Name: .init_array
Type: SHT_INIT_ARRAY
ShSize: 0x2000
Address: 0x200
- Name: .fini_array
Type: SHT_FINI_ARRAY
ShSize: 0x4000
Address: 0x100
- Name: .preinit_array
Type: SHT_PREINIT_ARRAY
ShSize: 0x8000
Address: 0x80
- Name: .group
Type: SHT_GROUP
ShSize: 0x10000
Address: 0x40
Info: 0
Members:
- Name: .relr
Type: SHT_RELR
ShSize: 0x20000
Address: 0x20
- Name: .os_specific
Type: 0x61234567
ShSize: 0x40000
Address: 0x10
- Name: .proc_specific
Type: 0x71234567
ShSize: 0x80000
Address: 0x8
- Name: .user_specific
Type: 0x81234567
ShSize: 0x100000
Address: 0x4
- Name: .null
Type: SHT_NULL
ShSize: 0x200000
Address: 0x2

View File

@ -1,7 +1,15 @@
RUN: llvm-size -h | FileCheck %s
RUN: llvm-size --help | FileCheck %s
## Show that help text is printed correctly when requested.
RUN: llvm-size -h | FileCheck %s --check-prefixes=CHECK,CATEG
RUN: llvm-size --help | FileCheck %s --check-prefixes=CHECK,CATEG
RUN: llvm-size --help-list \
RUN: | FileCheck %s --check-prefixes=CHECK,LIST
CHECK: OVERVIEW: llvm object size dumper
CHECK: USAGE: llvm-size{{(.exe)?}} [options] <input files>{{$}}
CHECK: OPTIONS:
CATEG: Generic Options:
LIST-NOT: Generic Options:
CATEG: llvm-size Options:
LIST-NOT: llvm-size Options:
CHECK: @FILE

View File

@ -0,0 +1,22 @@
## Show that llvm-size reports an error when passed an input file in an
## unknown format.
## FIXME: The error messages tested here are not consistently formatted, and the
## second one doesn't even return with a non-zero exit code.
## See https://bugs.llvm.org/show_bug.cgi?id=42970.
# RUN: not llvm-size %s 2>&1 | FileCheck %s -DFILE=%s --check-prefix=UNRECOGNIZED
# UNRECOGNIZED: {{.*}}llvm-size{{(.*)}}: [[FILE]] The file was not recognized as a valid object file
## Show that llvm-size reports an error when passed an input file in an
## unsupported format.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size %t 2>&1 | FileCheck %s -DFILE=%t --check-prefix=NOTSUPPORTED
# NOTSUPPORTED: {{.*}}llvm-size{{(.*)}}: [[FILE]]: Unrecognized file type.
--- !minidump
Streams:
- Type: LinuxAuxv
Size: 7
Content: 11223344556600

View File

@ -0,0 +1,58 @@
## Show that the -l option produces more verbose address and offset information
## for darwin format.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size %t -m -l | FileCheck %s
# CHECK: Segment : 12 (vmaddr 0x0 fileoff 220)
# CHECK-NEXT: Section (__TEXT, __text): 4 (addr 0x0 offset 220)
# CHECK-NEXT: Section (__DATA, __data): 8 (addr 0x4 offset 224)
# CHECK-NEXT: total 12
# CHECK-NEXT: total 12
--- !mach-o
FileHeader:
magic: 0xFEEDFACE
cputype: 0x0000000C
cpusubtype: 0x00000009
filetype: 0x00000001
ncmds: 1
sizeofcmds: 192
flags: 0x00000000
LoadCommands:
- cmd: LC_SEGMENT
cmdsize: 192
segname: ''
vmaddr: 0
vmsize: 12
fileoff: 220
filesize: 12
maxprot: 7
initprot: 7
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x0000000000000000
size: 4
offset: 0x000000DC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x80000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
- sectname: __data
segname: __DATA
addr: 0x0000000000000004
size: 8
offset: 0x000000E0
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x00000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000

View File

@ -0,0 +1,55 @@
## Show that llvm-size can print Mach-O files using berkeley-style output.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size %t -B \
# RUN: | FileCheck %s --implicit-check-not={{.}} --strict-whitespace
# CHECK: __TEXT __DATA __OBJC others dec hex
# CHECK-NEXT: 4 8 0 0 12 c {{$}}
--- !mach-o
FileHeader:
magic: 0xFEEDFACE
cputype: 0x0000000C
cpusubtype: 0x00000009
filetype: 0x00000001
ncmds: 1
sizeofcmds: 192
flags: 0x00000000
LoadCommands:
- cmd: LC_SEGMENT
cmdsize: 192
segname: ''
vmaddr: 0
vmsize: 12
fileoff: 220
filesize: 12
maxprot: 7
initprot: 7
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x0000000000000000
size: 4
offset: 0x000000DC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x80000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
- sectname: __data
segname: __DATA
addr: 0x0000000000000004
size: 8
offset: 0x000000E0
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x00000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000

View File

@ -0,0 +1,58 @@
## Show that llvm-size can print Mach-O files using sysv-style output.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size %t -A \
# RUN: | FileCheck %s --implicit-check-not={{.}} --strict-whitespace -DFILE=%t
# CHECK: [[FILE]] :
# CHECK-NEXT: section size addr
# CHECK-NEXT: __text 4 0
# CHECK-NEXT: __data 8 4
# CHECK-NEXT: Total 12
--- !mach-o
FileHeader:
magic: 0xFEEDFACE
cputype: 0x0000000C
cpusubtype: 0x00000009
filetype: 0x00000001
ncmds: 1
sizeofcmds: 192
flags: 0x00000000
LoadCommands:
- cmd: LC_SEGMENT
cmdsize: 192
segname: ''
vmaddr: 0
vmsize: 12
fileoff: 220
filesize: 12
maxprot: 7
initprot: 7
nsects: 2
flags: 0
Sections:
- sectname: __text
segname: __TEXT
addr: 0x0000000000000000
size: 4
offset: 0x000000DC
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x80000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000
- sectname: __data
segname: __DATA
addr: 0x0000000000000004
size: 8
offset: 0x000000E0
align: 0
reloff: 0x00000000
nreloc: 0
flags: 0x00000000
reserved1: 0x00000000
reserved2: 0x00000000
reserved3: 0x00000000

View File

@ -0,0 +1,72 @@
## Show how llvm-size behaves when passed in multiple inputs.
# RUN: yaml2obj %s --docnum=1 -o %t1
# RUN: yaml2obj %s --docnum=2 -o %t2
# RUN: llvm-size -B %t1 %t2 | FileCheck %s -DFILE1=%t1 -DFILE2=%t2 --check-prefix=BERKELEY
# RUN: llvm-size -A %t1 %t2 | FileCheck %s -DFILE1=%t1 -DFILE2=%t2 --check-prefix=SYSV
# BERKELEY: text data bss dec hex filename
# BERKELEY-NEXT: 1 2 4 7 7 [[FILE1]]
# BERKELEY-NEXT: 8 16 32 56 38 [[FILE2]]
# BERKELEY-NOT:{{.}}
# SYSV: [[FILE1]] :
# SYSV-NEXT: section size addr
# SYSV-NEXT: .text 1 4
# SYSV-NEXT: .data 2 2
# SYSV-NEXT: .bss 4 1
# SYSV-NEXT: Total 7
# SYSV-EMPTY:
# SYSV-NEXT: [[FILE2]] :
# SYSV-NEXT: section size addr
# SYSV-NEXT: .text 8 32
# SYSV-NEXT: .data 16 16
# SYSV-NEXT: .bss 32 8
# SYSV-NEXT: Total 56
# SYSV-NOT:{{.}}
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 1
Address: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 2
Address: 2
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 4
Address: 1
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 8
Address: 32
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 16
Address: 16
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 32
Address: 8

View File

@ -0,0 +1,26 @@
## Show that llvm-size emits an error if passed in a non-existent file.
# RUN: not llvm-size %t.blah 2>&1 | FileCheck %s -DFILE=%t.blah --check-prefix=ENOENT
# ENOENT: {{.*}}llvm-size{{.*}}: [[FILE]] {{[Nn]}}o such file or directory
## Show that llvm-size reads a.out if not passed any file.
# RUN: rm -rf %t && mkdir -p %t
# RUN: cd %t
# RUN: yaml2obj %s -o a.out
# RUN: llvm-size 2>&1 | FileCheck %s -DFILE=a.out
# CHECK: text data bss dec hex filename
# CHECK-NEXT: 42 0 0 42 2a a.out
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
Size: 42

View File

@ -0,0 +1,167 @@
## Show that llvm-size prints sizes in different radixes when requested.
# RUN: yaml2obj %s --docnum=1 -o %t1.o
# RUN: yaml2obj %s --docnum=2 -o %t2.o
## Case 1: Octal radix (Berkeley).
# RUN: llvm-size %t1.o %t2.o --totals -B --radix=8 \
# RUN: | FileCheck %s --check-prefix=OCT-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o --totals -B -o \
# RUN: | FileCheck %s --check-prefix=OCT-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# OCT-BERK: text data bss oct hex filename
# OCT-BERK-NEXT: 01 02 04 7 7 [[FILE1]]
# OCT-BERK-NEXT: 010 020 040 70 38 [[FILE2]]
# OCT-BERK-NEXT: 011 022 044 77 3f (TOTALS)
## Case 2: Decimal radix (Berkeley).
# RUN: llvm-size %t1.o %t2.o --totals -B --radix=10 \
# RUN: | FileCheck %s --check-prefix=DEC-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o --totals -B -d \
# RUN: | FileCheck %s --check-prefix=DEC-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# DEC-BERK: text data bss dec hex filename
# DEC-BERK-NEXT: 1 2 4 7 7 [[FILE1]]
# DEC-BERK-NEXT: 8 16 32 56 38 [[FILE2]]
# DEC-BERK-NEXT: 9 18 36 63 3f (TOTALS)
## Case 3: Hexadecimal radix (Berkeley).
# RUN: llvm-size %t1.o %t2.o --totals -B --radix=16 \
# RUN: | FileCheck %s --check-prefix=HEX-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o --totals -B -x \
# RUN: | FileCheck %s --check-prefix=HEX-BERK -DFILE1=%t1.o -DFILE2=%t2.o
# HEX-BERK: text data bss dec hex filename
# HEX-BERK-NEXT: 0x1 0x2 0x4 7 7 [[FILE1]]
# HEX-BERK-NEXT: 0x8 0x10 0x20 56 38 [[FILE2]]
# HEX-BERK-NEXT: 0x9 0x12 0x24 63 3f (TOTALS)
## Case 4: Octal radix (sysv).
# RUN: llvm-size %t1.o %t2.o -A --radix=8 \
# RUN: | FileCheck %s --check-prefix=OCT-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o -A -o \
# RUN: | FileCheck %s --check-prefix=OCT-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# OCT-SYSV: [[FILE1]] :
# OCT-SYSV-NEXT: section size addr
# OCT-SYSV-NEXT: .text 01 04
# OCT-SYSV-NEXT: .data 02 02
# OCT-SYSV-NEXT: .bss 04 01
# OCT-SYSV-NEXT: Total 07
# OCT-SYSV-EMPTY:
# OCT-SYSV-NEXT: [[FILE2]] :
# OCT-SYSV-NEXT: section size addr
# OCT-SYSV-NEXT: .blob 010 040
# OCT-SYSV-NEXT: .blab 020 020
# OCT-SYSV-NEXT: .blib 040 010
# OCT-SYSV-NEXT: Total 070
## Case 5: Decimal radix (sysv).
# RUN: llvm-size %t1.o %t2.o -A --radix=10 \
# RUN: | FileCheck %s --check-prefix=DEC-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o -A -d \
# RUN: | FileCheck %s --check-prefix=DEC-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# DEC-SYSV: [[FILE1]] :
# DEC-SYSV-NEXT: section size addr
# DEC-SYSV-NEXT: .text 1 4
# DEC-SYSV-NEXT: .data 2 2
# DEC-SYSV-NEXT: .bss 4 1
# DEC-SYSV-NEXT: Total 7
# DEC-SYSV-EMPTY:
# DEC-SYSV-NEXT: [[FILE2]] :
# DEC-SYSV-NEXT: section size addr
# DEC-SYSV-NEXT: .blob 8 32
# DEC-SYSV-NEXT: .blab 16 16
# DEC-SYSV-NEXT: .blib 32 8
# DEC-SYSV-NEXT: Total 56
## Case 6: Hexadecimal radix (sysv).
# RUN: llvm-size %t1.o %t2.o -A --radix=16 \
# RUN: | FileCheck %s --check-prefix=HEX-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# RUN: llvm-size %t1.o %t2.o -A -x \
# RUN: | FileCheck %s --check-prefix=HEX-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
# HEX-SYSV: [[FILE1]] :
# HEX-SYSV-NEXT: section size addr
# HEX-SYSV-NEXT: .text 0x1 0x4
# HEX-SYSV-NEXT: .data 0x2 0x2
# HEX-SYSV-NEXT: .bss 0x4 0x1
# HEX-SYSV-NEXT: Total 0x7
# HEX-SYSV-EMPTY:
# HEX-SYSV-NEXT: [[FILE2]] :
# HEX-SYSV-NEXT: section size addr
# HEX-SYSV-NEXT: .blob 0x8 0x20
# HEX-SYSV-NEXT: .blab 0x10 0x10
# HEX-SYSV-NEXT: .blib 0x20 0x8
# HEX-SYSV-NEXT: Total 0x38
## Case 7: Default Berkeley is decimal.
# RUN: llvm-size %t1.o %t2.o --totals -B \
# RUN: | FileCheck %s --check-prefix=DEC-BERK -DFILE1=%t1.o -DFILE2=%t2.o
## Case 8: Default sysv is decimal.
# RUN: llvm-size %t1.o %t2.o -A \
# RUN: | FileCheck %s --check-prefix=DEC-SYSV -DFILE1=%t1.o -DFILE2=%t2.o
## Case 9: Bad values.
# RUN: not llvm-size %t1.o --radix=0 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=0
# RUN: not llvm-size %t1.o --radix=1 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=1
# RUN: not llvm-size %t1.o --radix=2 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=2
# RUN: not llvm-size %t1.o --radix=32 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=32
# RUN: not llvm-size %t1.o --radix=-1 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=-1
# RUN: not llvm-size %t1.o --radix=bad 2>&1 \
# RUN: | FileCheck %s --check-prefix=BAD-VAL -DNUM=bad
# BAD-VAL: {{.*}}llvm-size{{.*}}: for the --radix option: Cannot find option named '[[NUM]]'!
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 1
Address: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 2
Address: 2
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 4
Address: 1
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .blob
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 8
Address: 32
- Name: .blab
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 16
Address: 16
- Name: .blib
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 32
Address: 8

View File

@ -0,0 +1,21 @@
## Show that llvm-size can consume a response file.
# RUN: echo "-t %t" > %t.rsp
# RUN: yaml2obj %s -o %t
# RUN: llvm-size -x @%t.rsp | FileCheck %s -DFILE=%t
# CHECK: text data bss dec hex filename
# CHECK-NEXT: 0x10 0 0 16 10 [[FILE]]
# CHECK-NEXT: 0x10 0 0 16 10 (TOTALS)
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_EXEC
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Size: 0x10
Flags: [SHF_ALLOC, SHF_EXECINSTR]

View File

@ -0,0 +1,31 @@
## Show that llvm-size reads stdin if the input file is '-'.
# RUN: yaml2obj %s -o %t
# RUN: llvm-size -B - < %t | FileCheck %s --check-prefix=BERKELEY
# RUN: llvm-size -A - < %t | FileCheck %s --check-prefix=SYSV
# BERKELEY: 1 2 4 7 7 <stdin>
# SYSV: <stdin> :
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 1
Address: 4
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 2
Address: 2
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 4
Address: 1

View File

@ -0,0 +1,57 @@
## Show that llvm-size prints the total sizes when --totals is specified.
# RUN: rm -f %t.a
# RUN: yaml2obj %s --docnum=1 -o %t.o
# RUN: yaml2obj %s --docnum=2 -o %t2.o
# RUN: llvm-ar rc %t.a %t.o %t2.o
# RUN: llvm-size --totals %t.o %t.a %t2.o \
# RUN: | FileCheck %s -DFILE1=%t.o -DFILE2=%t2.o -DARCHIVE=%t.a
# RUN: llvm-size -t %t.o %t.a %t2.o \
# RUN: | FileCheck %s -DFILE1=%t.o -DFILE2=%t2.o -DARCHIVE=%t.a
# CHECK: text data bss dec hex filename
# CHECK-NEXT: [[FILE1]]
# CHECK-NEXT: {{.*}}.o (ex [[ARCHIVE]])
# CHECK-NEXT: {{.*}}2.o (ex [[ARCHIVE]])
# CHECK-NEXT: [[FILE2]]
# CHECK-NEXT: 18 36 72 126 7e (TOTALS)
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 1
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 2
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 4
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_EXECINSTR]
Size: 8
- Name: .data
Type: SHT_PROGBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 16
- Name: .bss
Type: SHT_NOBITS
Flags: [SHF_ALLOC, SHF_WRITE]
Size: 32

View File

@ -0,0 +1,4 @@
## Show that the an error is emitted if an unknown value is passed to --format.
# RUN: not llvm-size --format=unknown 2>&1 | FileCheck %s
# CHECK: {{.*}}llvm-size{{.*}}: for the --format option: Cannot find option named 'unknown'!

View File

@ -0,0 +1,4 @@
## Show that --version works for llvm-size.
RUN: llvm-size --version | FileCheck %s
CHECK: version