1 2021-04-15 Frank Ch. Eigler <fche@redhat.com>
3 * debuginfod.cxx (groom): Only update database stats once.
5 2021-04-15 Frank Ch. Eigler <fche@redhat.com>
7 * debuginfod.cxx (elf_classify): Recognize symtab-only stripped files
8 like fedora's libicudata as debuginfo files.
10 2021-03-30 Frank Ch. Eigler <fche@redhat.com>
12 * debuginfod.cxx (main): Set child thread names.
14 2021-03-07 Timm Bäder <tbaeder@redhat.com>
16 * debuginfod-client.c (debuginfod_query_server): Tweak
17 double/long clamping arithmetic to avoid UB and warnings.
19 2021-02-25 Frank Ch. Eigler <fche@redhat.com>
21 * debuginfod.cxx (handler_cb): Filter webapi for bad
22 artifacttype keywords early for metric hygiene.
24 2021-02-14 Frank Ch. Eigler <fche@redhat.com>
26 * debuginfod.cxx (main -U): Use bsdtar unconditionally. Also map
27 the debian-compatible .ipk (openembedded distro family) to same.
29 2021-02-04 Frank Ch. Eigler <fche@redhat.com>
31 PR27092 low-memory handling
32 * debuginfod.cxx (fdcache_mintmp): New parameter, with cmd-line option.
33 (parse_opt): Parse it.
35 (statfs_free_enough_p): New function.
36 (libarchive_fdcache::*): Call it to trigger emergency fdcache flush.
37 (thread_main_scanner): Call it to report filesystem fullness metrics.
39 (set/add_metric): Take double rather than int64_t values.
40 (archive_exception): Propagate suberror to metric label.
41 (main): Detect pthread creation fatal errors properly.
43 2021-02-02 Frank Ch. Eigler <fche@redhat.com>
46 * debuginfod.cxx (dbq): New read-only database connection for queries
48 (signal_handler): Interrupt it.
49 (main): Open / close it.
50 (handle_buildid): Use it for webapi queries only.
51 (database_stats_report): Make more interruptible. Report sqlite3
52 operation times to the prometheus metrics.
53 (groom): Make more interruptible.
54 (thread_main_fts_source_paths, thread_main_groom): Ensure
55 state/progress metrics are fresh even in case of exceptions.
57 2020-12-20 Dmitry V. Levin <ldv@altlinux.org>
59 * .gitignore: New file.
61 2020-12-12 Dmitry V. Levin <ldv@altlinux.org>
63 * debuginfod-client.c (debuginfod_query_server): Fix spelling typos in
65 * debuginfod.cxx: Likewise.
66 (parse_opt): Fix spelling typos in error diagnostics.
68 2020-12-08 Dmitry V. Levin <ldv@altlinux.org>
70 * Makefile.am [LIBDEBUGINFOD]: Create libdebuginfod.so.1 first, turn
71 libdebuginfod.so into symlink.
73 2020-11-30 Dmitry V. Levin <ldv@altlinux.org>
75 * Makefile.am (libdebuginfod.so): Replace $@.$(VERSION) with
76 $(LIBDEBUGINFOD_SONAME).
77 (install, uninstall, MOSTLYCLEANFILES): Replace
78 libdebuginfod.so.$(VERSION) with $(LIBDEBUGINFOD_SONAME).
80 * debuginfod.h: Rename to ...
81 * debuginfod.h.in ... this.
82 (DEBUGINFOD_SONAME): New macro.
84 2020-11-30 Dmitry V. Levin <ldv@altlinux.org>
86 * Makefile.am (libdebuginfod.so$(EXEEXT)): Drop $(EXEEXT) suffix.
88 2020-11-25 Frank Ch. Eigler <fche@redhat.com>
90 * debuginfod.cxx (step_ok_done): Correct typo in prom metric label.
92 2020-11-25 Frank Ch. Eigler <fche@redhat.com>
94 * debuginfod.cxx (tmp_ms_metric): Switch from gettimeofday to
95 clock_gettime(CLOCK_MONOTONIC) for time-interval measurements.
96 (handler_cb, scan_source_paths, groom): Ditto.
98 2020-11-23 Frank Ch. Eigler <fche@redhat.com>
100 * debuginfod.cxx (tmp_ms_metric): New class for RAII timing metrics.
101 (sqlite_ps::reset, step*): Call it to track sqlite3 performance.
102 (sqlite_exception ctor): Increment sqlite3 error_count.
104 2020-11-23 Mark Wielaard <mark@klomp.org>
106 * debuginfod-client.c (debuginfod_query_server): Initialize
107 struct handle_data errbuf to the empty string.
109 2020-11-11 Mark Wielaard <mark@klomp.org>
111 * debuginfod-client.c (debuginfod_set_verbose_fd): New function.
112 (struct debuginfod_client): Add verbose_fd.
113 (struct handle_data): Add errbuf.
114 (debuginfod_query_server): Produce verbose output when
115 debuginfod_client verbose_fd is set. Only clear old data and set
116 default_headers when any work is done. Always goto out when setting
117 rc to an error value. Use CURLOPT_ERRORBUFFER to get more error
118 output when verbose output is requested.
119 * debuginfod.h (DEBUGINFOD_VERBOSE_ENV_VAR): New.
120 (debuginfod_set_verbose_fd): Added.
121 * debuginfod-find.c (parse_opt): Set debuginfod_set_verbose_fd on -v.
122 * bdebuginfod.map (ELFUTILS_0.183): New section, add
123 debuginfod_set_verbose_fd.
125 2020-11-21 Mark Wielaard <mark@klomp.org>
127 * debuginfod.cxx (handle_root): New function.
128 (handler_cb): Handle "/" and report url1 in webapi error.
130 2020-11-11 Mark Wielaard <mark@klomp.org>
132 * debuginfod-find.c (progressfn): Use clock_gettime to print Progress
133 at most 5 times a second.
135 2020-11-19 Frank Ch. Eigler <fche@redhat.com>
137 * debuginfod.cxx (tmp_inc_metric): New class.
138 (handler_cb): Use it to track webapi operations.
140 2020-11-01 Érico N. Rolim <erico.erc@gmail.com>
142 * debuginfod-client.c (debuginfod_init_cache): Use ACCESSPERMS for
143 mkdir, DEFFILEMODE for open with O_CREAT.
145 2020-11-01 Érico N. Rolim <erico.erc@gmail.com>
147 * debuginfod.cxx: include libintl.h.
149 2020-11-01 Érico N. Rolim <erico.erc@gmail.com>
151 * Makefile.am (debuginfod_LDADD): Add argp_LDADD and fts_LIBS.
152 (debuginfod_find_LDADD): Likewise.
153 (libdebuginfod_so_LDLIBS): Add fts_LIBS.
155 2020-10-31 Frank Ch. Eigler <fche@redhat.com>
157 * debuginfod.cxx (scan_source_file, scan_archive_file): Add new scanned_bytes_total,
158 scanned_files_total metrics.
159 (archive_classify): Exit early if interrupted.
160 (scan_source_paths): Perform realpath/regex checks only on FTS_F files.
163 2020-10-30 Frank Ch. Eigler <fche@redhat.com>
166 * debuginfod.cxx (thread_main_scanner): Ensure control doesn't
167 leave infinite loop until program exit, even if SIGUSR2.
168 (scan_source_paths): Have traverser clean scanq on
169 SIGUSR2. Emit additional traversed_total metrics.
170 (groom): Emit additional groomed_total metrics.
171 (thread_main_groom): Restore previous thread_work_total
174 2020-10-29 Frank Ch. Eigler <fche@redhat.com>
177 * debuginfod.cxx (forced_*_count): Make these global.
178 (runq::clear): New function.
179 (thread_main_scanner): Check for pending SIGUSR2; interrupt.
180 (scan_source_paths): Check for pending SIGUSR2; interrupt.
181 (groom): Report prometheus stats before groom also. Check for
182 pending SIGUSR1; interrupt. Increment thread_work_total for
183 each file scanned, not the entire cycle.
185 2020-10-29 Frank Ch. Eigler <fche@redhat.com>
188 * debuginfod.cxx (handle_buildid_*_match): Throw exceptions for
189 more lower level libc errors.
190 (handle_buildid_match): Catch & report exceptions but return 0
191 for continued iteration in the caller.
193 2020-10-25 Mark Wielaard <mark@klomp.org>
195 * debuginfod-client.c (debuginfod_query_server): Translate
196 CURLE_PEER_FAILED_VERIFICATION to ECONNREFUSED.
198 2020-10-20 Frank Ch. Eigler <fche@redhat.com>
200 PR26756: more prometheus metrics
201 * debuginfod.cxx (*_exception): Add counters for error occurrences.
202 (fdcache::*): Add counters for fdcache operations and status.
203 (fdcache::set_metric): New fn for overall stat counts.
204 (fdcache::limit): ... allow metric-less use from dtors.
206 2020-10-20 Frank Ch. Eigler <fche@redhat.com>
208 * debuginfod.cxx (handle_buildid*): Add a parameter for detecting
209 internally-originated lookups for dwz resolution.
211 2020-09-18 Frank Ch. Eigler <fche@redhat.com>
213 * debuginfod.cxx (scan_source_file, archive_classify): Store only
214 canonicalized file names in sdef & sref records in the database.
216 2020-09-08 Mark Wielaard <mark@klomp.org>
218 * Makefile.am (BUILD_STATIC): Include libcurl_LIBS in libdebuginfod
219 when NOT DUMMY_LIBDEBUGINFOD.
221 2020-09-16 Mark Wielaard <mark@klomp.org>
223 * debuginfod-find.c: Fix license block comment.
225 2020-09-15 Mark Wielaard <mark@klomp.org>
227 * debuginfod-find.c (main): Use dwelf_elf_begin.
229 2020-07-03 Alice Zhang <alizhang@redhat.com>
231 * debuginfod-client.c (debuginfod_query_server): Use strncasecmp
232 to compare effective_url. Try CURLINFO_SCHEME as fallback.
234 2020-06-19 Mark Wielaard <mark@klomp.org>
236 * Makefile.am (bin_PROGRAMS): Guard with DEBUGINFOD and
238 (debuginfod_LDADD): Remove libcurl.
239 (libdebuginfod): When static and DUMMY_LIBDEBUGINFO remove libcurl.
240 (noinst_LIBRARIES): Guard with LIBDEBUGINFOD.
241 (AM_CPPFLAGS): Add -Wno-unused-parameter when DUMMY_LIBDEBUGINFOD.
242 (pkginclude_headers): Guard with LIBDEBUGINFOD
243 (libdebuginfod_so_LIBS): Likewise.
244 (+libdebuginfod_so_LDLIBS): Likewise.
246 (uninstall): Likewise.
247 * debuginfod-client.c: Include dummy functions when
249 * debuginfod.cxx: Remove curl.h include.
251 2020-06-16 Mark Wielaard <mark@klomp.org>
253 * debuginfod-client.c (debuginfod_query_server): Check malloc.
254 Move curl_multi_init call before handle_data malloc call.
256 2020-06-16 Mark Wielaard <mark@klomp.org>
258 * debuginfod-client.c (debuginfod_query_server): Replace sizeof
259 build_id_bytes check with strlen build_id check.
261 2020-06-16 Mark Wielaard <mark@klomp.org>
263 * debuginfod-client.c (debuginfod_query_server): Increase suffix
264 array and prepare having to escape 1 character with 2.
266 2020-06-16 Mark Wielaard <mark@klomp.org>
268 * debuginfod-client.c (debuginfod_clean_cache): Handle failing
269 fopen (interval_path).
271 2020-03-29 Mark Wielaard <mark@klomp.org>
273 * debuginfod-client.c (debuginfod_add_http_header): Check header
274 contains precisely one colon that isn't the first or last char.
276 2020-03-29 Frank Ch. Eigler <fche@redhat.com>
278 * debuginfod-client.c (struct debuginfod_client): Add a flag field
279 for progressfn printing.
280 (default_progressfn): Set it if printing \rsomething.
281 (debuginfod_end): Terminate with \n if flag set, i.e., only if the
282 default_progressfn was actually called.
284 2020-03-27 Mark Wielaard <mark@klomp.org>
286 * debuginfod.cxx (parse_opt): Check port is not zero.
288 2020-03-28 Frank Ch. Eigler <fche@redhat.com>
290 * debuginfod.cxx (handle_buildid_r_match): During archive
291 extraction / fdcache prefetching, set the mtime of each
294 2020-03-27 Frank Ch. Eigler <fche@redhat.com>
296 * debuginfod-find.c (main): Extract buildid from /binary/ if
297 given instead of hex string.
298 * Makefile.am: Add elfutils library prereqs for debuginfod-find.
300 2020-03-24 Frank Ch. Eigler <fche@redhat.com>
302 * debuginfod.h, libdebuginfod.map: New functions for _add_url_header.
303 * debuginfod-client.c (struct debuginfod_client): Add headers fields.
304 (debuginfod_add_http_header): New client api to add outgoing headers.
305 (add_default_headers): Renamed from add_extra_headers, skip if flag.
306 (debuginfod_query_server): Pass accumulated headers to libcurl.
307 (debuginfod_end): Clean accumulated headers.
308 (debuginfod_find_*): Add default headers at this point.
309 * debuginfod.cxx (handle_buildid): Add conn pointer. Use it to relay
310 incoming UA and XFF headers to federated upstream debuginfods.
312 2020-03-26 Frank Ch. Eigler <fche@redhat.com>
314 * debuginfod.cxx (handler_cb): Export two families of metrics for
315 prometheus traffic analysis: response times and data amounts.
317 2020-03-26 Frank Ch. Eigler <fche@redhat.com>
319 * debuginfod.cxx (parse_opt): For -U, prefer dpkg-deb
320 after all if access(3)-able, fallback to bsdtar.
322 2020-03-25 Frank Ch. Eigler <fche@redhat.com>
324 * debuginfod.cxx (parse_opt): Associate a bsdtar subshell with
325 the .deb & .ddeb extensions, instead of dpkg-deb.
327 2020-03-26 Frank Ch. Eigler <fche@redhat.com>
329 * debuginfod-client.c (debuginfod_query_server): Don't
330 set CURLOPT_PATH_AS_IS on old curl. Mostly harmless.
332 2020-03-24 Frank Ch. Eigler <fche@redhat.com>
334 * debuginfod-client.c (debuginfod_query_server): Set
335 CURLOPT_PATH_AS_IS, to propagate file names verbatim.
336 * debuginfod.cxx (canon_pathname): Implement RFC3986
337 style pathname canonicalization.
338 (handle_buildid): Canonicalize incoming webapi source
339 paths, accept either one.
340 (scan_source_file, archive_classify): Store both
341 original and canonicalized dwarf-source file names.
343 2020-03-24 Frank Ch. Eigler <fche@redhat.com>
345 * debuginfod.cxx (handle_buildid): In case of federated fallback
346 queries, handle errors analogously to local ENOENT/404.
347 (handle_metrics): Return a size-of-response value.
348 (handler_cb): Add code to time entire application-side processing
349 stage + response sizes + http codes, so as to emit a complete
350 httpd-flavoured log line for each webapi request.
352 2020-03-24 Frank Ch. Eigler <fche@redhat.com>
354 * debuginfod-client.c (debuginfod_query_server): Print the
355 default_progressfn terminating \n message only if that progressfn
358 2020-03-24 Frank Ch. Eigler <fche@redhat.com>
360 * debuginfod-find.c (main): Correct /source full-pathness check for
361 "debuginfod-find -v source deadbeef /pathname" case.
363 2020-03-22 Frank Ch. Eigler <fche@redhat.com>
365 * debuginfod-client.c (struct debuginfod_client): Add url field.
366 (struct handle_data): Add client field as backpointer.
367 (debuginfod_write_callback): Compute & save URL.
368 (default_progressfn): Print front pieces of the URL.
369 (debuginfod_query_server): Clear URL and cleanup after progressfn.
370 * debuginfod-find.c (main): Print URL at transfer conclusion.
372 2020-03-22 Frank Ch. Eigler <fche@redhat.com>
374 * debuginfod.h, libdebuginfod.map: New functions for _get/set_user().
375 * debuginfod-client.c: Implement them.
376 * debuginfod-find.c: Include a token call just for testing them.
378 2020-03-03 Aaron Merey <amerey@redhat.com>
380 * debuginfod-client.c (debuginfod_query_server): Update
381 cache_path even when new default path already exists.
383 2020-02-27 Aaron Merey <amerey@redhat.com>
385 * debuginfod-client.c (xalloc_str): New macro. Call
386 asprintf with error checking.
387 (debuginfod_query_server): Use XDG_CACHE_HOME as a default
388 cache location if it is set. Replace snprintf with xalloc_str.
390 2020-02-26 Konrad Kleine <kkleine@redhat.com>
392 * debuginfod-client.c (debuginfod_query_server): Handle curl's
393 response code correctly when DEBUGINFOD_URLS begin with file://
395 2020-02-25 Frank Ch. Eigler <fche@redhat.com>
397 * debuginfod.cxx (parse_opt): Treat -R as if -Z.rpm .
399 2020-02-25 Frank Ch. Eigler <fche@redhat.com>
401 * debuginfod.cxx (fdcache_prefetch): New parameter.
402 (parse_opt): Parse it.
404 (fdcache::fd_size_mb): Change to double for accuracy.
405 (fdcache::probe): New function.
406 (fdcache::intern): New option to intern at end of LRU.
407 (fdcache::lookup): Clean fdcache.
408 (handle_buildid_r_match): Implement multi-stage archive
409 parsing, with optional prefetching of extracted contents
412 2020-02-19 Aaron Merey <amerey@redhat.com>
414 * debuginfod-client.c (debuginfod_clean_cache): Restrict
415 cleanup to client-pattern files.
417 2020-02-05 Frank Ch. Eigler <fche@redhat.com>
419 * debuginfod.cxx (argp options): Add -Z option.
420 (canonicalized_archive_entry_pathname): New function for
421 distro-agnostic file name matching/storage.
423 2020-01-22 Frank Ch. Eigler <fche@redhat.com>
425 * debuginfod.cxx (dwarf_extract_source_paths): Don't print
426 "skipping hat" messages at verbosity <=3, too noisy.
428 2020-01-19 Frank Ch. Eigler <fche@redhat.com>
430 * debuginfod.cxx (scanq): Rework to let groomer/fts threads
431 synchronize with an empty workqueue, and lock out workqueue
433 (thread_groom): Adopt new scanq idle APIs to lock out scanners.
434 (thread_main_fts_source_paths): Adopt new scanq idler API to
435 avoid being restarted while scanners haven't even finished yet.
436 (thread_main_*): Increment thread_work_total metric only after
437 a work cycle is completed, not when it begins.
439 2020-01-18 Frank Ch. Eigler <fche@redhat.com>
441 * debuginfod.cxx (thread_main_scanner): Handle empty source_paths[].
443 2020-01-11 Frank Ch. Eigler <fche@redhat.com>
445 * debuginfod.cxx (libarchive_fdcache): New class/facility to own a
446 cache of temporary files that were previously extracted from an
447 archive. If only it could store just unlinked fd's instead of
449 (handle_buildid_r_match): Use it to answer dwz/altdebug and webapi
452 (main): Initialize the cache control parameters from heuristics.
453 Use a consistent tmpdir for these and tmp files elsewhere.
455 2020-01-11 Frank Ch. Eigler <fche@redhat.com>
457 * debuginfod.cxx (conninfo): Print User-Agent and X-Forwarded-For
458 request headers, after mild safety-censorship (for easier machine
461 2020-01-11 Frank Ch. Eigler <fche@redhat.com>
463 * debuginfod.cxx: Rework threading model.
464 (workq): New class for concurrent work-queue.
465 (semaphore): Removed class, now unused.
466 (scan_source_file_path): Rework into ...
467 (scan_source_file): New function.
468 (thread_main_scan_source_file_path): Nuke.
469 (scan_source_archive_path): Rework into ...
470 (scan_archive_file): New function.
471 (thread_main_scanner): New function for scanner threads.
472 (thread_main_fts_source_paths): New function for traversal thread.
473 (scan_source_paths): ... doing this.
474 (thread_groom): Tweak metrics for consistency.
475 (main): Start 1 traversal and N scanner threads if needed.
477 2019-01-02 Mark Wielaard <mark@klomp.org>
479 * debuginfod.cxx (default_connect_timeout): Removed.
480 (default_transfer_timeout): Removed.
481 (default_timeout): New. Default to 90 seconds.
482 (debuginfod_query_server): Parse server_timeout_envvar as one number.
483 Set as CURLOPT_LOW_SPEED_TIME, with CURL_OPT_LOW_SPEED_LIMITE as 100K.
485 2020-01-09 Frank Ch. Eigler <fche@redhat.com>
487 * debuginfod-client.c (add_extra_headers): New function,
488 based on mjw's draft.
489 (debuginfod_query_server): Call it.
491 2019-12-22 Frank Ch. Eigler <fche@redhat.com>
493 * debuginfod.cxx (*_rpm_*): Rename to *_archive_* throughout.
494 (scan_archives): New read-mostly global to identify archive
495 file extensions and corresponding extractor commands.
496 (parse_opt): Handle new -U flag.
498 2019-12-19 Frank Ch. Eigler <fche@redhat.com>
500 * debuginfod-client.c (default_progressfn): New function.
501 (debuginfod_begin): Use it if $DEBUGINFOD_PROGRESS set.
502 (server_timeout): Bump to 30 seconds.
503 (debuginfod_query_server): Call progressfn -after- rather than
504 before curl ops, to make it likely that a successful transfer
505 results in final a=b call. Tweak cleanup sequence.
506 * debuginfod.h: Document $DEBUGINFOD_PROGRESS name.
508 2019-12-09 Mark Wielaard <mark@klomp.org>
510 * debuginfod-client.c (debuginfod_query_server): Check
511 server_urls_envvar early.
513 2019-12-03 Mark Wielaard <mark@klomp.org>
515 * debuginfod-client.c (debuginfod_query_server): Use separate
516 local variables for CURLcode curl_res and CURLMcode curlm_res.
518 2019-11-26 Mark Wielaard <mark@klomp.org>
520 * Makefile.am (BUILD_STATIC): Add needed libraries for libdw and
523 2019-11-25 Frank Ch. Eigler <fche@redhat.com>
525 * debuginfod.cxx (groom): Add a sqlite3_db_release_memory()
526 at the end of periodic grooming to try to shrink the process.
528 2019-11-24 Mark Wielaard <mark@klomp.org>
530 * debuginfod.cxx (test_webapi_sleep): Removed.
531 (handler_cb): Don't check test_webapi_sleep and sleep.
532 (main): Don't set test_webapi_sleep.
534 2019-11-24 Mark Wielaard <mark@klomp.org>
536 * debuginfod.cxx (add_metric): New function.
537 (scan_source_file_path): Record metrics for
538 found_executable_total, found_debuginfo_total and
539 found_sourcerefs_total.
540 (scan_source_rpm_path): Likewise.
542 2019-11-07 Frank Ch. Eigler <fche@redhat.com>
544 * debuginfod.cxx: Add /metrics endpoint. Add numerous
545 calls to new functions inc_metric/set_metric to populate
546 threadsafe map containing stats. Add http content-type
547 response headers throughout.
548 (thread_main_*): Simplify counter/timer flow.
549 (main): Reorder web service shutdown to leave http running
551 * debuginfod.8: Document it, add security caution.
553 2019-11-06 Frank Ch. Eigler <fche@redhat.com>
555 * debuginfod.cxx: Add new -L (symlink-following) mode.
556 * debuginfod.8: Document it.
558 2019-11-04 Frank Ch. Eigler <fche@redhat.com>
560 * debuginfo-client.c (debuginfod_set_progressfn): New function
561 for progress/interrupt callback.
562 (debuginfod_clean_cache, debuginfod_query_server): Call it.
563 * debuginfo.h: Declare it.
564 * debuginfod_set_progressfn.3, *_find_debuginfo.3: Document it.
565 * Makefile.am: Install it.
566 * libdebuginfod.map: Export it all under ELFUTILS_0.178 symversion.
568 * debuginfod-find.c: Add -v option to activate progress cb.
569 * debuginfod-find.1: Document it.
570 * debuginfod.cxx: Add $DEBUGINFOD_TEST_WEBAPI_SLEEP env var
571 to insert sleep in webapi callbacks, to help manual testing.
573 2019-10-28 Frank Ch. Eigler <fche@redhat.com>
575 * debuginfod.cxx: New file: debuginfod server.
576 * debuginfod.8: New file: man page.
577 * Makefile.am: Build it.
579 2019-10-28 Aaron Merey <amerey@redhat.com>
581 * debuginfod-client.c: New file: debuginfod client library.
582 * debuginfod.h: New file: header for same.
583 * libdebuginfod.map: New file: govern its solib exports.
584 * debuginfod-find.c: New file: command line frontend.
585 * debuginfod-find.1, debuginfod_find_source.3,
586 debuginfod_find_executable.3, debuginfod_find_debuginfo.3: