diff --git a/elfutils-0.178-debuginfod-timeoutprogress.patch b/elfutils-0.178-debuginfod-timeoutprogress.patch new file mode 100644 index 0000000..9e81e9e --- /dev/null +++ b/elfutils-0.178-debuginfod-timeoutprogress.patch @@ -0,0 +1,593 @@ +commit 76ad56c430f0b85c47115688c511d9bd4fa671d4 +Author: Frank Ch. Eigler +Date: Wed Dec 4 15:51:12 2019 -0500 + + debuginfod: usability tweaks, incl. $DEBUGINFOD_PROGRESS client support + + This facility allows a default progress-printing function to be + installed if the given environment variable is set. Some larger usage + experience (systemtap fetching kernels) indicates the default timeout + is too short, so forked it into a connection timeout (default short) + and a transfer timeout (default unlimited). + + Signed-off-by: Frank Ch. Eigler + +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index ab7b4e1..9a4a0e0 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -40,6 +40,7 @@ + + #include "config.h" + #include "debuginfod.h" ++#include "system.h" + #include + #include + #include +@@ -98,16 +99,16 @@ static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */ + static const char *cache_default_name = ".debuginfod_client_cache"; + static const char *cache_path_envvar = DEBUGINFOD_CACHE_PATH_ENV_VAR; + +-/* URLs of debuginfods, separated by url_delim. +- This env var must be set for debuginfod-client to run. */ ++/* URLs of debuginfods, separated by url_delim. */ + static const char *server_urls_envvar = DEBUGINFOD_URLS_ENV_VAR; + static const char *url_delim = " "; + static const char url_delim_char = ' '; + +-/* Timeout for debuginfods, in seconds. +- This env var must be set for debuginfod-client to run. */ ++/* Timeout for debuginfods, in seconds. */ + static const char *server_timeout_envvar = DEBUGINFOD_TIMEOUT_ENV_VAR; +-static int server_timeout = 5; ++static const long default_connect_timeout = 5; ++static const long default_transfer_timeout = -1; /* unlimited */ ++ + + /* Data associated with a particular CURL easy handle. Passed to + the write callback. */ +@@ -400,8 +401,18 @@ debuginfod_query_server (debuginfod_client *c, + return fd; + } + +- if (getenv(server_timeout_envvar)) +- server_timeout = atoi (getenv(server_timeout_envvar)); ++ long connect_timeout = default_connect_timeout; ++ long transfer_timeout = default_transfer_timeout; ++ const char* timeout_envvar = getenv(server_timeout_envvar); ++ if (timeout_envvar != NULL) ++ { ++ long ct, tt; ++ rc = sscanf(timeout_envvar, "%ld,%ld", &ct, &tt); ++ if (rc >= 1) ++ connect_timeout = ct; ++ if (rc >= 2) ++ transfer_timeout = tt; ++ } + + /* make a copy of the envvar so it can be safely modified. */ + server_urls = strdup(urls_envvar); +@@ -493,7 +504,10 @@ debuginfod_query_server (debuginfod_client *c, + CURLOPT_WRITEFUNCTION, + debuginfod_write_callback); + curl_easy_setopt(data[i].handle, CURLOPT_WRITEDATA, (void*)&data[i]); +- curl_easy_setopt(data[i].handle, CURLOPT_TIMEOUT, (long) server_timeout); ++ if (connect_timeout >= 0) ++ curl_easy_setopt(data[i].handle, CURLOPT_CONNECTTIMEOUT, connect_timeout); ++ if (transfer_timeout >= 0) ++ curl_easy_setopt(data[i].handle, CURLOPT_TIMEOUT, transfer_timeout); + curl_easy_setopt(data[i].handle, CURLOPT_FILETIME, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_FOLLOWLOCATION, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_FAILONERROR, (long) 1); +@@ -511,11 +525,32 @@ debuginfod_query_server (debuginfod_client *c, + long loops = 0; + do + { ++ /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */ ++ curl_multi_wait(curlm, NULL, 0, 1000, NULL); ++ ++ /* If the target file has been found, abort the other queries. */ ++ if (target_handle != NULL) ++ for (int i = 0; i < num_urls; i++) ++ if (data[i].handle != target_handle) ++ curl_multi_remove_handle(curlm, data[i].handle); ++ ++ CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); ++ if (curlm_res != CURLM_OK) ++ { ++ switch (curlm_res) ++ { ++ case CURLM_CALL_MULTI_PERFORM: continue; ++ case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break; ++ default: rc = -ENETUNREACH; break; ++ } ++ goto out1; ++ } ++ + if (c->progressfn) /* inform/check progress callback */ + { + loops ++; + long pa = loops; /* default params for progress callback */ +- long pb = 0; ++ long pb = 0; /* transfer_timeout tempting, but loops != elapsed-time */ + if (target_handle) /* we've committed to a server; report its download progress */ + { + CURLcode curl_res; +@@ -535,6 +570,8 @@ debuginfod_query_server (debuginfod_client *c, + pa = (dl > LONG_MAX ? LONG_MAX : (long)dl); + #endif + ++ /* NB: If going through deflate-compressing proxies, this ++ number is likely to be unavailable, so -1 may show. */ + #ifdef CURLINFO_CURLINFO_CONTENT_LENGTH_DOWNLOAD_T + curl_off_t cl; + curl_res = curl_easy_getinfo(target_handle, +@@ -555,27 +592,6 @@ debuginfod_query_server (debuginfod_client *c, + if ((*c->progressfn) (c, pa, pb)) + break; + } +- +- /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */ +- curl_multi_wait(curlm, NULL, 0, 1000, NULL); +- +- /* If the target file has been found, abort the other queries. */ +- if (target_handle != NULL) +- for (int i = 0; i < num_urls; i++) +- if (data[i].handle != target_handle) +- curl_multi_remove_handle(curlm, data[i].handle); +- +- CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); +- if (curlm_res != CURLM_OK) +- { +- switch (curlm_res) +- { +- case CURLM_CALL_MULTI_PERFORM: continue; +- case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break; +- default: rc = -ENETUNREACH; break; +- } +- goto out1; +- } + } while (still_running); + + /* Check whether a query was successful. If so, assign its handle +@@ -674,9 +690,9 @@ debuginfod_query_server (debuginfod_client *c, + + curl_multi_cleanup(curlm); + unlink (target_cache_tmppath); ++ close (fd); /* before the rmdir, otherwise it'll fail */ + (void) rmdir (target_cache_dir); /* nop if not empty */ + free(data); +- close (fd); + + out0: + free (server_urls); +@@ -685,6 +701,22 @@ debuginfod_query_server (debuginfod_client *c, + return rc; + } + ++ ++/* Activate a basic form of progress tracing */ ++static int ++default_progressfn (debuginfod_client *c, long a, long b) ++{ ++ (void) c; ++ ++ dprintf(STDERR_FILENO, ++ "Downloading from debuginfod %ld/%ld%s", a, b, ++ ((a == b) ? "\n" : "\r")); ++ /* XXX: include URL - stateful */ ++ ++ return 0; ++} ++ ++ + /* See debuginfod.h */ + debuginfod_client * + debuginfod_begin (void) +@@ -693,7 +725,12 @@ debuginfod_begin (void) + size_t size = sizeof (struct debuginfod_client); + client = (debuginfod_client *) malloc (size); + if (client != NULL) +- client->progressfn = NULL; ++ { ++ if (getenv(DEBUGINFOD_PROGRESS_ENV_VAR)) ++ client->progressfn = default_progressfn; ++ else ++ client->progressfn = NULL; ++ } + return client; + } + +diff --git a/debuginfod/debuginfod.h b/debuginfod/debuginfod.h +index 6b1b1cc..33fae86 100644 +--- a/debuginfod/debuginfod.h ++++ b/debuginfod/debuginfod.h +@@ -33,6 +33,7 @@ + #define DEBUGINFOD_URLS_ENV_VAR "DEBUGINFOD_URLS" + #define DEBUGINFOD_CACHE_PATH_ENV_VAR "DEBUGINFOD_CACHE_PATH" + #define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT" ++#define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS" + + /* Handle for debuginfod-client connection. */ + typedef struct debuginfod_client debuginfod_client; +diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 +index a759ecb..023acbb 100644 +--- a/doc/debuginfod-find.1 ++++ b/doc/debuginfod-find.1 +@@ -119,9 +119,13 @@ debuginfod instances. Alternate URL prefixes are separated by space. + + .TP 21 + .B DEBUGINFOD_TIMEOUT +-This environment variable governs the timeout for each debuginfod HTTP +-connection. A server that fails to respond within this many seconds +-is skipped. The default is 5. ++This environment variable governs the timeouts for each debuginfod ++HTTP connection. One or two comma-separated numbers may be given. ++The first is the number of seconds for the connection establishment ++(CURLOPT_CONNECTTIMEOUT), and the default is 5. The second is the ++number of seconds for the transfer completion (CURLOPT_TIMEOUT), and ++the default is no timeout. (Zero or negative also means "no ++timeout".) + + .TP 21 + .B DEBUGINFOD_CACHE_PATH +diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 +index be8eed0..ea8c616 100644 +--- a/doc/debuginfod_find_debuginfo.3 ++++ b/doc/debuginfod_find_debuginfo.3 +@@ -163,9 +163,21 @@ debuginfod instances. Alternate URL prefixes are separated by space. + + .TP 21 + .B DEBUGINFOD_TIMEOUT +-This environment variable governs the timeout for each debuginfod HTTP +-connection. A server that fails to respond within this many seconds +-is skipped. The default is 5. ++This environment variable governs the timeouts for each debuginfod ++HTTP connection. One or two comma-separated numbers may be given. ++The first is the number of seconds for the connection establishment ++(CURLOPT_CONNECTTIMEOUT), and the default is 5. The second is the ++number of seconds for the transfer completion (CURLOPT_TIMEOUT), and ++the default is no timeout. (Zero or negative also means "no ++timeout".) ++ ++.TP 21 ++.B DEBUGINFOD_PROGRESS ++This environment variable governs the default progress function. If ++set, and if a progressfn is not explicitly set, then the library will ++configure a default progressfn. This function will append a simple ++progress message periodically to the given file. Consider using ++"/dev/stderr" on platforms that support it. The default is nothing. + + .TP 21 + .B DEBUGINFOD_CACHE_PATH +diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh +index 6533996..4cf6138 100755 +--- a/tests/run-debuginfod-find.sh ++++ b/tests/run-debuginfod-find.sh +@@ -89,7 +89,7 @@ wait_ready $PORT1 'ready' 1 + export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + + # Be patient when run on a busy machine things might take a bit. +-export DEBUGINFOD_TIMEOUT=10 ++export DEBUGINFOD_TIMEOUT=1,10 + + # We use -t0 and -g0 here to turn off time-based scanning & grooming. + # For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. +@@ -153,8 +153,11 @@ cmp $filename F/prog2 + cat vlog + grep -q Progress vlog + tempfiles vlog +-filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2` ++filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2` + cmp $filename F/prog2 ++cat vlog2 ++grep -q Downloading vlog2 ++tempfiles vlog2 + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` + cmp $filename ${PWD}/prog2.c + + +commit 288c76775f2d27976eb269e568b53c742d973dbc +Author: Frank Ch. Eigler +Date: Mon Jan 6 04:29:21 2020 -0500 + + debuginfod: pass a distro-summary User-Agent request header + + It may be useful for a debuginfod server operator to know what kinds + of clients make webapi requests. This is mainly as a + telemetry/diagnostic (though the data cannot be really trusted). It + may also be useful to automate downloading of distro packages to a + debuginfod server in the case of an unknown hex buildid. doc/testing + not affected as these are diagnostics. + + Signed-off-by: Frank Ch. Eigler + Signed-off-by: Mark Wielaard + +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index 9a4a0e0..66ccb21 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -1,5 +1,5 @@ + /* Retrieve ELF / DWARF / source files from the debuginfod. +- Copyright (C) 2019 Red Hat, Inc. ++ Copyright (C) 2019-2020 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify +@@ -58,6 +58,7 @@ + #include + #include + #include ++#include + #include + + /* If fts.h is included before config.h, its indirect inclusions may not +@@ -279,6 +280,87 @@ debuginfod_clean_cache(debuginfod_client *c, + #define MAX_BUILD_ID_BYTES 64 + + ++static void ++add_extra_headers(CURL *handle) ++{ ++ /* Compute a User-Agent: string to send. The more accurately this ++ describes this host, the likelier that the debuginfod servers ++ might be able to locate debuginfo for us. */ ++ ++ char* utspart = NULL; ++ struct utsname uts; ++ int rc = 0; ++ rc = uname (&uts); ++ if (rc == 0) ++ rc = asprintf(& utspart, "%s/%s", uts.sysname, uts.machine); ++ if (rc < 0) ++ utspart = NULL; ++ ++ FILE *f = fopen ("/etc/os-release", "r"); ++ if (f == NULL) ++ f = fopen ("/usr/lib/os-release", "r"); ++ char *id = NULL; ++ char *version = NULL; ++ if (f != NULL) ++ { ++ while (id == NULL || version == NULL) ++ { ++ char buf[128]; ++ char *s = &buf[0]; ++ if (fgets (s, sizeof(buf), f) == NULL) ++ break; ++ ++ int len = strlen (s); ++ if (len < 3) ++ continue; ++ if (s[len - 1] == '\n') ++ { ++ s[len - 1] = '\0'; ++ len--; ++ } ++ ++ char *v = strchr (s, '='); ++ if (v == NULL || strlen (v) < 2) ++ continue; ++ ++ /* Split var and value. */ ++ *v = '\0'; ++ v++; ++ ++ /* Remove optional quotes around value string. */ ++ if (*v == '"' || *v == '\'') ++ { ++ v++; ++ s[len - 1] = '\0'; ++ } ++ if (strcmp (s, "ID") == 0) ++ id = strdup (v); ++ if (strcmp (s, "VERSION_ID") == 0) ++ version = strdup (v); ++ } ++ fclose (f); ++ } ++ ++ char *ua = NULL; ++ rc = asprintf(& ua, "%s/%s,%s,%s/%s", ++ PACKAGE_NAME, PACKAGE_VERSION, ++ utspart ?: "", ++ id ?: "", ++ version ?: ""); ++ if (rc < 0) ++ ua = NULL; ++ ++ if (ua) ++ curl_easy_setopt(handle, CURLOPT_USERAGENT, (void*) ua); /* implicit strdup */ ++ ++ free (ua); ++ free (id); ++ free (version); ++ free (utspart); ++} ++ ++ ++ + /* Query each of the server URLs found in $DEBUGINFOD_URLS for the file + with the specified build-id, type (debuginfo, executable or source) + and filename. filename may be NULL. If found, return a file +@@ -514,7 +596,7 @@ debuginfod_query_server (debuginfod_client *c, + curl_easy_setopt(data[i].handle, CURLOPT_NOSIGNAL, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_AUTOREFERER, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_ACCEPT_ENCODING, ""); +- curl_easy_setopt(data[i].handle, CURLOPT_USERAGENT, (void*) PACKAGE_STRING); ++ add_extra_headers(data[i].handle); + + curl_multi_add_handle(curlm, data[i].handle); + server_url = strtok_r(NULL, url_delim, &strtok_saveptr); + +commit b8d85ed024a745cff05e56c6337d95d654d5294a +Author: Mark Wielaard +Date: Thu Jan 2 17:02:42 2020 +0100 + + debuginfod: Use DEBUGINFOD_TIMEOUT as seconds to get at least 100K. + + Use just one timeout using CURLOPT_LOW_SPEED_TIME (default 90 seconds) + and CURLOPT_LOW_SPEED_LIMIT (100K). + + Signed-off-by: Mark Wielaard + +diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c +index 66ccb21..e5a2e82 100644 +--- a/debuginfod/debuginfod-client.c ++++ b/debuginfod/debuginfod-client.c +@@ -105,10 +105,9 @@ static const char *server_urls_envvar = DEBUGINFOD_URLS_ENV_VAR; + static const char *url_delim = " "; + static const char url_delim_char = ' '; + +-/* Timeout for debuginfods, in seconds. */ ++/* Timeout for debuginfods, in seconds (to get at least 100K). */ + static const char *server_timeout_envvar = DEBUGINFOD_TIMEOUT_ENV_VAR; +-static const long default_connect_timeout = 5; +-static const long default_transfer_timeout = -1; /* unlimited */ ++static const long default_timeout = 90; + + + /* Data associated with a particular CURL easy handle. Passed to +@@ -483,18 +482,10 @@ debuginfod_query_server (debuginfod_client *c, + return fd; + } + +- long connect_timeout = default_connect_timeout; +- long transfer_timeout = default_transfer_timeout; ++ long timeout = default_timeout; + const char* timeout_envvar = getenv(server_timeout_envvar); + if (timeout_envvar != NULL) +- { +- long ct, tt; +- rc = sscanf(timeout_envvar, "%ld,%ld", &ct, &tt); +- if (rc >= 1) +- connect_timeout = ct; +- if (rc >= 2) +- transfer_timeout = tt; +- } ++ timeout = atoi (timeout_envvar); + + /* make a copy of the envvar so it can be safely modified. */ + server_urls = strdup(urls_envvar); +@@ -586,10 +577,15 @@ debuginfod_query_server (debuginfod_client *c, + CURLOPT_WRITEFUNCTION, + debuginfod_write_callback); + curl_easy_setopt(data[i].handle, CURLOPT_WRITEDATA, (void*)&data[i]); +- if (connect_timeout >= 0) +- curl_easy_setopt(data[i].handle, CURLOPT_CONNECTTIMEOUT, connect_timeout); +- if (transfer_timeout >= 0) +- curl_easy_setopt(data[i].handle, CURLOPT_TIMEOUT, transfer_timeout); ++ if (timeout > 0) ++ { ++ /* Make sure there is at least some progress, ++ try to get at least 100K per timeout seconds. */ ++ curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_TIME, ++ timeout); ++ curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT, ++ 100 * 1024L); ++ } + curl_easy_setopt(data[i].handle, CURLOPT_FILETIME, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_FOLLOWLOCATION, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_FAILONERROR, (long) 1); +diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 +index 023acbb..e71ca29 100644 +--- a/doc/debuginfod-find.1 ++++ b/doc/debuginfod-find.1 +@@ -119,13 +119,10 @@ debuginfod instances. Alternate URL prefixes are separated by space. + + .TP 21 + .B DEBUGINFOD_TIMEOUT +-This environment variable governs the timeouts for each debuginfod +-HTTP connection. One or two comma-separated numbers may be given. +-The first is the number of seconds for the connection establishment +-(CURLOPT_CONNECTTIMEOUT), and the default is 5. The second is the +-number of seconds for the transfer completion (CURLOPT_TIMEOUT), and +-the default is no timeout. (Zero or negative also means "no +-timeout".) ++This environment variable governs the timeout for each debuginfod HTTP ++connection. A server that fails to provide at least 100K of data ++within this many seconds is skipped. The default is 90 seconds. (Zero ++or negative means "no timeout".) + + .TP 21 + .B DEBUGINFOD_CACHE_PATH +diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 +index 342f524..6184bcc 100644 +--- a/doc/debuginfod.8 ++++ b/doc/debuginfod.8 +@@ -366,8 +366,10 @@ or indirectly - the results would be hilarious. + .TP 21 + .B DEBUGINFOD_TIMEOUT + This environment variable governs the timeout for each debuginfod HTTP +-connection. A server that fails to respond within this many seconds +-is skipped. The default is 5. ++connection. A server that fails to provide at least 100K of data ++within this many seconds is skipped. The default is 90 seconds. (Zero ++or negative means "no timeout".) ++ + + .TP 21 + .B DEBUGINFOD_CACHE_PATH +diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 +index ea8c616..f6ea7a4 100644 +--- a/doc/debuginfod_find_debuginfo.3 ++++ b/doc/debuginfod_find_debuginfo.3 +@@ -163,13 +163,10 @@ debuginfod instances. Alternate URL prefixes are separated by space. + + .TP 21 + .B DEBUGINFOD_TIMEOUT +-This environment variable governs the timeouts for each debuginfod +-HTTP connection. One or two comma-separated numbers may be given. +-The first is the number of seconds for the connection establishment +-(CURLOPT_CONNECTTIMEOUT), and the default is 5. The second is the +-number of seconds for the transfer completion (CURLOPT_TIMEOUT), and +-the default is no timeout. (Zero or negative also means "no +-timeout".) ++This environment variable governs the timeout for each debuginfod HTTP ++connection. A server that fails to provide at least 100K of data ++within this many seconds is skipped. The default is 90 seconds. (Zero ++or negative means "no timeout".) + + .TP 21 + .B DEBUGINFOD_PROGRESS +diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh +index 90dafe0..4ab47a3 100755 +--- a/tests/run-debuginfod-find.sh ++++ b/tests/run-debuginfod-find.sh +@@ -94,7 +94,7 @@ wait_ready $PORT1 'ready' 1 + export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + + # Be patient when run on a busy machine things might take a bit. +-export DEBUGINFOD_TIMEOUT=1,10 ++export DEBUGINFOD_TIMEOUT=10 + + # We use -t0 and -g0 here to turn off time-based scanning & grooming. + # For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. + +commit 6f2098114a1acbd5e320a1c5fabfa07df02b14fd +Author: Mark Wielaard +Date: Fri Jan 10 15:46:29 2020 +0100 + + doc: Fix DEBUGINFOD_PROGRESS description to just mention output on stderr. + + An earlier variant of the default progress function could write to any + file. Which is still in the documentation. But the actual implementation + just uses stderr. Fix the documentation to match. + + Signed-off-by: Mark Wielaard + +diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 +index f6ea7a4..7e5060f 100644 +--- a/doc/debuginfod_find_debuginfo.3 ++++ b/doc/debuginfod_find_debuginfo.3 +@@ -173,8 +173,8 @@ or negative means "no timeout".) + This environment variable governs the default progress function. If + set, and if a progressfn is not explicitly set, then the library will + configure a default progressfn. This function will append a simple +-progress message periodically to the given file. Consider using +-"/dev/stderr" on platforms that support it. The default is nothing. ++progress message periodically to stderr. The default is no progress ++function output. + + .TP 21 + .B DEBUGINFOD_CACHE_PATH diff --git a/elfutils.spec b/elfutils.spec index a2e31e1..1063735 100644 --- a/elfutils.spec +++ b/elfutils.spec @@ -58,6 +58,7 @@ Patch1: elfutils-0.178-pt-gnu-prop.patch Patch2: elfutils-0.178-debuginfod-no-cache.patch Patch3: elfutils-0.178-curl-code-gcc-10.patch Patch4: elfutils-0.178-compressed-vmlinuz.patch +Patch5: elfutils-0.178-debuginfod-timeoutprogress.patch %description Elfutils is a collection of utilities, including stack (to show @@ -253,6 +254,7 @@ such servers to download those files on demand. %patch2 -p1 -b .debuginfod-client-cache %patch3 -p1 -b .curl-gcc-10 %patch4 -p1 -b .vmlinuz +%patch5 -p1 -b .debuginfod-timeout-progress # In case the above patches added any new test scripts, make sure they # are executable. @@ -430,6 +432,9 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Fri Jan 10 2019 Mark Wielaard +- Add elfutils-0.178-debuginfod-timeoutprogress.patch + * Wed Dec 11 2019 Mark Wielaard - 0.178-6 - Add elfutils-0.178-curl-code-gcc-10.patch - Add elfutils-0.178-compressed-vmlinuz.patch