diff options
Diffstat (limited to 'llvm/test/tools')
-rw-r--r-- | llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/nvptx-basic.ll.expected | 12 | ||||
-rw-r--r-- | llvm/test/tools/llvm-ir2vec/entities.ll | 95 | ||||
-rw-r--r-- | llvm/test/tools/llvm-ir2vec/error-handling.ll | 22 | ||||
-rw-r--r-- | llvm/test/tools/llvm-ir2vec/triplets.ll | 51 | ||||
-rw-r--r-- | llvm/test/tools/llvm-rc/windres-preproc.test | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe | bin | 94720 -> 0 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-readobj/COFF/Inputs/has-exdllcharacteristics.exe | bin | 0 -> 5120 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-readobj/COFF/cetcompat.test | 16 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/COFF/exdllcharacteristics.test | 22 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/sframe-fde.test | 237 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/sframe-header.test | 67 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readtapi/many-targets.test | 20 |
12 files changed, 498 insertions, 48 deletions
diff --git a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/nvptx-basic.ll.expected b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/nvptx-basic.ll.expected index 51cafac..e1da112 100644 --- a/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/nvptx-basic.ll.expected +++ b/llvm/test/tools/UpdateTestChecks/update_llc_test_checks/Inputs/nvptx-basic.ll.expected @@ -10,15 +10,15 @@ define dso_local void @caller_St8x4(ptr nocapture noundef readonly byval(%struct ; CHECK-NEXT: .reg .b64 %rd<13>; ; CHECK-EMPTY: ; CHECK-NEXT: // %bb.0: -; CHECK-NEXT: ld.param.b64 %rd1, [caller_St8x4_param_0+8]; -; CHECK-NEXT: ld.param.b64 %rd2, [caller_St8x4_param_0]; -; CHECK-NEXT: ld.param.b64 %rd3, [caller_St8x4_param_0+24]; -; CHECK-NEXT: ld.param.b64 %rd4, [caller_St8x4_param_0+16]; ; CHECK-NEXT: { // callseq 0, 0 ; CHECK-NEXT: .param .align 16 .b8 param0[32]; -; CHECK-NEXT: st.param.v2.b64 [param0], {%rd2, %rd1}; -; CHECK-NEXT: st.param.v2.b64 [param0+16], {%rd4, %rd3}; ; CHECK-NEXT: .param .align 16 .b8 retval0[32]; +; CHECK-NEXT: ld.param.b64 %rd1, [caller_St8x4_param_0+24]; +; CHECK-NEXT: ld.param.b64 %rd2, [caller_St8x4_param_0+16]; +; CHECK-NEXT: st.param.v2.b64 [param0+16], {%rd2, %rd1}; +; CHECK-NEXT: ld.param.b64 %rd3, [caller_St8x4_param_0+8]; +; CHECK-NEXT: ld.param.b64 %rd4, [caller_St8x4_param_0]; +; CHECK-NEXT: st.param.v2.b64 [param0], {%rd4, %rd3}; ; CHECK-NEXT: call.uni (retval0), callee_St8x4, (param0); ; CHECK-NEXT: ld.param.v2.b64 {%rd5, %rd6}, [retval0]; ; CHECK-NEXT: ld.param.v2.b64 {%rd7, %rd8}, [retval0+16]; diff --git a/llvm/test/tools/llvm-ir2vec/entities.ll b/llvm/test/tools/llvm-ir2vec/entities.ll new file mode 100644 index 0000000..57c3d6f --- /dev/null +++ b/llvm/test/tools/llvm-ir2vec/entities.ll @@ -0,0 +1,95 @@ +; RUN: llvm-ir2vec --mode=entities | FileCheck %s + +CHECK: 92 +CHECK-NEXT: Ret 0 +CHECK-NEXT: Br 1 +CHECK-NEXT: Switch 2 +CHECK-NEXT: IndirectBr 3 +CHECK-NEXT: Invoke 4 +CHECK-NEXT: Resume 5 +CHECK-NEXT: Unreachable 6 +CHECK-NEXT: CleanupRet 7 +CHECK-NEXT: CatchRet 8 +CHECK-NEXT: CatchSwitch 9 +CHECK-NEXT: CallBr 10 +CHECK-NEXT: FNeg 11 +CHECK-NEXT: Add 12 +CHECK-NEXT: FAdd 13 +CHECK-NEXT: Sub 14 +CHECK-NEXT: FSub 15 +CHECK-NEXT: Mul 16 +CHECK-NEXT: FMul 17 +CHECK-NEXT: UDiv 18 +CHECK-NEXT: SDiv 19 +CHECK-NEXT: FDiv 20 +CHECK-NEXT: URem 21 +CHECK-NEXT: SRem 22 +CHECK-NEXT: FRem 23 +CHECK-NEXT: Shl 24 +CHECK-NEXT: LShr 25 +CHECK-NEXT: AShr 26 +CHECK-NEXT: And 27 +CHECK-NEXT: Or 28 +CHECK-NEXT: Xor 29 +CHECK-NEXT: Alloca 30 +CHECK-NEXT: Load 31 +CHECK-NEXT: Store 32 +CHECK-NEXT: GetElementPtr 33 +CHECK-NEXT: Fence 34 +CHECK-NEXT: AtomicCmpXchg 35 +CHECK-NEXT: AtomicRMW 36 +CHECK-NEXT: Trunc 37 +CHECK-NEXT: ZExt 38 +CHECK-NEXT: SExt 39 +CHECK-NEXT: FPToUI 40 +CHECK-NEXT: FPToSI 41 +CHECK-NEXT: UIToFP 42 +CHECK-NEXT: SIToFP 43 +CHECK-NEXT: FPTrunc 44 +CHECK-NEXT: FPExt 45 +CHECK-NEXT: PtrToInt 46 +CHECK-NEXT: IntToPtr 47 +CHECK-NEXT: BitCast 48 +CHECK-NEXT: AddrSpaceCast 49 +CHECK-NEXT: CleanupPad 50 +CHECK-NEXT: CatchPad 51 +CHECK-NEXT: ICmp 52 +CHECK-NEXT: FCmp 53 +CHECK-NEXT: PHI 54 +CHECK-NEXT: Call 55 +CHECK-NEXT: Select 56 +CHECK-NEXT: UserOp1 57 +CHECK-NEXT: UserOp2 58 +CHECK-NEXT: VAArg 59 +CHECK-NEXT: ExtractElement 60 +CHECK-NEXT: InsertElement 61 +CHECK-NEXT: ShuffleVector 62 +CHECK-NEXT: ExtractValue 63 +CHECK-NEXT: InsertValue 64 +CHECK-NEXT: LandingPad 65 +CHECK-NEXT: Freeze 66 +CHECK-NEXT: FloatTy 67 +CHECK-NEXT: FloatTy 68 +CHECK-NEXT: FloatTy 69 +CHECK-NEXT: FloatTy 70 +CHECK-NEXT: FloatTy 71 +CHECK-NEXT: FloatTy 72 +CHECK-NEXT: FloatTy 73 +CHECK-NEXT: VoidTy 74 +CHECK-NEXT: LabelTy 75 +CHECK-NEXT: MetadataTy 76 +CHECK-NEXT: UnknownTy 77 +CHECK-NEXT: TokenTy 78 +CHECK-NEXT: IntegerTy 79 +CHECK-NEXT: FunctionTy 80 +CHECK-NEXT: PointerTy 81 +CHECK-NEXT: StructTy 82 +CHECK-NEXT: ArrayTy 83 +CHECK-NEXT: VectorTy 84 +CHECK-NEXT: VectorTy 85 +CHECK-NEXT: PointerTy 86 +CHECK-NEXT: UnknownTy 87 +CHECK-NEXT: Function 88 +CHECK-NEXT: Pointer 89 +CHECK-NEXT: Constant 90 +CHECK-NEXT: Variable 91 diff --git a/llvm/test/tools/llvm-ir2vec/error-handling.ll b/llvm/test/tools/llvm-ir2vec/error-handling.ll new file mode 100644 index 0000000..c23c529 --- /dev/null +++ b/llvm/test/tools/llvm-ir2vec/error-handling.ll @@ -0,0 +1,22 @@ +; Test error handling and input validation for llvm-ir2vec tool + +; RUN: not llvm-ir2vec --mode=embeddings %s 2>&1 | FileCheck %s -check-prefix=CHECK-NO-VOCAB + +; RUN: not llvm-ir2vec --mode=embeddings --function=nonexistent --ir2vec-vocab-path=%ir2vec_test_vocab_dir/dummy_3D_nonzero_opc_vocab.json %s 2>&1 | FileCheck %s -check-prefix=CHECK-FUNC-NOT-FOUND + +; RUN: llvm-ir2vec --mode=triplets --ir2vec-vocab-path=%ir2vec_test_vocab_dir/dummy_3D_nonzero_opc_vocab.json --level=inst %s 2>&1 | FileCheck %s -check-prefix=CHECK-UNUSED-LEVEL +; RUN: llvm-ir2vec --mode=entities --level=inst %s 2>&1 | FileCheck %s -check-prefix=CHECK-UNUSED-LEVEL + +; RUN: llvm-ir2vec --mode=triplets --ir2vec-vocab-path=%ir2vec_test_vocab_dir/dummy_3D_nonzero_opc_vocab.json --function=dummy %s 2>&1 | FileCheck %s -check-prefix=CHECK-UNUSED-FUNC +; RUN: llvm-ir2vec --mode=entities --function=dummy %s 2>&1 | FileCheck %s -check-prefix=CHECK-UNUSED-FUNC + +; Simple test function for valid IR +define i32 @test_func(i32 %a) { +entry: + ret i32 %a +} + +; CHECK-NO-VOCAB: error: IR2Vec vocabulary file path not specified; You may need to set it using --ir2vec-vocab-path +; CHECK-FUNC-NOT-FOUND: Error: Function 'nonexistent' not found +; CHECK-UNUSED-LEVEL: Warning: --level option is ignored +; CHECK-UNUSED-FUNC: Warning: --function option is ignored diff --git a/llvm/test/tools/llvm-ir2vec/triplets.ll b/llvm/test/tools/llvm-ir2vec/triplets.ll index d1ef5b3..dcd1dc9 100644 --- a/llvm/test/tools/llvm-ir2vec/triplets.ll +++ b/llvm/test/tools/llvm-ir2vec/triplets.ll @@ -24,15 +24,42 @@ entry: ret i32 %result } -; TRIPLETS: Add IntegerTy Variable Variable -; TRIPLETS-NEXT: Ret VoidTy Variable -; TRIPLETS-NEXT: Mul IntegerTy Variable Variable -; TRIPLETS-NEXT: Ret VoidTy Variable -; TRIPLETS-NEXT: Alloca PointerTy Constant -; TRIPLETS-NEXT: Alloca PointerTy Constant -; TRIPLETS-NEXT: Store VoidTy Variable Pointer -; TRIPLETS-NEXT: Store VoidTy Variable Pointer -; TRIPLETS-NEXT: Load IntegerTy Pointer -; TRIPLETS-NEXT: Load IntegerTy Pointer -; TRIPLETS-NEXT: Add IntegerTy Variable Variable -; TRIPLETS-NEXT: Ret VoidTy Variable +; TRIPLETS: MAX_RELATION=3 +; TRIPLETS-NEXT: 12 79 0 +; TRIPLETS-NEXT: 12 91 2 +; TRIPLETS-NEXT: 12 91 3 +; TRIPLETS-NEXT: 12 0 1 +; TRIPLETS-NEXT: 0 74 0 +; TRIPLETS-NEXT: 0 91 2 +; TRIPLETS-NEXT: 16 79 0 +; TRIPLETS-NEXT: 16 91 2 +; TRIPLETS-NEXT: 16 91 3 +; TRIPLETS-NEXT: 16 0 1 +; TRIPLETS-NEXT: 0 74 0 +; TRIPLETS-NEXT: 0 91 2 +; TRIPLETS-NEXT: 30 81 0 +; TRIPLETS-NEXT: 30 90 2 +; TRIPLETS-NEXT: 30 30 1 +; TRIPLETS-NEXT: 30 81 0 +; TRIPLETS-NEXT: 30 90 2 +; TRIPLETS-NEXT: 30 32 1 +; TRIPLETS-NEXT: 32 74 0 +; TRIPLETS-NEXT: 32 91 2 +; TRIPLETS-NEXT: 32 89 3 +; TRIPLETS-NEXT: 32 32 1 +; TRIPLETS-NEXT: 32 74 0 +; TRIPLETS-NEXT: 32 91 2 +; TRIPLETS-NEXT: 32 89 3 +; TRIPLETS-NEXT: 32 31 1 +; TRIPLETS-NEXT: 31 79 0 +; TRIPLETS-NEXT: 31 89 2 +; TRIPLETS-NEXT: 31 31 1 +; TRIPLETS-NEXT: 31 79 0 +; TRIPLETS-NEXT: 31 89 2 +; TRIPLETS-NEXT: 31 12 1 +; TRIPLETS-NEXT: 12 79 0 +; TRIPLETS-NEXT: 12 91 2 +; TRIPLETS-NEXT: 12 91 3 +; TRIPLETS-NEXT: 12 0 1 +; TRIPLETS-NEXT: 0 74 0 +; TRIPLETS-NEXT: 0 91 2 diff --git a/llvm/test/tools/llvm-rc/windres-preproc.test b/llvm/test/tools/llvm-rc/windres-preproc.test index 423ad02..43ed0a6 100644 --- a/llvm/test/tools/llvm-rc/windres-preproc.test +++ b/llvm/test/tools/llvm-rc/windres-preproc.test @@ -4,7 +4,7 @@ ; RUN: llvm-windres -### --include-dir %p/incdir1 --include %p/incdir2 "-DFOO1=\\\"foo bar\\\"" -UFOO2 -D FOO3 --preprocessor-arg "-DFOO4=\\\"baz baz\\\"" -DFOO5=\"bar\" %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK1 ; RUN: llvm-windres -### --include-dir %p/incdir1 --include %p/incdir2 "-DFOO1=\"foo bar\"" -UFOO2 -D FOO3 --preprocessor-arg "-DFOO4=\"baz baz\"" "-DFOO5=bar" %p/Inputs/empty.rc %t.res --use-temp-file | FileCheck %s --check-prefix=CHECK1 -; CHECK1: {{^}} "clang" "--driver-mode=gcc" "-target" "{{.*}}-{{.*}}{{mingw32|windows-gnu}}" "-E" "-xc" "-DRC_INVOKED" "-I" "{{.*}}incdir1" "-I" "{{.*}}incdir2" "-D" "FOO1=\"foo bar\"" "-U" "FOO2" "-D" "FOO3" "-DFOO4=\"baz baz\"" "-D" "FOO5=bar" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc"{{$}} +; CHECK1: {{^}} "clang" "--driver-mode=gcc" "-target" "{{.*}}-{{.*}}{{mingw32|cygwin|windows-gnu|windows-cygnus}}" "-E" "-xc" "-DRC_INVOKED" "-I" "{{.*}}incdir1" "-I" "{{.*}}incdir2" "-D" "FOO1=\"foo bar\"" "-U" "FOO2" "-D" "FOO3" "-DFOO4=\"baz baz\"" "-D" "FOO5=bar" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc"{{$}} ; RUN: llvm-windres -### --preprocessor "i686-w64-mingw32-gcc" --preprocessor-arg -E "-DFOO=\\\"foo bar\\\"" %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK2 ; CHECK2: {{^}} "{{.*}}i686-w64-mingw32-gcc" "-E" "-D" "FOO=\"foo bar\"" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc"{{$}} @@ -13,7 +13,7 @@ ; RUN: rm -rf %t-bin/testbin ; RUN: mkdir -p %t-bin/testbin ; RUN: ln -s llvm-windres %t-bin/testbin/i686-w64-mingw32-gcc -; RUN: env PATH=%t-bin/testbin llvm-windres -### --preprocessor i686-w64-mingw32-gcc --preprocessor-arg -E --preprocessor-arg -xc -DRC_INVOKED %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK3 +; RUN: env PATH="%t-bin/testbin:$PATH" llvm-windres -### --preprocessor i686-w64-mingw32-gcc --preprocessor-arg -E --preprocessor-arg -xc -DRC_INVOKED %p/Inputs/empty.rc %t.res | FileCheck %s --check-prefix=CHECK3 ; CHECK3: {{^}} "{{.*}}/testbin/i686-w64-mingw32-gcc" "-E" "-xc" "-D" "RC_INVOKED" "{{.*}}empty.rc" "-o" "{{.*}}preproc-{{.*}}.rc"{{$}} diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe Binary files differdeleted file mode 100644 index c77060d..0000000 --- a/llvm/test/tools/llvm-readobj/COFF/Inputs/has-cet.exe +++ /dev/null diff --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/has-exdllcharacteristics.exe b/llvm/test/tools/llvm-readobj/COFF/Inputs/has-exdllcharacteristics.exe Binary files differnew file mode 100644 index 0000000..9c36817 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/has-exdllcharacteristics.exe diff --git a/llvm/test/tools/llvm-readobj/COFF/cetcompat.test b/llvm/test/tools/llvm-readobj/COFF/cetcompat.test deleted file mode 100644 index a973b5c..0000000 --- a/llvm/test/tools/llvm-readobj/COFF/cetcompat.test +++ /dev/null @@ -1,16 +0,0 @@ -# To regenerate has-cet.exe -# $ echo int main() { return 0; } > has-cet.c -# $ cl has-cet.c /link /cetcompat -RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-cet.exe | FileCheck %s - -CHECK: DebugEntry { -CHECK: Characteristics: 0x0 -CHECK: Type: ExtendedDLLCharacteristics (0x14) -CHECK: ExtendedCharacteristics [ (0x1) -CHECK: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT (0x1) -CHECK: ] -CHECK: RawData ( -CHECK: 0000: 01000000 |....| -CHECK: ) -CHECK: } - diff --git a/llvm/test/tools/llvm-readobj/COFF/exdllcharacteristics.test b/llvm/test/tools/llvm-readobj/COFF/exdllcharacteristics.test new file mode 100644 index 0000000..ef35aea --- /dev/null +++ b/llvm/test/tools/llvm-readobj/COFF/exdllcharacteristics.test @@ -0,0 +1,22 @@ +# To regenerate has-exdllcharacteristics.exe +# $ echo int main() { return 0; } > has-exdllcharacteristics.c +# To make minimum possible stub file (to decrease the binary size) +# $ echo -n '4D5A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' | xxd -r -p > stub +# $ cl has-exdllcharacteristics.c /link /entry:main /STUB:stub /NOCOFFGRPINFO /EMITTOOLVERSIONINFO:NO /EMITPOGOPHASEINFO /NOVCFEATURE /MANIFEST:NO /cetcompat /cetcompatstrict /cetdynamicapisinproc /cetipvalidationrelaxed /hotpatchcompatible /functionpadmin:6 +RUN: llvm-readobj --coff-debug-directory %p/Inputs/has-exdllcharacteristics.exe | FileCheck %s + +CHECK: DebugEntry { +CHECK: Characteristics: 0x0 +CHECK: Type: ExtendedDLLCharacteristics (0x14) +CHECK: ExtendedCharacteristics [ (0x8F) +CHECK-DAG: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT (0x1) +CHECK-DAG: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE (0x2) +CHECK-DAG: IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x4) +CHECK-DAG: IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY (0x8) +CHECK-DAG: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80) +CHECK: ] +CHECK: RawData ( +CHECK: 0000: 8F000000 |....| +CHECK: ) +CHECK: } + diff --git a/llvm/test/tools/llvm-readobj/ELF/sframe-fde.test b/llvm/test/tools/llvm-readobj/ELF/sframe-fde.test new file mode 100644 index 0000000..dee4018 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/ELF/sframe-fde.test @@ -0,0 +1,237 @@ +## Check parsing and dumping of SFrame Function Descriptor Entries. +# RUN: yaml2obj --docnum=1 %s -o %t.1 +# RUN: llvm-readobj --sframe=.sframe_short --sframe=.sframe_section_relative \ +# RUN: --sframe=.sframe_fde_relative %t.1 2>&1 | \ +# RUN: FileCheck %s --strict-whitespace --match-full-lines \ +# RUN: -DFILE=%t.1 --check-prefix=CASE1 + +## Check big-endian support. +# RUN: yaml2obj --docnum=2 %s -o %t.2 +# RUN: llvm-readobj --sframe %t.2 2>&1 | \ +# RUN: FileCheck %s --strict-whitespace --match-full-lines \ +# RUN: -DFILE=%t.2 --check-prefix=CASE2 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC +Sections: + - Name: .sframe_short + Type: SHT_GNU_SFRAME + Flags: [ SHF_ALLOC ] + ContentArray: [ + 0xe2, 0xde, 0x02, 0x00, # Preamble (magic, version, flags) + # Header: + 0x03, 0x42, 0x47, 0x04, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x01, 0x00, 0x00, 0x00, # Number of FDEs + 0x10, 0x00, 0x00, 0x00, # Number of FREs + 0x00, 0x10, 0x00, 0x00, # FRE length + 0x00, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x01, 0x00, 0x00, # FRE offset + 0xde, 0xad, 0xbe, 0xef, # AUX header + 0x01, 0x02, 0x03, 0x04, # Short FDE + ] +# CASE1-LABEL:SFrame section '.sframe_short' { +# CASE1: Header { +# CASE1-NEXT: Magic: 0xDEE2 +# CASE1-NEXT: Version: V2 (0x2) +# CASE1-NEXT: Flags [ (0x0) +# CASE1-NEXT: ] +# CASE1-NEXT: ABI: AMD64EndianLittle (0x3) +# CASE1-NEXT: CFA fixed FP offset (unused): 66 +# CASE1-NEXT: CFA fixed RA offset: 71 +# CASE1-NEXT: Auxiliary header length: 4 +# CASE1-NEXT: Num FDEs: 1 +# CASE1-NEXT: Num FREs: 16 +# CASE1-NEXT: FRE subsection length: 4096 +# CASE1-NEXT: FDE subsection offset: 0 +# CASE1-NEXT: FRE subsection offset: 256 +# CASE1-NEXT: Auxiliary header: [0xDE, 0xAD, 0xBE, 0xEF] +# CASE1-NEXT: } +# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x24 while reading [0x20, 0x34) +# CASE1-NEXT:} + + - Name: .sframe_section_relative + Type: SHT_GNU_SFRAME + Flags: [ SHF_ALLOC ] + ContentArray: [ + 0xe2, 0xde, 0x02, 0x00, # Preamble (magic, version, flags) + # Header: + 0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x01, 0x00, 0x00, 0x00, # Number of FDEs + 0x10, 0x00, 0x00, 0x00, # Number of FREs + 0x00, 0x10, 0x00, 0x00, # FRE length + 0x04, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x01, 0x00, 0x00, # FRE offset + + 0xff, 0xff, 0xff, 0xff, # Unused data skipped due to the FDE offset field + + # FDE: + 0x00, 0xde, 0xad, 0x00, # Start Address + 0xbe, 0x01, 0x00, 0x00, # Size + 0x10, 0x00, 0x00, 0x00, # Start FRE Offset + 0x00, 0x00, 0x00, 0x00, # Number of FREs + 0x31, 0xde, 0xad, 0x00, # Info, RepSize, Padding2 + ] +## Also testing: +## - dead space between the header and the FDE subsection. +## - PCMask FDE types +## - unused PAuth key handling +# CASE1-LABEL:SFrame section '.sframe_section_relative' { +# CASE1: Header { +# CASE1-NEXT: Magic: 0xDEE2 +# CASE1-NEXT: Version: V2 (0x2) +# CASE1-NEXT: Flags [ (0x0) +# CASE1-NEXT: ] +# CASE1-NEXT: ABI: AMD64EndianLittle (0x3) +# CASE1-NEXT: CFA fixed FP offset (unused): 66 +# CASE1-NEXT: CFA fixed RA offset: 71 +# CASE1-NEXT: Auxiliary header length: 0 +# CASE1-NEXT: Num FDEs: 1 +# CASE1-NEXT: Num FREs: 16 +# CASE1-NEXT: FRE subsection length: 4096 +# CASE1-NEXT: FDE subsection offset: 4 +# CASE1-NEXT: FRE subsection offset: 256 +# CASE1-NEXT: Auxiliary header: [] +# CASE1-NEXT: } +# CASE1-NEXT: Function Index [ +# CASE1-NEXT: FuncDescEntry [0] { +# CASE1-NEXT: PC: 0xADDE24 +# CASE1-NEXT: Size: 0x1BE +# CASE1-NEXT: Start FRE Offset: 0x10 +# CASE1-NEXT: Num FREs: 0 +# CASE1-NEXT: Info { +# CASE1-NEXT: FRE Type: Addr2 (0x1) +# CASE1-NEXT: FDE Type: PCMask (0x1) +# CASE1-NEXT: Raw: 0x31 +# CASE1-NEXT: } +# CASE1-NEXT: Repetitive block size: 0xDE +# CASE1-NEXT: Padding2: 0xAD +# CASE1-NEXT: } +# CASE1-NEXT: ] +# CASE1-NEXT:} + + - Name: .sframe_fde_relative + Type: SHT_GNU_SFRAME + Flags: [ SHF_ALLOC ] + ContentArray: [ + 0xe2, 0xde, 0x02, 0x04, # Preamble (magic, version, flags) + # Header: + 0x02, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x01, 0x00, 0x00, 0x00, # Number of FDEs + 0x10, 0x00, 0x00, 0x00, # Number of FREs + 0x00, 0x10, 0x00, 0x00, # FRE length + 0x04, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x01, 0x00, 0x00, # FRE offset + + 0xff, 0xff, 0xff, 0xff, # Unused data skipped due to the FDE offset field + + # FDE: + 0x00, 0xde, 0xad, 0x00, # Start Address + 0xbe, 0x01, 0x00, 0x00, # Size + 0x10, 0x00, 0x00, 0x00, # Start FRE Offset + 0x00, 0x00, 0x00, 0x00, # Number of FREs + 0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2 + ] +## Also testing: +## - PCInc FDE type +## - AArch64 PAuth key handling +# CASE1-LABEL:SFrame section '.sframe_fde_relative' { +# CASE1: Header { +# CASE1-NEXT: Magic: 0xDEE2 +# CASE1-NEXT: Version: V2 (0x2) +# CASE1-NEXT: Flags [ (0x4) +# CASE1-NEXT: FDEFuncStartPCRel (0x4){{ *}} +# CASE1-NEXT: ] +# CASE1-NEXT: ABI: AArch64EndianLittle (0x2) +# CASE1-NEXT: CFA fixed FP offset (unused): 66 +# CASE1-NEXT: CFA fixed RA offset (unused): 71 +# CASE1-NEXT: Auxiliary header length: 0 +# CASE1-NEXT: Num FDEs: 1 +# CASE1-NEXT: Num FREs: 16 +# CASE1-NEXT: FRE subsection length: 4096 +# CASE1-NEXT: FDE subsection offset: 4 +# CASE1-NEXT: FRE subsection offset: 256 +# CASE1-NEXT: Auxiliary header: [] +# CASE1-NEXT: } +# CASE1-NEXT: Function Index [ +# CASE1-NEXT: FuncDescEntry [0] { +# CASE1-NEXT: PC: 0xADDE78 +# CASE1-NEXT: Size: 0x1BE +# CASE1-NEXT: Start FRE Offset: 0x10 +# CASE1-NEXT: Num FREs: 0 +# CASE1-NEXT: Info { +# CASE1-NEXT: FRE Type: Addr4 (0x2) +# CASE1-NEXT: FDE Type: PCInc (0x0) +# CASE1-NEXT: PAuth Key: A (0x0) +# CASE1-NEXT: Raw: 0x2 +# CASE1-NEXT: } +# CASE1-NEXT: Repetitive block size (unused): 0xDE +# CASE1-NEXT: Padding2: 0xAD +# CASE1-NEXT: } +# CASE1-NEXT: ] +# CASE1-NEXT:} + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2MSB + Type: ET_EXEC +Sections: + - Name: .sframe + Type: SHT_GNU_SFRAME + Flags: [ SHF_ALLOC ] + ContentArray: [ + 0xde, 0xe2, 0x02, 0x05, # Preamble (magic, version, flags) + # Header: + 0x01, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x00, 0x00, 0x00, 0x01, # Number of FDEs + 0x00, 0x00, 0x00, 0x10, # Number of FREs + 0x00, 0x00, 0x10, 0x00, # FRE length + 0x00, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x00, 0x01, 0x00, # FRE offset + + # FDE: + 0x00, 0xde, 0xad, 0x00, # Start Address + 0x00, 0x00, 0x01, 0xbe, # Size + 0x00, 0x00, 0x00, 0x10, # Start FRE Offset + 0x00, 0x00, 0x00, 0x10, # Number of FREs + 0x02, 0xde, 0xad, 0x00, # Info, RepSize, Padding2 + ] +# CASE2-LABEL:SFrame section '.sframe' { +# CASE2: Header { +# CASE2-NEXT: Magic: 0xDEE2 +# CASE2-NEXT: Version: V2 (0x2) +# CASE2-NEXT: Flags [ (0x5) +# CASE2-NEXT: FDEFuncStartPCRel (0x4){{ *}} +# CASE2-NEXT: FDESorted (0x1){{ *}} +# CASE2-NEXT: ] +# CASE2-NEXT: ABI: AArch64EndianBig (0x1) +# CASE2-NEXT: CFA fixed FP offset (unused): 66 +# CASE2-NEXT: CFA fixed RA offset (unused): 71 +# CASE2-NEXT: Auxiliary header length: 0 +# CASE2-NEXT: Num FDEs: 1 +# CASE2-NEXT: Num FREs: 16 +# CASE2-NEXT: FRE subsection length: 4096 +# CASE2-NEXT: FDE subsection offset: 0 +# CASE2-NEXT: FRE subsection offset: 256 +# CASE2-NEXT: Auxiliary header: [] +# CASE2-NEXT: } +# CASE2-NEXT: Function Index [ +# CASE2-NEXT: FuncDescEntry [0] { +# CASE2-NEXT: PC: 0xDEAD1C +# CASE2-NEXT: Size: 0x1BE +# CASE2-NEXT: Start FRE Offset: 0x10 +# CASE2-NEXT: Num FREs: 16 +# CASE2-NEXT: Info { +# CASE2-NEXT: FRE Type: Addr4 (0x2) +# CASE2-NEXT: FDE Type: PCInc (0x0) +# CASE2-NEXT: PAuth Key: A (0x0) +# CASE2-NEXT: Raw: 0x2 +# CASE2-NEXT: } +# CASE2-NEXT: Repetitive block size (unused): 0xDE +# CASE2-NEXT: Padding2: 0xAD00 +# CASE2-NEXT: } +# CASE2-NEXT: ] +# CASE2-NEXT:} diff --git a/llvm/test/tools/llvm-readobj/ELF/sframe-header.test b/llvm/test/tools/llvm-readobj/ELF/sframe-header.test index f827296..e7c0db0 100644 --- a/llvm/test/tools/llvm-readobj/ELF/sframe-header.test +++ b/llvm/test/tools/llvm-readobj/ELF/sframe-header.test @@ -2,7 +2,8 @@ # RUN: yaml2obj --docnum=1 %s -o %t.1 # RUN: llvm-readobj --sframe=.sframe_bad_sh_size --sframe=.sframe_1b \ # RUN: --sframe=.sframe_bad_magic --sframe=.sframe_bad_version \ -# RUN: --sframe=.sframe_6b --sframe=.sframe_header %t.1 2>&1 | \ +# RUN: --sframe=.sframe_6b --sframe=.sframe_short_auxheader \ +# RUN: --sframe=.sframe_header %t.1 2>&1 | \ # RUN: FileCheck %s --strict-whitespace --match-full-lines \ # RUN: -DFILE=%t.1 --check-prefix=CASE1 @@ -60,24 +61,24 @@ Sections: 0xe2, 0xde, 0x02, 0x00, # Preamble (magic, version, flags) 0x01, 0x02 ] - # CASE1-LABEL:SFrame section '.sframe_6b' { # CASE1:{{.*}}: warning: '[[FILE]]': invalid sframe section: unexpected end of data at offset 0x6 while reading [0x0, 0x1c) - - Name: .sframe_header + - Name: .sframe_short_auxheader Type: SHT_GNU_SFRAME Flags: [ SHF_ALLOC ] ContentArray: [ 0xe2, 0xde, 0x02, 0x06, # Preamble (magic, version, flags) # Header: - 0x03, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x03, 0x42, 0x47, 0x08, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length 0x01, 0x00, 0x00, 0x00, # Number of FDEs 0x10, 0x00, 0x00, 0x00, # Number of FREs 0x00, 0x10, 0x00, 0x00, # FRE length - 0x04, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x00, 0x00, 0x00, # FDE offset 0x00, 0x01, 0x00, 0x00, # FRE offset + 0xde, 0xad, 0xbe, 0xef, # AUX header ] -# CASE1-LABEL:SFrame section '.sframe_header' { +# CASE1-LABEL:SFrame section '.sframe_short_auxheader' { # CASE1: Header { # CASE1-NEXT: Magic: 0xDEE2 # CASE1-NEXT: Version: V2 (0x2) @@ -88,13 +89,52 @@ Sections: # CASE1-NEXT: ABI: AMD64EndianLittle (0x3) # CASE1-NEXT: CFA fixed FP offset (unused): 66 # CASE1-NEXT: CFA fixed RA offset: 71 -# CASE1-NEXT: Auxiliary header length: 0 +# CASE1-NEXT: Auxiliary header length: 8 # CASE1-NEXT: Num FDEs: 1 # CASE1-NEXT: Num FREs: 16 # CASE1-NEXT: FRE subsection length: 4096 -# CASE1-NEXT: FDE subsection offset: 4 +# CASE1-NEXT: FDE subsection offset: 0 +# CASE1-NEXT: FRE subsection offset: 256 +# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x20 while reading [0x1c, 0x24) +# CASE1-NEXT: } +# CASE1-NEXT:{{.*}}: warning: '[[FILE]]': unexpected end of data at offset 0x20 while reading [0x24, 0x38) +# CASE1-NEXT:} + + - Name: .sframe_header + Type: SHT_GNU_SFRAME + Flags: [ SHF_ALLOC ] + ContentArray: [ + 0xe2, 0xde, 0x02, 0x06, # Preamble (magic, version, flags) + # Header: + 0x03, 0x42, 0x47, 0x04, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length + 0x00, 0x00, 0x00, 0x00, # Number of FDEs + 0x10, 0x00, 0x00, 0x00, # Number of FREs + 0x00, 0x10, 0x00, 0x00, # FRE length + 0x00, 0x00, 0x00, 0x00, # FDE offset + 0x00, 0x01, 0x00, 0x00, # FRE offset + 0xde, 0xad, 0xbe, 0xef, # AUX header + ] +# CASE1-LABEL:SFrame section '.sframe_header' { +# CASE1: Header { +# CASE1-NEXT: Magic: 0xDEE2 +# CASE1-NEXT: Version: V2 (0x2) +# CASE1-NEXT: Flags [ (0x6) +# CASE1-NEXT: FDEFuncStartPCRel (0x4){{ *}} +# CASE1-NEXT: FramePointer (0x2){{ *}} +# CASE1-NEXT: ] +# CASE1-NEXT: ABI: AMD64EndianLittle (0x3) +# CASE1-NEXT: CFA fixed FP offset (unused): 66 +# CASE1-NEXT: CFA fixed RA offset: 71 +# CASE1-NEXT: Auxiliary header length: 4 +# CASE1-NEXT: Num FDEs: 0 +# CASE1-NEXT: Num FREs: 16 +# CASE1-NEXT: FRE subsection length: 4096 +# CASE1-NEXT: FDE subsection offset: 0 # CASE1-NEXT: FRE subsection offset: 256 +# CASE1-NEXT: Auxiliary header: [0xDE, 0xAD, 0xBE, 0xEF] # CASE1-NEXT: } +# CASE1-NEXT: Function Index [ +# CASE1-NEXT: ] # CASE1-NEXT:} --- !ELF @@ -110,10 +150,10 @@ Sections: 0xde, 0xe2, 0x02, 0x01, # Preamble (magic, version, flags) # Header: 0x01, 0x42, 0x47, 0x00, # ABI, Fixed FP offset, Fixed RA Offset, AUX header length - 0x00, 0x00, 0x00, 0x01, # Number of FDEs + 0x00, 0x00, 0x00, 0x00, # Number of FDEs 0x00, 0x00, 0x00, 0x10, # Number of FREs 0x00, 0x00, 0x10, 0x00, # FRE length - 0x00, 0x00, 0x00, 0x04, # FDE offset + 0x00, 0x00, 0x00, 0x00, # FDE offset 0x00, 0x00, 0x01, 0x00, # FRE offset ] # CASE2-LABEL:SFrame section '.sframe' { @@ -127,12 +167,15 @@ Sections: # CASE2-NEXT: CFA fixed FP offset (unused): 66 # CASE2-NEXT: CFA fixed RA offset (unused): 71 # CASE2-NEXT: Auxiliary header length: 0 -# CASE2-NEXT: Num FDEs: 1 +# CASE2-NEXT: Num FDEs: 0 # CASE2-NEXT: Num FREs: 16 # CASE2-NEXT: FRE subsection length: 4096 -# CASE2-NEXT: FDE subsection offset: 4 +# CASE2-NEXT: FDE subsection offset: 0 # CASE2-NEXT: FRE subsection offset: 256 +# CASE2-NEXT: Auxiliary header: [] # CASE2-NEXT: } +# CASE2-NEXT: Function Index [ +# CASE2-NEXT: ] # CASE2-NEXT:} --- !ELF diff --git a/llvm/test/tools/llvm-readtapi/many-targets.test b/llvm/test/tools/llvm-readtapi/many-targets.test new file mode 100644 index 0000000..efb44b5 --- /dev/null +++ b/llvm/test/tools/llvm-readtapi/many-targets.test @@ -0,0 +1,20 @@ +; RUN: rm -rf %t +; RUN: split-file %s %t +; +; RUN: llvm-readtapi %t/many-targets.tbd +; +; Check that tbds containing symbols with many targets parse correctly (and in +; particular parse without leaks). + +;--- many-targets.tbd +--- !tapi-tbd +tbd-version: 4 +targets: [ x86_64-macos, x86_64-maccatalyst, arm64-macos, arm64-maccatalyst, + arm64e-macos, arm64e-maccatalyst, arm64-ios, arm64e-ios ] +install-name: '/usr/lib/foo.dylib' +current-version: 1 +exports: + - targets: [ x86_64-macos, x86_64-maccatalyst, arm64-macos, arm64-maccatalyst, + arm64e-macos, arm64e-maccatalyst, arm64-ios, arm64e-ios ] + symbols: [ 'foo' ] +... |