diff options
author | Yuanfang Chen <yuanfang.chen@sony.com> | 2019-07-24 16:55:30 +0000 |
---|---|---|
committer | Yuanfang Chen <yuanfang.chen@sony.com> | 2019-07-24 16:55:30 +0000 |
commit | fac3900c512023b8befc4ba7ffb72e59f2f94728 (patch) | |
tree | f0ea68948bab5297893bf44b2579f2831710ced8 /llvm/test/tools/llvm-objdump | |
parent | 3f01c7197f065d34c1d5e166e47193a6b39c5fbd (diff) | |
download | bcm5719-llvm-fac3900c512023b8befc4ba7ffb72e59f2f94728.tar.gz bcm5719-llvm-fac3900c512023b8befc4ba7ffb72e59f2f94728.zip |
[llvm-objdump] Emit warning if --start-address/--stop-address specify range outside file's address range.
NB: the warning is about the input file itself regardless of the options used
such as `-r`, `-s` etc..
https://bugs.llvm.org/show_bug.cgi?id=41911
Reviewers: jhenderson, grimar, MaskRay, rupprecht
Reviewed by: MaskRay, jhenderson
Differential Revision: https://reviews.llvm.org/D64779
llvm-svn: 366923
Diffstat (limited to 'llvm/test/tools/llvm-objdump')
-rw-r--r-- | llvm/test/tools/llvm-objdump/warn-on-out-of-range-start-stop-address.test | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-objdump/warn-on-out-of-range-start-stop-address.test b/llvm/test/tools/llvm-objdump/warn-on-out-of-range-start-stop-address.test new file mode 100644 index 00000000000..931b360d739 --- /dev/null +++ b/llvm/test/tools/llvm-objdump/warn-on-out-of-range-start-stop-address.test @@ -0,0 +1,200 @@ +## This test checks warning messages if --start-address/--stop-address +## do not intersect with address ranges of sections that have the SHF_ALLOC +## flag. + +# RUN: yaml2obj --docnum=1 %s > %t +# RUN: yaml2obj --docnum=2 %s > %t.2 +# RUN: yaml2obj --docnum=3 %s > %t.o +# RUN: yaml2obj --docnum=4 %s > %t.3 + +## Warn if no section covers any part of the specified range. + +## - Section ends at start of range: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1004 --stop-address=0x1006 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## - Range is between two sections: +## | range | +## | section | | section | +# RUN: llvm-objdump --file-headers --start-address=0x1005 --stop-address=0x1006 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## - Range appears after any section: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1405 --stop-address=0x1406 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## - Range starts at 0. (--start-address defaults to 0). +# RUN: llvm-objdump --file-headers --stop-address=0x1000 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN-STOP-ONLY + +## - Range ends at UINT64_MAX. (--stop-address defaults to UINT64_MAX) +# RUN: llvm-objdump --file-headers --start-address=0x1500 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN-START-ONLY + +## No warning if a section covers at least part of the specified range. + +## - Ranges are identical: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1004 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Range is entirely within section: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1003 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section is entirely within range: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1005 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range share same start, section larger: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1003 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range share same start, range larger: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1005 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range share same end, section larger: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1004 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range share same end, range larger: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1004 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range partially overlap, range first: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1003 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Section and range partially overlap, section first: +## | range | +## | section | +# RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1005 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## - Range starts before first section and ends after second: +## | range | +## | section | | section | +# RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1405 %t 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## Warn only for the input file that does not have the specified range. +# RUN: llvm-objdump --file-headers --start-address=0x2001 --stop-address=0x2005 %t %t.2 2>&1 \ +# RUN: | FileCheck %s --check-prefix=MULTI-INPUT + +## Warn if the specified range is in a segment but not in any section. +# RUN: llvm-objdump --file-headers --start-address=0x1008 --stop-address=0x1009 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## Warning for --start-address/--stop-address works regardless of the other options used including --section. +# RUN: llvm-objdump --syms --section=.text2 --start-address=0x1004 --stop-address=0x1005 %t 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## Sections without the SHF_ALLOC flag are ignored in address range calculation. +# RUN: llvm-objdump --file-headers --start-address=0x1 --stop-address=0x3 %t.3 2>&1 \ +# RUN: | FileCheck %s --check-prefix=WARN + +## No warning for relocatable objects. +# RUN: llvm-objdump --file-headers --start-address=0x1004 --stop-address=0x1005 %t.o 2>&1 \ +# RUN: | FileCheck %s --implicit-check-not=warning: + +## No warning if neither --start-address nor --stop-address are specified. +# RUN: llvm-objdump --file-headers %t 2>&1 | FileCheck %s --implicit-check-not=warning: + +# WARN: warning: no section overlaps the range {{.*}} specified by --start-address/--stop-address +# WARN-STOP-ONLY: warning: no section has address less than 0x1000 specified by --stop-address +# WARN-START-ONLY: warning: no section has address greater than or equal to 0x1500 specified by --start-address + +# MULTI-INPUT: file format +# MULTI-INPUT: warning: no section overlaps the range [0x2001,0x2005) specified by --start-address/--stop-address +# MULTI-INPUT: file format +# MULTI-INPUT-NOT: warning: + +--- !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: 0x1000 + Size: 4 + - Name: .text2 + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x1400 + Size: 4 +ProgramHeaders: + - Type: PT_LOAD + Flags: [ PF_X, PF_R ] + VAddr: 0x1000 + FileSize: 0x500 + Sections: + - Section: .text + - Section: .text2 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x2000 + Size: 4 +ProgramHeaders: + - Type: PT_LOAD + Flags: [ PF_X, PF_R ] + VAddr: 0x1000 + FileSize: 0x4 + Sections: + - Section: .text + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x1000 + Size: 4 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .non.alloc + Type: SHT_PROGBITS + Size: 2 |