12021-02-04 Frank Ch. Eigler <fche@redhat.com> 2 3 PR27092 low-memory handling 4 * debuginfod.cxx (fdcache_mintmp): New parameter, with cmd-line option. 5 (parse_opt): Parse it. 6 (main): Default it. 7 (statfs_free_enough_p): New function. 8 (libarchive_fdcache::*): Call it to trigger emergency fdcache flush. 9 (thread_main_scanner): Call it to report filesystem fullness metrics. 10 (groom): Ditto. 11 (set/add_metric): Take double rather than int64_t values. 12 (archive_exception): Propagate suberror to metric label. 13 (main): Detect pthread creation fatal errors properly. 14 152021-02-02 Frank Ch. Eigler <fche@redhat.com> 16 17 PR27323 18 * debuginfod.cxx (dbq): New read-only database connection for queries 19 only. 20 (signal_handler): Interrupt it. 21 (main): Open / close it. 22 (handle_buildid): Use it for webapi queries only. 23 (database_stats_report): Make more interruptible. Report sqlite3 24 operation times to the prometheus metrics. 25 (groom): Make more interruptible. 26 (thread_main_fts_source_paths, thread_main_groom): Ensure 27 state/progress metrics are fresh even in case of exceptions. 28 292020-12-20 Dmitry V. Levin <ldv@altlinux.org> 30 31 * .gitignore: New file. 32 332020-12-12 Dmitry V. Levin <ldv@altlinux.org> 34 35 * debuginfod-client.c (debuginfod_query_server): Fix spelling typos in 36 comments. 37 * debuginfod.cxx: Likewise. 38 (parse_opt): Fix spelling typos in error diagnostics. 39 402020-12-08 Dmitry V. Levin <ldv@altlinux.org> 41 42 * Makefile.am [LIBDEBUGINFOD]: Create libdebuginfod.so.1 first, turn 43 libdebuginfod.so into symlink. 44 452020-11-30 Dmitry V. Levin <ldv@altlinux.org> 46 47 * Makefile.am (libdebuginfod.so): Replace $@.$(VERSION) with 48 $(LIBDEBUGINFOD_SONAME). 49 (install, uninstall, MOSTLYCLEANFILES): Replace 50 libdebuginfod.so.$(VERSION) with $(LIBDEBUGINFOD_SONAME). 51 (VERSION): Remove. 52 * debuginfod.h: Rename to ... 53 * debuginfod.h.in ... this. 54 (DEBUGINFOD_SONAME): New macro. 55 562020-11-30 Dmitry V. Levin <ldv@altlinux.org> 57 58 * Makefile.am (libdebuginfod.so$(EXEEXT)): Drop $(EXEEXT) suffix. 59 602020-11-25 Frank Ch. Eigler <fche@redhat.com> 61 62 * debuginfod.cxx (step_ok_done): Correct typo in prom metric label. 63 642020-11-25 Frank Ch. Eigler <fche@redhat.com> 65 66 * debuginfod.cxx (tmp_ms_metric): Switch from gettimeofday to 67 clock_gettime(CLOCK_MONOTONIC) for time-interval measurements. 68 (handler_cb, scan_source_paths, groom): Ditto. 69 702020-11-23 Frank Ch. Eigler <fche@redhat.com> 71 72 * debuginfod.cxx (tmp_ms_metric): New class for RAII timing metrics. 73 (sqlite_ps::reset, step*): Call it to track sqlite3 performance. 74 (sqlite_exception ctor): Increment sqlite3 error_count. 75 762020-11-23 Mark Wielaard <mark@klomp.org> 77 78 * debuginfod-client.c (debuginfod_query_server): Initialize 79 struct handle_data errbuf to the empty string. 80 812020-11-11 Mark Wielaard <mark@klomp.org> 82 83 * debuginfod-client.c (debuginfod_set_verbose_fd): New function. 84 (struct debuginfod_client): Add verbose_fd. 85 (struct handle_data): Add errbuf. 86 (debuginfod_query_server): Produce verbose output when 87 debuginfod_client verbose_fd is set. Only clear old data and set 88 default_headers when any work is done. Always goto out when setting 89 rc to an error value. Use CURLOPT_ERRORBUFFER to get more error 90 output when verbose output is requested. 91 * debuginfod.h (DEBUGINFOD_VERBOSE_ENV_VAR): New. 92 (debuginfod_set_verbose_fd): Added. 93 * debuginfod-find.c (parse_opt): Set debuginfod_set_verbose_fd on -v. 94 * bdebuginfod.map (ELFUTILS_0.183): New section, add 95 debuginfod_set_verbose_fd. 96 972020-11-21 Mark Wielaard <mark@klomp.org> 98 99 * debuginfod.cxx (handle_root): New function. 100 (handler_cb): Handle "/" and report url1 in webapi error. 101 1022020-11-11 Mark Wielaard <mark@klomp.org> 103 104 * debuginfod-find.c (progressfn): Use clock_gettime to print Progress 105 at most 5 times a second. 106 1072020-11-19 Frank Ch. Eigler <fche@redhat.com> 108 109 * debuginfod.cxx (tmp_inc_metric): New class. 110 (handler_cb): Use it to track webapi operations. 111 1122020-11-01 Érico N. Rolim <erico.erc@gmail.com> 113 114 * debuginfod-client.c (debuginfod_init_cache): Use ACCESSPERMS for 115 mkdir, DEFFILEMODE for open with O_CREAT. 116 1172020-11-01 Érico N. Rolim <erico.erc@gmail.com> 118 119 * debuginfod.cxx: include libintl.h. 120 1212020-11-01 Érico N. Rolim <erico.erc@gmail.com> 122 123 * Makefile.am (debuginfod_LDADD): Add argp_LDADD and fts_LIBS. 124 (debuginfod_find_LDADD): Likewise. 125 (libdebuginfod_so_LDLIBS): Add fts_LIBS. 126 1272020-10-31 Frank Ch. Eigler <fche@redhat.com> 128 129 * debuginfod.cxx (scan_source_file, scan_archive_file): Add new scanned_bytes_total, 130 scanned_files_total metrics. 131 (archive_classify): Exit early if interrupted. 132 (scan_source_paths): Perform realpath/regex checks only on FTS_F files. 133 Tweak metrics. 134 1352020-10-30 Frank Ch. Eigler <fche@redhat.com> 136 137 PR26775 cont'd. 138 * debuginfod.cxx (thread_main_scanner): Ensure control doesn't 139 leave infinite loop until program exit, even if SIGUSR2. 140 (scan_source_paths): Have traverser clean scanq on 141 SIGUSR2. Emit additional traversed_total metrics. 142 (groom): Emit additional groomed_total metrics. 143 (thread_main_groom): Restore previous thread_work_total 144 metric. 145 1462020-10-29 Frank Ch. Eigler <fche@redhat.com> 147 148 PR26775 149 * debuginfod.cxx (forced_*_count): Make these global. 150 (runq::clear): New function. 151 (thread_main_scanner): Check for pending SIGUSR2; interrupt. 152 (scan_source_paths): Check for pending SIGUSR2; interrupt. 153 (groom): Report prometheus stats before groom also. Check for 154 pending SIGUSR1; interrupt. Increment thread_work_total for 155 each file scanned, not the entire cycle. 156 1572020-10-29 Frank Ch. Eigler <fche@redhat.com> 158 159 PR26810 160 * debuginfod.cxx (handle_buildid_*_match): Throw exceptions for 161 more lower level libc errors. 162 (handle_buildid_match): Catch & report exceptions but return 0 163 for continued iteration in the caller. 164 1652020-10-25 Mark Wielaard <mark@klomp.org> 166 167 * debuginfod-client.c (debuginfod_query_server): Translate 168 CURLE_PEER_FAILED_VERIFICATION to ECONNREFUSED. 169 1702020-10-20 Frank Ch. Eigler <fche@redhat.com> 171 172 PR26756: more prometheus metrics 173 * debuginfod.cxx (*_exception): Add counters for error occurrences. 174 (fdcache::*): Add counters for fdcache operations and status. 175 (fdcache::set_metric): New fn for overall stat counts. 176 (fdcache::limit): ... allow metric-less use from dtors. 177 1782020-10-20 Frank Ch. Eigler <fche@redhat.com> 179 180 * debuginfod.cxx (handle_buildid*): Add a parameter for detecting 181 internally-originated lookups for dwz resolution. 182 1832020-09-18 Frank Ch. Eigler <fche@redhat.com> 184 185 * debuginfod.cxx (scan_source_file, archive_classify): Store only 186 canonicalized file names in sdef & sref records in the database. 187 1882020-09-08 Mark Wielaard <mark@klomp.org> 189 190 * Makefile.am (BUILD_STATIC): Include libcurl_LIBS in libdebuginfod 191 when NOT DUMMY_LIBDEBUGINFOD. 192 1932020-09-16 Mark Wielaard <mark@klomp.org> 194 195 * debuginfod-find.c: Fix license block comment. 196 1972020-09-15 Mark Wielaard <mark@klomp.org> 198 199 * debuginfod-find.c (main): Use dwelf_elf_begin. 200 2012020-07-03 Alice Zhang <alizhang@redhat.com> 202 203 * debuginfod-client.c (debuginfod_query_server): Use strncasecmp 204 to compare effective_url. Try CURLINFO_SCHEME as fallback. 205 2062020-06-19 Mark Wielaard <mark@klomp.org> 207 208 * Makefile.am (bin_PROGRAMS): Guard with DEBUGINFOD and 209 LIBDEBUGINFOD. 210 (debuginfod_LDADD): Remove libcurl. 211 (libdebuginfod): When static and DUMMY_LIBDEBUGINFO remove libcurl. 212 (noinst_LIBRARIES): Guard with LIBDEBUGINFOD. 213 (AM_CPPFLAGS): Add -Wno-unused-parameter when DUMMY_LIBDEBUGINFOD. 214 (pkginclude_headers): Guard with LIBDEBUGINFOD 215 (libdebuginfod_so_LIBS): Likewise. 216 (+libdebuginfod_so_LDLIBS): Likewise. 217 (install): Likewise. 218 (uninstall): Likewise. 219 * debuginfod-client.c: Include dummy functions when 220 DUMMY_LIBDEBUGINFOD. 221 * debuginfod.cxx: Remove curl.h include. 222 2232020-06-16 Mark Wielaard <mark@klomp.org> 224 225 * debuginfod-client.c (debuginfod_query_server): Check malloc. 226 Move curl_multi_init call before handle_data malloc call. 227 2282020-06-16 Mark Wielaard <mark@klomp.org> 229 230 * debuginfod-client.c (debuginfod_query_server): Replace sizeof 231 build_id_bytes check with strlen build_id check. 232 2332020-06-16 Mark Wielaard <mark@klomp.org> 234 235 * debuginfod-client.c (debuginfod_query_server): Increase suffix 236 array and prepare having to escape 1 character with 2. 237 2382020-06-16 Mark Wielaard <mark@klomp.org> 239 240 * debuginfod-client.c (debuginfod_clean_cache): Handle failing 241 fopen (interval_path). 242 2432020-03-29 Mark Wielaard <mark@klomp.org> 244 245 * debuginfod-client.c (debuginfod_add_http_header): Check header 246 contains precisely one colon that isn't the first or last char. 247 2482020-03-29 Frank Ch. Eigler <fche@redhat.com> 249 250 * debuginfod-client.c (struct debuginfod_client): Add a flag field 251 for progressfn printing. 252 (default_progressfn): Set it if printing \rsomething. 253 (debuginfod_end): Terminate with \n if flag set, i.e., only if the 254 default_progressfn was actually called. 255 2562020-03-27 Mark Wielaard <mark@klomp.org> 257 258 * debuginfod.cxx (parse_opt): Check port is not zero. 259 2602020-03-28 Frank Ch. Eigler <fche@redhat.com> 261 262 * debuginfod.cxx (handle_buildid_r_match): During archive 263 extraction / fdcache prefetching, set the mtime of each 264 file in the cache. 265 2662020-03-27 Frank Ch. Eigler <fche@redhat.com> 267 268 * debuginfod-find.c (main): Extract buildid from /binary/ if 269 given instead of hex string. 270 * Makefile.am: Add elfutils library prereqs for debuginfod-find. 271 2722020-03-24 Frank Ch. Eigler <fche@redhat.com> 273 274 * debuginfod.h, libdebuginfod.map: New functions for _add_url_header. 275 * debuginfod-client.c (struct debuginfod_client): Add headers fields. 276 (debuginfod_add_http_header): New client api to add outgoing headers. 277 (add_default_headers): Renamed from add_extra_headers, skip if flag. 278 (debuginfod_query_server): Pass accumulated headers to libcurl. 279 (debuginfod_end): Clean accumulated headers. 280 (debuginfod_find_*): Add default headers at this point. 281 * debuginfod.cxx (handle_buildid): Add conn pointer. Use it to relay 282 incoming UA and XFF headers to federated upstream debuginfods. 283 2842020-03-26 Frank Ch. Eigler <fche@redhat.com> 285 286 * debuginfod.cxx (handler_cb): Export two families of metrics for 287 prometheus traffic analysis: response times and data amounts. 288 2892020-03-26 Frank Ch. Eigler <fche@redhat.com> 290 291 * debuginfod.cxx (parse_opt): For -U, prefer dpkg-deb 292 after all if access(3)-able, fallback to bsdtar. 293 2942020-03-25 Frank Ch. Eigler <fche@redhat.com> 295 296 * debuginfod.cxx (parse_opt): Associate a bsdtar subshell with 297 the .deb & .ddeb extensions, instead of dpkg-deb. 298 2992020-03-26 Frank Ch. Eigler <fche@redhat.com> 300 301 * debuginfod-client.c (debuginfod_query_server): Don't 302 set CURLOPT_PATH_AS_IS on old curl. Mostly harmless. 303 3042020-03-24 Frank Ch. Eigler <fche@redhat.com> 305 306 * debuginfod-client.c (debuginfod_query_server): Set 307 CURLOPT_PATH_AS_IS, to propagate file names verbatim. 308 * debuginfod.cxx (canon_pathname): Implement RFC3986 309 style pathname canonicalization. 310 (handle_buildid): Canonicalize incoming webapi source 311 paths, accept either one. 312 (scan_source_file, archive_classify): Store both 313 original and canonicalized dwarf-source file names. 314 3152020-03-24 Frank Ch. Eigler <fche@redhat.com> 316 317 * debuginfod.cxx (handle_buildid): In case of federated fallback 318 queries, handle errors analogously to local ENOENT/404. 319 (handle_metrics): Return a size-of-response value. 320 (handler_cb): Add code to time entire application-side processing 321 stage + response sizes + http codes, so as to emit a complete 322 httpd-flavoured log line for each webapi request. 323 3242020-03-24 Frank Ch. Eigler <fche@redhat.com> 325 326 * debuginfod-client.c (debuginfod_query_server): Print the 327 default_progressfn terminating \n message only if that progressfn 328 is actually set. 329 3302020-03-24 Frank Ch. Eigler <fche@redhat.com> 331 332 * debuginfod-find.c (main): Correct /source full-pathness check for 333 "debuginfod-find -v source deadbeef /pathname" case. 334 3352020-03-22 Frank Ch. Eigler <fche@redhat.com> 336 337 * debuginfod-client.c (struct debuginfod_client): Add url field. 338 (struct handle_data): Add client field as backpointer. 339 (debuginfod_write_callback): Compute & save URL. 340 (default_progressfn): Print front pieces of the URL. 341 (debuginfod_query_server): Clear URL and cleanup after progressfn. 342 * debuginfod-find.c (main): Print URL at transfer conclusion. 343 3442020-03-22 Frank Ch. Eigler <fche@redhat.com> 345 346 * debuginfod.h, libdebuginfod.map: New functions for _get/set_user(). 347 * debuginfod-client.c: Implement them. 348 * debuginfod-find.c: Include a token call just for testing them. 349 3502020-03-03 Aaron Merey <amerey@redhat.com> 351 352 * debuginfod-client.c (debuginfod_query_server): Update 353 cache_path even when new default path already exists. 354 3552020-02-27 Aaron Merey <amerey@redhat.com> 356 357 * debuginfod-client.c (xalloc_str): New macro. Call 358 asprintf with error checking. 359 (debuginfod_query_server): Use XDG_CACHE_HOME as a default 360 cache location if it is set. Replace snprintf with xalloc_str. 361 3622020-02-26 Konrad Kleine <kkleine@redhat.com> 363 364 * debuginfod-client.c (debuginfod_query_server): Handle curl's 365 response code correctly when DEBUGINFOD_URLS begin with file:// 366 3672020-02-25 Frank Ch. Eigler <fche@redhat.com> 368 369 * debuginfod.cxx (parse_opt): Treat -R as if -Z.rpm . 370 3712020-02-25 Frank Ch. Eigler <fche@redhat.com> 372 373 * debuginfod.cxx (fdcache_prefetch): New parameter. 374 (parse_opt): Parse it. 375 (main): Default it. 376 (fdcache::fd_size_mb): Change to double for accuracy. 377 (fdcache::probe): New function. 378 (fdcache::intern): New option to intern at end of LRU. 379 (fdcache::lookup): Clean fdcache. 380 (handle_buildid_r_match): Implement multi-stage archive 381 parsing, with optional prefetching of extracted contents 382 into the fdcache. 383 3842020-02-19 Aaron Merey <amerey@redhat.com> 385 386 * debuginfod-client.c (debuginfod_clean_cache): Restrict 387 cleanup to client-pattern files. 388 3892020-02-05 Frank Ch. Eigler <fche@redhat.com> 390 391 * debuginfod.cxx (argp options): Add -Z option. 392 (canonicalized_archive_entry_pathname): New function for 393 distro-agnostic file name matching/storage. 394 3952020-01-22 Frank Ch. Eigler <fche@redhat.com> 396 397 * debuginfod.cxx (dwarf_extract_source_paths): Don't print 398 "skipping hat" messages at verbosity <=3, too noisy. 399 4002020-01-19 Frank Ch. Eigler <fche@redhat.com> 401 402 * debuginfod.cxx (scanq): Rework to let groomer/fts threads 403 synchronize with an empty workqueue, and lock out workqueue 404 consumers. 405 (thread_groom): Adopt new scanq idle APIs to lock out scanners. 406 (thread_main_fts_source_paths): Adopt new scanq idler API to 407 avoid being restarted while scanners haven't even finished yet. 408 (thread_main_*): Increment thread_work_total metric only after 409 a work cycle is completed, not when it begins. 410 4112020-01-18 Frank Ch. Eigler <fche@redhat.com> 412 413 * debuginfod.cxx (thread_main_scanner): Handle empty source_paths[]. 414 4152020-01-11 Frank Ch. Eigler <fche@redhat.com> 416 417 * debuginfod.cxx (libarchive_fdcache): New class/facility to own a 418 cache of temporary files that were previously extracted from an 419 archive. If only it could store just unlinked fd's instead of 420 filenames. 421 (handle_buildid_r_match): Use it to answer dwz/altdebug and webapi 422 requests. 423 (groom): Clean it. 424 (main): Initialize the cache control parameters from heuristics. 425 Use a consistent tmpdir for these and tmp files elsewhere. 426 4272020-01-11 Frank Ch. Eigler <fche@redhat.com> 428 429 * debuginfod.cxx (conninfo): Print User-Agent and X-Forwarded-For 430 request headers, after mild safety-censorship (for easier machine 431 processing). 432 4332020-01-11 Frank Ch. Eigler <fche@redhat.com> 434 435 * debuginfod.cxx: Rework threading model. 436 (workq): New class for concurrent work-queue. 437 (semaphore): Removed class, now unused. 438 (scan_source_file_path): Rework into ... 439 (scan_source_file): New function. 440 (thread_main_scan_source_file_path): Nuke. 441 (scan_source_archive_path): Rework into ... 442 (scan_archive_file): New function. 443 (thread_main_scanner): New function for scanner threads. 444 (thread_main_fts_source_paths): New function for traversal thread. 445 (scan_source_paths): ... doing this. 446 (thread_groom): Tweak metrics for consistency. 447 (main): Start 1 traversal and N scanner threads if needed. 448 4492019-01-02 Mark Wielaard <mark@klomp.org> 450 451 * debuginfod.cxx (default_connect_timeout): Removed. 452 (default_transfer_timeout): Removed. 453 (default_timeout): New. Default to 90 seconds. 454 (debuginfod_query_server): Parse server_timeout_envvar as one number. 455 Set as CURLOPT_LOW_SPEED_TIME, with CURL_OPT_LOW_SPEED_LIMITE as 100K. 456 4572020-01-09 Frank Ch. Eigler <fche@redhat.com> 458 459 * debuginfod-client.c (add_extra_headers): New function, 460 based on mjw's draft. 461 (debuginfod_query_server): Call it. 462 4632019-12-22 Frank Ch. Eigler <fche@redhat.com> 464 465 * debuginfod.cxx (*_rpm_*): Rename to *_archive_* throughout. 466 (scan_archives): New read-mostly global to identify archive 467 file extensions and corresponding extractor commands. 468 (parse_opt): Handle new -U flag. 469 4702019-12-19 Frank Ch. Eigler <fche@redhat.com> 471 472 * debuginfod-client.c (default_progressfn): New function. 473 (debuginfod_begin): Use it if $DEBUGINFOD_PROGRESS set. 474 (server_timeout): Bump to 30 seconds. 475 (debuginfod_query_server): Call progressfn -after- rather than 476 before curl ops, to make it likely that a successful transfer 477 results in final a=b call. Tweak cleanup sequence. 478 * debuginfod.h: Document $DEBUGINFOD_PROGRESS name. 479 4802019-12-09 Mark Wielaard <mark@klomp.org> 481 482 * debuginfod-client.c (debuginfod_query_server): Check 483 server_urls_envvar early. 484 4852019-12-03 Mark Wielaard <mark@klomp.org> 486 487 * debuginfod-client.c (debuginfod_query_server): Use separate 488 local variables for CURLcode curl_res and CURLMcode curlm_res. 489 4902019-11-26 Mark Wielaard <mark@klomp.org> 491 492 * Makefile.am (BUILD_STATIC): Add needed libraries for libdw and 493 libdebuginfod. 494 4952019-11-25 Frank Ch. Eigler <fche@redhat.com> 496 497 * debuginfod.cxx (groom): Add a sqlite3_db_release_memory() 498 at the end of periodic grooming to try to shrink the process. 499 5002019-11-24 Mark Wielaard <mark@klomp.org> 501 502 * debuginfod.cxx (test_webapi_sleep): Removed. 503 (handler_cb): Don't check test_webapi_sleep and sleep. 504 (main): Don't set test_webapi_sleep. 505 5062019-11-24 Mark Wielaard <mark@klomp.org> 507 508 * debuginfod.cxx (add_metric): New function. 509 (scan_source_file_path): Record metrics for 510 found_executable_total, found_debuginfo_total and 511 found_sourcerefs_total. 512 (scan_source_rpm_path): Likewise. 513 5142019-11-07 Frank Ch. Eigler <fche@redhat.com> 515 516 * debuginfod.cxx: Add /metrics endpoint. Add numerous 517 calls to new functions inc_metric/set_metric to populate 518 threadsafe map containing stats. Add http content-type 519 response headers throughout. 520 (thread_main_*): Simplify counter/timer flow. 521 (main): Reorder web service shutdown to leave http running 522 as long as possible. 523 * debuginfod.8: Document it, add security caution. 524 5252019-11-06 Frank Ch. Eigler <fche@redhat.com> 526 527 * debuginfod.cxx: Add new -L (symlink-following) mode. 528 * debuginfod.8: Document it. 529 5302019-11-04 Frank Ch. Eigler <fche@redhat.com> 531 532 * debuginfo-client.c (debuginfod_set_progressfn): New function 533 for progress/interrupt callback. 534 (debuginfod_clean_cache, debuginfod_query_server): Call it. 535 * debuginfo.h: Declare it. 536 * debuginfod_set_progressfn.3, *_find_debuginfo.3: Document it. 537 * Makefile.am: Install it. 538 * libdebuginfod.map: Export it all under ELFUTILS_0.178 symversion. 539 540 * debuginfod-find.c: Add -v option to activate progress cb. 541 * debuginfod-find.1: Document it. 542 * debuginfod.cxx: Add $DEBUGINFOD_TEST_WEBAPI_SLEEP env var 543 to insert sleep in webapi callbacks, to help manual testing. 544 5452019-10-28 Frank Ch. Eigler <fche@redhat.com> 546 547 * debuginfod.cxx: New file: debuginfod server. 548 * debuginfod.8: New file: man page. 549 * Makefile.am: Build it. 550 5512019-10-28 Aaron Merey <amerey@redhat.com> 552 553 * debuginfod-client.c: New file: debuginfod client library. 554 * debuginfod.h: New file: header for same. 555 * libdebuginfod.map: New file: govern its solib exports. 556 * debuginfod-find.c: New file: command line frontend. 557 * debuginfod-find.1, debuginfod_find_source.3, 558 debuginfod_find_executable.3, debuginfod_find_debuginfo.3: 559 New man pages. 560