Andrew Paprocki [Wed, 21 Dec 2022 16:15:00 +0000 (11:15 -0500)]
PR29926: debuginfod: Fix usage of deprecated CURLINFO_*
The `CURLINFO_SIZE_DOWNLOAD_T` and `CURLINFO_CONTENT_LENGTH_DOWNLOAD_T`
identifiers are `enum`s, not pre-processor definitions, so the current
`#ifdef` logic is not selecting the newer API. This results in the
older identifiers being used and they now generate errors when compiled
against Curl 7.87, which has silently deprecated them, causing GCC to
emit `-Werror=deprecated-declarations`.
Instead, the newer identifiers were added in Curl 7.55, so explicitly
check for `CURL_AT_LEAST_VERSION(7, 55, 0)` instead of the current
logic. This eliminates the error when compiling against Curl 7.87.
Ref: https://github.com/curl/curl/pull/1511
Signed-off-by: Andrew Paprocki <andrew@ishiboo.com>
Mark Wielaard [Tue, 20 Dec 2022 13:53:43 +0000 (14:53 +0100)]
Do not use relative include paths in library files.
Rely on include dirs being set up correctly. Setup libdw AM_CPPFLAGS
to include libebl directory. In libdwfl note that debuginfod.h is a
generated file in the builddir. Only include it in the one file
debuginfod-client.c that really needs it.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Hengqi Chen [Sat, 3 Dec 2022 13:47:07 +0000 (21:47 +0800)]
Add support for LoongArch
This implements initial support for the LoongArch architecture.
Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Gavin Li [Wed, 30 Nov 2022 17:26:19 +0000 (18:26 +0100)]
libdwfl: Read no more than required in dwfl_segment_report_module
Since read_portion and the standard dwfl_elf_phdr_memory_callback
functions make sure to read at least minread bytes there is no need
for dwfl_segment_report_module to check and adjust the data to the
actual buffer size read. Reading beyond the end of the expected data
size (if the buffer read is much larger) actually causes issues when
passing the data to elfXX_xlatetom() because it is possible that
src->d_size is not a multiple of recsize (for ELF_T_DYN, recsize is 16
while the minimum required alignment is 8), causing elfXX_xlatetom()
to return ELF_E_INVALID_DATA.
Signed-off-by: Gavin Li <gavin@matician.com>
Signed-off-by: Mark Wielaard <mark@klomp.org>
Yonggang Luo [Thu, 20 Oct 2022 18:25:52 +0000 (02:25 +0800)]
libdw: Change typeof -> __typeof in memory-access.h
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Yonggang Luo [Thu, 20 Oct 2022 18:25:51 +0000 (02:25 +0800)]
libcpu: Use "#define FCT_mod$64r_m FCT_mod$r_m" in i386_data.h
This is enough and can be recognized by clang-cl on windows
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Mark Wielaard [Wed, 30 Nov 2022 23:25:01 +0000 (00:25 +0100)]
libelf: Sync elf.h from glibc
Adds various new ARC related declarations.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Martin Liska [Mon, 28 Nov 2022 13:10:36 +0000 (14:10 +0100)]
Refactor elf_compare
src/ChangeLog:
* elfcompress.c (T_UNSET): Remove and use ch_type.
(T_DECOMPRESS): Likewise.
(T_COMPRESS_ZLIB): Likewise.
(T_COMPRESS_GNU): Likewise.
(enum ch_type): New.
(parse_opt): Parse to new ch_type.
(compress_section): Change gnu and compress arguments
to schtype (source compression) and dchtype (destination
compression).
(process_file): Use new enum type and adjusted compress_section.
Martin Liska [Mon, 28 Nov 2022 13:01:29 +0000 (14:01 +0100)]
Missing newline for: elfcompress -t zlib-gnu a.out -force
Fixes:
./src/elfcompress -t zlib-gnu a.out -force
[28] .zdebug_aranges unchanged, already GNU compressed[29] .zdebug_info unchanged, already GNU compressed[30] .zdebug_abbrev unchanged, already GNU compressed[31] .zdebug_line unchanged, already GNU compressed[32] .zdebug_str unchanged, already GNU compressed[33] .zdebug_line_str unchanged, already GNU compressed[34] .zdebug_rnglists unchanged, already GNU compressed
to:
./src/elfcompress -t zlib-gnu a.out -force
[28] .zdebug_aranges unchanged, already GNU compressed
[29] .zdebug_info unchanged, already GNU compressed
[30] .zdebug_abbrev unchanged, already GNU compressed
[31] .zdebug_line unchanged, already GNU compressed
[32] .zdebug_str unchanged, already GNU compressed
[33] .zdebug_line_str unchanged, already GNU compressed
[34] .zdebug_rnglists unchanged, already GNU compressed
src/ChangeLog:
* elfcompress.c (process_file): Add missing newline.
Martin Liska [Fri, 25 Nov 2022 13:27:19 +0000 (14:27 +0100)]
readelf: print warning for -sW
The option -s accepts in elfutils (compared to binutils) a positional
argument that is name of a symbol table section which should be printed.
Thus, print a reasonable warning if -sW is used:
./src/readelf -sW a.out
WARNING: cannot find section: 'W'
PR29719
src/ChangeLog:
* readelf.c (print_symtab): Change signature and return true if
something is printed.
(process_elf_file): Use it and print warning.
tests/ChangeLog:
* run-readelf-s.sh: Test -sW.
Mark Wielaard [Tue, 15 Nov 2022 16:50:01 +0000 (17:50 +0100)]
debuginfod: Initialize response_data early in debuginfod-client query
On error going to out2, the response_data is freed. So initialize the
response_data to NULL immediately after allocation or when going back
to query_in_parallel.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Aaron Merey [Mon, 7 Nov 2022 16:26:32 +0000 (11:26 -0500)]
debuginfod-client.c: Don't treat 0 as an error code.
Replace 'fd > 0' with 'fd >= 0' to avoid treating a possible file
descriptor as an error code.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Aaron Merey [Fri, 4 Nov 2022 21:22:40 +0000 (17:22 -0400)]
debuginfod_find_section: Always update rc with most recent error code
debuginfod_find_section may attempt to download both the debuginfo
and executable matching the given build-id. If neither of these
files can be found, update rc to ensure that we always return an
accurate error code in this case.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Frank Ch. Eigler [Thu, 3 Nov 2022 14:07:31 +0000 (10:07 -0400)]
debuginfod.cxx: fix coverity-found use-after-release error
The debuginfod_client object lifetime needs more careful handling,
made easier with the defer_dtor<> gadget.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Mark Wielaard [Thu, 3 Nov 2022 12:52:32 +0000 (13:52 +0100)]
readelf: Check gelf_getdyn doesn't return NULL
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Thu, 3 Nov 2022 12:44:35 +0000 (13:44 +0100)]
libdw: Don't dereference and assign values we are skipping
We don't use the FDE address encoding byte, so no reason
to read and store it. Just skip past it.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Thu, 3 Nov 2022 12:38:45 +0000 (13:38 +0100)]
readelf: Check phdr != NULL or shdr != NULL in handle_dynamic.
The compiler doesn't know that when use_dynamic_segment is true,
then phdr should/will be non-NULL and otherwise shdr is non-NULL.
Add explicit checks to help the compiler out and in case an error
is made calling the handle_dynamic function.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Wed, 2 Nov 2022 16:54:11 +0000 (17:54 +0100)]
debuginfod: Mark extract_section function static
The extract_section function in debuginfod-client.c is an internal
function and should not be exported. Mark it as static.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Wed, 2 Nov 2022 12:47:08 +0000 (13:47 +0100)]
Prepare for 0.188
Set version to 0.188
Update elfutils.spec.in
Regenerate po/*.po files
Signed-off-by: Mark Wielaard <mark@klomp.org>
Aaron Merey [Wed, 2 Nov 2022 00:09:36 +0000 (20:09 -0400)]
Changelog: Update entries from previous commits.
Update Changelogs with details from commits
04b1a3aa and
054b3bde9.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Aaron Merey [Tue, 1 Nov 2022 23:07:44 +0000 (19:07 -0400)]
run-debuginfod-section.sh: Avoid zstd-compressed rpms
Only test using rpms without zstd compression. Older versions of
libarchive may fail to handle these.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Aaron Merey [Tue, 1 Nov 2022 21:51:00 +0000 (17:51 -0400)]
debuginfod-client: Fix out-of-bounds write
Return early from path_escape when '\0' is seen in order to prevent
an out-of-bounds write to the dest buffer.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Aaron Merey [Tue, 1 Nov 2022 03:44:23 +0000 (23:44 -0400)]
debuginfod: Support queries for ELF/DWARF sections
Add new function debuginfod_find_section which queries debuginfod
servers for the raw binary contents of the specified ELF/DWARF section
in a file matching the given build-id.
Extend the server webapi to support section queries. Section query
URLS have the following format: /buildid/BUILDID/section/SECTION
The server will attempt to extract the section from a debuginfo file
matching the given build-id. If the debuginfo file cannot be found
or the section has type SHT_NOBITS, the server will attempt to extract
the section from the executable file matching the build-id.
If the server is built without section query support, the client will
attempt to download the debuginfo matching the build-id and extract the
section. If the debuginfo file cannot be found or the section has type
SHT_NOBITS, the server will attempt to download the executable file
matching the build-id and extract the section.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Yonggang Luo [Tue, 20 Sep 2022 08:43:01 +0000 (16:43 +0800)]
Rename 'hello{2,3}.spec.' -> 'hello{2,3}.specfile'
These filenames are invalid on win32.
We don't want to include multiple .spec files for make rpm.
rpmbuild --sign is not supported anymore.
Also include hello3.specfile in EXTRA_DIST.
Escape some macros in the elfutils.spec.in file comments.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Signed-off-by: Mark Wielaard <mark@klomp.org>
Arsen Arsenović [Fri, 28 Oct 2022 20:44:47 +0000 (22:44 +0200)]
readelf: add binutils-style --syms option
This helps people with a lot of built up muscle memory :)
Signed-off-by: Arsen Arsenović <arsen@aarsen.me>
Mark Wielaard [Fri, 28 Oct 2022 21:52:29 +0000 (23:52 +0200)]
libelf: Sync elf.h from glibc
Adds ELFCOMPRESS_ZSTD, NT_S390_PV_CPU_DATA and NT_LOONGARCH_*.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Yonggang Luo [Thu, 20 Oct 2022 18:25:46 +0000 (02:25 +0800)]
lib{asm,cpu,dw,dwfl,dwelf}: Move platform depended include into system.h
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Daniel Thornburgh [Tue, 18 Oct 2022 21:21:32 +0000 (14:21 -0700)]
debuginfod-client: Add DEBUGINFOD_HEADERS_FILE.
This DEBUGINFOD_HEADERS_FILE environment variable names a file to supply
HTTP headers to outgoing requests. Notably, this allows for
Authorization headers to be added from a file under OS access control.
Signed-off-by: Daniel Thornburgh <dthorn@google.com>
Mark Wielaard [Sat, 22 Oct 2022 19:58:19 +0000 (21:58 +0200)]
configure.ac: Update AC_PROG_CC and AC_PROG_LEX for autoconf 2.70
With autoconf 2.70 we must use AC_PROG_CC (which will check for c11
and c99), for earlier versions we'll use AC_PROG_CC_C99. Also use
AC_PROG_LEX([noyywrap]), the extra argument is ignored with earlier
versions, but required for 2.70.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Thu, 27 Oct 2022 16:34:54 +0000 (18:34 +0200)]
Use grep -E instead of egrep, use grep -F instead of fgrep.
GNU grep 3.8 gives a deprecation warning when using egrep or fgrep.
Just use grep -E and grep -F.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Thu, 27 Oct 2022 16:30:37 +0000 (18:30 +0200)]
config: Add BuildRequires socat for run-debuginfod-response-headers.sh
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Wed, 19 Oct 2022 22:02:39 +0000 (00:02 +0200)]
readelf: Handle DW_LLE_GNU_view_pair
DW_LLE_GNU_view_pair is used by gcc -gvariable-location-views=incompat5.
As described in http://www.fsfla.org/~lxoliva/papers/sfn/dwarf6-sfn-lvu.txt
and proposed for DWARF6 https://dwarfstd.org/ShowIssue.php?issue=170427.1
Signed-off-by: Mark Wielaard <mark@klomp.org>
Yonggang Luo [Thu, 20 Oct 2022 18:25:44 +0000 (02:25 +0800)]
libdw: Use #include <system.h> instead of <endian.h> in memory-access.h
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Yonggang Luo [Thu, 20 Oct 2022 18:25:43 +0000 (02:25 +0800)]
libelf/libdwfl: Remove LIB_SYSTEM_H define in lib{elf,dwfl}_crc32.c
rationale: https://sourceware.org/bugzilla/show_bug.cgi?id=21001
If we don't remove this macro, when try #include <system.h> in
libdw/memory-access.h wont' take effect because
"#define LIB_SYSTEM_H 1"
The compile error:
./../libdw/memory-access.h:390:12: error: implicit declaration of
function ‘bswap_32’ [-Werror=implicit-function-declaration]
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Yonggang Luo [Thu, 20 Oct 2022 18:25:42 +0000 (02:25 +0800)]
libebl: Don't #include <dlfcn.h> in eblclosebackend.c and eblopenbackend.c
It's not accessed symbols in dlfcn.h in eblclosebackend.c and
eblopenbackend.c
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Frank Ch. Eigler [Mon, 17 Oct 2022 14:07:39 +0000 (10:07 -0400)]
debuginfod: report libmicrohttpd version on startup
To assist troubleshooting with intermittent bugs.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Yonggang Luo [Tue, 20 Sep 2022 08:43:05 +0000 (16:43 +0800)]
Strip __ prefix from __BYTE_ORDER __LITTLE_ENDIAN and __BIG_ENDIAN
__BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined by the
gcc/clang preprocessor. BYTE_ORDER, LITTLE_ENDIAN and BIG_ENDIAN are
defined in <endian.h>.
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Yonggang Luo [Sat, 15 Oct 2022 16:36:21 +0000 (00:36 +0800)]
Move the #include <libintl.h> into eu-config.h
So we do not need include in each file.
And indeed the macro
#define _(Str) dgettext ("elfutils", Str)
access libintl function dgettext, so it's make more sense
#include <libintl.h> in file eu-config.h
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Yonggang Luo [Sat, 15 Oct 2022 16:36:20 +0000 (00:36 +0800)]
move platform depended include into system.h of libelf
All of these files either #include <system.h> directly or #include "libelfP.h"
And now "libelfP.h also #include <system.h>, so the platform depended include
can be moved to system.h safely
Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Mark Wielaard [Sun, 16 Oct 2022 16:23:06 +0000 (18:23 +0200)]
tests: include config.h first.
Otherwise some symbols (lseek, open) might not get the 64bit offset
variants because they don't pick up _FILE_OFFSET_BITS.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 16 Oct 2022 16:02:46 +0000 (18:02 +0200)]
tests: Check lseek, read and malloc results with correct types in test.
When compiling dwfl-report-offline-memory.c on some systems (latest
gcc/glibc and --enable-sanitize-undefined) we might get:
In file included from /usr/include/features.h:490,
from /usr/include/assert.h:35,
from dwfl-report-offline-memory.c:18:
In function ‘read’,
inlined from ‘main’ at dwfl-report-offline-memory.c:68:23:
/usr/include/bits/unistd.h:38:10: error: ‘__read_alias’ specified size
18446744073709551615
exceeds maximum object size
9223372036854775807 [-Werror=stringop-overflow=]
38 | return __glibc_fortify (read, __nbytes, sizeof (char),
| ^~~~~~~~~~~~~~~
/usr/include/bits/unistd.h: In function ‘main’:
/usr/include/bits/unistd.h:26:16: note: in a call to function ‘__read_alias’ declared with
attribute ‘access (write_only, 2, 3)’
26 | extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,
| ^~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [Makefile:2461: dwfl-report-offline-memory.o] Error 1
Fix by using the correct types and checking all return values.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Aleksei Vetrov [Tue, 20 Sep 2022 13:36:37 +0000 (13:36 +0000)]
libdwfl: add dwfl_report_offline_memory
This method allows to read and report ELF from memory instead of opening
a file. That way arbitrary memory can be worked with, e.g. when coming
from a stream without the need to persist.
Another useful application is for fuzzing, because fuzzers might be able
to track accesses to the memory and change the fuzzer input to cover
more edge cases through more targeted input. Hence, add a new function
along with a test case.
Signed-off-by: Aleksei Vetrov <vvvvvv@google.com>
Khem Raj [Tue, 13 Sep 2022 16:40:06 +0000 (09:40 -0700)]
tests: Add libeu to tests needing error() API
A local error() implementation is used when libc does not provide it,
therefore link in libeu.a which contains this function in tests needing
error() API
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Aaron Merey [Wed, 28 Sep 2022 14:04:23 +0000 (10:04 -0400)]
debuginfod-client: Ensure only negative error codes returned.
Switch a couple error codes from positive to negative so they aren't
interpreted as file descriptors by the caller.
河辺 岳人 [Tue, 27 Sep 2022 12:10:39 +0000 (21:10 +0900)]
Retrive 64bit timestamp from curl_easy_getinfo on _TIME_BITS=64 environment
On 32bit system compiled with -D_TIME_BITS=64, following tests failed:
FAIL: run-debuginfod-archive-test.sh
FAIL: run-debuginfod-archive-groom.sh
FAIL: run-debuginfod-archive-rename.sh
FAIL: run-debuginfod-federation-sqlite.sh
FAIL: run-debuginfod-federation-metrics.sh
FAIL: run-debuginfod-federation-link.sh
due to tests/debuginfod-subr.sh:archive_test failing on
"test $fileame -ot `pwd`", with LHS file having a bogus timestamp.
LHS is generated by debuginfo-find as a cache file.
I'm not sure the fix is the correct way, but
since -D_TIME_BITS=64 mandates -D_FILE_OFFSET_BITS=64 in glibc,
this does work on glibc environment.
Signed-off-by: Taketo Kabe <kabe@sra-tohoku.co.jp>
Mark Wielaard [Sun, 28 Aug 2022 15:46:08 +0000 (17:46 +0200)]
ar: Correct -N COUNT off-by-one
When using instance [COUNT], the instance check is wrong.
instance-- == 0 should be --instance == 0.
Add a testcase run-ar-N.sh that uses -N COUNT with extract and delete
operations checking the right instance was extracted and deleted.
https://sourceware.org/bugzilla/show_bug.cgi?id=28725
Reported-by: panxiaohe <panxh_ran@163.com>
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 28 Aug 2022 17:51:13 +0000 (19:51 +0200)]
libelf: Correctly decode ar_mode as octal string
ar_mode is encoded as an octal ascii string, not decimal. Add a new
OCT_FIELD macro to decode it.
https://sourceware.org/bugzilla/show_bug.cgi?id=28729
Signed-off-by: Mark Wielaard <mark@klomp.org>
Frank Ch. Eigler [Thu, 8 Sep 2022 13:47:45 +0000 (09:47 -0400)]
PR28284 cont'd, ->winning_headers reset at start of new query
Mark noted we need to ditch the last client ->winning_headers along
with the last ->url.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Martin Liska [Thu, 8 Sep 2022 09:12:53 +0000 (11:12 +0200)]
add debuginfod_get_headers if DUMMY_LIBDEBUGINFOD is used
Signed-off-by: Martin Liska <mliska@suse.cz>
Frank Ch. Eigler [Fri, 2 Sep 2022 16:41:38 +0000 (12:41 -0400)]
PR28284: add tweaks on previous debuginfod x-debuginfod* header forwarding work
Embrace case-independent headers, more fully document, handle HTTP \r.
In addition to test case, hand-tested against fedora debuginfod
instances, running federated servers under valgrind.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Noah Sanci [Wed, 15 Jun 2022 14:07:29 +0000 (10:07 -0400)]
PR28284 - Debuginfod header functionality implemented
Debuginfod and debuginfod clients are now equipped to send
and receive http headers prefixed with X-DEBUGINFOD and
print them in verbose mode for more context
Signed-off-by: Noah Sanci <nsanci@redhat.com>
Aaron Merey [Sat, 3 Sep 2022 01:23:32 +0000 (21:23 -0400)]
debuginfod: Use auto-sized connection pool when -C is not given with arg
Since commit
4b42d9ad, libmicrohttpd's epoll event loop is used when
available in which case we must disable its setting for spawning a thread
per request. This contradicts the debuginfod doc's description of '-C',
which indicates that if this command line option is not given then the
thread pool size is unbounded.
Fix this by using an auto-sized thread pool when '-C' is not given, just
as we do when it's given with no argument. Update the doc's description
of '-C'.
Also use a fixed-size pool even if epoll is not supported. The unbounded
pool config cannot be considered entirely reliable as it appears to cause
random fails in the run-debuginfod-webapi-concurrency test.
Signed-off-by: Aaron Merey <amerey@redhat.com>
Martin Liska [Wed, 17 Aug 2022 13:30:19 +0000 (15:30 +0200)]
Add missing changelog entries.
Frank Ch. Eigler [Wed, 17 Aug 2022 13:01:23 +0000 (09:01 -0400)]
config/debuginfod.sysconfig: Clarify & classify the variables
Some of them are for debuginfod command line; others are environment
variables for the embedded client library.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Martin Liska [Wed, 17 Aug 2022 12:24:32 +0000 (14:24 +0200)]
Add new debuginfod.sysconfig value DEBUGINFOD_EXTRA_ARGS
Split DEBUGINFOD_PATHS and put non-path arguments to the newly created
variable called DEBUGINFOD_EXTRA_ARGS.
Signed-off-by: Martin Liska <mliska@suse.cz>
Martin Liska [Wed, 17 Aug 2022 07:38:17 +0000 (09:38 +0200)]
debuginfod: fix http_requests_total{type="debuginfo"} when dwz is used
When dwarf_extract_source_paths is called, it can call handle_buildid
when a rpm file used dwz. Ignore such internal request in
http_requests_total statistics.
Signed-off-by: Martin Liska <mliska@suse.cz>
Martin Liska [Wed, 17 Aug 2022 07:11:10 +0000 (09:11 +0200)]
debuginfod: print filename for "cannot open archive" error
Report the file that has such a problem so that one can inspect it.
Signed-off-by: Martin Liska <mliska@suse.cz>
Martin Liska [Tue, 16 Aug 2022 13:14:26 +0000 (15:14 +0200)]
Support nullglob in profile.*.in files
In openSUSE we have the following RPM checker that uses
shopt -s nullglob:
https://github.com/openSUSE/post-build-checks/blob/master/checks/50-check-libtool-deps#L31
The script loads all /etc/profile.d/*.sh files via source $FILE which
can end up by stuck cat (with no arguments):
shopt -s nullglob ; cat "/etc/debuginfod"/*.urls
(stuck)
Frank Ch. Eigler [Mon, 15 Aug 2022 10:20:10 +0000 (06:20 -0400)]
PR29474: debuginfod
Previous code sometimes confused debuginfod with concurrent queries
targeting the same RPM. One thread fetching & prefetching, the other
thread misinterpreted the sudden presence of its target file in the
fdcache as a mere unnecessary prefetch duplicate. But if it was the
other thread's target file, previous code would -skip- it completely,
resulting in a 404 error. New code allows the other thread to also
decompress the target file and return it, and still continue to its
own prefetching process for other files.
There's a performance trade-off here. Another option would be for the
other thread to check the fdcache regularly and abort its own
prefetch/fetch/prefetch loop early in case of a sudden target file
hit. That'd save CPU probably but it'd stop prefetching of later
segments of the input archive, which could save future time.
Automated testing is too time/load sensitive to attempt. Confirmed
working with Martin's stress tester.
Reported-By: Martin Liška <mliska@suse.cz>
Signed-Off-By: Frank Ch. Eigler <fche@redhat.com>
Andreas Schwab [Wed, 10 Aug 2022 08:52:42 +0000 (10:52 +0200)]
readelf: Handle SHT_RISCV_ATTRIBUTES like SHT_GNU_ATTRIBUTES
Signed-off-by: Andreas Schwab <schwab@suse.de>
Ulrich Drepper [Thu, 11 Aug 2022 13:17:33 +0000 (15:17 +0200)]
Fill in fde_augmentation_data_size in dwarf_next_cfi
(dwarf_next_cfi): Don't skip processing the augmentation string.
Be more stringent what to accept.
Andreas Schwab [Tue, 9 Aug 2022 08:29:53 +0000 (10:29 +0200)]
elflint: Allow zero p_memsz for PT_RISCV_ATTRIBUTES
The RISCV_ATTRIBUTES segment is not meant to be loaded.
Signed-off-by: Andreas Schwab <schwab@suse.de>
Andreas Schwab [Tue, 9 Aug 2022 07:54:28 +0000 (09:54 +0200)]
backends: Handle new RISC-V specific definitions
Handle PT_RISCV_ATTRIBUTES, SHT_RISCV_ATTRIBUTES, DT_RISCV_VARIANT_CC.
Signed-off-by: Andreas Schwab <schwab@suse.de>
Andreas Schwab [Mon, 8 Aug 2022 11:44:08 +0000 (13:44 +0200)]
libelf: Sync elf.h from glibc
Adds PT_RISCV_ATTRIBUTES, SHT_RISCV_ATTRIBUTES, PT_AARCH64_MEMTAG_MTE,
RELR definitions, LoongArch relocations.
dwelf_elf_e_machine_string was updated to handle EM_LOONGARCH, and
ebl_dynamic_tag_name was updated to handle the new RELR dynamic tags.
Signed-off-by: Andreas Schwab <schwab@suse.de>
Mark Wielaard [Fri, 5 Aug 2022 15:17:54 +0000 (17:17 +0200)]
lib: Add documentation to explain concurrent htab resizing.
Document which lock is held by which thread and how moving the
htab data is coordinated.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Fri, 5 Aug 2022 17:09:36 +0000 (19:09 +0200)]
po: standardize Project-Id-Version to just elfutils
The po/pl.po file already just said Project-Id-Version: elfutils\n
Do the same for the other po files which had somewhat odd names.
The generated pot file will still include the version number too.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Sergei Trofimovich via Elfutils-devel [Sat, 6 Aug 2022 08:55:06 +0000 (09:55 +0100)]
tests: run-low_high_pc.sh: drop redundant 'lx' suffix
Noticed when debugged test failure:
lowpc: 8049000, highpc: 8049000lx
../sysdeps/i386/crti.S: [2def] '_init' highpc <= lowpc
Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
Josef Cejka [Wed, 3 Aug 2022 11:33:21 +0000 (13:33 +0200)]
debuginfod: optimize regular expressions in groom()
Check if applying of -I and -X during grooming is enabled
before the regular expressions are matched.
Signed-off-by: Josef Cejka <jcejka@suse.de>
Mark Wielaard [Mon, 1 Aug 2022 10:18:30 +0000 (12:18 +0200)]
tests: Add initial scan wait_ready in run-debuginfod-percent-escape.sh
Otherwise wait_ready for thread_work_total{role="traverse"} after the
kill -USR1 can be either zero, one or two. We want to see it change to
one first, then after the kill -USR1 it should change to two to be sure
the scan happened after the new binary was created.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Mon, 1 Aug 2022 00:02:16 +0000 (02:02 +0200)]
readelf: memrchr searches backwards but takes the start buf as argument
The bug (caught by valgrind) was giving memrchr to end of the buffer.
Also as cleanup, Use d_val not d_ptr for calculating offset.
Di Chen [Thu, 28 Apr 2022 11:55:33 +0000 (19:55 +0800)]
readelf: Support --dynamic with --use-dynamic
Currently, eu-readelf is using section headers to dump the dynamic
segment information (print_dynamic -> handle_dynamic).
This patch adds new options to eu-readelf (-D, --use-dynamic)
for (-d, --dynamic).
https://sourceware.org/bugzilla/show_bug.cgi?id=28873
Signed-off-by: Di Chen <dichen@redhat.com>
Di Chen [Thu, 28 Jul 2022 08:31:05 +0000 (16:31 +0800)]
libdwfl: Add new function dwfl_frame_reg
Dwfl has most of the infrastructure to keep the full unwind state,
including the state of unwound registers per frame using
Dwfl_Thread_Callbacks. But there is no public API to access the state,
except for the PC (dwfl_frame_pc).
This commit adds a new function dwfl_frame_reg to get the value of the
DWARF register number in the given frame.
https://sourceware.org/bugzilla/show_bug.cgi?id=28579
Signed-off-by: Di Chen <dichen@redhat.com>
Mark Wielaard [Thu, 28 Jul 2022 13:31:12 +0000 (15:31 +0200)]
libdwfl: Rewrite reading of ar_size in elf_begin_rand
With GCC 12.1.1, glibc 2.35, -fsanitize=undefined and
-D_FORTIFY_SOURCE=3 we get the following error message:
In file included from /usr/include/ar.h:22,
from ../libelf/libelfP.h:33,
from core-file.c:31:
In function ‘pread’,
inlined from ‘pread_retry’ at ../lib/system.h:188:21,
inlined from ‘elf_begin_rand’ at core-file.c:86:16,
inlined from ‘core_file_read_eagerly’ at core-file.c:205:15:
/usr/include/bits/unistd.h:74:10: error: ‘__pread_alias’ writing 58 or more bytes into a region of size 10 overflows the destination [-Werror=stringop-overflow=]
74 | return __glibc_fortify (pread, __nbytes, sizeof (char),
| ^~~~~~~~~~~~~~~
/usr/include/ar.h: In function ‘core_file_read_eagerly’:
/usr/include/ar.h:41:10: note: destination object ‘ar_size’ of size 10
41 | char ar_size[10]; /* File size, in ASCII decimal. */
| ^~~~~~~
/usr/include/bits/unistd.h:50:16: note: in a call to function ‘__pread_alias’ declared with attribute ‘access (write_only, 2, 3)’
50 | extern ssize_t __REDIRECT (__pread_alias,
| ^~~~~~~~~~
cc1: all warnings being treated as errors
The warning disappears when dropping either -fsanitize=undefined
or when using -D_FORTIFY_SOURCE=2. It looks like a false positive.
But I haven't figured out how/why it happens.
The code is a little tricky to proof correct though. The ar_size
field is a not-zero terminated string ASCII decimal, right-padded
with spaces. Which is then converted with strtoll. Relying on the
fact that the struct ar_hdr is zero initialized, so there will be
a zero byte after the ar_size field.
Rewrite the code to just use a zero byte terminated char array.
Which is much easier to reason about. As a bonus the error disappears.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Josef Cejka [Fri, 29 Jul 2022 16:05:05 +0000 (12:05 -0400)]
debuginfod: create indexes to speed up grooming
Create indexes on _r_de and _f_de tables
to speed up delete operations called by groom() function.
Primary keys of those tables are optimalized to search rows
by buildids so delete by file and mtime attributes
has to scan the whole table. On large database can single
delete query take minutes and grooming will be aborted
before completion by time limit.
New indexes are compatible with current sqlite schema.
Signed-off-by: Josef Cejka <jcejka@suse.de>
Shahab Vahedi [Mon, 18 Jul 2022 17:44:06 +0000 (13:44 -0400)]
dwfl_get_debuginfod_client: add dummy parameter for --disable-libdebuginfod
Since the stub version of "dwfl_get_debuginfod_client" doesn't name its
parameter, building elfuitls fails on a system with gcc 10.2.1:
-----------------------------------------------------------------------------
$ ./configure ... --disable-libdebuginfod
$ make
Making all in libdwfl
CC debuginfod-client.o
/src/libdwfl/debuginfod-client.c: In function 'dwfl_get_debuginfod_client':
/src/libdwfl/debuginfod-client.c:145:29: error: parameter name omitted
145 | dwfl_get_debuginfod_client (Dwfl *)
| ^~~~~~
make[2]: *** [Makefile:707: debuginfod-client.o] Error 1
-----------------------------------------------------------------------------
This fixes the issue by providing a name for the unused parameter.
Signed-off-by: Shahab Vahedi <shahab@synopsys.com>
Mark Wielaard [Wed, 13 Jul 2022 20:34:36 +0000 (22:34 +0200)]
Move dwfl_get_debuginfod_client to ELFUTILS_0.188
0.187 was already released, so add new function to 0.188. Also add
NEWS entry and INTUSE.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Milian Wolff [Thu, 7 Jul 2022 17:33:35 +0000 (19:33 +0200)]
Introduce public dwfl_get_debuginfod_client API
Dwfl can use debuginfod internally, which was so far totally opaque
to the outside. While the functionality is great for users of the
dwfl API, the long wait times induced by downloading of data over
debuginfod lead to complaints by endusers. To offer them a bit more
insight into the internal ongoings, one can now use e.g.
`debuginfod_set_progressfn` on the handle returned by
`dwfl_get_debuginfod_client` to report download progress.
Rename get_client to dwfl_get_debuginfod_client and make it public.
Unconditionally compile debuginfod-client.c and stub the new public
function and always return NULL when debuginfod integration was
disabled.
Signed-off-by: Milian Wolff <mail@milianw.de>
Frank Ch. Eigler [Wed, 8 Jun 2022 22:18:08 +0000 (18:18 -0400)]
doc/debuginfod.8: tiny obvious typo fix
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Ulrich Drepper [Wed, 1 Jun 2022 11:14:27 +0000 (13:14 +0200)]
Arm Ehdr flag printing
Arm needs to decode flags and I modeled it after the binutils code.
The same messages are printed. Given the requirement of the interface
and the ABIs the current version of the callback function isn't
sufficient unless one wants to create a stateful interface. The
problem is that most flags need to be interpreted in the context of
the ABI version. So I changed the API to also pass the original flag
value. This shouldn't be a problem because there are no users yet.
There is also a bug in ebl_machine_flag_name. When copying the string
provided by the callback cp is moved past the NUL byte. It should
move to the NUL byte. Otherwise one cannot anything but the first
added flag description. Finally some cosmetic changes (space after
each comma in the output).
Signed-off-by: Mark Wielaard <mark@klomp.org>
Frank Ch. Eigler [Fri, 3 Jun 2022 16:56:43 +0000 (12:56 -0400)]
NEWS & ChangeLog: add debuginfod blurbs
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Michael Trapp [Fri, 3 Jun 2022 16:54:17 +0000 (12:54 -0400)]
debuginfod: add --disable-source-scan option
--disable-source-scan disables scanning of the dwarf source info
of debuginfo sections. The source info is not required in setups
without source code access.
Signed-off-by: Michael Trapp <michael.trapp@sap.com>
Noah Sanci [Fri, 13 May 2022 18:32:27 +0000 (14:32 -0400)]
PR28577: Make run-debuginfod-fd-prefetch-caches.sh test something
Update to the run-debuginfod-fd-prefetch to make the test more
sound.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Noah Sanci [Thu, 2 Jun 2022 18:26:46 +0000 (14:26 -0400)]
Added debuginfod.service.8 manual page.
Signed-off-by: Noah Sanci <nsanci@redhat.com>
Mark Wielaard [Thu, 2 Jun 2022 15:36:39 +0000 (17:36 +0200)]
tests: Disable run-debuginfod-federation-metrics.sh for old libmicrohttpd
On really old libmicrohttpd the run-debuginfod-federation-metrics.sh
test will crash debuginfod after too many file descriptors have been
used. libmicrohttpd looses track of the state and aborts instead of
producing an error. Just disable the testcase on these very old versions.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 15 May 2022 19:53:41 +0000 (21:53 +0200)]
libdwfl: Update docs and nonnull attributes for dwfl_module_addrinfo
Make clear that both the offset and sym arguments cannot be NULL.
https://bugzilla.redhat.com/show_bug.cgi?id=1986555
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 8 May 2022 19:16:10 +0000 (21:16 +0200)]
debuginfod: update mtime of interval_path as early as possible
Call utime on interval_path file as soon as the thread is committed to
cleanup the cache files. This will prevent other threads trying to
also commit to cleaning the cache files. Having multiple threads try
to clean the cache simultaniously doesn't improve cleanup speed
because the threads will try to delete the files in the same order.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 8 May 2022 17:27:48 +0000 (19:27 +0200)]
debuginfod: Remove debuginfod_init_cache
debuginfod_init_cache would create all config files if they didn't
exist yet. It always made two stat calls. Then debuginfod_clean_cache
would call debuginfod_config_cache which did the same checks and
created any missing config files. Just make sure the cache_path
directory exists and remove debuginfod_init_cache before calling
debuginfod_clean_cache.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 8 May 2022 21:55:19 +0000 (23:55 +0200)]
debuginfod: Make sure debuginfod_config_cache always returns valid stat
If the condig file which value was requested from
debuginfod_config_cache didn't exist yet, stat would fail and no valid
struct stat would be returned even when the file was correctly
created. Fix this by always using O_CREAT to open the file, and reuse
that file descriptor to call fstat and for either writing the default
value or reading the config file value.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 8 May 2022 08:59:52 +0000 (10:59 +0200)]
debuginfod: Always request servname from getnameinfo for conninfo.
When getting the connection info getnameinfo is called getting the
hostname and servname except when the sockaddr is a pure ipv6
address. In that last case only hostname is requested. Since servname
is stack allocated and not initialized it might contain garbage which
is then put in the log. Just always request both hostname and servname
with NI_NUMERICHOST | NI_NUMERICSERV.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Sun, 8 May 2022 09:00:42 +0000 (11:00 +0200)]
strip: Add more NULL check
When gelf_getshdr, gelf_getrela, gelf_getrel or gelf_getsymshndx
return NULL it is an internal error which we want to report instead of
crashing.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Mon, 9 May 2022 16:47:45 +0000 (18:47 +0200)]
libdw: Add sanity check to store_implicit_value
Don't just skip the block length, but check it is equal to the
op->number that we are going to use as length.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Mon, 9 May 2022 16:20:02 +0000 (18:20 +0200)]
debuginfod: Check all curl_easy_setopt calls
curl_easy_setup can fail for various reasons. Add a curl_easy_setopt_ck
macro to check all curl_easy_setopt calls and provides a human readable
error message in verbose mode.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Mon, 9 May 2022 15:32:24 +0000 (17:32 +0200)]
debuginfod: Check result of curl_easy_getinfo in debuginfod_write_callback
This was the only place in debuginfod-client.c where we didn't check
the result of curl_easy_getinfo. Just check it to make things consistent.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Tue, 10 May 2022 10:31:04 +0000 (12:31 +0200)]
elfcompress: Add sanity checks to make sure to not override variable
The process_file code is a little tricky. Add sanity checks to make
sure shstrtab_name, shstrtab_newname and symstrents are only set once.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Noah Sanci [Fri, 13 May 2022 14:27:29 +0000 (10:27 -0400)]
PR28577: run-debuginfod-fd-prefetch-caches.sh now tests something
run-debuginfod-fd-prefetch-caches.sh now tests the maximum fd
and mb values of prefetch and fd (least recently used) caches.
Signed-off-by: Noah Sanci <nsanci@redhat.com>
Mark Wielaard [Thu, 5 May 2022 22:29:28 +0000 (00:29 +0200)]
debuginfod: Use MHD_USE_EPOLL for libmicrohttpd version 0.9.51 or higher
Also disable MHD_USE_THREAD_PER_CONNECTION when using MHD_USE_EPOLL.
https://sourceware.org/bugzilla/show_bug.cgi?id=29123
Signed-off-by: Mark Wielaard <mark@klomp.org>
Mark Wielaard [Thu, 5 May 2022 21:59:57 +0000 (23:59 +0200)]
debuginfod: Try without MHD_USE_DUAL_STACK if MHD_start_daemon fails
On a systems that have ipv6 disabled debuginfod doesn't start up
anymore because libhttpd MHD_USE_DUAL_STACK only works if it can
open an ipv6 socket. If MHD_start_daemon with MHD_USE_DUAL_STACK
fails try again without that flag set.
https://sourceware.org/bugzilla/show_bug.cgi?id=29122
Signed-off-by: Mark Wielaard <mark@klomp.org>
Frank Ch. Eigler [Mon, 9 May 2022 23:26:07 +0000 (19:26 -0400)]
debuginfod.8: Tweak wording of fdcache operation & parameters.
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
Noah Sanci [Mon, 9 May 2022 17:15:04 +0000 (13:15 -0400)]
PR29098: debuginfod - set default prefetch cache size to >0
Added default value to fdcache_prefetch_mds and fdcache_prefetch_fds.
Defaults to one half of corresponging fdcache's values.
Signed-off-by: Noah Sanci <nsanci@redhat.com>
foo
Frank Ch. Eigler [Wed, 4 May 2022 14:26:42 +0000 (10:26 -0400)]
PR29117: fix fd leak in debuginfod client for cache-miss files
Correct a nasty fd leak and a few less nasty leaks in the debuginfod
client code. The nasty one impacts long-lived apps such as debuginfod
servers.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Signed-off-by: Frank Ch. Eigler <fche@redhat.com>