Skip to content

Commit

Permalink
Merge pull request #259 from compnerd/lit
Browse files Browse the repository at this point in the history
tests: convert the test suite to use more of the LLVM test utilities
  • Loading branch information
haberman committed Aug 3, 2021
2 parents 861cf84 + b1b49bf commit c47f867
Show file tree
Hide file tree
Showing 11 changed files with 252 additions and 230 deletions.
14 changes: 14 additions & 0 deletions CMakeLists.txt
Expand Up @@ -334,6 +334,20 @@ else()
if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/tests")
enable_testing()

find_package(Python COMPONENTS Interpreter)
if(Python_FOUND)
set(BLOATY_SRC_DIR ${PROJECT_SOURCE_DIR})
set(BLOATY_OBJ_DIR ${PROJECT_BINARY_DIR})
configure_file(tests/lit.site.cfg.in tests/lit.site.cfg @ONLY)

# TODO(abdulras) polish this further and convert this to `add_test` so that
# the default test suite run executes the tests.
add_custom_target(check-bloaty
COMMAND ${Python_EXECUTABLE} ${LIT_EXECUTABLE} -sv ${PROJECT_BINARY_DIR}/tests
COMMENT "Running bloaty tests..."
USES_TERMINAL)
endif()

if(BUILD_TESTING)
option(INSTALL_GTEST "" OFF)
add_subdirectory(third_party/googletest)
Expand Down
26 changes: 26 additions & 0 deletions README.md
Expand Up @@ -76,6 +76,32 @@ $ cmake ..
$ make -j6
```

### Running the new extended test suite

> NOTE: these tests are still experimental and not covered under CI yet. Please
> report any issues in running them.
When configuring the project via CMake, a few additional parameters must be
specified currently:
- `-DLIT_EXECUTABLE=<PATH>`: specifies where to find the lit tool
- `-DFILECHECK_EXECUTABLE=<PATH>`: specifies where to find the FileCheck tool
- `-DYAML2OBJ_EXECUTABLE=<PATH>`: specifies where to find the yaml2obj tool

You can install lit via pip:
```sh
pip install --user lit
```

The FileCheck utility and yaml2obj currently need to be provided by the user.
These are part of the LLVM toolchain and require a very recent build
(development release from the main branch) to run the tests.

```sh
cmake -B build -G Ninja -S . -DLIT_EXECUTABLE=${HOME}/Library/Python/3.8/bin/lit -DFILECHECK_EXECUTABLE=${HOME}/BinaryCache/llvm.org/bin/FileCheck -DYAML2OBJ_EXECUTABLE=${HOME}/BinaryCache/llvm.org/bin/yaml2obj
cmake --build build --config Debug
cmake --build build --target check-bloaty
```

## Running Bloaty

Run it directly on a binary target. For example, run it on itself.
Expand Down
18 changes: 9 additions & 9 deletions tests/dwarf/range_lists/base-addr-selection.test
Expand Up @@ -3,6 +3,10 @@
# a special kind of entry where the end address signifies the new base
# address.

# RUN: %yaml2obj %s --docnum=1 -o %t.obj
# RUN: %yaml2obj %s --docnum=2 -o %t.dwo
# RUN: %bloaty %t.obj --debug-file %t.dwo -d compileunits --raw-map --domain=vm | %FileCheck %s

--- !ELF
FileHeader:
Class: ELFCLASS64
Expand Down Expand Up @@ -86,12 +90,8 @@ DWARF:
- AbbrCode: 0x0
...

$ bloaty 1 --debug-file=2 -d compileunits --raw-map --domain=vm
Maps for 1:

VM MAP:
0000-1000 4096 [-- Nothing mapped --]
1000-1042 66 [section .text]
1042-1047 5 test.c
1047-1151 266 [section .text]

# CHECK: VM MAP:
# CHECK: 0000-1000 4096 [-- Nothing mapped --]
# CHECK: 1000-1042 66 [section .text]
# CHECK: 1042-1047 5 test.c
# CHECK: 1047-1151 266 [section .text]
39 changes: 19 additions & 20 deletions tests/elf/sections/empty-bin-64.test
@@ -1,3 +1,6 @@
# RUN: %yaml2obj %s -o %t.obj
# RUN: %bloaty --raw-map %t.obj | %FileCheck %s

--- !ELF
FileHeader:
Class: ELFCLASS64
Expand Down Expand Up @@ -47,24 +50,20 @@ Symbols:
Section: .comment
...

$ bloaty --raw-map 1
Maps for 1:

FILE MAP:
000-040 64 [ELF Headers]
040-070 48 .comment
070-118 168 .symtab
118-148 48 .strtab
148-190 72 .shstrtab
190-1d0 64 [ELF Headers]
1d0-210 64 .text
210-250 64 .data
250-290 64 .bss
290-2d0 64 .comment
2d0-310 64 .note.GNU-stack
310-350 64 .symtab
350-390 64 .strtab
390-3d0 64 .shstrtab

VM MAP:
# CHECK: FILE MAP:
# CHECK: 000-040 64 [ELF Headers]
# CHECK: 040-070 48 .comment
# CHECK: 070-118 168 .symtab
# CHECK: 118-148 48 .strtab
# CHECK: 148-190 72 .shstrtab
# CHECK: 190-1d0 64 [ELF Headers]
# CHECK: 1d0-210 64 .text
# CHECK: 210-250 64 .data
# CHECK: 250-290 64 .bss
# CHECK: 290-2d0 64 .comment
# CHECK: 2d0-310 64 .note.GNU-stack
# CHECK: 310-350 64 .symtab
# CHECK: 350-390 64 .strtab
# CHECK: 390-3d0 64 .shstrtab

# CHECK: VM MAP:
39 changes: 19 additions & 20 deletions tests/elf/sections/empty-obj-64.test
@@ -1,3 +1,6 @@
# RUN: %yaml2obj %s -o %t.obj
# RUN: %bloaty --raw-map %t.obj | %FileCheck %s

--- !ELF
FileHeader:
Class: ELFCLASS64
Expand Down Expand Up @@ -47,24 +50,20 @@ Symbols:
Section: .comment
...

$ bloaty --raw-map 1
Maps for 1:

FILE MAP:
000-040 64 [ELF Headers]
040-070 48 .comment
070-118 168 .symtab
118-148 48 .strtab
148-190 72 .shstrtab
190-1d0 64 [ELF Headers]
1d0-210 64 .text
210-250 64 .data
250-290 64 .bss
290-2d0 64 .comment
2d0-310 64 .note.GNU-stack
310-350 64 .symtab
350-390 64 .strtab
390-3d0 64 .shstrtab

VM MAP:
# CHECK: FILE MAP:
# CHECK: 000-040 64 [ELF Headers]
# CHECK: 040-070 48 .comment
# CHECK: 070-118 168 .symtab
# CHECK: 118-148 48 .strtab
# CHECK: 148-190 72 .shstrtab
# CHECK: 190-1d0 64 [ELF Headers]
# CHECK: 1d0-210 64 .text
# CHECK: 210-250 64 .data
# CHECK: 250-290 64 .bss
# CHECK: 290-2d0 64 .comment
# CHECK: 2d0-310 64 .note.GNU-stack
# CHECK: 310-350 64 .symtab
# CHECK: 350-390 64 .strtab
# CHECK: 390-3d0 64 .shstrtab

# CHECK: VM MAP:
115 changes: 57 additions & 58 deletions tests/elf/sections/musl-static-bin.test
Expand Up @@ -18,6 +18,9 @@
# This binary does not successfully run due to bugs in obj2yaml
# (or possibly yaml2obj). The binary did not fully round-trip successfully.

# RUN: %yaml2obj %s -o %t.obj
# RUN: %bloaty --raw-map %t.obj | %FileCheck %s

--- !ELF
FileHeader:
Class: ELFCLASS64
Expand Down Expand Up @@ -530,62 +533,58 @@ Symbols:
Size: 0x0000000000000008
...

$ bloaty --raw-map 1
Maps for 1:

FILE MAP:
0000-0040 64 [ELF Headers]
0040-0078 56 [LOAD #0 [R]]
0078-00b0 56 [LOAD #1 [RX]]
00b0-00e8 56 [LOAD #2 [R]]
00e8-0120 56 [LOAD #3 [RW]]
0120-0158 56 [LOAD #4 [RW]]
0158-0190 56 [LOAD #5 [R]]
0190-01a0 16 .init
01a0-09f9 2137 .text
09f9-0a00 7 .fini
0a00-0d20 800 .rodata
0d20-0d50 48 .eh_frame
0d50-0d58 8 .init_array
0d58-0d60 8 .fini_array
0d60-0d68 8 .got
0d68-0d80 24 .got.plt
0d80-0f78 504 .data
0f78-0f80 8 .data
0f80-0fd8 88 .comment
0fd8-1710 1848 .symtab
1710-1a43 819 .strtab
1a43-1ac0 125 .shstrtab
1ac0-1b00 64 [ELF Headers]
1b00-1b40 64 .init
1b40-1b80 64 .text
1b80-1bc0 64 .fini
1bc0-1c00 64 .rodata
1c00-1c40 64 .eh_frame
1c40-1c80 64 .init_array
1c80-1cc0 64 .fini_array
1cc0-1d00 64 .got
1d00-1d40 64 .got.plt
1d40-1d80 64 .data
1d80-1dc0 64 .bss
1dc0-1e00 64 .comment
1e00-1e40 64 .symtab
1e40-1e80 64 .strtab
1e80-1ec0 64 .shstrtab

VM MAP:
000000-401000 4198400 [-- Nothing mapped --]
401000-401010 16 .init
401010-401869 2137 .text
401869-40186c 3 .fini
40186c-402000 1940 [-- Nothing mapped --]
402000-402320 800 .rodata
402320-402350 48 .eh_frame
402350-403fe8 7320 [-- Nothing mapped --]
403fe8-403ff0 8 .init_array
403ff0-403ff8 8 .fini_array
403ff8-404000 8 .got
404000-404020 32 .got.plt
404020-404220 512 .data
404220-4044f8 728 .bss
# CHECK: FILE MAP:
# CHECK: 0000-0040 64 [ELF Headers]
# CHECK: 0040-0078 56 [LOAD #0 [R]]
# CHECK: 0078-00b0 56 [LOAD #1 [RX]]
# CHECK: 00b0-00e8 56 [LOAD #2 [R]]
# CHECK: 00e8-0120 56 [LOAD #3 [RW]]
# CHECK: 0120-0158 56 [LOAD #4 [RW]]
# CHECK: 0158-0190 56 [LOAD #5 [R]]
# CHECK: 0190-01a0 16 .init
# CHECK: 01a0-09f9 2137 .text
# CHECK: 09f9-0a00 7 .fini
# CHECK: 0a00-0d20 800 .rodata
# CHECK: 0d20-0d50 48 .eh_frame
# CHECK: 0d50-0d58 8 .init_array
# CHECK: 0d58-0d60 8 .fini_array
# CHECK: 0d60-0d68 8 .got
# CHECK: 0d68-0d80 24 .got.plt
# CHECK: 0d80-0f78 504 .data
# CHECK: 0f78-0f80 8 .data
# CHECK: 0f80-0fd8 88 .comment
# CHECK: 0fd8-1710 1848 .symtab
# CHECK: 1710-1a43 819 .strtab
# CHECK: 1a43-1ac0 125 .shstrtab
# CHECK: 1ac0-1b00 64 [ELF Headers]
# CHECK: 1b00-1b40 64 .init
# CHECK: 1b40-1b80 64 .text
# CHECK: 1b80-1bc0 64 .fini
# CHECK: 1bc0-1c00 64 .rodata
# CHECK: 1c00-1c40 64 .eh_frame
# CHECK: 1c40-1c80 64 .init_array
# CHECK: 1c80-1cc0 64 .fini_array
# CHECK: 1cc0-1d00 64 .got
# CHECK: 1d00-1d40 64 .got.plt
# CHECK: 1d40-1d80 64 .data
# CHECK: 1d80-1dc0 64 .bss
# CHECK: 1dc0-1e00 64 .comment
# CHECK: 1e00-1e40 64 .symtab
# CHECK: 1e40-1e80 64 .strtab
# CHECK: 1e80-1ec0 64 .shstrtab

# CHECK: VM MAP:
# CHECK: 000000-401000 4198400 [-- Nothing mapped --]
# CHECK: 401000-401010 16 .init
# CHECK: 401010-401869 2137 .text
# CHECK: 401869-40186c 3 .fini
# CHECK: 40186c-402000 1940 [-- Nothing mapped --]
# CHECK: 402000-402320 800 .rodata
# CHECK: 402320-402350 48 .eh_frame
# CHECK: 402350-403fe8 7320 [-- Nothing mapped --]
# CHECK: 403fe8-403ff0 8 .init_array
# CHECK: 403ff0-403ff8 8 .fini_array
# CHECK: 403ff8-404000 8 .got
# CHECK: 404000-404020 32 .got.plt
# CHECK: 404020-404220 512 .data
# CHECK: 404220-4044f8 728 .bss
77 changes: 38 additions & 39 deletions tests/elf/sections/normal-obj.test
@@ -1,3 +1,6 @@
# RUN: %yaml2obj %s -o %t.obj
# RUN: %bloaty --raw-map %t.obj | %FileCheck %s

--- !ELF
FileHeader:
Class: ELFCLASS64
Expand Down Expand Up @@ -83,43 +86,39 @@ Symbols:
Size: 0x0000000000000315
...

$ bloaty --raw-map 1
Maps for 1:

FILE MAP:
000-040 64 [ELF Headers]
040-050 16 .text
050-220 464 .data
220-535 789 .rodata
535-558 35 .comment
558-590 56 .eh_frame
590-5a8 24 .rela.eh_frame
5a8-650 168 .symtab
650-66b 27 .strtab
66b-6d8 109 .shstrtab
6d8-718 64 [ELF Headers]
718-758 64 .text
758-798 64 .bss
798-7d8 64 .data
7d8-818 64 .rodata
818-858 64 .comment
858-898 64 .note.GNU-stack
898-8d8 64 .eh_frame
8d8-918 64 .rela.eh_frame
918-958 64 .llvm_addrsig
958-998 64 .symtab
998-9d8 64 .strtab
9d8-a18 64 .shstrtab

VM MAP:
00000000000-10000000000 1099511627776 [-- Nothing mapped --]
10000000000-1000000000b 11 .text
1000000000b-20000000000 1099511627765 [-- Nothing mapped --]
20000000000-2000000007b 123 .bss
2000000007b-30000000000 1099511627653 [-- Nothing mapped --]
30000000000-300000001c8 456 .data
300000001c8-40000000000 1099511627320 [-- Nothing mapped --]
40000000000-40000000315 789 .rodata
40000000315-70000000000 3298534882539 [-- Nothing mapped --]
70000000000-70000000038 56 .eh_frame
# CHECK: FILE MAP:
# CHECK: 000-040 64 [ELF Headers]
# CHECK: 040-050 16 .text
# CHECK: 050-220 464 .data
# CHECK: 220-535 789 .rodata
# CHECK: 535-558 35 .comment
# CHECK: 558-590 56 .eh_frame
# CHECK: 590-5a8 24 .rela.eh_frame
# CHECK: 5a8-650 168 .symtab
# CHECK: 650-66b 27 .strtab
# CHECK: 66b-6d8 109 .shstrtab
# CHECK: 6d8-718 64 [ELF Headers]
# CHECK: 718-758 64 .text
# CHECK: 758-798 64 .bss
# CHECK: 798-7d8 64 .data
# CHECK: 7d8-818 64 .rodata
# CHECK: 818-858 64 .comment
# CHECK: 858-898 64 .note.GNU-stack
# CHECK: 898-8d8 64 .eh_frame
# CHECK: 8d8-918 64 .rela.eh_frame
# CHECK: 918-958 64 .llvm_addrsig
# CHECK: 958-998 64 .symtab
# CHECK: 998-9d8 64 .strtab
# CHECK: 9d8-a18 64 .shstrtab

# CHECK: VM MAP:
# CHECK: 00000000000-10000000000 1099511627776 [-- Nothing mapped --]
# CHECK: 10000000000-1000000000b 11 .text
# CHECK: 1000000000b-20000000000 1099511627765 [-- Nothing mapped --]
# CHECK: 20000000000-2000000007b 123 .bss
# CHECK: 2000000007b-30000000000 1099511627653 [-- Nothing mapped --]
# CHECK: 30000000000-300000001c8 456 .data
# CHECK: 300000001c8-40000000000 1099511627320 [-- Nothing mapped --]
# CHECK: 40000000000-40000000315 789 .rodata
# CHECK: 40000000315-70000000000 3298534882539 [-- Nothing mapped --]
# CHECK: 70000000000-70000000038 56 .eh_frame

0 comments on commit c47f867

Please sign in to comment.