xref: /llvm-project/llvm/test/tools/llvm-symbolizer/debuginfod.test (revision 1792852f86dc75efa1f44d46b1a0daf386d64afa)
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