summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* config: Add BuildRequires socat for run-debuginfod-response-headers.shMark Wielaard2022-10-272-0/+6
| | | | Signed-off-by: Mark Wielaard <mark@klomp.org>
* readelf: Handle DW_LLE_GNU_view_pairMark Wielaard2022-10-274-1/+27
| | | | | | | | 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>
* libdw: Use #include <system.h> instead of <endian.h> in memory-access.hYonggang Luo2022-10-272-2/+6
| | | | Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
* libelf/libdwfl: Remove LIB_SYSTEM_H define in lib{elf,dwfl}_crc32.cYonggang Luo2022-10-274-2/+8
| | | | | | | | | | | | | 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>
* libebl: Don't #include <dlfcn.h> in eblclosebackend.c and eblopenbackend.cYonggang Luo2022-10-273-2/+5
| | | | | | | It's not accessed symbols in dlfcn.h in eblclosebackend.c and eblopenbackend.c Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
* debuginfod: report libmicrohttpd version on startupFrank Ch. Eigler2022-10-172-0/+6
| | | | | | To assist troubleshooting with intermittent bugs. Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
* Strip __ prefix from __BYTE_ORDER __LITTLE_ENDIAN and __BIG_ENDIANYonggang Luo2022-10-1717-31/+59
| | | | | | | | __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>
* Move the #include <libintl.h> into eu-config.hYonggang Luo2022-10-1632-31/+1
| | | | | | | | | | 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>
* move platform depended include into system.h of libelfYonggang Luo2022-10-1624-43/+43
| | | | | | | | 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>
* tests: include config.h first.Mark Wielaard2022-10-162-1/+6
| | | | | | | 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>
* tests: Check lseek, read and malloc results with correct types in test.Mark Wielaard2022-10-162-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* libdwfl: add dwfl_report_offline_memoryAleksei Vetrov2022-10-1613-4/+221
| | | | | | | | | | | | | 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>
* tests: Add libeu to tests needing error() APIKhem Raj2022-10-132-30/+34
| | | | | | | | 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>
* debuginfod-client: Ensure only negative error codes returned.Aaron Merey2022-09-282-2/+7
| | | | | Switch a couple error codes from positive to negative so they aren't interpreted as file descriptors by the caller.
* Retrive 64bit timestamp from curl_easy_getinfo on _TIME_BITS=64 environment河辺 岳人2022-09-272-0/+9
| | | | | | | | | | | | | | | | | | | | | 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>
* ar: Correct -N COUNT off-by-oneMark Wielaard2022-09-145-2/+81
| | | | | | | | | | | | | 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>
* libelf: Correctly decode ar_mode as octal stringMark Wielaard2022-09-142-2/+28
| | | | | | | | | 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>
* PR28284 cont'd, ->winning_headers reset at start of new queryFrank Ch. Eigler2022-09-082-1/+8
| | | | | | | 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>
* add debuginfod_get_headers if DUMMY_LIBDEBUGINFOD is usedMartin Liska2022-09-082-0/+6
| | | | Signed-off-by: Martin Liska <mliska@suse.cz>
* PR28284: add tweaks on previous debuginfod x-debuginfod* header forwarding workFrank Ch. Eigler2022-09-0711-65/+96
| | | | | | | | 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>
* PR28284 - Debuginfod header functionality implementedNoah Sanci2022-09-0611-8/+122
| | | | | | | | 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>
* debuginfod: Use auto-sized connection pool when -C is not given with argAaron Merey2022-09-054-18/+25
| | | | | | | | | | | | | | | | | | 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>
* Add missing changelog entries.Martin Liska2022-08-172-0/+20
|
* config/debuginfod.sysconfig: Clarify & classify the variablesFrank Ch. Eigler2022-08-172-4/+18
| | | | | | | 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>
* Add new debuginfod.sysconfig value DEBUGINFOD_EXTRA_ARGSMartin Liska2022-08-172-2/+3
| | | | | | | 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>
* debuginfod: fix http_requests_total{type="debuginfo"} when dwz is usedMartin Liska2022-08-171-2/+4
| | | | | | | | 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>
* debuginfod: print filename for "cannot open archive" errorMartin Liska2022-08-171-2/+8
| | | | | | Report the file that has such a problem so that one can inspect it. Signed-off-by: Martin Liska <mliska@suse.cz>
* Support nullglob in profile.*.in filesMartin Liska2022-08-162-2/+2
| | | | | | | | | | | | 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)
* PR29474: debuginfodFrank Ch. Eigler2022-08-152-1/+8
| | | | | | | | | | | | | | | | | | | | | | | 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>
* readelf: Handle SHT_RISCV_ATTRIBUTES like SHT_GNU_ATTRIBUTESAndreas Schwab2022-08-132-1/+7
| | | | Signed-off-by: Andreas Schwab <schwab@suse.de>
* Fill in fde_augmentation_data_size in dwarf_next_cfiUlrich Drepper2022-08-112-20/+46
| | | | | (dwarf_next_cfi): Don't skip processing the augmentation string. Be more stringent what to accept.
* elflint: Allow zero p_memsz for PT_RISCV_ATTRIBUTESAndreas Schwab2022-08-092-1/+9
| | | | | | The RISCV_ATTRIBUTES segment is not meant to be loaded. Signed-off-by: Andreas Schwab <schwab@suse.de>
* backends: Handle new RISC-V specific definitionsAndreas Schwab2022-08-093-0/+58
| | | | | | Handle PT_RISCV_ATTRIBUTES, SHT_RISCV_ATTRIBUTES, DT_RISCV_VARIANT_CC. Signed-off-by: Andreas Schwab <schwab@suse.de>
* libelf: Sync elf.h from glibcAndreas Schwab2022-08-086-4/+113
| | | | | | | | | | 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>
* lib: Add documentation to explain concurrent htab resizing.Mark Wielaard2022-08-082-6/+28
| | | | | | | Document which lock is held by which thread and how moving the htab data is coordinated. Signed-off-by: Mark Wielaard <mark@klomp.org>
* po: standardize Project-Id-Version to just elfutilsMark Wielaard2022-08-085-6/+13
| | | | | | | | 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>
* tests: run-low_high_pc.sh: drop redundant 'lx' suffixSergei Trofimovich via Elfutils-devel2022-08-082-1/+5
| | | | | | | | | 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>
* debuginfod: optimize regular expressions in groom()Josef Cejka2022-08-032-3/+13
| | | | | | | 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>
* tests: Add initial scan wait_ready in run-debuginfod-percent-escape.shMark Wielaard2022-08-012-2/+7
| | | | | | | | | 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>
* readelf: memrchr searches backwards but takes the start buf as argumentMark Wielaard2022-08-012-4/+9
| | | | | | 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.
* readelf: Support --dynamic with --use-dynamicDi Chen2022-08-017-27/+280
| | | | | | | | | | | | 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>
* libdwfl: Add new function dwfl_frame_regDi Chen2022-07-3110-29/+66
| | | | | | | | | | | | | | 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>
* libdwfl: Rewrite reading of ar_size in elf_begin_randMark Wielaard2022-07-292-10/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* debuginfod: create indexes to speed up groomingJosef Cejka2022-07-292-0/+8
| | | | | | | | | | | | | | | 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>
* dwfl_get_debuginfod_client: add dummy parameter for --disable-libdebuginfodShahab Vahedi2022-07-182-1/+6
| | | | | | | | | | | | | | | | | | | | | 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>
* Move dwfl_get_debuginfod_client to ELFUTILS_0.188Mark Wielaard2022-07-136-3/+22
| | | | | | | 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>
* Introduce public dwfl_get_debuginfod_client APIMilian Wolff2022-07-136-9/+40
| | | | | | | | | | | | | | | | | 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>
* doc/debuginfod.8: tiny obvious typo fixFrank Ch. Eigler2022-06-081-1/+1
| | | | Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
* Arm Ehdr flag printingUlrich Drepper2022-06-0612-8/+225
| | | | | | | | | | | | | | | | | | 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>
* NEWS & ChangeLog: add debuginfod blurbsFrank Ch. Eigler2022-06-033-0/+13
| | | | Signed-off-by: Frank Ch. Eigler <fche@redhat.com>