1# This test uses the local debuginfod cache to test the symbolizer integration 2# with the debuginfod client. 3RUN: rm -rf %t 4RUN: mkdir %t 5 6# Produce a stripped copy of the input binary addr.exe 7RUN: llvm-objcopy --strip-debug %p/Inputs/addr.exe %t/addr.exe 8 9# Symbolizing the stripped binary should fail. 10RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer --print-address \ 11RUN: --obj=%t/addr.exe 0x40054d | FileCheck %s --check-prefix=NOTFOUND 12NOTFOUND: 0x40054d 13NOTFOUND-NEXT: main 14NOTFOUND-NEXT: ??:0:0 15 16# Use llvm-objcopy to write the debuginfo of the addr.exe binary to an 17# appropriately-named file in the llvm debuginfod cache. The filename is 18# determined by the debuginfod client's caching scheme, so it is manually 19# specified here as llvmcache-\d+ 20RUN: llvm-objcopy --keep-section=.debug_info %p/Inputs/addr.exe \ 21RUN: %t/llvmcache-1165050469834211050 22 23# The symbolizer should call the debuginfod client library, which finds the 24# debuginfo placed in the cache, enabling symbolization of the address. 25RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 26RUN: --obj=%t/addr.exe 0x40054d --debuginfod | \ 27RUN: FileCheck %s --check-prefix=FOUND 28FOUND: {{[/\]+}}tmp{{[/\]+}}x.c:14:0 29 30# This should also work if the build ID is provided via flag. 31RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 32RUN: --build-id=127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d | \ 33RUN: FileCheck %s --check-prefix=FOUND 34 35# This should also work if the build ID is provided via stdin. 36RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 37RUN: "BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" | \ 38RUN: FileCheck %s --check-prefix=FOUND 39 40# Passing BUILDID twice is a syntax error. 41RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 42RUN: "BUILDID:BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" 2>&1 | \ 43RUN: FileCheck %s --check-prefix=BUILDIDBUILDID 44BUILDIDBUILDID: error: 'BUILDID:BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d': duplicate input file specification prefix 45 46# CODE should work preceding build ID. 47RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 48RUN: "CODE BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" | \ 49RUN: FileCheck %s --check-prefix=FOUND 50 51# The symbolizer shouldn't call the debuginfod library by default with no URLs. 52RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer --print-address \ 53RUN: --obj=%t/addr.exe 0x40054d | FileCheck %s --check-prefix=NOTFOUND 54 55# The symbolizer shouldn't call the debuginfod library if explicitly disabled. 56RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 57RUN: --no-debuginfod \ 58RUN: "BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" | \ 59RUN: FileCheck %s --check-prefix=NOTHINGFOUND 60NOTHINGFOUND: ?? 61NOTHINGFOUND-NEXT: ??:0:0 62 63# BUILDID shouldn't be parsed if --obj is given, just like regular filenames. 64RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 65RUN: --obj=%t/addr.exe \ 66RUN: "BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" 2>&1 | \ 67RUN: FileCheck %s --check-prefix=BUILDIDIGNORED 68BUILDIDIGNORED: error: 'BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d': input file has already been specified 69 70# Providing both BUILDID and FILE is a syntax error. 71RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 72RUN: "BUILDID:FILE:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" 2>&1 | \ 73RUN: FileCheck %s --check-prefix=BUILDIDFILE 74BUILDIDFILE: error: 'BUILDID:FILE:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d': duplicate input file specification prefix 75RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \ 76RUN: "FILE:BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d" 2>&1 | \ 77RUN: FileCheck %s --check-prefix=FILEBUILDID 78FILEBUILDID: error: 'FILE:BUILDID:127da749021c1fc1a58cba734a1f542cbe2b7ce4 0x40054d': duplicate input file specification prefix 79