1*f97019adSGeorgii Rymar## Here we test how the --stackmap option can be used to dump .llvm_stackmaps sections. 2*f97019adSGeorgii Rymar 3*f97019adSGeorgii Rymar## Check we are able to dump an empty .llvm_stackmaps section. Document that 4*f97019adSGeorgii Rymar## we are only trying to dump the first stack map section and ignore others if any. 5*f97019adSGeorgii Rymar 6*f97019adSGeorgii Rymar# RUN: yaml2obj %s -o %t 7*f97019adSGeorgii Rymar# RUN: llvm-readobj %t --stackmap 2>&1 | \ 8*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=EMPTY --implicit-check-not=warning: 9*f97019adSGeorgii Rymar# RUN: llvm-readelf %t --stackmap 2>&1 | \ 10*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=EMPTY --implicit-check-not=warning: 11*f97019adSGeorgii Rymar 12*f97019adSGeorgii Rymar# EMPTY: LLVM StackMap Version: 3 13*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Functions: 0 14*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Constants: 0 15*f97019adSGeorgii Rymar# EMPTY-NEXT: Num Records: 0 16*f97019adSGeorgii Rymar# EMPTY-NOT: {{.}} 17*f97019adSGeorgii Rymar 18*f97019adSGeorgii Rymar--- !ELF 19*f97019adSGeorgii RymarFileHeader: 20*f97019adSGeorgii Rymar Class: ELFCLASS64 21*f97019adSGeorgii Rymar Data: ELFDATA2LSB 22*f97019adSGeorgii Rymar Type: ET_REL 23*f97019adSGeorgii RymarSections: 24*f97019adSGeorgii Rymar - Name: [[NAME=.llvm_stackmaps]] 25*f97019adSGeorgii Rymar Type: SHT_PROGBITS 26*f97019adSGeorgii Rymar ContentArray: [ [[VERSION=0x3]] ] 27*f97019adSGeorgii Rymar Size: [[SIZE=16]] 28*f97019adSGeorgii Rymar ShSize: [[SHSIZE=<none>]] 29*f97019adSGeorgii Rymar ShOffset: [[SHOFFSET=<none>]] 30*f97019adSGeorgii Rymar## An arbitrary second broken .llvm_stackmaps section. 31*f97019adSGeorgii Rymar - Name: .llvm_stackmaps (1) 32*f97019adSGeorgii Rymar Type: SHT_PROGBITS 33*f97019adSGeorgii Rymar ContentArray: [ 0xFF ] 34*f97019adSGeorgii Rymar Size: 0x1 35*f97019adSGeorgii Rymar 36*f97019adSGeorgii Rymar## Hide the first stack map section to allow dumpers to locate and validate the second one, which is broken. 37*f97019adSGeorgii Rymar## Check we are able to find it and report a warning properly. 38*f97019adSGeorgii Rymar 39*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DNAME=.foo -o %t.second 40*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.second --stackmap 2>&1 | \ 41*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=SECOND -DFILE=%t.second --implicit-check-not=warning: 42*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.second --stackmap 2>&1 | \ 43*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=SECOND -DFILE=%t.second --implicit-check-not=warning: 44*f97019adSGeorgii Rymar 45*f97019adSGeorgii Rymar# SECOND: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 2: the stack map section size (1) is less than the minimum possible size of its header (16) 46*f97019adSGeorgii Rymar 47*f97019adSGeorgii Rymar## Check we report a warning when the size of the .llvm_stackmaps section is less 48*f97019adSGeorgii Rymar## than the minimum possible size of its header. 49*f97019adSGeorgii Rymar 50*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSHSIZE=0 -o %t.trunc0 51*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc0 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc0 --check-prefix=TRUNC -DVAL=0 52*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc0 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc0 --check-prefix=TRUNC -DVAL=0 53*f97019adSGeorgii Rymar 54*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSIZE=1 -o %t.trunc1 55*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc1 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc1 --check-prefix=TRUNC -DVAL=1 56*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc1 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc1 --check-prefix=TRUNC -DVAL=1 57*f97019adSGeorgii Rymar 58*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSIZE=15 -o %t.trunc15 59*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.trunc15 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc15 --check-prefix=TRUNC -DVAL=15 60*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.trunc15 --stackmap 2>&1 | FileCheck %s -DFILE=%t.trunc15 --check-prefix=TRUNC -DVAL=15 61*f97019adSGeorgii Rymar 62*f97019adSGeorgii Rymar# TRUNC: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: the stack map section size ([[VAL]]) is less than the minimum possible size of its header (16) 63*f97019adSGeorgii Rymar 64*f97019adSGeorgii Rymar## Check that we report a warning when the version of the stack map section is not supported. 65*f97019adSGeorgii Rymar 66*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DVERSION=2 -o %t.ver2 67*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.ver2 --stackmap 2>&1 | \ 68*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=VERSION -DFILE=%t.ver2 --implicit-check-not=warning: -DVERSION=2 69*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.ver2 --stackmap 2>&1 | \ 70*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=VERSION -DFILE=%t.ver2 --implicit-check-not=warning: -DVERSION=2 71*f97019adSGeorgii Rymar 72*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DVERSION=4 -o %t.ver4 73*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.ver4 --stackmap 2>&1 | \ 74*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=VERSION -DFILE=%t.ver4 --implicit-check-not=warning: -DVERSION=4 75*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.ver4 --stackmap 2>&1 | \ 76*f97019adSGeorgii Rymar# RUN: FileCheck %s --check-prefix=VERSION -DFILE=%t.ver4 --implicit-check-not=warning: -DVERSION=4 77*f97019adSGeorgii Rymar 78*f97019adSGeorgii Rymar# VERSION: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: the version ([[VERSION]]) of the stack map section is unsupported, the supported version is 3 79*f97019adSGeorgii Rymar 80*f97019adSGeorgii Rymar## Check that we report a warning when we are unable to read the content of the stack map section. 81*f97019adSGeorgii Rymar# RUN: yaml2obj %s -DSHOFFSET=0xffff -o %t.offset 82*f97019adSGeorgii Rymar# RUN: llvm-readobj %t.offset --stackmap 2>&1 | FileCheck %s -DFILE=%t.offset --check-prefix=OFFSET 83*f97019adSGeorgii Rymar# RUN: llvm-readelf %t.offset --stackmap 2>&1 | FileCheck %s -DFILE=%t.offset --check-prefix=OFFSET 84*f97019adSGeorgii Rymar 85*f97019adSGeorgii Rymar# OFFSET: warning: '[[FILE]]': unable to read the stack map from SHT_PROGBITS section with index 1: section [index 1] has a sh_offset (0xffff) + sh_size (0x10) that is greater than the file size (0x1b8) 86