From c6e1f664254a8ae16e2e6d726c5159ecb7f27d3b Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Mon, 7 Jun 2021 22:37:42 +0100 Subject: elflint: fix undefined 'buffer_left' reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Link failure is reproducible on gcc-11.1.0 target: ``` $ autoreconf -i -f $ ./configure --enable-maintainer-mode --disable-debuginfod \ --host=x86_64-pc-linux-gnu \ CFLAGS=-march=znver3 \ CXXFLAGS=-march=znver3 \ LDFLAGS=" " $ make CCLD elflint ld: elflint.o: in function `check_attributes': elflint.c:(.text+0xdcff): undefined reference to `buffer_left' ld: elflint.c:(.text+0xe557): undefined reference to `buffer_left' ``` It happens due to possible external linkage of `buffer_left()`. The change forces local linkage to always use local definition (either inline or out-of-line). Reported-by: Toralf Förster Bug: https://bugs.gentoo.org/794601 Signed-off-by: Sergei Trofimovich Fixes: e95d1fbb ("elflint: Pull left() in file scope") Signed-off-by: Dmitry V. Levin --- src/ChangeLog | 5 +++++ src/elflint.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 2c7be185..698b3c77 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2021-06-06 Sergei Trofimovich + + * elflint.c (buffer_left): Mark as 'static' to avoid external linkage + failure. + 2021-05-12 Dmitry V. Levin * elfcompress.c (process_file): Return 1 instead of -1 in case of an diff --git a/src/elflint.c b/src/elflint.c index 85cc7833..35b40500 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3434,7 +3434,7 @@ buffer_pos (Elf_Data *data, const unsigned char *p) return p - (const unsigned char *) data->d_buf; } -inline size_t +static inline size_t buffer_left (Elf_Data *data, const unsigned char *p) { return (const unsigned char *) data->d_buf + data->d_size - p; -- cgit v1.2.1 From ab38d167c40c995d4b3c3a2ac1347f9f2be9c810 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Fri, 4 Jun 2021 08:40:11 -0400 Subject: PR27863: debuginfod optimization for concurrent requests Sometimes, due to configuration error, mishap, or DoS misadventure, a debuginfod server may receive near-concurrent requests for the exact same data from multiple clients. In practically all cases, it is beneficial to the clients, as well as the server, to serialize these requests. This way, debuginfod does not waste CPU in repeatedly & concurrently decompressing large archives or querying upstream servers. Second and later requesters can benefit from the fdcache / client-cache and get their results, probably earlier! This patch adds an "after-you" queueing phase to servicing http-buildid requests, whereby thereads serialize themselves on each query URL being serviced at the moment. Prometheus metrics are added, and the http GET trace line is modified to print the queue+service times separately. Hand-tested on large kernel-debuginfo's, and shows host CPU refusing to multiply in the face of concurrent identical queries. The automated test tries a hundred concurrent curls, at least some of which are slow enough to trigger the "after-you" wait here. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 6 ++++ debuginfod/debuginfod.cxx | 75 +++++++++++++++++++++++++++++++++++++++++++- tests/ChangeLog | 6 ++++ tests/run-debuginfod-find.sh | 14 +++++++++ 4 files changed, 100 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 21407dc2..286c910a 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2021-06-03 Frank Ch. Eigler + + PR27863 + * debuginfod.cxx (unique_set, unique_set_reserver): New classes. + (handler_cb): Use them to implement "after-you" queueing. + 2021-05-14 Frank Ch. Eigler PR27859 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index e0948eab..543044c6 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -705,6 +705,54 @@ static workq scanq; // just a single one // idler: thread_main_groom() +//////////////////////////////////////////////////////////////////////// + +// Unique set is a thread-safe structure that lends 'ownership' of a value +// to a thread. Other threads requesting the same thing are made to wait. +// It's like a semaphore-on-demand. +template +class unique_set +{ +private: + set values; + mutex mtx; + condition_variable cv; +public: + unique_set() {} + ~unique_set() {} + + void acquire(const T& value) + { + unique_lock lock(mtx); + while (values.find(value) != values.end()) + cv.wait(lock); + values.insert(value); + } + + void release(const T& value) + { + unique_lock lock(mtx); + // assert (values.find(value) != values.end()); + values.erase(value); + cv.notify_all(); + } +}; + + +// This is the object that's instantiate to uniquely hold a value in a +// RAII-pattern way. +template +class unique_set_reserver +{ +private: + unique_set& please_hold; + T mine; +public: + unique_set_reserver(unique_set& t, const T& value): + please_hold(t), mine(value) { please_hold.acquire(mine); } + ~unique_set_reserver() { please_hold.release(mine); } +}; + //////////////////////////////////////////////////////////////////////// @@ -1961,6 +2009,7 @@ handler_cb (void * /*cls*/, off_t http_size = -1; struct timespec ts_start, ts_end; clock_gettime (CLOCK_MONOTONIC, &ts_start); + double afteryou = 0.0; try { @@ -1973,7 +2022,25 @@ handler_cb (void * /*cls*/, if (slash1 != string::npos && url1 == "/buildid") { + // PR27863: block this thread awhile if another thread is already busy + // fetching the exact same thing. This is better for Everyone. + // The latecomer says "... after you!" and waits. + add_metric ("thread_busy", "role", "http-buildid-after-you", 1); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pthread_self(), "mhd-buildid-after-you"); +#endif + struct timespec tsay_start, tsay_end; + clock_gettime (CLOCK_MONOTONIC, &tsay_start); + static unique_set busy_urls; + unique_set_reserver after_you(busy_urls, url1); + clock_gettime (CLOCK_MONOTONIC, &tsay_end); + afteryou = (tsay_end.tv_sec - tsay_start.tv_sec) + (tsay_end.tv_nsec - tsay_start.tv_nsec)/1.e9; + add_metric ("thread_busy", "role", "http-buildid-after-you", -1); + tmp_inc_metric m ("thread_busy", "role", "http-buildid"); +#ifdef HAVE_PTHREAD_SETNAME_NP + (void) pthread_setname_np (pthread_self(), "mhd-buildid"); +#endif size_t slash2 = url_copy.find('/', slash1+1); if (slash2 == string::npos) throw reportable_exception("/buildid/ webapi error, need buildid"); @@ -2036,10 +2103,12 @@ handler_cb (void * /*cls*/, clock_gettime (CLOCK_MONOTONIC, &ts_end); double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9; + // afteryou: delay waiting for other client's identical query to complete + // deltas: total latency, including afteryou waiting obatched(clog) << conninfo(connection) << ' ' << method << ' ' << url << ' ' << http_code << ' ' << http_size - << ' ' << (int)(deltas*1000) << "ms" + << ' ' << (int)(afteryou*1000) << '+' << (int)((deltas-afteryou)*1000) << "ms" << endl; // related prometheus metrics @@ -2053,6 +2122,10 @@ handler_cb (void * /*cls*/, deltas*1000); // prometheus prefers _seconds and floating point inc_metric("http_responses_duration_milliseconds_count","code",http_code_str); + add_metric("http_responses_after_you_milliseconds_sum","code",http_code_str, + afteryou*1000); + inc_metric("http_responses_after_you_milliseconds_count","code",http_code_str); + return rc; } diff --git a/tests/ChangeLog b/tests/ChangeLog index 38e92659..b9e5ed4a 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-06-03 Frank Ch. Eigler + + PR27863 + * run-debuginfod-find.sh: Test "after-you" queueing via flooding + with concurent curls. + 2021-05-14 Frank Ch. Eigler PR27859 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 9183cccb..0445bce1 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -580,6 +580,20 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # Confirm that some debuginfod client pools are being used curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse' +# Trigger a flood of requests against the same archive content file. +# Use a file that hasn't been previously extracted in to make it +# likely that even this test debuginfod will experience concurrency +# and impose some "after-you" delays. +(for i in `seq 100`; do + curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & + done; + wait) +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' +# If we could guarantee some minimum number of seconds of CPU time, we +# could assert that the after_you metrics show some nonzero amount of +# waiting. A few hundred ms is typical on this developer's workstation. + + ######################################################################## # Corrupt the sqlite database and get debuginfod to trip across its errors curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' -- cgit v1.2.1 From 828024afc517e266f3226b469ba33f372b401821 Mon Sep 17 00:00:00 2001 From: Omar Sandoval Date: Wed, 9 Jun 2021 17:45:57 -0700 Subject: libdwfl: fix potential NULL pointer dereference when reading link map When read_addrs() was moved into file scope, there was a mistake in converting "buffer" from a closure variable to a parameter: we are checking whether the pointer argument is NULL, not whether the buffer itself is NULL. This causes a NULL pointer dereference when we try to use the NULL buffer later. Fixes: 3bf41d458fb6 ("link_map: Pull read_addrs() into file scope") Signed-off-by: Omar Sandoval Signed-off-by: Dmitry V. Levin --- libdwfl/ChangeLog | 4 ++++ libdwfl/link_map.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index fedf65a4..1fce7af2 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Omar Sandoval + + * link_map.c (read_addrs): Fix potential NULL pointer dereference. + 2021-04-19 Martin Liska * dwfl_frame.c (dwfl_attach_state): Use startswith. diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 0d8d1c17..1e7d4502 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -254,7 +254,7 @@ read_addrs (struct memory_closure *closure, Dwfl *dwfl = closure->dwfl; /* Read a new buffer if the old one doesn't cover these words. */ - if (buffer == NULL + if (*buffer == NULL || vaddr < *read_vaddr || vaddr - (*read_vaddr) + nb > *buffer_available) { -- cgit v1.2.1 From e644d84d6651b70ac9704560ba6b0f6aae26b71a Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 15 Jun 2021 20:04:53 -0400 Subject: debuginfod tests: try to generate diagnostics more reliably on error Signed-off-by: Frank Ch. Eigler --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 38 ++++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index b9e5ed4a..c02fb050 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-06-15 Frank Ch. Eigler + + * run-debuginfod-find.sh (err): Elaborate. Use as the reliable + error-report triggering function, rather than "exit 1". + 2021-06-03 Frank Ch. Eigler PR27863 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 0445bce1..6e9c4875 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -39,10 +39,10 @@ PID3=0 cleanup() { - if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi - if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi - if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi - + if [ $PID1 -ne 0 ]; then kill $PID1 || true; wait $PID1; fi + if [ $PID2 -ne 0 ]; then kill $PID2 || true; wait $PID2; fi + if [ $PID3 -ne 0 ]; then kill $PID3 || true; wait $PID3; fi + rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* exit_cleanup } @@ -52,18 +52,20 @@ trap cleanup 0 1 2 3 5 9 15 errfiles_list= err() { + echo ERROR REPORTS for ports in $PORT1 $PORT2 do - echo $port metrics + echo ERROR REPORT $port metrics curl -s http://127.0.0.1:$port/metrics echo done for x in $errfiles_list do - echo "$x" + echo ERROR REPORT "$x" cat $x echo done + false # trigger set -e } trap err ERR @@ -114,7 +116,7 @@ wait_ready() if [ $timeout -eq 0 ]; then echo "metric $what never changed to $value on port $port" - exit 1; + err fi } @@ -180,12 +182,12 @@ rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then echo "could not find cache in $DEBUGINFOD_CACHE_PATH" - exit 1 + err fi if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" - exit 1 + err fi bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` @@ -193,7 +195,7 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || tru bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` if [ "$bytecount_before" != "$bytecount_after" ]; then echo "http_responses_transfer_bytes_count{code="404"} has changed." - exit 1 + err fi # set cache_miss_s to 0 and sleep 1 to make the mtime expire. @@ -204,7 +206,7 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || tru bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` if [ "$bytecount_before" == "$bytecount_after" ]; then echo "http_responses_transfer_bytes_count{code="404"} should be incremented." - exit 1 + err fi ######################################################################## @@ -214,7 +216,7 @@ filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUIL cmp $filename F/prog.debug if [ -w $filename ]; then echo "cache file writable, boo" - exit 1 + err fi filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` @@ -239,21 +241,21 @@ mkdir tmphome testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then echo "could not find cache in $PWD/tmphome/.cache" - exit 1 + err fi # $HOME/.cache should be found. testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then echo "could not find cache in $PWD/tmphome/.cache" - exit 1 + err fi # $XDG_CACHE_HOME should take priority over $HOME.cache. testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then echo "could not find cache in $PWD/tmpxdg/" - exit 1 + err fi # A cache at the old default location ($HOME/.debuginfod_client_cache) should take @@ -270,7 +272,7 @@ cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then echo "could not find cache in $PWD/tmpcache/" - exit 1 + err fi ######################################################################## @@ -654,12 +656,12 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID2 && fa if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \ || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then echo "unrelated files did not survive cache cleaning" - exit 1 + err fi if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then echo "failed to rmdir old cache dir" - exit 1 + err fi # Test debuginfod without a path list; reuse $PORT1 -- cgit v1.2.1 From 3b8f0874295355da9aba504345be1663fe28abcb Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 16 Jun 2021 10:49:49 -0400 Subject: debuginfod tests: tolerate 000-perm files in cache-copy test It appears possible for 000-permission files to sneak into the test debuginfod-cache, which cp (or find|cpio) refuse to copy. These files are OK not to copy, so ignore the error and proceed. Signed-off-by: Frank Ch. Eigler --- tests/run-debuginfod-find.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 6e9c4875..c9ee11b1 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -260,7 +260,9 @@ fi # A cache at the old default location ($HOME/.debuginfod_client_cache) should take # priority over $HOME/.cache, $XDG_CACHE_HOME. -cp -r $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache +cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true +# ||true is for tolerating errors, such a valgrind or something else +# leaving 000-perm files in there # Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. mkdir tmphome/.debuginfod_client_cache/deadbeef -- cgit v1.2.1 From e113a61bc0537e485fbe7769f1ef0ebf02ac5e00 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 16 Jun 2021 18:49:10 -0400 Subject: debuginfod test: fix groom/stale race condition Additional tracing, and use of "% make check VERBOSE=1" in a .spec file allowed tracking down of this intermittent problem. The race was between a SIGUSR1 or two to a debuginfod server (triggering two traverse/scan phases), followed shortly by a SIGUSR2 (triggering a groom). If those signals were received too close together, the groom phase could be stopped early, and the rm'd files not noticed. New testsuite code adds metric polls after SIGUSR1 & SIGUSR2 to ensure the respective processing phases are complete. It also turns on "set -x" tracing, so as to avoid pulling out quite as much hair next time. "make check VERBOSE=1" is also important for spec files. Signed-off-by: Frank Ch. Eigler --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index c02fb050..d8fa97fa 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-06-16 Frank Ch. Eigler + + * run-debuginfod-find.sh: Fix intermittent groom/stale failure, + due to SIGUSR1/SIGUSR2 races. Trace more. + 2021-06-15 Frank Ch. Eigler * run-debuginfod-find.sh (err): Elaborate. Use as the reliable diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index c9ee11b1..456dc2f8 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -26,7 +26,7 @@ bsdtar --version | grep -q zstd && zstd=true || zstd=false echo "zstd=$zstd bsdtar=`bsdtar --version`" # for test case debugging, uncomment: -#set -x +set -x VERBOSE=-vvv DB=${PWD}/.debuginfod_tmp.sqlite @@ -74,7 +74,6 @@ errfiles() { } - # find an unused port number while true; do PORT1=`expr '(' $RANDOM % 1000 ')' + 9000` @@ -317,6 +316,11 @@ fi cp -rvp ${abs_srcdir}/debuginfod-tars Z kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + # All rpms need to be in the index, except the dummy permission-000 one rpms=$(find R -name \*rpm | grep -v nothing | wc -l) wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms @@ -326,6 +330,11 @@ tb2=$(find Z -name \*tar.bz2 | wc -l) wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 5 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + # Expect all source files found in the rpms (they are all called hello.c :) # We will need to extract all rpms (in their own directory) and could all # sources referenced in the .debug files. @@ -495,6 +504,10 @@ if type bsdtar 2>/dev/null; then # copy in the deb files cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + # All debs need to be in the index debs=$(find D -name \*.deb | wc -l) wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` -- cgit v1.2.1 From 2bc08fa57ed7a3ceea8860d534c751926d4039d5 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 2 Jul 2021 20:26:52 +0200 Subject: run-debuginfod-find.sh: Disable valgrind for debuginfod client cache tests valgrind itself might use the debuginfod client. So disable valgrind when testing the cache. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tests/ChangeLog b/tests/ChangeLog index d8fa97fa..b65cbeb7 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-07-02 Mark Wielaard + + * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod + client cache. + 2021-06-16 Frank Ch. Eigler * run-debuginfod-find.sh: Fix intermittent groom/stale failure, diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 456dc2f8..74a5ceff 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -583,6 +583,11 @@ curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true (curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false +# DISABLE VALGRIND checking because valgrind might use debuginfod client +# requests itself, causing confusion about who put what in the cache. +# It stays disabled till the end of this test. +unset VALGRIND_CMD + # Confirm that reused curl connections survive 404 errors. # The rm's force an uncached fetch rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -- cgit v1.2.1 From c05ad596b5557a1776953be705a4bb66eee911fa Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Jun 2021 15:02:43 +0200 Subject: debuginfod-client: Fix client dereference when calloc fails. When the calloc call in debuginfod_begin fails we should skip all initialization of the client handle. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod-client.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 286c910a..d9d11737 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-06-18 Mark Wielaard + + * debuginfod-client.c (debuginfod_begin): Don't use client if + calloc call failed. + 2021-06-03 Frank Ch. Eigler PR27863 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index ee7eda24..f417b40a 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1193,12 +1193,12 @@ debuginfod_begin (void) client->verbose_fd = STDERR_FILENO; else client->verbose_fd = -1; - } - // allocate 1 curl multi handle - client->server_mhandle = curl_multi_init (); - if (client->server_mhandle == NULL) - goto out1; + // allocate 1 curl multi handle + client->server_mhandle = curl_multi_init (); + if (client->server_mhandle == NULL) + goto out1; + } // extra future initialization -- cgit v1.2.1 From d3671293d7b86810a4a02de18ebea6d19ca82623 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Jun 2021 15:06:32 +0200 Subject: strip: Always check gelf_update results. Signed-off-by: Mark Wielaard --- src/ChangeLog | 5 +++++ src/strip.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 698b3c77..9d4ce31d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2021-06-18 Mark Wielaard + + * strip.c (remove_debug_relocations): Check gelf_update results. + (update_section_size): Likewise. + 2021-06-06 Sergei Trofimovich * elflint.c (buffer_left): Mark as 'static' to avoid external linkage diff --git a/src/strip.c b/src/strip.c index 70fc8c03..961b9db5 100644 --- a/src/strip.c +++ b/src/strip.c @@ -705,17 +705,21 @@ remove_debug_relocations (Ebl *ebl, Elf *elf, GElf_Ehdr *ehdr, relocate_failed: if (relidx != next) { + int updated; if (is_rela) - gelf_update_rela (reldata, next, rel_p); + updated = gelf_update_rela (reldata, next, rel_p); else - gelf_update_rel (reldata, next, rel_p); + updated = gelf_update_rel (reldata, next, rel_p); + if (updated == 0) + INTERNAL_ERROR (fname); } ++next; } nrels = next; shdr->sh_size = reldata->d_size = nrels * shdr->sh_entsize; - gelf_update_shdr (scn, shdr); + if (gelf_update_shdr (scn, shdr) == 0) + INTERNAL_ERROR (fname); if (is_gnu_compressed) { @@ -952,7 +956,8 @@ update_section_size (Elf_Scn *scn, GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); shdr->sh_size = newdata->d_size; - (void) gelf_update_shdr (scn, shdr); + if (gelf_update_shdr (scn, shdr) == 0) + INTERNAL_ERROR (fname); if (debugelf != NULL) { /* libelf will use d_size to set sh_size. */ -- cgit v1.2.1 From e32782a4fe314ff0cf96039d1142706a1d701587 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Jun 2021 15:08:48 +0200 Subject: unstrip: Always check gelf_getrel[a] results Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/unstrip.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 9d4ce31d..71599e5d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-06-18 Mark Wielaard + + * unstrip.c (adjust_relocs): Check gelf_getrel and geld_getrela. + 2021-06-18 Mark Wielaard * strip.c (remove_debug_relocations): Check gelf_update results. diff --git a/src/unstrip.c b/src/unstrip.c index e488e810..6618ec9b 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -462,6 +462,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { GElf_Rel rel_mem; GElf_Rel *rel = gelf_getrel (data, i, &rel_mem); + ELF_CHECK (rel != NULL, _("gelf_getrel failed: %s")); adjust_reloc (&rel->r_info, map, map_size); ELF_CHECK (gelf_update_rel (data, i, rel), _("cannot update relocation: %s")); @@ -476,6 +477,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { GElf_Rela rela_mem; GElf_Rela *rela = gelf_getrela (data, i, &rela_mem); + ELF_CHECK (rela != NULL, _("gelf_getrela failed: %s")); adjust_reloc (&rela->r_info, map, map_size); ELF_CHECK (gelf_update_rela (data, i, rela), _("cannot update relocation: %s")); -- cgit v1.2.1 From e8b5a5e9d8b8a503755a8a48c23a64a695664270 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 3 Jul 2021 18:56:54 +0200 Subject: readelf: Fix error message when two attribute names differ in in compare_listptr. We were printing the second attribute name twice. Print the first and second. Reported-by: Gabriel Valky Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/readelf.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 71599e5d..cfbcfd48 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-07-03 Mark Wielaard + + * readelf.c (compare_listptr): Fix dwarf_attr_name argument. + 2021-06-18 Mark Wielaard * unstrip.c (adjust_relocs): Check gelf_getrel and geld_getrela. diff --git a/src/readelf.c b/src/readelf.c index 9b472622..1f13f765 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -4887,7 +4887,7 @@ compare_listptr (const void *a, const void *b) error (0, 0, _("%s %#" PRIx64 " used with different attribute %s and %s"), - name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr), + name, (uint64_t) p1->offset, dwarf_attr_name (p1->attr), dwarf_attr_name (p2->attr)); } } -- cgit v1.2.1 From 6648d378bd94f50b455a8550db5f43ef3690b451 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 4 Jul 2021 00:08:32 +0200 Subject: readelf: Handle line tables without line number statements correctly When we see a line table without line number statements we need to continue with the next table. Add a testcase for this situation. https://sourceware.org/bugzilla/show_bug.cgi?id=28032 Signed-off-by: Mark Wielaard --- src/readelf.c | 2 +- tests/Makefile.am | 2 + tests/run-readelf-multi-noline.sh | 170 ++++++++++++++++++++++++++++++++++++++ tests/testfile_multi_noline.bz2 | Bin 0 -> 3155 bytes 4 files changed, 173 insertions(+), 1 deletion(-) create mode 100755 tests/run-readelf-multi-noline.sh create mode 100755 tests/testfile_multi_noline.bz2 diff --git a/src/readelf.c b/src/readelf.c index 1f13f765..161d7e65 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -8751,7 +8751,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, if (linep == lineendp) { puts (_("\nNo line number statements.")); - return; + continue; } puts (_("\nLine number statements:")); diff --git a/tests/Makefile.am b/tests/Makefile.am index dc7517d9..76204277 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -158,6 +158,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-backtrace-demangle.sh run-stack-d-test.sh run-stack-i-test.sh \ run-stack-demangled-test.sh run-readelf-zx.sh run-readelf-zp.sh \ run-readelf-addr.sh run-readelf-str.sh \ + run-readelf-multi-noline.sh \ run-readelf-types.sh \ run-readelf-dwz-multi.sh run-allfcts-multi.sh run-deleted.sh \ run-linkmap-cut.sh run-aggregate-size.sh run-peel-type.sh \ @@ -311,6 +312,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ run-readelf-addr.sh run-readelf-str.sh \ + run-readelf-multi-noline.sh testfile_multi_noline.bz2 \ run-readelf-types.sh \ run-readelf-frames.sh \ run-readelf-n.sh \ diff --git a/tests/run-readelf-multi-noline.sh b/tests/run-readelf-multi-noline.sh new file mode 100755 index 00000000..d72a9fd4 --- /dev/null +++ b/tests/run-readelf-multi-noline.sh @@ -0,0 +1,170 @@ +#! /bin/sh +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/test-subr.sh + +# = a.c = +# int a; + +# = b.c = +# int b; + +# = m.c = +# int main () { } + +# gcc -g -o testfile_multi_noline a.c b.c m.c + +testfiles testfile_multi_noline + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_multi_noline <<\EOF + +DWARF section [29] '.debug_line' at offset 0x1221: + +Table at offset 0: + + Length: 32 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 a.c + +No line number statements. + +Table at offset 36: + + Length: 32 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 b.c + +No line number statements. + +Table at offset 72: + + Length: 54 + DWARF version: 3 + Prologue length: 26 + Address size: 8 + Segment selector size: 0 + Min instruction length: 4 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 13 + +Opcodes: + [ 1] 0 arguments + [ 2] 1 argument + [ 3] 1 argument + [ 4] 1 argument + [ 5] 1 argument + [ 6] 0 arguments + [ 7] 0 arguments + [ 8] 0 arguments + [ 9] 1 argument + [10] 0 arguments + [11] 0 arguments + [12] 1 argument + +Directory table: + +File name table: + Entry Dir Time Size Name + 1 0 0 0 m.c + +Line number statements: + [ 6c] set column to 13 + [ 6e] extended opcode 2: set address to +0x724
+ [ 79] copy + [ 7a] set column to 15 + [ 7c] special opcode 32: address+4 = +0x728 , line+0 = 1 + [ 7d] advance address by 4 to +0x72c + [ 7f] extended opcode 1: end of sequence +EOF + +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile_multi_noline <<\EOF + +DWARF section [29] '.debug_line' at offset 0x1221: + + CU [b] a.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + CU [44] b.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + CU [7d] m.c + line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) + /tmp/m.c (mtime: 0, length: 0) + 1:13 S 0 0 0 +0x0000000000000724
+ 1:15 S 0 0 0 +0x0000000000000728 + 1:15 S * 0 0 0 +0x000000000000072b + +EOF + +exit 0 diff --git a/tests/testfile_multi_noline.bz2 b/tests/testfile_multi_noline.bz2 new file mode 100755 index 00000000..39320d1f Binary files /dev/null and b/tests/testfile_multi_noline.bz2 differ -- cgit v1.2.1 From b3601167d7a4c9f34eb65c3892c9ef25e3c1c66f Mon Sep 17 00:00:00 2001 From: Andrei Homescu Date: Mon, 28 Jun 2021 18:26:53 -0700 Subject: libelf: Fix unaligned d_off offsets for input sections with large alignments The mkl_memory_patched.o object inside the libmkl_core.a library from the Intel Math Kernel Library version 2018.2.199 has this section with an alignment of 4096 and offset of 0xb68: [ 2] .data PROGBITS 0000000000000000 000b68 011000 00 WA 0 0 4096 Reading this file with libelf and trying to write it back to disk triggers the following sequence of events: 1) code in elf_getdata.c clamps d_align for this section's data buffer to the section's offset 2) code in elf32_updatenull.c checks if the alignment is a power of two and incorrectly returns an error This commit fixes this corner case by increasing the alignment to the next power of two after the clamping, so the check passes. A test that reproduces this bug using strip is also included. Signed-off-by: Andrei Homescu --- libelf/ChangeLog | 5 +++++ libelf/elf_getdata.c | 13 ++++++++++++- tests/ChangeLog | 12 ++++++++++-- tests/Makefile.am | 5 +++-- tests/run-strip-largealign.sh | 35 +++++++++++++++++++++++++++++++++++ tests/testfile-largealign.o.bz2 | Bin 0 -> 183 bytes 6 files changed, 65 insertions(+), 5 deletions(-) create mode 100755 tests/run-strip-largealign.sh create mode 100644 tests/testfile-largealign.o.bz2 diff --git a/libelf/ChangeLog b/libelf/ChangeLog index a1fd414c..62437c55 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2021-06-09 Andrei Homescu + + * elf_getdata.c: Fix d_align for sections where alignment is larger + than offset. + 2020-12-12 Mark Wielaard * elf.h: Update from glibc. diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index 6ed44504..3cad29de 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -384,7 +384,18 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn) which should be uncommon. */ align = align ?: 1; if (type != SHT_NOBITS && align > offset) - align = offset; + { + /* Align the offset to the next power of two. Uses algorithm from + https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 */ + align = offset - 1; + align |= align >> 1; + align |= align >> 2; + align |= align >> 4; + align |= align >> 8; + align |= align >> 16; + align |= align >> 32; + align++; + } scn->rawdata.d.d_align = align; if (elf->class == ELFCLASS32 || (offsetof (struct Elf, state.elf32.ehdr) diff --git a/tests/ChangeLog b/tests/ChangeLog index b65cbeb7..28aaf85e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,7 +1,15 @@ +2021-06-09 Andrei Homescu + + * testfile-largealign.o.bz2: New test file. + * run-strip-largealign.sh: New test. + * Makefile.am (TESTS): Add run-strip-largealign.sh. + (EXTRA_DIST): Add run-strip-largealign.sh and + testfile-largealign.o.bz2 + 2021-07-02 Mark Wielaard - * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod - client cache. + * run-debuginfo-find.sh: unset VALGRIND_CMD before testing debuginfod + client cache. 2021-06-16 Frank Ch. Eigler diff --git a/tests/Makefile.am b/tests/Makefile.am index 76204277..8ac0d2e6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -189,7 +189,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ leb128 read_unaligned \ msg_tst system-elf-libelf-test \ $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ - run-readelf-dw-form-indirect.sh + run-readelf-dw-form-indirect.sh run-strip-largealign.sh if !BIARCH export ELFUTILS_DISABLE_BIARCH = 1 @@ -511,7 +511,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile_pt_gnu_prop.bz2 testfile_pt_gnu_prop32.bz2 \ run-getphdrnum.sh testfile-phdrs.elf.bz2 \ run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ - run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 + run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ + testfile-largealign.bz2 run-strip-largealign.sh if USE_VALGRIND diff --git a/tests/run-strip-largealign.sh b/tests/run-strip-largealign.sh new file mode 100755 index 00000000..4f81d3c1 --- /dev/null +++ b/tests/run-strip-largealign.sh @@ -0,0 +1,35 @@ +#! /bin/sh +# Copyright (C) 2021 Runsafe Security, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +. $srcdir/test-subr.sh + +# = testfile-largealign.S = +# section .data +# align 4096 +# dd 0x12345678 +# +# nasm -f elf64 -o testfile-largealign.o testfile-largealign.S + +infile=testfile-largealign.o +outfile=$infile.stripped + +testfiles $infile +tempfiles $outfile + +testrun ${abs_top_builddir}/src/strip -o $outfile $infile +testrun ${abs_top_builddir}/src/elflint --gnu $outfile diff --git a/tests/testfile-largealign.o.bz2 b/tests/testfile-largealign.o.bz2 new file mode 100644 index 00000000..324c1eae Binary files /dev/null and b/tests/testfile-largealign.o.bz2 differ -- cgit v1.2.1 From cdcd7dc3d20a002abe1ce318f9b9d0895eee1810 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 8 Jul 2021 11:44:26 +0200 Subject: tests: Fix EXTRA_DIST typo in testfile-largealign.o.bz2 Signed-off-by: Mark Wielaard --- tests/ChangeLog | 5 +++++ tests/Makefile.am | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 28aaf85e..7b493c99 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-07-08 Mark Wielaard + + * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was + was missing .o. + 2021-06-09 Andrei Homescu * testfile-largealign.o.bz2: New test file. diff --git a/tests/Makefile.am b/tests/Makefile.am index 8ac0d2e6..429649f4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -512,7 +512,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-getphdrnum.sh testfile-phdrs.elf.bz2 \ run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ - testfile-largealign.bz2 run-strip-largealign.sh + testfile-largealign.o.bz2 run-strip-largealign.sh if USE_VALGRIND -- cgit v1.2.1 From 0ae9b791b47cdee92ac7221e3eead79c83a64a40 Mon Sep 17 00:00:00 2001 From: Noah Date: Wed, 7 Jul 2021 14:40:10 -0400 Subject: debuginfod: PR27711 - Use -I/-X regexes during groom phase The debuginfod -I/-X regexes operate during traversal to identify those files in need of scanning. The regexes are not used during grooming. This means that if from run to run, the regex changes so that formerly indexed files are excluded from traversal, the data is still retained in the index. This is both good and bad. On one hand, if the underlying data is still available, grooming will preserve the data, and let clients ask for it. On the other hand, if the growing index size is a problem, and one wishes to age no-longer-regex-matching index data out, there is no way. Let's add a debuginfod flag to use regexes during grooming. Specifically, in groom(), where the stat() test exists, also check for regex matching as in scan_source_paths(). Treat failure of the regex the same way as though the file didn't exist. Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 8 ++++++++ debuginfod/debuginfod.cxx | 11 +++++++++-- doc/debuginfod.8 | 3 +++ tests/ChangeLog | 6 ++++++ tests/run-debuginfod-find.sh | 39 +++++++++++++++++++++++++++++++++------ 5 files changed, 59 insertions(+), 8 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index d9d11737..a4f20a78 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2021-07-01 Noah Sanci + + PR27711 + * debuginfod.cxx (options): Add --regex-groom, -r option. + (regex_groom): New static bool defaults to false. + (parse_opt): Handle 'r' option by setting regex_groom to true. + (groom): Introduce and use reg_include and reg_exclude. + 2021-06-18 Mark Wielaard * debuginfod-client.c (debuginfod_begin): Don't use client if diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 543044c6..4f7fd2d5 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -360,6 +360,7 @@ static const struct argp_option options[] = { "database", 'd', "FILE", 0, "Path to sqlite database.", 0 }, { "ddl", 'D', "SQL", 0, "Apply extra sqlite ddl/pragma to connection.", 0 }, { "verbose", 'v', NULL, 0, "Increase verbosity.", 0 }, + { "regex-groom", 'r', NULL, 0,"Uses regexes from -I and -X arguments to groom the database.",0}, #define ARGP_KEY_FDCACHE_FDS 0x1001 { "fdcache-fds", ARGP_KEY_FDCACHE_FDS, "NUM", 0, "Maximum number of archive files to keep in fdcache.", 0 }, #define ARGP_KEY_FDCACHE_MBS 0x1002 @@ -407,6 +408,7 @@ static map scan_archives; static vector extra_ddl; static regex_t file_include_regex; static regex_t file_exclude_regex; +static bool regex_groom = false; static bool traverse_logical; static long fdcache_fds; static long fdcache_mbs; @@ -527,6 +529,9 @@ parse_opt (int key, char *arg, if (rc != 0) argp_failure(state, 1, EINVAL, "regular expression"); break; + case 'r': + regex_groom = true; + break; case ARGP_KEY_FDCACHE_FDS: fdcache_fds = atol (arg); break; @@ -3249,8 +3254,11 @@ void groom() int64_t fileid = sqlite3_column_int64 (files, 1); const char* filename = ((const char*) sqlite3_column_text (files, 2) ?: ""); struct stat s; + bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0); + bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0); + rc = stat(filename, &s); - if (rc < 0 || (mtime != (int64_t) s.st_mtime)) + if ( (regex_groom && reg_exclude && !reg_include) || rc < 0 || (mtime != (int64_t) s.st_mtime) ) { if (verbose > 2) obatched(clog) << "groom: forgetting file=" << filename << " mtime=" << mtime << endl; @@ -3261,7 +3269,6 @@ void groom() } else inc_metric("groomed_total", "decision", "fresh"); - if (sigusr1 != forced_rescan_count) // stop early if scan triggered break; } diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 1ba42cf6..1adf703a 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -159,6 +159,9 @@ scan, independent of the rescan time (including if it was zero), interrupting a groom pass (if any). .TP +.B "\-r" +Apply the -I and -X during groom cycles, so that files excluded by the regexes are removed from the index. These parameters are in addition to what normally qualifies a file for grooming, not a replacement. + .B "\-g SECONDS" "\-\-groom\-time=SECONDS" Set the groom time for the index database. This is the amount of time the grooming thread will wait after finishing a grooming pass before diff --git a/tests/ChangeLog b/tests/ChangeLog index 7b493c99..3a30e06b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-07-01 Noah Sanci + + PR2711 + * run-debuginfod-find.sh: Added test case for grooming the database + using regexes. + 2021-07-08 Mark Wielaard * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 74a5ceff..a4c1a13a 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -36,13 +36,14 @@ export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache PID1=0 PID2=0 PID3=0 +PID4=0 cleanup() { - if [ $PID1 -ne 0 ]; then kill $PID1 || true; wait $PID1; fi - if [ $PID2 -ne 0 ]; then kill $PID2 || true; wait $PID2; fi - if [ $PID3 -ne 0 ]; then kill $PID3 || true; wait $PID3; fi - + if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi + if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi + if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi + if [ $PID4 -ne 0 ]; then kill $PID4; wait $PID4; fi rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* exit_cleanup } @@ -293,7 +294,8 @@ kill -USR1 $PID1 wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 - +cp $DB $DB.backup +tempfiles $DB.backup # Rerun same tests for the prog2 binary filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog` cmp $filename F/prog2 @@ -710,4 +712,29 @@ DEBUGINFOD_URLS="file://${PWD}/mocktree/" filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` cmp $filename ${local_dir}/main.c -exit 0 +######################################################################## +## PR27711 +# Test to ensure that the --include="^$" --exclude=".*" options remove all files from a database backup +while true; do + PORT3=`expr '(' $RANDOM % 1000 ')' + 9000` + ss -atn | fgrep ":$PORT3" || break +done +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:$PORT3/" ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT3 -t0 -g0 --regex-groom --include="^$" --exclude=".*" -d $DB.backup > vlog$PORT3 2>&1 & +PID4=$! +wait_ready $PORT3 'ready' 1 +tempfiles vlog$PORT3 +errfiles vlog$PORT3 + +kill -USR2 $PID4 +wait_ready $PORT3 'thread_work_total{role="groom"}' 1 +wait_ready $PORT3 'groom{statistic="archive d/e"}' 0 +wait_ready $PORT3 'groom{statistic="archive sdef"}' 0 +wait_ready $PORT3 'groom{statistic="archive sref"}' 0 +wait_ready $PORT3 'groom{statistic="buildids"}' 0 +wait_ready $PORT3 'groom{statistic="file d/e"}' 0 +wait_ready $PORT3 'groom{statistic="file s"}' 0 +wait_ready $PORT3 'groom{statistic="files scanned (#)"}' 0 +wait_ready $PORT3 'groom{statistic="files scanned (mb)"}' 0 + +kill $PID4 +exit 0; -- cgit v1.2.1 From 60117fb6b2006e1ef282fee48eae7646622d1667 Mon Sep 17 00:00:00 2001 From: Alice Zhang Date: Tue, 6 Jul 2021 16:12:43 -0400 Subject: PR27531: retry within default retry_limit will be supported. In debuginfod-client.c (debuginfod_query_server),insert a goto statement for jumping back to the beginning of curl handles set up if query fails and a non ENOENT error is returned. Also introduced DEBUGINFOD_RETRY_LIMIT_ENV_VAR and default DEBUGINFOD_RETRY_LIMIT(which is 2). Correponding test has been added to tests/run-debuginfod-find.sh Signed-off-by: Alice Zhang --- config/ChangeLog | 4 ++++ config/debuginfod.sysconfig | 1 + debuginfod/ChangeLog | 7 +++++++ debuginfod/debuginfod-client.c | 34 ++++++++++++++++++++++++++++++++-- debuginfod/debuginfod.h.in | 1 + doc/debuginfod_find_debuginfo.3 | 5 +++++ tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 14 +++++++++++++- 8 files changed, 68 insertions(+), 3 deletions(-) diff --git a/config/ChangeLog b/config/ChangeLog index 2cdcfa72..70a1e923 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2021-07-06 Alice Zhang + + * debuginfod.sysconfig: Introduce default retry limit. + 2021-05-10 Mark Wielaard * elfutils.spec.in: Update for 0.185. diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig index 44603874..890a1a25 100644 --- a/config/debuginfod.sysconfig +++ b/config/debuginfod.sysconfig @@ -11,4 +11,5 @@ DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin / # upstream debuginfods #DEBUGINFOD_URLS="http://secondhost:8002 http://thirdhost:8002" #DEBUGINFOD_TIMEOUT="5" +#DEBUGINFOD_RETRY_LIMIT="2" #DEBUGINFOD_CACHE_DIR="" diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index a4f20a78..e71436ca 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,10 @@ +2021-07-06 Alice Zhang + + PR27531 + * debuginfod-client.c (debuginfod_query_server): Retry failed queries + if error code is not ENOENT. + * debuginfod.h.in: Introduce DEBUGINFOD_RETRY_LIMIT_ENV_VAR. + 2021-07-01 Noah Sanci PR27711 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index f417b40a..f12f609c 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -157,6 +157,8 @@ static const char url_delim_char = ' '; /* Timeout for debuginfods, in seconds (to get at least 100K). */ static const long default_timeout = 90; +/* Default retry count for download error. */ +static const long default_retry_limit = 2; /* Data associated with a particular CURL easy handle. Passed to the write callback. */ @@ -770,9 +772,14 @@ debuginfod_query_server (debuginfod_client *c, && (i == 0 || server_urls[i - 1] == url_delim_char)) num_urls++; + int retry_limit = default_retry_limit; + const char* retry_limit_envvar = getenv(DEBUGINFOD_RETRY_LIMIT_ENV_VAR); + if (retry_limit_envvar != NULL) + retry_limit = atoi (retry_limit_envvar); + CURLM *curlm = c->server_mhandle; assert (curlm != NULL); - + /* Tracks which handle should write to fd. Set to the first handle that is ready to write the target file to the cache. */ CURL *target_handle = NULL; @@ -785,6 +792,10 @@ debuginfod_query_server (debuginfod_client *c, /* thereafter, goto out1 on error. */ + /*The beginning of goto block query_in_parallel.*/ + query_in_parallel: + rc = -ENOENT; /* Reset rc to default.*/ + /* Initialize handle_data with default values. */ for (int i = 0; i < num_urls; i++) { @@ -1074,8 +1085,27 @@ debuginfod_query_server (debuginfod_client *c, close(efd); } + /* If the verified_handle is NULL and rc != -ENOENT, the query fails with + * an error code other than 404, then do several retry within the retry_limit. + * Clean up all old handles and jump back to the beginning of query_in_parallel, + * reinitialize handles and query again.*/ if (verified_handle == NULL) - goto out1; + { + if (rc != -ENOENT && retry_limit-- > 0) + { + if (vfd >= 0) + dprintf (vfd, "Retry failed query, %d attempt(s) remaining\n", retry_limit); + /* remove all handles from multi */ + for (int i = 0; i < num_urls; i++) + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + } + goto query_in_parallel; + } + else + goto out1; + } if (vfd >= 0) { diff --git a/debuginfod/debuginfod.h.in b/debuginfod/debuginfod.h.in index 559ea947..282e523d 100644 --- a/debuginfod/debuginfod.h.in +++ b/debuginfod/debuginfod.h.in @@ -35,6 +35,7 @@ #define DEBUGINFOD_TIMEOUT_ENV_VAR "DEBUGINFOD_TIMEOUT" #define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS" #define DEBUGINFOD_VERBOSE_ENV_VAR "DEBUGINFOD_VERBOSE" +#define DEBUGINFOD_RETRY_LIMIT_ENV_VAR "DEBUGINFOD_RETRY_LIMIT" /* The libdebuginfod soname. */ #define DEBUGINFOD_SONAME "@LIBDEBUGINFOD_SONAME@" diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 index 5ae44a98..7730dd32 100644 --- a/doc/debuginfod_find_debuginfo.3 +++ b/doc/debuginfod_find_debuginfo.3 @@ -277,6 +277,11 @@ program is reexecuted. If XDG_CACHE_HOME is set then $XDG_CACHE_HOME/debuginfod_client is the default location, otherwise $HOME/.cache/debuginfod_client is used. +.TP 21 +.B DEBUGINFOD_RETRY_LITMIT +This environment variable governs the default limit of retry attempts. If a +query failed with errno other than ENOENT, will initiate several attempts +within the limit. .SH "ERRORS" The following list is not comprehensive. Error codes may also diff --git a/tests/ChangeLog b/tests/ChangeLog index 3a30e06b..1460b422 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-07-06 Alice Zhang + + PR27531 + * run-debuginfod-find.sh: Add test case for retry mechanism. + 2021-07-01 Noah Sanci PR2711 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index a4c1a13a..73bbe65b 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -620,6 +620,7 @@ curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' ######################################################################## # Corrupt the sqlite database and get debuginfod to trip across its errors + curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' ls -al $DB dd if=/dev/zero of=$DB bs=1 count=1 @@ -737,4 +738,15 @@ wait_ready $PORT3 'groom{statistic="files scanned (#)"}' 0 wait_ready $PORT3 'groom{statistic="files scanned (mb)"}' 0 kill $PID4 -exit 0; + +######################################################################## +# set up tests for retrying failed queries. +retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/ls || true) 2>&1 >/dev/null \ + | grep -c 'Retry failed query'` +if [ $retry_attempts -ne 10 ]; then + echo "retry mechanism failed." + exit 1; + fi + +exit 0 -- cgit v1.2.1 From fddaa57358c53ab86856d9ed0089d1b4ec1b7a1e Mon Sep 17 00:00:00 2001 From: Noah Date: Thu, 10 Jun 2021 10:29:45 -0400 Subject: debuginfod: PR25978 - Created the prefetch fdcache The debuginfod fdcache-prefetch logic has been observed to show some degeneracies in operation. Since fdcache evictions are done frequently, and freshly prefetched archive elements are put at the back of lru[], each eviction round can summarily nuke things that were just prefetched .... and are just going to be prefetched again. It would be better to have two lru lists, or being able to insert newly prefetched entries somewhere in the middle of the list rather than at the very very end. https://sourceware.org/bugzilla/show_bug.cgi?id=25978 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 17 ++++- debuginfod/debuginfod.cxx | 146 ++++++++++++++++++++++++++++++++++++------- doc/debuginfod.8 | 10 +++ tests/ChangeLog | 9 ++- tests/run-debuginfod-find.sh | 20 +++++- 5 files changed, 175 insertions(+), 27 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index e71436ca..0de17899 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,6 +1,21 @@ +2021-06-28 Noah Sanci + + PR25978 + * debuginfod.cxx (options): Added --fdcache-prefetch-fds/mbs options. + (set_metric): Added a condition for fdcache_mintmp to ensure no + negative percentages or percentages larger than 100% are given. + (globals): Added fdcache_prefetch_mbs/fdcache_prefetch_fds. + (set_metrics): Differentiate between lru and prefetch metrics. + (intern): Added prefetch functionality for nuking preexisting copies + and incrementing prefetch metrics. + (lookup): Search prefetch cache and increment associated metrics. Upon + finding in the prefetch cache move the element to the lru cache. + (limit): Arguments updated. Update size of prefetch cache. + (main): Log prefetch and cache fds/mbs + 2021-07-06 Alice Zhang - PR27531 + PR27531 * debuginfod-client.c (debuginfod_query_server): Retry failed queries if error code is not ENOENT. * debuginfod.h.in: Introduce DEBUGINFOD_RETRY_LIMIT_ENV_VAR. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 4f7fd2d5..503edba7 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -369,7 +369,13 @@ static const struct argp_option options[] = { "fdcache-prefetch", ARGP_KEY_FDCACHE_PREFETCH, "NUM", 0, "Number of archive files to prefetch into fdcache.", 0 }, #define ARGP_KEY_FDCACHE_MINTMP 0x1004 { "fdcache-mintmp", ARGP_KEY_FDCACHE_MINTMP, "NUM", 0, "Minimum free space% on tmpdir.", 0 }, - { NULL, 0, NULL, 0, NULL, 0 } +#define ARGP_KEY_FDCACHE_PREFETCH_MBS 0x1005 + { "fdcache-prefetch-mbs", ARGP_KEY_FDCACHE_PREFETCH_MBS, "MB", 0,"Megabytes allocated to the \ + prefetch cache.", 0}, +#define ARGP_KEY_FDCACHE_PREFETCH_FDS 0x1006 + { "fdcache-prefetch-fds", ARGP_KEY_FDCACHE_PREFETCH_FDS, "NUM", 0,"Number of files allocated to the \ + prefetch cache.", 0}, + { NULL, 0, NULL, 0, NULL, 0 }, }; /* Short description of program. */ @@ -414,6 +420,8 @@ static long fdcache_fds; static long fdcache_mbs; static long fdcache_prefetch; static long fdcache_mintmp; +static long fdcache_prefetch_mbs; +static long fdcache_prefetch_fds; static string tmpdir; static void set_metric(const string& key, double value); @@ -543,10 +551,22 @@ parse_opt (int key, char *arg, break; case ARGP_KEY_FDCACHE_MINTMP: fdcache_mintmp = atol (arg); + if( fdcache_mintmp > 100 || fdcache_mintmp < 0 ) + argp_failure(state, 1, EINVAL, "fdcache mintmp percent"); break; case ARGP_KEY_ARG: source_paths.insert(string(arg)); break; + case ARGP_KEY_FDCACHE_PREFETCH_FDS: + fdcache_prefetch_fds = atol(arg); + if ( fdcache_prefetch_fds < 0) + argp_failure(state, 1, EINVAL, "fdcache prefetch fds"); + break; + case ARGP_KEY_FDCACHE_PREFETCH_MBS: + fdcache_prefetch_mbs = atol(arg); + if ( fdcache_prefetch_mbs < 0) + argp_failure(state, 1, EINVAL, "fdcache prefetch mbs"); + break; // case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK); default: return ARGP_ERR_UNKNOWN; } @@ -1204,23 +1224,32 @@ private: }; deque lru; // @head: most recently used long max_fds; + deque prefetch; // prefetched long max_mbs; + long max_prefetch_mbs; + long max_prefetch_fds; public: void set_metrics() { - double total_mb = 0.0; + double fdcache_mb = 0.0; + double prefetch_mb = 0.0; for (auto i = lru.begin(); i < lru.end(); i++) - total_mb += i->fd_size_mb; - set_metric("fdcache_bytes", (int64_t)(total_mb*1024.0*1024.0)); + fdcache_mb += i->fd_size_mb; + for (auto j = prefetch.begin(); j < prefetch.end(); j++) + prefetch_mb += j->fd_size_mb; + set_metric("fdcache_bytes", fdcache_mb*1024.0*1024.0); set_metric("fdcache_count", lru.size()); + set_metric("fdcache_prefetch_bytes", prefetch_mb*1024.0*1024.0); + set_metric("fdcache_prefetch_count", prefetch.size()); } void intern(const string& a, const string& b, string fd, off_t sz, bool front_p) { { unique_lock lock(fdcache_lock); - for (auto i = lru.begin(); i < lru.end(); i++) // nuke preexisting copy + // nuke preexisting copy + for (auto i = lru.begin(); i < lru.end(); i++) { if (i->archive == a && i->entry == b) { @@ -1230,17 +1259,28 @@ public: break; // must not continue iterating } } + // nuke preexisting copy in prefetch + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { + unlink (i->fd.c_str()); + prefetch.erase(i); + inc_metric("fdcache_op_count","op","prefetch_dequeue"); + break; // must not continue iterating + } + } double mb = (sz+65535)/1048576.0; // round up to 64K block fdcache_entry n = { a, b, fd, mb }; if (front_p) { - inc_metric("fdcache_op_count","op","enqueue_front"); + inc_metric("fdcache_op_count","op","enqueue"); lru.push_front(n); } else { - inc_metric("fdcache_op_count","op","enqueue_back"); - lru.push_back(n); + inc_metric("fdcache_op_count","op","prefetch_enqueue"); + prefetch.push_front(n); } if (verbose > 3) obatched(clog) << "fdcache interned a=" << a << " b=" << b @@ -1253,10 +1293,10 @@ public: { inc_metric("fdcache_op_count","op","emerg-flush"); obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl; - this->limit(0, 0); // emergency flush + this->limit(0, 0, 0, 0); // emergency flush } else if (front_p) - this->limit(max_fds, max_mbs); // age cache if required + this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required } int lookup(const string& a, const string& b) @@ -1272,7 +1312,21 @@ public: lru.erase(i); // invalidates i, so no more iteration! lru.push_front(n); inc_metric("fdcache_op_count","op","requeue_front"); - fd = open(n.fd.c_str(), O_RDONLY); // NB: no problem if dup() fails; looks like cache miss + fd = open(n.fd.c_str(), O_RDONLY); + break; + } + } + // Iterate through prefetch while fd == -1 to ensure that no duplication between lru and + // prefetch occurs. + for ( auto i = prefetch.begin(); fd == -1 && i < prefetch.end(); ++i) + { + if (i->archive == a && i->entry == b) + { // found it; take the entry from the prefetch deque to the lru deque, since it has now been accessed. + fdcache_entry n = *i; + prefetch.erase(i); + lru.push_front(n); + inc_metric("fdcache_op_count","op","prefetch_access"); + fd = open(n.fd.c_str(), O_RDONLY); break; } } @@ -1282,10 +1336,10 @@ public: { inc_metric("fdcache_op_count","op","emerg-flush"); obatched(clog) << "fdcache emergency flush for filling tmpdir"; - this->limit(0, 0); // emergency flush + this->limit(0, 0, 0, 0); // emergency flush } else if (fd >= 0) - this->limit(max_fds, max_mbs); // age cache if required + this->limit(max_fds, max_mbs, max_prefetch_fds, max_prefetch_mbs); // age cache if required return fd; } @@ -1301,6 +1355,14 @@ public: return true; } } + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { + inc_metric("fdcache_op_count","op","prefetch_probe_hit"); + return true; + } + } inc_metric("fdcache_op_count","op","probe_miss"); return false; } @@ -1311,7 +1373,7 @@ public: for (auto i = lru.begin(); i < lru.end(); i++) { if (i->archive == a && i->entry == b) - { // found it; move it to head of lru + { // found it; erase it from lru fdcache_entry n = *i; lru.erase(i); // invalidates i, so no more iteration! inc_metric("fdcache_op_count","op","clear"); @@ -1320,10 +1382,21 @@ public: return; } } + for (auto i = prefetch.begin(); i < prefetch.end(); i++) + { + if (i->archive == a && i->entry == b) + { // found it; erase it from lru + fdcache_entry n = *i; + prefetch.erase(i); // invalidates i, so no more iteration! + inc_metric("fdcache_op_count","op","prefetch_clear"); + unlink (n.fd.c_str()); + set_metrics(); + return; + } + } } - - void limit(long maxfds, long maxmbs, bool metrics_p = true) + void limit(long maxfds, long maxmbs, long maxprefetchfds, long maxprefetchmbs , bool metrics_p = true) { if (verbose > 3 && (this->max_fds != maxfds || this->max_mbs != maxmbs)) obatched(clog) << "fdcache limited to maxfds=" << maxfds << " maxmbs=" << maxmbs << endl; @@ -1331,7 +1404,8 @@ public: unique_lock lock(fdcache_lock); this->max_fds = maxfds; this->max_mbs = maxmbs; - + this->max_prefetch_fds = maxprefetchfds; + this->max_prefetch_mbs = maxprefetchmbs; long total_fd = 0; double total_mb = 0.0; for (auto i = lru.begin(); i < lru.end(); i++) @@ -1339,7 +1413,7 @@ public: // accumulate totals from most recently used one going backward total_fd ++; total_mb += i->fd_size_mb; - if (total_fd > max_fds || total_mb > max_mbs) + if (total_fd > this->max_fds || total_mb > this->max_mbs) { // found the cut here point! @@ -1357,6 +1431,29 @@ public: break; } } + total_fd = 0; + total_mb = 0.0; + for(auto i = prefetch.begin(); i < prefetch.end(); i++){ + // accumulate totals from most recently used one going backward + total_fd ++; + total_mb += i->fd_size_mb; + if (total_fd > this->max_prefetch_fds || total_mb > this->max_prefetch_mbs) + { + // found the cut here point! + for (auto j = i; j < prefetch.end(); j++) // close all the fds from here on in + { + if (verbose > 3) + obatched(clog) << "fdcache evicted from prefetch a=" << j->archive << " b=" << j->entry + << " fd=" << j->fd << " mb=" << j->fd_size_mb << endl; + if (metrics_p) + inc_metric("fdcache_op_count","op","prefetch_evict"); + unlink (j->fd.c_str()); + } + + prefetch.erase(i, prefetch.end()); // erase the nodes generally + break; + } + } if (metrics_p) set_metrics(); } @@ -1365,7 +1462,7 @@ public: { // unlink any fdcache entries in $TMPDIR // don't update metrics; those globals may be already destroyed - limit(0, 0, false); + limit(0, 0, 0, 0, false); } }; static libarchive_fdcache fdcache; @@ -1552,7 +1649,7 @@ handle_buildid_r_match (bool internal_req_p, // responsible for unlinking it later. fdcache.intern(b_source0, fn, tmppath, archive_entry_size(e), - false); // prefetched ones go to back of lru + false); // prefetched ones go to the prefetch cache prefetch_count --; close (fd); // we're not saving this fd to make a mhd-response from! continue; @@ -3300,8 +3397,8 @@ void groom() sqlite3_db_release_memory(dbq); // ... for both connections debuginfod_pool_groom(); // and release any debuginfod_client objects we've been holding onto - fdcache.limit(0,0); // release the fdcache contents - fdcache.limit(fdcache_fds,fdcache_mbs); // restore status quo parameters + fdcache.limit(0,0,0,0); // release the fdcache contents + fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs); // restore status quo parameters clock_gettime (CLOCK_MONOTONIC, &ts_end); double deltas = (ts_end.tv_sec - ts_start.tv_sec) + (ts_end.tv_nsec - ts_start.tv_nsec)/1.e9; @@ -3463,7 +3560,7 @@ main (int argc, char *argv[]) if (scan_archives.size()==0 && !scan_files && source_paths.size()>0) obatched(clog) << "warning: without -F -R -U -Z, ignoring PATHs" << endl; - fdcache.limit(fdcache_fds, fdcache_mbs); + fdcache.limit(fdcache_fds, fdcache_mbs, fdcache_prefetch_fds, fdcache_prefetch_mbs); (void) signal (SIGPIPE, SIG_IGN); // microhttpd can generate it incidentally, ignore (void) signal (SIGINT, signal_handler); // ^C @@ -3607,6 +3704,9 @@ main (int argc, char *argv[]) obatched(clog) << "fdcache tmpdir " << tmpdir << endl; obatched(clog) << "fdcache tmpdir min% " << fdcache_mintmp << endl; obatched(clog) << "groom time " << groom_s << endl; + obatched(clog) << "prefetch fds " << fdcache_prefetch_fds << endl; + obatched(clog) << "prefetch mbs " << fdcache_prefetch_mbs << endl; + if (scan_archives.size()>0) { obatched ob(clog); diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 1adf703a..d83c7cdb 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -215,6 +215,16 @@ $TMPDIR or \fB/tmp\fP filesystem. This is because that is where the most recently used extracted files are kept. Grooming cleans this cache. +.TP +.B "\-\-fdcache\-\-prefetch\-fds=NUM" "\-\-fdcache\-\-prefetch\-mbs=MB" +Configure how many file descriptors (fds) and megabytes (mbs) are +allocated to the prefetch fdcache. If unspecified, values of +\fB\-\-prefetch\-fds\fP and \fB\-\-prefetch\-mbs\fP depend +on concurrency of the system and on the available disk space on +the $TMPDIR. Allocating more to the prefetch cache will improve +performance in environments where different parts of several large +archives are being accessed. + .TP .B "\-\-fdcache\-mintmp=NUM" Configure a disk space threshold for emergency flushing of the cache. diff --git a/tests/ChangeLog b/tests/ChangeLog index 1460b422..1196d6b2 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,6 +1,13 @@ +2021-06-28 Noah Sanci + + PR25978 + * run-debuginfod-find.sh: Test to ensure options + fdcache-prefetch-fds/mbs are set. Check that inc_metric works for lru + and prefetch cache metrics. + 2021-07-06 Alice Zhang - PR27531 + PR27531 * run-debuginfod-find.sh: Add test case for retry mechanism. 2021-07-01 Noah Sanci diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 73bbe65b..1d664be9 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -120,12 +120,15 @@ wait_ready() fi } +FDCACHE_FDS=50 +FDCACHE_MBS=190 +PREFETCH_FDS=10 +PREFETCH_MBS=120 # create a bogus .rpm file to evoke a metric-visible error # Use a cyclic symlink instead of chmod 000 to make sure even root # would see an error (running the testsuite under root is NOT encouraged). ln -s R/nothing.rpm R/nothing.rpm - -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 --fdcache-fds 1 --fdcache-mbs 2 --fdcache-mintmp 0 -Z .tar.xz -Z .tar.bz2=bzcat -v R F Z L > vlog$PORT1 2>&1 & +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 --fdcache-mbs=$FDCACHE_MBS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -Z .tar.xz -Z .tar.bz2=bzcat -v R F Z L > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 @@ -472,6 +475,19 @@ archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/h egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1 +######################################################################## +## PR25978 +# Ensure that the fdcache options are working. +grep "prefetch fds" vlog$PORT1 +grep "prefetch mbs" vlog$PORT1 +grep "fdcache fds" vlog$PORT1 +grep "fdcache mbs" vlog$PORT1 +# search the vlog to find what metric counts should be and check the correct metrics +# were incrimented +wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $( grep -c 'interned.*front=1' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="evict"}' $( grep -c 'evicted a=.*' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $( grep -c 'interned.*front=0' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $( grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true ) ######################################################################## # Federation mode -- cgit v1.2.1 From 779c57ea864d104bad88455535df9b26336349fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Thu, 18 Mar 2021 10:25:24 +0100 Subject: readelf: Pull advance_pc() in file scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make advance_pc() a static function so we can get rid of another nested function. Rename it to run_advance_pc() and use a local advance_pc() macro to pass all the local variables. This is similar to what the equivalent code in libdw/dwarf_getsrclines.c is doing. Signed-off-by: Timm Bäder --- src/ChangeLog | 7 +++++++ src/readelf.c | 26 +++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index cfbcfd48..312bc503 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2021-03-18 Timm Bäder + + * readelf.c (run_advance_pc): New static inline function + lifted from... + (print_debug_line_section): ... here. Define advance_pc + using run_advance_pc. + 2021-07-03 Mark Wielaard * readelf.c (compare_listptr): Fix dwarf_attr_name argument. diff --git a/src/readelf.c b/src/readelf.c index 161d7e65..8191bde2 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -8373,6 +8373,23 @@ print_form_data (Dwarf *dbg, int form, const unsigned char *readp, return readp; } +/* Only used via run_advance_pc() macro */ +static inline void +run_advance_pc (unsigned int op_advance, + unsigned int minimum_instr_len, + unsigned int max_ops_per_instr, + unsigned int *op_addr_advance, + Dwarf_Word *address, + unsigned int *op_index) +{ + const unsigned int advanced_op_index = (*op_index) + op_advance; + + *op_addr_advance = minimum_instr_len * (advanced_op_index + / max_ops_per_instr); + *address = *address + *op_addr_advance; + *op_index = advanced_op_index % max_ops_per_instr; +} + static void print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr, Dwarf *dbg) @@ -8763,13 +8780,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, /* Apply the "operation advance" from a special opcode or DW_LNS_advance_pc (as per DWARF4 6.2.5.1). */ unsigned int op_addr_advance; - inline void advance_pc (unsigned int op_advance) - { - op_addr_advance = minimum_instr_len * ((op_index + op_advance) - / max_ops_per_instr); - address += op_addr_advance; - op_index = (op_index + op_advance) % max_ops_per_instr; - } +#define advance_pc(op_advance) run_advance_pc(op_advance, minimum_instr_len, \ + max_ops_per_instr, &op_addr_advance, &address, &op_index) if (max_ops_per_instr == 0) { -- cgit v1.2.1 From 0aed4315b2f6c54f4efcf8a8d22e59a36e6eb30d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 19 Jul 2021 15:52:51 +0200 Subject: libelf: Optimize elf_strptr.c validate_str by checking last char first In most cases the last char of the sectio will be zero. Check that first before calling memrchr. This is a minor optimization in normal cases. But it helps asan a lot by removing the memrchr call in most cases. https://sourceware.org/bugzilla/show_bug.cgi?id=28101 Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/elf_strptr.c | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 62437c55..f521ed3d 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2021-07-19 Mark Wielaard + + * elf_strptr.c (validate_str): Check last char is zero first before + calling memrchr on the whole block. + 2021-06-09 Andrei Homescu * elf_getdata.c: Fix d_align for sections where alignment is larger diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c index 76f2caf1..79a24d25 100644 --- a/libelf/elf_strptr.c +++ b/libelf/elf_strptr.c @@ -56,7 +56,9 @@ get_zdata (Elf_Scn *strscn) static bool validate_str (const char *str, size_t from, size_t to) { #if HAVE_DECL_MEMRCHR - return memrchr (&str[from], '\0', to - from) != NULL; + // Check end first, which is likely a zero terminator, to prevent function call + return ((to > 0 && str[to - 1] == '\0') + || (to - from > 0 && memrchr (&str[from], '\0', to - from - 1) != NULL)); #else do { if (to <= from) -- cgit v1.2.1 From 3709516ee0bdc38f736eaf6cee440c85bf6059dd Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Wed, 21 Jul 2021 14:52:07 -0400 Subject: debuginfod: Minor run-debuginfod-find.sh test fixes $PORT3's metrics are not reported on error and $PID4 was not properly killed. This patch addresses both of those issues by reporting the metrics of $PORT3 as $PORT1 and $PORT2 were in err() and waiting for $PID4 to terminate before continuing with the test. Signed-off-by: Noah Sanci --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 1196d6b2..51ae44eb 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-07-21 Noah Sanci + + * run-debuginfod-find.sh: Properly kill $PID4 by waiting for it to + finish. Report $PORT3's metrics in err(). + 2021-06-28 Noah Sanci PR25978 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 1d664be9..b65f3580 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -54,7 +54,7 @@ trap cleanup 0 1 2 3 5 9 15 errfiles_list= err() { echo ERROR REPORTS - for ports in $PORT1 $PORT2 + for ports in $PORT1 $PORT2 $PORT3 do echo ERROR REPORT $port metrics curl -s http://127.0.0.1:$port/metrics @@ -754,6 +754,8 @@ wait_ready $PORT3 'groom{statistic="files scanned (#)"}' 0 wait_ready $PORT3 'groom{statistic="files scanned (mb)"}' 0 kill $PID4 +wait $PID4 +PID4=0 ######################################################################## # set up tests for retrying failed queries. -- cgit v1.2.1 From 9ab0c139eebf4ba40ac721224a673e4b66d29cd9 Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Fri, 16 Jul 2021 15:16:20 -0400 Subject: debuginfod: PR28034 - client-side %-escape url characters When requesting some source files, some URL-inconvenient chars sometimes pop up. Example from f33 libstdc++: /buildid/44d8485cb75512c2ca5c8f70afbd475cae30af4f/source/usr/src/debug/ gcc-10.3.1-1.fc33.x86_64/obj-x86_64-redhat-linux/x86_64-redhat-linux/ libstdc++-v3/src/c++11/../../../../../libstdc++-v3/src/c++11/ condition_variable.cc As this URL is passed into debuginfod's handler_cb, it appears that the + signs are helpfully unescaped to spaces by libmicrohttpd, which 'course breaks everything. In order to ensure the server properly parses urls such as this one, %-escape characters on the client side so that the correct url is preserved and properly processed on the server side. https://sourceware.org/bugzilla/show_bug.cgi?id=28034 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 6 ++++++ debuginfod/debuginfod-client.c | 15 +++++++++++++-- doc/debuginfod.8 | 4 ++++ tests/ChangeLog | 9 +++++++++ tests/run-debuginfod-find.sh | 32 ++++++++++++++++---------------- 5 files changed, 48 insertions(+), 18 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 0de17899..7709c24d 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2021-07-16 Noah Sanci + + PR28034 + * debuginfod-client.c (debuginfod_query_server): % escape filename + so the completed url is processed properly. + 2021-06-28 Noah Sanci PR25978 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index f12f609c..26ba1891 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -832,8 +832,19 @@ debuginfod_query_server (debuginfod_client *c, slashbuildid = "/buildid"; if (filename) /* must start with / */ - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url, - slashbuildid, build_id_bytes, type, filename); + { + /* PR28034 escape characters in completed url to %hh format. */ + char *escaped_string; + escaped_string = curl_easy_escape(data[i].handle, filename, 0); + if (!escaped_string) + { + rc = -ENOMEM; + goto out1; + } + snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url, + slashbuildid, build_id_bytes, type, escaped_string); + curl_free(escaped_string); + } else snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url, slashbuildid, build_id_bytes, type); diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index d83c7cdb..f70af625 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -309,6 +309,10 @@ l l. \../bar/foo.c AT_comp_dir=/zoo/ /buildid/BUILDID/source/zoo//../bar/foo.c .TE +Note: the client should %-escape characters in /SOURCE/FILE that are +not shown as "unreserved" in section 2.3 of RFC3986. Some characters +that will be escaped include "+", "\\", "$", "!", the 'space' character, +and ";". RFC3986 includes a more comprehensive list of these characters. .SS /metrics This endpoint returns a Prometheus formatted text/plain dump of a diff --git a/tests/ChangeLog b/tests/ChangeLog index 51ae44eb..3be9ee48 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,12 @@ +2021-07-16 Noah Sanci + + PR28034 + * run-debuginfod-find.sh: Added a test ensuring files with % + escapable characters in their paths are accessible. The test + itself is changing the name of a binary known previously as prog to + p+r%o$g. General operations such as accessing p+r%o$g acts as the + test for %-escape checking. + 2021-07-21 Noah Sanci * run-debuginfod-find.sh: Properly kill $PID4 by waiting for it to diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index b65f3580..947c1261 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -152,18 +152,18 @@ ps -q $PID1 -e -L -o '%p %c %a' | grep traverse # Compile a simple program, strip its debuginfo and save the build-id. # Also move the debuginfo into another directory so that elfutils # cannot find it without debuginfod. -echo "int main() { return 0; }" > ${PWD}/prog.c -tempfiles prog.c +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c # Create a subdirectory to confound source path names mkdir foobar -gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c -testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a prog | grep 'Build ID' | cut -d ' ' -f 7` + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 -mv prog F -mv prog.debug F +mv p+r%o\$g F +mv p+r%o\$g.debug F kill -USR1 $PID1 # Wait till both files are in the index. wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 @@ -174,7 +174,7 @@ wait_ready $PORT1 'thread_busy{role="scan"}' 0 # Test whether elfutils, via the debuginfod client library dlopen hooks, # is able to fetch debuginfo from the local debuginfod. -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 ######################################################################## @@ -216,22 +216,22 @@ fi # Test whether debuginfod-find is able to fetch those files. rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` -cmp $filename F/prog.debug +cmp $filename F/p+r%o\$g.debug if [ -w $filename ]; then echo "cache file writable, boo" err fi -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` -cmp $filename F/prog +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/p+r%o\\$g` +cmp $filename F/p+r%o\$g # raw source filename -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c` -cmp $filename ${PWD}/prog.c +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../p+r%o\\$g.c` +cmp $filename ${PWD}/p+r%o\$g.c # and also the canonicalized one -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c` -cmp $filename ${PWD}/prog.c +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/p+r%o\\$g.c` +cmp $filename ${PWD}/p+r%o\$g.c ######################################################################## @@ -688,7 +688,7 @@ touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID2 && false || true -- cgit v1.2.1 From 1a13c35dc41e82c563ac971de93f2d5caed80815 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 28 Jul 2021 16:46:36 +0200 Subject: lib: Add static inline reallocarray fallback function Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ configure.ac | 3 +++ lib/ChangeLog | 4 ++++ lib/system.h | 14 ++++++++++++++ 4 files changed, 25 insertions(+) diff --git a/ChangeLog b/ChangeLog index a01f6f9f..12b8f403 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-07-28 Mark Wielaard + + * configure.ac (AC_CHECK_DECLS): Add reallocarray check. + 2021-05-22 Mark Wielaard * configure.ac (AC_INIT): Set version to 0.185. diff --git a/configure.ac b/configure.ac index b348a717..7caff2c5 100644 --- a/configure.ac +++ b/configure.ac @@ -425,6 +425,9 @@ AC_CHECK_DECLS([powerof2],[],[],[#include ]) AC_CHECK_DECLS([mempcpy],[],[], [#define _GNU_SOURCE #include ]) +AC_CHECK_DECLS([reallocarray],[],[], + [#define _GNU_SOURCE + #include ]) AC_CHECK_FUNCS([process_vm_readv]) diff --git a/lib/ChangeLog b/lib/ChangeLog index dd3ebcab..44366fec 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2021-07-28 Mark Wielaard + + * system.h (reallocarray): New static inline fallback function. + 2021-04-19 Martin Liska * system.h (startswith): New function. diff --git a/lib/system.h b/lib/system.h index cdf18ed7..58d9deee 100644 --- a/lib/system.h +++ b/lib/system.h @@ -38,6 +38,7 @@ #include #include #include +#include #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) @@ -70,6 +71,19 @@ ((void *) ((char *) memcpy (dest, src, n) + (size_t) n)) #endif +#if !HAVE_DECL_REALLOCARRAY +static inline void * +reallocarray (void *ptr, size_t nmemb, size_t size) +{ + if (size > 0 && nmemb > SIZE_MAX / size) + { + errno = ENOMEM; + return NULL; + } + return realloc (ptr, nmemb * size); +} +#endif + /* Return TRUE if the start of STR matches PREFIX, FALSE otherwise. */ static inline int -- cgit v1.2.1 From 4c0491637c307e265677d643f3d80ed5f102306b Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Fri, 9 Jul 2021 14:53:10 -0400 Subject: debuginfod: PR27983 - ignore duplicate urls Gazing at server logs, one sees a minority of clients who appear to have duplicate query traffic coming in: the same URL, milliseconds apart. Chances are the user accidentally doubled her $DEBUGINFOD_URLS somehow, and the client library is dutifully asking the servers TWICE. Bug #27863 reduces the pain on the servers' CPU, but dupe network traffic is still being paid. We should reject sending outright duplicate concurrent traffic. The urls are now simply removed upon finding a duplicate after url construction. https://sourceware.org/bugzilla/show_bug.cgi?id=27983 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 9 ++++ debuginfod/debuginfod-client.c | 100 +++++++++++++++++++++++++++++------------ tests/ChangeLog | 6 +++ tests/run-debuginfod-find.sh | 11 +++++ 4 files changed, 97 insertions(+), 29 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 7709c24d..81eb56f9 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -34,6 +34,15 @@ (parse_opt): Handle 'r' option by setting regex_groom to true. (groom): Introduce and use reg_include and reg_exclude. +2021-07-09 Noah Sanci + + PR27983 + * debuginfod-client.c (debuginfod_query_server): As full-length + urls are generated with standardized formats, ignore duplicates. + Created out1 and changed out2 error gotos. Updated url creation print + statements. + (globals): Removed url_delim_char, as it was no longer used. + 2021-06-18 Mark Wielaard * debuginfod-client.c (debuginfod_begin): Don't use client if diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 26ba1891..a70f6d79 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -152,7 +152,6 @@ static const char *cache_xdg_name = "debuginfod_client"; /* URLs of debuginfods, separated by url_delim. */ static const char *url_delim = " "; -static const char url_delim_char = ' '; /* Timeout for debuginfods, in seconds (to get at least 100K). */ static const long default_timeout = 90; @@ -765,13 +764,60 @@ debuginfod_query_server (debuginfod_client *c, goto out0; } + /* Initialize the memory to zero */ + char *strtok_saveptr; + char **server_url_list = NULL; + char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr); /* Count number of URLs. */ int num_urls = 0; - for (int i = 0; server_urls[i] != '\0'; i++) - if (server_urls[i] != url_delim_char - && (i == 0 || server_urls[i - 1] == url_delim_char)) - num_urls++; - + + while (server_url != NULL) + { + /* PR 27983: If the url is already set to be used use, skip it */ + char *slashbuildid; + if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/') + slashbuildid = "buildid"; + else + slashbuildid = "/buildid"; + + char *tmp_url; + if (asprintf(&tmp_url, "%s%s", server_url, slashbuildid) == -1) + { + rc = -ENOMEM; + goto out1; + } + int url_index; + for (url_index = 0; url_index < num_urls; ++url_index) + { + if(strcmp(tmp_url, server_url_list[url_index]) == 0) + { + url_index = -1; + break; + } + } + if (url_index == -1) + { + if (vfd >= 0) + dprintf(vfd, "duplicate url: %s, skipping\n", tmp_url); + free(tmp_url); + } + else + { + num_urls++; + char ** realloc_ptr; + realloc_ptr = reallocarray(server_url_list, num_urls, + sizeof(char*)); + if (realloc_ptr == NULL) + { + rc = -ENOMEM; + goto out1; + } + server_url_list = realloc_ptr; + server_url_list[num_urls-1] = tmp_url; + } + server_url = strtok_r(NULL, url_delim, &strtok_saveptr); + } + int retry_limit = default_retry_limit; const char* retry_limit_envvar = getenv(DEBUGINFOD_RETRY_LIMIT_ENV_VAR); if (retry_limit_envvar != NULL) @@ -804,12 +850,11 @@ debuginfod_query_server (debuginfod_client *c, data[i].errbuf[0] = '\0'; } - char *strtok_saveptr; - char *server_url = strtok_r(server_urls, url_delim, &strtok_saveptr); - /* Initialize each handle. */ - for (int i = 0; i < num_urls && server_url != NULL; i++) + for (int i = 0; i < num_urls; i++) { + if ((server_url = server_url_list[i]) == NULL) + break; if (vfd >= 0) dprintf (vfd, "init server %d %s\n", i, server_url); @@ -819,18 +864,10 @@ debuginfod_query_server (debuginfod_client *c, if (data[i].handle == NULL) { rc = -ENETUNREACH; - goto out1; + goto out2; } data[i].client = c; - /* Build handle url. Tolerate both http://foo:999 and - http://foo:999/ forms */ - char *slashbuildid; - if (strlen(server_url) > 1 && server_url[strlen(server_url)-1] == '/') - slashbuildid = "buildid"; - else - slashbuildid = "/buildid"; - if (filename) /* must start with / */ { /* PR28034 escape characters in completed url to %hh format. */ @@ -841,14 +878,12 @@ debuginfod_query_server (debuginfod_client *c, rc = -ENOMEM; goto out1; } - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s%s", server_url, - slashbuildid, build_id_bytes, type, escaped_string); + snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url, + build_id_bytes, type, escaped_string); curl_free(escaped_string); } else - snprintf(data[i].url, PATH_MAX, "%s%s/%s/%s", server_url, - slashbuildid, build_id_bytes, type); - + snprintf(data[i].url, PATH_MAX, "%s/%s/%s", server_url, build_id_bytes, type); if (vfd >= 0) dprintf (vfd, "url %d %s\n", i, data[i].url); @@ -883,7 +918,6 @@ debuginfod_query_server (debuginfod_client *c, curl_easy_setopt(data[i].handle, CURLOPT_HTTPHEADER, c->headers); curl_multi_add_handle(curlm, data[i].handle); - server_url = strtok_r(NULL, url_delim, &strtok_saveptr); } /* Query servers in parallel. */ @@ -927,7 +961,7 @@ debuginfod_query_server (debuginfod_client *c, case CURLM_OUT_OF_MEMORY: rc = -ENOMEM; break; default: rc = -ENETUNREACH; break; } - goto out1; + goto out2; } if (c->progressfn) /* inform/check progress callback */ @@ -1115,7 +1149,7 @@ debuginfod_query_server (debuginfod_client *c, goto query_in_parallel; } else - goto out1; + goto out2; } if (vfd >= 0) @@ -1145,7 +1179,7 @@ debuginfod_query_server (debuginfod_client *c, if (rc < 0) { rc = -errno; - goto out1; + goto out2; /* Perhaps we need not give up right away; could retry or something ... */ } @@ -1156,6 +1190,9 @@ debuginfod_query_server (debuginfod_client *c, curl_easy_cleanup (data[i].handle); } + for (int i = 0; i < num_urls; ++i) + free(server_url_list[i]); + free(server_url_list); free (data); free (server_urls); @@ -1168,7 +1205,7 @@ debuginfod_query_server (debuginfod_client *c, goto out; /* error exits */ - out1: + out2: /* remove all handles from multi */ for (int i = 0; i < num_urls; i++) { @@ -1181,6 +1218,11 @@ debuginfod_query_server (debuginfod_client *c, (void) rmdir (target_cache_dir); /* nop if not empty */ free(data); + out1: + for (int i = 0; i < num_urls; ++i) + free(server_url_list[i]); + free(server_url_list); + out0: free (server_urls); diff --git a/tests/ChangeLog b/tests/ChangeLog index 3be9ee48..dba750e4 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -30,6 +30,12 @@ * run-debuginfod-find.sh: Added test case for grooming the database using regexes. +2021-07-09 Noah Sanci + + PR27983 + * run-debuginfod-find.sh: Wrote test to ensure duplicate urls are in + fact not checked. + 2021-07-08 Mark Wielaard * Makefile.am (EXTRA_DIST): Fix typo testfile-largealign.bz2 was diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 947c1261..44e16242 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -364,6 +364,17 @@ rm -rf extracted wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles +######################################################################## +# PR27983 ensure no duplicate urls are used in when querying servers for files +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +env DEBUGINFOD_URLS="http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http:127.0.0.1:7999" \ + LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -v executable $BUILDID2 > vlog4 2>&1 || true +tempfiles vlog4 +if [ $( grep -c 'duplicate url: http://127.0.0.1:'$PORT1'.*' vlog4 ) -ne 2 ]; then + echo "Duplicated servers remain"; + err +fi +######################################################################## # Run a bank of queries against the debuginfod-rpms / debuginfod-debs test cases archive_test() { -- cgit v1.2.1 From 216996bc7b343e84997af364bbe135f02b14fa59 Mon Sep 17 00:00:00 2001 From: Hayatsu Shunsuke Date: Sun, 25 Jul 2021 15:50:30 +0900 Subject: update Japanese translation Signed-off-by: Hayatsu Shunsuke --- po/ChangeLog | 4 + po/ja.po | 1117 ++++++++++++++++++++++++++-------------------------------- 2 files changed, 512 insertions(+), 609 deletions(-) diff --git a/po/ChangeLog b/po/ChangeLog index a3c69b56..95a55ed8 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2021-07-25 Hayatsu Shunsuke + + * ja.po: update Japanese translation + 2021-05-22 Mark Wielaard * *.po: Update for 0.185. diff --git a/po/ja.po b/po/ja.po index a9f86dc2..8359b929 100644 --- a/po/ja.po +++ b/po/ja.po @@ -35,26 +35,21 @@ msgid "" msgstr "" #: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format msgid "cannot allocate memory" -msgstr "PLT セクションを割り当てられません: %s" +msgstr "メモリーを割り当てられません" #: lib/printversion.c:40 -#, fuzzy, c-format +#, c-format msgid "" "Copyright (C) %s The elfutils developers <%s>.\n" "This is free software; see the source for copying conditions. There is NO\n" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -"Copyright (C) %s Red Hat, Inc.\n" -"This is free software; see the source for copying conditions. There is NO\n" -"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" #: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 #: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 -#, c-format msgid "memory exhausted" -msgstr "メモリー消費済み" +msgstr "メモリー枯渇" #: libasm/asm_error.c:65 libdw/dwarf_error.c:57 libdwfl/libdwflP.h:51 #: libelf/elf_error.c:60 @@ -64,7 +59,7 @@ msgstr "エラー無し" #: libasm/asm_error.c:66 libdw/dwarf_error.c:67 libdwfl/libdwflP.h:53 #: libelf/elf_error.c:91 msgid "out of memory" -msgstr "メモリー不足" +msgstr "メモリー不足です" #: libasm/asm_error.c:67 msgid "cannot create output file" @@ -72,7 +67,7 @@ msgstr "出力ファイルを作成できません" #: libasm/asm_error.c:68 msgid "invalid parameter" -msgstr "不当なパラメーター" +msgstr "不当なパラメーターです" #: libasm/asm_error.c:69 msgid "cannot change mode of output file" @@ -84,46 +79,43 @@ msgstr "出力ファイルの名前を変更できません" #: libasm/asm_error.c:71 msgid "duplicate symbol" -msgstr "重複シンボル" +msgstr "重複シンボルです" #: libasm/asm_error.c:72 msgid "invalid section type for operation" -msgstr "操作に不当なセクションタイプ" +msgstr "操作に不当なセクションタイプです" #: libasm/asm_error.c:73 msgid "error during output of data" -msgstr "データの出力中にエラー" +msgstr "データ出力中のエラーです" #: libasm/asm_error.c:74 msgid "no backend support available" -msgstr "バックエンドサポートが利用できません" +msgstr "バックエンドサポートを利用できません" #: libasm/asm_error.c:83 libdw/dwarf_error.c:58 libdwfl/libdwflP.h:52 #: libelf/elf_error.c:63 msgid "unknown error" -msgstr "不明なエラー" +msgstr "不明なエラーです" #: libcpu/i386_lex.l:122 -#, fuzzy, c-format -#| msgid "invalid page size value '%s': ignored" +#, c-format msgid "invalid character '%c' at line %d; ignored" -msgstr "不当なページサイズ値 '%s': 無視しました" +msgstr "不当な文字 '%c' が %d 行目にあります; 無視しました" #: libcpu/i386_lex.l:123 -#, fuzzy, c-format -#| msgid "invalid page size value '%s': ignored" +#, c-format msgid "invalid character '\\%o' at line %d; ignored" -msgstr "不当なページサイズ値 '%s': 無視しました" +msgstr "不当な文字 '\\%o' が %d 行目にあります; 無視しました" #: libcpu/i386_parse.y:554 -#, fuzzy, c-format -#| msgid "while reading linker script '%s': %s at line %d" +#, c-format msgid "while reading i386 CPU description: %s at line %d" -msgstr "リンカースクリプト '%1$s' 読込み中: %3$d 行目の %2$s" +msgstr "i386 CPU description の読み込み中: %2$d 行目の %1$s" #: libdw/dwarf_error.c:59 msgid "invalid access" -msgstr "不当なアクセス" +msgstr "不当なアクセスです" #: libdw/dwarf_error.c:60 msgid "no regular file" @@ -131,11 +123,11 @@ msgstr "一般ファイルではありません" #: libdw/dwarf_error.c:61 msgid "I/O error" -msgstr "I/O エラー" +msgstr "I/O エラーです" #: libdw/dwarf_error.c:62 msgid "invalid ELF file" -msgstr "不当な ELF ファイル" +msgstr "不当な ELF ファイルです" #: libdw/dwarf_error.c:63 msgid "no DWARF information" @@ -143,31 +135,31 @@ msgstr "DWARF 情報がありません" #: libdw/dwarf_error.c:64 msgid "cannot decompress DWARF" -msgstr "" +msgstr "DWARF を展開できません" #: libdw/dwarf_error.c:65 msgid "no ELF file" -msgstr "ELF ファイルがありません" +msgstr "ELF ファイルではありません" #: libdw/dwarf_error.c:66 msgid "cannot get ELF header" -msgstr "ELF ヘッダーを得られません" +msgstr "ELF ヘッダーを取得できません" #: libdw/dwarf_error.c:68 msgid "not implemented" -msgstr "未実装" +msgstr "未実装です" #: libdw/dwarf_error.c:69 libelf/elf_error.c:111 libelf/elf_error.c:159 msgid "invalid command" -msgstr "不当なコマンド" +msgstr "不当なコマンドです" #: libdw/dwarf_error.c:70 msgid "invalid version" -msgstr "不当なバージョン" +msgstr "不当なバージョンです" #: libdw/dwarf_error.c:71 msgid "invalid file" -msgstr "不当なファイル" +msgstr "不当なファイルです" #: libdw/dwarf_error.c:72 msgid "no entries found" @@ -175,26 +167,23 @@ msgstr "項目が見つかりません" #: libdw/dwarf_error.c:73 msgid "invalid DWARF" -msgstr "不当な DWARF" +msgstr "不当な DWARFです" #: libdw/dwarf_error.c:74 msgid "no string data" -msgstr "文字データがありません" +msgstr "文字列データではありません" #: libdw/dwarf_error.c:75 -#, fuzzy msgid ".debug_str section missing" -msgstr ".debug_ranges セクションがありません" +msgstr ".debug_str セクションが見つかりません" #: libdw/dwarf_error.c:76 -#, fuzzy msgid ".debug_line_str section missing" -msgstr ".debug_line セクションがありません" +msgstr ".debug_line_str セクションが見つかりません" #: libdw/dwarf_error.c:77 -#, fuzzy msgid ".debug_str_offsets section missing" -msgstr ".debug_ranges セクションがありません" +msgstr ".debug_str_offsets セクションが見つかりません" #: libdw/dwarf_error.c:78 msgid "no address value" @@ -202,23 +191,23 @@ msgstr "アドレス値ではありません" #: libdw/dwarf_error.c:79 msgid "no constant value" -msgstr "固定値ではありません" +msgstr "定数値ではありません" #: libdw/dwarf_error.c:80 msgid "no reference value" -msgstr "参照値がありません" +msgstr "参照値ではありません" #: libdw/dwarf_error.c:81 msgid "invalid reference value" -msgstr "不当な参照値" +msgstr "不当な参照値です" #: libdw/dwarf_error.c:82 msgid ".debug_line section missing" -msgstr ".debug_line セクションがありません" +msgstr ".debug_line セクションが見つかりません" #: libdw/dwarf_error.c:83 msgid "invalid .debug_line section" -msgstr "不当な .debug_line セクション" +msgstr "不当な .debug_line セクションです" #: libdw/dwarf_error.c:84 msgid "debug information too big" @@ -226,28 +215,25 @@ msgstr "デバッグ情報が大きすぎます" #: libdw/dwarf_error.c:85 msgid "invalid DWARF version" -msgstr "不当な DWARF バージョン" +msgstr "不当な DWARF バージョンです" #: libdw/dwarf_error.c:86 msgid "invalid directory index" -msgstr "不当なディレクトリー索引" +msgstr "不当なディレクトリー索引です" #: libdw/dwarf_error.c:87 libdwfl/libdwflP.h:73 msgid "address out of range" msgstr "アドレスが範囲外です" #: libdw/dwarf_error.c:88 -#, fuzzy msgid ".debug_loc section missing" -msgstr ".debug_line セクションがありません" +msgstr ".debug_loc セクションが見つかりません" #: libdw/dwarf_error.c:89 -#, fuzzy msgid ".debug_loclists section missing" -msgstr ".debug_line セクションがありません" +msgstr ".debug_loclists セクション見つかりません" #: libdw/dwarf_error.c:90 -#, fuzzy msgid "not a location list value" msgstr "ロケーションリスト値ではありません" @@ -257,95 +243,91 @@ msgstr "ブロックデータではありません" #: libdw/dwarf_error.c:92 msgid "invalid line index" -msgstr "不当な行索引" +msgstr "不当な行索引です" #: libdw/dwarf_error.c:93 msgid "invalid address range index" -msgstr "不当なアドレス範囲索引" +msgstr "不当なアドレス範囲索引です" #: libdw/dwarf_error.c:94 libdwfl/libdwflP.h:74 msgid "no matching address range" -msgstr "アドレス範囲に対応しません" +msgstr "一致するアドレス範囲がありません" #: libdw/dwarf_error.c:95 msgid "no flag value" -msgstr "フラグ値がありません" +msgstr "フラグ値ではありません" #: libdw/dwarf_error.c:96 libelf/elf_error.c:236 msgid "invalid offset" -msgstr "不当なオフセット" +msgstr "不当なオフセットです" #: libdw/dwarf_error.c:97 msgid ".debug_ranges section missing" -msgstr ".debug_ranges セクションがありません" +msgstr ".debug_ranges セクションが見つかりません" #: libdw/dwarf_error.c:98 -#, fuzzy msgid ".debug_rnglists section missing" -msgstr ".debug_ranges セクションがありません" +msgstr ".debug_rnglists セクションが見つかりません" #: libdw/dwarf_error.c:99 msgid "invalid CFI section" -msgstr "不当な CFI セクション" +msgstr "不当な CFI セクションです" #: libdw/dwarf_error.c:100 msgid "no alternative debug link found" -msgstr "" +msgstr "代替デバッグリンクが見つかりません" #: libdw/dwarf_error.c:101 -#, fuzzy msgid "invalid opcode" -msgstr "不当なオペランド" +msgstr "不当なオペコードです" #: libdw/dwarf_error.c:102 msgid "not a CU (unit) DIE" -msgstr "" +msgstr "CU (unit) DIE ではありません" #: libdw/dwarf_error.c:103 -#, fuzzy msgid "unknown language code" -msgstr "不明な命令コード" +msgstr "不明な言語コードです" #: libdw/dwarf_error.c:104 -#, fuzzy msgid ".debug_addr section missing" -msgstr ".debug_ranges セクションがありません" +msgstr ".debug_addr セクションが見つかりません" #: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 msgid "Input selection options:" -msgstr "選択オプションを入力してください:" +msgstr "入力選択オプション:" #: libdwfl/argp-std.c:48 msgid "Find addresses in FILE" -msgstr "ふぁいる 中のアドレスを探す" +msgstr "FILE の中から アドレスを探す" #: libdwfl/argp-std.c:50 msgid "Find addresses from signatures found in COREFILE" -msgstr "COREFILE 中で見つかった署名からアドレスを探す" +msgstr "COREFILE 中で 見つかった 署名から アドレスを 探す" #: libdwfl/argp-std.c:52 msgid "Find addresses in files mapped into process PID" -msgstr "プロセス PID に対応するファイル中のアドレスを探す" +msgstr "プロセス PID に 対応する ファイル中の アドレスを 探す" #: libdwfl/argp-std.c:54 msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" msgstr "" -"Linux の /proc/PID/maps 形式の ふぁいる から読み込んだものに対応するファイル" -"のアドレスを探す" +"Linux の /proc/PID/maps 形式の FILE から 読み込んだ マッピング された ファイル" +" から アドレスを 探す" #: libdwfl/argp-std.c:56 msgid "Find addresses in the running kernel" -msgstr "実行中のカーネルのアドレスを探す" +msgstr "実行中の カーネルから アドレスを 探す" #: libdwfl/argp-std.c:58 msgid "Kernel with all modules" -msgstr "全てのモジュール付きのカーネル" +msgstr "全ての モジュール付きの カーネル" #: libdwfl/argp-std.c:60 src/stack.c:650 msgid "Search path for separate debuginfo files" -msgstr "分離した debuginfo ファイルべきパスを探す" +msgstr "分離された debuginfo ファイルを 探索する パス" #: libdwfl/argp-std.c:161 msgid "only one of -e, -p, -k, -K, or --core allowed" @@ -358,21 +340,20 @@ msgstr "カーネルシンボルをロードできません" #. Non-fatal to have no modules since we do have the kernel. #: libdwfl/argp-std.c:238 msgid "cannot find kernel modules" -msgstr "カーネルモジュールを見つけられません" +msgstr "カーネルモジュールが見つかりません" #: libdwfl/argp-std.c:255 msgid "cannot find kernel or modules" -msgstr "カーネルかモジュールを見つけられません" +msgstr "カーネルまたはモジュールが見つかりません" #: libdwfl/argp-std.c:294 #, c-format msgid "cannot read ELF core file: %s" -msgstr "ELF コアファイルを読めません: %s" +msgstr "ELF コアファイルを読み込めません: %s" #: libdwfl/argp-std.c:317 -#, fuzzy msgid "Not enough memory" -msgstr "メモリー不足" +msgstr "メモリーが十分ではありません" #: libdwfl/argp-std.c:327 msgid "No modules recognized in core file" @@ -380,170 +361,159 @@ msgstr "コアファイルの中にモジュールを認識できません" #: libdwfl/libdwflP.h:54 msgid "See errno" -msgstr "" +msgstr "errno を参照してください" #: libdwfl/libdwflP.h:55 msgid "See elf_errno" -msgstr "" +msgstr "elf_errno を参照してください" #: libdwfl/libdwflP.h:56 msgid "See dwarf_errno" -msgstr "" +msgstr "dwarf_errno を参照してください" #: libdwfl/libdwflP.h:57 msgid "See ebl_errno (XXX missing)" -msgstr "" +msgstr "ebl_errno を参照してください(XXX が見つかりません)" #: libdwfl/libdwflP.h:58 msgid "gzip decompression failed" -msgstr "" +msgstr "gzip の展開に失敗しました" #: libdwfl/libdwflP.h:59 msgid "bzip2 decompression failed" -msgstr "" +msgstr "bzip2 の展開に失敗しました" #: libdwfl/libdwflP.h:60 msgid "LZMA decompression failed" -msgstr "" +msgstr "LZMA の展開に失敗しました" #: libdwfl/libdwflP.h:61 msgid "zstd decompression failed" -msgstr "" +msgstr "zstd の展開に失敗しました" #: libdwfl/libdwflP.h:62 msgid "no support library found for machine" -msgstr "" +msgstr "マシン用のサポートライブラリが見つかりません" #: libdwfl/libdwflP.h:63 msgid "Callbacks missing for ET_REL file" -msgstr "" +msgstr "ET_REL ファイル用のコールバックが見つかりません" #: libdwfl/libdwflP.h:64 msgid "Unsupported relocation type" -msgstr "" +msgstr "未対応のリロケーションタイプです" #: libdwfl/libdwflP.h:65 msgid "r_offset is bogus" -msgstr "" +msgstr "r_offset が偽物です" #: libdwfl/libdwflP.h:66 libelf/elf_error.c:115 libelf/elf_error.c:175 msgid "offset out of range" -msgstr "オフセットが範囲を越えている" +msgstr "オフセットが範囲外です" #: libdwfl/libdwflP.h:67 -#, fuzzy msgid "relocation refers to undefined symbol" -msgstr "定義されたシンボルの印刷サイズ" +msgstr "リロケーションが未定義シンボルを参照しています" #: libdwfl/libdwflP.h:68 msgid "Callback returned failure" -msgstr "" +msgstr "コールバックが失敗を返しました" #: libdwfl/libdwflP.h:69 -#, fuzzy msgid "No DWARF information found" -msgstr "DWARF 情報がありません" +msgstr "DWARF 情報が見つかりません" #: libdwfl/libdwflP.h:70 msgid "No symbol table found" -msgstr "" +msgstr "シンボルテーブルが見つかりません" #: libdwfl/libdwflP.h:71 -#, fuzzy msgid "No ELF program headers" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "ELF プログラムヘッダーではありません" #: libdwfl/libdwflP.h:72 msgid "address range overlaps an existing module" -msgstr "" +msgstr "アドレス範囲が既存モジュールと重なります" #: libdwfl/libdwflP.h:75 msgid "image truncated" -msgstr "" +msgstr "イメージが切り詰められています" #: libdwfl/libdwflP.h:76 -#, fuzzy msgid "ELF file opened" -msgstr "ファイルのオープンを追跡します。" +msgstr "既に ELF ファイルを開いています" #: libdwfl/libdwflP.h:77 -#, fuzzy msgid "not a valid ELF file" -msgstr "不当な ELF ファイル" +msgstr "不当な ELF ファイルです" #: libdwfl/libdwflP.h:78 -#, fuzzy msgid "cannot handle DWARF type description" -msgstr "Elf 記述子を生成できません: %s" +msgstr "DWARF type description を操作できません" #: libdwfl/libdwflP.h:79 msgid "ELF file does not match build ID" -msgstr "" +msgstr "ELF ファイルがビルド ID と一致しません" #: libdwfl/libdwflP.h:80 -#, fuzzy msgid "corrupt .gnu.prelink_undo section data" -msgstr "ラインデータセクションデータを得られません: %s" +msgstr ".gnu.prelink_undo セクションデータが壊れています" #: libdwfl/libdwflP.h:81 msgid "Internal error due to ebl" -msgstr "" +msgstr "ebl に起因する内部エラー" #: libdwfl/libdwflP.h:82 msgid "Missing data in core file" -msgstr "" +msgstr "コアファイルの中にデータが見つかりません" #: libdwfl/libdwflP.h:83 -#, fuzzy msgid "Invalid register" -msgstr "不当なパラメーター" +msgstr "不当なレジスターです" #: libdwfl/libdwflP.h:84 msgid "Error reading process memory" -msgstr "" +msgstr "プロセスメモリーの読み込みエラーです" #: libdwfl/libdwflP.h:85 msgid "Couldn't find architecture of any ELF" -msgstr "" +msgstr "ELF のアーキテクチャが1つも見つかりませんでした" #: libdwfl/libdwflP.h:86 msgid "Error parsing /proc filesystem" -msgstr "" +msgstr "/proc ファイルシステムのパースエラーです" #: libdwfl/libdwflP.h:87 -#, fuzzy msgid "Invalid DWARF" -msgstr "不当な DWARF" +msgstr "不当な DWARF です" #: libdwfl/libdwflP.h:88 msgid "Unsupported DWARF" -msgstr "" +msgstr "未対応の DWARF です" #: libdwfl/libdwflP.h:89 msgid "Unable to find more threads" -msgstr "" +msgstr "これ以上スレッドが見つかりません" #: libdwfl/libdwflP.h:90 msgid "Dwfl already has attached state" -msgstr "" +msgstr "Dwfl は既にアタッチ状態です" #: libdwfl/libdwflP.h:91 msgid "Dwfl has no attached state" -msgstr "" +msgstr "Dwfl はアタッチ状態ではありません" #: libdwfl/libdwflP.h:92 msgid "Unwinding not supported for this architecture" -msgstr "" +msgstr "このアーキテクチャに対応していない巻き戻しです" #: libdwfl/libdwflP.h:93 -#, fuzzy msgid "Invalid argument" -msgstr "不当なパラメーター" +msgstr "不当な引数です" #: libdwfl/libdwflP.h:94 -#, fuzzy msgid "Not an ET_CORE ELF file" -msgstr "不当な ELF ファイル" +msgstr "ET_CORE ELF ファイルではありません" #: libebl/eblbackendname.c:41 msgid "No backend" @@ -562,14 +532,14 @@ msgid ": %#" msgstr "<不明>: %#" #: libebl/eblobjnote.c:58 -#, fuzzy, c-format +#, c-format msgid "unknown SDT version %u\n" -msgstr "不明なバージョン" +msgstr "不明な SDT バージョン %u です\n" #: libebl/eblobjnote.c:76 -#, fuzzy, c-format +#, c-format msgid "invalid SDT probe descriptor\n" -msgstr "不当なファイル記述子" +msgstr "不当な SDT probe 記述子です\n" #: libebl/eblobjnote.c:126 #, c-format @@ -602,9 +572,8 @@ msgid " Args: " msgstr "" #: libebl/eblobjnote.c:300 -#, c-format msgid " Build ID: " -msgstr " ビルト ID: " +msgstr " ビルド ID: " #. A non-null terminated version string. #: libebl/eblobjnote.c:311 @@ -615,7 +584,7 @@ msgstr "" #: libebl/eblobjnote.c:638 #, c-format msgid " OS: %s, ABI: " -msgstr " OS: %s、ABI: " +msgstr "" #: libebl/eblosabiname.c:70 msgid "Stand alone" @@ -628,98 +597,95 @@ msgstr "<不明>: %d" #: libelf/elf_error.c:67 msgid "unknown version" -msgstr "不明なバージョン" +msgstr "不明なバージョンです" #: libelf/elf_error.c:71 msgid "unknown type" -msgstr "不明なタイプ" +msgstr "不明なタイプです" #: libelf/elf_error.c:75 msgid "invalid `Elf' handle" -msgstr "無効な `Elf' の処理" +msgstr "無効な `Elf' のハンドルです" #: libelf/elf_error.c:79 msgid "invalid size of source operand" -msgstr "ソース演算子の大きさが無効" +msgstr "ソース演算子の大きさが無効です" #: libelf/elf_error.c:83 msgid "invalid size of destination operand" -msgstr "宛先演算子の大きさが無効" +msgstr "宛先演算子の大きさが無効です" #: libelf/elf_error.c:87 src/readelf.c:6217 -#, c-format msgid "invalid encoding" -msgstr "無効なエンコード" +msgstr "無効なエンコードです" #: libelf/elf_error.c:95 msgid "invalid file descriptor" -msgstr "不当なファイル記述子" +msgstr "不当なファイル記述子です" #: libelf/elf_error.c:99 -#, fuzzy msgid "invalid ELF file data" -msgstr "不当な ELF ファイル" +msgstr "不当な ELF ファイルデータです" #: libelf/elf_error.c:103 msgid "invalid operation" -msgstr "不当な操作" +msgstr "不当な操作です" #: libelf/elf_error.c:107 msgid "ELF version not set" -msgstr "ELF のバージョンが設定されていない" +msgstr "ELF のバージョンが設定されていません" #: libelf/elf_error.c:119 msgid "invalid fmag field in archive header" -msgstr "アーカイブヘッダーの不当な fmag 領域" +msgstr "アーカイブヘッダーの不当な fmag 領域です" #: libelf/elf_error.c:123 msgid "invalid archive file" -msgstr "不当なアーカイブファイル" +msgstr "不当なアーカイブファイルです" #: libelf/elf_error.c:127 msgid "descriptor is not for an archive" -msgstr "記述子はアーカイブ用ではありません" +msgstr "記述子がアーカイブ用ではありません" #: libelf/elf_error.c:131 msgid "no index available" -msgstr "索引が使えません" +msgstr "利用できる索引がありません" #: libelf/elf_error.c:135 msgid "cannot read data from file" -msgstr "ファイルからデータを読みません" +msgstr "ファイルからデータを読み込めません" #: libelf/elf_error.c:139 msgid "cannot write data to file" -msgstr "ファイルへデータを書けません" +msgstr "ファイルへデータを書き込めません" #: libelf/elf_error.c:143 msgid "invalid binary class" -msgstr "不当なバイナリークラス" +msgstr "不当なバイナリークラスです" #: libelf/elf_error.c:147 msgid "invalid section index" -msgstr "不当なセクション索引" +msgstr "不当なセクション索引です" #: libelf/elf_error.c:151 msgid "invalid operand" -msgstr "不当なオペランド" +msgstr "不当なオペランドです" #: libelf/elf_error.c:155 msgid "invalid section" -msgstr "不当なセクション" +msgstr "不当なセクションです" #: libelf/elf_error.c:163 msgid "executable header not created first" -msgstr "エクゼキュータブルヘッダーが最初に作られていません" +msgstr "実行可能ヘッダーが最初に作られていません" #: libelf/elf_error.c:167 msgid "file descriptor disabled" -msgstr "ファイル記述子が機能しません" +msgstr "ファイル記述子が無効化されています" #: libelf/elf_error.c:171 -#, fuzzy msgid "archive/member file descriptor mismatch" -msgstr "アーカイブ/メンバー領域が不整合です" +msgstr "アーカイブ/メンバーのファイル記述子の不整合です" #: libelf/elf_error.c:179 msgid "cannot manipulate null section" @@ -727,21 +693,20 @@ msgstr "null セクションを操作できません" #: libelf/elf_error.c:183 msgid "data/scn mismatch" -msgstr "データ/scnが不整合です" +msgstr "データ/scnの不整合です" #: libelf/elf_error.c:187 msgid "invalid section header" -msgstr "不当なセクションヘッダー" +msgstr "不当なセクションヘッダーです" #: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 #: src/readelf.c:10724 src/readelf.c:10906 -#, c-format msgid "invalid data" -msgstr "不当なデータ" +msgstr "不当なデータです" #: libelf/elf_error.c:195 msgid "unknown data encoding" -msgstr "不明なデータエンコード" +msgstr "不明なデータエンコードです" #: libelf/elf_error.c:199 msgid "section `sh_size' too small for data" @@ -749,15 +714,15 @@ msgstr "`sh_size' セクションがデータには小さすぎます" #: libelf/elf_error.c:203 msgid "invalid section alignment" -msgstr "不当なセクション調整" +msgstr "不当なセクションアラインメントです" #: libelf/elf_error.c:207 msgid "invalid section entry size" -msgstr "不当なセクション項目の大きさ" +msgstr "不当なセクション項目の大きさです" #: libelf/elf_error.c:211 msgid "update() for write on read-only file" -msgstr "読込み専用ファイルでの書込みのための update()" +msgstr "読み込み専用ファイルへの書き込みの update() です" #: libelf/elf_error.c:215 msgid "no such file" @@ -765,13 +730,13 @@ msgstr "そのようなファイルはありません" #: libelf/elf_error.c:219 msgid "only relocatable files can contain section groups" -msgstr "リロケータブルファイルのみセクショングループを含むことができます" +msgstr "リロケータブルファイルのみがセクショングループを含むことができます" #: libelf/elf_error.c:224 msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" -"プログラムヘッダーはエクゼキュータブルか、共用オブジェクト、コアファイルにの" +"プログラムヘッダーは、実行可能ファイル、共有オブジェクト、コアファイルにの" "み認められています" #: libelf/elf_error.c:231 @@ -779,105 +744,98 @@ msgid "file has no program header" msgstr "ファイルにプログラムヘッダーがありません" #: libelf/elf_error.c:241 -#, fuzzy msgid "invalid section type" -msgstr "不当なセクション" +msgstr "不当なセクションタイプです" #: libelf/elf_error.c:246 -#, fuzzy msgid "invalid section flags" -msgstr "不当なセクション" +msgstr "不当なセクションフラグです" #: libelf/elf_error.c:251 -#, fuzzy msgid "section does not contain compressed data" -msgstr "セクション [%2d] '%s': セクションデータを得られません\n" +msgstr "セクションが圧縮データを含んでいません" #: libelf/elf_error.c:256 msgid "section contains compressed data" -msgstr "" +msgstr "セクションが圧縮データを含んでいます" #: libelf/elf_error.c:261 -#, fuzzy msgid "unknown compression type" -msgstr "不明なタイプ" +msgstr "不明な圧縮タイプです" #: libelf/elf_error.c:266 -#, fuzzy msgid "cannot compress data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "データを圧縮できません" #: libelf/elf_error.c:271 -#, fuzzy msgid "cannot decompress data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "データを展開できません" #: src/addr2line.c:57 -#, fuzzy msgid "Input format options:" -msgstr "選択オプションを入力してください:" +msgstr "入力フォーマットオプション:" #: src/addr2line.c:59 msgid "Treat addresses as offsets relative to NAME section." -msgstr "" +msgstr "アドレスを NAME セクションに 対する 相対 オフセット として 扱う" #: src/addr2line.c:61 -#, fuzzy msgid "Output format options:" -msgstr "出力形式:" +msgstr "出力フォーマットオプション:" #: src/addr2line.c:62 msgid "Print address before each entry" -msgstr "" +msgstr "各項目の前にアドレスを表示" #: src/addr2line.c:63 msgid "Show only base names of source files" -msgstr "" +msgstr "ソースファイルの ベースネーム のみ 表示" #: src/addr2line.c:65 msgid "Show absolute file names using compilation directory" -msgstr "" +msgstr "コンパイルディレクトリを 使用して 絶対ファイル名を 表示" #: src/addr2line.c:66 msgid "Also show function names" -msgstr "" +msgstr "関数名も表示" #: src/addr2line.c:67 msgid "Also show symbol or section names" -msgstr "" +msgstr "シンボル名 または セクション名も 表示" #: src/addr2line.c:68 msgid "Also show symbol and the section names" -msgstr "" +msgstr "シンボル名と セクション名も 表示" #: src/addr2line.c:69 msgid "Also show line table flags" -msgstr "" +msgstr "行テーブルフラグも表示" #: src/addr2line.c:71 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" +"アドレスの サブルーチンの インライン展開を 引き起こした 全ての ソース位置を 表示" #: src/addr2line.c:74 msgid "Show demangled symbols (ARG is always ignored)" -msgstr "" +msgstr "デマングルされた シンボルを 表示 (ARGは常に無視される)" #: src/addr2line.c:76 msgid "Print all information on one line, and indent inlines" -msgstr "" +msgstr "全ての 情報を 一行で 表示し、 字下げする" #: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" -msgstr "雑則:" +msgstr "Misc:" #. Short description of program. #: src/addr2line.c:86 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." -msgstr "" +msgstr "ADDR のソースファイルと行の情報を 検索する (デフォルトでは a.out から)" #. Strings for arguments in help texts. #: src/addr2line.c:90 @@ -897,7 +855,7 @@ msgstr "" #: src/addr2line.c:652 #, c-format msgid "cannot find symbol '%s'" -msgstr "" +msgstr "シンボル '%s' が見つかりません" #: src/addr2line.c:657 #, c-format @@ -906,7 +864,7 @@ msgstr "" #: src/ar.c:67 msgid "Commands:" -msgstr "コマンド:" +msgstr "コマンド:" #: src/ar.c:68 msgid "Delete files from archive." @@ -922,23 +880,23 @@ msgstr "アーカイブ内のファイルを印刷。" #: src/ar.c:71 msgid "Quick append files to archive." -msgstr "アーカイブへの即座のファイル追加。" +msgstr "アーカイブへ ファイルを 素早く 追加。" #: src/ar.c:73 msgid "Replace existing or insert new file into archive." -msgstr "アーカイブへの既存のファイルの置き換えか、新しいファイルの挿入。" +msgstr "アーカイブの既存ファイルの置き換えまたは新しいファイルの挿入。" #: src/ar.c:74 msgid "Display content of archive." -msgstr "アーカイブの内容の表示" +msgstr "アーカイブの内容の表示。" #: src/ar.c:75 msgid "Extract files from archive." -msgstr "アーカイブからのファイルの取出し" +msgstr "アーカイブからのファイルの取出し。" #: src/ar.c:77 msgid "Command Modifiers:" -msgstr "コマンド修飾子:" +msgstr "コマンド修飾子:" #: src/ar.c:78 msgid "Preserve original dates." @@ -950,11 +908,11 @@ msgstr "名前のインスタンス [COUNT] の使用。" #: src/ar.c:81 msgid "Do not replace existing files with extracted files." -msgstr "既存のファイルを抽出したファイルで置き換えない。" +msgstr "抽出したファイルで既存のファイルを置き換えない。" #: src/ar.c:82 msgid "Allow filename to be truncated if necessary." -msgstr "必要ならばファイル名の切り捨てを認める。" +msgstr "必要ならば ファイル名の 切り詰めを 認める。" #: src/ar.c:84 msgid "Provide verbose output." @@ -978,7 +936,7 @@ msgstr "-b と同じ。" #: src/ar.c:89 msgid "Suppress message when library has to be created." -msgstr "ライブラリーを生成しなければならない時にメッセージを抑止する。" +msgstr "ライブラリーを 生作成なければ ならない時に メッセージを 抑止する。" #: src/ar.c:91 msgid "Use full path for file matching." @@ -986,17 +944,17 @@ msgstr "ファイル照合にフルパスを使う。" #: src/ar.c:92 msgid "Update only older files in archive." -msgstr "アーカイブの古いファイルのみ更新する。" +msgstr "アーカイブの 古い ファイルのみ 更新する。" #. Short description of program. #: src/ar.c:98 msgid "Create, modify, and extract from archives." -msgstr "アーカイブから作成や、修正、抽出する。" +msgstr "アーカイブの作成や修正、アーカイブからの抽出を行う。" #. Strings for arguments in help texts. #: src/ar.c:101 msgid "[MEMBER] [COUNT] ARCHIVE [FILE...]" -msgstr "[メンバー] [合計] アーカイブ [ファイル...]" +msgstr "" #: src/ar.c:180 #, c-format @@ -1021,7 +979,7 @@ msgstr "COUNT パラメーターが必要です" #: src/ar.c:218 #, c-format msgid "invalid COUNT parameter %s" -msgstr "不当な COUNT パラメーター %s" +msgstr "不当な COUNT パラメーター %s です" #: src/ar.c:225 #, c-format @@ -1036,7 +994,7 @@ msgstr "アーカイブ名が必要です" #: src/ar.c:244 #, c-format msgid "command option required" -msgstr "" +msgstr "コマンドオプションが必要です" #: src/ar.c:295 #, c-format @@ -1046,7 +1004,7 @@ msgstr "1つを越える操作が指定されました" #: src/ar.c:389 #, c-format msgid "cannot open archive '%s'" -msgstr "アーカイブ '%s' を開くことができません" +msgstr "アーカイブ '%s' を開けません" #: src/ar.c:399 #, c-format @@ -1061,7 +1019,7 @@ msgstr "%s: アーカイブファイルではありません" #: src/ar.c:407 #, c-format msgid "cannot stat archive '%s'" -msgstr "アーカイブに stat できません: '%s'" +msgstr "アーカイブ '%s' を stat できません" #: src/ar.c:419 #, c-format @@ -1069,24 +1027,22 @@ msgid "no entry %s in archive\n" msgstr "アーカイブに項目 %s がありません\n" #: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format msgid "cannot create hash table" -msgstr "ハッシュテーブルを生成できません" +msgstr "ハッシュテーブルを作成できません" #: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format msgid "cannot insert into hash table" -msgstr "ハッシュに挿入できません" +msgstr "ハッシュテーブルに挿入できません" #: src/ar.c:487 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" -msgstr "'%s' に stat できません" +msgstr "'%s' を stat できません" #: src/ar.c:589 #, c-format msgid "cannot read content of %s: %s" -msgstr "%s の内容を読むことができません: %s" +msgstr "%s の内容を読み込めません: %s" #: src/ar.c:632 #, c-format @@ -1096,7 +1052,7 @@ msgstr "%.*s を開けません" #: src/ar.c:654 #, c-format msgid "failed to write %s" -msgstr "%s への書込みに失敗しました" +msgstr "%s への書き込みに失敗しました" #: src/ar.c:666 #, c-format @@ -1114,9 +1070,8 @@ msgid "cannot rename temporary file to %.*s" msgstr "一時ファイルを %.*s に名前変更できません" #: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 -#, c-format msgid "cannot create new file" -msgstr "新しいファイルを生成できません" +msgstr "新しいファイルを作成できません" #: src/ar.c:1225 #, c-format @@ -1146,50 +1101,45 @@ msgstr "%s は一般ファイルではありません" #: src/ar.c:1288 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" -msgstr "%s の ELF 記述子を得られません: %s\n" +msgstr "%s の ELF 記述子を取得できません: %s\n" #: src/ar.c:1308 #, c-format msgid "cannot read %s: %s" -msgstr "%s を読みません: %s" +msgstr "%s を読み込めません: %s" #: src/ar.c:1483 -#, fuzzy, c-format msgid "cannot represent ar_date" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_date を表現できません" #: src/ar.c:1489 -#, fuzzy, c-format msgid "cannot represent ar_uid" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_uid を表現できません" #: src/ar.c:1495 -#, fuzzy, c-format msgid "cannot represent ar_gid" -msgstr "セクションデータを割り当てられません: %s" +msgstr "ar_gid を表現できません" #: src/ar.c:1501 -#, fuzzy, c-format msgid "cannot represent ar_mode" -msgstr "セクションを得られません: %s" +msgstr "ar_mode を表現できません" #: src/ar.c:1507 -#, fuzzy, c-format msgid "cannot represent ar_size" -msgstr "%s を開けません" +msgstr "ar_size を表現できません" #: src/arlib-argp.c:32 msgid "Use zero for uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンバの uid、 gid、 日付に ゼロを 使用する。" #: src/arlib-argp.c:34 msgid "Use actual uid, gid, and date in archive members." -msgstr "" +msgstr "アーカイブメンバに 実際のuid、 gid、 日付を 使用する。" #: src/arlib-argp.c:63 #, c-format msgid "%s (default)" -msgstr "" +msgstr "%s (デフォルト)" #. The archive is too big. #: src/arlib.c:213 @@ -1200,7 +1150,7 @@ msgstr "アーカイブ '%s' は大きすぎます" #: src/arlib.c:226 #, c-format msgid "cannot read ELF header of %s(%s): %s" -msgstr "%s(%s) の ELF ヘッダーを読めません: %s" +msgstr "%s(%s) の ELF ヘッダーを読み込めません: %s" #: src/elfclassify.c:92 msgid "opening" @@ -1211,44 +1161,32 @@ msgid "reading" msgstr "" #: src/elfclassify.c:245 -#, fuzzy -#| msgid "cannot get ELF header" msgid "ELF header" -msgstr "ELF ヘッダーを得られません" +msgstr "" #: src/elfclassify.c:256 -#, fuzzy -#| msgid "Program Headers:" msgid "program headers" -msgstr "プログラムヘッダー:" +msgstr "" #: src/elfclassify.c:265 -#, fuzzy -#| msgid "Program Headers:" msgid "program header" -msgstr "プログラムヘッダー:" +msgstr "" #: src/elfclassify.c:285 -#, fuzzy -#| msgid "Section Headers:" msgid "section headers" -msgstr "セクションヘッダー:" +msgstr "" #: src/elfclassify.c:296 -#, fuzzy -#| msgid "cannot get section header string table index" msgid "section header string table index" -msgstr "セクションヘッダー文字列テーブル索引が得られません" +msgstr "" #: src/elfclassify.c:310 -#, fuzzy msgid "could not obtain section header" -msgstr "セクションヘッダーを得られません: %s" +msgstr "セクションヘッダーを取得できませんでした" #: src/elfclassify.c:316 -#, fuzzy msgid "could not obtain section name" -msgstr "セクションを得られません: %s" +msgstr "セクション名を取得できませんでした" #: src/elfclassify.c:829 msgid "writing to standard output" @@ -1259,136 +1197,129 @@ msgid "reading from standard input" msgstr "" #: src/elfclassify.c:877 -#, fuzzy -#| msgid "Input selection options:" msgid "Classification options" -msgstr "選択オプションを入力してください:" +msgstr "分類オプション" #: src/elfclassify.c:879 msgid "File looks like an ELF object or archive/static library (default)" -msgstr "" +msgstr "ELF オブジェクト または アーカイブ/静的ライブラリに 見えるファイル (デフォルト)" #: src/elfclassify.c:882 msgid "File is an regular ELF object (not an archive/static library)" -msgstr "" +msgstr "ファイルは 通常の ELF オブジェクト (アーカイブ/静的ライブラリ でない)" #: src/elfclassify.c:885 msgid "File is an ELF archive or static library" -msgstr "" +msgstr "ファイルは ELF アーカイブ または 静的ライブラリ" #: src/elfclassify.c:888 msgid "File is an ELF core dump file" -msgstr "" +msgstr "ファイルは ELF コアダンプファイル" #: src/elfclassify.c:891 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" +"ファイルは シンボルテーブル または .debug_* セクション付きの さらにストリップ可能な ELF ファイル" #: src/elfclassify.c:894 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" -msgstr "" +msgstr "ファイルは (主に) ELF 実行可能プログラム (主として DSO ではない)" #: src/elfclassify.c:897 msgid "File is an ELF program executable (might also be a DSO)" -msgstr "" +msgstr "ファイルは ELF 実行可能プログラム (DSO かもしれない)" #: src/elfclassify.c:900 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" -msgstr "" +msgstr "ファイルは (主に) ELF 共有オブジェクト(DSO) (主として 実行可能プログラムでない)" #: src/elfclassify.c:903 msgid "File is an ELF shared object (DSO) (might also be an executable)" -msgstr "" +msgstr "ファイルは ELF 共有オブジェクト(DSO) (実行可能プログラム かもしれない)" #: src/elfclassify.c:907 -#, fuzzy -#| msgid "cannot find kernel modules" msgid "File is a linux kernel module" -msgstr "カーネルモジュールを見つけられません" +msgstr "ファイルは linux カーネル モジュール" #: src/elfclassify.c:909 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" -msgstr "" +msgstr "ファイルは デバッグ専用 ELF ファイル (分離した .debug、 .dwo または dwz マルチファイル)" #: src/elfclassify.c:912 msgid "File is a loadable ELF object (program or shared object)" -msgstr "" +msgstr "ファイルは ロード可能な ELF オブジェクト (プログラム または 共有オブジェクト)" #: src/elfclassify.c:941 msgid "Input flags" -msgstr "" +msgstr "入力フラグ" #: src/elfclassify.c:943 msgid "Only classify regular (not symlink nor special device) files" -msgstr "" +msgstr "通常 (シンボリックリンク や 特別デバイス でない) ファイルのみを 分類する" #: src/elfclassify.c:945 msgid "" "Also read file names to process from standard input, separated by newlines" -msgstr "" +msgstr "処理するファイル名を 標準入力から 改行区切りで 読み込む" #: src/elfclassify.c:948 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" -msgstr "" +msgstr "処理するファイル名を 標準入力から ASCII ヌル文字区切りで 読み込む" #: src/elfclassify.c:951 msgid "Do not read files from standard input (default)" -msgstr "" +msgstr "標準入力から ファイルを 読み込まない (デフォルト)" #: src/elfclassify.c:953 msgid "Try to open compressed files or embedded (kernel) ELF images" -msgstr "" +msgstr "圧縮ファイル または 組み込み(カーネル) ELF イメージ のオープンを 試みる" #: src/elfclassify.c:956 -#, fuzzy -#| msgid "Output format:" msgid "Output flags" -msgstr "出力形式:" +msgstr "出力フラグ" #: src/elfclassify.c:958 msgid "Output names of files, separated by newline" -msgstr "" +msgstr "改行区切りで ファイル名を 出力する" #: src/elfclassify.c:960 msgid "Output names of files, separated by ASCII NUL" -msgstr "" +msgstr "ASCII ヌル文字区切りで ファイル名を 出力する" #: src/elfclassify.c:962 -#, fuzzy -#| msgid "More than one output file name given." msgid "Do not output file names" -msgstr "ひとつを越える出力ファイル名が与えられました。" +msgstr "ファイル名を出力しない" #: src/elfclassify.c:964 msgid "If printing file names, print matching files (default)" -msgstr "" +msgstr "ファイル名を 表示するならば、 一致するファイルを 表示する (デフォルト)" #: src/elfclassify.c:966 msgid "If printing file names, print files that do not match" -msgstr "" +msgstr "ファイル名を 表示するならば、 一致しないファイルを 表示する" #: src/elfclassify.c:968 msgid "Additional flags" -msgstr "" +msgstr "追加のフラグ" #: src/elfclassify.c:970 msgid "Output additional information (can be specified multiple times)" -msgstr "" +msgstr "追加の情報を 出力する (複数回指定されうる)" #: src/elfclassify.c:972 msgid "Suppress some error output (counterpart to --verbose)" -msgstr "" +msgstr "いくつかのエラー出力を 抑制する ( --verbose の反対)" #. Strings for arguments in help texts. #: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." -msgstr "ふぁいる..." +msgstr "" #: src/elfclassify.c:981 msgid "" @@ -1431,34 +1362,34 @@ msgstr "" #: src/elfcmp.c:60 msgid "Control options:" -msgstr "" +msgstr "制御オプション:" #: src/elfcmp.c:62 msgid "Output all differences, not just the first" -msgstr "" +msgstr "最初のものに限らず、 全ての差異を 出力する" #: src/elfcmp.c:63 msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" -msgstr "" +msgstr "ロード可能セグメントの gap の 扱いを 制御する [ignore|match] (デフォルト: ignore)" #: src/elfcmp.c:65 msgid "Ignore permutation of buckets in SHT_HASH section" -msgstr "" +msgstr "SHT_HASH セクションの バケットの 並べ替えを 無視" #: src/elfcmp.c:67 msgid "Ignore differences in build ID" -msgstr "" +msgstr "ビルド ID の差異を 無視" #: src/elfcmp.c:68 msgid "Output nothing; yield exit status only" -msgstr "" +msgstr "何も出力しない。 終了ステータスのみを生じさせる" #. Short description of program. #: src/elfcmp.c:75 msgid "Compare relevant parts of two ELF files for equality." -msgstr "" +msgstr "2つの ELF ファイルの 関連のある部分の 等価性を 比較する。" #. Strings for arguments in help texts. #: src/elfcmp.c:79 @@ -1467,12 +1398,12 @@ msgstr "" #: src/elfcmp.c:141 msgid "Invalid number of parameters.\n" -msgstr "" +msgstr "不当なパラメータ数です\n" #: src/elfcmp.c:172 src/elfcmp.c:177 #, c-format msgid "cannot get ELF header of '%s': %s" -msgstr "" +msgstr "'%s' の ELF ヘッダーを取得できません: %s" #: src/elfcmp.c:203 #, c-format @@ -1480,9 +1411,9 @@ msgid "%s %s diff: ELF header" msgstr "" #: src/elfcmp.c:210 src/elfcmp.c:213 -#, fuzzy, c-format +#, c-format msgid "cannot get section count of '%s': %s" -msgstr "セクションを得られません: %s" +msgstr "'%s' のセクションヘッダー数を取得できません: %s" #: src/elfcmp.c:218 #, c-format @@ -1490,19 +1421,19 @@ msgid "%s %s diff: section count" msgstr "" #: src/elfcmp.c:225 src/elfcmp.c:228 -#, fuzzy, c-format +#, c-format msgid "cannot get program header count of '%s': %s" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "'%s' のプログラムヘッダー数を取得できません: %s" #: src/elfcmp.c:233 -#, fuzzy, c-format +#, c-format msgid "%s %s diff: program header count" -msgstr "ファイルにプログラムヘッダーがありません" +msgstr "" #: src/elfcmp.c:241 src/elfcmp.c:244 -#, fuzzy, c-format +#, c-format msgid "cannot get hdrstrndx of '%s': %s" -msgstr "セクションを得られません: %s" +msgstr "'%s' の hdrstrndx を取得できません: %s" #: src/elfcmp.c:249 #, c-format @@ -1515,9 +1446,9 @@ msgid "%s %s differ: section [%zu], [%zu] name" msgstr "" #: src/elfcmp.c:330 -#, fuzzy, c-format +#, c-format msgid "%s %s differ: section [%zu] '%s' header" -msgstr "セクション [%zu] '%s' の不当なデータ" +msgstr "" #: src/elfcmp.c:338 src/elfcmp.c:344 #, c-format @@ -1525,16 +1456,14 @@ msgid "cannot get content of section %zu in '%s': %s" msgstr "" #: src/elfcmp.c:353 -#, fuzzy, c-format +#, c-format msgid "symbol table [%zu] in '%s' has zero sh_entsize" msgstr "" -"\n" -"シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" #: src/elfcmp.c:365 src/elfcmp.c:371 #, c-format msgid "cannot get symbol in '%s': %s" -msgstr "" +msgstr "'%s' のシンボルを取得できません: %s" #: src/elfcmp.c:393 #, c-format @@ -1552,9 +1481,9 @@ msgid "%s %s differ: section [%zu] '%s' number of notes" msgstr "" #: src/elfcmp.c:451 -#, fuzzy, c-format +#, c-format msgid "cannot read note section [%zu] '%s' in '%s': %s" -msgstr "セクション [%Zu] '%s' からデータが得られません: %s" +msgstr "" #: src/elfcmp.c:462 #, c-format @@ -1599,7 +1528,7 @@ msgstr "" #: src/elfcmp.c:595 src/elfcmp.c:600 #, c-format msgid "cannot load data of '%s': %s" -msgstr "" +msgstr "'%s' のデータをロードできません: %s" #: src/elfcmp.c:619 src/elfcmp.c:625 #, c-format @@ -1619,7 +1548,7 @@ msgstr "" #: src/elfcmp.c:706 #, c-format msgid "Invalid value '%s' for --gaps parameter." -msgstr "" +msgstr "--gaps パラメータ に対する不当な値 '%s' です" #: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 #: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 @@ -1631,27 +1560,27 @@ msgstr "'%s' を開けません" #: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" -msgstr "" +msgstr "'%s' の ELF 記述子を作成できません: %s" #: src/elfcmp.c:743 #, c-format msgid "cannot create EBL descriptor for '%s'" -msgstr "" +msgstr "'%s' の EBL 記述子を作成できません" #: src/elfcmp.c:761 src/findtextrel.c:394 #, c-format msgid "cannot get section header of section %zu: %s" -msgstr "" +msgstr "セクション %zu のセクションヘッダーを取得できません: %s" #: src/elfcmp.c:771 #, c-format msgid "cannot get content of section %zu: %s" -msgstr "" +msgstr "セクション %zu の内容を取得できません: %s" #: src/elfcmp.c:781 src/elfcmp.c:795 #, c-format msgid "cannot get relocation: %s" -msgstr "" +msgstr "リロケーションを取得できません: %s" #: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 #, c-format @@ -1659,30 +1588,26 @@ msgid "-o option specified twice" msgstr "-o オプションが 2 回指定されています" #: src/elfcompress.c:124 -#, fuzzy, c-format msgid "-t option specified twice" -msgstr "-f オプションが 2 回指定されています" +msgstr "-t オプションが 2 回指定されています" #: src/elfcompress.c:133 -#, fuzzy, c-format +#, c-format msgid "unknown compression type '%s'" -msgstr "不明なタイプ" +msgstr "不明な圧縮タイプ '%s'" #. We need at least one input file. #: src/elfcompress.c:145 src/elfcompress.c:1345 -#, fuzzy, c-format msgid "No input file given" -msgstr "入力ファイルが空です" +msgstr "入力ファイルが与えられていません" #: src/elfcompress.c:151 src/elfcompress.c:1350 -#, fuzzy, c-format msgid "Only one input file allowed together with '-o'" -msgstr "'-o' と '-f' と一緒の場合は入力ファイルは 1 つしか認められません" +msgstr "'-o' と一緒の場合は入力ファイルは 1 つしか認められません" #: src/elfcompress.c:1307 -#, fuzzy msgid "Place (de)compressed output into FILE" -msgstr "はぎ取った出力を ふぁいる に置く" +msgstr "圧縮(展開)した出力を FILE に置く" #: src/elfcompress.c:1310 msgid "" @@ -1695,11 +1620,12 @@ msgstr "" msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" -msgstr "" +msgstr "圧縮(展開)する セクション名。 SECTION は 拡張 ワイルドカード パターン" +"(デフォルトで '.?(z)debug*')" #: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" -msgstr "" +msgstr "圧縮(展開) されている 各セクション に対する メッセージを 表示" #: src/elfcompress.c:1319 msgid "" @@ -1712,21 +1638,20 @@ msgid "Relax a few rules to handle slightly broken ELF files" msgstr "少し壊れた ELF ファイルを取り扱うためにルールを少し緩和する" #: src/elfcompress.c:1325 -#, fuzzy msgid "Be silent when a section cannot be compressed" -msgstr "セクション [%2d] '%s': セクションデータを得られません\n" +msgstr "セクションを圧縮できないときに静かにする" #: src/elfcompress.c:1335 msgid "Compress or decompress sections in an ELF file." -msgstr "" +msgstr "ELF ファイルの セクションを 圧縮 または 展開する" #: src/elflint.c:63 msgid "Be extremely strict, flag level 2 features." -msgstr "非常に厳密にやってください、フラグレベル 2 機能。" +msgstr "非常に厳格にする。 フラグレベル 2 機能。" #: src/elflint.c:64 msgid "Do not print anything if successful" -msgstr "成功したら何も印刷しない" +msgstr "成功した場合は何も表示しない" #: src/elflint.c:65 msgid "Binary is a separate debuginfo file" @@ -1737,7 +1662,7 @@ msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" msgstr "" -"バイナリーは GNU ld で作成され、従ってある方法で壊れているのが知られている" +"バイナリーは GNU ld で作成され、 従って、 ある方法で 壊れることが 知られている" #. Short description of program. #: src/elflint.c:73 @@ -1745,14 +1670,14 @@ msgid "Pedantic checking of ELF files compliance with gABI/psABI spec." msgstr "ELF ファイルが gABI/psABI 仕様へ準拠しているかの厳密なチェック。" #: src/elflint.c:154 src/readelf.c:368 -#, fuzzy, c-format +#, c-format msgid "cannot open input file '%s'" -msgstr "入力ファイルを開けません" +msgstr "入力ファイル '%s' を開けません" #: src/elflint.c:161 -#, fuzzy, c-format +#, c-format msgid "cannot generate Elf descriptor for '%s': %s\n" -msgstr "Elf 記述子を生成できません: %s\n" +msgstr "'%s' に対する Elf 記述子を生成できません: %s\n" #: src/elflint.c:180 #, c-format @@ -1770,7 +1695,7 @@ msgstr "ファイル名がありません。\n" #: src/elflint.c:284 #, c-format msgid " error while freeing sub-ELF descriptor: %s\n" -msgstr "副-ELF 記述子を解放している時にエラー: %s\n" +msgstr "sub-ELF 記述子を解放している時にエラー: %s\n" #. We cannot do anything. #: src/elflint.c:292 @@ -1799,7 +1724,7 @@ msgid "unsupported OS ABI e_ident[%d] == '%s'\n" msgstr "不明な OS ABI e_ident[%d] == '%s'\n" #: src/elflint.c:380 -#, fuzzy, c-format +#, c-format msgid "unsupported ABI version e_ident[%d] == %d\n" msgstr "不明な ABI バージョン e_ident[%d] == %d\n" @@ -1865,7 +1790,7 @@ msgid "Can only check %u headers, shnum was %u\n" msgstr "" #: src/elflint.c:487 -#, fuzzy, c-format +#, c-format msgid "invalid number of program header table entries\n" msgstr "プログラムヘッダー項目数として不当な数\n" @@ -1914,12 +1839,11 @@ msgstr "" "一部分が設定されていません\n" #: src/elflint.c:594 -#, fuzzy, c-format +#, c-format msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -"セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーを継" -"続していません\n" +"セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーより前にありません\n" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 @@ -3564,36 +3488,36 @@ msgstr "" #: src/findtextrel.c:60 msgid "Input Selection:" -msgstr "" +msgstr "入力選択:" #: src/findtextrel.c:61 msgid "Prepend PATH to all file names" -msgstr "" +msgstr "全ての ファイル名に対して PATH を先頭に 付け加える" #: src/findtextrel.c:63 msgid "Use PATH as root of debuginfo hierarchy" -msgstr "" +msgstr "debuginfo 階層の ルートとして PATH を使用する" #. Short description of program. #: src/findtextrel.c:70 msgid "Locate source of text relocations in FILEs (a.out by default)." -msgstr "" +msgstr "FILE (デフォルトでは a.out)の テキスト リロケーションの ソースを 検索する" #. Strings for arguments in help texts. #: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" -msgstr "[ふぁいる...]" +msgstr "" #: src/findtextrel.c:222 #, c-format msgid "cannot get ELF header '%s': %s" -msgstr "" +msgstr "ELF ヘッダー '%s' を取得できません: %s" #: src/findtextrel.c:233 #, c-format msgid "'%s' is not a DSO or PIE" -msgstr "" +msgstr "'%s' は DSO または PIE ではありません" #: src/findtextrel.c:253 #, c-format @@ -3603,7 +3527,7 @@ msgstr "" #: src/findtextrel.c:277 #, c-format msgid "cannot read dynamic section: %s" -msgstr "" +msgstr "dynamic セクションを読み込めません: %s" #: src/findtextrel.c:298 #, c-format @@ -3613,17 +3537,17 @@ msgstr "" #: src/findtextrel.c:310 #, c-format msgid "while reading ELF file" -msgstr "" +msgstr "ELF ファイルの読み込み中" #: src/findtextrel.c:314 -#, fuzzy, c-format +#, c-format msgid "cannot get program header count: %s" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "プログラムヘッダー数を取得できません: %s" #: src/findtextrel.c:325 src/findtextrel.c:342 -#, fuzzy, c-format +#, c-format msgid "cannot get program header index at offset %zd: %s" -msgstr "プログラムヘッダーを得られません: %s" +msgstr "オフセット %zd に位置するプログラムヘッダー索引を取得できません: %s" #: src/findtextrel.c:406 #, c-format @@ -3638,13 +3562,14 @@ msgstr "" #: src/findtextrel.c:516 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" -msgstr "" +msgstr "%s は -fpic/-fPIC 付きでコンパイルされていません\n" #: src/findtextrel.c:570 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" +"関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていません\n" #: src/findtextrel.c:577 src/findtextrel.c:597 #, c-format @@ -3652,6 +3577,7 @@ msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" +"関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていないかもしれません\n" #: src/findtextrel.c:585 #, c-format @@ -3659,28 +3585,30 @@ msgid "" "either the file containing the function '%s' or the file containing the " "function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" +"関数 '%s' を含むファイル または 関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていません\n" #: src/findtextrel.c:605 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" msgstr "" +"リロケーションは 書き込み禁止セグメントの オフセット %llu に位置するメモリを 修正します\n" #: src/nm.c:66 src/strip.c:70 msgid "Output selection:" -msgstr "出力選択:" +msgstr "出力選択:" #: src/nm.c:67 msgid "Display debugger-only symbols" -msgstr "デバッガー専用シンボルを表示" +msgstr "デバッガ専用シンボルを表示" #: src/nm.c:68 msgid "Display only defined symbols" -msgstr "定義されたシンボルのみを表示" +msgstr "定義済みシンボルのみを表示" #: src/nm.c:71 msgid "Display dynamic symbols instead of normal symbols" -msgstr "通常シンボルの代わりに動的シンボルを表示" +msgstr "通常シンボルの 代わりに 動的シンボルを 表示" #: src/nm.c:72 msgid "Display only external symbols" @@ -3692,23 +3620,23 @@ msgstr "未定義シンボルのみを表示" #: src/nm.c:75 msgid "Include index for symbols from archive members" -msgstr "アーカイブメンバーからのシンボルの索引を含める" +msgstr "アーカイブメンバからの シンボルの 索引を 含める" #: src/nm.c:77 src/size.c:54 msgid "Output format:" -msgstr "出力形式:" +msgstr "出力形式:" #: src/nm.c:79 msgid "Print name of the input file before every symbol" -msgstr "全てのシンボルの前に入力ファイル名を印刷" +msgstr "各シンボルの 前に 入力ファイル名を 表示" #: src/nm.c:82 msgid "" "Use the output format FORMAT. FORMAT can be `bsd', `sysv' or `posix'. The " "default is `sysv'" msgstr "" -"出力形式として FORMATを使う。FORMAT は `bsd'か、`sysv'、`posix' のどれか。省" -"略値は `sysv'" +"出力形式として FORMAT を使う。 FORMAT は `bsd'、`sysv'、`posix' のいずれか。" +"デフォルトは `sysv'" #: src/nm.c:84 msgid "Same as --format=bsd" @@ -3720,24 +3648,23 @@ msgstr "--format=posix と同じ" #: src/nm.c:86 src/size.c:60 msgid "Use RADIX for printing symbol values" -msgstr "シンボル値を印刷するために RADIX を使う" +msgstr "シンボル値の 表示に RADIX を使う" #: src/nm.c:87 -#, fuzzy msgid "Mark special symbols" -msgstr "弱いシンボルに印を点ける" +msgstr "特別なシンボルに印を点ける" #: src/nm.c:89 msgid "Print size of defined symbols" -msgstr "定義されたシンボルの印刷サイズ" +msgstr "定義済みシンボルのサイズを表示" #: src/nm.c:91 src/size.c:68 src/strip.c:75 src/unstrip.c:69 msgid "Output options:" -msgstr "出力オプション:" +msgstr "出力オプション:" #: src/nm.c:92 msgid "Sort symbols numerically by address" -msgstr "シンボルをアドレスにより数値的に並べ替える" +msgstr "シンボルを アドレスにより 数値的に 並べ替える" #: src/nm.c:94 msgid "Do not sort the symbols" @@ -3749,17 +3676,16 @@ msgstr "並べ替えの意味を逆にする" #: src/nm.c:98 msgid "Decode low-level symbol names into source code names" -msgstr "" +msgstr "低水準の シンボル名を ソースコード上の 名前に デコードする" #. Short description of program. #: src/nm.c:105 msgid "List symbols from FILEs (a.out by default)." -msgstr "ふぁいる からシンボルを表示 (デフォルトではa.out)。" +msgstr "FILE のシンボルを一覧表示 (デフォルトではa.out)。" #: src/nm.c:116 src/objdump.c:79 -#, fuzzy msgid "Output formatting" -msgstr "出力形式:" +msgstr "出力形式:" #: src/nm.c:140 src/objdump.c:103 src/size.c:105 src/strip.c:133 #, fuzzy, c-format @@ -3898,33 +3824,32 @@ msgstr "%s%s%s: シンボルがありません" #: src/objdump.c:52 msgid "Mode selection:" -msgstr "" +msgstr "モード選択:" #: src/objdump.c:53 msgid "Display relocation information." -msgstr "" +msgstr "リロケーション 情報の 表示" #: src/objdump.c:55 msgid "Display the full contents of all sections requested" -msgstr "" +msgstr "要求された 全ての セクションの 最大限の 内容を 表示" #: src/objdump.c:57 msgid "Display assembler code of executable sections" -msgstr "" +msgstr "実行可能 セクションの アセンブラコードを 表示" #: src/objdump.c:59 -#, fuzzy msgid "Output content selection:" -msgstr "出力選択:" +msgstr "出力内容選択:" #: src/objdump.c:61 msgid "Only display information for section NAME." -msgstr "" +msgstr "NAME セクションの情報のみを表示" #. Short description of program. #: src/objdump.c:67 msgid "Show information from FILEs (a.out by default)." -msgstr "" +msgstr "FILE から情報を表示する (デフォルトでは a.out)" #: src/objdump.c:218 src/readelf.c:582 msgid "No operation specified.\n" @@ -3961,19 +3886,17 @@ msgid "Contents of section %s:\n" msgstr "" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" -msgstr "" +msgstr "逆アセンブルできません" #: src/objdump.c:760 -#, fuzzy, c-format msgid "cannot create backend for elf file" -msgstr "新しいファイルを生成できません" +msgstr "elf ファイル用にバックエンドを作成できません" #. Short description of program. #: src/ranlib.c:63 msgid "Generate an index to speed access to archives." -msgstr "" +msgstr "アーカイブへのアクセス加速のための索引生成" #. Strings for arguments in help texts. #: src/ranlib.c:66 @@ -3981,14 +3904,13 @@ msgid "ARCHIVE" msgstr "" #: src/ranlib.c:102 -#, c-format msgid "Archive name required" -msgstr "" +msgstr "アーカイブ名が必要です" #: src/ranlib.c:166 #, c-format msgid "'%s' is no archive" -msgstr "" +msgstr "'%s' はアーカイブではありません" #: src/ranlib.c:201 #, c-format @@ -3996,14 +3918,13 @@ msgid "error while freeing sub-ELF descriptor: %s" msgstr "" #: src/readelf.c:97 -#, fuzzy msgid "ELF input selection:" -msgstr "出力選択:" +msgstr "ELF入力選択:" #: src/readelf.c:99 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" -msgstr "" +msgstr "ELF 入力データとして SECTION (デフォルトでは .gnu_debugdata) を使用する" #: src/readelf.c:102 msgid "" @@ -4012,9 +3933,8 @@ msgid "" msgstr "" #: src/readelf.c:104 -#, fuzzy msgid "ELF output selection:" -msgstr "出力選択:" +msgstr "ELF出力選択:" #: src/readelf.c:106 msgid "All these plus -p .strtab -p .dynstr -p .comment" @@ -4030,7 +3950,7 @@ msgstr "ELF ファイルヘッダーを表示" #: src/readelf.c:110 msgid "Display histogram of bucket list lengths" -msgstr "バケットリスト長の柱状図を表示" +msgstr "バケットリスト長のヒストグラムを表示" #: src/readelf.c:111 msgid "Display the program headers" @@ -4041,47 +3961,40 @@ msgid "Display relocations" msgstr "リロケーションを表示" #: src/readelf.c:114 -#, fuzzy msgid "Display the section groups" -msgstr "セクションのヘッダーを表示" +msgstr "セクショングループを表示" #: src/readelf.c:115 -#, fuzzy msgid "Display the sections' headers" -msgstr "セクションのヘッダーを表示" +msgstr "セクションヘッダーを表示" #: src/readelf.c:118 -#, fuzzy msgid "Display the symbol table sections" -msgstr "シンボルテーブルを表示" +msgstr "シンボルテーブルセクションを表示" #: src/readelf.c:120 -#, fuzzy msgid "Display (only) the dynamic symbol table" -msgstr "外部シンボルのみを表示" +msgstr "動的シンボルテーブル(のみ)を表示" #: src/readelf.c:121 msgid "Display versioning information" -msgstr "バージョニング情報の表示" +msgstr "バージョニング情報を表示" #: src/readelf.c:122 -#, fuzzy msgid "Display the ELF notes" -msgstr "コアノートを表示" +msgstr "ELF notes を表示" #: src/readelf.c:124 -#, fuzzy msgid "Display architecture specific information, if any" msgstr "(もしあれば)アーキテクチャー固有の情報を表示" #: src/readelf.c:126 msgid "Display sections for exception handling" -msgstr "例外を取り扱うためのセクションを表示" +msgstr "例外ハンドリングのセクションを表示" #: src/readelf.c:128 -#, fuzzy msgid "Additional output selection:" -msgstr "出力選択:" +msgstr "追加の出力選択:" #: src/readelf.c:130 #, fuzzy @@ -4095,11 +4008,11 @@ msgstr "" #: src/readelf.c:134 msgid "Dump the uninterpreted contents of SECTION, by number or name" -msgstr "数字か名前で解釈できないセクションの内容をダンプする" +msgstr "SECTION の 未解釈の 内容を ダンプする。 番号 または 名前で指定する" #: src/readelf.c:136 msgid "Print string contents of sections" -msgstr "セクションの文字列内容を印刷する" +msgstr "セクションの文字列内容を表示" #: src/readelf.c:139 msgid "Display the symbol index of an archive" @@ -4107,7 +4020,7 @@ msgstr "アーカイブのシンボル索引を表示" #: src/readelf.c:141 msgid "Output control:" -msgstr "出力制御:" +msgstr "出力制御:" #: src/readelf.c:143 msgid "Do not find symbol names for addresses in DWARF data" @@ -4132,7 +4045,7 @@ msgstr "" #. Short description of program. #: src/readelf.c:154 msgid "Print information from ELF file in human-readable form." -msgstr "ELF ファイルから人間が読める形で情報を印刷する。" +msgstr "ELF ファイルから人間が読める形で情報を表示する。" #. Look up once. #: src/readelf.c:350 @@ -4161,7 +4074,7 @@ msgstr "セクション数を決定できません: %s" #: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 #, c-format msgid "cannot get section: %s" -msgstr "セクションを得られません: %s" +msgstr "セクションを取得できません: %s" #: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 #: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 @@ -4170,28 +4083,26 @@ msgstr "セクションを得られません: %s" #: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" -msgstr "セクションヘッダーを得られません: %s" +msgstr "セクションヘッダーを取得できません: %s" #: src/readelf.c:663 -#, fuzzy, c-format msgid "cannot get section name" -msgstr "セクションを得られません: %s" +msgstr "セクション名を取得できません" #: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 #: src/readelf.c:10891 #, c-format msgid "cannot get %s content: %s" -msgstr "%s の内容を得られません: %s" +msgstr "%s の内容を取得できません: %s" #: src/readelf.c:688 -#, fuzzy, c-format +#, c-format msgid "cannot create temp file '%s'" -msgstr "新しいファイル '%s' を生成できません: %s" +msgstr "一時ファイル '%s' を作成できません" #: src/readelf.c:697 -#, fuzzy, c-format msgid "cannot write section data" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクションデータを書き込みできません" #: src/readelf.c:703 src/readelf.c:720 src/readelf.c:749 #, c-format @@ -4199,14 +4110,13 @@ msgid "error while closing Elf descriptor: %s" msgstr "Elf 記述子を閉じている時にエラー: %s" #: src/readelf.c:710 -#, fuzzy, c-format msgid "error while rewinding file descriptor" -msgstr "Elf 記述子を閉じている時にエラー: %s" +msgstr "ファイル記述子を巻き戻している時にエラー" #: src/readelf.c:744 #, c-format msgid "'%s' is not an archive, cannot print archive index" -msgstr "'%s' はアーカイブではなく、アーカイブ索引を印刷できません" +msgstr "'%s' はアーカイブではなく、アーカイブ索引を表示できません" #: src/readelf.c:848 #, c-format @@ -4231,22 +4141,21 @@ msgstr "セクション [%Zu] '%s' からデータが得られません: %s" #: src/readelf.c:940 #, c-format msgid "cannot read ELF header: %s" -msgstr "ELF ヘッダーが読めません: %s" +msgstr "ELF ヘッダーを読み込めません: %s" #: src/readelf.c:948 -#, c-format msgid "cannot create EBL handle" -msgstr "EBL ヘッダーを生成できません" +msgstr "EBL ハンドルを作成できません" #: src/readelf.c:961 -#, fuzzy, c-format +#, c-format msgid "cannot determine number of program headers: %s" -msgstr "セクション数を決定できません: %s" +msgstr "プログラムヘッダの数を決定できません: %s" #: src/readelf.c:993 -#, fuzzy, c-format +#, c-format msgid "cannot read ELF: %s" -msgstr "%s を読みません: %s" +msgstr "ELFを読み込めません: %s" #: src/readelf.c:1054 msgid "NONE (None)" @@ -5491,19 +5400,19 @@ msgstr "" "命令コード:\n" #: src/readelf.c:8524 -#, fuzzy, c-format +#, c-format msgid "cannot handle .debug_line version: %u\n" -msgstr ".degub_ranges の内容を得られません: %s" +msgstr ".debug_line バージョンを扱えません: %u\n" #: src/readelf.c:8532 -#, fuzzy, c-format +#, c-format msgid "cannot handle address size: %u\n" -msgstr "アドレス値ではありません" +msgstr "アドレスサイズを扱えません: %u\n" #: src/readelf.c:8540 -#, fuzzy, c-format +#, c-format msgid "cannot handle segment selector size: %u\n" -msgstr "セクションを得られません: %s" +msgstr "セグメントセレクタサイズを扱えません: %u\n" #: src/readelf.c:8550 #, c-format @@ -5611,9 +5520,8 @@ msgstr "カラムを % に設定する\n" #. Unknown, ignore it. #: src/readelf.c:8906 -#, fuzzy msgid " unknown opcode" -msgstr "不明な命令コード" +msgstr "不明なオペコード" #. Takes no argument. #: src/readelf.c:8918 @@ -5690,9 +5598,9 @@ msgid_plural " unknown opcode with % parameters:" msgstr[0] " % 個のパラメーターのある不明な命令コード:" #: src/readelf.c:9084 -#, fuzzy, c-format +#, c-format msgid "cannot get .debug_loclists content: %s" -msgstr ".debug_loc の内容を得られません: %s" +msgstr ".debug_loclists の内容を取得できません: %s" #: src/readelf.c:9250 #, fuzzy, c-format @@ -6002,9 +5910,9 @@ msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" #: src/readelf.c:12518 -#, fuzzy, c-format +#, c-format msgid "cannot get content of note: %s" -msgstr "ノートセクションの内容を得られません: %s" +msgstr "ノートセクションの内容を取得できません: %s" #: src/readelf.c:12552 #, c-format @@ -6123,18 +6031,18 @@ msgstr "" "アーカイブ '%s' にはシンボル索引がありません\n" #: src/readelf.c:12853 -#, fuzzy, c-format +#, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" "\n" -"アーカイブ '%s' の索引には %Zu 項目あります:\n" +"アーカイブ '%s' の索引は %zu 個の項目を持ちます:\n" #: src/readelf.c:12871 -#, fuzzy, c-format +#, c-format msgid "cannot extract member at offset %zu in '%s': %s" -msgstr "'%2$s' の オフセット %1$Zu のメンバーを抽出できません: %3$s" +msgstr "'%2$s' の オフセット %1$zu のメンバーを抽出できません: %3$s" #: src/readelf.c:12876 #, c-format @@ -6146,8 +6054,8 @@ msgid "" "Use the output format FORMAT. FORMAT can be `bsd' or `sysv'. The default " "is `bsd'" msgstr "" -"出力形式として FORMAT を使ってください。FORMAT は `bsd'か、`sysv' のどちらか" -"です。省略値は `bsd'です" +"出力形式として FORMAT を使ってください。 FORMAT は `bsd'、 `sysv' のどちらか" +"です。 デフォルトは `bsd'です" #: src/size.c:58 msgid "Same as `--format=sysv'" @@ -6171,11 +6079,11 @@ msgstr "`--radix=16' と同じ" #: src/size.c:66 msgid "Similar to `--format=sysv' output but in one line" -msgstr "`--format=sysv' の出力と似ていますが、1行です" +msgstr "`--format=sysv' の出力と 似ていますが、 1行です" #: src/size.c:70 msgid "Print size and permission flags for loadable segments" -msgstr "ロード可能セグメントのための印刷の大きさと許可フラグ" +msgstr "ロード可能セグメント の大きさと 許可フラグの 表示" #: src/size.c:71 msgid "Display the total sizes (bsd only)" @@ -6184,7 +6092,7 @@ msgstr "合計の大きさを表示 (bsd のみ)" #. Short description of program. #: src/size.c:76 msgid "List section sizes of FILEs (a.out by default)." -msgstr "ふぁいる のセクションの大きさの一覧 (省略値は a.out)" +msgstr "FILE のセクションの 大きさの 一覧表示 (デフォルトでは a.out)" #: src/size.c:240 #, c-format @@ -6237,11 +6145,9 @@ msgid " (ex %s)" msgstr " (ex %s)" #: src/size.c:420 -#, fuzzy -#| msgid "invalid section" msgctxt "sysv" msgid "section" -msgstr "不当なセクション" +msgstr "" #: src/size.c:421 msgctxt "sysv" @@ -6259,9 +6165,8 @@ msgid "Total" msgstr "" #: src/size.c:482 -#, fuzzy, c-format msgid "cannot get section header" -msgstr "セクションヘッダーを得られません: %s" +msgstr "セクションヘッダーを取得できません" #: src/size.c:585 msgid "(TOTALS)\n" @@ -6273,9 +6178,9 @@ msgid "-p PID should be a positive process id." msgstr "" #: src/stack.c:493 -#, fuzzy, c-format +#, c-format msgid "Cannot open core file '%s'" -msgstr "アーカイブ '%s' を開くことができません" +msgstr "コアファイル'%s' を開くことができません" #: src/stack.c:553 #, c-format @@ -6298,68 +6203,64 @@ msgid "One of -p PID or --core COREFILE should be given." msgstr "" #: src/stack.c:645 -#, fuzzy msgid "Show stack of process PID" -msgstr "検索ツリーを生成できません" +msgstr "process PID のスタックを表示" #: src/stack.c:647 msgid "Show stack found in COREFILE" -msgstr "" +msgstr "COREFILE で見つかったスタックを表示" #: src/stack.c:648 msgid "(optional) EXECUTABLE that produced COREFILE" -msgstr "" +msgstr "(optional) COREFILE を生成した EXECUTABLE" #: src/stack.c:652 -#, fuzzy msgid "Output selection options:" -msgstr "選択オプションを入力してください:" +msgstr "出力選択オプション:" #: src/stack.c:654 -#, fuzzy msgid "Additionally show frame activation" -msgstr "出力選択:" +msgstr "frame activation を さらに 表示" #: src/stack.c:656 msgid "Additionally try to lookup DWARF debuginfo name for frame address" -msgstr "" +msgstr "フレーム アドレスに 対する DWARF debuginfo name の検索を さらに試みる" #: src/stack.c:659 msgid "" "Additionally show inlined function frames using DWARF debuginfo if available " "(implies -d)" -msgstr "" +msgstr "可能であれば DWARF debuginfo を使って インライン 関数の フレームを表示 (暗黙的に -d を伴う)" #: src/stack.c:661 msgid "Additionally show module file information" -msgstr "" +msgstr "モジュール ファイル情報を さらに 表示" #: src/stack.c:663 -#, fuzzy msgid "Additionally show source file information" -msgstr "出力選択:" +msgstr "ソース ファイル情報を さらに 表示" #: src/stack.c:665 msgid "" "Show all additional information (activation, debugname, inlines, module and " "source)" -msgstr "" +msgstr "全ての 追加情報を 表示 (activation, debugname, inlines, module, source)" #: src/stack.c:667 msgid "Do not resolve address to function symbol name" -msgstr "" +msgstr "アドレスを 関数シンボル名に 解決しない" #: src/stack.c:669 msgid "Show raw function symbol names, do not try to demangle names" -msgstr "" +msgstr "生の 関数シンボル名を 表示し、 デマングルを 試みない" #: src/stack.c:671 msgid "Show module build-id, load address and pc offset" -msgstr "" +msgstr "モジュールの ビルド ID、ロードアドレスと PC オフセット を表示" #: src/stack.c:673 msgid "Show the backtrace of only one thread" -msgstr "" +msgstr "1つのスレッドだけのバックトレースを表示" #: src/stack.c:675 msgid "Show at most MAXFRAMES per thread (default 256, use 0 for unlimited)" @@ -6367,7 +6268,7 @@ msgstr "" #: src/stack.c:677 msgid "Show module memory map with build-id, elf and debug files detected" -msgstr "" +msgstr "検出された ビルド ID、 elf、 debug ファイル付きで モジュールの メモリマップを 表示" #: src/stack.c:685 msgid "" @@ -6382,44 +6283,45 @@ msgid "" msgstr "" #: src/stack.c:760 -#, c-format msgid "Couldn't show any frames." -msgstr "" +msgstr "フレームを表示できません" #: src/strings.c:65 msgid "Output Selection:" -msgstr "" +msgstr "出力選択:" #: src/strings.c:66 msgid "Scan entire file, not only loaded sections" -msgstr "" +msgstr "ロードされる セクションだけ でなく ファイル全体を スキャンする" #: src/strings.c:68 msgid "Only NUL-terminated sequences of MIN-LEN characters or more are printed" -msgstr "" +msgstr "ヌル終端された MIN-LEN 文字以上の シーケンス のみを 表示" #: src/strings.c:69 msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" msgstr "" +"文字サイズと エンディアンを 選択: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " +"{B,L} = 32-bit" #: src/strings.c:73 msgid "Print name of the file before each string." -msgstr "" +msgstr "各文字列の 前に ファイル名を表示" #: src/strings.c:75 msgid "Print location of the string in base 8, 10, or 16 respectively." -msgstr "" +msgstr "文字列の 位置を 基数 8、 10、 16 で 各々表示" #: src/strings.c:76 msgid "Alias for --radix=o" -msgstr "" +msgstr "--radix=o と同じ" #. Short description of program. #: src/strings.c:83 msgid "Print the strings of printable characters in files." -msgstr "" +msgstr "ファイル中の表示可能文字からなる文字列を表示する。" #: src/strings.c:256 src/strings.c:291 #, c-format @@ -6453,27 +6355,27 @@ msgstr "" #: src/strip.c:71 msgid "Place stripped output into FILE" -msgstr "はぎ取った出力を ふぁいる に置く" +msgstr "ストリップした 出力を FILE に置く" #: src/strip.c:72 msgid "Extract the removed sections into FILE" -msgstr "抽出した取り除いたセクションを ふぁいる に置く" +msgstr "抽出して 取り除いた セクションを FILE に置く" #: src/strip.c:73 msgid "Embed name FILE instead of -f argument" -msgstr "-f パラメーターの代わりに 名前 ふぁいる を有効にする" +msgstr "-f 引数の 代わりに 名前 FILE を有効にする" #: src/strip.c:77 msgid "Remove all debugging symbols" -msgstr "デバッグ用のシンボルを全て取り除く" +msgstr "デバッグ用 シンボルを 全て 取り除く" #: src/strip.c:81 msgid "Remove section headers (not recommended)" -msgstr "" +msgstr "セクションヘッダーを 取り除く (非推奨)" #: src/strip.c:83 msgid "Copy modified/access timestamps to the output" -msgstr "修正/アクセスタイムスタンプを出力へ複写する" +msgstr "修正/アクセス タイムスタンプを 出力へ 複製する" #: src/strip.c:85 msgid "" @@ -6499,17 +6401,20 @@ msgid "" "Remove the named section. SECTION is an extended wildcard pattern. May be " "given more than once. Only non-allocated sections can be removed." msgstr "" +"指定された セクションを 取り除く。 SECTION は 拡張 ワイルド カード パターン。 2回以上 与え られても よい。" +"割り当て されない セクション のみ 取り除ける。" #: src/strip.c:91 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" +"指定された セクションを 保持する。 SECTION は 拡張 ワイルド カード パターン。 2回以上 与え られても よい。" #. Short description of program. #: src/strip.c:98 msgid "Discard symbols from object files." -msgstr "オブジェクトファイルからシンボルを破棄する" +msgstr "オブジェクトファイルからシンボルを捨て去る" #: src/strip.c:247 #, c-format @@ -6539,14 +6444,12 @@ msgid "-F option specified twice" msgstr "-F オプションが 2 回指定されています" #: src/strip.c:362 -#, fuzzy, c-format msgid "cannot both keep and remove .comment section" -msgstr ".comment セクションを取り除く" +msgstr ".comment セクションを保持しつつ取り除くことはできません" #: src/strip.c:481 -#, fuzzy, c-format msgid "bad relocation" -msgstr "リロケーションを表示" +msgstr "" #: src/strip.c:747 src/strip.c:771 #, c-format @@ -6570,9 +6473,9 @@ msgstr "%s: アーカイブから抜き出している時は -o や -f は使え #. preserve_dates ? tv : NULL); #. #: src/strip.c:811 -#, fuzzy, c-format +#, c-format msgid "%s: no support for stripping archive" -msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" +msgstr "%s: アーカイブのストリップには対応していません" #: src/strip.c:1047 #, c-format @@ -6580,19 +6483,18 @@ msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" #: src/strip.c:1092 -#, fuzzy, c-format msgid "cannot get number of phdrs" -msgstr "セクション数を決定できません: %s" +msgstr "phdrs の数を取得できません" #: src/strip.c:1106 src/strip.c:1149 -#, fuzzy, c-format +#, c-format msgid "cannot create new ehdr for file '%s': %s" -msgstr "新しいファイル '%s' を生成できません: %s" +msgstr "ファイル '%s' の新しい ehdr を作成できません: %s" #: src/strip.c:1116 src/strip.c:1159 -#, fuzzy, c-format +#, c-format msgid "cannot create new phdr for file '%s': %s" -msgstr "新しいファイル '%s' を生成できません: %s" +msgstr "ファイル '%s' の新しい phdr を作成できません: %s" #: src/strip.c:1240 #, c-format @@ -6600,14 +6502,14 @@ msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" #: src/strip.c:1250 -#, fuzzy, c-format +#, c-format msgid "Cannot remove allocated section '%s'" -msgstr "PLT セクションを割り当てられません: %s" +msgstr "割り当てされるセクション '%s' は取り除けません" #: src/strip.c:1259 -#, fuzzy, c-format +#, c-format msgid "Cannot both keep and remove section '%s'" -msgstr "0番目のセクションのヘッダーを得られません: %s" +msgstr "セクション '%s' を保持しつつ取り除くことはできません" #: src/strip.c:1624 src/strip.c:1739 #, c-format @@ -6615,19 +6517,19 @@ msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" #: src/strip.c:1688 -#, fuzzy, c-format +#, c-format msgid "%s: error while updating ELF header: %s" -msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" +msgstr "%s: ELF ヘッダーの更新中にエラー: %s" #: src/strip.c:1697 -#, fuzzy, c-format +#, c-format msgid "%s: error while getting shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" +msgstr "%s: shdrstrndx の取得中にエラー: %s" #: src/strip.c:1705 src/strip.c:2550 -#, fuzzy, c-format +#, c-format msgid "%s: error updating shdrstrndx: %s" -msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" +msgstr "%s: shdrstrndx の更新中にエラー: %s" #: src/strip.c:1722 #, c-format @@ -6650,9 +6552,8 @@ msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" #: src/strip.c:1866 -#, fuzzy, c-format msgid "no memory to create section header string table" -msgstr "セクションヘッダー文字列テーブルを生成中: %s" +msgstr "セクションヘッダー文字列テーブルを作成するメモリがありません" #: src/strip.c:2079 #, c-format @@ -6685,9 +6586,9 @@ msgid "%s: error while reading the file: %s" msgstr "%s: ファイルを読込み中にエラー: %s" #: src/strip.c:2599 src/strip.c:2619 -#, fuzzy, c-format +#, c-format msgid "while writing '%s'" -msgstr "'%s' を書込み中: %s" +msgstr "書き込み中 '%s'" #: src/strip.c:2656 src/strip.c:2663 #, c-format @@ -6701,39 +6602,39 @@ msgstr "'%s' のアクセスと変更日付を設定できません" #: src/unstrip.c:66 msgid "Match MODULE against file names, not module names" -msgstr "" +msgstr "モジュール名ではなく ファイル名で MODULE を一致させる" #: src/unstrip.c:67 msgid "Silently skip unfindable files" -msgstr "" +msgstr "見つからない ファイルを 静かに スキップ" #: src/unstrip.c:70 msgid "Place output into FILE" -msgstr "" +msgstr "出力を FILE に置く" #: src/unstrip.c:72 msgid "Create multiple output files under DIRECTORY" -msgstr "" +msgstr "複数の 出力ファイルを DIRECTORY の下に 作成" #: src/unstrip.c:73 msgid "Use module rather than file names" -msgstr "" +msgstr "ファイル名ではなく モジュール名を 使用" #: src/unstrip.c:75 msgid "Create output for modules that have no separate debug information" -msgstr "" +msgstr "分離された デバッグ情報を 持たない モジュール用に 出力を 作成" #: src/unstrip.c:78 msgid "Apply relocations to section contents in ET_REL files" -msgstr "" +msgstr "ET_REL ファイルの セクション内容に リロケーションを 適用" #: src/unstrip.c:80 msgid "Only list module and file names, build IDs" -msgstr "" +msgstr "モジュール名、 ファイル名、 ビルドIDの リスト表示のみ" #: src/unstrip.c:82 msgid "Force combining files even if some ELF headers don't seem to match" -msgstr "" +msgstr "いくつかの ELF ヘッダー が 一致しない ように 見えた としても ファイルの 結合を 強制" #: src/unstrip.c:126 #, c-format @@ -6753,114 +6654,113 @@ msgstr "" #: src/unstrip.c:185 #, c-format msgid "output directory '%s'" -msgstr "" +msgstr "出力ディレクトリ '%s'" #: src/unstrip.c:194 #, c-format msgid "exactly two file arguments are required" -msgstr "" +msgstr "ちょうど2つの引数が必要です" #: src/unstrip.c:200 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" -msgstr "" +msgstr "明示的なファイルを使用する際は -m, -a, -R, -i オプションは認められていません" #: src/unstrip.c:213 -#, c-format msgid "-o or -d is required when using implicit files" -msgstr "" +msgstr "暗黙的なファイルを使用する際は -o または -d が必要です" #: src/unstrip.c:236 #, c-format msgid "cannot create ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを作成できません: %s" #: src/unstrip.c:240 -#, fuzzy, c-format +#, c-format msgid "cannot get shdrstrndx:%s" -msgstr "セクションを得られません: %s" +msgstr "shdrstrndx を取得できません: %s" #: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを取得できません: %s" #: src/unstrip.c:254 -#, fuzzy, c-format +#, c-format msgid "cannot get new zero section: %s" -msgstr "セクションを得られません: %s" +msgstr "新しい zero セクションを取得できません: %s" #: src/unstrip.c:257 -#, fuzzy, c-format +#, c-format msgid "cannot update new zero section: %s" -msgstr "セクション数を決定できません: %s" +msgstr "新しい zero セクションを更新できません: %s" #: src/unstrip.c:261 #, c-format msgid "cannot copy ELF header: %s" -msgstr "" +msgstr "ELF ヘッダーを複製できません: %s" #: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 -#, fuzzy, c-format +#, c-format msgid "cannot get number of program headers: %s" -msgstr "セクション数を決定できません: %s" +msgstr "プログラムヘッダ数を取得できません: %s" #: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" -msgstr "" +msgstr "プログラムヘッダーを作成できません: %s" #: src/unstrip.c:276 #, c-format msgid "cannot copy program header: %s" -msgstr "" +msgstr "プログラムヘッダーを複製できません: %s" #: src/unstrip.c:286 #, c-format msgid "cannot copy section header: %s" -msgstr "" +msgstr "セクションヘッダーを複製できません: %s" #: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" -msgstr "" +msgstr "セクションデータを取得できません: %s" #: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" -msgstr "" +msgstr "セクションデータを複製できません: %s" #: src/unstrip.c:319 #, c-format msgid "cannot create directory '%s'" -msgstr "" +msgstr "ディレクトリ '%s' を作成できません" #: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 #: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" -msgstr "" +msgstr "シンボルテーブル項目を取得できません: %s" #: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 #: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" -msgstr "" +msgstr "シンボルテーブルを更新できません: %s" #: src/unstrip.c:419 #, c-format msgid "cannot update section header: %s" -msgstr "" +msgstr "セクションヘッダーを更新できません: %s" #: src/unstrip.c:467 src/unstrip.c:481 #, c-format msgid "cannot update relocation: %s" -msgstr "" +msgstr "リロケーションを更新できません: %s" #: src/unstrip.c:580 #, c-format msgid "cannot get symbol version: %s" -msgstr "" +msgstr "シンボルバージョンを取得できません: %s" #: src/unstrip.c:593 #, c-format @@ -6868,49 +6768,49 @@ msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" #: src/unstrip.c:848 -#, fuzzy, c-format +#, c-format msgid "cannot get symbol section data: %s" -msgstr "ラインデータセクションデータを得られません: %s" +msgstr "シンボルセクションデータを取得できません: %s" #: src/unstrip.c:850 -#, fuzzy, c-format +#, c-format msgid "cannot get string section data: %s" -msgstr "ラインデータセクションデータを得られません: %s" +msgstr "文字列セクションデータを取得できません: %s" #: src/unstrip.c:867 -#, fuzzy, c-format +#, c-format msgid "invalid string offset in symbol [%zu]" -msgstr "シンボル %2$sの不正なオフセット %1$zu " +msgstr "シンボル [%zu] の中に不当な文字列オフセットがあります" #: src/unstrip.c:1025 src/unstrip.c:1433 -#, fuzzy, c-format +#, c-format msgid "cannot read section [%zu] name: %s" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクション [%zu] の名前を読み込めません: %s" #: src/unstrip.c:1040 -#, fuzzy, c-format +#, c-format msgid "bad sh_link for group section: %s" -msgstr "不当な .debug_line セクション" +msgstr "グループセクションに対する誤った sh_link です: %s" #: src/unstrip.c:1046 -#, fuzzy, c-format +#, c-format msgid "couldn't get shdr for group section: %s" -msgstr "セクションからデータを得られません %d: %s" +msgstr "グループセクションに対する shdr を取得できませんでした: %s" #: src/unstrip.c:1051 -#, fuzzy, c-format +#, c-format msgid "bad data for group symbol section: %s" -msgstr "セクションからデータを得られません %d: %s" +msgstr "グループシンボルセクションに対する誤ったデータです: %s" #: src/unstrip.c:1057 -#, fuzzy, c-format +#, c-format msgid "couldn't get symbol for group section: %s" -msgstr "セクション数を決定できません: %s" +msgstr "グループセクションに対するシンボルを取得できませんでした: %s" #: src/unstrip.c:1062 -#, fuzzy, c-format +#, c-format msgid "bad symbol name for group section: %s" -msgstr "セクションヘッダー文字列セクションを生成できません: %s" +msgstr "グループセクションに対する誤ったシンボル名です: %s" #: src/unstrip.c:1073 src/unstrip.c:1554 #, fuzzy, c-format @@ -6973,19 +6873,19 @@ msgid "cannot add new section: %s" msgstr "" #: src/unstrip.c:1758 -#, fuzzy, c-format +#, c-format msgid "symbol [%zu] has invalid section index" -msgstr "不当なセクション索引" +msgstr "シンボル [%zu] が不当なセクション索引を持っています" #: src/unstrip.c:1790 -#, fuzzy, c-format +#, c-format msgid "group has invalid section index [%zd]" -msgstr "不当なセクション索引" +msgstr "グループが不当なセクション索引 [%zd] を持っています" #: src/unstrip.c:2065 -#, fuzzy, c-format +#, c-format msgid "cannot read section data: %s" -msgstr "セクションデータを割り当てられません: %s" +msgstr "セクションデータを読み込めません: %s" #: src/unstrip.c:2094 #, c-format @@ -7137,13 +7037,12 @@ msgid "Run executable" msgstr "" #: tests/dwflmodtest.c:209 -#, fuzzy msgid "Additionally show function names" -msgstr "出力選択:" +msgstr "関数名を さらに 表示" #: tests/dwflmodtest.c:210 msgid "Show instances of inlined functions" -msgstr "" +msgstr "インライン関数の実体を表示" #, fuzzy #~ msgid "" -- cgit v1.2.1 From 72a6f9d6f4280a50631b475e620f9c7858d9f4b5 Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Mon, 26 Jul 2021 13:29:11 -0400 Subject: debuginfod: PR27982 - added DEBUGINFOD_MAXSIZE and DEBUGINFOD_MAXTIME DEBUGINFOD_TIMEOUT is a good way to catch servers that are too slow to *start* transmitting a file. But we have no way of limiting total download time or space. A user might prefer to have his debugger fetch only quick & small files, and make do without the bigger ones. Some transitive dependencies of e.g. gnome programs are huge: 3GB of LLVM debuginfo, 1GB of webkitgtk, etc. etc. DEBUGINFOD_MAXSIZE and DEBUGINFOD_MAXTIME were added to dictate the max download size and time of a debuginfod client. DEBUGINFOD_MAXSIZE is handled server-side and is sent using the http header: X-DEBUGINFOD-MAXSIZE. The client side then checks to ensure this maxsize has been respected. https://sourceware.org/bugzilla/show_bug.cgi?id=27982 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 12 +++++ debuginfod/debuginfod-client.c | 99 ++++++++++++++++++++++++++++++++++++++++-- debuginfod/debuginfod.cxx | 13 ++++++ debuginfod/debuginfod.h.in | 2 + doc/ChangeLog | 6 +++ doc/debuginfod-find.1 | 15 +++++++ tests/ChangeLog | 7 +++ tests/run-debuginfod-find.sh | 26 +++++++++++ 8 files changed, 177 insertions(+), 3 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 81eb56f9..9e82d78d 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,15 @@ +2021-07-26 Noah Sanci + + PR27982 + * debuginfod-client.c (globals): added default_maxsize and + default_maxtime. + (debuginfod_query_server): Added DEBUGINFOD_MAXSIZE and + DEBUGINFOD_MAXTIME envvar processing. + * debuginfod.cxx (handler_cb): If the requested file exceeds + maxsize return code 406. + * debuginfod.h.in: Added DEBUGINFOD_MAXSIZE_ENV_VAR and + DEBUGINFOD_MAXTIME_ENV_VAR. + 2021-07-16 Noah Sanci PR28034 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index a70f6d79..7d4b220f 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -555,6 +555,39 @@ debuginfod_query_server (debuginfod_client *c, free (c->url); c->url = NULL; + /* PR 27982: Add max size if DEBUGINFOD_MAXSIZE is set. */ + long maxsize = 0; + const char *maxsize_envvar; + maxsize_envvar = getenv(DEBUGINFOD_MAXSIZE_ENV_VAR); + if (maxsize_envvar != NULL) + maxsize = atol (maxsize_envvar); + + /* PR 27982: Add max time if DEBUGINFOD_MAXTIME is set. */ + long maxtime = 0; + const char *maxtime_envvar; + maxtime_envvar = getenv(DEBUGINFOD_MAXTIME_ENV_VAR); + if (maxtime_envvar != NULL) + maxtime = atol (maxtime_envvar); + if (maxtime && vfd >= 0) + dprintf(vfd, "using max time %lds\n", maxtime); + + /* Maxsize is valid*/ + if (maxsize > 0) + { + if (vfd) + dprintf (vfd, "using max size %ldB\n", maxsize); + char *size_header = NULL; + rc = asprintf (&size_header, "X-DEBUGINFOD-MAXSIZE: %ld", maxsize); + if (rc < 0) + { + rc = -ENOMEM; + goto out; + } + rc = debuginfod_add_http_header(c, size_header); + free(size_header); + if (rc < 0) + goto out; + } add_default_headers(c); /* Copy lowercase hex representation of build_id into buf. */ @@ -833,7 +866,7 @@ debuginfod_query_server (debuginfod_client *c, if (data == NULL) { rc = -ENOMEM; - goto out0; + goto out1; } /* thereafter, goto out1 on error. */ @@ -864,7 +897,7 @@ debuginfod_query_server (debuginfod_client *c, if (data[i].handle == NULL) { rc = -ENETUNREACH; - goto out2; + goto out1; } data[i].client = c; @@ -876,7 +909,7 @@ debuginfod_query_server (debuginfod_client *c, if (!escaped_string) { rc = -ENOMEM; - goto out1; + goto out2; } snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url, build_id_bytes, type, escaped_string); @@ -927,8 +960,31 @@ debuginfod_query_server (debuginfod_client *c, long loops = 0; int committed_to = -1; bool verbose_reported = false; + struct timespec start_time, cur_time; + if ( maxtime > 0 && clock_gettime(CLOCK_MONOTONIC_RAW, &start_time) == -1) + { + rc = errno; + goto out2; + } + long delta = 0; do { + /* Check to see how long querying is taking. */ + if (maxtime > 0) + { + if (clock_gettime(CLOCK_MONOTONIC_RAW, &cur_time) == -1) + { + rc = errno; + goto out2; + } + delta = cur_time.tv_sec - start_time.tv_sec; + if ( delta > maxtime) + { + dprintf(vfd, "Timeout with max time=%lds and transfer time=%lds\n", maxtime, delta ); + rc = -ETIME; + goto out2; + } + } /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */ curl_multi_wait(curlm, NULL, 0, 1000, NULL); @@ -1010,6 +1066,29 @@ debuginfod_query_server (debuginfod_client *c, if ((*c->progressfn) (c, pa, pb)) break; } + /* Check to see if we are downloading something which exceeds maxsize, if set.*/ + if (maxsize > 0 && target_handle) + { + long dl_size = 0; +#ifdef CURLINFO_SIZE_DOWNLOAD_T + curl_off_t download_size_t; + if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, + &download_size_t) == CURLE_OK) + dl_size = download_size_t >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size_t; +#else + double download_size; + if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, + &download_size) == CURLE_OK) + dl_size = download_size >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size; +#endif + if (dl_size > maxsize) + { + if (vfd >=0) + dprintf(vfd, "Content-Length too large.\n"); + rc = -EFBIG; + goto out2; + } + } } while (still_running); /* Check whether a query was successful. If so, assign its handle @@ -1043,6 +1122,8 @@ debuginfod_query_server (debuginfod_client *c, if (msg->data.result != CURLE_OK) { + long resp_code; + CURLcode ok0; /* Unsuccessful query, determine error code. */ switch (msg->data.result) { @@ -1057,6 +1138,16 @@ debuginfod_query_server (debuginfod_client *c, case CURLE_SEND_ERROR: rc = -ECONNRESET; break; case CURLE_RECV_ERROR: rc = -ECONNRESET; break; case CURLE_OPERATION_TIMEDOUT: rc = -ETIME; break; + case CURLE_HTTP_RETURNED_ERROR: + ok0 = curl_easy_getinfo (msg->easy_handle, + CURLINFO_RESPONSE_CODE, + &resp_code); + /* 406 signals that the requested file was too large */ + if ( ok0 == CURLE_OK && resp_code == 406) + rc = -EFBIG; + else + rc = -ENOENT; + break; default: rc = -ENOENT; break; } } @@ -1129,6 +1220,8 @@ debuginfod_query_server (debuginfod_client *c, if (efd >= 0) close(efd); } + else if (rc == -EFBIG) + goto out2; /* If the verified_handle is NULL and rc != -ENOENT, the query fails with * an error code other than 404, then do several retry within the retry_limit. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 503edba7..4ddd9255 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -2102,6 +2102,13 @@ handler_cb (void * /*cls*/, } *ptr = NULL; /* reset when done */ + const char *maxsize_string = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "X-DEBUGINFOD-MAXSIZE"); + long maxsize = 0; + if (maxsize_string != NULL && maxsize_string[0] != '\0') + maxsize = atol(maxsize_string); + else + maxsize = 0; + #if MHD_VERSION >= 0x00097002 enum MHD_Result rc; #else @@ -2190,6 +2197,12 @@ handler_cb (void * /*cls*/, if (r == 0) throw reportable_exception("internal error, missing response"); + if (maxsize > 0 && http_size > maxsize) + { + MHD_destroy_response(r); + throw reportable_exception(406, "File too large, max size=" + std::to_string(maxsize)); + } + rc = MHD_queue_response (connection, MHD_HTTP_OK, r); http_code = MHD_HTTP_OK; MHD_destroy_response (r); diff --git a/debuginfod/debuginfod.h.in b/debuginfod/debuginfod.h.in index 282e523d..c358df4d 100644 --- a/debuginfod/debuginfod.h.in +++ b/debuginfod/debuginfod.h.in @@ -36,6 +36,8 @@ #define DEBUGINFOD_PROGRESS_ENV_VAR "DEBUGINFOD_PROGRESS" #define DEBUGINFOD_VERBOSE_ENV_VAR "DEBUGINFOD_VERBOSE" #define DEBUGINFOD_RETRY_LIMIT_ENV_VAR "DEBUGINFOD_RETRY_LIMIT" +#define DEBUGINFOD_MAXSIZE_ENV_VAR "DEBUGINFOD_MAXSIZE" +#define DEBUGINFOD_MAXTIME_ENV_VAR "DEBUGINFOD_MAXTIME" /* The libdebuginfod soname. */ #define DEBUGINFOD_SONAME "@LIBDEBUGINFOD_SONAME@" diff --git a/doc/ChangeLog b/doc/ChangeLog index 05fcd23d..1822fc6b 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,9 @@ +2021-07-26 Noah Sanci + + PR27982 + * debuginfod-find.1: Document DEBUGINFOD_MAXTIME + and DEBUGINFOD_MAXSIZE. + 2021-04-23 Frank Ch. Eigler PR27701 diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 index 12d4ec2d..482a8ae7 100644 --- a/doc/debuginfod-find.1 +++ b/doc/debuginfod-find.1 @@ -147,6 +147,21 @@ is reexecuted. Cache management parameters may be set by files under this directory: see the \fBdebuginfod_find_debuginfo(3)\fP man page for details. The default is $HOME/.debuginfod_client_cache. +.TP 21 +.B DEBUGINFOD_MAXTIME +This environment variable dictates how long the client will wait to +download a file found on a server in seconds. It is best used to ensure +that a file is downloaded quickly or be rejected. The default is +0 (infinite time). + +.TP 21 +.B DEBUGINFOD_MAXSIZE +This environment variable dictates the maximum size of a file to +download in bytes. This is best used if the user would like to ensure +only small files are downloaded. A value of 0 causes no consideration +for size, and the client may attempt to download a file of any size. +The default is 0 (infinite size). + .SH "FILES" .LP .PD .1v diff --git a/tests/ChangeLog b/tests/ChangeLog index dba750e4..34666609 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2021-07-26 Noah Sanci + + PR27982 + * run-debuginfod-find.sh: Added a test to ensure that + DEBUGINFOD_MAXSIZE and DEBUGINFOD_MAXTIME work properly + by searching server and client logs for prompts. + 2021-07-16 Noah Sanci PR28034 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 44e16242..991d1dc5 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -177,7 +177,33 @@ wait_ready $PORT1 'thread_busy{role="scan"}' 0 testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 ######################################################################## +## PR27892 +# Ensure DEBUGINFOD_MAXSIZE is functional and sends back the correct http +# code +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_RETRY_LIMIT=1 DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXSIZE=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo F/p+r%o\$g.debug 2> find-vlog$PORT1 || true +tempfiles find-vlog$PORT1 +# wait for the server to fail the same number of times the query is retried. +wait_ready $PORT1 'http_responses_after_you_milliseconds_count{code="406"}' 1 +# ensure all reporting is functional +grep 'serving file '$(realpath ${PWD})'/F/p+r%o\$g.debug' vlog$PORT1 +grep 'File too large' vlog$PORT1 +grep 'using max size 1B' find-vlog$PORT1 +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxsize check" + err +fi +# Ensure DEBUGINFOD_MAXTIME is functional +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:8002/" DEBUGINFOD_MAXTIME=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo F/p+r%o\$g.debug 2> find-vlog$PORT1 || true +grep 'using max time' find-vlog$PORT1 +# Ensure p+r%o\$g.debug is NOT cached +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxtime check" + err +fi +######################################################################## # PR25628 rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests -- cgit v1.2.1 From 9aee0992d6e6ec4cce2c015d8da4b61022c6f6dd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 4 Aug 2021 21:01:27 +0200 Subject: tests: Allow an extra pthread_kill frame in backtrace tests glibc 2.34 calls pthread_kill from the raise function. Before raise directly called the (tg)kill syscall. So allow pthread_kill to be the first frame in a backtrace where raise is expected. Also change some asserts to fprintf plus abort to make it more clear why the testcase fails. https://sourceware.org/bugzilla/show_bug.cgi?id=28190 Signed-off-by: Mark Wielaard --- tests/ChangeLog | 6 ++++++ tests/backtrace.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 34666609..3bfd1ca2 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-08-04 Mark Wielaard + + PR28190 + * backtrace.c (callback_verify): Check for pthread_kill as first + frame. Change asserts to fprintf plus abort. + 2021-07-26 Noah Sanci PR27982 diff --git a/tests/backtrace.c b/tests/backtrace.c index 36c8b8c4..afc12fb9 100644 --- a/tests/backtrace.c +++ b/tests/backtrace.c @@ -97,6 +97,9 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, static bool reduce_frameno = false; if (reduce_frameno) frameno--; + static bool pthread_kill_seen = false; + if (pthread_kill_seen) + frameno--; if (! use_raise_jmp_patching && frameno >= 2) frameno += 2; const char *symname2 = NULL; @@ -107,11 +110,26 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, && (strcmp (symname, "__kernel_vsyscall") == 0 || strcmp (symname, "__libc_do_syscall") == 0)) reduce_frameno = true; + else if (! pthread_kill_seen && symname + && strstr (symname, "pthread_kill") != NULL) + pthread_kill_seen = true; else - assert (symname && strcmp (symname, "raise") == 0); + { + if (!symname || strcmp (symname, "raise") != 0) + { + fprintf (stderr, + "case 0: expected symname 'raise' got '%s'\n", symname); + abort (); + } + } break; case 1: - assert (symname != NULL && strcmp (symname, "sigusr2") == 0); + if (symname == NULL || strcmp (symname, "sigusr2") != 0) + { + fprintf (stderr, + "case 1: expected symname 'sigusr2' got '%s'\n", symname); + abort (); + } break; case 2: // x86_64 only /* __restore_rt - glibc maybe does not have to have this symbol. */ @@ -120,11 +138,21 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, if (use_raise_jmp_patching) { /* Verify we trapped on the very first instruction of jmp. */ - assert (symname != NULL && strcmp (symname, "jmp") == 0); + if (symname == NULL || strcmp (symname, "jmp") != 0) + { + fprintf (stderr, + "case 3: expected symname 'raise' got '%s'\n", symname); + abort (); + } mod = dwfl_addrmodule (dwfl, pc - 1); if (mod) symname2 = dwfl_module_addrname (mod, pc - 1); - assert (symname2 == NULL || strcmp (symname2, "jmp") != 0); + if (symname2 == NULL || strcmp (symname2, "jmp") != 0) + { + fprintf (stderr, + "case 3: expected symname2 'jmp' got '%s'\n", symname2); + abort (); + } break; } FALLTHROUGH; @@ -137,11 +165,22 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, duplicate_sigusr2 = true; break; } - assert (symname != NULL && strcmp (symname, "stdarg") == 0); + if (symname == NULL || strcmp (symname, "stdarg") != 0) + { + fprintf (stderr, + "case 4: expected symname 'stdarg' got '%s'\n", symname); + abort (); + } break; case 5: /* Verify we trapped on the very last instruction of child. */ - assert (symname != NULL && strcmp (symname, "backtracegen") == 0); + if (symname == NULL || strcmp (symname, "backtracegen") != 0) + { + fprintf (stderr, + "case 5: expected symname 'backtracegen' got '%s'\n", + symname); + abort (); + } mod = dwfl_addrmodule (dwfl, pc); if (mod) symname2 = dwfl_module_addrname (mod, pc); @@ -151,7 +190,15 @@ callback_verify (pid_t tid, unsigned frameno, Dwarf_Addr pc, // instructions or even inserts some padding instructions at the end // (which apparently happens on ppc64). if (use_raise_jmp_patching) - assert (symname2 == NULL || strcmp (symname2, "backtracegen") != 0); + { + if (symname2 != NULL && strcmp (symname2, "backtracegen") == 0) + { + fprintf (stderr, + "use_raise_jmp_patching didn't expect symname2 " + "'backtracegen'\n"); + abort (); + } + } break; } } -- cgit v1.2.1 From 969880e68071cefd7170a53b267379f0b32d6fbd Mon Sep 17 00:00:00 2001 From: Alice Zhang Date: Wed, 4 Aug 2021 16:50:44 -0400 Subject: debuginfod-doc: PR27950 - Remove redanduncies in man page. Create a new file, debuginfod-client-config.7, that holds all environment variables and cache control files related info. Get rid of repetitive definitions in three other files, instead, those files will include the content of new file. Any future modification related to environment variables and cache files will only require changes in one file. Signed-off-by: Alice Zhang Signed-off-by: Frank Ch. Eigler --- doc/ChangeLog | 12 ++++ doc/Makefile.am | 3 + doc/debuginfod-client-config.7 | 129 ++++++++++++++++++++++++++++++++++++++++ doc/debuginfod-find.1 | 46 +------------- doc/debuginfod.8 | 45 +------------- doc/debuginfod_find_debuginfo.3 | 76 ++++------------------- doc/man3 | 1 + doc/man7 | 1 + 8 files changed, 161 insertions(+), 152 deletions(-) create mode 100644 doc/debuginfod-client-config.7 create mode 120000 doc/man3 create mode 120000 doc/man7 diff --git a/doc/ChangeLog b/doc/ChangeLog index 1822fc6b..77d1d705 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,15 @@ +2021-07-28 Alice Zhang + + PR27950 + * debuginfod-client-config.7: New file to store all cache config + infos. + * debuginfod-find.1: Removed redundant occurrences of environment + variables & cache control files. + * debuginfod.8: Likewise. + * debuginfod_find_debuginfo.3: Likewise. + * Makefile.am: Updated to include debuginfod-client-config.7 + * man3, man7: Symlinks for source tree man page testing. + 2021-07-26 Noah Sanci PR27982 diff --git a/doc/Makefile.am b/doc/Makefile.am index ef66fb88..7979be4d 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -19,14 +19,17 @@ EXTRA_DIST = COPYING-GFDL README dist_man1_MANS=readelf.1 elfclassify.1 notrans_dist_man3_MANS=elf_update.3 elf_getdata.3 elf_clone.3 elf_begin.3 +notrans_dist_man7_MANS= notrans_dist_man8_MANS= notrans_dist_man1_MANS= if DEBUGINFOD +notrans_dist_man7_MANS += debuginfod-client-config.7 notrans_dist_man8_MANS += debuginfod.8 endif if LIBDEBUGINFOD +notrans_dist_man7_MANS += debuginfod-client-config.7 notrans_dist_man3_MANS += debuginfod_add_http_header.3 notrans_dist_man3_MANS += debuginfod_begin.3 notrans_dist_man3_MANS += debuginfod_end.3 diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7 new file mode 100644 index 00000000..1cc19215 --- /dev/null +++ b/doc/debuginfod-client-config.7 @@ -0,0 +1,129 @@ +'\"! tbl | nroff \-man +'\" t macro stdmacro +.if \n(zZ=1 .ig zZ + +.TH DEBUGINFOD-CLIENT-CONFIG 7 +.SH NAME +debuginfod-client-config \- debuginfod client environment variables, cache control files and etc. + +.SH SYNOPSIS +Several environment variables and control files control the behaviour of debuginfod client applications. + +.\" The preceding section permits this man page to be viewed as if self-contained. +.zZ +.\" The following section (only) gets included into other man pages via .so + + +.SH ENVIRONMENT VARIABLES +.TP +.B $TMPDIR +This environment variable points to a file system to be used for +temporary files. The default is /tmp. + +.TP +.B $DEBUGINFOD_URLS +This environment variable contains a list of URL prefixes for trusted +debuginfod instances. Alternate URL prefixes are separated by space. +Avoid referential loops that cause a server to contact itself, directly +or indirectly - the results would be hilarious. + +.TP +.B $DEBUGINFOD_CACHE_PATH +This environment variable governs the location of the cache where +downloaded files and cache-control files are kept. The default +directory is chosen based on other environment variables, see below. + +.TP +.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 stderr. The default is no progress +function output. + +.TP +.B $DEBUGINFOD_VERBOSE +This environment variable governs the default file descriptor for +verbose output. If set, and if a verbose fd is not explicitly set, +then the verbose output will be produced on STDERR_FILENO. + +.TP +.B $DEBUGINFOD_RETRY_LIMIT +This environment variable governs the default limit of retry attempts. If a +query failed with errno other than ENOENT, will initiate several attempts +within the limit. + +.TP +.B $DEBUGINFOD_TIMEOUT +This environment variable governs the download \fIcommencing\fP +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 +.B $DEBUGINFOD_MAXTIME +This environment variable dictates how long the client will wait to +\fIcomplete\fP the download a file found on a server in seconds. It is best +used to ensure that a file is downloaded quickly or be rejected. The +default is 0 (infinite time). + +.TP +.B $DEBUGINFOD_MAXSIZE +This environment variable dictates the maximum size of a file to +download in bytes. This is best used if the user would like to ensure +only small files are downloaded. A value of 0 causes no consideration +for size, and the client may attempt to download a file of any size. +The default is 0 (infinite size). + +.SH CACHE + +Before each query, the debuginfod client library checks for a need to +clean the cache. If it's time to clean, the library traverses the +cache directory and removes downloaded debuginfo-related artifacts and +newly empty directories, if they have not been accessed recently. + +Control files are located directly under the cache directory. They +contain simple decimal numbers to set cache-related configuration +parameters. If the files do not exist, the client library creates the +files with the default parameter values as content. + +After each query, the debuginfod client library deposits newly +received files into a directory & file that is named based on the +build-id. A failed query is also cached by a special file. The +naming convention used for these artifacts is deliberately +\fBundocumented\fP. + +.TP +.B $XDG_CACHE_HOME/debuginfod_client/ +Default cache directory, if $XDG_CACHE_HOME is set. +.PD + +.TP +.B $HOME/.cache/debuginfod_client/ +Default cache directory, if $XDG_CACHE_HOME is not set. +.PD + +.TP +.B $HOME/.debuginfod_client_cache/ +Deprecated cache directory, used only if preexisting. +.PD + +.TP +.B cache_clean_interval_s +This control file gives the interval between cache cleaning rounds, in +seconds. The default is 86400, one day. 0 means "immediately". + +.TP +.B max_unused_age_s +This control file sets how long unaccessed debuginfo-related files +are retained, in seconds. The default is 604800, one week. 0 means +"immediately". + +.TP +.B cache_miss_s +This control file sets how long to remember a query failure, in +seconds. New queries for the same artifacts within this time window +are short-circuited (returning an immediate failure instead of sending +a new query to servers). This accelerates queries that probably would +still fail. The default is 600, 10 minutes. 0 means "forget +immediately". diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 index 482a8ae7..a61673f5 100644 --- a/doc/debuginfod-find.1 +++ b/doc/debuginfod-find.1 @@ -125,50 +125,8 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style. (The debuginfod server does not perform authentication, but a front-end proxy server could.) -.SH "ENVIRONMENT VARIABLES" - -.TP 21 -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -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 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 -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this program -is reexecuted. Cache management parameters may be set by files under -this directory: see the \fBdebuginfod_find_debuginfo(3)\fP man page -for details. The default is $HOME/.debuginfod_client_cache. - -.TP 21 -.B DEBUGINFOD_MAXTIME -This environment variable dictates how long the client will wait to -download a file found on a server in seconds. It is best used to ensure -that a file is downloaded quickly or be rejected. The default is -0 (infinite time). - -.TP 21 -.B DEBUGINFOD_MAXSIZE -This environment variable dictates the maximum size of a file to -download in bytes. This is best used if the user would like to ensure -only small files are downloaded. A value of 0 causes no consideration -for size, and the client may attempt to download a file of any size. -The default is 0 (infinite size). - -.SH "FILES" -.LP -.PD .1v -.TP 20 -.B $HOME/.debuginfod_client_cache -Default cache directory. -.PD +.nr zZ 1 +.so man7/debuginfod-client-config.7 .SH "SEE ALSO" .I "debuginfod(8)" diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index f70af625..3e791b62 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -12,7 +12,6 @@ .fi .RE .. - .TH DEBUGINFOD 8 .SH NAME debuginfod \- debuginfo-related http file-server daemon @@ -418,53 +417,15 @@ rather than HTTPS, the network should be trustworthy. Authentication information through the internal \fIlibcurl\fP library is not currently enabled. +.nr zZ 1 +.so man7/debuginfod-client-config.7 -.SH "ENVIRONMENT VARIABLES" - -.TP -.B TMPDIR -This environment variable points to a file system to be used for -temporary files. The default is /tmp. - -.TP -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -debuginfod instances. Alternate URL prefixes are separated by space. -Avoid referential loops that cause a server to contact itself, directly -or indirectly - the results would be hilarious. - +.SH ADDITIONAL FILES .TP -.B DEBUGINFOD_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 -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this -program is reexecuted. If XDG_CACHE_HOME is set then -$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise -$HOME/.cache/debuginfod_client is used. For more information regarding -the client cache see \fIdebuginfod_find_debuginfo(3)\fP. - -.SH FILES -.LP -.PD .1v -.TP 20 .B $HOME/.debuginfod.sqlite Default database file. .PD -.TP 20 -.B $XDG_CACHE_HOME/debuginfod_client -Default cache directory for content from upstream debuginfods. -If XDG_CACHE_HOME is not set then \fB$HOME/.cache/debuginfod_client\fP -is used. -.PD - .SH "SEE ALSO" .I "debuginfod-find(1)" diff --git a/doc/debuginfod_find_debuginfo.3 b/doc/debuginfod_find_debuginfo.3 index 7730dd32..30cef3c1 100644 --- a/doc/debuginfod_find_debuginfo.3 +++ b/doc/debuginfod_find_debuginfo.3 @@ -198,19 +198,6 @@ By default, the library adds a descriptive \fIUser-Agent:\fP header to outgoing requests. If the client application adds a header with the same name, this default is suppressed. -.SH "CACHE" -If the query is successful, the \fBdebuginfod_find_*\fP() functions save -the target file to a local cache. The location of the cache is controlled -by the \fB$DEBUGINFOD_CACHE_PATH\fP environment variable (see below). -Cleaning of the cache is controlled by the \fIcache_clean_interval_s\fP -and \fImax_unused_age_s\fP files, which are found in the -\fB$DEBUGINFOD_CACHE_PATH\fP directory. \fIcache_clean_interval_s\fP controls -how frequently the cache is traversed for cleaning and \fImax_unused_age_s\fP -controls how long a file can go unused (fstat(2) atime) before it's -removed from the cache during cleaning. These files should contain only an -ASCII decimal integer representing the interval or max unused age in seconds. -The default is one day and one week, respectively. Values of zero mean "immediately". - .SH "MACROS" .SS "DEBUGINFOD_SONAME" @@ -241,48 +228,6 @@ for the basic plaintext \%\fIhttp[s]://userid:password@hostname/\fP style. (The debuginfod server does not perform authentication, but a front-end proxy server could.) -.SH "ENVIRONMENT VARIABLES" - -.TP 21 -.B DEBUGINFOD_URLS -This environment variable contains a list of URL prefixes for trusted -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 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 -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 stderr. The default is no progress -function output. - -.TP 21 -.B DEBUGINFOD_VERBOSE -This environment variable governs the default file descriptor for -verbose output. If set, and if a verbose fd is not explicitly set, -then the verbose output will be produced on STDERR_FILENO. - -.TP 21 -.B DEBUGINFOD_CACHE_PATH -This environment variable governs the location of the cache where -downloaded files are kept. It is cleaned periodically as this -program is reexecuted. If XDG_CACHE_HOME is set then -$XDG_CACHE_HOME/debuginfod_client is the default location, otherwise -$HOME/.cache/debuginfod_client is used. - -.TP 21 -.B DEBUGINFOD_RETRY_LITMIT -This environment variable governs the default limit of retry attempts. If a -query failed with errno other than ENOENT, will initiate several attempts -within the limit. - .SH "ERRORS" The following list is not comprehensive. Error codes may also originate from calls to various C Library functions. @@ -338,17 +283,16 @@ System is unable to allocate resources. .TP .BR ETIME -Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP controls -the timeout duration. See debuginfod(8) for more information. - -.SH "FILES" -.LP -.PD .1v -.TP 20 -.B $HOME/.debuginfod_client_cache -Default cache directory. If XDG_CACHE_HOME is not set then -\fB$HOME/.cache/debuginfod_client\fP is used. -.PD +Query failed due to timeout. \fB$DEBUGINFOD_TIMEOUT\fP and +\fB$DEBUGINFOD_MAXTIME\fP control this. + +.TP +.BR EF2BIG +Query aborted due to the file requested being too big. The +\fB$DEBUGINFOD_MAXSIZE\fP controls this. + +.nr zZ 1 +.so man7/debuginfod-client-config.7 .SH "SEE ALSO" .I "debuginfod(8)" diff --git a/doc/man3 b/doc/man3 new file mode 120000 index 00000000..945c9b46 --- /dev/null +++ b/doc/man3 @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/doc/man7 b/doc/man7 new file mode 120000 index 00000000..945c9b46 --- /dev/null +++ b/doc/man7 @@ -0,0 +1 @@ +. \ No newline at end of file -- cgit v1.2.1 From f3466e18337681d2159bb591aaee6993e6df4fee Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 11 Aug 2021 19:32:29 -0400 Subject: debuginfod-doc: PR27950: make distcheck happy The debuginfod-client-config.7 shouldn't be included twice in notrans_dist_man7_MANS. Signed-off-by: Frank Ch. Eigler --- doc/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Makefile.am b/doc/Makefile.am index 7979be4d..32d1a2b8 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -24,7 +24,9 @@ notrans_dist_man8_MANS= notrans_dist_man1_MANS= if DEBUGINFOD +if !LIBDEBUGINFOD notrans_dist_man7_MANS += debuginfod-client-config.7 +endif notrans_dist_man8_MANS += debuginfod.8 endif -- cgit v1.2.1 From 89b1a4e8793e0379e386da313c1bd90080390877 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 19 Aug 2021 13:11:11 -0400 Subject: PR28249: correct debuginfod after-you locking The initial code for bug #27673 accidentally nuked all buildid service concurrency, not just identical concurrent requests. Correct this with one-liner patch. Observing the effect in the automated testsuite is difficult, so hand-tested against large requests and short ones, run in an interleaved way. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 6 ++++++ debuginfod/debuginfod.cxx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 9e82d78d..530f7dc7 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2021-08-19 Frank Ch. Eigler + + PR28249 + * debuginfod.cxx (handler_cb): Fix after_you unique_set key + to the entire incoming URL. + 2021-07-26 Noah Sanci PR27982 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 4ddd9255..fca07f61 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -2141,7 +2141,7 @@ handler_cb (void * /*cls*/, struct timespec tsay_start, tsay_end; clock_gettime (CLOCK_MONOTONIC, &tsay_start); static unique_set busy_urls; - unique_set_reserver after_you(busy_urls, url1); + unique_set_reserver after_you(busy_urls, url_copy); clock_gettime (CLOCK_MONOTONIC, &tsay_end); afteryou = (tsay_end.tv_sec - tsay_start.tv_sec) + (tsay_end.tv_nsec - tsay_start.tv_nsec)/1.e9; add_metric ("thread_busy", "role", "http-buildid-after-you", -1); -- cgit v1.2.1 From dc6ddd8ba061c0486a2c4b5a17ddd086d5e3a32d Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Fri, 20 Aug 2021 13:54:55 -0400 Subject: PR27950 - package new debuginfod-client-config.7 man page in rpm The template rpm spec file needs to include the new .7 page in all the subrpms whose man pages may .so it. Signed-off-by: Frank Ch. Eigler --- config/elfutils.spec.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 5552352b..04376265 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -299,12 +299,14 @@ fi %{_libdir}/libdebuginfod.so.* %{_bindir}/debuginfod-find %{_mandir}/man1/debuginfod-find.1* +%{_mandir}/man7/debuginfod*.7* %config(noreplace) %{_sysconfdir}/profile.d/* %files debuginfod-client-devel %defattr(-,root,root) %{_libdir}/pkgconfig/libdebuginfod.pc %{_mandir}/man3/debuginfod_*.3* +%{_mandir}/man7/debuginfod*.7* %{_includedir}/elfutils/debuginfod.h %{_libdir}/libdebuginfod.so @@ -315,6 +317,7 @@ fi %{_unitdir}/debuginfod.service %{_sysconfdir}/sysconfig/debuginfod %{_mandir}/man8/debuginfod.8* +%{_mandir}/man7/debuginfod*.7* %dir %attr(0700,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod %ghost %attr(0600,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod/debuginfod.sqlite -- cgit v1.2.1 From d390548df1942e98a1d836269a5e41ba52e121f1 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 20 Aug 2021 18:20:08 +0000 Subject: lib: remove usage of `sys/cdefs.h` This header is a BSD header that is also available in glibc. However, this is a not a standard C header and was used for `__CONCAT`. Because this is not a standard header, not all libc implementations provide the header. Remove the usage of the header and always use the previously fallback path. This is needed in order to build with musl. Signed-off-by: Saleem Abdulrasool --- lib/ChangeLog | 5 +++++ lib/fixedsizehash.h | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 44366fec..a95f8041 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2021-08-20 Saleem Abdulrasool + + * fixedsizehash.h: Remove sys/cdefs.h include. Unconditionally + define STROF and CONCAT macros. + 2021-07-28 Mark Wielaard * system.h (reallocarray): New static inline fallback function. diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h index dac2a5f5..f333ad99 100644 --- a/lib/fixedsizehash.h +++ b/lib/fixedsizehash.h @@ -30,17 +30,12 @@ #include #include #include -#include #include -#ifdef __CONCAT -#define CONCAT(t1,t2) __CONCAT (t1,t2) -#else #define STROF(t2) t2 #define CONCAT_EXPANDED(t1,t2) t1 ## t2 #define CONCAT(t1,t2) CONCAT_EXPANDED(t1,t2) -#endif /* Before including this file the following macros must be defined: -- cgit v1.2.1 From d0c72317dcde4c21e88e37dfd865335fc7f0c079 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 20 Aug 2021 18:21:20 +0000 Subject: debuginfod, elfclassify: remove unnecessary header inclusion `error.h`'s inclusion was centralised into the `system.h` header. As the implementation currently includes `system.h` already, the inclusion of `error.h` is unnecessary. This prepares for a future portability change to allow elfutil to build with alternate libc implementations. Signed-off-by: Saleem Abdulrasool --- debuginfod/ChangeLog | 4 ++++ debuginfod/debuginfod.cxx | 1 - src/ChangeLog | 4 ++++ src/elfclassify.c | 1 - 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 530f7dc7..e8e486ab 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,7 @@ +2021-08-20 Saleem Abdulrasool + + * debuginfod.cxx: Remove error.h include. + 2021-08-19 Frank Ch. Eigler PR28249 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index fca07f61..b560fdcb 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -46,7 +46,6 @@ extern "C" { #include #include -#include #include #include #include diff --git a/src/ChangeLog b/src/ChangeLog index 312bc503..b729eaa4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-08-20 Saleem Abdulrasool + + * elfclassify.c: Remove error.h include. + 2021-03-18 Timm Bäder * readelf.c (run_advance_pc): New static inline function diff --git a/src/elfclassify.c b/src/elfclassify.c index fe7eeeed..2f70b29a 100644 --- a/src/elfclassify.c +++ b/src/elfclassify.c @@ -19,7 +19,6 @@ #include #include -#include #include #include #include -- cgit v1.2.1 From 76c84c137a82a7cacbc69b1696052491b3bb81cb Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 20 Aug 2021 20:28:23 +0000 Subject: handle libc implementations which do not provide `error.h` Introduce a configure time check for the presence of `error.h`. In the case that `error.h` is not available, we can fall back to `err.h`. Although `err.h` is not a C standard header (it is a BSD extension), many libc implementations provide. If there are targets which do not provide an implementation of `err.h`, it would be possible to further extend the implementation to be more portable. This resolves bug #21008. Signed-off-by: Saleem Abdulrasool --- ChangeLog | 4 ++++ configure.ac | 3 +++ lib/ChangeLog | 5 +++++ lib/system.h | 26 +++++++++++++++++++++++++- 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 12b8f403..6d920b93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-08-20 Saleem Abdulrasool + + * Add AC_CHECK_HEADERS for error.h and err.h. + 2021-07-28 Mark Wielaard * configure.ac (AC_CHECK_DECLS): Add reallocarray check. diff --git a/configure.ac b/configure.ac index 7caff2c5..177bb1a2 100644 --- a/configure.ac +++ b/configure.ac @@ -431,6 +431,9 @@ AC_CHECK_DECLS([reallocarray],[],[], AC_CHECK_FUNCS([process_vm_readv]) +AC_CHECK_HEADERS([error.h]) +AC_CHECK_HEADERS([err.h]) + old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -D_GNU_SOURCE" AC_FUNC_STRERROR_R() diff --git a/lib/ChangeLog b/lib/ChangeLog index a95f8041..589953cf 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2021-08-20 Saleem Abdulrasool + + * system.h: Check for HAVE_ERROR_H and HAVE_ERR_H and define + error_message_cont and error if necessary. + 2021-08-20 Saleem Abdulrasool * fixedsizehash.h: Remove sys/cdefs.h include. Unconditionally diff --git a/lib/system.h b/lib/system.h index 58d9deee..b963fd15 100644 --- a/lib/system.h +++ b/lib/system.h @@ -29,8 +29,9 @@ #ifndef LIB_SYSTEM_H #define LIB_SYSTEM_H 1 +#include + #include -#include #include #include #include @@ -38,8 +39,31 @@ #include #include #include +#include #include +#if defined(HAVE_ERROR_H) +#include +#elif defined(HAVE_ERR_H) +#include + +static int error_message_count = 0; + +static inline void error(int status, int errnum, const char *format, ...) { + va_list argp; + + va_start(argp, format); + verr(status, format, argp); + va_end(argp); + + if (status) + exit(status); + ++error_message_count; +} +#else +#error "err.h or error.h must be available" +#endif + #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) # define LE64(n) (n) -- cgit v1.2.1 From 047d09e17edfb220cd6a96129bd19b496d503fc5 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 27 Aug 2021 15:20:13 +0000 Subject: lib: remove unused `STROF` definition (NFC) This definition was in the fallback path, where `sys/cdefs.h` is not available. Now that we have a single path through here, this macro gets defined, though is unused. Remove the unused macro definition. Signed-off-by: Saleem Abdulrasool --- lib/ChangeLog | 4 ++++ lib/fixedsizehash.h | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 589953cf..cf676742 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2021-08-21 Saleem Abdulrasool + + * fixedsizehash.h: Remove unused STROF macro. + 2021-08-20 Saleem Abdulrasool * system.h: Check for HAVE_ERROR_H and HAVE_ERR_H and define diff --git a/lib/fixedsizehash.h b/lib/fixedsizehash.h index f333ad99..14f0fb88 100644 --- a/lib/fixedsizehash.h +++ b/lib/fixedsizehash.h @@ -33,7 +33,6 @@ #include -#define STROF(t2) t2 #define CONCAT_EXPANDED(t1,t2) t1 ## t2 #define CONCAT(t1,t2) CONCAT_EXPANDED(t1,t2) -- cgit v1.2.1 From 4d6dd0e5ad5c3366cbf701b4fb62b6d91be545f8 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Fri, 27 Aug 2021 15:51:47 +0000 Subject: lib: avoid potential problems with `-fno-common` This properly homes the fallback function into a translation unit rather than trying to define an inline common definition for the fallback path. The intent of the original approach was to actually simply avoid adding a new source file that is used for the fallback path. However, that may cause trouble with multiple definitions if the symbol does not get vague linkage (which itself is not particularly great). This simplifies the behaviour at the cost of an extra inode. --- lib/ChangeLog | 9 +++++++++ lib/Makefile.am | 2 +- lib/system.h | 17 ++--------------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index cf676742..60d32082 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,12 @@ +2021-08-23 Saleem Abdulrasool + + * system.h: Remove inline definition for error and error_message_count + in the fallback path. + * Makefile.am (libeu_a_SOURCES): Add error.c. + * error.c: New file, moves the previous inline definitions to avoid + multiple definitions properly rather than relying on -fcommon and vague + linkage. + 2021-08-21 Saleem Abdulrasool * fixedsizehash.h: Remove unused STROF macro. diff --git a/lib/Makefile.am b/lib/Makefile.am index 97bf7329..766fbcd7 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -35,7 +35,7 @@ noinst_LIBRARIES = libeu.a libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ crc32.c crc32_file.c \ - color.c printversion.c + color.c error.c printversion.c noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \ eu-config.h color.h printversion.h bpf.h \ diff --git a/lib/system.h b/lib/system.h index b963fd15..edbc8488 100644 --- a/lib/system.h +++ b/lib/system.h @@ -45,21 +45,8 @@ #if defined(HAVE_ERROR_H) #include #elif defined(HAVE_ERR_H) -#include - -static int error_message_count = 0; - -static inline void error(int status, int errnum, const char *format, ...) { - va_list argp; - - va_start(argp, format); - verr(status, format, argp); - va_end(argp); - - if (status) - exit(status); - ++error_message_count; -} +extern int error_message_count; +void error(int status, int errnum, const char *format, ...); #else #error "err.h or error.h must be available" #endif -- cgit v1.2.1 From 610623458b7e98ed3e912e4b7ca8050f6ce4c698 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 27 Aug 2021 18:47:30 +0200 Subject: Add lib/error.c This new file was supposed to be part of 4d6dd0e5a "lib: avoid potential problems with `-fno-common`". Signed-off-by: Mark Wielaard --- lib/error.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 lib/error.c diff --git a/lib/error.c b/lib/error.c new file mode 100644 index 00000000..75e964fd --- /dev/null +++ b/lib/error.c @@ -0,0 +1,49 @@ +/* Definitions for error fallback functions. + Copyright (C) 2021 Google, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#include + +#if !defined(HAVE_ERROR_H) && defined(HAVE_ERR_H) +#include +#include +#include + +unsigned int error_message_count = 0; + +void error(int status, int errnum, const char *format, ...) { + va_list argp; + + va_start(argp, format); + verr(status, format, argp); + va_end(argp); + + if (status) + exit(status); + ++error_message_count; +} +#endif -- cgit v1.2.1 From d3f914023abcd6ae76b168da97518e5e7dbd761a Mon Sep 17 00:00:00 2001 From: Di Chen Date: Fri, 20 Aug 2021 13:03:21 +0800 Subject: debuginfod: PR27917 - protect against federation loops If someone misconfigures a debuginfod federation to have loops, and a nonexistent buildid lookup is attempted, bad things will happen, as is documented. This patch aims to reduce the risk by adding an option to debuginfod that functions kind of like an IP packet's TTL: a limit on the length of XFF: header that debuginfod is willing to process. If X-Forwarded-For: exceeds N hops, it will not delegate a local lookup miss to upstream debuginfods. Commit ab38d167c40c99 causes federation loops for non-existent resources to result in multiple temporary deadlocks, each lasting for $DEBUGINFOD_TIMEOUT seconds. Since concurrent requests for each unique resource are now serialized, federation loops can result in one server thread waiting to acquire a lock while the server thread holding the lock waits for the first thread to respond to an http request. This PR can help protect against the above multiple temporary deadlocks behaviour. Ex. if --forwarded-ttl-limit=0 then the timeout behaviour of local loops should be avoided. https://sourceware.org/bugzilla/show_bug.cgi?id=27917 Signed-off-by: Di Chen --- debuginfod/ChangeLog | 8 ++++++++ debuginfod/debuginfod.cxx | 18 +++++++++++++++++ doc/ChangeLog | 4 ++++ doc/debuginfod.8 | 6 ++++++ tests/ChangeLog | 4 ++++ tests/run-debuginfod-find.sh | 47 +++++++++++++++++++++++++++++++++++++++++++- 6 files changed, 86 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index e8e486ab..395af94f 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2021-08-20 Di Chen + + * debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT. + (forwarded_ttl_limit): New static unsigned. + (parse_opt): Handle ARGP_KEY_FORWARDED_TTL_LIMIT. + (handle_buildid): Check forwarded_ttl_limit. + (main): Log forwarded ttl limit. + 2021-08-20 Saleem Abdulrasool * debuginfod.cxx: Remove error.h include. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index b560fdcb..6e182a84 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -374,6 +374,8 @@ static const struct argp_option options[] = #define ARGP_KEY_FDCACHE_PREFETCH_FDS 0x1006 { "fdcache-prefetch-fds", ARGP_KEY_FDCACHE_PREFETCH_FDS, "NUM", 0,"Number of files allocated to the \ prefetch cache.", 0}, +#define ARGP_KEY_FORWARDED_TTL_LIMIT 0x1007 + {"forwarded-ttl-limit", ARGP_KEY_FORWARDED_TTL_LIMIT, "NUM", 0, "Limit of X-Forwarded-For hops, default 8.", 0}, { NULL, 0, NULL, 0, NULL, 0 }, }; @@ -421,6 +423,7 @@ static long fdcache_prefetch; static long fdcache_mintmp; static long fdcache_prefetch_mbs; static long fdcache_prefetch_fds; +static unsigned forwarded_ttl_limit = 8; static string tmpdir; static void set_metric(const string& key, double value); @@ -553,6 +556,9 @@ parse_opt (int key, char *arg, if( fdcache_mintmp > 100 || fdcache_mintmp < 0 ) argp_failure(state, 1, EINVAL, "fdcache mintmp percent"); break; + case ARGP_KEY_FORWARDED_TTL_LIMIT: + forwarded_ttl_limit = (unsigned) atoi(arg); + break; case ARGP_KEY_ARG: source_paths.insert(string(arg)); break; @@ -1880,6 +1886,17 @@ handle_buildid (MHD_Connection* conn, if (xff != "") xff += string(", "); // comma separated list + unsigned int xff_count = 0; + for (auto&& i : xff){ + if (i == ',') xff_count++; + } + + // if X-Forwarded-For: exceeds N hops, + // do not delegate a local lookup miss to upstream debuginfods. + if (xff_count >= forwarded_ttl_limit) + throw reportable_exception(MHD_HTTP_NOT_FOUND, "not found, --forwared-ttl-limit reached \ +and will not query the upstream servers"); + // Compute the client's numeric IP address only - so can't merge with conninfo() const union MHD_ConnectionInfo *u = MHD_get_connection_info (conn, MHD_CONNECTION_INFO_CLIENT_ADDRESS); @@ -3718,6 +3735,7 @@ main (int argc, char *argv[]) obatched(clog) << "groom time " << groom_s << endl; obatched(clog) << "prefetch fds " << fdcache_prefetch_fds << endl; obatched(clog) << "prefetch mbs " << fdcache_prefetch_mbs << endl; + obatched(clog) << "forwarded ttl limit " << forwarded_ttl_limit << endl; if (scan_archives.size()>0) { diff --git a/doc/ChangeLog b/doc/ChangeLog index 77d1d705..d5f34f0f 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2021-08-20 Di Chen + + * debuginfod.8: Add --forwarded-ttl-limit=NUM documentation. + 2021-07-28 Alice Zhang PR27950 diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 3e791b62..5b0d793c 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -235,6 +235,12 @@ are intended to give an operator notice about storage scarcity - which can translate to RAM scarcity if the disk happens to be on a RAM virtual disk. The default threshold is 25%. +.TP +.B "\-\-forwarded\-ttl\-limit=NUM" +Configure limits of X-Forwarded-For hops. if X-Forwarded-For +exceeds N hops, it will not delegate a local lookup miss to +upstream debuginfods. The default limit is 8. + .TP .B "\-v" Increase verbosity of logging to the standard error file descriptor. diff --git a/tests/ChangeLog b/tests/ChangeLog index 3bfd1ca2..29c48b97 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-08-20 Di Chen + + * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit. + 2021-08-04 Mark Wielaard PR28190 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 991d1dc5..7e12dd7f 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -37,6 +37,8 @@ PID1=0 PID2=0 PID3=0 PID4=0 +PID5=0 +PID6=0 cleanup() { @@ -44,6 +46,8 @@ cleanup() if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi if [ $PID4 -ne 0 ]; then kill $PID4; wait $PID4; fi + if [ $PID5 -ne 0 ]; then kill $PID5; wait $PID5; fi + if [ $PID6 -ne 0 ]; then kill $PID6; wait $PID6; fi rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* exit_cleanup } @@ -54,7 +58,7 @@ trap cleanup 0 1 2 3 5 9 15 errfiles_list= err() { echo ERROR REPORTS - for ports in $PORT1 $PORT2 $PORT3 + for ports in $PORT1 $PORT2 $PORT3 $PORT4 $PORT5 do echo ERROR REPORT $port metrics curl -s http://127.0.0.1:$port/metrics @@ -804,4 +808,45 @@ if [ $retry_attempts -ne 10 ]; then exit 1; fi +######################################################################## + +# Test when debuginfod hitting X-Forwarded-For hops limit. +# This test will start two servers (as a loop) with two different hop limits. + +while true; do + PORT4=`expr '(' $RANDOM % 1000 ')' + 9000` + PORT5=`expr '(' $RANDOM % 1000 ')' + 9000` + ss -atn | fgrep -e ":$PORT4" -e ":$PORT5"|| break +done + +# Make sure the vlogs are cleaned up after the test +# and that they are printed on error. +tempfiles vlog$PORT4 vlog$PORT5 +errfiles vlog$PORT4 vlog$PORT5 + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & +PID5=$! + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & +PID6=$! + +wait_ready $PORT4 'ready' 1 +wait_ready $PORT5 'ready' 1 + +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT4/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true + +# Use a different buildid to avoid using same cache. +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT5/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 11234567 || true + +grep "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT4 +grep -v "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT5 | grep "not found" vlog$PORT5 + +kill $PID5 $PID6 +wait $PID5 $PID6 + +PID5=0 +PID6=0 + exit 0 -- cgit v1.2.1 From 17a9b1303e533c13aac6550844bdd68c669091bf Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 28 Aug 2021 15:54:18 +0200 Subject: tests: Use fresh separate databases for debuginfd forwarded-ttl-limit Sharing the database between the two debuginfod instances that forward queries to each other causes issues. Make both debuginfod instances use a new fresh database. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 29c48b97..cbd1c227 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-08-28 Mark Wielaard + + * run-debuginfod-find.sh: Use clean, separate databases for + forwarded-ttl-limit tests. + 2021-08-20 Di Chen * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit. diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 7e12dd7f..5d38d625 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -824,10 +824,13 @@ done tempfiles vlog$PORT4 vlog$PORT5 errfiles vlog$PORT4 vlog$PORT5 -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & +# Give each debuginfd its own clean database. +tempfiles db.$PORT4.sql db.$PORT5.sql + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT4.sql --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & PID5=$! -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT5.sql --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & PID6=$! wait_ready $PORT4 'ready' 1 -- cgit v1.2.1 From 61554a292f753032490c349fedf47c4fb461e3ea Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 28 Aug 2021 20:25:56 +0200 Subject: debuginfod: Turn -d ":memory:" into -d "file::memory:?cache=shared" debuginfod opens the database twice, once in read/wrote and once in read-only mode. This means the magic ":memory:" in-memory database cannot be used as is because the two connections don't really share the underlying database. Fix this by turning ":memory:" into ":file::memory:?cache=shared" which makes the in-memory database shared. See https://sqlite.org/inmemorydb.html Document this in debuginfod.8 and make some tests use -d :memory: Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod.cxx | 9 ++++++++- doc/ChangeLog | 4 ++++ doc/debuginfod.8 | 6 ++++-- tests/ChangeLog | 5 +++++ tests/run-debuginfod-find.sh | 7 ++----- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 395af94f..c5459823 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-08-28 Mark Wielaard + + * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into + "file::memory:?cache=shared" for the db_path. + 2021-08-20 Di Chen * debuginfod.cxx (options): Add ARGP_KEY_FORWARDED_TTL_LIMIT. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 6e182a84..3269f657 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -483,7 +483,14 @@ parse_opt (int key, char *arg, switch (key) { case 'v': verbose ++; break; - case 'd': db_path = string(arg); break; + case 'd': + /* When using the in-memory database make sure it is shareable, + so we can open it twice as read/write and read-only. */ + if (strcmp (arg, ":memory:") == 0) + db_path = "file::memory:?cache=shared"; + else + db_path = string(arg); + break; case 'p': http_port = (unsigned) atoi(arg); if (http_port == 0 || http_port > 65535) argp_failure(state, 1, EINVAL, "port number"); diff --git a/doc/ChangeLog b/doc/ChangeLog index d5f34f0f..ada48383 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2021-08-28 Di Chen + + * debuginfod.8 (-d): Document ":memory:" as in-memory database. + 2021-08-20 Di Chen * debuginfod.8: Add --forwarded-ttl-limit=NUM documentation. diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 5b0d793c..f9a418d1 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -117,8 +117,10 @@ file is disposable in the sense that a later rescan will repopulate data. It will contain absolute file path names, so it may not be portable across machines. It may be frequently read/written, so it should be on a fast filesystem. It should not be shared across -machines or users, to maximize sqlite locking performance. The -default database file is \%$HOME/.debuginfod.sqlite. +machines or users, to maximize sqlite locking performance. For quick +testing the magic string ":memory:" can be used to use an one-time +memory-only database. The default database file is +\%$HOME/.debuginfod.sqlite. .TP .B "\-D SQL" "\-\-ddl=SQL" diff --git a/tests/ChangeLog b/tests/ChangeLog index cbd1c227..3fa7c2e4 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-08-28 Mark Wielaard + + * run-debuginfod-find.sh: Use ":memory:" for the + forwarded-ttl-limit tests. + 2021-08-28 Mark Wielaard * run-debuginfod-find.sh: Use clean, separate databases for diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index 5d38d625..7515b7cd 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -824,13 +824,10 @@ done tempfiles vlog$PORT4 vlog$PORT5 errfiles vlog$PORT4 vlog$PORT5 -# Give each debuginfd its own clean database. -tempfiles db.$PORT4.sql db.$PORT5.sql - -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT4.sql --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & PID5=$! -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d db.$PORT5.sql --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & PID6=$! wait_ready $PORT4 'ready' 1 -- cgit v1.2.1 From 6eb991a9ebc45cc468a049ef30a98a0f7cad4a0d Mon Sep 17 00:00:00 2001 From: Adrian Ratiu Date: Mon, 30 Aug 2021 18:43:13 +0300 Subject: configure.ac: rework gnu99 ext check to allow clang It is true that Clang does not support all gnu99 extensions [1], but not all of them are used in the codebase and over time there have been code cleanup efforts to improve Clang support. For example after commit 779c57ea ("readelf: Pull advance_pc() in file scope") there are no more nested function declarations and elfutils now builds fine with Clang. So in the interest of enabling Clang builds we remove the only remaining blocker: the configure checks for nested functions and variable length arrays which are also unused. Considering mixed decls and code is also part of c99 standard, the entire check becomes redundant and we can just replace AC_PROG_CC -> AC_PROG_CC_C99. [1] https://sourceware.org/bugzilla/show_bug.cgi?id=24964 Signed-off-by: Adrian Ratiu --- ChangeLog | 4 ++++ configure.ac | 35 +---------------------------------- 2 files changed, 5 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d920b93..6255fe61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-08-10 Adrian Ratiu + + * configure.ac (AC_CACHE_CHECK): Rework std=gnu99 check to allow clang. + 2021-08-20 Saleem Abdulrasool * Add AC_CHECK_HEADERS for error.h and err.h. diff --git a/configure.ac b/configure.ac index 177bb1a2..76563557 100644 --- a/configure.ac +++ b/configure.ac @@ -87,7 +87,7 @@ AS_IF([test "$use_locks" = yes], AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) -AC_PROG_CC +AC_PROG_CC_C99 AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX @@ -96,39 +96,6 @@ m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) AC_CHECK_TOOL([READELF], [readelf]) AC_CHECK_TOOL([NM], [nm]) -# We use -std=gnu99 but have explicit checks for some language constructs -# and GNU extensions since some compilers claim GNU99 support, but don't -# really support all language extensions. In particular we need -# Mixed Declarations and Code -# https://gcc.gnu.org/onlinedocs/gcc/Mixed-Declarations.html -# Nested Functions -# https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html -# Arrays of Variable Length -# https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html -AC_CACHE_CHECK([for gcc with GNU99 support], ac_cv_c99, [dnl -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS -std=gnu99" -AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl -int foo (int a) -{ - for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s; -} - -double bar (double a, double b) -{ - double square (double z) { return z * z; } - return square (a) + square (b); -} - -void baz (int n) -{ - struct S { int x[[n]]; }; -}])], - ac_cv_c99=yes, ac_cv_c99=no) -CFLAGS="$old_CFLAGS"]) -AS_IF([test "x$ac_cv_c99" != xyes], - AC_MSG_ERROR([gcc with GNU99 support required])) - AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))], ac_cv_visibility, [dnl save_CFLAGS="$CFLAGS" -- cgit v1.2.1 From ef856762088bcd85ac9121b129dba0c6910369a2 Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Tue, 10 Aug 2021 11:21:35 -0400 Subject: debuginfod: Fracture tests/run-debuginfod-find.sh into specific tests tests/run-debuginfod-find.sh was a massive test script with many broadly varying tests. This caused the test script to fail when any number of things went wrong and because of its intertwined nature, detecting the source of a failure could be difficult. The size of the test script also meant many unrelated tests were run making the testing process unnecessarily lengthy. This patch fractures tests/run-debuginfod-find.sh into smaller, more manageable individual test script files. This ensures that when failure occurs, a programmer can easily determine where their patch went wrong. It also allows programmers to specify exactly which tests to run, making testing more efficient. Redundancies are also reduced by placing code in tests/debuginfod-subr.sh. Signed-off-by: Noah Sanci --- tests/ChangeLog | 28 + tests/Makefile.am | 44 +- tests/debuginfod-subr.sh | 149 +++++ tests/run-debuginfod-000-permission.sh | 85 +++ tests/run-debuginfod-archive-groom.sh | 154 ++++++ tests/run-debuginfod-archive-rename.sh | 96 ++++ tests/run-debuginfod-archive-test.sh | 83 +++ tests/run-debuginfod-artifact-running.sh | 122 +++++ tests/run-debuginfod-dlopen.sh | 84 +++ tests/run-debuginfod-duplicate-urls.sh | 52 ++ tests/run-debuginfod-extraction.sh | 101 ++++ tests/run-debuginfod-fd-prefetch-caches.sh | 58 ++ tests/run-debuginfod-federation-link.sh | 161 ++++++ tests/run-debuginfod-federation-metrics.sh | 213 ++++++++ tests/run-debuginfod-federation-sqlite.sh | 202 +++++++ tests/run-debuginfod-file.sh | 41 ++ tests/run-debuginfod-find.sh | 852 ----------------------------- tests/run-debuginfod-malformed.sh | 110 ++++ tests/run-debuginfod-no-urls.sh | 41 ++ tests/run-debuginfod-query-retry.sh | 35 ++ tests/run-debuginfod-regex.sh | 98 ++++ tests/run-debuginfod-sizetime.sh | 78 +++ tests/run-debuginfod-tmp-home.sh | 125 +++++ tests/run-debuginfod-writable.sh | 84 +++ tests/run-debuginfod-x-forwarded-for.sh | 63 +++ 25 files changed, 2305 insertions(+), 854 deletions(-) create mode 100755 tests/debuginfod-subr.sh create mode 100755 tests/run-debuginfod-000-permission.sh create mode 100755 tests/run-debuginfod-archive-groom.sh create mode 100755 tests/run-debuginfod-archive-rename.sh create mode 100755 tests/run-debuginfod-archive-test.sh create mode 100755 tests/run-debuginfod-artifact-running.sh create mode 100755 tests/run-debuginfod-dlopen.sh create mode 100755 tests/run-debuginfod-duplicate-urls.sh create mode 100755 tests/run-debuginfod-extraction.sh create mode 100755 tests/run-debuginfod-fd-prefetch-caches.sh create mode 100755 tests/run-debuginfod-federation-link.sh create mode 100755 tests/run-debuginfod-federation-metrics.sh create mode 100755 tests/run-debuginfod-federation-sqlite.sh create mode 100755 tests/run-debuginfod-file.sh delete mode 100755 tests/run-debuginfod-find.sh create mode 100755 tests/run-debuginfod-malformed.sh create mode 100755 tests/run-debuginfod-no-urls.sh create mode 100755 tests/run-debuginfod-query-retry.sh create mode 100755 tests/run-debuginfod-regex.sh create mode 100755 tests/run-debuginfod-sizetime.sh create mode 100755 tests/run-debuginfod-tmp-home.sh create mode 100755 tests/run-debuginfod-writable.sh create mode 100755 tests/run-debuginfod-x-forwarded-for.sh diff --git a/tests/ChangeLog b/tests/ChangeLog index 3fa7c2e4..0529f641 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -12,6 +12,34 @@ * run-debuginfod-find.sh: Add test for X-Forwarded-For hops limit. +2021-08-20 Noah Sanci + + * debuginfod-find.sh: Separated file into + run-debuginfod-000-permission.sh, + run-debuginfod-archive-groom.sh, + run-debuginfod-archive-rename.sh, + run-debuginfod-archive-test.sh, + run-debuginfod-artifact-running.sh, + run-debuginfod-dlopen.sh, + run-debuginfod-duplicate-urls.sh, + run-debuginfod-extraction.sh, + run-debuginfod-fd-prefetch-caches.sh, + run-debuginfod-federation-link.sh, + run-debuginfod-federation-metrics.sh, + run-debuginfod-federation-sqlite.sh, + run-debuginfod-file.sh, + run-debuginfod-malformed.sh, + run-debuginfod-no-urls.sh, + run-debuginfod-query-retry.sh, + run-debuginfod-regex.sh, + run-debuginfod-sizetime.sh, + run-debuginfod-tmp-home.sh, + run-debuginfod-x-forwarded.sh + and run-debuginfod-writable.sh. + All files source debuginfod-subr.sh and use the $base variable to find ports. + * tests/Makefile.am: Added the above new files to the test suite + * tests/debuginfod-subr.sh: Added some general functions for above tests + 2021-08-04 Mark Wielaard PR28190 diff --git a/tests/Makefile.am b/tests/Makefile.am index 429649f4..3c302e72 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -211,7 +211,27 @@ if DEBUGINFOD check_PROGRAMS += debuginfod_build_id_find # With the dummy delegation doesn't work if !DUMMY_LIBDEBUGINFOD -TESTS += run-debuginfod-find.sh +TESTS += run-debuginfod-dlopen.sh \ + run-debuginfod-artifact-running.sh \ + run-debuginfod-fd-prefetch-caches.sh \ + run-debuginfod-regex.sh \ + run-debuginfod-duplicate-urls.sh \ + run-debuginfod-file.sh \ + run-debuginfod-sizetime.sh \ + run-debuginfod-malformed.sh \ + run-debuginfod-000-permission.sh \ + run-debuginfod-tmp-home.sh \ + run-debuginfod-writable.sh \ + run-debuginfod-no-urls.sh \ + run-debuginfod-query-retry.sh \ + run-debuginfod-extraction.sh \ + run-debuginfod-archive-groom.sh \ + run-debuginfod-archive-rename.sh \ + run-debuginfod-archive-test.sh \ + run-debuginfod-federation-sqlite.sh \ + run-debuginfod-federation-link.sh \ + run-debuginfod-federation-metrics.sh \ + run-debuginfod-x-forwarded-for.sh endif endif @@ -474,7 +494,27 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-elfclassify.sh run-elfclassify-self.sh \ run-disasm-riscv64.sh \ testfile-riscv64-dis1.o.bz2 testfile-riscv64-dis1.expect.bz2 \ - run-debuginfod-find.sh \ + run-debuginfod-extraction.sh \ + run-debuginfod-federation-link.sh \ + run-debuginfod-federation-metrics.sh \ + run-debuginfod-artifact-running.sh \ + run-debuginfod-federation-sqlite.sh \ + run-debuginfod-x-forwarded-for.sh \ + run-debuginfod-fd-prefetch-caches.sh \ + run-debuginfod-regex.sh \ + run-debuginfod-duplicate-urls.sh \ + run-debuginfod-file.sh \ + run-debuginfod-sizetime.sh \ + run-debuginfod-dlopen.sh \ + run-debuginfod-malformed.sh \ + run-debuginfod-000-permission.sh \ + run-debuginfod-tmp-home.sh \ + run-debuginfod-writable.sh \ + run-debuginfod-no-urls.sh \ + run-debuginfod-query-retry.sh \ + run-debuginfod-archive-groom.sh \ + run-debuginfod-archive-rename.sh \ + run-debuginfod-archive-test.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh new file mode 100755 index 00000000..3222a2b0 --- /dev/null +++ b/tests/debuginfod-subr.sh @@ -0,0 +1,149 @@ +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# sourced from run-debuginfod-*.sh tests (must be bash scripts) + +. $srcdir/test-subr.sh # includes set -e + +type curl 2>/dev/null || (echo "need curl"; exit 77) +type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77) +type cpio 2>/dev/null || (echo "need cpio"; exit 77) +type bzcat 2>/dev/null || (echo "need bzcat"; exit 77) +bsdtar --version | grep -q zstd && zstd=true || zstd=false +echo "zstd=$zstd bsdtar=`bsdtar --version`" + +cleanup() +{ + if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi + if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi + rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* + exit_cleanup +} + +# clean up trash if we were aborted early +trap cleanup 0 1 2 3 5 9 15 + +errfiles_list= +err() { + echo ERROR REPORTS + for ports in $PORT1 $PORT2 + do + echo ERROR REPORT $port metrics + curl -s http://127.0.0.1:$port/metrics + echo + done + for x in $errfiles_list + do + echo ERROR REPORT "$x" + cat $x + echo + done + false # trigger set -e +} +trap err ERR + +errfiles() { + errfiles_list="$errfiles_list $*" +} + +# We want to run debuginfod in the background. We also want to start +# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff +# that the testrun alias sets. But: we if we just use +# testrun .../debuginfod +# it runs in a subshell, with different pid, so not helpful. +# +# So we gather the LD_LIBRARY_PATH with this cunning trick: +ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` + +wait_ready() +{ + port=$1; + what=$2; + value=$3; + timeout=20; + + echo "Wait $timeout seconds on $port for metric $what to change to $value" + while [ $timeout -gt 0 ]; do + mvalue="$(curl -s http://127.0.0.1:$port/metrics \ + | grep "$what" | awk '{print $NF}')" + if [ -z "$mvalue" ]; then mvalue=0; fi + echo "metric $what: $mvalue" + if [ "$mvalue" -eq "$value" ]; then + break; + fi + sleep 0.5; + ((timeout--)); + done; + + if [ $timeout -eq 0 ]; then + echo "metric $what never changed to $value on port $port" + err + fi +} + +archive_test() { + __BUILDID=$1 + __SOURCEPATH=$2 + __SOURCESHA1=$3 + + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + # check that timestamps are plausible - older than the near-present (tmpdir mtime) + test $filename -ot `pwd` + + # run again to assure that fdcache is being enjoyed + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + test $filename -ot `pwd` + + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID` + buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a $filename | grep 'Build ID' | cut -d ' ' -f 7` + test $__BUILDID = $buildid + test $filename -ot `pwd` + + if test "x$__SOURCEPATH" != "x"; then + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` + hash=`cat $filename | sha1sum | awk '{print $1}'` + test $__SOURCESHA1 = $hash + test $filename -ot `pwd` + fi +} + +get_ports() { + while true; do + PORT1=`expr '(' $RANDOM % 100 ')' + $base` + ss -atn | fgrep ":$PORT1" || break + done +# Some tests will use two servers, so assign the second var + while true; do + PORT2=`expr '(' $RANDOM % 100 ')' + $base` + ss -atn | fgrep ":$PORT2" && $PORT1 -ne $PORT2 || break + done + +} + +VERBOSE=-vvv +# We gather the LD_LIBRARY_PATH with this cunning trick: +ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` +PORT1=0 +PORT2=0 +PID1=0 +PID2=0 diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh new file mode 100755 index 00000000..28e54385 --- /dev/null +++ b/tests/run-debuginfod-000-permission.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8000 +get_ports +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ + -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +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 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +######################################################################## +# PR25628 +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests + +# The query is designed to fail, while the 000-permission file should be created. +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then + echo "could not find cache in $DEBUGINFOD_CACHE_PATH" + err +fi + +if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then + echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" + err +fi + +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +if [ "$bytecount_before" != "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404"} has changed." + err +fi + +# set cache_miss_s to 0 and sleep 1 to make the mtime expire. +echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s +sleep 1 +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +if [ "$bytecount_before" == "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404"} should be incremented." + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh new file mode 100755 index 00000000..0ee056ff --- /dev/null +++ b/tests/run-debuginfod-archive-groom.sh @@ -0,0 +1,154 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8100 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 + +# Clean old dirictories +mkdir R ${PWD}/F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Be patient when run on a busy machine things might take a bit. + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# Build a non-stripped binary +echo "int main() { return 0; }" > ${PWD}/F/prog.c +gcc -Wl,--build-id -g -o ${PWD}/F/prog ${PWD}/F/prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a ${PWD}/F/prog | grep 'Build ID' | cut -d ' ' -f 7` +tempfiles ${PWD}/F/prog ${PWD}/F/prog.c + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +tempfiles vlog3 $DB +cp -rvp ${abs_srcdir}/debuginfod-tars Z +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +######################################################################## +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +txz=$(find Z -name \*tar.xz | wc -l) + +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Expect all source files found in the rpms (they are all called hello.c :) +# We will need to extract all rpms (in their own directory) and could all +# sources referenced in the .debug files. +mkdir extracted +cd extracted +subdir=0; +newrpms=$(find ../R -name \*\.rpm | grep -v nothing) +for i in $newrpms; do + subdir=$[$subdir+1]; + mkdir $subdir; + cd $subdir; + ls -lah ../$i + rpm2cpio ../$i | cpio -ivd; + cd ..; +done +sourcefiles=$(find -name \*\\.debug \ + | env LD_LIBRARY_PATH=$ldpath xargs \ + ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ + | grep mtime: | wc --lines) +cd .. +rm -rf extracted + +wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 +# fedora31 +if [ $zstd = true ]; then + # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it + # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite + archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA + archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA +fi +# fedora30 +archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +# rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA +# rhel6 +archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA +RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir + +# Drop some of the artifacts, run a groom cycle; confirm that +# debuginfod has forgotten them, but remembers others +rm -r R/debuginfod-rpms/rhel6/* +kill -USR2 $PID1 # groom cycle +## 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 +# Expect 4 rpms containing 2 buildids to be deleted by the groom +wait_ready $PORT1 'groomed_total{decision="stale"}' 4 + +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests + +# this is one of the buildids from the groom-deleted rpms +testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true + +# but this one was not deleted so should be still around +testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID || true + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh new file mode 100755 index 00000000..38697eee --- /dev/null +++ b/tests/run-debuginfod-archive-rename.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8200 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 +tempfiles $DEBUGINFOD_CACHE_PATH $DB +# Clean old dirictories +mkdir R ${PWD}/F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & + +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 + +######################################################################## +## PR26810: Now rename some files in the R directory, then rescan, so +# there are two copies of the same buildid in the index, one for the +# no-longer-existing file name, and one under the new name. + +# run a groom cycle to force server to drop its fdcache +kill -USR2 $PID1 # groom cycle +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 +# move it around a couple of times to make it likely to hit a nonexistent entry during iteration +mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2 +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3 +kill -USR1 $PID1 # scan cycle +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# retest rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA + +egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0; diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh new file mode 100755 index 00000000..bc500540 --- /dev/null +++ b/tests/run-debuginfod-archive-test.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +# find an unused port number +mkdir R +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8300 +get_ports + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -R -p $PORT1 -t0 -g0 -v R > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 + +# Be patient when run on a busy machine things might take a bit. +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# common source file sha1 +SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 +# fedora31 +if [ $zstd = true ]; then + # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it + # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite + archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA + archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA +fi +# fedora30 +archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA +# rhel7 +archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA +# rhel6 +archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA +archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA +# arch +#archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh new file mode 100755 index 00000000..e96cb966 --- /dev/null +++ b/tests/run-debuginfod-artifact-running.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8400 +get_ports +mkdir F + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +echo 'int main(int argc, char * argv){ return 0; }' > ${PWD}/prog.c +gcc -Wl,--build-id -g -o prog ${PWD}/prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +tempfiles prog prog.debug prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -p $PORT1 -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +mv prog F +mv prog.debug F +tempfiles prog/F + +# Be patient when run on a busy machine things might take a bit. +export DEBUGINFOD_TIMEOUT=10 + +# Server must become ready +wait_ready $PORT1 'ready' 1 +kill -USR1 $PID1 + +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# Add artifacts to the search paths and test whether debuginfod finds them while already running. +# Build another, non-stripped binary +echo "int main() { return 0; }" > ${PWD}/prog2.c +tempfiles prog2.c +gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c +#testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog2 | grep 'Build ID' | cut -d ' ' -f 7` +mv prog2 F +#mv prog2.debug F +tempfiles F/prog2 F/prog2.debug + +kill -USR1 $PID1 +# Now there should be 3 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether debuginfod-find is able to fetch those files. +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` +cmp $filename F/prog.debug +if [ -w $filename ]; then + echo "cache file writable, boo" + err +fi + +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` +cmp $filename F/prog + +# raw source filename +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../prog.c` +cmp $filename ${PWD}/prog.c + +# and also the canonicalized one +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/prog.c` +cmp $filename ${PWD}/prog.c + +# Rerun same tests for the prog2 binary +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog` +cmp $filename F/prog2 +grep -q Progress vlog +grep -q Downloaded.from vlog +tempfiles vlog +filename=`testrun env DEBUGINFOD_PROGRESS=1 ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 2>vlog2` +cmp $filename F/prog2 +grep -q 'Downloading.*http' vlog2 +tempfiles vlog2 +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` +cmp $filename ${PWD}/prog2.c + + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh new file mode 100755 index 00000000..6476612c --- /dev/null +++ b/tests/run-debuginfod-dlopen.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8500 +get_ports +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R $VERBOSE -p $PORT1 \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +# Server must become ready +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 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether elfutils, via the debuginfod client library dlopen hooks, +# is able to fetch debuginfo from the local debuginfod. +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0 diff --git a/tests/run-debuginfod-duplicate-urls.sh b/tests/run-debuginfod-duplicate-urls.sh new file mode 100755 index 00000000..b76b39a3 --- /dev/null +++ b/tests/run-debuginfod-duplicate-urls.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8600 +get_ports + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +wait_ready $PORT1 'ready' 1 + +######################################################################## +## PR27983 +# Ensure no duplicate urls are used in when querying servers for files +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +env DEBUGINFOD_URLS="http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:7999" \ + LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv executable 0 > vlog1 2>&1 || true +tempfiles vlog1 +cat vlog1 +if [ $( grep -c 'duplicate url: http://127.0.0.1:'$PORT1'.*' vlog1 ) -ne 2 ]; then + echo "Duplicate servers remain"; + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh new file mode 100755 index 00000000..7c534d09 --- /dev/null +++ b/tests/run-debuginfod-extraction.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir R Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8700 +get_ports + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v R Z > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 + +# Be patient when run on a busy machine things might take a bit. +export DEBUGINFOD_TIMEOUT=10 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +cp -rvp ${abs_srcdir}/debuginfod-tars Z + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +txz=$(find Z -name \*tar.xz | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz +tb2=$(find Z -name \*tar.bz2 | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 + +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# Expect all source files found in the rpms (they are all called hello.c :) +# We will need to extract all rpms (in their own directory) and could all +# sources referenced in the .debug files. +mkdir extracted +cd extracted +subdir=0; +newrpms=$(find ../R -name \*\.rpm | grep -v nothing) +for i in $newrpms; do + subdir=$[$subdir+1]; + mkdir $subdir; + cd $subdir; + ls -lah ../$i + rpm2cpio ../$i | cpio -ivd; + cd ..; +done +sourcefiles=$(find -name \*\\.debug \ + | env LD_LIBRARY_PATH=$ldpath xargs \ + ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ + | grep mtime: | wc --lines) +cd .. +rm -rf extracted + +wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-fd-prefetch-caches.sh b/tests/run-debuginfod-fd-prefetch-caches.sh new file mode 100755 index 00000000..08b32923 --- /dev/null +++ b/tests/run-debuginfod-fd-prefetch-caches.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +FDCACHE_FDS=100 +FDCACHE_MBS=100 +PREFETCH_FDS=100 +PREFETCH_MBS=100 +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8800 +get_ports + +echo $PORT1 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 \ + --fdcache-mbs=$FDCACHE_MDS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS \ + --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -v -F F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 + +grep 'fdcache fds ' vlog$PORT1 #$FDCACHE_FDS +grep 'fdcache mbs ' vlog$PORT1 #$FDCACHE_MBS +grep 'prefetch fds ' vlog$PORT1 #$PREFETCH_FDS +grep 'prefetch mbs ' vlog$PORT1 #$PREFETCH_MBS +# search the vlog to find what metric counts should be and check the correct metrics +# were incrimented +wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $( grep -c 'interned.*front=1' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="evict"}' $( grep -c 'evicted a=.*' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $( grep -c 'interned.*front=0' vlog$PORT1 ) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $( grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true ) + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh new file mode 100755 index 00000000..ae5d4381 --- /dev/null +++ b/tests/run-debuginfod-federation-link.sh @@ -0,0 +1,161 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 +tempfiles $DB + +# Clean old dirictories +mkdir D L F +mkdir -p $DEBUGINFOD_CACHE_PATH +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8900 +get_ports +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH + +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 + +wait_ready $PORT2 'ready' 1 + +kill -USR1 $PID2 +# Wait till both files are in the index. +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT2 'thread_busy{role="scan"}' 0 + +wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 + +# have clients contact the new server +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 + +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test parallel queries in client +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +kill $PID1 +kill $PID2 +wait $PID1 +wait $PID2 +PID1=0 +PID2=0 + +exit 0 diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh new file mode 100755 index 00000000..9998a04a --- /dev/null +++ b/tests/run-debuginfod-federation-metrics.sh @@ -0,0 +1,213 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid +tempfiles $DB +# Clean old dirictories +mkdir D L F + +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9000 +get_ports + +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +wait_ready $PORT1 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT1 'thread_busy{role="http-metrics"}' 1 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 + +wait_ready $PORT2 'ready' 1 +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT2 'thread_busy{role="scan"}' 0 + +wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 +wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 + +# have clients contact the new server +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# test parallel queries in client +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +######################################################################## +# Fetch some metrics +curl -s http://127.0.0.1:$PORT1/badapi +curl -s http://127.0.0.1:$PORT1/metrics +curl -s http://127.0.0.1:$PORT2/metrics +curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error' +curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total' +curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total' + +# And generate a few errors into the second debuginfod's logs, for analysis just below +curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true +# NB: this error is used to seed the 404 failure for the survive-404 tests + +# Confirm bad artifact types are rejected without leaving trace +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true +(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false + +# DISABLE VALGRIND checking because valgrind might use debuginfod client +# requests itself, causing confusion about who put what in the cache. +# It stays disabled till the end of this test. +unset VALGRIND_CMD + +# Confirm that reused curl connections survive 404 errors. +# The rm's force an uncached fetch +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# Confirm that some debuginfod client pools are being used +curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse' + +# Trigger a flood of requests against the same archive content file. +# Use a file that hasn't been previously extracted in to make it +# likely that even this test debuginfod will experience concurrency +# and impose some "after-you" delays. +(for i in `seq 100`; do + curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & + done; + wait) +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' +# If we could guarantee some minimum number of seconds of CPU time, we +# could assert that the after_you metrics show some nonzero amount of +# waiting. A few hundred ms is typical on this developer's workstation. + +kill $PID1 +kill $PID2 +wait $PID1 +wait $PID2 +PID1=0 +PID2=0 +exit 0 + diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh new file mode 100755 index 00000000..d10a3385 --- /dev/null +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -0,0 +1,202 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +export DEBUGINFOD_TIMEOUT=10 +export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid +tempfiles $DB + +# Clean old dirictories +mkdir D L F +# not tempfiles F R L D Z - they are directories which we clean up manually +ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test + +######################################################################## +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +mv prog F +mv prog.debug F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9100 +get_ports +# Launch server which will be unable to follow symlinks +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB} -F -U -t0 -g0 -p $PORT1 L D F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 +mkdir -p $DEBUGINFOD_CACHE_PATH +# NB: run in -L symlink-following mode for the L subdir +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d ${DB}_2 -F -U -p $PORT2 -L L D F > vlog$PORT2 2>&1 & +PID2=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +tempfiles ${DB}_2 +wait_ready $PORT2 'ready' 1 + +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2 +if type bsdtar 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 + wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT2 'thread_busy{role="scan"}' 0 + + # All debs need to be in the index + debs=$(find D -name \*.deb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` + ddebs=$(find D -name \*.ddeb | wc -l) + wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` + + # ubuntu + archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# send a request to stress XFF and User-Agent federation relay; +# we'll grep for the two patterns in vlog$PORT1 +curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true + +grep UA:TESTCURL vlog$PORT1 +grep XFF:TESTXFF vlog$PORT1 + +# confirm that first server can't resolve symlinked info in L/ but second can +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` +file L/foo +file -L L/foo +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID + +# test again with scheme free url +export DEBUGINFOD_URLS=127.0.0.1:$PORT1 +rm -rf $DEBUGINFOD_CACHE_PATH +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +export DEBUGINFOD_URLS=127.0.0.1:$PORT2 +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# test parallel queries in client +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH +export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +# And generate a few errors into the second debuginfod's logs, for analysis just below +curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true +# NB: this error is used to seed the 404 failure for the survive-404 tests + +# Confirm bad artifact types are rejected without leaving trace +curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true +(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false + +# DISABLE VALGRIND checking because valgrind might use debuginfod client +# requests itself, causing confusion about who put what in the cache. +# It stays disabled till the end of this test. +unset VALGRIND_CMD + +# Confirm that reused curl connections survive 404 errors. +# The rm's force an uncached fetch +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +# Trigger a flood of requests against the same archive content file. +# Use a file that hasn't been previously extracted in to make it +# likely that even this test debuginfod will experience concurrency +# and impose some "after-you" delays. +(for i in `seq 100`; do + curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & + done; + wait) +curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' +# If we could guarantee some minimum number of seconds of CPU time, we +# could assert that the after_you metrics show some nonzero amount of +# waiting. A few hundred ms is typical on this developer's workstation. + +######################################################################## +# Corrupt the sqlite database and get debuginfod to trip across its errors +curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' +dd if=/dev/zero of=$DB bs=1 count=1 + +# trigger some random activity that's Sure to get sqlite3 upset +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +kill -USR2 $PID1 +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 +curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true +curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite' +# Run the tests again without the servers running. The target file should +# be found in the cache. + +kill -INT $PID1 $PID2 +wait $PID1 $PID2 +PID1=0 +PID2=0 +tempfiles .debuginfod_* + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 + +# check out the debuginfod logs for the new style status lines +cat vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2 +grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2 + +exit 0 diff --git a/tests/run-debuginfod-file.sh b/tests/run-debuginfod-file.sh new file mode 100755 index 00000000..22c956dd --- /dev/null +++ b/tests/run-debuginfod-file.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Test fetching a file using file:// . No debuginfod server needs to be run for +# this test. +local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path +mkdir -p ${local_dir} +echo "int main() { return 0; }" > ${local_dir}/main.c +# first test that is doesn't work, when no DEBUGINFOD_URLS is set +DEBUGINFOD_URLS="" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true + +# Now test is with proper DEBUGINFOD_URLS +DEBUGINFOD_URLS="file://${PWD}/mocktree/" +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` +cmp $filename ${local_dir}/main.c + +exit 0 diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh deleted file mode 100755 index 7515b7cd..00000000 --- a/tests/run-debuginfod-find.sh +++ /dev/null @@ -1,852 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (C) 2019-2021 Red Hat, Inc. -# This file is part of elfutils. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# elfutils is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -. $srcdir/test-subr.sh # includes set -e - -type curl 2>/dev/null || (echo "need curl"; exit 77) -type rpm2cpio 2>/dev/null || (echo "need rpm2cpio"; exit 77) -type cpio 2>/dev/null || (echo "need cpio"; exit 77) -type bzcat 2>/dev/null || (echo "need bzcat"; exit 77) -bsdtar --version | grep -q zstd && zstd=true || zstd=false -echo "zstd=$zstd bsdtar=`bsdtar --version`" - -# for test case debugging, uncomment: -set -x -VERBOSE=-vvv - -DB=${PWD}/.debuginfod_tmp.sqlite -tempfiles $DB -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache - -PID1=0 -PID2=0 -PID3=0 -PID4=0 -PID5=0 -PID6=0 - -cleanup() -{ - if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi - if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi - if [ $PID3 -ne 0 ]; then kill $PID3; wait $PID3; fi - if [ $PID4 -ne 0 ]; then kill $PID4; wait $PID4; fi - if [ $PID5 -ne 0 ]; then kill $PID5; wait $PID5; fi - if [ $PID6 -ne 0 ]; then kill $PID6; wait $PID6; fi - rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* - exit_cleanup -} - -# clean up trash if we were aborted early -trap cleanup 0 1 2 3 5 9 15 - -errfiles_list= -err() { - echo ERROR REPORTS - for ports in $PORT1 $PORT2 $PORT3 $PORT4 $PORT5 - do - echo ERROR REPORT $port metrics - curl -s http://127.0.0.1:$port/metrics - echo - done - for x in $errfiles_list - do - echo ERROR REPORT "$x" - cat $x - echo - done - false # trigger set -e -} -trap err ERR - -errfiles() { - errfiles_list="$errfiles_list $*" -} - - -# find an unused port number -while true; do - PORT1=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep ":$PORT1" || break -done - -# We want to run debuginfod in the background. We also want to start -# it with the same check/installcheck-sensitive LD_LIBRARY_PATH stuff -# that the testrun alias sets. But: we if we just use -# testrun .../debuginfod -# it runs in a subshell, with different pid, so not helpful. -# -# So we gather the LD_LIBRARY_PATH with this cunning trick: -ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` - -mkdir F R L D Z -# not tempfiles F R L D Z - they are directories which we clean up manually -ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test - -wait_ready() -{ - port=$1; - what=$2; - value=$3; - timeout=20; - - echo "Wait $timeout seconds on $port for metric $what to change to $value" - while [ $timeout -gt 0 ]; do - mvalue="$(curl -s http://127.0.0.1:$port/metrics \ - | grep "$what" | awk '{print $NF}')" - if [ -z "$mvalue" ]; then mvalue=0; fi - echo "metric $what: $mvalue" - if [ "$mvalue" -eq "$value" ]; then - break; - fi - sleep 0.5; - ((timeout--)); - done; - - if [ $timeout -eq 0 ]; then - echo "metric $what never changed to $value on port $port" - err - fi -} - -FDCACHE_FDS=50 -FDCACHE_MBS=190 -PREFETCH_FDS=10 -PREFETCH_MBS=120 -# create a bogus .rpm file to evoke a metric-visible error -# Use a cyclic symlink instead of chmod 000 to make sure even root -# would see an error (running the testsuite under root is NOT encouraged). -ln -s R/nothing.rpm R/nothing.rpm -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 --fdcache-mbs=$FDCACHE_MBS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -Z .tar.xz -Z .tar.bz2=bzcat -v R F Z L > vlog$PORT1 2>&1 & -PID1=$! -tempfiles vlog$PORT1 -errfiles vlog$PORT1 -# Server must become ready -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 - -# Check thread comm names -ps -q $PID1 -e -L -o '%p %c %a' | grep groom -ps -q $PID1 -e -L -o '%p %c %a' | grep scan -ps -q $PID1 -e -L -o '%p %c %a' | grep traverse - -# We use -t0 and -g0 here to turn off time-based scanning & grooming. -# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. - -######################################################################## - -# Compile a simple program, strip its debuginfo and save the build-id. -# Also move the debuginfo into another directory so that elfutils -# cannot find it without debuginfod. -echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c -tempfiles p+r%o\$g.c -# Create a subdirectory to confound source path names -mkdir foobar -gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c -testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g -BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` - -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 -mv p+r%o\$g F -mv p+r%o\$g.debug F -kill -USR1 $PID1 -# Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -######################################################################## - -# Test whether elfutils, via the debuginfod client library dlopen hooks, -# is able to fetch debuginfo from the local debuginfod. -testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 - -######################################################################## -## PR27892 -# Ensure DEBUGINFOD_MAXSIZE is functional and sends back the correct http -# code -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_RETRY_LIMIT=1 DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXSIZE=1 \ - ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo F/p+r%o\$g.debug 2> find-vlog$PORT1 || true -tempfiles find-vlog$PORT1 -# wait for the server to fail the same number of times the query is retried. -wait_ready $PORT1 'http_responses_after_you_milliseconds_count{code="406"}' 1 -# ensure all reporting is functional -grep 'serving file '$(realpath ${PWD})'/F/p+r%o\$g.debug' vlog$PORT1 -grep 'File too large' vlog$PORT1 -grep 'using max size 1B' find-vlog$PORT1 -if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then - echo "File cached after maxsize check" - err -fi - -# Ensure DEBUGINFOD_MAXTIME is functional -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:8002/" DEBUGINFOD_MAXTIME=1 \ - ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo F/p+r%o\$g.debug 2> find-vlog$PORT1 || true -grep 'using max time' find-vlog$PORT1 -# Ensure p+r%o\$g.debug is NOT cached -if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then - echo "File cached after maxtime check" - err -fi -######################################################################## -# PR25628 -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -# The query is designed to fail, while the 000-permission file should be created. -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then - echo "could not find cache in $DEBUGINFOD_CACHE_PATH" - err -fi - -if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then - echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" - err -fi - -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -if [ "$bytecount_before" != "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} has changed." - err -fi - -# set cache_miss_s to 0 and sleep 1 to make the mtime expire. -echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s -sleep 1 -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` -if [ "$bytecount_before" == "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} should be incremented." - err -fi -######################################################################## - -# Test whether debuginfod-find is able to fetch those files. -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` -cmp $filename F/p+r%o\$g.debug -if [ -w $filename ]; then - echo "cache file writable, boo" - err -fi - -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/p+r%o\\$g` -cmp $filename F/p+r%o\$g - -# raw source filename -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/foobar///./../p+r%o\\$g.c` -cmp $filename ${PWD}/p+r%o\$g.c - -# and also the canonicalized one -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID ${PWD}/p+r%o\\$g.c` -cmp $filename ${PWD}/p+r%o\$g.c - - -######################################################################## - -# Test whether the cache default locations are correct - -mkdir tmphome - -# $HOME/.cache should be created. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmphome/.cache" - err -fi - -# $HOME/.cache should be found. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID -if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then - echo "could not find cache in $PWD/tmphome/.cache" - err -fi - -# $XDG_CACHE_HOME should take priority over $HOME.cache. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmpxdg/" - err -fi - -# A cache at the old default location ($HOME/.debuginfod_client_cache) should take -# priority over $HOME/.cache, $XDG_CACHE_HOME. -cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true -# ||true is for tolerating errors, such a valgrind or something else -# leaving 000-perm files in there - -# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. -mkdir tmphome/.debuginfod_client_cache/deadbeef -echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo -filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef` -cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo - -# $DEBUGINFO_CACHE_PATH should take priority over all else. -testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then - echo "could not find cache in $PWD/tmpcache/" - err -fi - -######################################################################## - -# Add artifacts to the search paths and test whether debuginfod finds them while already running. - -# Build another, non-stripped binary -echo "int main() { return 0; }" > ${PWD}/prog2.c -tempfiles prog2.c -gcc -Wl,--build-id -g -o prog2 ${PWD}/prog2.c -BUILDID2=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a prog2 | grep 'Build ID' | cut -d ' ' -f 7` - -mv prog2 F -kill -USR1 $PID1 -# Now there should be 3 files in the index -wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -cp $DB $DB.backup -tempfiles $DB.backup -# Rerun same tests for the prog2 binary -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo $BUILDID2 2>vlog` -cmp $filename F/prog2 -cat vlog -grep -q Progress vlog -grep -q Downloaded.from vlog -tempfiles vlog -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.*http' vlog2 -tempfiles vlog2 -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` -cmp $filename ${PWD}/prog2.c - -cp -rvp ${abs_srcdir}/debuginfod-rpms R -if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones - rm -vrf R/debuginfod-rpms/fedora31 -fi - -cp -rvp ${abs_srcdir}/debuginfod-tars Z -kill -USR1 $PID1 -# Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -# All rpms need to be in the index, except the dummy permission-000 one -rpms=$(find R -name \*rpm | grep -v nothing | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms -txz=$(find Z -name \*tar.xz | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".tar.xz archive"}' $txz -tb2=$(find Z -name \*tar.bz2 | wc -l) -wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 - -kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs -# Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 5 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -# Expect all source files found in the rpms (they are all called hello.c :) -# We will need to extract all rpms (in their own directory) and could all -# sources referenced in the .debug files. -mkdir extracted -cd extracted -subdir=0; -newrpms=$(find ../R -name \*\.rpm | grep -v nothing) -for i in $newrpms; do - subdir=$[$subdir+1]; - mkdir $subdir; - cd $subdir; - ls -lah ../$i - rpm2cpio ../$i | cpio -ivd; - cd ..; -done -sourcefiles=$(find -name \*\\.debug \ - | env LD_LIBRARY_PATH=$ldpath xargs \ - ${abs_top_builddir}/src/readelf --debug-dump=decodedline \ - | grep mtime: | wc --lines) -cd .. -rm -rf extracted - -wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles - -######################################################################## -# PR27983 ensure no duplicate urls are used in when querying servers for files -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests -env DEBUGINFOD_URLS="http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http://127.0.0.1:$PORT1 http:127.0.0.1:7999" \ - LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -v executable $BUILDID2 > vlog4 2>&1 || true -tempfiles vlog4 -if [ $( grep -c 'duplicate url: http://127.0.0.1:'$PORT1'.*' vlog4 ) -ne 2 ]; then - echo "Duplicated servers remain"; - err -fi -######################################################################## -# Run a bank of queries against the debuginfod-rpms / debuginfod-debs test cases - -archive_test() { - __BUILDID=$1 - __SOURCEPATH=$2 - __SOURCESHA1=$3 - - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - # check that timestamps are plausible - older than the near-present (tmpdir mtime) - test $filename -ot `pwd` - - # run again to assure that fdcache is being enjoyed - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - test $filename -ot `pwd` - - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $__BUILDID` - buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a $filename | grep 'Build ID' | cut -d ' ' -f 7` - test $__BUILDID = $buildid - test $filename -ot `pwd` - - if test "x$__SOURCEPATH" != "x"; then - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` - hash=`cat $filename | sha1sum | awk '{print $1}'` - test $__SOURCESHA1 = $hash - test $filename -ot `pwd` - fi -} - - -# common source file sha1 -SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 -# fedora31 -if [ $zstd = true ]; then - # fedora31 uses zstd compression on rpms, older rpm2cpio/libarchive can't handle it - # and we're not using the fancy -Z '.rpm=(rpm2cpio|zstdcat)<' workaround in this testsuite - archive_test 420e9e3308971f4b817cc5bf83928b41a6909d88 /usr/src/debug/hello3-1.0-2.x86_64/foobar////./../hello.c $SHA - archive_test 87c08d12c78174f1082b7c888b3238219b0eb265 /usr/src/debug/hello3-1.0-2.x86_64///foobar/./..//hello.c $SHA -fi -# fedora30 -archive_test c36708a78618d597dee15d0dc989f093ca5f9120 /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA -archive_test 41a236eb667c362a1c4196018cc4581e09722b1b /usr/src/debug/hello2-1.0-2.x86_64/hello.c $SHA -# rhel7 -archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA -# rhel6 -archive_test bbbf92ebee5228310e398609c23c2d7d53f6e2f9 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test d44d42cbd7d915bc938c81333a21e355a6022fb7 /usr/src/debug/hello-1.0/hello.c $SHA -# arch -archive_test cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb /usr/src/debug/hello.c 7a1334e086b97e5f124003a6cfb3ed792d10cdf4 - -RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir, for a later test - - -######################################################################## - -# Drop some of the artifacts, run a groom cycle; confirm that -# debuginfod has forgotten them, but remembers others - -rm -r R/debuginfod-rpms/rhel6/* -kill -USR2 $PID1 # groom cycle -# 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 -wait_ready $PORT1 'thread_work_total{role="groom"}' 2 -# Expect 4 rpms containing 2 buildids to be deleted by the groom -wait_ready $PORT1 'groomed_total{decision="stale"}' 4 - -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -# this is one of the buildids from the groom-deleted rpms -testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $RPM_BUILDID && false || true -# but this one was not deleted so should be still around -testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID2 - -######################################################################## - -# PR26810: Now rename some files in the R directory, then rescan, so -# there are two copies of the same buildid in the index, one for the -# no-longer-existing file name, and one under the new name. - -# run a groom cycle to force server to drop its fdcache -kill -USR2 $PID1 # groom cycle -wait_ready $PORT1 'thread_work_total{role="groom"}' 3 -# move it around a couple of times to make it likely to hit a nonexistent entry during iteration -mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 6 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2 -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 7 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3 -kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 8 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 - -# retest rhel7 -archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA -archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA - -egrep '(libc.error.*rhel7)|(bc1febfd03ca)|(f0aa15b8aba)' vlog$PORT1 - -######################################################################## -## PR25978 -# Ensure that the fdcache options are working. -grep "prefetch fds" vlog$PORT1 -grep "prefetch mbs" vlog$PORT1 -grep "fdcache fds" vlog$PORT1 -grep "fdcache mbs" vlog$PORT1 -# search the vlog to find what metric counts should be and check the correct metrics -# were incrimented -wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $( grep -c 'interned.*front=1' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="evict"}' $( grep -c 'evicted a=.*' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $( grep -c 'interned.*front=0' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $( grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true ) -######################################################################## - -# Federation mode - -# find another unused port -while true; do - PORT2=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep ":$PORT2" || break -done - -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 -mkdir -p $DEBUGINFOD_CACHE_PATH -# NB: inherits the DEBUGINFOD_URLS to the first server -# NB: run in -L symlink-following mode for the L subdir -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d ${DB}_2 -p $PORT2 -L L D > vlog$PORT2 2>&1 & -PID2=$! -tempfiles vlog$PORT2 -errfiles vlog$PORT2 -tempfiles ${DB}_2 -wait_ready $PORT2 'ready' 1 -wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 -wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT2 'thread_busy{role="scan"}' 0 - -wait_ready $PORT2 'thread_busy{role="http-buildid"}' 0 -wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 - -# have clients contact the new server -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 - -if type bsdtar 2>/dev/null; then - # copy in the deb files - cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D - kill -USR1 $PID2 - wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 - wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 - wait_ready $PORT2 'thread_busy{role="scan"}' 0 - - # All debs need to be in the index - debs=$(find D -name \*.deb | wc -l) - wait_ready $PORT2 'scanned_files_total{source=".deb archive"}' `expr $debs` - ddebs=$(find D -name \*.ddeb | wc -l) - wait_ready $PORT2 'scanned_files_total{source=".ddeb archive"}' `expr $ddebs` - - # ubuntu - archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" -fi - -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# send a request to stress XFF and User-Agent federation relay; -# we'll grep for the two patterns in vlog$PORT1 -curl -s -H 'User-Agent: TESTCURL' -H 'X-Forwarded-For: TESTXFF' $DEBUGINFOD_URLS/buildid/deaddeadbeef00000000/debuginfo -o /dev/null || true - -grep UA:TESTCURL vlog$PORT1 -grep XFF:TESTXFF vlog$PORT1 - - -# confirm that first server can't resolve symlinked info in L/ but second can -BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ - -a L/foo | grep 'Build ID' | cut -d ' ' -f 7` -file L/foo -file -L L/foo -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# test again with scheme free url -export DEBUGINFOD_URLS=127.0.0.1:$PORT1 -rm -rf $DEBUGINFOD_CACHE_PATH -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file -export DEBUGINFOD_URLS=127.0.0.1:$PORT2 -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# test parallel queries in client -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 -mkdir -p $DEBUGINFOD_CACHE_PATH -export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1 - -######################################################################## - -# Fetch some metrics -curl -s http://127.0.0.1:$PORT1/badapi -curl -s http://127.0.0.1:$PORT1/metrics -curl -s http://127.0.0.1:$PORT2/metrics -curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*error' -curl -s http://127.0.0.1:$PORT1/metrics | grep -q 'http_responses_total.*result.*fdcache' -curl -s http://127.0.0.1:$PORT2/metrics | grep -q 'http_responses_total.*result.*upstream' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_duration_milliseconds_sum' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_sum' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'fdcache_' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'traversed_total' -curl -s http://127.0.0.1:$PORT1/metrics | grep 'scanned_bytes_total' - -# And generate a few errors into the second debuginfod's logs, for analysis just below -curl -s http://127.0.0.1:$PORT2/badapi > /dev/null || true -curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true -# NB: this error is used to seed the 404 failure for the survive-404 tests - -# Confirm bad artifact types are rejected without leaving trace -curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true -(curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false - -# DISABLE VALGRIND checking because valgrind might use debuginfod client -# requests itself, causing confusion about who put what in the cache. -# It stays disabled till the end of this test. -unset VALGRIND_CMD - -# Confirm that reused curl connections survive 404 errors. -# The rm's force an uncached fetch -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID - -# Confirm that some debuginfod client pools are being used -curl -s http://127.0.0.1:$PORT2/metrics | grep 'dc_pool_op.*reuse' - -# Trigger a flood of requests against the same archive content file. -# Use a file that hasn't been previously extracted in to make it -# likely that even this test debuginfod will experience concurrency -# and impose some "after-you" delays. -(for i in `seq 100`; do - curl -s http://127.0.0.1:$PORT1/buildid/87c08d12c78174f1082b7c888b3238219b0eb265/executable >/dev/null & - done; - wait) -curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' -# If we could guarantee some minimum number of seconds of CPU time, we -# could assert that the after_you metrics show some nonzero amount of -# waiting. A few hundred ms is typical on this developer's workstation. - - -######################################################################## -# Corrupt the sqlite database and get debuginfod to trip across its errors - -curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' -ls -al $DB -dd if=/dev/zero of=$DB bs=1 count=1 -ls -al $DB -# trigger some random activity that's Sure to get sqlite3 upset -kill -USR1 $PID1 -wait_ready $PORT1 'thread_work_total{role="traverse"}' 9 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -kill -USR2 $PID1 -wait_ready $PORT1 'thread_work_total{role="groom"}' 4 -curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true -curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite' - -######################################################################## - -# Run the tests again without the servers running. The target file should -# be found in the cache. - -kill -INT $PID1 $PID2 -wait $PID1 $PID2 -PID1=0 -PID2=0 -tempfiles .debuginfod_* - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog2 1 - -# check out the debuginfod logs for the new style status lines -# cat vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /buildid/.* 200 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /metrics 200 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /badapi 503 ' vlog$PORT2 -grep -q 'UA:.*XFF:.*GET /buildid/deadbeef.* 404 ' vlog$PORT2 - -######################################################################## - -# Add some files to the cache that do not fit its naming format. -# They should survive cache cleaning. -mkdir $DEBUGINFOD_CACHE_PATH/malformed -touch $DEBUGINFOD_CACHE_PATH/malformed0 -touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1 - -# A valid format for an empty buildid subdirectory -mkdir $DEBUGINFOD_CACHE_PATH/00000000 -touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage - -# Trigger a cache clean and run the tests again. The clients should be unable to -# find the target. -echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s -echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s - -testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 - -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID2 && false || true - -if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \ - || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then - echo "unrelated files did not survive cache cleaning" - err -fi - -if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then - echo "failed to rmdir old cache dir" - err -fi - -# Test debuginfod without a path list; reuse $PORT1 -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F & -PID3=$! -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 -wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 -wait_ready $PORT1 'thread_busy{role="scan"}' 0 -kill -int $PID3 -wait $PID3 -PID3=0 - -######################################################################## -# Test fetching a file using file:// . No debuginfod server needs to be run for -# this test. -local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/source/my/path -mkdir -p ${local_dir} -echo "int main() { return 0; }" > ${local_dir}/main.c - -# first test that is doesn't work, when no DEBUGINFOD_URLS is set -DEBUGINFOD_URLS="" -testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true - -# Now test is with proper DEBUGINFOD_URLS -DEBUGINFOD_URLS="file://${PWD}/mocktree/" -filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` -cmp $filename ${local_dir}/main.c - -######################################################################## -## PR27711 -# Test to ensure that the --include="^$" --exclude=".*" options remove all files from a database backup -while true; do - PORT3=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep ":$PORT3" || break -done -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:$PORT3/" ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT3 -t0 -g0 --regex-groom --include="^$" --exclude=".*" -d $DB.backup > vlog$PORT3 2>&1 & -PID4=$! -wait_ready $PORT3 'ready' 1 -tempfiles vlog$PORT3 -errfiles vlog$PORT3 - -kill -USR2 $PID4 -wait_ready $PORT3 'thread_work_total{role="groom"}' 1 -wait_ready $PORT3 'groom{statistic="archive d/e"}' 0 -wait_ready $PORT3 'groom{statistic="archive sdef"}' 0 -wait_ready $PORT3 'groom{statistic="archive sref"}' 0 -wait_ready $PORT3 'groom{statistic="buildids"}' 0 -wait_ready $PORT3 'groom{statistic="file d/e"}' 0 -wait_ready $PORT3 'groom{statistic="file s"}' 0 -wait_ready $PORT3 'groom{statistic="files scanned (#)"}' 0 -wait_ready $PORT3 'groom{statistic="files scanned (mb)"}' 0 - -kill $PID4 -wait $PID4 -PID4=0 - -######################################################################## -# set up tests for retrying failed queries. -retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 \ - ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/ls || true) 2>&1 >/dev/null \ - | grep -c 'Retry failed query'` -if [ $retry_attempts -ne 10 ]; then - echo "retry mechanism failed." - exit 1; - fi - -######################################################################## - -# Test when debuginfod hitting X-Forwarded-For hops limit. -# This test will start two servers (as a loop) with two different hop limits. - -while true; do - PORT4=`expr '(' $RANDOM % 1000 ')' + 9000` - PORT5=`expr '(' $RANDOM % 1000 ')' + 9000` - ss -atn | fgrep -e ":$PORT4" -e ":$PORT5"|| break -done - -# Make sure the vlogs are cleaned up after the test -# and that they are printed on error. -tempfiles vlog$PORT4 vlog$PORT5 -errfiles vlog$PORT4 vlog$PORT5 - -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT5 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT4 > vlog$PORT4 2>&1 & -PID5=$! - -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT4 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT5 > vlog$PORT5 2>&1 & -PID6=$! - -wait_ready $PORT4 'ready' 1 -wait_ready $PORT5 'ready' 1 - -export DEBUGINFOD_URLS="http://127.0.0.1:$PORT4/" -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true - -# Use a different buildid to avoid using same cache. -export DEBUGINFOD_URLS="http://127.0.0.1:$PORT5/" -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 11234567 || true - -grep "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT4 -grep -v "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT5 | grep "not found" vlog$PORT5 - -kill $PID5 $PID6 -wait $PID5 $PID6 - -PID5=0 -PID6=0 - -exit 0 diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh new file mode 100755 index 00000000..78b3b7fc --- /dev/null +++ b/tests/run-debuginfod-malformed.sh @@ -0,0 +1,110 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9200 +# find an unused port number +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +mkdir F +mkdir -p $DEBUGINFOD_CACHE_PATH + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +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 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## +# Add some files to the cache that do not fit its naming format. +# They should survive cache cleaning. +mkdir $DEBUGINFOD_CACHE_PATH/malformed +touch $DEBUGINFOD_CACHE_PATH/malformed0 +touch $DEBUGINFOD_CACHE_PATH/malformed/malformed1 + +# A valid format for an empty buildid subdirectory +mkdir $DEBUGINFOD_CACHE_PATH/00000000 +touch -d '1970-01-01' $DEBUGINFOD_CACHE_PATH/00000000 # old enough to guarantee nukage + +# Trigger a cache clean and run the tests again. The clients should be unable to +# find the target. +echo 0 > $DEBUGINFOD_CACHE_PATH/cache_clean_interval_s +echo 0 > $DEBUGINFOD_CACHE_PATH/max_unused_age_s + +testrun ${abs_builddir}/debuginfod_build_id_find -e F/p+r%o\$g 1 + +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true + +if [ ! -f $DEBUGINFOD_CACHE_PATH/malformed0 ] \ + || [ ! -f $DEBUGINFOD_CACHE_PATH/malformed/malformed1 ]; then + echo "unrelated files did not survive cache cleaning" + err +fi + +if [ -d $DEBUGINFOD_CACHE_PATH/00000000 ]; then + echo "failed to rmdir old cache dir" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-no-urls.sh b/tests/run-debuginfod-no-urls.sh new file mode 100755 index 00000000..7e3ffef6 --- /dev/null +++ b/tests/run-debuginfod-no-urls.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +######################################################################## +# Test debuginfod without a path list +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9300 +get_ports + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d :memory: -p $PORT1 -L -F & +PID1=$! + +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +kill -int $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-query-retry.sh b/tests/run-debuginfod-query-retry.sh new file mode 100755 index 00000000..3c5542d5 --- /dev/null +++ b/tests/run-debuginfod-query-retry.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +######################################################################## +# set up tests for retrying failed queries. +retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/ls || true) 2>&1 >/dev/null \ + | grep -c 'Retry failed query'` +if [ $retry_attempts -ne 10 ]; then + echo "retry mechanism failed." + exit 1; +fi + +exit 0; diff --git a/tests/run-debuginfod-regex.sh b/tests/run-debuginfod-regex.sh new file mode 100755 index 00000000..32ddf6ff --- /dev/null +++ b/tests/run-debuginfod-regex.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9400 +get_ports +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +wait_ready $PORT1 'ready' 1 + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog + +mv prog F +mv prog.debug F +tempfiles F/prog.debug F/prog + +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +cp ${DB} ${DB}.backup +tempfiles ${DB}.backup + +kill $PID1 +wait $PID1 +PID1=0 + +####################################################################### +## PR27711 +# Test to ensure that the --include="^$" --exclude=".*" options remove all files from a database backup +# +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ + $VERBOSE -p $PORT2 -t0 -g0 --regex-groom --include="^$" --exclude=".*" -d ${DB}.backup > vlog$PORT2 2>&1 & + +#reuse PID1 +PID1=$! +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +# Server must become ready +wait_ready $PORT2 'ready' 1 + +kill -USR2 $PID1 +wait_ready $PORT2 'thread_work_total{role="groom"}' 1 +wait_ready $PORT2 'groom{statistic="archive d/e"}' 0 +wait_ready $PORT2 'groom{statistic="archive sdef"}' 0 +wait_ready $PORT2 'groom{statistic="archive sref"}' 0 +wait_ready $PORT2 'groom{statistic="buildids"}' 0 +wait_ready $PORT2 'groom{statistic="file d/e"}' 0 +wait_ready $PORT2 'groom{statistic="file s"}' 0 +wait_ready $PORT2 'groom{statistic="files scanned (#)"}' 0 +wait_ready $PORT2 'groom{statistic="files scanned (mb)"}' 0 + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0; + diff --git a/tests/run-debuginfod-sizetime.sh b/tests/run-debuginfod-sizetime.sh new file mode 100755 index 00000000..068b548b --- /dev/null +++ b/tests/run-debuginfod-sizetime.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9600 +get_ports + +echo "int main() { return 0; }" > ${PWD}/prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c +testrun ${abs_top_builddir}/src/strip -g -f prog.debug ${PWD}/prog +tempfiles prog prog.debug prog.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a prog | grep 'Build ID' | cut -d ' ' -f 7` + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -t0 -g0 ${PWD} > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +wait_ready $PORT1 'ready' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +## PR27892 +# Ensure DEBUGINFOD_MAXSIZE is functional and sends back the correct http +# code +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_RETRY_LIMIT=1 DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXSIZE=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v executable ${PWD}/prog 2> find-vlog$PORT1 || true +tempfiles find-vlog$PORT1 +errfiles find-vlog$PORT1 +echo "Checking maxsize" +grep "using max size 1B" find-vlog$PORT1 +echo "Checking maxsize" +grep 'serving file '$(realpath ${PWD})'/prog' vlog$PORT1 +echo "Checking maxsize" +grep 'File too large' vlog$PORT1 +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxsize check" + err +fi +# Ensure no file is downloaded for longer than DEBUGINFOD_MAXTIME +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" DEBUGINFOD_MAXTIME=1 \ + ${abs_top_builddir}/debuginfod/debuginfod-find -v debuginfo ${PWD}/prog.debug 2> find-vlog$PORT1 || true +tempfiles find-vlog$PORT1 +grep 'using max time' find-vlog$PORT1 +# Ensure p+r%o\$g.debug is NOT cached +if [ -f ${DEBUGINFOD_CACHE_PATH}/${BUILDID} ]; then + echo "File cached after maxtime check" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0; diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh new file mode 100755 index 00000000..81986198 --- /dev/null +++ b/tests/run-debuginfod-tmp-home.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +DB=${PWD}/.debuginfod_tmp.sqlite +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +mkdir F +mkdir -p $DEBUGINFOD_CACHE_PATH +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9700 +get_ports + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +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 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +# We use -t0 and -g0 here to turn off time-based scanning & grooming. +# For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +######################################################################## + +# Test whether the cache default locations are correct +mkdir tmphome + +# $HOME/.cache should be created. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmphome/.cache" + err +fi + +# $HOME/.cache should be found. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME= DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find executable $BUILDID +if [ ! -f $PWD/tmphome/.cache/debuginfod_client/$BUILDID/executable ]; then + echo "could not find cache in $PWD/tmphome/.cache" + err +fi +# $XDG_CACHE_HOME should take priority over $HOME.cache. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmpxdg/debuginfod_client/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmpxdg/" + err +fi + +# A cache at the old default location ($HOME/.debuginfod_client_cache) should take +# priority over $HOME/.cache, $XDG_CACHE_HOME. +cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true +# ||true is for tolerating errors, such a valgrind or something else +# leaving 000-perm files in there + +# Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. +mkdir tmphome/.debuginfod_client_cache/deadbeef +echo ELF... > tmphome/.debuginfod_client_cache/deadbeef/debuginfo +filename=`testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH= ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo deadbeef` +cmp $filename tmphome/.debuginfod_client_cache/deadbeef/debuginfo + +# $DEBUGINFO_CACHE_PATH should take priority over all else. +testrun env HOME=$PWD/tmphome XDG_CACHE_HOME=$PWD/tmpxdg DEBUGINFOD_CACHE_PATH=$PWD/tmpcache ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID +if [ ! -f $PWD/tmpcache/$BUILDID/debuginfo ]; then + echo "could not find cache in $PWD/tmpcache/" + err +fi +rm -rf ${PWD}/tmphome/ ${PWD}/tmpxdg ${PWD}/tmpcache + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh new file mode 100755 index 00000000..440a5666 --- /dev/null +++ b/tests/run-debuginfod-writable.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +mkdir F +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9800 +get_ports + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ + -t0 -g0 -v F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +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 + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/p+r%o\$g.c +tempfiles p+r%o\$g.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o p+r%o\$g ${PWD}/foobar///./../p+r%o\$g.c +testrun ${abs_top_builddir}/src/strip -g -f p+r%o\$g.debug ${PWD}/p+r%o\$g +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a p+r%o\\$g | grep 'Build ID' | cut -d ' ' -f 7` + +mv p+r%o\$g F +mv p+r%o\$g.debug F +kill -USR1 $PID1 +# Wait till both files are in the index. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +####################################################################### +# Test whether debuginfod-find is able to fetch those files. +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` +cmp $filename F/p+r%o\$g.debug +if [ -w $filename ]; then + echo "cache file writable, boo" + err +fi + +kill $PID1 +wait $PID1 +PID1=0 + +exit 0 diff --git a/tests/run-debuginfod-x-forwarded-for.sh b/tests/run-debuginfod-x-forwarded-for.sh new file mode 100755 index 00000000..5b756b22 --- /dev/null +++ b/tests/run-debuginfod-x-forwarded-for.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9900 +get_ports + +# Test when debuginfod hitting X-Forwarded-For hops limit. +# This test will start two servers (as a loop) with two different hop limits. + +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 0 -p $PORT1 > vlog$PORT1 2>&1 & +PID1=$! + +tempfiles vlog$PORT2 +errfiles vlog$PORT2 +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d :memory: --forwarded-ttl-limit 1 -p $PORT2 > vlog$PORT2 2>&1 & +PID2=$! + +wait_ready $PORT1 'ready' 1 +wait_ready $PORT2 'ready' 1 + +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT1/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true + +# Use a different buildid to avoid using same cache. +export DEBUGINFOD_URLS="http://127.0.0.1:$PORT2/" +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 11234567 || true + +grep "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT1 +grep -v "forwared-ttl-limit reached and will not query the upstream servers" vlog$PORT2 | grep "not found" vlog$PORT2 + +kill $PID1 $PID2 +wait $PID1 $PID2 + +PID1=0 +PID2=0 + +exit 0 -- cgit v1.2.1 From 70f36e32cfd83bdaf8a255613acff9ec2b0c0cde Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 3 Sep 2021 13:10:43 +0200 Subject: tests: Add debuginfod-subr.sh to EXTRA_DIST Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/Makefile.am | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 0529f641..9540f738 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-09-03 Mark Wielaard + + * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh. + 2021-08-28 Mark Wielaard * run-debuginfod-find.sh: Use ":memory:" for the diff --git a/tests/Makefile.am b/tests/Makefile.am index 3c302e72..c586422e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -300,7 +300,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfile21.bz2 testfile21.index.bz2 \ testfile22.bz2 testfile23.bz2 testfile24.bz2 testfile25.bz2 \ testfile26.bz2 testfile27.bz2 \ - coverage.sh test-subr.sh test-wrapper.sh \ + coverage.sh test-subr.sh test-wrapper.sh debuginfod-subr.sh \ run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \ run-readelf-test4.sh run-readelf-twofiles.sh \ run-bug1-test.sh testfile28.bz2 testfile28.rdwr.bz2 \ -- cgit v1.2.1 From 8e9edeab19931f878e16cc1bff6ac286937e997f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Sep 2021 01:40:53 +0200 Subject: tests: Make sure all debuginfod tests use a clean database and cache. Always set DEBUGINFOD_CACHE_PATH to an unique (new) directory and make sure that each debuginfod invocation uses a new sqlite database. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 15 +++++++++++++++ tests/run-debuginfod-000-permission.sh | 3 ++- tests/run-debuginfod-archive-groom.sh | 3 ++- tests/run-debuginfod-archive-test.sh | 5 ++++- tests/run-debuginfod-dlopen.sh | 7 ++++++- tests/run-debuginfod-duplicate-urls.sh | 4 ++++ tests/run-debuginfod-extraction.sh | 6 +++++- tests/run-debuginfod-fd-prefetch-caches.sh | 6 +++++- tests/run-debuginfod-malformed.sh | 3 ++- tests/run-debuginfod-sizetime.sh | 6 +++++- tests/run-debuginfod-tmp-home.sh | 3 ++- tests/run-debuginfod-writable.sh | 6 +++++- 12 files changed, 57 insertions(+), 10 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 9540f738..178697bb 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,18 @@ +2021-09-03 Mark Wielaard + + * run-debuginfod-000-permission.sh: Set DEBUGINFOD_CACHE_PATH + and use an unique sqlite db. + * run-debuginfod-archive-groom.sh: Likewise. + * run-debuginfod-archive-test.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-duplicate-urls.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-fd-prefetch-caches.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-sizetime.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + 2021-09-03 Mark Wielaard * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh. diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh index 28e54385..1e92bdb8 100755 --- a/tests/run-debuginfod-000-permission.sh +++ b/tests/run-debuginfod-000-permission.sh @@ -22,12 +22,13 @@ set -x unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache # This variable is essential and ensures no time-race for claiming ports occurs # set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test base=8000 get_ports -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 0ee056ff..4b991f53 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -26,6 +26,7 @@ unset VALGRIND_CMD base=8100 get_ports DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 @@ -68,7 +69,7 @@ if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 fi -tempfiles vlog3 $DB +tempfiles vlog3 cp -rvp ${abs_srcdir}/debuginfod-tars Z kill -USR1 $PID1 # Wait till both files are in the index and scan/index fully finished diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh index bc500540..1ec57bba 100755 --- a/tests/run-debuginfod-archive-test.sh +++ b/tests/run-debuginfod-archive-test.sh @@ -28,8 +28,11 @@ mkdir R # set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test base=8300 get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -R -p $PORT1 -t0 -g0 -v R > vlog$PORT1 2>&1 & +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -R -p $PORT1 -d $DB -t0 -g0 -v R > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh index 6476612c..0f2d13e2 100755 --- a/tests/run-debuginfod-dlopen.sh +++ b/tests/run-debuginfod-dlopen.sh @@ -27,7 +27,12 @@ mkdir F # set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test base=8500 get_ports -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R $VERBOSE -p $PORT1 \ + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R $VERBOSE -p $PORT1 -d $DB \ -t0 -g0 -v F > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 diff --git a/tests/run-debuginfod-duplicate-urls.sh b/tests/run-debuginfod-duplicate-urls.sh index b76b39a3..50e39cb2 100755 --- a/tests/run-debuginfod-duplicate-urls.sh +++ b/tests/run-debuginfod-duplicate-urls.sh @@ -26,6 +26,10 @@ unset VALGRIND_CMD base=8600 get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ $VERBOSE -F -p $PORT1 -t0 -g0 -d ${DB} F > vlog$PORT1 2>&1 & PID1=$! diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh index 7c534d09..e984f32f 100755 --- a/tests/run-debuginfod-extraction.sh +++ b/tests/run-debuginfod-extraction.sh @@ -28,7 +28,11 @@ mkdir R Z base=8700 get_ports -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v R Z > vlog$PORT1 2>&1 & +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -F -R -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v R Z > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 diff --git a/tests/run-debuginfod-fd-prefetch-caches.sh b/tests/run-debuginfod-fd-prefetch-caches.sh index 08b32923..61fee9e9 100755 --- a/tests/run-debuginfod-fd-prefetch-caches.sh +++ b/tests/run-debuginfod-fd-prefetch-caches.sh @@ -31,8 +31,12 @@ PREFETCH_MBS=100 base=8800 get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + echo $PORT1 -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 \ +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -p $PORT1 -d $DB \ --fdcache-mbs=$FDCACHE_MDS --fdcache-fds=$FDCACHE_FDS --fdcache-prefetch-mbs=$PREFETCH_MBS \ --fdcache-prefetch-fds=$PREFETCH_FDS --fdcache-mintmp 0 -v -F F > vlog$PORT1 2>&1 & PID1=$! diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh index 78b3b7fc..eb504181 100755 --- a/tests/run-debuginfod-malformed.sh +++ b/tests/run-debuginfod-malformed.sh @@ -28,11 +28,12 @@ base=9200 # find an unused port number get_ports DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache mkdir F mkdir -p $DEBUGINFOD_CACHE_PATH -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ -t0 -g0 -v F > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 diff --git a/tests/run-debuginfod-sizetime.sh b/tests/run-debuginfod-sizetime.sh index 068b548b..2cf6f252 100755 --- a/tests/run-debuginfod-sizetime.sh +++ b/tests/run-debuginfod-sizetime.sh @@ -25,6 +25,10 @@ unset VALGRIND_CMD base=9600 get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + echo "int main() { return 0; }" > ${PWD}/prog.c # Create a subdirectory to confound source path names mkdir foobar @@ -34,7 +38,7 @@ tempfiles prog prog.debug prog.c BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ -a prog | grep 'Build ID' | cut -d ' ' -f 7` -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -t0 -g0 ${PWD} > vlog$PORT1 2>&1 & +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB -t0 -g0 ${PWD} > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh index 81986198..25b89be4 100755 --- a/tests/run-debuginfod-tmp-home.sh +++ b/tests/run-debuginfod-tmp-home.sh @@ -23,6 +23,7 @@ set -x unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache mkdir F @@ -32,7 +33,7 @@ mkdir -p $DEBUGINFOD_CACHE_PATH base=9700 get_ports -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ -t0 -g0 -v F > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh index 440a5666..0bc70379 100755 --- a/tests/run-debuginfod-writable.sh +++ b/tests/run-debuginfod-writable.sh @@ -28,7 +28,11 @@ mkdir F base=9800 get_ports -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 \ +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ -t0 -g0 -v F > vlog$PORT1 2>&1 & PID1=$! tempfiles vlog$PORT1 -- cgit v1.2.1 From 44a36e39fc7df2a3e2f9f278f79f65233d774a48 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 6 Sep 2021 21:48:38 +0200 Subject: tests: Set DEBUGINFOD_CACHE_PATH for run-debuginfod-{file,query-retry}.sh --- tests/ChangeLog | 7 +++++++ tests/run-debuginfod-file.sh | 6 +++--- tests/run-debuginfod-query-retry.sh | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 178697bb..c1760877 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2021-09-06 Mark Wielaard + + * run-debuginfod-file.sh: Set DEBUGINFOD_CACHE_PATH. Export + correct DEBUGINFOD_URLS. + * run-debuginfod-query-retry.sh: Add DEBUGINFOD_CACHE_PATH + to env. + 2021-09-03 Mark Wielaard * run-debuginfod-000-permission.sh: Set DEBUGINFOD_CACHE_PATH diff --git a/tests/run-debuginfod-file.sh b/tests/run-debuginfod-file.sh index 22c956dd..341bbc68 100755 --- a/tests/run-debuginfod-file.sh +++ b/tests/run-debuginfod-file.sh @@ -22,7 +22,7 @@ set -x unset VALGRIND_CMD -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache # Test fetching a file using file:// . No debuginfod server needs to be run for # this test. @@ -30,11 +30,11 @@ local_dir=${PWD}/mocktree/buildid/aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd/sourc mkdir -p ${local_dir} echo "int main() { return 0; }" > ${local_dir}/main.c # first test that is doesn't work, when no DEBUGINFOD_URLS is set -DEBUGINFOD_URLS="" +export DEBUGINFOD_URLS="" testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c && false || true # Now test is with proper DEBUGINFOD_URLS -DEBUGINFOD_URLS="file://${PWD}/mocktree/" +export DEBUGINFOD_URLS="file://${PWD}/mocktree/" filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd /my/path/main.c` cmp $filename ${local_dir}/main.c diff --git a/tests/run-debuginfod-query-retry.sh b/tests/run-debuginfod-query-retry.sh index 3c5542d5..c9192510 100755 --- a/tests/run-debuginfod-query-retry.sh +++ b/tests/run-debuginfod-query-retry.sh @@ -24,7 +24,7 @@ unset VALGRIND_CMD ######################################################################## # set up tests for retrying failed queries. -retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 \ +retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache \ ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/ls || true) 2>&1 >/dev/null \ | grep -c 'Retry failed query'` if [ $retry_attempts -ne 10 ]; then -- cgit v1.2.1 From 7880ccb6483e76847cdf1c6c4e45a2180bee820a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 6 Sep 2021 23:04:06 +0200 Subject: tests: Print metrics for both ports on error and fix port selection On error we would only print the metrics of one port (twice) because of a typo. Also PORT1 and PORT2 could be equal because of a logic error. Fix the typo and simplify the port selection by using non-overlapping ranges to select PORT1 and PORT2. --- tests/ChangeLog | 7 +++++++ tests/debuginfod-subr.sh | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index c1760877..14eb4d98 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2021-09-06 Mark Wielaard + + * debuginfod-subr.sh (err): Change ports to port in for loop so both + PORT1 and PORT2 are used. + (get_ports): Simplify port selection by using for 50 for PORT1 and + second 50 for PORT2. + 2021-09-06 Mark Wielaard * run-debuginfod-file.sh: Set DEBUGINFOD_CACHE_PATH. Export diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh index 3222a2b0..7d238436 100755 --- a/tests/debuginfod-subr.sh +++ b/tests/debuginfod-subr.sh @@ -39,7 +39,7 @@ trap cleanup 0 1 2 3 5 9 15 errfiles_list= err() { echo ERROR REPORTS - for ports in $PORT1 $PORT2 + for port in $PORT1 $PORT2 do echo ERROR REPORT $port metrics curl -s http://127.0.0.1:$port/metrics @@ -129,13 +129,13 @@ archive_test() { get_ports() { while true; do - PORT1=`expr '(' $RANDOM % 100 ')' + $base` + PORT1=`expr '(' $RANDOM % 50 ')' + $base` ss -atn | fgrep ":$PORT1" || break done # Some tests will use two servers, so assign the second var while true; do - PORT2=`expr '(' $RANDOM % 100 ')' + $base` - ss -atn | fgrep ":$PORT2" && $PORT1 -ne $PORT2 || break + PORT2=`expr '(' $RANDOM % 50 ')' + $base + 50` + ss -atn | fgrep ":$PORT2" || break done } -- cgit v1.2.1 From f0c8a9a9e4b85dbe613a08768e0b82cc1381407e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 7 Sep 2021 00:31:00 +0200 Subject: tests: Only export DEBUGINFOD_URLS when necessary A couple of test set DEBUGINFOD_URLS before starting a debuginfd server causing the server to query itself or a nonexisting debuginfod server as delegate. In most cases it should be set after, except for the testcase that explicitly checks for errors when using an invalid URL. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 10 ++++++++++ tests/run-debuginfod-archive-groom.sh | 3 ++- tests/run-debuginfod-archive-rename.sh | 3 ++- tests/run-debuginfod-federation-link.sh | 1 - tests/run-debuginfod-federation-metrics.sh | 2 +- tests/run-debuginfod-federation-sqlite.sh | 1 - 6 files changed, 15 insertions(+), 5 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 14eb4d98..436a1c45 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,13 @@ +2021-09-06 Mark Wielaard + + * run-debuginfod-archive-groom.sh: Set DEBUGINFOD_URLS after starting + debuginfod server. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-federation-link.sh: Don't set DEBUGINFOD_URLS. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Add comment why invalid + DEBUGINFOD_URLS is set. + 2021-09-06 Mark Wielaard * debuginfod-subr.sh (err): Change ports to port in for loop so both diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 4b991f53..1e616448 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -29,7 +29,6 @@ DB=${PWD}/.debuginfod_tmp.sqlite tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 -export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 # Clean old dirictories mkdir R ${PWD}/F @@ -112,6 +111,8 @@ rm -rf extracted wait_ready $PORT1 'found_sourcerefs_total{source=".rpm archive"}' $sourcefiles +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 + # common source file sha1 SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 # fedora31 diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh index 38697eee..7ad4786e 100755 --- a/tests/run-debuginfod-archive-rename.sh +++ b/tests/run-debuginfod-archive-rename.sh @@ -28,7 +28,6 @@ get_ports DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 -export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 tempfiles $DEBUGINFOD_CACHE_PATH $DB # Clean old dirictories mkdir R ${PWD}/F @@ -84,6 +83,8 @@ wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 + # retest rhel7 archive_test bc1febfd03ca05e030f0d205f7659db29f8a4b30 /usr/src/debug/hello-1.0/hello.c $SHA archive_test f0aa15b8aba4f3c28cac3c2a73801fefa644a9f2 /usr/src/debug/hello-1.0/hello.c $SHA diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index ae5d4381..42b8f101 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -25,7 +25,6 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 -export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 tempfiles $DB # Clean old dirictories diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh index 9998a04a..2e7550a6 100755 --- a/tests/run-debuginfod-federation-metrics.sh +++ b/tests/run-debuginfod-federation-metrics.sh @@ -25,7 +25,7 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 -export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid +export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid, will trigger error_count metric tempfiles $DB # Clean old dirictories mkdir D L F diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index d10a3385..a323b98e 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -25,7 +25,6 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache export DEBUGINFOD_TIMEOUT=10 -export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid tempfiles $DB # Clean old dirictories -- cgit v1.2.1 From dbd4c8766ea80cb0b6294a6755a556017215eb99 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 7 Sep 2021 01:50:51 +0200 Subject: tests: Make sure to wait for initial scan and groom cycle At startup the debuginfod server does a scan and groom cycle. Make sure to wait for that before triggering a new one with SIGUSR1 or SIGURST2. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 17 +++++++++++++++++ tests/run-debuginfod-archive-groom.sh | 13 +++++++++---- tests/run-debuginfod-archive-rename.sh | 12 ++++++++---- tests/run-debuginfod-archive-test.sh | 4 +++- tests/run-debuginfod-artifact-running.sh | 8 +++++--- tests/run-debuginfod-dlopen.sh | 6 +++++- tests/run-debuginfod-extraction.sh | 6 ++++-- tests/run-debuginfod-federation-link.sh | 9 +++++++-- tests/run-debuginfod-federation-metrics.sh | 2 +- tests/run-debuginfod-federation-sqlite.sh | 10 +++++++--- tests/run-debuginfod-malformed.sh | 5 ++++- tests/run-debuginfod-regex.sh | 7 +++++-- tests/run-debuginfod-tmp-home.sh | 5 ++++- tests/run-debuginfod-writable.sh | 5 ++++- 14 files changed, 83 insertions(+), 26 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 436a1c45..61080c52 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,20 @@ +2021-09-06 Mark Wielaard + + * run-debuginfod-archive-groom.sh: Wait for initial scan and groom + cycle. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-archive-test.sh: Wait for initial scan cycle. + * run-debuginfod-artifact-running.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-regex.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + 2021-09-06 Mark Wielaard * run-debuginfod-archive-groom.sh: Set DEBUGINFOD_URLS after starting diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 1e616448..1e7bd67a 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -57,9 +57,12 @@ cp -rvp ${abs_srcdir}/debuginfod-rpms R if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 fi + +# wait till the initial scan is done before triggering a new one +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Now there should be 1 files in the index -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -72,7 +75,7 @@ tempfiles vlog3 cp -rvp ${abs_srcdir}/debuginfod-tars Z kill -USR1 $PID1 # Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 ######################################################################## @@ -83,7 +86,7 @@ txz=$(find Z -name \*tar.xz | wc -l) kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs # Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -136,9 +139,11 @@ RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir # Drop some of the artifacts, run a groom cycle; confirm that # debuginfod has forgotten them, but remembers others rm -r R/debuginfod-rpms/rhel6/* + +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 kill -USR2 $PID1 # groom cycle ## 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 -wait_ready $PORT1 'thread_work_total{role="groom"}' 1 +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 # Expect 4 rpms containing 2 buildids to be deleted by the groom wait_ready $PORT1 'groomed_total{decision="stale"}' 4 diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh index 7ad4786e..4fc1b441 100755 --- a/tests/run-debuginfod-archive-rename.sh +++ b/tests/run-debuginfod-archive-rename.sh @@ -49,9 +49,11 @@ if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 fi +# Make sure the initial scan is done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Now there should be 1 files in the index -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -63,23 +65,25 @@ SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 # there are two copies of the same buildid in the index, one for the # no-longer-existing file name, and one under the new name. +# Make sure the initial groom cycle has been done +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 # run a groom cycle to force server to drop its fdcache kill -USR2 $PID1 # groom cycle wait_ready $PORT1 'thread_work_total{role="groom"}' 2 # move it around a couple of times to make it likely to hit a nonexistent entry during iteration mv R/debuginfod-rpms/rhel7 R/debuginfod-rpms/rhel7renamed kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 mv R/debuginfod-rpms/rhel7renamed R/debuginfod-rpms/rhel7renamed2 kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 mv R/debuginfod-rpms/rhel7renamed2 R/debuginfod-rpms/rhel7renamed3 kill -USR1 $PID1 # scan cycle -wait_ready $PORT1 'thread_work_total{role="traverse"}' 4 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 5 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh index 1ec57bba..9f7454bc 100755 --- a/tests/run-debuginfod-archive-test.sh +++ b/tests/run-debuginfod-archive-test.sh @@ -38,6 +38,8 @@ tempfiles vlog$PORT1 errfiles vlog$PORT1 # Server must become ready wait_ready $PORT1 'ready' 1 +# And make sure first scan is done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 # Be patient when run on a busy machine things might take a bit. export DEBUGINFOD_TIMEOUT=10 @@ -55,7 +57,7 @@ fi kill -USR1 $PID1 # Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh index e96cb966..4eae0200 100755 --- a/tests/run-debuginfod-artifact-running.sh +++ b/tests/run-debuginfod-artifact-running.sh @@ -51,9 +51,11 @@ export DEBUGINFOD_TIMEOUT=10 # Server must become ready wait_ready $PORT1 'ready' 1 -kill -USR1 $PID1 - +# And the initial scan should have been done wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + +kill -USR1 $PID1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -76,7 +78,7 @@ tempfiles F/prog2 F/prog2.debug kill -USR1 $PID1 # Now there should be 3 files in the index -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh index 0f2d13e2..5f33394a 100755 --- a/tests/run-debuginfod-dlopen.sh +++ b/tests/run-debuginfod-dlopen.sh @@ -70,9 +70,13 @@ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ mv p+r%o\$g F mv p+r%o\$g.debug F + +# Make sure the initial scan has finished. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + kill -USR1 $PID1 # Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh index e984f32f..4750f184 100755 --- a/tests/run-debuginfod-extraction.sh +++ b/tests/run-debuginfod-extraction.sh @@ -54,9 +54,11 @@ fi cp -rvp ${abs_srcdir}/debuginfod-tars Z +# Make sure the initial scan has finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -71,7 +73,7 @@ wait_ready $PORT1 'scanned_files_total{source=".tar.bz2 archive"}' $tb2 kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs # Wait till both files are in the index and scan/index fully finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 3 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index 42b8f101..1aef7174 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -62,6 +62,9 @@ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ mv prog F mv prog.debug F + +# Make sure initial scan was done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Wait till both files are in the index. wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 @@ -83,9 +86,11 @@ tempfiles ${DB}_2 wait_ready $PORT2 'ready' 1 +# Make sure initial scan was done +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID2 # Wait till both files are in the index. -wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 wait_ready $PORT2 'thread_busy{role="scan"}' 0 @@ -99,7 +104,7 @@ if type bsdtar 2>/dev/null; then # copy in the deb files cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D kill -USR1 $PID2 - wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 3 wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 wait_ready $PORT2 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh index 2e7550a6..0cc4c2f7 100755 --- a/tests/run-debuginfod-federation-metrics.sh +++ b/tests/run-debuginfod-federation-metrics.sh @@ -45,7 +45,7 @@ errfiles vlog$PORT1 wait_ready $PORT1 'ready' 1 -kill -USR1 $PID1 +# Wait till initial scan is done wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index a323b98e..5a18b4bb 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -59,7 +59,7 @@ errfiles vlog$PORT1 wait_ready $PORT1 'ready' 1 -kill -USR1 $PID1 +# Wait till initial scan is done wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -73,13 +73,17 @@ tempfiles vlog$PORT2 errfiles vlog$PORT2 tempfiles ${DB}_2 wait_ready $PORT2 'ready' 1 +# Wait till initial scan is done +wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 +# And initial groom cycle +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2 if type bsdtar 2>/dev/null; then # copy in the deb files cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D kill -USR1 $PID2 - wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 + wait_ready $PORT2 'thread_work_total{role="traverse"}' 2 wait_ready $PORT2 'thread_work_pending{role="scan"}' 0 wait_ready $PORT2 'thread_busy{role="scan"}' 0 @@ -177,7 +181,7 @@ wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 kill -USR2 $PID1 -wait_ready $PORT1 'thread_work_total{role="groom"}' 1 +wait_ready $PORT1 'thread_work_total{role="groom"}' 2 curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite' # Run the tests again without the servers running. The target file should diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh index eb504181..3bc9e799 100755 --- a/tests/run-debuginfod-malformed.sh +++ b/tests/run-debuginfod-malformed.sh @@ -40,6 +40,9 @@ tempfiles vlog$PORT1 errfiles vlog$PORT1 # Server must become ready wait_ready $PORT1 'ready' 1 +# And an initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 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. @@ -70,7 +73,7 @@ mv p+r%o\$g F mv p+r%o\$g.debug F kill -USR1 $PID1 # Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-regex.sh b/tests/run-debuginfod-regex.sh index 32ddf6ff..6837ea86 100755 --- a/tests/run-debuginfod-regex.sh +++ b/tests/run-debuginfod-regex.sh @@ -37,7 +37,10 @@ env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod \ PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 + +# Wait till the server is ready and an initial scan has been done wait_ready $PORT1 'ready' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 # Compile a simple program, strip its debuginfo and save the build-id. # Also move the debuginfo into another directory so that elfutils @@ -55,7 +58,7 @@ tempfiles F/prog.debug F/prog kill -USR1 $PID1 # Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 cp ${DB} ${DB}.backup @@ -79,7 +82,7 @@ errfiles vlog$PORT2 # Server must become ready wait_ready $PORT2 'ready' 1 -kill -USR2 $PID1 +# Wait till the initial groom cycle has been done wait_ready $PORT2 'thread_work_total{role="groom"}' 1 wait_ready $PORT2 'groom{statistic="archive d/e"}' 0 wait_ready $PORT2 'groom{statistic="archive sdef"}' 0 diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh index 25b89be4..dc9accb0 100755 --- a/tests/run-debuginfod-tmp-home.sh +++ b/tests/run-debuginfod-tmp-home.sh @@ -40,6 +40,9 @@ tempfiles vlog$PORT1 errfiles vlog$PORT1 # Server must become ready wait_ready $PORT1 'ready' 1 +# And initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 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. @@ -71,7 +74,7 @@ mv p+r%o\$g F mv p+r%o\$g.debug F kill -USR1 $PID1 # Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh index 0bc70379..69ececb3 100755 --- a/tests/run-debuginfod-writable.sh +++ b/tests/run-debuginfod-writable.sh @@ -39,6 +39,9 @@ tempfiles vlog$PORT1 errfiles vlog$PORT1 # Server must become ready wait_ready $PORT1 'ready' 1 +# And initial scan should be done +wait_ready $PORT1 'thread_work_total{role="traverse"}' 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. @@ -67,7 +70,7 @@ mv p+r%o\$g F mv p+r%o\$g.debug F kill -USR1 $PID1 # Wait till both files are in the index. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 -- cgit v1.2.1 From 5ce85e424907d82797f5efe59a8416ec537ebd9e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 7 Sep 2021 23:56:42 +0200 Subject: tests: Make sure to wait for initial scan and groom cycle earlier At startup the debuginfod server does a scan and groom cycle. Make sure to wait for that before making any changes to the scan dirs. And not just right before triggering a new one with SIGUSR1 for scan or SIGURS2 for groom. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 12 ++++++++++++ tests/run-debuginfod-archive-groom.sh | 10 +++++++--- tests/run-debuginfod-archive-rename.sh | 11 +++++++---- tests/run-debuginfod-artifact-running.sh | 12 +++++++----- tests/run-debuginfod-dlopen.sh | 7 ++++--- tests/run-debuginfod-extraction.sh | 6 ++++-- tests/run-debuginfod-federation-link.sh | 3 +-- 7 files changed, 42 insertions(+), 19 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 61080c52..42989d19 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,15 @@ +2021-09-07 Mark Wielaard + + * run-debuginfod-archive-groom.sh: Wait for initial scan and groom + cycle before making any changes to the scan dirs. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-artifact-running.sh: Wait for initial scan cycle + before making any changes to the scan dirs. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Don't wait twice for the initial + scan. + 2021-09-06 Mark Wielaard * run-debuginfod-archive-groom.sh: Wait for initial scan and groom diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 1e7bd67a..7813ee28 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -46,6 +46,13 @@ ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan ps -q $PID1 -e -L -o '%p %c %a' | grep traverse +# wait till the initial scan is done before triggering a new one +# and before dropping new file into the scan dirs +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# Same for the initial groom cycle, we don't want it to be done +# half way initializing the file setup +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 + # Build a non-stripped binary echo "int main() { return 0; }" > ${PWD}/F/prog.c gcc -Wl,--build-id -g -o ${PWD}/F/prog ${PWD}/F/prog.c @@ -58,8 +65,6 @@ if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 fi -# wait till the initial scan is done before triggering a new one -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Now there should be 1 files in the index wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 @@ -140,7 +145,6 @@ RPM_BUILDID=d44d42cbd7d915bc938c81333a21e355a6022fb7 # in rhel6/ subdir # debuginfod has forgotten them, but remembers others rm -r R/debuginfod-rpms/rhel6/* -wait_ready $PORT1 'thread_work_total{role="groom"}' 1 kill -USR2 $PID1 # groom cycle ## 1 groom cycle already took place at/soon-after startup, so -USR2 makes 2 wait_ready $PORT1 'thread_work_total{role="groom"}' 2 diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh index 4fc1b441..5369949b 100755 --- a/tests/run-debuginfod-archive-rename.sh +++ b/tests/run-debuginfod-archive-rename.sh @@ -44,13 +44,18 @@ ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan ps -q $PID1 -e -L -o '%p %c %a' | grep traverse +# wait till the initial scan is done before triggering a new one +# and before dropping new file into the scan dirs +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# Same for the initial groom cycle, we don't want it to be done +# half way initializing the file setup +wait_ready $PORT1 'thread_work_total{role="groom"}' 1 + cp -rvp ${abs_srcdir}/debuginfod-rpms R if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 fi -# Make sure the initial scan is done -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Now there should be 1 files in the index wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 @@ -65,8 +70,6 @@ SHA=f4a1a8062be998ae93b8f1cd744a398c6de6dbb1 # there are two copies of the same buildid in the index, one for the # no-longer-existing file name, and one under the new name. -# Make sure the initial groom cycle has been done -wait_ready $PORT1 'thread_work_total{role="groom"}' 1 # run a groom cycle to force server to drop its fdcache kill -USR2 $PID1 # groom cycle wait_ready $PORT1 'thread_work_total{role="groom"}' 2 diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh index 4eae0200..51fa9c0a 100755 --- a/tests/run-debuginfod-artifact-running.sh +++ b/tests/run-debuginfod-artifact-running.sh @@ -42,6 +42,13 @@ env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d PID1=$! tempfiles vlog$PORT1 errfiles vlog$PORT1 + +# Server must become ready +wait_ready $PORT1 'ready' 1 +# And the initial scan should have been done before moving +# files under the scan dirs. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + mv prog F mv prog.debug F tempfiles prog/F @@ -49,11 +56,6 @@ tempfiles prog/F # Be patient when run on a busy machine things might take a bit. export DEBUGINFOD_TIMEOUT=10 -# Server must become ready -wait_ready $PORT1 'ready' 1 -# And the initial scan should have been done -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 - kill -USR1 $PID1 wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh index 5f33394a..39ee5190 100755 --- a/tests/run-debuginfod-dlopen.sh +++ b/tests/run-debuginfod-dlopen.sh @@ -51,6 +51,10 @@ ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan ps -q $PID1 -e -L -o '%p %c %a' | grep traverse +# Make sure the initial scan has finished. +# Before moving files under the scan dirs. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + # We use -t0 and -g0 here to turn off time-based scanning & grooming. # For testing purposes, we just sic SIGUSR1 / SIGUSR2 at the process. @@ -71,9 +75,6 @@ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ mv p+r%o\$g F mv p+r%o\$g.debug F -# Make sure the initial scan has finished. -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 - kill -USR1 $PID1 # Wait till both files are in the index. wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh index 4750f184..06f60e78 100755 --- a/tests/run-debuginfod-extraction.sh +++ b/tests/run-debuginfod-extraction.sh @@ -47,6 +47,10 @@ ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan ps -q $PID1 -e -L -o '%p %c %a' | grep traverse +# Make sure the initial scan has finished before copying the new files in +# We might remove some, which we don't want to be accidentially scanned. +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + cp -rvp ${abs_srcdir}/debuginfod-rpms R if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones rm -vrf R/debuginfod-rpms/fedora31 @@ -54,8 +58,6 @@ fi cp -rvp ${abs_srcdir}/debuginfod-tars Z -# Make sure the initial scan has finished -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Wait till both files are in the index and scan/index fully finished wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index 1aef7174..050bcbcf 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -43,6 +43,7 @@ tempfiles vlog$PORT1 errfiles vlog$PORT1 wait_ready $PORT1 'ready' 1 +# Make sure initial scan was done wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 wait_ready $PORT1 'thread_busy{role="scan"}' 0 @@ -63,8 +64,6 @@ BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ mv prog F mv prog.debug F -# Make sure initial scan was done -wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 kill -USR1 $PID1 # Wait till both files are in the index. wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 -- cgit v1.2.1 From 02b05e183998943dd5a19ba783b8793e2ab9ab44 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Sun, 5 Sep 2021 08:00:00 +0000 Subject: src: add -Wno-error=stack-usage= to AM_LDFLAGS While -Wstack-usage= is already excluded from AM_CFLAGS for various tools in src using *_no_Wstack_usage variables, this obviously does not help when LTO is enabled, so add -Wno-error=stack-usage= to AM_LDFLAGS for linking tools in src. References: https://sourceware.org/bugzilla/show_bug.cgi?id=24498 Signed-off-by: Dmitry V. Levin --- config/ChangeLog | 4 ++++ config/eu.am | 2 ++ src/ChangeLog | 4 ++++ src/Makefile.am | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/config/ChangeLog b/config/ChangeLog index 70a1e923..b2c0af8a 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2021-09-05 Dmitry V. Levin + + * eu.am (STACK_USAGE_NO_ERROR): New variable. + 2021-07-06 Alice Zhang * debuginfod.sysconfig: Introduce default retry limit. diff --git a/config/eu.am b/config/eu.am index 2c3e4571..58cd3c4f 100644 --- a/config/eu.am +++ b/config/eu.am @@ -39,8 +39,10 @@ ARFLAGS = cr # Warn about stack usage of more than 256K = 262144 bytes. if ADD_STACK_USAGE_WARNING STACK_USAGE_WARNING=-Wstack-usage=262144 +STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= else STACK_USAGE_WARNING= +STACK_USAGE_NO_ERROR= endif if SANE_LOGICAL_OP_WARNING diff --git a/src/ChangeLog b/src/ChangeLog index b729eaa4..e83e0a5e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-09-05 Dmitry V. Levin + + * Makefile.am (AM_LDFLAGS): Add $(STACK_USAGE_NO_ERROR). + 2021-08-20 Saleem Abdulrasool * elfclassify.c: Remove error.h include. diff --git a/src/Makefile.am b/src/Makefile.am index 88d0ac8f..86d5bcf8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -23,7 +23,7 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf -I$(srcdir)/../libebl \ -I$(srcdir)/../libdw -I$(srcdir)/../libdwelf \ -I$(srcdir)/../libdwfl -I$(srcdir)/../libasm -AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw +AM_LDFLAGS = -Wl,-rpath-link,../libelf:../libdw $(STACK_USAGE_NO_ERROR) bin_PROGRAMS = readelf nm size strip elflint findtextrel addr2line \ elfcmp objdump ranlib strings ar unstrip stack elfcompress \ -- cgit v1.2.1 From e094270980f1ca8af86a64cee0dbb6f1df670619 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Mon, 6 Sep 2021 08:00:00 +0000 Subject: Remove redundant casts of memory allocating functions returning void * Return values of functions returning "void *", e.g. calloc, malloc, realloc, xcalloc, xmalloc, and xrealloc, do not need explicit casts. Signed-off-by: Dmitry V. Levin --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod-client.c | 2 +- lib/ChangeLog | 6 ++++++ lib/dynamicsizehash.c | 2 +- lib/dynamicsizehash_concurrent.c | 2 +- libasm/ChangeLog | 14 ++++++++++++++ libasm/asm_align.c | 5 ++--- libasm/asm_begin.c | 3 +-- libasm/asm_fill.c | 3 +-- libasm/asm_newabssym.c | 2 +- libasm/asm_newcomsym.c | 2 +- libasm/asm_newscn.c | 2 +- libasm/asm_newscngrp.c | 2 +- libasm/asm_newsubscn.c | 2 +- libasm/asm_newsym.c | 2 +- libasm/disasm_begin.c | 2 +- libdw/ChangeLog | 9 +++++++++ libdw/dwarf_begin_elf.c | 8 ++++---- libdw/dwarf_getpubnames.c | 5 ++--- libdw/dwarf_getsrclines.c | 2 +- libdwelf/ChangeLog | 6 ++++++ libdwelf/dwelf_strtab.c | 5 ++--- libdwfl/ChangeLog | 5 +++++ libdwfl/linux-pid-attach.c | 2 +- libebl/ChangeLog | 4 ++++ libebl/eblopenbackend.c | 2 +- libelf/ChangeLog | 14 ++++++++++++++ libelf/common.h | 2 +- libelf/elf32_updatefile.c | 4 ++-- libelf/elf_begin.c | 2 +- libelf/elf_getarsym.c | 5 ++--- libelf/elf_getdata.c | 9 ++++----- libelf/elf_getscn.c | 4 ++-- libelf/elf_newdata.c | 2 +- libelf/elf_newscn.c | 10 +++++----- libelf/elf_readall.c | 2 +- src/ChangeLog | 13 +++++++++++++ src/elflint.c | 2 +- src/findtextrel.c | 7 ++----- src/nm.c | 7 +++---- src/readelf.c | 14 ++++++-------- src/strip.c | 9 ++++----- tests/ChangeLog | 4 ++++ tests/elfcopy.c | 2 +- 44 files changed, 141 insertions(+), 75 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index c5459823..7e221f54 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-09-06 Dmitry V. Levin + + * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return + value. + 2021-08-28 Mark Wielaard * debuginfod.cxx (parse_opt): Turn the -d arg ":memory:" into diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 7d4b220f..d41723ce 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1359,7 +1359,7 @@ debuginfod_begin (void) { debuginfod_client *client; size_t size = sizeof (struct debuginfod_client); - client = (debuginfod_client *) calloc (1, size); + client = calloc (1, size); if (client != NULL) { diff --git a/lib/ChangeLog b/lib/ChangeLog index 60d32082..563b0b6a 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,9 @@ +2021-09-06 Dmitry V. Levin + + * dynamicsizehash.c (INIT(NAME)): Remove cast of calloc return value. + * dynamicsizehash_concurrent.c (INIT(NAME)): Remove cast of malloc + return value. + 2021-08-23 Saleem Abdulrasool * system.h: Remove inline definition for error and error_message_count diff --git a/lib/dynamicsizehash.c b/lib/dynamicsizehash.c index f9406eba..76c86dad 100644 --- a/lib/dynamicsizehash.c +++ b/lib/dynamicsizehash.c @@ -184,7 +184,7 @@ INIT(NAME) (NAME *htab, size_t init_size) #ifdef ITERATE htab->first = NULL; #endif - htab->table = (void *) calloc ((init_size + 1), sizeof (htab->table[0])); + htab->table = calloc ((init_size + 1), sizeof (htab->table[0])); if (htab->table == NULL) return -1; diff --git a/lib/dynamicsizehash_concurrent.c b/lib/dynamicsizehash_concurrent.c index 2d53bec6..4e2e2476 100644 --- a/lib/dynamicsizehash_concurrent.c +++ b/lib/dynamicsizehash_concurrent.c @@ -355,7 +355,7 @@ INIT(NAME) (NAME *htab, size_t init_size) pthread_rwlock_init(&htab->resize_rwl, NULL); - htab->table = (void *) malloc ((init_size + 1) * sizeof (htab->table[0])); + htab->table = malloc ((init_size + 1) * sizeof (htab->table[0])); if (htab->table == NULL) return -1; diff --git a/libasm/ChangeLog b/libasm/ChangeLog index 85e723e6..c65fd21b 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,3 +1,17 @@ +2021-09-06 Dmitry V. Levin + + * asm_align.c (__libasm_ensure_section_space): Remove casts of calloc + return values. + * asm_begin.c (asm_begin): Remove cast of malloc return value. + * asm_fill.c (asm_fill): Likewise. + * asm_newabssym.c (asm_newabssym): Likewise. + * asm_newcomsym.c (asm_newcomsym): Likewise. + * asm_newscn.c (asm_newscn): Likewise. + * asm_newscngrp.c (asm_newscngrp): Likewise. + * asm_newsubscn.c (asm_newsubscn): Likewise. + * asm_newsym.c (asm_newsym): Likewise. + * disasm_begin.c (disasm_begin): Likewise. + 2021-04-19 Martin Liska * libasmP.h (asm_emit_symbol_p): Use startswith. diff --git a/libasm/asm_align.c b/libasm/asm_align.c index c8c671b2..3a976756 100644 --- a/libasm/asm_align.c +++ b/libasm/asm_align.c @@ -143,8 +143,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len) /* This is the first block. */ size = MAX (2 * len, 960); - asmscn->content = (struct AsmData *) calloc (1, sizeof (struct AsmData) - + size); + asmscn->content = calloc (1, sizeof (struct AsmData) + size); if (asmscn->content == NULL) return -1; @@ -160,7 +159,7 @@ __libasm_ensure_section_space (AsmScn_t *asmscn, size_t len) size = MAX (2 *len, MIN (32768, 2 * asmscn->offset)); - newp = (struct AsmData *) calloc (1, sizeof (struct AsmData) + size); + newp = calloc (1, sizeof (struct AsmData) + size); if (newp == NULL) return -1; diff --git a/libasm/asm_begin.c b/libasm/asm_begin.c index 1df2d4ea..a190202c 100644 --- a/libasm/asm_begin.c +++ b/libasm/asm_begin.c @@ -138,8 +138,7 @@ asm_begin (const char *fname, Ebl *ebl, bool textp) right away. Instead we create a temporary file in the same directory which, if everything goes alright, will replace a possibly existing file with the given name. */ - AsmCtx_t *result - = (AsmCtx_t *) malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9); + AsmCtx_t *result = malloc (sizeof (AsmCtx_t) + 2 * fname_len + 9); if (result == NULL) return NULL; diff --git a/libasm/asm_fill.c b/libasm/asm_fill.c index 62d9d732..783555ee 100644 --- a/libasm/asm_fill.c +++ b/libasm/asm_fill.c @@ -54,8 +54,7 @@ asm_fill (AsmScn_t *asmscn, void *bytes, size_t len) else { /* Allocate appropriate memory. */ - pattern = (struct FillPattern *) malloc (sizeof (struct FillPattern) - + len); + pattern = malloc (sizeof (struct FillPattern) + len); if (pattern == NULL) return -1; diff --git a/libasm/asm_newabssym.c b/libasm/asm_newabssym.c index 34fef3e3..728d6043 100644 --- a/libasm/asm_newabssym.c +++ b/libasm/asm_newabssym.c @@ -71,7 +71,7 @@ asm_newabssym (AsmCtx_t *ctx, const char *name, GElf_Xword size, rwlock_wrlock (ctx->lock); - result = (AsmSym_t *) malloc (sizeof (AsmSym_t)); + result = malloc (sizeof (AsmSym_t)); if (result == NULL) return NULL; diff --git a/libasm/asm_newcomsym.c b/libasm/asm_newcomsym.c index ee3b6966..750a1380 100644 --- a/libasm/asm_newcomsym.c +++ b/libasm/asm_newcomsym.c @@ -71,7 +71,7 @@ asm_newcomsym (AsmCtx_t *ctx, const char *name, GElf_Xword size, rwlock_wrlock (ctx->lock); - result = (AsmSym_t *) malloc (sizeof (AsmSym_t)); + result = malloc (sizeof (AsmSym_t)); if (result == NULL) return NULL; diff --git a/libasm/asm_newscn.c b/libasm/asm_newscn.c index 7cdf484f..1150015f 100644 --- a/libasm/asm_newscn.c +++ b/libasm/asm_newscn.c @@ -181,7 +181,7 @@ asm_newscn (AsmCtx_t *ctx, const char *scnname, GElf_Word type, rwlock_wrlock (ctx->lock); /* This is a new section. */ - result = (AsmScn_t *) malloc (sizeof (AsmScn_t) + scnname_len); + result = malloc (sizeof (AsmScn_t) + scnname_len); if (result != NULL) { /* Add the name. */ diff --git a/libasm/asm_newscngrp.c b/libasm/asm_newscngrp.c index 80757a9a..0ca87fba 100644 --- a/libasm/asm_newscngrp.c +++ b/libasm/asm_newscngrp.c @@ -57,7 +57,7 @@ asm_newscngrp (AsmCtx_t *ctx, const char *grpname, AsmSym_t *signature, return NULL; } - result = (AsmScnGrp_t *) malloc (sizeof (AsmScnGrp_t) + grpname_len); + result = malloc (sizeof (AsmScnGrp_t) + grpname_len); if (result == NULL) return NULL; diff --git a/libasm/asm_newsubscn.c b/libasm/asm_newsubscn.c index 906240ac..2f2ba78e 100644 --- a/libasm/asm_newsubscn.c +++ b/libasm/asm_newsubscn.c @@ -62,7 +62,7 @@ asm_newsubscn (AsmScn_t *asmscn, unsigned int nr) runp = runp->subnext; } - newp = (AsmScn_t *) malloc (sizeof (AsmScn_t)); + newp = malloc (sizeof (AsmScn_t)); if (newp == NULL) return NULL; diff --git a/libasm/asm_newsym.c b/libasm/asm_newsym.c index 53891668..a89ee129 100644 --- a/libasm/asm_newsym.c +++ b/libasm/asm_newsym.c @@ -73,7 +73,7 @@ asm_newsym (AsmScn_t *asmscn, const char *name, GElf_Xword size, size_t name_len = strlen (name) + 1; - result = (AsmSym_t *) malloc (sizeof (AsmSym_t) + name_len); + result = malloc (sizeof (AsmSym_t) + name_len); if (result == NULL) return NULL; diff --git a/libasm/disasm_begin.c b/libasm/disasm_begin.c index d00852b7..cb10f66e 100644 --- a/libasm/disasm_begin.c +++ b/libasm/disasm_begin.c @@ -49,7 +49,7 @@ disasm_begin (Ebl *ebl, Elf *elf, DisasmGetSymCB_t symcb) return NULL; } - DisasmCtx_t *ctx = (DisasmCtx_t *) malloc (sizeof (DisasmCtx_t)); + DisasmCtx_t *ctx = malloc (sizeof (DisasmCtx_t)); if (ctx == NULL) { __libasm_seterrno (ASM_E_NOMEM); diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b5462ef4..768d5c25 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,12 @@ +2021-09-06 Dmitry V. Levin + + * dwarf_begin_elf.c (valid_p): Remove casts of malloc return values. + (dwarf_begin_elf): Remove cast of calloc return value. + * dwarf_getpubnames.c (get_offsets): Remove casts of realloc return + values. + * dwarf_getsrclines.c (read_srclines): Remove cast of malloc return + value. + 2021-04-19 Martin Liska * dwarf_begin_elf.c (check_section): Use startswith. diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 9e944b86..7bde61b3 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -229,7 +229,7 @@ valid_p (Dwarf *result) inside the .debug_loc or .debug_loclists section. */ if (result != NULL && result->sectiondata[IDX_debug_loc] != NULL) { - result->fake_loc_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_loc_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_loc_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -255,7 +255,7 @@ valid_p (Dwarf *result) if (result != NULL && result->sectiondata[IDX_debug_loclists] != NULL) { - result->fake_loclists_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_loclists_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_loclists_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -286,7 +286,7 @@ valid_p (Dwarf *result) inside the .debug_addr section, if it exists. */ if (result != NULL && result->sectiondata[IDX_debug_addr] != NULL) { - result->fake_addr_cu = (Dwarf_CU *) malloc (sizeof (Dwarf_CU)); + result->fake_addr_cu = malloc (sizeof (Dwarf_CU)); if (unlikely (result->fake_addr_cu == NULL)) { Dwarf_Sig8_Hash_free (&result->sig8_hash); @@ -415,7 +415,7 @@ dwarf_begin_elf (Elf *elf, Dwarf_Cmd cmd, Elf_Scn *scngrp) assert (sizeof (struct Dwarf) < mem_default_size); /* Allocate the data structure. */ - Dwarf *result = (Dwarf *) calloc (1, sizeof (Dwarf)); + Dwarf *result = calloc (1, sizeof (Dwarf)); if (unlikely (result == NULL) || unlikely (Dwarf_Sig8_Hash_init (&result->sig8_hash, 11) < 0)) { diff --git a/libdw/dwarf_getpubnames.c b/libdw/dwarf_getpubnames.c index 25600f33..de726407 100644 --- a/libdw/dwarf_getpubnames.c +++ b/libdw/dwarf_getpubnames.c @@ -57,8 +57,7 @@ get_offsets (Dwarf *dbg) if (cnt >= allocated) { allocated = MAX (10, 2 * allocated); - struct pubnames_s *newmem - = (struct pubnames_s *) realloc (mem, allocated * entsize); + struct pubnames_s *newmem = realloc (mem, allocated * entsize); if (newmem == NULL) { __libdw_seterrno (DWARF_E_NOMEM); @@ -132,7 +131,7 @@ get_offsets (Dwarf *dbg) return -1; } - dbg->pubnames_sets = (struct pubnames_s *) realloc (mem, cnt * entsize); + dbg->pubnames_sets = realloc (mem, cnt * entsize); dbg->pubnames_nsets = cnt; return 0; diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index d6a581ad..8fc48e1d 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -372,7 +372,7 @@ read_srclines (Dwarf *dbg, { if (ndirlist > SIZE_MAX / sizeof (*dirarray)) goto no_mem; - dirarray = (struct dirlist *) malloc (ndirlist * sizeof (*dirarray)); + dirarray = malloc (ndirlist * sizeof (*dirarray)); if (unlikely (dirarray == NULL)) { no_mem: diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index a0ff9f4f..1abee0e8 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,9 @@ +2021-09-06 Dmitry V. Levin + + * dwelf_strtab.c (dwelf_strtab_init): Remove cast of calloc return + value. + (morememory): Remove cast of malloc return value. + 2020-12-12 Dmitry V. Levin * libdwelf.h: Fix spelling typos in comments. diff --git a/libdwelf/dwelf_strtab.c b/libdwelf/dwelf_strtab.c index c6ae7cdf..5ec8c295 100644 --- a/libdwelf/dwelf_strtab.c +++ b/libdwelf/dwelf_strtab.c @@ -91,8 +91,7 @@ dwelf_strtab_init (bool nullstr) assert (sizeof (struct memoryblock) < ps - MALLOC_OVERHEAD); } - Dwelf_Strtab *ret - = (Dwelf_Strtab *) calloc (1, sizeof (struct Dwelf_Strtab)); + Dwelf_Strtab *ret = calloc (1, sizeof (struct Dwelf_Strtab)); if (ret != NULL) { ret->nullstr = nullstr; @@ -117,7 +116,7 @@ morememory (Dwelf_Strtab *st, size_t len) /* Allocate nearest multiple of pagesize >= len. */ len = ((len / ps) + (len % ps != 0)) * ps - MALLOC_OVERHEAD; - struct memoryblock *newmem = (struct memoryblock *) malloc (len); + struct memoryblock *newmem = malloc (len); if (newmem == NULL) return 1; diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 1fce7af2..d35674c7 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-09-06 Dmitry V. Levin + + * linux-pid-attach.c (read_cached_memory): Remove cast of malloc + return value. + 2021-06-09 Omar Sandoval * link_map.c (read_addrs): Fix potential NULL pointer dereference. diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index cd534825..09cba07b 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -135,7 +135,7 @@ read_cached_memory (struct __libdwfl_pid_arg *pid_arg, if (mem_cache == NULL) { size_t mem_cache_size = sizeof (struct __libdwfl_remote_mem_cache); - mem_cache = (struct __libdwfl_remote_mem_cache *) malloc (mem_cache_size); + mem_cache = malloc (mem_cache_size); if (mem_cache == NULL) return false; diff --git a/libebl/ChangeLog b/libebl/ChangeLog index fff66b3e..da690a40 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,7 @@ +2021-09-06 Dmitry V. Levin + + * eblopenbackend.c (openbackend): Remove cast of calloc return value. + 2021-04-19 Martin Liska * eblobjnotetypename.c (ebl_object_note_type_name): Use startswith. diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index 71fafed7..0c07296c 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -274,7 +274,7 @@ openbackend (Elf *elf, const char *emulation, GElf_Half machine) /* First allocate the data structure for the result. We do this here since this assures that the structure is always large enough. */ - result = (Ebl *) calloc (1, sizeof (Ebl)); + result = calloc (1, sizeof (Ebl)); if (result == NULL) { // XXX uncomment diff --git a/libelf/ChangeLog b/libelf/ChangeLog index f521ed3d..041da9b1 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,17 @@ +2021-09-06 Dmitry V. Levin + + * common.h (allocate_elf): Remove cast of calloc return value. + * elf_newdata.c (elf_newdata): Likewise. + * elf_getscn.c (elf_getscn): Remove casts of calloc return values. + * elf_newscn.c (elf_newscn): Likewise. + * elf32_updatefile.c (__elfw2): Remove casts of malloc return values. + * elf_getdata.c (convert_data): Likewise. + (__libelf_set_rawdata_wrlock): Remove cast of malloc return value. + * elf_begin.c (read_long_names): Remove cast of malloc return value. + * elf_readall.c (__libelf_readall): Likewise. + * elf_getarsym.c (elf_getarsym): Remove casts of malloc and realloc + return values. + 2021-07-19 Mark Wielaard * elf_strptr.c (validate_str): Check last char is zero first before diff --git a/libelf/common.h b/libelf/common.h index e41c717d..3718b3fd 100644 --- a/libelf/common.h +++ b/libelf/common.h @@ -71,7 +71,7 @@ __attribute__ ((unused)) allocate_elf (int fildes, void *map_address, int64_t offset, size_t maxsize, Elf_Cmd cmd, Elf *parent, Elf_Kind kind, size_t extra) { - Elf *result = (Elf *) calloc (1, sizeof (Elf) + extra); + Elf *result = calloc (1, sizeof (Elf) + extra); if (result == NULL) __libelf_seterrno (ELF_E_NOMEM); else diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c index f67e6261..1ff58900 100644 --- a/libelf/elf32_updatefile.c +++ b/libelf/elf32_updatefile.c @@ -218,7 +218,7 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum) return 1; Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; - Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *)); + Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *)); if (unlikely (scns == NULL)) { __libelf_seterrno (ELF_E_NOMEM); @@ -688,7 +688,7 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum) /* Get all sections into the array and sort them. */ Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns; - Elf_Scn **scns = (Elf_Scn **) malloc (shnum * sizeof (Elf_Scn *)); + Elf_Scn **scns = malloc (shnum * sizeof (Elf_Scn *)); if (unlikely (scns == NULL)) { free (shdr_data_mem); diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 32648c15..93d1e12f 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -774,7 +774,7 @@ read_long_names (Elf *elf) /* Due to the stupid format of the long name table entry (which are not NUL terminted) we have to provide an appropriate representation anyhow. Therefore we always make a copy which has the appropriate form. */ - newp = (char *) malloc (len); + newp = malloc (len); if (newp != NULL) { char *runp; diff --git a/libelf/elf_getarsym.c b/libelf/elf_getarsym.c index 1f031fca..05ebf6a9 100644 --- a/libelf/elf_getarsym.c +++ b/libelf/elf_getarsym.c @@ -198,7 +198,7 @@ elf_getarsym (Elf *elf, size_t *ptr) /* Now we can allocate the arrays needed to store the index. */ size_t ar_sym_len = (n + 1) * sizeof (Elf_Arsym); - elf->state.ar.ar_sym = (Elf_Arsym *) malloc (ar_sym_len); + elf->state.ar.ar_sym = malloc (ar_sym_len); if (elf->state.ar.ar_sym != NULL) { void *file_data; /* unit32_t[n] or uint64_t[n] */ @@ -216,8 +216,7 @@ elf_getarsym (Elf *elf, size_t *ptr) file_data = temp_data; ar_sym_len += index_size - n * w; - Elf_Arsym *newp = (Elf_Arsym *) realloc (elf->state.ar.ar_sym, - ar_sym_len); + Elf_Arsym *newp = realloc (elf->state.ar.ar_sym, ar_sym_len); if (newp == NULL) { free (elf->state.ar.ar_sym); diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index 3cad29de..475c6ded 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -146,7 +146,7 @@ convert_data (Elf_Scn *scn, int eclass, scn->data_base = scn->rawdata_base; else { - scn->data_base = (char *) malloc (size); + scn->data_base = malloc (size); if (scn->data_base == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -161,7 +161,7 @@ convert_data (Elf_Scn *scn, int eclass, { xfct_t fp; - scn->data_base = (char *) malloc (size); + scn->data_base = malloc (size); if (scn->data_base == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -175,7 +175,7 @@ convert_data (Elf_Scn *scn, int eclass, rawdata_source = scn->rawdata_base; else { - rawdata_source = (char *) malloc (size); + rawdata_source = malloc (size); if (rawdata_source == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -328,8 +328,7 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn) /* We have to read the data from the file. Allocate the needed memory. */ - scn->rawdata_base = scn->rawdata.d.d_buf - = (char *) malloc (size); + scn->rawdata_base = scn->rawdata.d.d_buf = malloc (size); if (scn->rawdata.d.d_buf == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_getscn.c b/libelf/elf_getscn.c index e1fbaaaa..be9c76f0 100644 --- a/libelf/elf_getscn.c +++ b/libelf/elf_getscn.c @@ -68,7 +68,7 @@ elf_getscn (Elf *elf, size_t idx) Elf_Scn *scn0 = &runp->data[0]; if (elf->class == ELFCLASS32) { - scn0->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr)); + scn0->shdr.e32 = calloc (1, sizeof (Elf32_Shdr)); if (scn0->shdr.e32 == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -77,7 +77,7 @@ elf_getscn (Elf *elf, size_t idx) } else { - scn0->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr)); + scn0->shdr.e64 = calloc (1, sizeof (Elf64_Shdr)); if (scn0->shdr.e64 == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_newdata.c b/libelf/elf_newdata.c index 896f22cd..0063d599 100644 --- a/libelf/elf_newdata.c +++ b/libelf/elf_newdata.c @@ -106,7 +106,7 @@ elf_newdata (Elf_Scn *scn) } /* Create a new, empty data descriptor. */ - result = (Elf_Data_List *) calloc (1, sizeof (Elf_Data_List)); + result = calloc (1, sizeof (Elf_Data_List)); if (result == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c index d15a642e..d6bdf153 100644 --- a/libelf/elf_newscn.c +++ b/libelf/elf_newscn.c @@ -94,9 +94,9 @@ elf_newscn (Elf *elf) 1 #endif ) - newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList) - + ((elf->state.elf.scnincr *= 2) - * sizeof (Elf_Scn)), 1); + newp = calloc (sizeof (Elf_ScnList) + + ((elf->state.elf.scnincr *= 2) + * sizeof (Elf_Scn)), 1); if (newp == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -122,7 +122,7 @@ elf_newscn (Elf *elf) /* Create a section header for this section. */ if (elf->class == ELFCLASS32) { - result->shdr.e32 = (Elf32_Shdr *) calloc (1, sizeof (Elf32_Shdr)); + result->shdr.e32 = calloc (1, sizeof (Elf32_Shdr)); if (result->shdr.e32 == NULL) { __libelf_seterrno (ELF_E_NOMEM); @@ -131,7 +131,7 @@ elf_newscn (Elf *elf) } else { - result->shdr.e64 = (Elf64_Shdr *) calloc (1, sizeof (Elf64_Shdr)); + result->shdr.e64 = calloc (1, sizeof (Elf64_Shdr)); if (result->shdr.e64 == NULL) { __libelf_seterrno (ELF_E_NOMEM); diff --git a/libelf/elf_readall.c b/libelf/elf_readall.c index 384d2512..0a3a233d 100644 --- a/libelf/elf_readall.c +++ b/libelf/elf_readall.c @@ -107,7 +107,7 @@ __libelf_readall (Elf *elf) } /* Allocate all the memory we need. */ - mem = (char *) malloc (elf->maximum_size); + mem = malloc (elf->maximum_size); if (mem != NULL) { /* Read the file content. */ diff --git a/src/ChangeLog b/src/ChangeLog index e83e0a5e..1e7968f4 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2021-09-06 Dmitry V. Levin + + * elflint.c (check_sections): Remove cast of xcalloc return value. + * findtextrel.c (process_file): Remove casts of malloc and realloc + return values. + * nm.c (get_local_names, show_symbols_sysv, show_symbols): Remove + casts of xmalloc return values. + * readelf.c (print_hash_info, handle_sysv_hash, handle_sysv_hash64, + handle_gnu_hash): Remove cast of xcalloc return value. + (print_debug_units): Remove casts of xmalloc return values. + * strip.c (handle_elf): Remove casts of xcalloc and xmalloc return + values. + 2021-09-05 Dmitry V. Levin * Makefile.am (AM_LDFLAGS): Add $(STACK_USAGE_NO_ERROR). diff --git a/src/elflint.c b/src/elflint.c index 35b40500..1ce75684 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3705,7 +3705,7 @@ check_sections (Ebl *ebl, GElf_Ehdr *ehdr) return; /* Allocate array to count references in section groups. */ - scnref = (int *) xcalloc (shnum, sizeof (int)); + scnref = xcalloc (shnum, sizeof (int)); /* Check the zeroth section first. It must not have any contents and the section header must contain nonzero value at most in the diff --git a/src/findtextrel.c b/src/findtextrel.c index 220ee909..5d479b51 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -304,8 +304,7 @@ process_file (const char *fname, bool more_than_one) /* Get the address ranges for the loaded segments. */ size_t nsegments_max = 10; size_t nsegments = 0; - struct segments *segments - = (struct segments *) malloc (nsegments_max * sizeof (segments[0])); + struct segments *segments = malloc (nsegments_max * sizeof (segments[0])); if (segments == NULL) error (1, errno, _("while reading ELF file")); @@ -334,9 +333,7 @@ process_file (const char *fname, bool more_than_one) { nsegments_max *= 2; segments - = (struct segments *) realloc (segments, - nsegments_max - * sizeof (segments[0])); + = realloc (segments, nsegments_max * sizeof (segments[0])); if (segments == NULL) { error (0, 0, _("\ diff --git a/src/nm.c b/src/nm.c index b99805e8..2ae29c4d 100644 --- a/src/nm.c +++ b/src/nm.c @@ -687,8 +687,7 @@ get_local_names (Dwarf *dbg) } /* We have all the information. Create a record. */ - struct local_name *newp - = (struct local_name *) xmalloc (sizeof (*newp)); + struct local_name *newp = xmalloc (sizeof (*newp)); newp->name = name; newp->file = dwarf_filesrc (files, fileidx, NULL, NULL); newp->lineno = lineno; @@ -736,7 +735,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024; const char **scnnames; if (scnnames_malloced) - scnnames = (const char **) xmalloc (sizeof (const char *) * shnum); + scnnames = xmalloc (sizeof (const char *) * shnum); else scnnames = (const char **) alloca (sizeof (const char *) * shnum); /* Get the section header string table index. */ @@ -1340,7 +1339,7 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, if (nentries * sizeof (GElf_SymX) < MAX_STACK_ALLOC) sym_mem = (GElf_SymX *) alloca (nentries * sizeof (GElf_SymX)); else - sym_mem = (GElf_SymX *) xmalloc (nentries * sizeof (GElf_SymX)); + sym_mem = xmalloc (nentries * sizeof (GElf_SymX)); /* Iterate over all symbols. */ #ifdef USE_DEMANGLE diff --git a/src/readelf.c b/src/readelf.c index 8191bde2..1e3ad43d 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3165,7 +3165,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx, uint_fast32_t maxlength, Elf32_Word nbucket, uint_fast32_t nsyms, uint32_t *lengths, const char *extrastr) { - uint32_t *counts = (uint32_t *) xcalloc (maxlength + 1, sizeof (uint32_t)); + uint32_t *counts = xcalloc (maxlength + 1, sizeof (uint32_t)); for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) ++counts[lengths[cnt]]; @@ -3266,7 +3266,7 @@ handle_sysv_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2]; Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket]; - uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t)); uint_fast32_t maxlength = 0; uint_fast32_t nsyms = 0; @@ -3332,7 +3332,7 @@ handle_sysv_hash64 (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) Elf64_Xword *bucket = &((Elf64_Xword *) data->d_buf)[2]; Elf64_Xword *chain = &((Elf64_Xword *) data->d_buf)[2 + nbucket]; - uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + uint32_t *lengths = xcalloc (nbucket, sizeof (uint32_t)); uint_fast32_t maxlength = 0; uint_fast32_t nsyms = 0; @@ -3410,7 +3410,7 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) if (used_buf > data->d_size) goto invalid_data; - lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); + lengths = xcalloc (nbucket, sizeof (uint32_t)); Elf32_Word *bitmask = &((Elf32_Word *) data->d_buf)[4]; Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[4 + bitmask_words]; @@ -7744,7 +7744,7 @@ print_debug_units (Dwfl_Module *dwflmod, return; int maxdies = 20; - Dwarf_Die *dies = (Dwarf_Die *) xmalloc (maxdies * sizeof (Dwarf_Die)); + Dwarf_Die *dies = xmalloc (maxdies * sizeof (Dwarf_Die)); /* New compilation unit. */ Dwarf_Half version; @@ -7916,9 +7916,7 @@ print_debug_units (Dwfl_Module *dwflmod, /* Make room for the next level's DIE. */ if (level + 1 == maxdies) - dies = (Dwarf_Die *) xrealloc (dies, - (maxdies += 10) - * sizeof (Dwarf_Die)); + dies = xrealloc (dies, (maxdies += 10) * sizeof (Dwarf_Die)); int res = dwarf_child (&dies[level], &dies[level + 1]); if (res > 0) diff --git a/src/strip.c b/src/strip.c index 961b9db5..d5b753d7 100644 --- a/src/strip.c +++ b/src/strip.c @@ -1062,7 +1062,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, the debug file if the file would not contain any information. */ size_t debug_fname_len = strlen (debug_fname); - tmp_debug_fname = (char *) xmalloc (debug_fname_len + sizeof (".XXXXXX")); + tmp_debug_fname = xmalloc (debug_fname_len + sizeof (".XXXXXX")); strcpy (mempcpy (tmp_debug_fname, debug_fname, debug_fname_len), ".XXXXXX"); @@ -1196,8 +1196,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, table. Maybe some weird tool created an ELF file without one. The other one is used for the debug link section. */ if ((shnum + 2) * sizeof (struct shdr_info) > MAX_STACK_ALLOC) - shdr_info = (struct shdr_info *) xcalloc (shnum + 2, - sizeof (struct shdr_info)); + shdr_info = xcalloc (shnum + 2, sizeof (struct shdr_info)); else { shdr_info = (struct shdr_info *) alloca ((shnum + 2) @@ -1980,8 +1979,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, } shdr_info[cnt].newsymidx - = (Elf32_Word *) xcalloc (shdr_info[cnt].data->d_size - / elsize, sizeof (Elf32_Word)); + = xcalloc (shdr_info[cnt].data->d_size / elsize, + sizeof (Elf32_Word)); bool last_was_local = true; size_t destidx; diff --git a/tests/ChangeLog b/tests/ChangeLog index 42989d19..85dca442 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-09-06 Dmitry V. Levin + + * elfcopy.c (copy_elf): Remove cast of malloc return value. + 2021-09-07 Mark Wielaard * run-debuginfod-archive-groom.sh: Wait for initial scan and groom diff --git a/tests/elfcopy.c b/tests/elfcopy.c index 4542222e..10b2d362 100644 --- a/tests/elfcopy.c +++ b/tests/elfcopy.c @@ -194,7 +194,7 @@ copy_elf (const char *in, const char *out, bool use_mmap, bool reverse_offs) exit (1); } - offs = (GElf_Off *) malloc (shnum * sizeof (GElf_Off)); + offs = malloc (shnum * sizeof (GElf_Off)); if (offs == NULL) { printf ("couldn't allocate memory for offs\n"); -- cgit v1.2.1 From 5df759af555e6ffc385ead7683bcbd059a698944 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Mon, 6 Sep 2021 10:00:00 +0000 Subject: Introduce xasprintf Similar to other x* functions, xasprintf is like asprintf except that it dies in case of an error. Signed-off-by: Dmitry V. Levin --- lib/ChangeLog | 4 ++++ lib/Makefile.am | 2 +- lib/libeu.h | 2 ++ lib/xasprintf.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 lib/xasprintf.c diff --git a/lib/ChangeLog b/lib/ChangeLog index 563b0b6a..468001f8 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,9 @@ 2021-09-06 Dmitry V. Levin + * xasprintf.c: New file. + * Makefile.am (libeu_a_SOURCES): Add it. + * libeu.h (xasprintf): New prototype. + * dynamicsizehash.c (INIT(NAME)): Remove cast of calloc return value. * dynamicsizehash_concurrent.c (INIT(NAME)): Remove cast of malloc return value. diff --git a/lib/Makefile.am b/lib/Makefile.am index 766fbcd7..42ddf5ae 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -33,7 +33,7 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf noinst_LIBRARIES = libeu.a -libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ +libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \ crc32.c crc32_file.c \ color.c error.c printversion.c diff --git a/lib/libeu.h b/lib/libeu.h index ecb4d011..e849a79e 100644 --- a/lib/libeu.h +++ b/lib/libeu.h @@ -39,6 +39,8 @@ extern void *xrealloc (void *, size_t) __attribute__ ((__malloc__)); extern char *xstrdup (const char *) __attribute__ ((__malloc__)); extern char *xstrndup (const char *, size_t) __attribute__ ((__malloc__)); +extern char *xasprintf(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))) __attribute__ ((__malloc__)); extern uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len); extern int crc32_file (int fd, uint32_t *resp); diff --git a/lib/xasprintf.c b/lib/xasprintf.c new file mode 100644 index 00000000..179ea2e8 --- /dev/null +++ b/lib/xasprintf.c @@ -0,0 +1,52 @@ +/* A wrapper around vasprintf that dies in case of an error. + Copyright (c) 2021 Dmitry V. Levin + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include "libeu.h" +#include "system.h" + +char * +xasprintf (const char *fmt, ...) +{ + char *res; + va_list ap; + + va_start (ap, fmt); + if (unlikely (vasprintf (&res, fmt, ap) < 0)) + error (EXIT_FAILURE, 0, _("memory exhausted")); + va_end(ap); + + return res; +} -- cgit v1.2.1 From c1a67b39611f3e396121cf5333b0e77b537e9741 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Mon, 6 Sep 2021 10:00:00 +0000 Subject: Use xasprintf instead of asprintf followed by error(EXIT_FAILURE) Signed-off-by: Dmitry V. Levin --- lib/ChangeLog | 3 +++ lib/color.c | 6 ++---- src/ChangeLog | 5 +++++ src/objdump.c | 17 ++++++++--------- src/readelf.c | 14 ++++++-------- src/unstrip.c | 8 ++------ 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 468001f8..96eaa330 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,8 @@ 2021-09-06 Dmitry V. Levin + * color.c (parse_opt): Replace asprintf followed by error(EXIT_FAILURE) + with xasprintf. + * xasprintf.c: New file. * Makefile.am (libeu_a_SOURCES): Add it. * libeu.h (xasprintf): New prototype. diff --git a/lib/color.c b/lib/color.c index 454cb7ca..e43b6143 100644 --- a/lib/color.c +++ b/lib/color.c @@ -188,10 +188,8 @@ valid arguments are:\n\ if (name_len == known[i].len && memcmp (start, known[i].name, name_len) == 0) { - if (asprintf (known[i].varp, "\e[%.*sm", - (int) (env - val), val) < 0) - error (EXIT_FAILURE, errno, - _("cannot allocate memory")); + *known[i].varp = + xasprintf ("\e[%.*sm", (int) (env - val), val); break; } } diff --git a/src/ChangeLog b/src/ChangeLog index 1e7968f4..e8fce200 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2021-09-06 Dmitry V. Levin + * objdump.c (show_disasm): Replace asprintf followed by + error(EXIT_FAILURE) with xasprintf. + * readelf.c (handle_gnu_hash): Likewise. + * unstrip.c (handle_output_dir_module, main): Likewise. + * elflint.c (check_sections): Remove cast of xcalloc return value. * findtextrel.c (process_file): Remove casts of malloc and realloc return values. diff --git a/src/objdump.c b/src/objdump.c index 3a93248c..f7ea6c92 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -717,15 +717,14 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx) info.address_color = color_address; info.bytes_color = color_bytes; - if (asprintf (&fmt, "%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l", - color_mnemonic ?: "", - color_operand1 ?: "", - color_operand2 ?: "", - color_operand3 ?: "", - color_operand4 ?: "", - color_operand5 ?: "", - color_label ?: "") < 0) - error (EXIT_FAILURE, errno, _("cannot allocate memory")); + fmt = xasprintf ("%s%%7m %s%%.1o,%s%%.2o,%s%%.3o,,%s%%.4o%s%%.5o%%34a %s%%l", + color_mnemonic ?: "", + color_operand1 ?: "", + color_operand2 ?: "", + color_operand3 ?: "", + color_operand4 ?: "", + color_operand5 ?: "", + color_label ?: ""); } else { diff --git a/src/readelf.c b/src/readelf.c index 1e3ad43d..3a199068 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3448,17 +3448,15 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) nbits += (word & 0x0000ffff) + ((word >> 16) & 0x0000ffff); } - char *str; - if (unlikely (asprintf (&str, _("\ + char *str = xasprintf (_("\ Symbol Bias: %u\n\ Bitmask Size: %zu bytes %" PRIuFAST32 "%% bits set 2nd hash shift: %u\n"), - (unsigned int) symbias, - bitmask_words * sizeof (Elf32_Word), - ((nbits * 100 + 50) - / (uint_fast32_t) (bitmask_words + (unsigned int) symbias, + bitmask_words * sizeof (Elf32_Word), + ((nbits * 100 + 50) + / (uint_fast32_t) (bitmask_words * sizeof (Elf32_Word) * 8)), - (unsigned int) shift) == -1)) - error (EXIT_FAILURE, 0, _("memory exhausted")); + (unsigned int) shift); print_hash_info (ebl, scn, shdr, shstrndx, maxlength, nbucket, nsyms, lengths, str); diff --git a/src/unstrip.c b/src/unstrip.c index 6618ec9b..aacc9aad 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -2401,9 +2401,7 @@ handle_output_dir_module (const char *output_dir, Dwfl_Module *mod, bool force, if (file == NULL && ignore) return; - char *output_file; - if (asprintf (&output_file, "%s/%s", output_dir, modnames ? name : file) < 0) - error (EXIT_FAILURE, 0, _("memory exhausted")); + char *output_file = xasprintf ("%s/%s", output_dir, modnames ? name : file); handle_dwfl_module (output_file, true, force, mod, all, ignore, relocate); @@ -2606,9 +2604,7 @@ or - if no debuginfo was found, or . if FILE contains the debug information.\ if (info.output_dir != NULL) { - char *file; - if (asprintf (&file, "%s/%s", info.output_dir, info.args[0]) < 0) - error (EXIT_FAILURE, 0, _("memory exhausted")); + char *file = xasprintf ("%s/%s", info.output_dir, info.args[0]); handle_explicit_files (file, true, info.force, info.args[0], info.args[1]); free (file); -- cgit v1.2.1 From fdbf472a7b0120ec66b546a3067d67bbf8e17f8a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 9 Sep 2021 18:50:54 +0200 Subject: tests: Cleanup error handling and don't share cache between servers/client There were still three tests that shared a cache between the servers and client that queried those servers. Give them all separate caches. Also the error handler for debuginfod tests wasn't called when a command inside a function failed. Since testrun is a function, there would be no metrics or error log files listed if the testrun command failed. Making it hard to see what went wrong. Fix this by using set -o errtrace Signed-off-by: Mark Wielaard --- tests/ChangeLog | 11 +++++++++++ tests/debuginfod-subr.sh | 14 +++++++++----- tests/run-debuginfod-federation-link.sh | 7 ++++--- tests/run-debuginfod-federation-metrics.sh | 18 ++++++++---------- tests/run-debuginfod-federation-sqlite.sh | 23 ++++++++++------------- 5 files changed, 42 insertions(+), 31 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 85dca442..05b31fd8 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,14 @@ +2021-09-09 Mark Wielaard + + * debuginfod-subr.sh: set -o errtrace. + (cleanup): Don't fail kill or wait. Only trap on normal exit. + (err): Don't fail curl metrics. Call cleanup. + * run-debuginfod-federation-link.sh: Use separate client caches + for both servers and debuginfod client. Remove duplicate valgrind + disabling. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + 2021-09-06 Dmitry V. Levin * elfcopy.c (copy_elf): Remove cast of malloc return value. diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh index 7d238436..c21b7b8a 100755 --- a/tests/debuginfod-subr.sh +++ b/tests/debuginfod-subr.sh @@ -16,6 +16,9 @@ # sourced from run-debuginfod-*.sh tests (must be bash scripts) +# We trap ERR and like commands that fail in function to also trap +set -o errtrace + . $srcdir/test-subr.sh # includes set -e type curl 2>/dev/null || (echo "need curl"; exit 77) @@ -27,14 +30,14 @@ echo "zstd=$zstd bsdtar=`bsdtar --version`" cleanup() { - if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi - if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi + if [ $PID1 -ne 0 ]; then kill $PID1 || : ; wait $PID1 || :; fi + if [ $PID2 -ne 0 ]; then kill $PID2 || : ; wait $PID2 || :; fi rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* exit_cleanup } -# clean up trash if we were aborted early -trap cleanup 0 1 2 3 5 9 15 +# clean up trash if we exit +trap cleanup 0 errfiles_list= err() { @@ -42,7 +45,7 @@ err() { for port in $PORT1 $PORT2 do echo ERROR REPORT $port metrics - curl -s http://127.0.0.1:$port/metrics + curl -s http://127.0.0.1:$port/metrics || : echo done for x in $errfiles_list @@ -51,6 +54,7 @@ err() { cat $x echo done + cleanup false # trigger set -e } trap err ERR diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index 050bcbcf..1347e7b8 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -98,6 +98,9 @@ wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 # have clients contact the new server export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH if type bsdtar 2>/dev/null; then # copy in the deb files @@ -117,7 +120,6 @@ if type bsdtar 2>/dev/null; then archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" fi -rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # send a request to stress XFF and User-Agent federation relay; @@ -148,8 +150,7 @@ export DEBUGINFOD_URLS=127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # test parallel queries in client -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 -mkdir -p $DEBUGINFOD_CACHE_PATH +rm -rf $DEBUGINFOD_CACHE_PATH export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh index 0cc4c2f7..2d0fd6d4 100755 --- a/tests/run-debuginfod-federation-metrics.sh +++ b/tests/run-debuginfod-federation-metrics.sh @@ -92,6 +92,10 @@ wait_ready $PORT2 'thread_busy{role="http-metrics"}' 1 # have clients contact the new server export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH + if type bsdtar 2>/dev/null; then # copy in the deb files cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D @@ -110,7 +114,6 @@ if type bsdtar 2>/dev/null; then archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" fi -rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # send a request to stress XFF and User-Agent federation relay; @@ -171,20 +174,15 @@ curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true (curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false -# DISABLE VALGRIND checking because valgrind might use debuginfod client -# requests itself, causing confusion about who put what in the cache. -# It stays disabled till the end of this test. -unset VALGRIND_CMD - # Confirm that reused curl connections survive 404 errors. -# The rm's force an uncached fetch -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +# The rm's force an uncached fetch (in both servers and client cache) +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # Confirm that some debuginfod client pools are being used diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index 5a18b4bb..45761ed7 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -78,7 +78,11 @@ wait_ready $PORT2 'thread_work_total{role="traverse"}' 1 # And initial groom cycle wait_ready $PORT1 'thread_work_total{role="groom"}' 1 -export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2 +export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT2 +# Use fresh cache for debuginfod-find client requests +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 +mkdir -p $DEBUGINFOD_CACHE_PATH + if type bsdtar 2>/dev/null; then # copy in the deb files cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D @@ -97,7 +101,6 @@ if type bsdtar 2>/dev/null; then archive_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" fi -rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # send a request to stress XFF and User-Agent federation relay; @@ -127,8 +130,7 @@ rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit fil export DEBUGINFOD_URLS=127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # test parallel queries in client -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache3 -mkdir -p $DEBUGINFOD_CACHE_PATH +rm -rf $DEBUGINFOD_CACHE_PATH export DEBUGINFOD_URLS="BAD http://127.0.0.1:$PORT1 127.0.0.1:$PORT1 http://127.0.0.1:$PORT2 DNE" testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 @@ -142,20 +144,15 @@ curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/debuginfo > /dev/null || true curl -s http://127.0.0.1:$PORT2/buildid/deadbeef/badtype > /dev/null || true (curl -s http://127.0.0.1:$PORT2/metrics | grep 'badtype') && false -# DISABLE VALGRIND checking because valgrind might use debuginfod client -# requests itself, causing confusion about who put what in the cache. -# It stays disabled till the end of this test. -unset VALGRIND_CMD - # Confirm that reused curl connections survive 404 errors. -# The rm's force an uncached fetch -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +# The rm's force an uncached fetch (in both servers and client cache) +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo .client_cache*/$BUILDID/debuginfo +rm -f .client_cache*/$BUILDID/debuginfo testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # Trigger a flood of requests against the same archive content file. # Use a file that hasn't been previously extracted in to make it -- cgit v1.2.1 From b561b51a472779a083f4b109b9821bc7963a6ff4 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 9 Sep 2021 08:03:00 +0000 Subject: findtextrel: do not use unbound alloca This fixes the following compilation warning: findtextrel.c:184:1: warning: stack usage might be unbounded [-Wstack-usage=] Signed-off-by: Dmitry V. Levin --- src/ChangeLog | 7 +++++++ src/Makefile.am | 1 - src/findtextrel.c | 52 +++++++++++++++++++++++----------------------------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e8fce200..87b3dd46 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2021-09-09 Dmitry V. Levin + + * findtextrel.c: Include "libeu.h". + (open_rootdir_file): New function. + (process_file): Use it to open file inside rootdir. + * Makefile.am (findtextrel_no_Wstack_usage): Remove. + 2021-09-06 Dmitry V. Levin * objdump.c (show_disasm): Replace asprintf followed by diff --git a/src/Makefile.am b/src/Makefile.am index 86d5bcf8..6cc019da 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -61,7 +61,6 @@ nm_no_Wstack_usage = yes size_no_Wstack_usage = yes strip_no_Wstack_usage = yes elflint_no_Wstack_usage = yes -findtextrel_no_Wstack_usage = yes elfcmp_no_Wstack_usage = yes objdump_no_Wstack_usage = yes ranlib_no_Wstack_usage = yes diff --git a/src/findtextrel.c b/src/findtextrel.c index 5d479b51..ecb1d118 100644 --- a/src/findtextrel.c +++ b/src/findtextrel.c @@ -36,6 +36,7 @@ #include #include +#include "libeu.h" #include "system.h" struct segments @@ -181,30 +182,31 @@ noop (void *arg __attribute__ ((unused))) static int -process_file (const char *fname, bool more_than_one) +open_rootdir_file (const char *fname) { - int result = 0; - void *knownsrcs = NULL; - - size_t fname_len = strlen (fname); - size_t rootdir_len = strlen (rootdir); + char *new_fname = NULL; const char *real_fname = fname; + if (fname[0] == '/' && (rootdir[0] != '/' || rootdir[1] != '\0')) - { - /* Prepend the user-provided root directory. */ - char *new_fname = alloca (rootdir_len + fname_len + 2); - *((char *) mempcpy (stpcpy (mempcpy (new_fname, rootdir, rootdir_len), - "/"), - fname, fname_len)) = '\0'; - real_fname = new_fname; - } + real_fname = new_fname = xasprintf ("%s/%s", rootdir, fname); int fd = open (real_fname, O_RDONLY); if (fd == -1) - { - error (0, errno, _("cannot open '%s'"), fname); - return 1; - } + error (0, errno, _("cannot open '%s'"), fname); + + free (new_fname); + return fd; +} + + +static int +process_file (const char *fname, bool more_than_one) +{ + int result = 0; + void *knownsrcs = NULL; + int fd = open_rootdir_file (fname); + if (fd == -1) + return 1; Elf *elf = elf_begin (fd, ELF_C_READ_MMAP, NULL); if (elf == NULL) @@ -359,18 +361,10 @@ cannot get program header index at offset %zd: %s"), is specified with an absolute path. */ if (dw == NULL && fname[0] == '/') { - size_t debuginfo_rootlen = strlen (debuginfo_root); - char *difname = (char *) alloca (rootdir_len + debuginfo_rootlen - + fname_len + 8); - strcpy (mempcpy (stpcpy (mempcpy (mempcpy (difname, rootdir, - rootdir_len), - debuginfo_root, - debuginfo_rootlen), - "/"), - fname, fname_len), - ".debug"); - + char *difname = + xasprintf("%s%s/%s.debug", rootdir, debuginfo_root, fname); fd2 = open (difname, O_RDONLY); + free (difname); if (fd2 != -1 && (elf2 = elf_begin (fd2, ELF_C_READ_MMAP, NULL)) != NULL) dw = dwarf_begin_elf (elf2, DWARF_C_READ, NULL); -- cgit v1.2.1 From bbf0dc0162e82770f296b2ecda77a2b5bd6f7405 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 9 Sep 2021 21:51:51 +0200 Subject: tests: Don't fail run-debuginfod-fd-prefetch-caches.sh if grep -c fails The set -o errtrace made run-debuginfod-fd-prefetch-caches.sh fail. On some systems. Add set -o functrace to make it fail consistently. The failure is because the grep -c for in the log file fails (it returns zero). Fix this by using || true. But this is only a workaround. It makes the test pass, but only because all values are always zero. The test doesn't currently test anything. Also make sure that err and cleanup are only executed once. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 7 +++++++ tests/debuginfod-subr.sh | 7 +++++++ tests/run-debuginfod-fd-prefetch-caches.sh | 12 ++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 05b31fd8..caee93d3 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2021-09-09 Mark Wielaard + + * debuginfod-subr.sh: set -o functrace. + (cleanup): Disable trap 0. + (err): Disable trap ERR. + * run-debuginfod-fd-prefetch-caches.sh: Use || true when grep -c fails. + 2021-09-09 Mark Wielaard * debuginfod-subr.sh: set -o errtrace. diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh index c21b7b8a..59033f35 100755 --- a/tests/debuginfod-subr.sh +++ b/tests/debuginfod-subr.sh @@ -17,6 +17,7 @@ # sourced from run-debuginfod-*.sh tests (must be bash scripts) # We trap ERR and like commands that fail in function to also trap +set -o functrace set -o errtrace . $srcdir/test-subr.sh # includes set -e @@ -30,6 +31,9 @@ echo "zstd=$zstd bsdtar=`bsdtar --version`" cleanup() { + # No more cleanups after this cleanup + trap - 0 + if [ $PID1 -ne 0 ]; then kill $PID1 || : ; wait $PID1 || :; fi if [ $PID2 -ne 0 ]; then kill $PID2 || : ; wait $PID2 || :; fi rm -rf F R D L Z ${PWD}/foobar ${PWD}/mocktree ${PWD}/.client_cache* ${PWD}/tmp* @@ -41,6 +45,9 @@ trap cleanup 0 errfiles_list= err() { + # Don't trap any new errors from now on + trap - ERR + echo ERROR REPORTS for port in $PORT1 $PORT2 do diff --git a/tests/run-debuginfod-fd-prefetch-caches.sh b/tests/run-debuginfod-fd-prefetch-caches.sh index 61fee9e9..7fbf7b20 100755 --- a/tests/run-debuginfod-fd-prefetch-caches.sh +++ b/tests/run-debuginfod-fd-prefetch-caches.sh @@ -51,10 +51,14 @@ grep 'prefetch fds ' vlog$PORT1 #$PREFETCH_FDS grep 'prefetch mbs ' vlog$PORT1 #$PREFETCH_MBS # search the vlog to find what metric counts should be and check the correct metrics # were incrimented -wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $( grep -c 'interned.*front=1' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="evict"}' $( grep -c 'evicted a=.*' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $( grep -c 'interned.*front=0' vlog$PORT1 ) -wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $( grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true ) +enqueue_nr=$(grep -c 'interned.*front=1' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="enqueue"}' $enqueue_nr +evict_nr=$(grep -c 'evicted a=.*' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="evict"}' $evict_nr +prefetch_enqueue_nr=$(grep -c 'interned.*front=0' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_enqueue"}' $prefetch_enqueue_nr +prefetch_evict_nr=$(grep -c 'evicted from prefetch a=.*front=0' vlog$PORT1 || true) +wait_ready $PORT1 'fdcache_op_count{op="prefetch_evict"}' $prefetch_evict_nr kill $PID1 wait $PID1 -- cgit v1.2.1 From 52b0d9caf5575a62322c9fbe920b69444dd09162 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 26 Aug 2021 19:05:45 +0200 Subject: libdw: set address size, offset size and version on fake CUs There are three "fake CUs" that are associated with .debug_loc, .debug_loclist and .debug_addr. These fake CUs are used for "fake attributes" to provide values that are stored in these sections instead of in the .debug_info section. These fake CUs didn't have the address size, offset size and DWARF version set. This meant that values that depended on those properties might not be interpreted correctly. One example was the value associated with a DW_OP_addrx (which comes from the .debug_addr section). Add a testcase using varlocs to test that addresses can correctly be retrieved for gcc/clang, DWARF4/5 and 32/64 bits objects. https://sourceware.org/bugzilla/show_bug.cgi?id=28220 Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 5 ++ libdw/dwarf_begin_elf.c | 32 ++++++++-- tests/ChangeLog | 14 +++++ tests/Makefile.am | 13 ++++- tests/run-varlocs-vars.sh | 93 ++++++++++++++++++++++++++++++ tests/testfile-vars-clang-dwarf4-32.o.bz2 | Bin 0 -> 568 bytes tests/testfile-vars-clang-dwarf4-64.o.bz2 | Bin 0 -> 605 bytes tests/testfile-vars-clang-dwarf5-32.o.bz2 | Bin 0 -> 741 bytes tests/testfile-vars-clang-dwarf5-64.o.bz2 | Bin 0 -> 761 bytes tests/testfile-vars-gcc-dwarf4-32.o.bz2 | Bin 0 -> 660 bytes tests/testfile-vars-gcc-dwarf4-64.o.bz2 | Bin 0 -> 691 bytes tests/testfile-vars-gcc-dwarf5-32.o.bz2 | Bin 0 -> 728 bytes tests/testfile-vars-gcc-dwarf5-64.o.bz2 | Bin 0 -> 768 bytes 13 files changed, 149 insertions(+), 8 deletions(-) create mode 100755 tests/run-varlocs-vars.sh create mode 100644 tests/testfile-vars-clang-dwarf4-32.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf4-64.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf5-32.o.bz2 create mode 100644 tests/testfile-vars-clang-dwarf5-64.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf4-32.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf4-64.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf5-32.o.bz2 create mode 100644 tests/testfile-vars-gcc-dwarf5-64.o.bz2 diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 768d5c25..b707bbfe 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2021-09-08 Mark Wielaard + + * dwarf_begin_elf.c (valid_p): Identify ELF class and use this to set + address_size of the fake CUs. Also set offset_size and DWARF version. + 2021-09-06 Dmitry V. Levin * dwarf_begin_elf.c (valid_p): Remove casts of malloc return values. diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 7bde61b3..53b44cd4 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -224,6 +224,23 @@ valid_p (Dwarf *result) result = NULL; } + /* We are setting up some "fake" CUs, which need an address size. + Check the ELF class to come up with something reasonable. */ + int elf_addr_size = 8; + if (result != NULL) + { + GElf_Ehdr ehdr; + if (gelf_getehdr (result->elf, &ehdr) == NULL) + { + Dwarf_Sig8_Hash_free (&result->sig8_hash); + __libdw_seterrno (DWARF_E_INVALID_ELF); + free (result); + result = NULL; + } + else if (ehdr.e_ident[EI_CLASS] == ELFCLASS32) + elf_addr_size = 4; + } + /* For dwarf_location_attr () we need a "fake" CU to indicate where the "fake" attribute data comes from. This is a block inside the .debug_loc or .debug_loclists section. */ @@ -247,8 +264,9 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_loc]->d_buf + result->sectiondata[IDX_debug_loc]->d_size); result->fake_loc_cu->locs = NULL; - result->fake_loc_cu->address_size = 0; - result->fake_loc_cu->version = 0; + result->fake_loc_cu->address_size = elf_addr_size; + result->fake_loc_cu->offset_size = 4; + result->fake_loc_cu->version = 4; result->fake_loc_cu->split = NULL; } } @@ -274,8 +292,9 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_loclists]->d_buf + result->sectiondata[IDX_debug_loclists]->d_size); result->fake_loclists_cu->locs = NULL; - result->fake_loclists_cu->address_size = 0; - result->fake_loclists_cu->version = 0; + result->fake_loclists_cu->address_size = elf_addr_size; + result->fake_loclists_cu->offset_size = 4; + result->fake_loclists_cu->version = 5; result->fake_loclists_cu->split = NULL; } } @@ -306,8 +325,9 @@ valid_p (Dwarf *result) = (result->sectiondata[IDX_debug_addr]->d_buf + result->sectiondata[IDX_debug_addr]->d_size); result->fake_addr_cu->locs = NULL; - result->fake_addr_cu->address_size = 0; - result->fake_addr_cu->version = 0; + result->fake_addr_cu->address_size = elf_addr_size; + result->fake_addr_cu->offset_size = 4; + result->fake_addr_cu->version = 5; result->fake_addr_cu->split = NULL; } } diff --git a/tests/ChangeLog b/tests/ChangeLog index caee93d3..1154686a 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,17 @@ +2021-09-08 Mark Wielaard + + * run-varlocs-vars.sh: New test. + * testfile-vars-clang-dwarf4-32.o.bz2: New test file. + * testfile-vars-clang-dwarf4-64.o.bz2: Likewise. + * testfile-vars-clang-dwarf5-32.o.bz2: Likewise. + * testfile-vars-clang-dwarf5-64.o.bz2: Likewise. + * testfile-vars-gcc-dwarf4-32.o.bz2: Likewise. + * testfile-vars-gcc-dwarf4-64.o.bz2: Likewise. + * testfile-vars-gcc-dwarf5-32.o.bz2: Likewise. + * testfile-vars-gcc-dwarf5-64.o.bz2: Likewise. + * Makefile.am (EXTRA_DIST): Add new test and test files. + (TESTS): Add run-varlocs-vars.sh. + 2021-09-09 Mark Wielaard * debuginfod-subr.sh: set -o functrace. diff --git a/tests/Makefile.am b/tests/Makefile.am index c586422e..22942733 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -143,7 +143,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-dwfl-report-elf-align.sh run-addr2line-test.sh \ run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \ run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \ - run-varlocs.sh run-exprlocs.sh run-funcretval.sh \ + run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh run-funcretval.sh \ run-backtrace-native.sh run-backtrace-data.sh run-backtrace-dwarf.sh \ run-backtrace-native-biarch.sh run-backtrace-native-core.sh \ run-backtrace-native-core-biarch.sh run-backtrace-core-x86_64.sh \ @@ -399,7 +399,16 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfileppc32.bz2 testfileppc64.bz2 \ testfiles390.bz2 testfiles390x.bz2 \ testfilearm.bz2 testfileaarch64.bz2 \ - run-varlocs.sh run-exprlocs.sh testfile-stridex.bz2 \ + run-varlocs.sh run-exprlocs.sh run-varlocs-vars.sh \ + testfile-vars-clang-dwarf4-32.o.bz2 \ + testfile-vars-clang-dwarf4-64.o.bz2 \ + testfile-vars-clang-dwarf5-32.o.bz2 \ + testfile-vars-clang-dwarf5-64.o.bz2 \ + testfile-vars-gcc-dwarf4-32.o.bz2 \ + testfile-vars-gcc-dwarf4-64.o.bz2 \ + testfile-vars-gcc-dwarf5-32.o.bz2 \ + testfile-vars-gcc-dwarf5-64.o.bz2 \ + testfile-stridex.bz2 \ testfile_const_type.c testfile_const_type.bz2 \ testfile_implicit_pointer.c testfile_implicit_pointer.bz2 \ testfile_parameter_ref.c testfile_parameter_ref.bz2 \ diff --git a/tests/run-varlocs-vars.sh b/tests/run-varlocs-vars.sh new file mode 100755 index 00000000..e7598bf0 --- /dev/null +++ b/tests/run-varlocs-vars.sh @@ -0,0 +1,93 @@ +#! /bin/sh +# Copyright (C) 2013, 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/test-subr.sh + +# Testfiles generated with: +# +# $ cat foo.c +# int x = 1; +# int y = 2; +# +# for cc in gcc clang; do +# for v in 4 5; do +# for w in 32 64; do +# out="testfile-vars-$cc-dwarf$v-$w.o" +# "$cc" -m"$w" -Wall -Wextra -gdwarf-"$v" -c foo.c -o "$out" +# done +# done +# done + +testfiles testfile-vars-clang-dwarf4-32.o +testfiles testfile-vars-clang-dwarf4-64.o +testfiles testfile-vars-clang-dwarf5-32.o +testfiles testfile-vars-clang-dwarf5-64.o +testfiles testfile-vars-gcc-dwarf4-32.o +testfiles testfile-vars-gcc-dwarf4-64.o +testfiles testfile-vars-gcc-dwarf5-32.o +testfiles testfile-vars-gcc-dwarf5-64.o + +tempfiles varlocs.out +testrun ${abs_top_builddir}/tests/varlocs --debug --exprlocs -e testfile-vars-clang-dwarf4-32.o | grep exprloc > varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < varlocs.out +diff -u varlocs.out - < Date: Fri, 10 Sep 2021 11:07:16 -0700 Subject: lib: Make error.c more like error(3) Fix some issues with the error reimplementation to make it match the specification for error(3). Flush stdout before printing to stderr. Also flush stderr afterwards, which is not specified in the man page for error(3), but is what bionic does. error(3) prints strerror(errnum) if and only if errnum is nonzero, but verr prints strerror(errno) unconditionaly. When errnum is nonzero copy it to errno and use verr, and when it is not set use verrx that doesn't print errno. error(3) only exits if status is nonzero, but verr exits uncondtionally. Use vwarn/vwarnx when status is zero, which don't exit. Signed-off-by: Colin Cross --- lib/ChangeLog | 5 +++++ lib/error.c | 32 +++++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 96eaa330..c72452b1 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,8 @@ +2021-09-10 Colin Cross + + * error.c (error): Call fflush on stdout and stderr. Setup errno and + call verr, verrx, vwarn or vwarnx based on status and errnum. + 2021-09-06 Dmitry V. Levin * color.c (parse_opt): Replace asprintf followed by error(EXIT_FAILURE) diff --git a/lib/error.c b/lib/error.c index 75e964fd..5186fc15 100644 --- a/lib/error.c +++ b/lib/error.c @@ -29,7 +29,9 @@ #include #if !defined(HAVE_ERROR_H) && defined(HAVE_ERR_H) +#include #include +#include #include #include @@ -37,13 +39,37 @@ unsigned int error_message_count = 0; void error(int status, int errnum, const char *format, ...) { va_list argp; + int saved_errno = errno; + + fflush (stdout); va_start(argp, format); - verr(status, format, argp); + if (status) + { + if (errnum) + { + errno = errnum; + verr (status, format, argp); + } + else + verrx (status, format, argp); + } + else + { + if (errnum) + { + errno = errnum; + vwarn (format, argp); + } + else + vwarnx (format, argp); + } va_end(argp); - if (status) - exit(status); + fflush (stderr); + ++error_message_count; + + errno = saved_errno; } #endif -- cgit v1.2.1 From 761d37a1e072e7a6c829fdff8cebcf4c308d0e02 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 13 Sep 2021 00:35:55 +0200 Subject: debuginfod: Add endl after "fdcache emergency flush for filling tmpdir" log Without the endl the next log message will not start on its own line. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod.cxx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 7e221f54..1173f9cd 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-09-12 Mark Wielaard + + * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after + obatched(clog) line. + 2021-09-06 Dmitry V. Levin * debuginfod-client.c (debuginfod_begin): Remove cast of calloc return diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 3269f657..6cc9f777 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1347,7 +1347,7 @@ public: if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp)) { inc_metric("fdcache_op_count","op","emerg-flush"); - obatched(clog) << "fdcache emergency flush for filling tmpdir"; + obatched(clog) << "fdcache emergency flush for filling tmpdir" << endl; this->limit(0, 0, 0, 0); // emergency flush } else if (fd >= 0) -- cgit v1.2.1 From 2ff803956d6aaefeed3bc3f186da6fe666c7b1b6 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 14 Sep 2021 08:15:23 -0400 Subject: PR28339: debuginfod: fix groom/scan race condition on just-emptied queue debuginfod's scan and groom operations (thread_main_scanner, thread_main_fts_source_paths) are intended to be mutually exclusive, as a substitute for more complicated sql transaction batching. (This is because scanning / grooming involves inserting or deleting data from multiple related tables.) The workq class that governs this in debuginfod.cxx has a problem: if the workq just becomes empty, its sole entry pulled by a scanner thread in response to a wait_front(), an 'idler' groomer thread is ALSO permitted to run, because there is no indication as to when the scanner thread operation finishes, only when it starts. Extending the workq with a counter ("fronters") to track any active scanning activity (even if the workq is empty) lets us block idlers groomers a little longer. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 8 ++++++++ debuginfod/debuginfod.cxx | 26 ++++++++++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 1173f9cd..4ff59efd 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2021-09-14 Frank Ch. Eigler + + PRPR28339 + * debuginfod.cxx (waitq::fronters): New field. + (waitq::wait_idle): Respect it. + (waitq::done_front): New function. + (thread_main_scanner): Call it to match wait_front(). + 2021-09-12 Mark Wielaard * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 6cc9f777..1267efbe 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -663,10 +663,11 @@ class workq mutex mtx; condition_variable cv; bool dead; - unsigned idlers; + unsigned idlers; // number of threads busy with wait_idle / done_idle + unsigned fronters; // number of threads busy with wait_front / done_front public: - workq() { dead = false; idlers = 0; } + workq() { dead = false; idlers = 0; fronters = 0; } ~workq() {} void push_back(const Payload& p) @@ -690,10 +691,11 @@ public: unique_lock lock(mtx); q.clear(); set_metric("thread_work_pending","role","scan", q.size()); + // NB: there may still be some live fronters cv.notify_all(); // maybe wake up waiting idlers } - // block this scanner thread until there is work to do and no active + // block this scanner thread until there is work to do and no active idler bool wait_front (Payload& p) { unique_lock lock(mtx); @@ -705,19 +707,29 @@ public: { p = * q.begin(); q.erase (q.begin()); + fronters ++; // prevent idlers from starting awhile, even if empty q set_metric("thread_work_pending","role","scan", q.size()); - if (q.size() == 0) - cv.notify_all(); // maybe wake up waiting idlers + // NB: don't wake up idlers yet! The consumer is busy + // processing this element until it calls done_front(). return true; } } + // notify waitq that scanner thread is done with that last item + void done_front () + { + unique_lock lock(mtx); + fronters --; + if (q.size() == 0 && fronters == 0) + cv.notify_all(); // maybe wake up waiting idlers + } + // block this idler thread until there is no work to do void wait_idle () { unique_lock lock(mtx); cv.notify_all(); // maybe wake up waiting scanners - while (!dead && (q.size() != 0)) + while (!dead && ((q.size() != 0) || fronters > 0)) cv.wait(lock); idlers ++; } @@ -3145,6 +3157,8 @@ thread_main_scanner (void* arg) e.report(cerr); } + scanq.done_front(); // let idlers run + if (fts_cached || fts_executable || fts_debuginfo || fts_sourcefiles || fts_sref || fts_sdef) {} // NB: not just if a successful scan - we might have encountered -ENOSPC & failed (void) statfs_free_enough_p(db_path, "database"); // report sqlite filesystem size -- cgit v1.2.1 From 00f0fa77c995684060aa8ea6fe7276ed9b593d11 Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Thu, 9 Sep 2021 13:10:33 -0400 Subject: debuginfod: PR28034 - No longer escape '/', and loop efficiency Previously, urls containing '/', so most urls, would escape '/' to %2F, which is undesirable for use in other libraries which may escape differently. This patch escapes the '/' and replaces all of them ensuring there are no %2Fs sent. Some inefficiencies within the code were fixed, such as changing constant operations of a while loop within a for loop to a while loop outside of a for loop. Also strlen is no longer used within the loop, simplifying the interior operations to mere arithmetic. https://sourceware.org/bugzilla/show_bug.cgi?id=28034 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 4 +++ debuginfod/debuginfod-client.c | 35 +++++++++++++++----- tests/ChangeLog | 12 ++++--- tests/Makefile.am | 2 ++ tests/run-debuginfod-percent-escape.sh | 60 ++++++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+), 13 deletions(-) create mode 100755 tests/run-debuginfod-percent-escape.sh diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 4ff59efd..4649acee 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -10,6 +10,10 @@ * debuginfod.cxx (libarchive_fdcache::lookup): Add endl after obatched(clog) line. +2021-09-13 Noah Sanci + + * debuginfod-client.c (debuginfod_query_server): Removed constant + operations from a loop. curl_free memory. 2021-09-06 Dmitry V. Levin diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index d41723ce..8a1c68d5 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -883,6 +883,32 @@ debuginfod_query_server (debuginfod_client *c, data[i].errbuf[0] = '\0'; } + char *escaped_string = NULL; + size_t escaped_strlen = 0; + if (filename) + { + escaped_string = curl_easy_escape(&target_handle, filename+1, 0); + if (!escaped_string) + { + rc = -ENOMEM; + goto out2; + } + char *loc = escaped_string; + escaped_strlen = strlen(escaped_string); + while ((loc = strstr(loc, "%2F"))) + { + loc[0] = '/'; + //pull the string back after replacement + // loc-escaped_string finds the distance from the origin to the new location + // - 2 accounts for the 2F which remain and don't need to be measured. + // The two above subtracted from escaped_strlen yields the remaining characters + // in the string which we want to pull back + memmove(loc+1, loc+3,escaped_strlen - (loc-escaped_string) - 2); + //Because the 2F was overwritten in the memmove (as desired) escaped_strlen is + // now two shorter. + escaped_strlen -= 2; + } + } /* Initialize each handle. */ for (int i = 0; i < num_urls; i++) { @@ -904,16 +930,8 @@ debuginfod_query_server (debuginfod_client *c, if (filename) /* must start with / */ { /* PR28034 escape characters in completed url to %hh format. */ - char *escaped_string; - escaped_string = curl_easy_escape(data[i].handle, filename, 0); - if (!escaped_string) - { - rc = -ENOMEM; - goto out2; - } snprintf(data[i].url, PATH_MAX, "%s/%s/%s/%s", server_url, build_id_bytes, type, escaped_string); - curl_free(escaped_string); } else snprintf(data[i].url, PATH_MAX, "%s/%s/%s", server_url, build_id_bytes, type); @@ -953,6 +971,7 @@ debuginfod_query_server (debuginfod_client *c, curl_multi_add_handle(curlm, data[i].handle); } + if (filename) curl_free(escaped_string); /* Query servers in parallel. */ if (vfd >= 0) dprintf (vfd, "query %d urls in parallel\n", num_urls); diff --git a/tests/ChangeLog b/tests/ChangeLog index 1154686a..3f219320 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -30,6 +30,11 @@ * run-debuginfod-federation-metrics.sh: Likewise. * run-debuginfod-federation-sqlite.sh: Likewise. +2021-09-13 Noah Sanci + + * Makefile.am: added run-debuginfod-percent-escape.sh to TESTS and + EXTRA_DIST. + 2021-09-06 Dmitry V. Levin * elfcopy.c (copy_elf): Remove cast of malloc return value. @@ -164,11 +169,8 @@ 2021-07-16 Noah Sanci PR28034 - * run-debuginfod-find.sh: Added a test ensuring files with % - escapable characters in their paths are accessible. The test - itself is changing the name of a binary known previously as prog to - p+r%o$g. General operations such as accessing p+r%o$g acts as the - test for %-escape checking. + * run-debuginfod-percent-escape.sh: Added a test ensuring files with % + escapable characters in their paths are accessible. 2021-07-21 Noah Sanci diff --git a/tests/Makefile.am b/tests/Makefile.am index 22942733..43c34ce6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -231,6 +231,7 @@ TESTS += run-debuginfod-dlopen.sh \ run-debuginfod-federation-sqlite.sh \ run-debuginfod-federation-link.sh \ run-debuginfod-federation-metrics.sh \ + run-debuginfod-percent-escape.sh \ run-debuginfod-x-forwarded-for.sh endif endif @@ -524,6 +525,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-debuginfod-archive-groom.sh \ run-debuginfod-archive-rename.sh \ run-debuginfod-archive-test.sh \ + run-debuginfod-percent-escape.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ diff --git a/tests/run-debuginfod-percent-escape.sh b/tests/run-debuginfod-percent-escape.sh new file mode 100755 index 00000000..f7d8dc66 --- /dev/null +++ b/tests/run-debuginfod-percent-escape.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh # includes set -e +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=10000 +get_ports +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +mkdir F +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE \ + -F -R -d $DB -p $PORT1 -t0 -g0 -v R ${PWD}/F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +# Be patient when run on a busy machine things might take a bit. + +# Build a non-stripped binary +echo "int main() { return 0; }" > ${PWD}/F/p++r\$\#o^^g.c +gcc -Wl,--build-id -g -o ${PWD}/F/p++r\$\#o^^g ${PWD}/F/p++r\$\#o^^g.c +BUILDID=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ + -a ${PWD}/F/p++r\\$\#o^^g | grep 'Build ID' | cut -d ' ' -f 7` +tempfiles ${PWD}/F/p++r\$\#o^^g.c ${PWD}/F/p++r\$\#o^^g +kill -USR1 $PID1 +# Now there should be 1 files in the index +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests +ls F +env DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache DEBUGINFOD_URLS="http://127.0.0.1:$PORT1" \ + LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find -vvv source F/p++r\$\#o^^g ${abs_builddir}/F/p++r\$\#o^^g.c > vlog1 2>&1 || true +tempfiles vlog1 +grep 'F/p%2B%2Br%24%23o%5E%5Eg.c' vlog1 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 -- cgit v1.2.1 From ff5056c7d78b925fbd49997dc88183f6c859ac7f Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Tue, 10 Aug 2021 11:21:35 -0400 Subject: debuginfod: PR27277 - Describe retrieved files when verbose Allow users, with enough verbosity, to print the HTTP response headers upon retrieving a file. These files may include several custome http response headers such as X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE, and X-DEBUGINFOD-ARCHIVE. These headers are added from the daemon, in debuginfod.cxx. E.g output: HTTP/1.1 200 OK Connection: Keep-Alive Content-Length: 4095072 Cache-Control: public Last-Modified: Thu, 09 Sep 2021 19:06:40 GMT X-FILE: debuginfod X-FILE-SIZE: 4095072 Content-Type: application/octet-stream Date: Fri, 10 Sep 2021 16:38:06 GMT https://sourceware.org/bugzilla/show_bug.cgi?id=27277 Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 16 ++++++ debuginfod/debuginfod-client.c | 58 ++++++++++++++++++- debuginfod/debuginfod.cxx | 11 ++++ doc/ChangeLog | 8 +++ doc/debuginfod-find.1 | 3 +- doc/debuginfod.8 | 9 +++ tests/ChangeLog | 6 ++ tests/Makefile.am | 4 +- tests/run-debuginfod-response-headers.sh | 96 ++++++++++++++++++++++++++++++++ 9 files changed, 208 insertions(+), 3 deletions(-) create mode 100755 tests/run-debuginfod-response-headers.sh diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 4649acee..e2e6c5f8 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -43,6 +43,22 @@ * debuginfod.cxx (handler_cb): Fix after_you unique_set key to the entire incoming URL. +2021-08-02 Noah Sanci + + PR27277 + * debuginfod-client.c (struct debuginfod_client): New field + winning_headers. + (struct handle_data): New field response_data, response_data_size. + (header_callback): Store received headers in response_data. + (debuginfod_query_server): Activate CURLOPT_HEADERFUNCTION. + Save winning response_data. + (debuginfod_end): free client winning headers. + * debuginfod.cxx (handle_buildid_f_match): remove X-DEBUGINFOD-FILE + path. Add X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE headers. + (handle_buildid_r_match): remove X-DEBUGINFOD-FILE path. Add + X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE + headers, and X-ARCHIVE headers. + 2021-07-26 Noah Sanci PR27982 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 8a1c68d5..4d5dbd95 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -127,6 +127,7 @@ struct debuginfod_client timeout or other info gotten from environment variables, the handle data, etc. So those don't have to be reparsed and recreated on each request. */ + char * winning_headers; }; /* The cache_clean_interval_s file within the debuginfod cache specifies @@ -183,6 +184,9 @@ struct handle_data to the cache. Used to ensure that a file is not downloaded from multiple servers unnecessarily. */ CURL **target_handle; + /* Response http headers for this client handle, sent from the server */ + char *response_data; + size_t response_data_size; }; static size_t @@ -498,6 +502,37 @@ default_progressfn (debuginfod_client *c, long a, long b) return 0; } +/* This is a callback function that receives http response headers in buffer for use + * in this program. https://curl.se/libcurl/c/CURLOPT_HEADERFUNCTION.html is the + * online documentation. + */ +static size_t +header_callback (char * buffer, size_t size, size_t numitems, void * userdata) +{ + if (size != 1) + return 0; + /* Temporary buffer for realloc */ + char *temp = NULL; + struct handle_data *data = (struct handle_data *) userdata; + if (data->response_data == NULL) + { + temp = malloc(numitems+1); + if (temp == NULL) + return 0; + } + else + { + temp = realloc(data->response_data, data->response_data_size + numitems + 1); + if (temp == NULL) + return 0; + } + + memcpy(temp + data->response_data_size, buffer, numitems); + data->response_data = temp; + data->response_data_size += numitems; + data->response_data[data->response_data_size] = '\0'; + return numitems; +} /* Query each of the server URLs found in $DEBUGINFOD_URLS for the file with the specified build-id, type (debuginfo, executable or source) @@ -954,10 +989,14 @@ debuginfod_query_server (debuginfod_client *c, curl_easy_setopt (data[i].handle, CURLOPT_LOW_SPEED_LIMIT, 100 * 1024L); } + data[i].response_data = NULL; + data[i].response_data_size = 0; 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); curl_easy_setopt(data[i].handle, CURLOPT_NOSIGNAL, (long) 1); + curl_easy_setopt(data[i].handle, CURLOPT_HEADERFUNCTION, header_callback); + curl_easy_setopt(data[i].handle, CURLOPT_HEADERDATA, (void *) &(data[i])); #if LIBCURL_VERSION_NUM >= 0x072a00 /* 7.42.0 */ curl_easy_setopt(data[i].handle, CURLOPT_PATH_AS_IS, (long) 1); #else @@ -980,6 +1019,7 @@ debuginfod_query_server (debuginfod_client *c, int committed_to = -1; bool verbose_reported = false; struct timespec start_time, cur_time; + c->winning_headers = NULL; if ( maxtime > 0 && clock_gettime(CLOCK_MONOTONIC_RAW, &start_time) == -1) { rc = errno; @@ -1014,7 +1054,17 @@ debuginfod_query_server (debuginfod_client *c, if (data[i].handle != target_handle) curl_multi_remove_handle(curlm, data[i].handle); else - committed_to = i; + { + committed_to = i; + if (c->winning_headers == NULL) + { + c->winning_headers = data[committed_to].response_data; + if (vfd >= 0 && c->winning_headers != NULL) + dprintf(vfd, "\n%s", c->winning_headers); + data[committed_to].response_data = NULL; + } + + } } if (vfd >= 0 && !verbose_reported && committed_to >= 0) @@ -1257,7 +1307,10 @@ debuginfod_query_server (debuginfod_client *c, { curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ curl_easy_cleanup (data[i].handle); + free(data[i].response_data); } + free(c->winning_headers); + c->winning_headers = NULL; goto query_in_parallel; } else @@ -1300,6 +1353,7 @@ debuginfod_query_server (debuginfod_client *c, { curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ curl_easy_cleanup (data[i].handle); + free (data[i].response_data); } for (int i = 0; i < num_urls; ++i) @@ -1323,6 +1377,7 @@ debuginfod_query_server (debuginfod_client *c, { curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ curl_easy_cleanup (data[i].handle); + free (data[i].response_data); } unlink (target_cache_tmppath); @@ -1434,6 +1489,7 @@ debuginfod_end (debuginfod_client *client) curl_multi_cleanup (client->server_mhandle); curl_slist_free_all (client->headers); + free (client->winning_headers); free (client->url); free (client); } diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 1267efbe..2b9a1c41 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1087,6 +1087,9 @@ handle_buildid_f_match (bool internal_req_t, else { MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + std::string file = b_source0.substr(b_source0.find_last_of("/")+1, b_source0.length()); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(s.st_size).c_str() ); + MHD_add_response_header (r, "X-DEBUGINFOD-FILE", file.c_str() ); add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file " << b_source0 << endl; @@ -1556,6 +1559,9 @@ handle_buildid_r_match (bool internal_req_p, inc_metric ("http_responses_total","result","archive fdcache"); MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-FILE", b_source1.c_str()); add_mhd_last_modified (r, fs.st_mtime); if (verbose > 1) obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl; @@ -1697,6 +1703,11 @@ handle_buildid_r_match (bool internal_req_p, else { MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + std::string file = b_source1.substr(b_source1.find_last_of("/")+1, b_source1.length()); + MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + MHD_add_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); + add_mhd_last_modified (r, archive_entry_mtime(e)); if (verbose > 1) obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl; diff --git a/doc/ChangeLog b/doc/ChangeLog index ada48383..db3a3584 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -18,6 +18,14 @@ * Makefile.am: Updated to include debuginfod-client-config.7 * man3, man7: Symlinks for source tree man page testing. +2021-08-04 Noah Sanci + + PR27277 + * debuginfod-find.1: Increasing verbosity describes the downloaded + file. + * debuginfod.8: Describe X-DEBUGINFOD-FILE, X-DEBUGINFOD-SIZE, and + X-DEBUGINFOD-ARCHIVE. + 2021-07-26 Noah Sanci PR27982 diff --git a/doc/debuginfod-find.1 b/doc/debuginfod-find.1 index a61673f5..957ec7e7 100644 --- a/doc/debuginfod-find.1 +++ b/doc/debuginfod-find.1 @@ -110,7 +110,8 @@ l l. .TP .B "\-v" -Increase verbosity, including printing frequent download-progress messages. +Increase verbosity, including printing frequent download-progress messages +and printing the http response headers from the server. .SH "SECURITY" diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index f9a418d1..fde06bb8 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -258,6 +258,15 @@ Unknown buildid / request combinations result in HTTP error codes. This file service resemblance is intentional, so that an installation can take advantage of standard HTTP management infrastructure. +Upon finding a file in an archive or simply in the database, some +custom http headers are added to the response. For files in the +database X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE are added. +X-DEBUGINFOD-FILE is simply the unescaped filename and +X-DEBUGINFOD-SIZE is the size of the file. For files found in archives, +in addition to X-DEBUGINFOD-FILE and X-DEBUGINFOD-SIZE, +X-DEBUGINFOD-ARCHIVE is added. X-DEBUGINFOD-ARCHIVE is the name of the +archive the file was found in. + There are three requests. In each case, the buildid is encoded as a lowercase hexadecimal string. For example, for a program \fI/bin/ls\fP, look at the ELF note GNU_BUILD_ID: diff --git a/tests/ChangeLog b/tests/ChangeLog index 3f219320..c73f2534 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -111,6 +111,12 @@ * debuginfod-subr.sh (EXTRA_DIST): Add debuginfod-subr.sh. +2021-08-20 Noah Sanci + + * run-debuginfod-response-headers.sh: Ensures custom http response + headers are used and functional + * Makefile.am: Added the above new file to TESTS and EXTRA_DIST + 2021-08-28 Mark Wielaard * run-debuginfod-find.sh: Use ":memory:" for the diff --git a/tests/Makefile.am b/tests/Makefile.am index 43c34ce6..54b38954 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -232,7 +232,8 @@ TESTS += run-debuginfod-dlopen.sh \ run-debuginfod-federation-link.sh \ run-debuginfod-federation-metrics.sh \ run-debuginfod-percent-escape.sh \ - run-debuginfod-x-forwarded-for.sh + run-debuginfod-x-forwarded-for.sh \ + run-debuginfod-response-headers.sh endif endif @@ -526,6 +527,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-debuginfod-archive-rename.sh \ run-debuginfod-archive-test.sh \ run-debuginfod-percent-escape.sh \ + run-debuginfod-response-headers.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ diff --git a/tests/run-debuginfod-response-headers.sh b/tests/run-debuginfod-response-headers.sh new file mode 100755 index 00000000..bdb39b4d --- /dev/null +++ b/tests/run-debuginfod-response-headers.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh # includes set -e + +# for test case debugging, uncomment: +set -x + +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=9500 +get_ports +mkdir F R +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 -v R F > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / +######################################################################## + +# Compile a simple program, strip its debuginfo and save the build-id. +# Also move the debuginfo into another directory so that elfutils +# cannot find it without debuginfod. +echo "int main() { return 0; }" > ${PWD}/prog.c +tempfiles prog.c +# Create a subdirectory to confound source path names +mkdir foobar +gcc -Wl,--build-id -g -o prog ${PWD}/foobar///./../prog.c + +mv prog F + +cp -rvp ${abs_srcdir}/debuginfod-rpms R +if [ "$zstd" = "false" ]; then # nuke the zstd fedora 31 ones + rm -vrf R/debuginfod-rpms/fedora31 +fi + +kill -USR1 $PID1 +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +# All rpms need to be in the index, except the dummy permission-000 one +rpms=$(find R -name \*rpm | grep -v nothing | wc -l) +wait_ready $PORT1 'scanned_files_total{source=".rpm archive"}' $rpms +kill -USR1 $PID1 # two hits of SIGUSR1 may be needed to resolve .debug->dwz->srefs +# Wait till both files are in the index and scan/index fully finished +wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 + +######################################################################## +## PR27277 +# Make a simple request to the debuginfod server and check debuginfod-find's vlog to see if +# the custom HTTP headers are received. +rm -rf $DEBUGINFOD_CACHE_PATH +env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\ + -vvv executable F/prog > vlog-find$PORT1.1 2>&1 +tempfiles vlog-find$PORT1.1 +grep 'Content-Length: ' vlog-find$PORT1.1 +grep 'Connection: ' vlog-find$PORT1.1 +grep 'Cache-Control: ' vlog-find$PORT1.1 +grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.1 +grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.1 + +# Check to see if an executable file located in an archive prints the file's description and archive +env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_builddir}/debuginfod/debuginfod-find\ + -vvv executable c36708a78618d597dee15d0dc989f093ca5f9120 > vlog-find$PORT1.2 2>&1 +tempfiles vlog-find$PORT1.2 +grep 'Content-Length: ' vlog-find$PORT1.2 +grep 'Connection: ' vlog-find$PORT1.2 +grep 'Cache-Control: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2 +grep 'X-DEBUGINFOD-ARCHIVE: ' vlog-find$PORT1.2 + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 -- cgit v1.2.1 From 8626a4786c1e79e1b4891ea31966bc124e029378 Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Fri, 17 Sep 2021 10:45:39 -0400 Subject: debuginfod: Query debuginfod servers before printing response While checking PR27277 on some buildbots, greping would fail in run-debuginfod-response-headers.sh. This was because querying the debuginfod server occurs after checking if the responseh headers had arrived, leaving the possibility to leave the querying loop before outputting the headers which caused the grep failure. Querying now occurs before checking if response headers have arrived, so that they will certainly be printed and grep will find them. Signed-off-by: Noah Sanci --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod-client.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index e2e6c5f8..c2bfce98 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-09-17 Noah Sanci + + * debuginfod-client.c (debuginfod_query_server): curl_multi_perform + now occurs before checking if response headers have arrived. + 2021-09-14 Frank Ch. Eigler PRPR28339 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 4d5dbd95..88e45567 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1046,6 +1046,7 @@ debuginfod_query_server (debuginfod_client *c, } /* Wait 1 second, the minimum DEBUGINFOD_TIMEOUT. */ curl_multi_wait(curlm, NULL, 0, 1000, NULL); + CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); /* If the target file has been found, abort the other queries. */ if (target_handle != NULL) @@ -1077,7 +1078,6 @@ debuginfod_query_server (debuginfod_client *c, verbose_reported = true; } - CURLMcode curlm_res = curl_multi_perform(curlm, &still_running); if (curlm_res != CURLM_OK) { switch (curlm_res) -- cgit v1.2.1 From 28db5f16c44fa7bbd24b221b65aa4d133753355c Mon Sep 17 00:00:00 2001 From: Noah Sanci Date: Fri, 17 Sep 2021 10:45:39 -0400 Subject: debuginfod: Remove checking for unsafe headers Some http response header checks were removed such as checking for Connection and Cache-Control. These headers are not guarenteed to be received and depend on proxy and libmicrohttpd versions. Checking for the existance of Content-Length and DEBUGINFOD-* headers is sufficient since Content-Length is added upon creation of an MHD_Response object and DEBUGINFOD-* are added manually. (source on Content-Length being added: https://www.gnu.org/software/libmicrohttpd/manual/libmicrohttpd.html# microhttpd_002dresponse-headers ) Signed-off-by: Noah Sanci --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-response-headers.sh | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index c73f2534..b62bb350 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-09-17 Noah Sanci + + * run-debuginfod-response-header.sh: removed checking for Connection + and Cache-Control in response headers. + 2021-09-08 Mark Wielaard * run-varlocs-vars.sh: New test. diff --git a/tests/run-debuginfod-response-headers.sh b/tests/run-debuginfod-response-headers.sh index bdb39b4d..10b2ab49 100755 --- a/tests/run-debuginfod-response-headers.sh +++ b/tests/run-debuginfod-response-headers.sh @@ -74,8 +74,6 @@ env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_ -vvv executable F/prog > vlog-find$PORT1.1 2>&1 tempfiles vlog-find$PORT1.1 grep 'Content-Length: ' vlog-find$PORT1.1 -grep 'Connection: ' vlog-find$PORT1.1 -grep 'Cache-Control: ' vlog-find$PORT1.1 grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.1 grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.1 @@ -84,8 +82,6 @@ env DEBUGINFOD_URLS="http://127.0.0.1:"$PORT1 LD_LIBRARY_PATH=$ldpath ${abs_top_ -vvv executable c36708a78618d597dee15d0dc989f093ca5f9120 > vlog-find$PORT1.2 2>&1 tempfiles vlog-find$PORT1.2 grep 'Content-Length: ' vlog-find$PORT1.2 -grep 'Connection: ' vlog-find$PORT1.2 -grep 'Cache-Control: ' vlog-find$PORT1.2 grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2 grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2 grep 'X-DEBUGINFOD-ARCHIVE: ' vlog-find$PORT1.2 -- cgit v1.2.1 From 2e57301be1bbb9c34f8a59122ab500de46eb7acb Mon Sep 17 00:00:00 2001 From: William Cohen Date: Wed, 29 Sep 2021 14:56:15 -0400 Subject: RISC-V: PR27925 Add support for LP64 and LP64F ABIs return values The RISC-V Linux kernel is compiled without floating point (the LP64 ABI) and elfutils could not obtain return value locations for functions in the kernel. This issue was noticed when Systemtap generated RISC-V kernel modules for scripts that used $return target variables in function return probes. This patch adds the needed support to provide return value information for the LP64 and LP64F ABIs. Signed-off-by: William Cohen --- backends/ChangeLog | 13 ++++++++ backends/riscv_init.c | 21 +++++++++--- backends/riscv_retval.c | 86 ++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 104 insertions(+), 16 deletions(-) diff --git a/backends/ChangeLog b/backends/ChangeLog index ac0e3187..b48af4e1 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,16 @@ +2021-09-29 William Cohen + + * riscv_init.c (riscv_return_value_location_lp64f): New function + declaration. + (riscv_return_value_location_lp64): Likewise. + (riscv_init): Set return_value_location based on elf class and + ehdr flags. + * riscv_retval.c (riscv_return_value_location_lp64d): Renamed to... + (riscv_return_value_location_lp64ifd): ...this. Handle single, + double, float _Complex and double _Complex cases. + (riscv_return_value_location_lp64d): New function. + (riscv_return_value_location_lp64f): Likewise. + 2021-04-19 Martin Liska * aarch64_symbol.c (aarch64_data_marker_symbol): Use startswith. diff --git a/backends/riscv_init.c b/backends/riscv_init.c index 551e7bb6..141e0821 100644 --- a/backends/riscv_init.c +++ b/backends/riscv_init.c @@ -41,6 +41,12 @@ extern __typeof (EBLHOOK (return_value_location)) riscv_return_value_location_lp64d attribute_hidden; +extern __typeof (EBLHOOK (return_value_location)) + riscv_return_value_location_lp64f attribute_hidden; + +extern __typeof (EBLHOOK (return_value_location)) + riscv_return_value_location_lp64 attribute_hidden; + extern __typeof (EBLHOOK (core_note)) riscv64_core_note attribute_hidden; Ebl * @@ -63,10 +69,17 @@ riscv_init (Elf *elf, eh->core_note = riscv64_core_note; else HOOK (eh, core_note); - if (eh->class == ELFCLASS64 - && ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) - == EF_RISCV_FLOAT_ABI_DOUBLE)) - eh->return_value_location = riscv_return_value_location_lp64d; + if (eh->class == ELFCLASS64) + { + if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) + == EF_RISCV_FLOAT_ABI_DOUBLE) + eh->return_value_location = riscv_return_value_location_lp64d; + else if ((elf->state.elf64.ehdr->e_flags & EF_RISCV_FLOAT_ABI) + == EF_RISCV_FLOAT_ABI_SINGLE) + eh->return_value_location = riscv_return_value_location_lp64f; + else + eh->return_value_location = riscv_return_value_location_lp64; + } return eh; } diff --git a/backends/riscv_retval.c b/backends/riscv_retval.c index 35b6010b..34761486 100644 --- a/backends/riscv_retval.c +++ b/backends/riscv_retval.c @@ -125,8 +125,8 @@ pass_by_flattened_arg (const Dwarf_Op **locp __attribute__ ((unused)), } int -riscv_return_value_location_lp64d (Dwarf_Die *functypedie, - const Dwarf_Op **locp) +riscv_return_value_location_lp64ifd (int fp, Dwarf_Die *functypedie, + const Dwarf_Op **locp) { /* Start with the function's type, and get the DW_AT_type attribute, which is the type of the return value. */ @@ -211,10 +211,29 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, switch (size) { case 4: /* single */ - case 8: /* double */ - return pass_in_fpr_lp64d (locp, size); - - case 16: /* quad */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + case EF_RISCV_FLOAT_ABI_SINGLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + case 8: /* double */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SINGLE: + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + + case 16: /* quad */ return pass_in_gpr_lp64 (locp, size); default: @@ -227,12 +246,31 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, switch (size) { case 8: /* float _Complex */ - return pass_in_fpr_lp64f (locp, size); - - case 16: /* double _Complex */ - return pass_in_fpr_lp64d (locp, size); - - case 32: /* long double _Complex */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + case EF_RISCV_FLOAT_ABI_SINGLE: + return pass_in_fpr_lp64f (locp, size); + case EF_RISCV_FLOAT_ABI_SOFT: + /* Double the size so the vals are two registers. */ + return pass_in_gpr_lp64 (locp, size * 2); + default: + return -2; + } + + case 16: /* double _Complex */ + switch (fp) + { + case EF_RISCV_FLOAT_ABI_DOUBLE: + return pass_in_fpr_lp64d (locp, size); + case EF_RISCV_FLOAT_ABI_SINGLE: + case EF_RISCV_FLOAT_ABI_SOFT: + return pass_in_gpr_lp64 (locp, size); + default: + return -2; + } + + case 32: /* long double _Complex */ return pass_by_ref (locp); default: @@ -249,3 +287,27 @@ riscv_return_value_location_lp64d (Dwarf_Die *functypedie, *locp = NULL; return 0; } + +int +riscv_return_value_location_lp64d (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_DOUBLE, + functypedie, locp); +} + +int +riscv_return_value_location_lp64f (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SINGLE, + functypedie, locp); +} + +int +riscv_return_value_location_lp64 (Dwarf_Die *functypedie, + const Dwarf_Op **locp) +{ + return riscv_return_value_location_lp64ifd (EF_RISCV_FLOAT_ABI_SOFT, + functypedie, locp); +} -- cgit v1.2.1 From 260a3105cc0e378882110ba787cd58815183c454 Mon Sep 17 00:00:00 2001 From: Di Chen Date: Wed, 6 Oct 2021 17:04:08 -0400 Subject: PR28242: debuginfod prometheus metric widening This patch aims to extend http_responses_* metrics with another label "type" by getting the extra artifact-type content added as a new key=value tag. v2, tweaked patch to perform artifact-type sanitization at point of vulnerability rather than in general metric tabulation logic. Signed-off-by: Di Chen Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 8 ++++ debuginfod/debuginfod.cxx | 79 +++++++++++++++++++++++++--------- tests/ChangeLog | 5 +++ tests/run-debuginfod-000-permission.sh | 12 +++--- 4 files changed, 78 insertions(+), 26 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index c2bfce98..de833f7f 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2021-10-06 Di Chen + + PR28242 + * debuginfod.cxx (inc_metrics, add_metrics): Add two-tag variants. + (handler_cb): Call it with artifacttype for http_responses_* metrics. + (handle_buildid): Sanitize artifacttype if necessary. + (dwarf_extract_source_path): Pass sanitizable string param. + 2021-09-17 Noah Sanci * debuginfod-client.c (debuginfod_query_server): curl_multi_perform diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 2b9a1c41..d22571ad 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -436,7 +436,14 @@ static void inc_metric(const string& metric, static void add_metric(const string& metric, const string& lname, const string& lvalue, double value); -// static void add_metric(const string& metric, double value); +static void inc_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue); +static void add_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue, + double value); + class tmp_inc_metric { // a RAII style wrapper for exception-safe scoped increment & decrement string m, n, v; @@ -1802,7 +1809,7 @@ void debuginfod_pool_end(debuginfod_client* c) static struct MHD_Response* handle_buildid (MHD_Connection* conn, const string& buildid /* unsafe */, - const string& artifacttype /* unsafe */, + string& artifacttype /* unsafe, cleanse on exception/return */, const string& suffix /* unsafe */, int *result_fd) { @@ -1811,7 +1818,10 @@ handle_buildid (MHD_Connection* conn, if (artifacttype == "debuginfo") atype_code = "D"; else if (artifacttype == "executable") atype_code = "E"; else if (artifacttype == "source") atype_code = "S"; - else throw reportable_exception("invalid artifacttype"); + else { + artifacttype = "invalid"; // PR28242 ensure http_resposes metrics don't propagate unclean user data + throw reportable_exception("invalid artifacttype"); + } inc_metric("http_requests_total", "type", artifacttype); @@ -2080,6 +2090,29 @@ add_metric(const string& metric, // and more for higher arity labels if needed +static void +inc_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue) +{ + string key = (metric + "{" + + metric_label(lname, lvalue) + "," + + metric_label(rname, rvalue) + "}"); + unique_lock lock(metrics_lock); + metrics[key] ++; +} +static void +add_metric(const string& metric, + const string& lname, const string& lvalue, + const string& rname, const string& rvalue, + double value) +{ + string key = (metric + "{" + + metric_label(lname, lvalue) + "," + + metric_label(rname, rvalue) + "}"); + unique_lock lock(metrics_lock); + metrics[key] += value; +} static struct MHD_Response* handle_metrics (off_t* size) @@ -2165,6 +2198,7 @@ handler_cb (void * /*cls*/, struct timespec ts_start, ts_end; clock_gettime (CLOCK_MONOTONIC, &ts_start); double afteryou = 0.0; + string artifacttype, suffix; try { @@ -2203,7 +2237,7 @@ handler_cb (void * /*cls*/, string buildid = url_copy.substr(slash1+1, slash2-slash1-1); size_t slash3 = url_copy.find('/', slash2+1); - string artifacttype, suffix; + if (slash3 == string::npos) { artifacttype = url_copy.substr(slash2+1); @@ -2229,12 +2263,14 @@ handler_cb (void * /*cls*/, else if (url1 == "/metrics") { tmp_inc_metric m ("thread_busy", "role", "http-metrics"); - inc_metric("http_requests_total", "type", "metrics"); + artifacttype = "metrics"; + inc_metric("http_requests_total", "type", artifacttype); r = handle_metrics(& http_size); } else if (url1 == "/") { - inc_metric("http_requests_total", "type", "/"); + artifacttype = "/"; + inc_metric("http_requests_total", "type", artifacttype); r = handle_root(& http_size); } else @@ -2274,19 +2310,21 @@ handler_cb (void * /*cls*/, // related prometheus metrics string http_code_str = to_string(http_code); - if (http_size >= 0) - add_metric("http_responses_transfer_bytes_sum","code",http_code_str, - http_size); - inc_metric("http_responses_transfer_bytes_count","code",http_code_str); - - add_metric("http_responses_duration_milliseconds_sum","code",http_code_str, - deltas*1000); // prometheus prefers _seconds and floating point - inc_metric("http_responses_duration_milliseconds_count","code",http_code_str); - - add_metric("http_responses_after_you_milliseconds_sum","code",http_code_str, - afteryou*1000); - inc_metric("http_responses_after_you_milliseconds_count","code",http_code_str); - + add_metric("http_responses_transfer_bytes_sum", + "code", http_code_str, "type", artifacttype, http_size); + inc_metric("http_responses_transfer_bytes_count", + "code", http_code_str, "type", artifacttype); + + add_metric("http_responses_duration_milliseconds_sum", + "code", http_code_str, "type", artifacttype, deltas*1000); // prometheus prefers _seconds and floating point + inc_metric("http_responses_duration_milliseconds_count", + "code", http_code_str, "type", artifacttype); + + add_metric("http_responses_after_you_milliseconds_sum", + "code", http_code_str, "type", artifacttype, afteryou*1000); + inc_metric("http_responses_after_you_milliseconds_count", + "code", http_code_str, "type", artifacttype); + return rc; } @@ -2334,7 +2372,8 @@ dwarf_extract_source_paths (Elf *elf, set& debug_sourcefiles) struct MHD_Response *r = 0; try { - r = handle_buildid (0, buildid, "debuginfo", "", &alt_fd); + string artifacttype = "debuginfo"; + r = handle_buildid (0, buildid, artifacttype, "", &alt_fd); } catch (const reportable_exception& e) { diff --git a/tests/ChangeLog b/tests/ChangeLog index b62bb350..d289b27c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-10-06 Di Chen + + PR28242 + * run-debuginfod-000-permission.sh: Expect artifacttype metrics. + 2021-09-17 Noah Sanci * run-debuginfod-response-header.sh: removed checking for Connection diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh index 1e92bdb8..afa7e931 100755 --- a/tests/run-debuginfod-000-permission.sh +++ b/tests/run-debuginfod-000-permission.sh @@ -61,22 +61,22 @@ if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then err fi -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` if [ "$bytecount_before" != "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} has changed." + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} has changed." err fi # set cache_miss_s to 0 and sleep 1 to make the mtime expire. echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s sleep 1 -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404"}'` +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` if [ "$bytecount_before" == "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404"} should be incremented." + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} should be incremented." err fi -- cgit v1.2.1 From 3d9f12883d0c131bd4ab6045e1f60d3fe6d150ea Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 6 Oct 2021 23:37:42 +0200 Subject: elflint.c: Don't dereference databits if bad elflint.c: In function 'check_sections': elflint.c:4105:48: error: null pointer dereference [-Werror=null-dereference] 4105 | idx < databits->d_size && ! bad; | ~~~~~~~~^~~~~~~~ Fix this by testing for ! bad first. Reported-by: Jan-Benedict Glaw Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/elflint.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 87b3dd46..316bcb6d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-10-06 Mark Wielaard + + * elflint.c (check_sections): Don't dereference databits if bad. + 2021-09-09 Dmitry V. Levin * findtextrel.c: Include "libeu.h". diff --git a/src/elflint.c b/src/elflint.c index 1ce75684..ef7725ce 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -4102,7 +4102,7 @@ section [%2zu] '%s' has type NOBITS but is read from the file in segment of prog bad = (databits == NULL || databits->d_size != shdr->sh_size); for (size_t idx = 0; - idx < databits->d_size && ! bad; + ! bad && idx < databits->d_size; idx++) bad = ((char *) databits->d_buf)[idx] != 0; -- cgit v1.2.1 From 47b0ebe9033daa7ac9c732b25c85520b97f9635a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 6 Oct 2021 23:53:34 +0200 Subject: tests: Handle dwarf_attr_string returning NULL in show-die-info.c Reported-by: Jan-Benedict Glaw Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/show-die-info.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index d289b27c..07e018b0 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-10-06 Mark Wielaard + + * show-die-info.c (handle): Handle dwarf_attr_string returning NULL. + 2021-10-06 Di Chen PR28242 diff --git a/tests/show-die-info.c b/tests/show-die-info.c index 34e27a3b..1a3191cd 100644 --- a/tests/show-die-info.c +++ b/tests/show-die-info.c @@ -97,7 +97,7 @@ handle (Dwarf *dbg, Dwarf_Die *die, int n) printf ("%*s Attrs :", n * 5, ""); for (cnt = 0; cnt < 0xffff; ++cnt) if (dwarf_hasattr (die, cnt)) - printf (" %s", dwarf_attr_string (cnt)); + printf (" %s", dwarf_attr_string (cnt) ?: ""); puts (""); if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0) -- cgit v1.2.1 From a83fe488a7b422fc8260bdb35526d39a195c624a Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Sun, 3 Oct 2021 17:04:24 -0400 Subject: PR27783: switch default debuginfod-urls to drop-in style files Rewrote and commented the /etc/profile.d csh and sh script fragments to take the default $DEBUGINFOD_URLS from the union of drop-in files: /etc/debuginfod/*.urls. Hand-tested with csh and bash, with conditions including no prior $DEBUGINFOD_URLS, nonexistent .urls files, multiple entries in .urls files. Signed-off-by: Frank Ch. Eigler --- NEWS | 6 ++++++ config/ChangeLog | 8 ++++++++ config/Makefile.am | 9 ++++++++- config/elfutils.spec.in | 1 + config/profile.csh.in | 25 +++++++++++++++---------- config/profile.sh.in | 19 ++++++++++++++++--- 6 files changed, 54 insertions(+), 14 deletions(-) diff --git a/NEWS b/NEWS index a73d39ec..aaef458c 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +Version 0.186 + +debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files + /etc/debuginfod/*.urls rather than hardcoded into the + /etc/profile.d/debuginfod* scripts. + Version 0.185 debuginfod-client: Simplify curl handle reuse so downloads which diff --git a/config/ChangeLog b/config/ChangeLog index b2c0af8a..bd41654f 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,11 @@ +2021-10-03 Frank Ch. Eigler + + PR27783 + * profile.sh, profile.csh: Rewrite to document and set DEBUGINFOD_URLS + from /etc/debuginfod/*.urls files. + * Makefile.am: Install the configury-specified .urls file. + * elfutils.spec: Package it. + 2021-09-05 Dmitry V. Levin * eu.am (STACK_USAGE_NO_ERROR): New variable. diff --git a/config/Makefile.am b/config/Makefile.am index a66f5490..0d3ba164 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -40,9 +40,16 @@ pkgconfig_DATA += libdebuginfod.pc install-data-local: $(INSTALL_DATA) profile.sh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh $(INSTALL_DATA) profile.csh -D $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + mkdir -p $(DESTDIR)$(sysconfdir)/debuginfod + if [ -n "@DEBUGINFOD_URLS@" ]; then \ + echo "@DEBUGINFOD_URLS@" > $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls; \ + fi uninstall-local: - rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.sh + rm -f $(DESTDIR)$(sysconfdir)/profile.d/debuginfod.csh + rm -f $(DESTDIR)$(sysconfdir)/debuginfod/elfutils.urls + -rmdir $(DESTDIR)$(sysconfdir)/debuginfod endif if MAINTAINER_MODE diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 04376265..8f6a8e03 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -301,6 +301,7 @@ fi %{_mandir}/man1/debuginfod-find.1* %{_mandir}/man7/debuginfod*.7* %config(noreplace) %{_sysconfdir}/profile.d/* +%config(noreplace) %{_sysconfdir}/debuginfod/* %files debuginfod-client-devel %defattr(-,root,root) diff --git a/config/profile.csh.in b/config/profile.csh.in index 0a2d6d16..01f7c2f2 100644 --- a/config/profile.csh.in +++ b/config/profile.csh.in @@ -1,11 +1,16 @@ -if ("@DEBUGINFOD_URLS@" != "") then - if ($?DEBUGINFOD_URLS) then - if ($%DEBUGINFOD_URLS) then - setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS @DEBUGINFOD_URLS@" - else - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@" - endif - else - setenv DEBUGINFOD_URLS "@DEBUGINFOD_URLS@" - endif + +# $HOME/.login* or similar files may first set $DEBUGINFOD_URLS. +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. +# See also [man debuginfod-client-config] for other environment variables +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS. + +if (! $?DEBUGINFOD_URLS) then + set prefix="@prefix@" + set debuginfod_urls=`sh -c "cat @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` + if ( "$debuginfod_urls" != "" ) then + setenv DEBUGINFOD_URLS "$debuginfod_urls" + endif + unset debuginfod_urls + unset prefix endif diff --git a/config/profile.sh.in b/config/profile.sh.in index aa228a0d..afce3963 100644 --- a/config/profile.sh.in +++ b/config/profile.sh.in @@ -1,4 +1,17 @@ -if [ -n "@DEBUGINFOD_URLS@" ]; then - DEBUGINFOD_URLS="${DEBUGINFOD_URLS-}${DEBUGINFOD_URLS:+ }@DEBUGINFOD_URLS@" - export DEBUGINFOD_URLS + +# $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS. +# If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. +# $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. +# See also [man debuginfod-client-config] for other environment variables +# such as $DEBUGINFOD_MAXSIZE, $DEBUGINFOD_MAXTIME, $DEBUGINFOD_PROGRESS. + +if [ -z "$DEBUGINFOD_URLS" ]; then + prefix="@prefix@" + debuginfod_urls=`sh -c "cat @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` + if [ -n "$debuginfod_urls" ]; then + DEBUGINFOD_URLS="$debuginfod_urls" + export DEBUGINFOD_URLS + fi + unset debuginfod_urls + unset prefix fi -- cgit v1.2.1 From aa0765aa93ce3e74283498a310333c9bff2223db Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 15 Oct 2021 15:16:54 +0200 Subject: debuginfod-client: Stick to http:// + https:// + file:// protocols MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make sure we don't use any of the more experimental protocols libcurl might support. URLs can be redirected and we might want to follow http -> https, but not e.g. gopher or pop3. Suggested-by: Zbigniew Jędrzejewski-Szmek Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod-client.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index de833f7f..a91749e7 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-10-15 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Set + CURLOPT_PROTOCOLS. + 2021-10-06 Di Chen PR28242 diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 88e45567..bd947ae4 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -973,6 +973,10 @@ debuginfod_query_server (debuginfod_client *c, if (vfd >= 0) dprintf (vfd, "url %d %s\n", i, data[i].url); + /* Only allow http:// + https:// + file:// so we aren't being + redirected to some unsupported protocol. */ + curl_easy_setopt(data[i].handle, CURLOPT_PROTOCOLS, + CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FILE); curl_easy_setopt(data[i].handle, CURLOPT_URL, data[i].url); if (vfd >= 0) curl_easy_setopt(data[i].handle, CURLOPT_ERRORBUFFER, data[i].errbuf); -- cgit v1.2.1 From c3a6a9dfc6ed0c24ab2d11b2d71f425b479575c9 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 6 Oct 2021 22:41:29 +0200 Subject: libdw: Use signedness of subrange type to determine array bounds When calculating the array size check if the subrange has an associate type, if it does then check the type to determine whether the upper and lower values need to be interpreted as signed of unsigned values. We default to signed because that is what the testcase run-aggregate-size.sh testfile-size4 expects (this is an hardwritten testcase, we could have chosen a different default). https://sourceware.org/bugzilla/show_bug.cgi?id=28294 Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 6 ++++++ libdw/dwarf_aggregate_size.c | 44 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b707bbfe..4275b830 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,9 @@ +2021-10-06 Mark Wielaard + + * dwarf_aggregate_size.c (array_size): Check signedness of child DIE + type. Use dwarf_formsdata or dwarf_formudata to get the lower and + upper bounds. + 2021-09-08 Mark Wielaard * dwarf_begin_elf.c (valid_p): Identify ELF class and use this to set diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 75105e4d..96023d69 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -83,19 +83,51 @@ array_size (Dwarf_Die *die, Dwarf_Word *size, } else { + bool is_signed = true; + if (INTUSE(dwarf_attr) (get_type (&child, attr_mem, &type_mem), + DW_AT_encoding, attr_mem) != NULL) + { + Dwarf_Word encoding; + if (INTUSE(dwarf_formudata) (attr_mem, &encoding) == 0) + is_signed = (encoding == DW_ATE_signed + || encoding == DW_ATE_signed_char); + } + Dwarf_Sword upper; Dwarf_Sword lower; - if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) - (&child, DW_AT_upper_bound, - attr_mem), &upper) != 0) - return -1; + if (is_signed) + { + if (INTUSE(dwarf_formsdata) (INTUSE(dwarf_attr_integrate) + (&child, DW_AT_upper_bound, + attr_mem), &upper) != 0) + return -1; + } + else + { + Dwarf_Word unsigned_upper; + if (INTUSE(dwarf_formudata) (INTUSE(dwarf_attr_integrate) + (&child, DW_AT_upper_bound, + attr_mem), &unsigned_upper) != 0) + return -1; + upper = unsigned_upper; + } /* Having DW_AT_lower_bound is optional. */ if (INTUSE(dwarf_attr_integrate) (&child, DW_AT_lower_bound, attr_mem) != NULL) { - if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0) - return -1; + if (is_signed) + { + if (INTUSE(dwarf_formsdata) (attr_mem, &lower) != 0) + return -1; + } + else + { + Dwarf_Word unsigned_lower; + if (INTUSE(dwarf_formudata) (attr_mem, &unsigned_lower) != 0) + return -1; + lower = unsigned_lower; + } } else { -- cgit v1.2.1 From e3e70782a1d1a246844215991bbd2d6b60d0aa41 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 18 Oct 2021 14:35:20 +0200 Subject: libdw: Don't pass NULL to dwarf_peel_type commit c3a6a9dfc "libdw: Use signedness of subrange type to determine array bounds" introduced a type check on a DIE which exposed a latent bug in the get_type function. Even if the type of a DIE couldn't be determined it would call dwarf_peel_type on it. The gcc undefined sanitizer would flag this as being undefined behaviour because the second argument of the function is marked as non-NULL. Fix this by checking we actually have a non-NULL type DIE. Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 5 +++++ libdw/dwarf_aggregate_size.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 4275b830..311f34b5 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2021-10-18 Mark Wielaard + + * dwarf_aggregate_size.c (get_type): Don't pass NULL to + dwarf_peel_type. + 2021-10-06 Mark Wielaard * dwarf_aggregate_size.c (array_size): Check signedness of child DIE diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 96023d69..89f2029e 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -40,7 +40,7 @@ get_type (Dwarf_Die *die, Dwarf_Attribute *attr_mem, Dwarf_Die *type_mem) Dwarf_Die *type = INTUSE(dwarf_formref_die) (INTUSE(dwarf_attr_integrate) (die, DW_AT_type, attr_mem), type_mem); - if (INTUSE(dwarf_peel_type) (type, type) != 0) + if (type == NULL || INTUSE(dwarf_peel_type) (type, type) != 0) return NULL; return type; -- cgit v1.2.1 From 7d64173fb11c66284a408e52d41d15b7755d65d2 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 18 Aug 2021 18:29:34 -0400 Subject: PR28240: debuginfod client root-safe negative caching Negative cache (000-permission) files were incorrectly treated as valid cached files for the root user, because root can open even 000-perm files without -EACCES. Corrected this checking sequence. Fixed the debuginfod testsuite to run to completion as root or as an ordinary user, correcting corresponding permission checks: stat -c %A $FILE is right and [ -w $FILE] [ -r $FILE ] were wrong. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 6 ++++++ debuginfod/debuginfod-client.c | 37 ++++++++++++++++++-------------- tests/ChangeLog | 6 ++++++ tests/run-debuginfod-000-permission.sh | 2 +- tests/run-debuginfod-artifact-running.sh | 4 ---- tests/run-debuginfod-writable.sh | 2 +- 6 files changed, 35 insertions(+), 22 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index a91749e7..e0616b0d 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,9 @@ +2021-10-23 Frank Ch. Eigler + + PR28240 + * debuginfod-client.c (debuginfod_query_server): Correct + negative-hit cache check sequence for root user. + 2021-10-15 Mark Wielaard * debuginfod-client.c (debuginfod_query_server): Set diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index bd947ae4..c875ee62 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-2020 Red Hat, Inc. + Copyright (C) 2019-2021 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -766,24 +766,14 @@ debuginfod_query_server (debuginfod_client *c, if (rc != 0) goto out; - /* If the target is already in the cache then we are done. */ - int fd = open (target_cache_path, O_RDONLY); - if (fd >= 0) - { - /* Success!!!! */ - if (path != NULL) - *path = strdup(target_cache_path); - rc = fd; - goto out; - } - struct stat st; - time_t cache_miss; - /* Check if the file exists and it's of permission 000*/ - if (errno == EACCES - && stat(target_cache_path, &st) == 0 + /* Check if the file exists and it's of permission 000; must check + explicitly rather than trying to open it first (PR28240). */ + if (stat(target_cache_path, &st) == 0 && (st.st_mode & 0777) == 0) { + time_t cache_miss; + rc = debuginfod_config_cache(cache_miss_path, cache_miss_default_s, &st); if (rc < 0) goto out; @@ -795,8 +785,23 @@ debuginfod_query_server (debuginfod_client *c, goto out; } else + /* TOCTOU non-problem: if another task races, puts a working + download or a 000 file in its place, unlinking here just + means WE will try to download again as uncached. */ unlink(target_cache_path); } + + /* If the target is already in the cache (known not-000 - PR28240), + then we are done. */ + int fd = open (target_cache_path, O_RDONLY); + if (fd >= 0) + { + /* Success!!!! */ + if (path != NULL) + *path = strdup(target_cache_path); + rc = fd; + goto out; + } long timeout = default_timeout; const char* timeout_envvar = getenv(DEBUGINFOD_TIMEOUT_ENV_VAR); diff --git a/tests/ChangeLog b/tests/ChangeLog index 07e018b0..46302b56 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-10-23 Frank Ch. Eigler + + PR28240 + * run-debuginfod-000-permission.sh, -writable.sh: + Correct negative-cache file permission checking. + 2021-10-06 Mark Wielaard * show-die-info.c (handle): Handle dwarf_attr_string returning NULL. diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh index afa7e931..c1b2cf81 100755 --- a/tests/run-debuginfod-000-permission.sh +++ b/tests/run-debuginfod-000-permission.sh @@ -56,7 +56,7 @@ if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then err fi -if [ -r $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then +if [ `stat -c "%A" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != "----------" ]; then echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" err fi diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh index 51fa9c0a..b9444426 100755 --- a/tests/run-debuginfod-artifact-running.sh +++ b/tests/run-debuginfod-artifact-running.sh @@ -90,10 +90,6 @@ wait_ready $PORT1 'thread_busy{role="scan"}' 0 rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` cmp $filename F/prog.debug -if [ -w $filename ]; then - echo "cache file writable, boo" - err -fi filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find executable F/prog` cmp $filename F/prog diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh index 69ececb3..9cc4ea1d 100755 --- a/tests/run-debuginfod-writable.sh +++ b/tests/run-debuginfod-writable.sh @@ -79,7 +79,7 @@ wait_ready $PORT1 'thread_busy{role="scan"}' 0 rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID` cmp $filename F/p+r%o\$g.debug -if [ -w $filename ]; then +if [ `stat -c "%A" $filename` != "-r--------" ]; then echo "cache file writable, boo" err fi -- cgit v1.2.1 From 29b2ffb62294544850ef3c4f5eadf03f1f1ed580 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 4 Nov 2021 15:26:33 -0400 Subject: NEWS: list some 0.186 debuginfod client & server features Signed-off-by: Frank Ch. Eigler --- NEWS | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/NEWS b/NEWS index aaef458c..607c89da 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,17 @@ Version 0.186 debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files /etc/debuginfod/*.urls rather than hardcoded into the /etc/profile.d/debuginfod* scripts. + Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings + for skipping large/slow transfers. + Add $DEBUGINFOD_RETRY for retrying aborted lookups. + +debuginfod: Supply extra HTTP response headers, describing archive/file + names that satisfy the requested buildid content. + Support -d :memory: option for in-memory databases. + Protect against loops in federated server configurations. + Add -r option to use -I/-X regexes for grooming stale files. + Protect against wasted CPU from duplicate concurrent requests. + Several other performance improvements & prometheus metrics. Version 0.185 -- cgit v1.2.1 From 5350f549dcd310c62ddbac7c1f7852d88eabbb37 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 4 Nov 2021 16:26:55 -0400 Subject: NEWS: make automake check-news / dist happy automake's check-news option requires not too much new content before a line that includes the current version number. Signed-off-by: Frank Ch. Eigler --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 607c89da..9ab58422 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -Version 0.186 +Version 0.186 (one after 0.185) debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files /etc/debuginfod/*.urls rather than hardcoded into the -- cgit v1.2.1 From c1e8c8c6b25cb2b5c16553609f19a9ed5dd4e146 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 4 Nov 2021 13:08:35 -0400 Subject: PR28514: debuginfod: limit groom operation times For large databases and many stale files, it was possible to starve rescan operations by numerous groom "nuke" (database delete ops). Under the theory that including new data is at least as important as aging old, we now impose a rough deadline on groom queries. In the process, we discovered that we were commiting some undefined-behaviour sqlite ops (deleting rows while iterating), which may explain some previous heisenbug occurrences. So the groom nuke operations are split into decision & action phases, with associated progress-tracking metrics. Testing the timeout facility requires hand-testing beyond the testsuite (since it requires LARGE databases to show measurable query times). So confirmed this part by hand. Signed-off-by: Frank Ch. Eigler --- NEWS | 1 + debuginfod/ChangeLog | 7 +++ debuginfod/debuginfod.cxx | 84 ++++++++++++++++++++++++++++++----- tests/ChangeLog | 5 +++ tests/run-debuginfod-archive-groom.sh | 2 + 5 files changed, 88 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index 9ab58422..b812b743 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ debuginfod: Supply extra HTTP response headers, describing archive/file Protect against loops in federated server configurations. Add -r option to use -I/-X regexes for grooming stale files. Protect against wasted CPU from duplicate concurrent requests. + Limit the duration of groom ops roughly to rescan (-t) times. Several other performance improvements & prometheus metrics. Version 0.185 diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index e0616b0d..15b2ba40 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,10 @@ +2021-11-04 Frank Ch. Eigler + + PR28514 + * debuginfod.cxx (groom): Rework into separate decision/action + phases. Add new metrics to monitor progress. Limit indefinite + operation times to avoid starving rescan. + 2021-10-23 Frank Ch. Eigler PR28240 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index d22571ad..45981d8d 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3431,16 +3431,30 @@ void groom() clock_gettime (CLOCK_MONOTONIC, &ts_start); // scan for files that have disappeared - sqlite_ps files (db, "check old files", "select s.mtime, s.file, f.name from " - BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f " - "where f.id = s.file"); - sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?"); - sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?"); - sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned " - "where file = ? and mtime = ?"); + sqlite_ps files (db, "check old files", + "select distinct s.mtime, s.file, f.name from " + BUILDIDS "_file_mtime_scanned s, " BUILDIDS "_files f " + "where f.id = s.file"); + // NB: Because _ftime_mtime_scanned can contain both F and + // R records for the same file, this query would return duplicates if the + // DISTINCT qualifier were not there. files.reset(); + + // DECISION TIME - we enumerate stale fileids/mtimes + deque > stale_fileid_mtime; + + time_t time_start = time(NULL); while(1) { + // PR28514: limit grooming iteration to O(rescan time), to avoid + // slow filesystem tests over many files locking out rescans for + // too long. + if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s)) + { + inc_metric("groomed_total", "decision", "aborted"); + break; + } + if (interrupted) break; int rc = files.step(); @@ -3458,19 +3472,67 @@ void groom() if ( (regex_groom && reg_exclude && !reg_include) || rc < 0 || (mtime != (int64_t) s.st_mtime) ) { if (verbose > 2) - obatched(clog) << "groom: forgetting file=" << filename << " mtime=" << mtime << endl; - files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); - files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); - files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + obatched(clog) << "groom: stale file=" << filename << " mtime=" << mtime << endl; + stale_fileid_mtime.push_back(make_pair(fileid,mtime)); inc_metric("groomed_total", "decision", "stale"); + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); } else inc_metric("groomed_total", "decision", "fresh"); + if (sigusr1 != forced_rescan_count) // stop early if scan triggered break; } files.reset(); + // ACTION TIME + + // Now that we know which file/mtime tuples are stale, actually do + // the deletion from the database. Doing this during the SELECT + // iteration above results in undefined behaviour in sqlite, as per + // https://www.sqlite.org/isolation.html + + // We could shuffle stale_fileid_mtime[] here. It'd let aborted + // sequences of nuke operations resume at random locations, instead + // of just starting over. But it doesn't matter much either way, + // as long as we make progress. + + sqlite_ps files_del_f_de (db, "nuke f_de", "delete from " BUILDIDS "_f_de where file = ? and mtime = ?"); + sqlite_ps files_del_r_de (db, "nuke r_de", "delete from " BUILDIDS "_r_de where file = ? and mtime = ?"); + sqlite_ps files_del_scan (db, "nuke f_m_s", "delete from " BUILDIDS "_file_mtime_scanned " + "where file = ? and mtime = ?"); + + while (! stale_fileid_mtime.empty()) + { + auto stale = stale_fileid_mtime.front(); + stale_fileid_mtime.pop_front(); + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); + + // PR28514: limit grooming iteration to O(rescan time), to avoid + // slow nuke_* queries over many files locking out rescans for too + // long. We iterate over the files in random() sequence to avoid + // partial checks going over the same set. + if (rescan_s > 0 && (long)time(NULL) > (long)(time_start + rescan_s)) + { + inc_metric("groomed_total", "action", "aborted"); + break; + } + + if (interrupted) break; + + int64_t fileid = stale.first; + int64_t mtime = stale.second; + files_del_f_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + files_del_r_de.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + files_del_scan.reset().bind(1,fileid).bind(2,mtime).step_ok_done(); + inc_metric("groomed_total", "action", "cleaned"); + + if (sigusr1 != forced_rescan_count) // stop early if scan triggered + break; + } + stale_fileid_mtime.clear(); // no need for this any longer + set_metric("thread_work_pending","role","groom", stale_fileid_mtime.size()); + // delete buildids with no references in _r_de or _f_de tables; // cascades to _r_sref & _f_s records sqlite_ps buildids_del (db, "nuke orphan buildids", diff --git a/tests/ChangeLog b/tests/ChangeLog index 46302b56..b791cd7f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2021-11-04 Frank Ch. Eigler + + PR28514 + * run-debuginfod-archive-groom.sh: Look for new groom metric. + 2021-10-23 Frank Ch. Eigler PR28240 diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 7813ee28..030e0aa6 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -150,6 +150,8 @@ kill -USR2 $PID1 # groom cycle wait_ready $PORT1 'thread_work_total{role="groom"}' 2 # Expect 4 rpms containing 2 buildids to be deleted by the groom wait_ready $PORT1 'groomed_total{decision="stale"}' 4 +# Expect no more groom actions pending +wait_ready $PORT1 'thread_work_pending{role="groom"}' 0 rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests -- cgit v1.2.1 From 039f427a3574ec75985c755108399a2bb37c2c86 Mon Sep 17 00:00:00 2001 From: Alexander Miller Date: Thu, 18 Feb 2021 03:38:56 +0100 Subject: Improve building with LTO Use symver attribute for symbol versioning instead of .symver assembler directive when available. Convert to use double @ syntax for default version in all cases (required when using the attribute). Add the attributes externally_visible, no_reorder if available when using assembler directives to improve the situation for < gcc-10. This is not 100% reliable, though; -flto-partition=none may still be needed in some cases. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24498 Signed-off-by: Alexander Miller --- lib/ChangeLog | 13 +++++++++ lib/eu-config.h | 65 ++++++++++++++++++++++++++++++++++-------- libdw/ChangeLog | 11 +++++++ libdw/dwarf_aggregate_size.c | 4 +-- libdw/dwarf_arrayorder.c | 2 +- libdw/dwarf_bitoffset.c | 2 +- libdw/dwarf_bitsize.c | 2 +- libdw/dwarf_bytesize.c | 2 +- libdw/dwarf_decl_column.c | 2 +- libdw/dwarf_decl_file.c | 2 +- libdw/dwarf_decl_line.c | 2 +- libdw/dwarf_srclang.c | 4 +-- libdwelf/ChangeLog | 5 ++++ libdwelf/dwelf_elf_begin.c | 2 +- libdwfl/ChangeLog | 7 +++++ libdwfl/core-file.c | 4 +-- libdwfl/dwfl_module_build_id.c | 4 +-- libdwfl/dwfl_report_elf.c | 4 +-- 18 files changed, 107 insertions(+), 30 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index c72452b1..8f4d4d9f 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,16 @@ +2021-02-14 Alexander Miller + + * eu-config.h (used_in_asm): New macro. + (NEW_INTDEF): New macro. + (NEW_VERSION): Mark symbol as used_in_asm. Use @@ symver and change + asm name instead. New variant using symver attribute if available. + (OLD_VERSION): Update new symbol name. Indent asm directives. New + variant using symver attribute. + (COMPAT_VERSION_NEWPROTO): Mark symbol as used_in_asm. Reorder + lines. Replace asm with __asm__ in declaration. New variant using + symver attribute. + (COMPAT_VERSION): Likewise. + 2021-09-10 Colin Cross * error.c (error): Call fflush on stdout and stderr. Setup errno and diff --git a/lib/eu-config.h b/lib/eu-config.h index f0e3d07a..c7d7cbb2 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -176,27 +176,68 @@ asm (".section predict_data, \"aw\"; .previous\n" /* This macro is used by the tests conditionalize for standalone building. */ #define ELFUTILS_HEADER(name) +/* Don't reorder with global asm blocks or optimize away. (Doesn't reliably + keep it in the same LTO partition, though; -flto-partition=none may be + still needed for some gcc versions < 10.) */ +#ifdef __has_attribute +# if __has_attribute(no_reorder) +# define used_in_asm __attribute__ ((externally_visible, no_reorder)) +# endif +#endif +#ifndef used_in_asm +# define used_in_asm /* empty */ +#endif #ifdef SYMBOL_VERSIONING -# define OLD_VERSION(name, version) \ - asm (".globl _compat." #version "." #name "\n" \ - "_compat." #version "." #name " = " #name "\n" \ - ".symver _compat." #version "." #name "," #name "@" #version); -# define NEW_VERSION(name, version) \ - asm (".symver " #name "," #name "@@@" #version); -# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ - asm (".symver _compat." #version "." #name "," #name "@" #version); \ +# define NEW_INTDEF(name) __typeof (name) INTUSE(name) \ + __attribute__ ((alias ("_new." #name))) attribute_hidden; +# ifdef __has_attribute +# if __has_attribute(symver) +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) \ + __attribute__ ((symver (#name "@@" #version))); +# define OLD_VERSION(name, version) _OLD_VERSION1(name, __COUNTER__, version) +# define _OLD_VERSION1(name, num, version) _OLD_VERSION2(name, num, version) +# define _OLD_VERSION2(name, num, version) \ + __typeof (name) _compat_old##num##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((alias ("_new." #name), symver (#name "@" #version))); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ - asm ("_compat." #version "." #name); -# define COMPAT_VERSION(name, version, prefix) \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# define COMPAT_VERSION(name, version, prefix) \ asm (".symver _compat." #version "." #name "," #name "@" #version); \ - __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #name); + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# endif +# endif +# ifndef NEW_VERSION +# define OLD_VERSION(name, version) \ + asm (".globl _compat." #version "." #name "\n\t" \ + "_compat." #version "." #name " = _new." #name "\n\t" \ + ".symver _compat." #version "." #name "," #name "@" #version); +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) used_in_asm; \ + asm (".symver _new." #name ", " #name "@@" #version); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ + __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# define COMPAT_VERSION(name, version, prefix) \ + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# endif #else +# define NEW_INTDEF(name) INTDEF(name) # define OLD_VERSION(name, version) /* Nothing for static linking. */ # define NEW_VERSION(name, version) /* Nothing for static linking. */ # define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ error "should use #ifdef SYMBOL_VERSIONING" -# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SYMBOL_VERSIONING" +# define COMPAT_VERSION(name, version, prefix) \ + error "should use #ifdef SYMBOL_VERSIONING" #endif #ifndef FALLTHROUGH diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 311f34b5..b3836833 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,14 @@ +2021-02-14 Alexander Miller + + * dwarf_aggregate_size.c (dwarf_aggregate_size): Move NEW_VERSION + before definition. Replace INTDEF with NEW_INTDEF. + * dwarf_srclang.c (dwarf_srclang): Likewise. + * dwarf_arrayorder.c (dwarf_arrayorder): Move NEW_VERSION. + * dwarf_bitoffset.c (dwarf_bitoffset): Likewise. + * dwarf_bitsize.c (dwarf_bitsize): Likewise. + * dwarf_bytesize.c (dwarf_bytesize): Likewise. + * dwarf_decl_column.c (dwarf_decl_column): Likewise. + 2021-10-18 Mark Wielaard * dwarf_aggregate_size.c (get_type): Don't pass NULL to diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 89f2029e..8216ae42 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -241,6 +241,7 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, return -1; } +NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) { @@ -251,6 +252,5 @@ dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) return aggregate_size (&die_mem, size, &type_mem, 0); } -INTDEF (dwarf_aggregate_size) +NEW_INTDEF (dwarf_aggregate_size) OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) -NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c index da64f992..782e075c 100644 --- a/libdw/dwarf_arrayorder.c +++ b/libdw/dwarf_arrayorder.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) int dwarf_arrayorder (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_arrayorder (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122) -NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c index c1a3a343..61a0d593 100644 --- a/libdw/dwarf_bitoffset.c +++ b/libdw/dwarf_bitoffset.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) int dwarf_bitoffset (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitoffset (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c index 0ed9b710..35e8744c 100644 --- a/libdw/dwarf_bitsize.c +++ b/libdw/dwarf_bitsize.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) int dwarf_bitsize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitsize (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c index 116cd321..6d1ff9ae 100644 --- a/libdw/dwarf_bytesize.c +++ b/libdw/dwarf_bytesize.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) int dwarf_bytesize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bytesize (Dwarf_Die *die) &value) == 0 ? (int) value : -1; } OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c index 08d36b87..3225fd18 100644 --- a/libdw/dwarf_decl_column.c +++ b/libdw/dwarf_decl_column.c @@ -35,10 +35,10 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) int dwarf_decl_column (Dwarf_Die *decl, int *colp) { return __libdw_attr_intval (decl, colp, DW_AT_decl_column); } OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index d4aa0a18..75662a33 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -36,6 +36,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) const char * dwarf_decl_file (Dwarf_Die *die) { @@ -86,4 +87,3 @@ dwarf_decl_file (Dwarf_Die *die) return cu->files->info[idx].name; } OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c index 80fae6c9..6b31eebe 100644 --- a/libdw/dwarf_decl_line.c +++ b/libdw/dwarf_decl_line.c @@ -37,13 +37,13 @@ #include "libdwP.h" +NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int dwarf_decl_line (Dwarf_Die *func, int *linep) { return __libdw_attr_intval (func, linep, DW_AT_decl_line); } OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int internal_function diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c index f10e7642..77bd58c2 100644 --- a/libdw/dwarf_srclang.c +++ b/libdw/dwarf_srclang.c @@ -35,6 +35,7 @@ #include "libdwP.h" +NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) int dwarf_srclang (Dwarf_Die *die) { @@ -45,6 +46,5 @@ dwarf_srclang (Dwarf_Die *die) (die, DW_AT_language, &attr_mem), &value) == 0 ? (int) value : -1; } -INTDEF (dwarf_srclang) +NEW_INTDEF (dwarf_srclang) OLD_VERSION (dwarf_srclang, ELFUTILS_0.122) -NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index 1abee0e8..5f7fb4ed 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,8 @@ +2021-02-14 Alexander Miller + + * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before + definition. + 2021-09-06 Dmitry V. Levin * dwelf_strtab.c (dwelf_strtab_init): Remove cast of calloc return diff --git a/libdwelf/dwelf_elf_begin.c b/libdwelf/dwelf_elf_begin.c index c7d63a1c..c3cfe633 100644 --- a/libdwelf/dwelf_elf_begin.c +++ b/libdwelf/dwelf_elf_begin.c @@ -36,6 +36,7 @@ #include +NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) Elf * dwelf_elf_begin (int fd) { @@ -61,4 +62,3 @@ dwelf_elf_begin (int fd) return NULL; } OLD_VERSION (dwelf_elf_begin, ELFUTILS_0.175) -NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d35674c7..f7e24a21 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,10 @@ +2021-02-14 Alexander Miller + + * core-file.c (dwfl_core_file_report): Move NEW_VERSION before + definition. Replace INTDEF with NEW_INTDEF. + * dwfl_module_build_id.c (dwfl_module_build_id): Likewise. + * dwfl_report_elf.c (dwfl_report_elf): Likewise. + 2021-09-06 Dmitry V. Levin * linux-pid-attach.c (read_cached_memory): Remove cast of malloc diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index a0ccc9b3..4e4c9b3c 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -440,6 +440,7 @@ __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddrp) return false; } +NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) int dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) { @@ -625,8 +626,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) error rather than just nothing found. */ return listed > 0 ? listed : retval; } -INTDEF (dwfl_core_file_report) -NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) +NEW_INTDEF (dwfl_core_file_report) #ifdef SYMBOL_VERSIONING int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf); diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 6ca93761..0c198f23 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -77,6 +77,7 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf *elf) return found_build_id (mod, set, build_id_bits, build_id_len, build_id_vaddr); } +NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) int dwfl_module_build_id (Dwfl_Module *mod, const unsigned char **bits, GElf_Addr *vaddr) @@ -102,8 +103,7 @@ dwfl_module_build_id (Dwfl_Module *mod, *vaddr = mod->build_id_vaddr; return mod->build_id_len; } -INTDEF (dwfl_module_build_id) -NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) +NEW_INTDEF (dwfl_module_build_id) #ifdef SYMBOL_VERSIONING COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 9da86698..a5f0e5e5 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -287,6 +287,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, return m; } +NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) Dwfl_Module * dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, GElf_Addr base, bool add_p_vaddr) @@ -322,8 +323,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int fd, return mod; } -INTDEF (dwfl_report_elf) -NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) +NEW_INTDEF (dwfl_report_elf) #ifdef SYMBOL_VERSIONING Dwfl_Module * -- cgit v1.2.1 From 5b21e70216b853065fa2fef34273db5f7dcdc88b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 8 Nov 2021 09:27:51 +0100 Subject: libdw: dwarf_elf_begin should use either plain, dwo or lto DWARF sections. When opening an ELF file that contained a mix of plain, dwo or lto .debug sections the result could be confusing. Add a check to pick just the plain .debug sections, or the .dwo sections or the .gnu.debuglto_.debug sections (in that order of preference). That way there is always a consistent set. https://sourceware.org/bugzilla/show_bug.cgi?id=27367 Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 9 ++++ libdw/dwarf_begin_elf.c | 83 +++++++++++++++++++++++++++++++++--- libdw/libdwP.h | 12 ++++++ tests/ChangeLog | 8 ++++ tests/Makefile.am | 3 +- tests/run-readelf-fat-lto.sh | 53 +++++++++++++++++++++++ tests/testfile-dwarf5-fat-lto.o.bz2 | Bin 0 -> 3101 bytes 7 files changed, 162 insertions(+), 6 deletions(-) create mode 100755 tests/run-readelf-fat-lto.sh create mode 100644 tests/testfile-dwarf5-fat-lto.o.bz2 diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b3836833..38e6efb2 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,12 @@ +2021-11-08 Mark Wielaard + + * dwarf_begin_elf.c (scn_dwarf_type): New function. + (check_section): Check result->type. + (global_read): First check type. + (scngrp_read): Likewise. + * libdw/libdwP.h (enum dwarf_type): New enumeration. + (struct Dwarf): New field type. + 2021-02-14 Alexander Miller * dwarf_aggregate_size.c (dwarf_aggregate_size): Move NEW_VERSION diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c index 53b44cd4..a48dada6 100644 --- a/libdw/dwarf_begin_elf.c +++ b/libdw/dwarf_begin_elf.c @@ -72,6 +72,31 @@ static const char dwarf_scnnames[IDX_last][19] = }; #define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0])) +static enum dwarf_type +scn_dwarf_type (Dwarf *result, size_t shstrndx, Elf_Scn *scn) +{ + GElf_Shdr shdr_mem; + GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + return TYPE_UNKNOWN; + + const char *scnname = elf_strptr (result->elf, shstrndx, + shdr->sh_name); + if (scnname != NULL) + { + if (startswith (scnname, ".gnu.debuglto_.debug")) + return TYPE_GNU_LTO; + else if (startswith (scnname, ".debug_") || startswith (scnname, ".zdebug_")) + { + size_t len = strlen (scnname); + if (strcmp (scnname + len - 4, ".dwo") == 0) + return TYPE_DWO; + else + return TYPE_PLAIN; + } + } + return TYPE_UNKNOWN; +} static Dwarf * check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) { @@ -116,7 +141,11 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) return NULL; } - /* Recognize the various sections. Most names start with .debug_. */ + /* Recognize the various sections. Most names start with .debug_. + They might be compressed (and start with .z). Or end with .dwo + for split dwarf sections. Or start with .gnu.debuglto_ for + LTO debug sections. We should only use one consistent set at + a time. We prefer PLAIN over DWO over LTO. */ size_t cnt; bool gnu_compressed = false; for (cnt = 0; cnt < ndwarf_scnnames; ++cnt) @@ -127,7 +156,15 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) && (dbglen == scnlen || (scnlen == dbglen + 4 && strstr (scnname, ".dwo") == scnname + dbglen))) - break; + { + if (dbglen == scnlen) + { + if (result->type == TYPE_PLAIN) + break; + } + else if (result->type == TYPE_DWO) + break; + } else if (scnname[0] == '.' && scnname[1] == 'z' && (strncmp (&scnname[2], &dwarf_scnnames[cnt][1], dbglen - 1) == 0 @@ -136,13 +173,27 @@ check_section (Dwarf *result, size_t shstrndx, Elf_Scn *scn, bool inscngrp) && strstr (scnname, ".dwo") == scnname + dbglen + 1)))) { - gnu_compressed = true; - break; + if (scnlen == dbglen + 1) + { + if (result->type == TYPE_PLAIN) + { + gnu_compressed = true; + break; + } + } + else if (result->type <= TYPE_DWO) + { + gnu_compressed = true; + break; + } } else if (scnlen > 14 /* .gnu.debuglto_ prefix. */ && startswith (scnname, ".gnu.debuglto_") && strcmp (&scnname[14], dwarf_scnnames[cnt]) == 0) - break; + { + if (result->type == TYPE_GNU_LTO) + break; + } } if (cnt >= ndwarf_scnnames) @@ -344,6 +395,16 @@ global_read (Dwarf *result, Elf *elf, size_t shstrndx) { Elf_Scn *scn = NULL; + /* First check the type (PLAIN, DWO, LTO) we are looking for. We + prefer PLAIN if available over DWO, over LTO. */ + while ((scn = elf_nextscn (elf, scn)) != NULL && result->type != TYPE_PLAIN) + { + enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn); + if (type > result->type) + result->type = type; + } + + scn = NULL; while (result != NULL && (scn = elf_nextscn (elf, scn)) != NULL) result = check_section (result, shstrndx, scn, false); @@ -388,6 +449,9 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp) represent section indices. The first word is a flag word. */ Elf32_Word *scnidx = (Elf32_Word *) data->d_buf; size_t cnt; + + /* First check the type (PLAIN, DWO, LTO) we are looking for. We + prefer PLAIN if available over DWO, over LTO. */ for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size; ++cnt) { Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]); @@ -401,6 +465,15 @@ scngrp_read (Dwarf *result, Elf *elf, size_t shstrndx, Elf_Scn *scngrp) return NULL; } + enum dwarf_type type = scn_dwarf_type (result, shstrndx, scn); + if (type > result->type) + result->type = type; + } + + for (cnt = 1; cnt * sizeof (Elf32_Word) <= data->d_size && result != NULL; ++cnt) + { + Elf_Scn *scn = elf_getscn (elf, scnidx[cnt]); + assert (scn != NULL); // checked above result = check_section (result, shstrndx, scn, true); if (result == NULL) break; diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 7174ea93..48f3a943 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -145,6 +145,16 @@ enum #include "dwarf_sig8_hash.h" +/* The type of Dwarf object, sorted by preference + (if there is a higher order type, we pick that one over the others). */ +enum dwarf_type + { + TYPE_UNKNOWN = 0, + TYPE_GNU_LTO = 16, + TYPE_DWO = 32, + TYPE_PLAIN = 64, + }; + /* This is the structure representing the debugging state. */ struct Dwarf { @@ -216,6 +226,8 @@ struct Dwarf /* Similar for addrx/constx, which will come from .debug_addr section. */ struct Dwarf_CU *fake_addr_cu; + enum dwarf_type type; + /* Supporting lock for internal memory handling. Ensures threads that have an entry in the mem_tails array are not disturbed by new threads doing allocations for this Dwarf. */ diff --git a/tests/ChangeLog b/tests/ChangeLog index b791cd7f..c5d00027 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2021-11-08 Mark Wielaard + + * Makefile.am (TESTS): Add run-readelf-fat-lto.sh. + (EXTRA_DIST): Add run-readelf-fat-lto.sh and + testfile-dwarf5-fat-lto.o.bz2. + * run-readelf-fat-lto.sh: New test. + * testfile-dwarf5-fat-lto.o.bz2: New test file. + 2021-11-04 Frank Ch. Eigler PR28514 diff --git a/tests/Makefile.am b/tests/Makefile.am index 54b38954..ccc4c052 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -139,7 +139,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ run-low_high_pc.sh run-macro-test.sh run-elf_cntl_gelf_getshdr.sh \ run-test-archive64.sh run-readelf-vmcoreinfo.sh \ run-readelf-mixed-corenote.sh run-dwfllines.sh \ - run-readelf-variant.sh \ + run-readelf-variant.sh run-readelf-fat-lto.sh \ run-dwfl-report-elf-align.sh run-addr2line-test.sh \ run-addr2line-i-test.sh run-addr2line-i-lex-test.sh \ run-addr2line-i-demangle-test.sh run-addr2line-alt-debugpath.sh \ @@ -379,6 +379,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ testfilebazminppc64.bz2 testfilebazminppc64_pl.bz2 \ testfilebazminppc64_plr.bz2 testfilebaztabppc64.bz2 \ run-readelf-variant.sh testfile-ada-variant.bz2 \ + run-readelf-fat-lto.sh testfile-dwarf5-fat-lto.o.bz2 \ run-dwflsyms.sh \ run-unstrip-n.sh testcore-rtlib.bz2 testcore-rtlib-ppc.bz2 \ run-low_high_pc.sh testfile_low_high_pc.bz2 \ diff --git a/tests/run-readelf-fat-lto.sh b/tests/run-readelf-fat-lto.sh new file mode 100755 index 00000000..e03cec3a --- /dev/null +++ b/tests/run-readelf-fat-lto.sh @@ -0,0 +1,53 @@ +. $srcdir/test-subr.sh + +# - s.c +# int main_argc_remaining; +# +# int main_argc() { +# int result = 0; +# if (main_argc_remaining) +# result = 0; +# +# return 0; +# } +# +# gcc -gdwarf-5 -c -o testfile-dwarf5-fat-lto.o -flto -O s.c -g -ffat-lto-objects + +testfiles testfile-dwarf5-fat-lto.o +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ranges -N -U testfile-dwarf5-fat-lto.o << EOF + +DWARF section [26] '.debug_loclists' at offset 0x7db: +Table at Offset 0x0: + + Length: 24 + DWARF version: 5 + Address size: 8 + Segment size: 0 + Offset entries: 0 + CU [ c] base: 000000000000000000 + + Offset: c, Index: 0 + view pair 2, 3 + + Offset: e, Index: 2 + start_length 0x0, 0 + [ 0] lit0 + [ 1] stack_value + end_of_list + + +DWARF section [30] '.debug_rnglists' at offset 0x827: +Table at Offset 0x0: + + Length: 19 + DWARF version: 5 + Address size: 8 + Segment size: 0 + Offset entries: 0 + CU [ c] base: 000000000000000000 + + Offset: c, Index: 0 + start_length 0x0, 8 + end_of_list + +EOF diff --git a/tests/testfile-dwarf5-fat-lto.o.bz2 b/tests/testfile-dwarf5-fat-lto.o.bz2 new file mode 100644 index 00000000..ce3659f4 Binary files /dev/null and b/tests/testfile-dwarf5-fat-lto.o.bz2 differ -- cgit v1.2.1 From dbd44e96f101a81f387ca6ff46910ab74ed7b1dc Mon Sep 17 00:00:00 2001 From: John M Mellor-Crummey Date: Wed, 20 Oct 2021 18:19:38 -0500 Subject: libdw, readelf: Read inlining info in NVIDIA extended line map MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of CUDA 11.2, NVIDIA added extensions to the line map section of CUDA binaries to represent inlined functions. These extensions include - two new fields in a line table row to represent inline information: context, and functionname, - two new DWARF extended opcodes: DW_LNE_NVIDIA_inlined_call, DW_LNE_NVIDIA_set_function_name, - an additional word in the line table header that indicates the offset in the .debug_str function where the function names for this line table begin, and A line table row for an inlined function contains a non-zero "context" value. The “context” field indicates the index of the line table row that serves as the call site for an inlined context. The "functionname" field in a line table row is only meaningful if the "context" field of the row is non-zero. A meaningful "functionname" field contains an index into the .debug_str section relative to the base offset established in the line table header; the position in the .debug_str section indicates the name of the inlined function. These extensions resemble the proposed DWARF extensions (http://dwarfstd.org/ShowIssue.php?issue=140906.1) by Cary Coutant, but are not identical. This commit integrates support for handling NVIDIA's extended line maps into elfutil's libdw library, by adding two functions dwarf_linecontext and dwarf_linefunctionname, and the readelf --debug-dump=line command line utility. Signed-off-by: John M Mellor-Crummey Signed-off-by: Mark Wielaard --- ChangeLog | 4 + NEWS | 5 + libdw/ChangeLog | 19 +++ libdw/Makefile.am | 1 + libdw/dwarf.h | 4 + libdw/dwarf_getsrclines.c | 36 +++++- libdw/dwarf_linecontext.c | 45 ++++++++ libdw/dwarf_linefunctionname.c | 52 +++++++++ libdw/libdw.h | 9 ++ libdw/libdw.map | 6 + libdw/libdwP.h | 3 + src/ChangeLog | 6 + src/readelf.c | 62 ++++++++++ tests/.gitignore | 1 + tests/ChangeLog | 13 +++ tests/Makefile.am | 5 + tests/nvidia_extended_linemap_libdw.c | 166 +++++++++++++++++++++++++++ tests/run-nvidia-extended-linemap-libdw.sh | 60 ++++++++++ tests/run-nvidia-extended-linemap-readelf.sh | 120 +++++++++++++++++++ tests/testfile_nvidia_linemap.bz2 | Bin 0 -> 2365 bytes 20 files changed, 615 insertions(+), 2 deletions(-) create mode 100644 libdw/dwarf_linecontext.c create mode 100644 libdw/dwarf_linefunctionname.c create mode 100644 tests/nvidia_extended_linemap_libdw.c create mode 100755 tests/run-nvidia-extended-linemap-libdw.sh create mode 100755 tests/run-nvidia-extended-linemap-readelf.sh create mode 100644 tests/testfile_nvidia_linemap.bz2 diff --git a/ChangeLog b/ChangeLog index 6255fe61..d4b89f9c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-09-03 John Mellor-Crummey + + * NEWS: Read inlining info in NVIDIA extended line map + 2021-08-10 Adrian Ratiu * configure.ac (AC_CACHE_CHECK): Rework std=gnu99 check to allow clang. diff --git a/NEWS b/NEWS index b812b743..897b391d 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,11 @@ debuginfod: Supply extra HTTP response headers, describing archive/file Limit the duration of groom ops roughly to rescan (-t) times. Several other performance improvements & prometheus metrics. +libdw: Support for the NVIDIA Cuda line map extensions. + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name + are defined in dwarf.h. New functions dwarf_linecontext and + dwarf_linefunctionname + Version 0.185 debuginfod-client: Simplify curl handle reuse so downloads which diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 38e6efb2..ca742e6b 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,22 @@ +2021-10-20 John M Mellor-Crummey + + * dwarf_linecontext.c: New file. + * dwarf_linefunctionname.c: Likewise. + * Makefile.am (libdw_a_SOURCES): Add dwarf_linecontext.c and + dwarf_linefunctionname.c + * dwarf.h: Add DW_LNE_NVIDIA_inlined_call and + DW_LNE_NVIDIA_set_function_name. + * dwarf_getsrclines.c (struct line_state): Add context and + function_name fields. + (add_new_line): Set context and function_name. + (MAX_STACK_LINES): Reduce to MAX_STACK_ALLOC / 2. + (read_srclines): Initialize context and function_name. Try to + read debug_str_offset if available. Handle + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name. + * libdw.h (dwarf_linecontext): New declaration. + (dwarf_linefunctionname): Likewise. + * libdw.map (ELFUTILS_0.186): New section. + 2021-11-08 Mark Wielaard * dwarf_begin_elf.c (scn_dwarf_type): New function. diff --git a/libdw/Makefile.am b/libdw/Makefile.am index 6b7834af..4fda33bd 100644 --- a/libdw/Makefile.am +++ b/libdw/Makefile.am @@ -63,6 +63,7 @@ libdw_a_SOURCES = dwarf_begin.c dwarf_begin_elf.c dwarf_end.c dwarf_getelf.c \ dwarf_linesrc.c dwarf_lineno.c dwarf_lineaddr.c \ dwarf_linecol.c dwarf_linebeginstatement.c \ dwarf_lineendsequence.c dwarf_lineblock.c \ + dwarf_linecontext.c dwarf_linefunctionname.c \ dwarf_lineprologueend.c dwarf_lineepiloguebegin.c \ dwarf_lineisa.c dwarf_linediscriminator.c \ dwarf_lineop_index.c dwarf_line_file.c \ diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 19a4be96..3ce7f236 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -844,6 +844,10 @@ enum DW_LNE_set_discriminator = 4, DW_LNE_lo_user = 128, + + DW_LNE_NVIDIA_inlined_call = 144, + DW_LNE_NVIDIA_set_function_name = 145, + DW_LNE_hi_user = 255 }; diff --git a/libdw/dwarf_getsrclines.c b/libdw/dwarf_getsrclines.c index 8fc48e1d..2c1d7a40 100644 --- a/libdw/dwarf_getsrclines.c +++ b/libdw/dwarf_getsrclines.c @@ -93,6 +93,8 @@ struct line_state struct linelist *linelist; size_t nlinelist; unsigned int end_sequence; + unsigned int context; + unsigned int function_name; }; static inline void @@ -139,6 +141,8 @@ add_new_line (struct line_state *state, struct linelist *new_line) SET (epilogue_begin); SET (isa); SET (discriminator); + SET (context); + SET (function_name); #undef SET @@ -161,7 +165,7 @@ read_srclines (Dwarf *dbg, the stack. Stack allocate some entries, only dynamically malloc when more than MAX. */ #define MAX_STACK_ALLOC 4096 -#define MAX_STACK_LINES MAX_STACK_ALLOC +#define MAX_STACK_LINES (MAX_STACK_ALLOC / 2) #define MAX_STACK_FILES (MAX_STACK_ALLOC / 4) #define MAX_STACK_DIRS (MAX_STACK_ALLOC / 16) @@ -180,7 +184,9 @@ read_srclines (Dwarf *dbg, .prologue_end = false, .epilogue_begin = false, .isa = 0, - .discriminator = 0 + .discriminator = 0, + .context = 0, + .function_name = 0 }; /* The dirs normally go on the stack, but if there are too many @@ -648,6 +654,13 @@ read_srclines (Dwarf *dbg, } } + unsigned int debug_str_offset = 0; + if (unlikely (linep == header_start + header_length - 4)) + { + /* CUBINs contain an unsigned 4-byte offset */ + debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep); + } + /* Consistency check. */ if (unlikely (linep != header_start + header_length)) { @@ -753,6 +766,8 @@ read_srclines (Dwarf *dbg, state.epilogue_begin = false; state.isa = 0; state.discriminator = 0; + state.context = 0; + state.function_name = 0; break; case DW_LNE_set_address: @@ -831,6 +846,23 @@ read_srclines (Dwarf *dbg, get_uleb128 (state.discriminator, linep, lineendp); break; + case DW_LNE_NVIDIA_inlined_call: + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.context, linep, lineendp); + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.function_name, linep, lineendp); + state.function_name += debug_str_offset; + break; + + case DW_LNE_NVIDIA_set_function_name: + if (unlikely (linep >= lineendp)) + goto invalid_data; + get_uleb128 (state.function_name, linep, lineendp); + state.function_name += debug_str_offset; + break; + default: /* Unknown, ignore it. */ if (unlikely ((size_t) (lineendp - (linep - 1)) < len)) diff --git a/libdw/dwarf_linecontext.c b/libdw/dwarf_linecontext.c new file mode 100644 index 00000000..84572e22 --- /dev/null +++ b/libdw/dwarf_linecontext.c @@ -0,0 +1,45 @@ +/* Return context in line. + This file is part of elfutils. + Written by John Mellor-Crummey , 2021. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "libdwP.h" + + +Dwarf_Line* +dwarf_linecontext (Dwarf_Lines* lines, Dwarf_Line *line) +{ + if (lines == NULL || line == NULL) + return NULL; + if (line->context == 0 || line->context >= lines->nlines) + return NULL; + + return lines->info + (line->context - 1); +} diff --git a/libdw/dwarf_linefunctionname.c b/libdw/dwarf_linefunctionname.c new file mode 100644 index 00000000..e194d212 --- /dev/null +++ b/libdw/dwarf_linefunctionname.c @@ -0,0 +1,52 @@ +/* Return function name in line. + This file is part of elfutils. + Written by John Mellor-Crummey , 2021. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include "libdwP.h" + + +const char * +dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line) +{ + if (dbg == NULL || line == NULL) + return NULL; + if (line->context == 0) + return NULL; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + if (str_data == NULL || line->function_name >= str_data->d_size + || memchr (str_data->d_buf + line->function_name, '\0', + str_data->d_size - line->function_name) == NULL) + return NULL; + + return (char *) str_data->d_buf + line->function_name; +} diff --git a/libdw/libdw.h b/libdw/libdw.h index 77174d28..64d1689a 100644 --- a/libdw/libdw.h +++ b/libdw/libdw.h @@ -701,6 +701,15 @@ extern int dwarf_linediscriminator (Dwarf_Line *line, unsigned int *discp) extern const char *dwarf_linesrc (Dwarf_Line *line, Dwarf_Word *mtime, Dwarf_Word *length); +/* Return the caller of this line if inlined. If not inlined, + return NULL. */ +extern Dwarf_Line *dwarf_linecontext (Dwarf_Lines *lines, Dwarf_Line *line); + +/* Return the function name in this line record. If this line is + inlined, this is the name of the function that was inlined. If this line + is not inlined, return NULL. */ +extern const char *dwarf_linefunctionname (Dwarf *dbg, Dwarf_Line *line); + /* Return file information. The returned string is NULL when an error occurred, or the file path. The file path is either absolute or relative to the compilation directory. See dwarf_decl_file. */ diff --git a/libdw/libdw.map b/libdw/libdw.map index 8ab0a2a0..4f530378 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -360,3 +360,9 @@ ELFUTILS_0.177 { # presume that NULL is only returned on error (otherwise ELF_K_NONE). dwelf_elf_begin; } ELFUTILS_0.175; + +ELFUTILS_0.186 { + global: + dwarf_linecontext; + dwarf_linefunctionname; +} ELFUTILS_0.177; diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 48f3a943..360ad01a 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -303,6 +303,9 @@ struct Dwarf_Line_s unsigned int op_index:8; unsigned int isa:8; unsigned int discriminator:24; + /* These are currently only used for the NVIDIA extensions. */ + unsigned int context; + unsigned int function_name; }; struct Dwarf_Lines_s diff --git a/src/ChangeLog b/src/ChangeLog index 316bcb6d..05b2522d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2021-10-20 John M Mellor-Crummey + + * readelf.c (print_debug_line_section): Try to read + debug_str_offset if available. Handle DW_LNE_NVIDIA_inlined_call + and DW_LNE_NVIDIA_set_function_name. + 2021-10-06 Mark Wielaard * elflint.c (check_sections): Don't dereference databits if bad. diff --git a/src/readelf.c b/src/readelf.c index 3a199068..c10038e3 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -8478,6 +8478,8 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, header_length = read_8ubyte_unaligned_inc (dbg, linep); } + const unsigned char *header_start = linep; + /* Next the minimum instruction length. */ if ((size_t) (lineendp - linep) < 1) goto invalid_data; @@ -8761,6 +8763,13 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, ++linep; } + unsigned int debug_str_offset = 0; + if (unlikely (linep == header_start + header_length - 4)) + { + /* CUBINs contain an unsigned 4-byte offset */ + debug_str_offset = read_4ubyte_unaligned_inc (dbg, linep); + } + if (linep == lineendp) { puts (_("\nNo line number statements.")); @@ -8909,6 +8918,59 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr, printf (_(" set discriminator to %u\n"), u128); break; + case DW_LNE_NVIDIA_inlined_call: + { + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int context; + get_uleb128 (context, linep, lineendp); + + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int function_name; + get_uleb128 (function_name, linep, lineendp); + function_name += debug_str_offset; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + char *function_str; + if (str_data == NULL || function_name >= str_data->d_size + || memchr (str_data->d_buf + function_name, '\0', + str_data->d_size - function_name) == NULL) + function_str = "???"; + else + function_str = (char *) str_data->d_buf + function_name; + + printf (_(" set inlined context %u," + " function name %s (0x%x)\n"), + context, function_str, function_name); + break; + } + + case DW_LNE_NVIDIA_set_function_name: + { + if (unlikely (linep >= lineendp)) + goto invalid_data; + + unsigned int function_name; + get_uleb128 (function_name, linep, lineendp); + function_name += debug_str_offset; + + Elf_Data *str_data = dbg->sectiondata[IDX_debug_str]; + char *function_str; + if (str_data == NULL || function_name >= str_data->d_size + || memchr (str_data->d_buf + function_name, '\0', + str_data->d_size - function_name) == NULL) + function_str = "???"; + else + function_str = (char *) str_data->d_buf + function_name; + + printf (_(" set function name %s (0x%x)\n"), + function_str, function_name); + } + break; + default: /* Unknown, ignore it. */ puts (_(" unknown opcode")); diff --git a/tests/.gitignore b/tests/.gitignore index d0e83da2..99d04819 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -85,6 +85,7 @@ /next-files /next-lines /next_cfi +/nvidia_extended_linemap_libdw /peel_type /rdwrmmap /read_unaligned diff --git a/tests/ChangeLog b/tests/ChangeLog index c5d00027..db8b13bd 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,16 @@ +2021-10-20 John M Mellor-Crummey + + * nvidia_extended_linemap_libdw.c: New file. + * run-nvidia-extended-linemap-libdw.sh: New test. + * run-nvidia-extended-linemap-readelf.sh: Likewise. + * testfile_nvidia_linemap.bz2: New test file. + * .gitignore: Add nvidia_extended_linemap_libdw. + * Makefile.am (check_PROGRAMS): Add nvidia_extended_linemap_libdw. + (TESTS): Add run-nvidia-extended-linemap-libdw.sh and + run-nvidia-extended-linemap-readelf.sh + (EXTRA_DIST): Likewise and testfile_nvidia_linemap.bz2. + (nvidia_extended_linemap_libdw_LDADD): New variable. + 2021-11-08 Mark Wielaard * Makefile.am (TESTS): Add run-readelf-fat-lto.sh. diff --git a/tests/Makefile.am b/tests/Makefile.am index ccc4c052..6d3e75af 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -61,6 +61,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ dwelf_elf_e_machine_string \ getphdrnum leb128 read_unaligned \ msg_tst system-elf-libelf-test \ + nvidia_extended_linemap_libdw \ $(asm_TESTS) asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ @@ -189,6 +190,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh newfile test-nlist \ leb128 read_unaligned \ msg_tst system-elf-libelf-test \ $(asm_TESTS) run-disasm-bpf.sh run-low_high_pc-dw-form-indirect.sh \ + run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ run-readelf-dw-form-indirect.sh run-strip-largealign.sh if !BIARCH @@ -566,6 +568,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-getphdrnum.sh testfile-phdrs.elf.bz2 \ run-test-includes.sh run-low_high_pc-dw-form-indirect.sh \ run-readelf-dw-form-indirect.sh testfile-dw-form-indirect.bz2 \ + run-nvidia-extended-linemap-libdw.sh run-nvidia-extended-linemap-readelf.sh \ + testfile_nvidia_linemap.bz2 \ testfile-largealign.o.bz2 run-strip-largealign.sh @@ -739,6 +743,7 @@ dwelf_elf_e_machine_string_LDADD = $(libelf) $(libdw) getphdrnum_LDADD = $(libelf) $(libdw) leb128_LDADD = $(libelf) $(libdw) read_unaligned_LDADD = $(libelf) $(libdw) +nvidia_extended_linemap_libdw_LDADD = $(libelf) $(libdw) # We want to test the libelf header against the system elf.h header. # Don't include any -I CPPFLAGS. Except when we install our own elf.h. diff --git a/tests/nvidia_extended_linemap_libdw.c b/tests/nvidia_extended_linemap_libdw.c new file mode 100644 index 00000000..20d8d404 --- /dev/null +++ b/tests/nvidia_extended_linemap_libdw.c @@ -0,0 +1,166 @@ +/* Inspect nvidia extended linemap with dwarf_next_lines. + Copyright (C) 2002, 2004, 2018 Red Hat, Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include ELFUTILS_HEADER(dw) +#include +#include +#include + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); + close (fd); + continue; + } + + Dwarf_Off off; + Dwarf_Off next_off = 0; + Dwarf_CU *cu = NULL; + Dwarf_Lines *lb; + size_t nlb; + int res; + while ((res = dwarf_next_lines (dbg, off = next_off, &next_off, &cu, + NULL, NULL, &lb, &nlb)) == 0) + { + printf ("off = %" PRIu64 "\n", off); + printf (" %zu lines\n", nlb); + + for (size_t i = 0; i < nlb; ++i) + { + Dwarf_Line *l = dwarf_onesrcline (lb, i); + if (l == NULL) + { + printf ("%s: cannot get individual line\n", argv[cnt]); + result = 1; + break; + } + + Dwarf_Addr addr; + if (dwarf_lineaddr (l, &addr) != 0) + addr = 0; + const char *file = dwarf_linesrc (l, NULL, NULL); + int line; + if (dwarf_lineno (l, &line) != 0) + line = 0; + + printf ("%" PRIx64 ": %s:%d:", (uint64_t) addr, + file ?: "???", line); + + /* Getting the file path through the Dwarf_Files should + result in the same path. */ + Dwarf_Files *files; + size_t idx; + if (dwarf_line_file (l, &files, &idx) != 0) + { + printf ("%s: cannot get file from line (%zd): %s\n", + argv[cnt], i, dwarf_errmsg (-1)); + result = 1; + break; + } + const char *path = dwarf_filesrc (files, idx, NULL, NULL); + if ((path == NULL && file != NULL) + || (path != NULL && file == NULL) + || (strcmp (file, path) != 0)) + { + printf ("%s: line %zd srcline (%s) != file srcline (%s)\n", + argv[cnt], i, file ?: "???", path ?: "???"); + result = 1; + break; + } + + int column; + if (dwarf_linecol (l, &column) != 0) + column = 0; + if (column >= 0) + printf ("%d:", column); + + bool is_stmt; + if (dwarf_linebeginstatement (l, &is_stmt) != 0) + is_stmt = false; + bool end_sequence; + if (dwarf_lineendsequence (l, &end_sequence) != 0) + end_sequence = false; + bool basic_block; + if (dwarf_lineblock (l, &basic_block) != 0) + basic_block = false; + bool prologue_end; + if (dwarf_lineprologueend (l, &prologue_end) != 0) + prologue_end = false; + bool epilogue_begin; + if (dwarf_lineepiloguebegin (l, &epilogue_begin) != 0) + epilogue_begin = false; + printf (" is_stmt:%s, end_seq:%s, bb:%s, prologue:%s, epilogue:%s\n", + is_stmt ? "yes" : "no", end_sequence ? "yes" : "no", + basic_block ? "yes" : "no", prologue_end ? "yes" : "no", + epilogue_begin ? "yes" : "no"); + + Dwarf_Line* callee_context = l; + Dwarf_Line* caller_context = dwarf_linecontext (lb, l); + unsigned int depth = 0; + while (caller_context != NULL) + { + depth++; + for (unsigned int x = 0; x < depth; x++) + printf (" "); + + const char *inlined_file = dwarf_linesrc (caller_context, + NULL, NULL); + int inlined_line; + if (dwarf_lineno (caller_context, &inlined_line) != 0) + inlined_line = 0; + + printf ("%s inlined at %s:%d\n", + dwarf_linefunctionname(dbg, callee_context), + inlined_file ?: "???", inlined_line); + + callee_context = caller_context; + caller_context = dwarf_linecontext (lb, callee_context); + } + } + } + + if (res < 0) + { + printf ("dwarf_next_lines failed: %s\n", dwarf_errmsg (-1)); + result = 1; + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/run-nvidia-extended-linemap-libdw.sh b/tests/run-nvidia-extended-linemap-libdw.sh new file mode 100755 index 00000000..d1df2cf3 --- /dev/null +++ b/tests/run-nvidia-extended-linemap-libdw.sh @@ -0,0 +1,60 @@ +# Copyright (C) 2011 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/test-subr.sh + +# NOTE: +# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2 +# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm +# cuobjdump -xelf all main +# mv main.sm_80.cubin testfile_nvidia_linemap + +testfiles testfile_nvidia_linemap +testrun_compare ${abs_top_builddir}/tests/nvidia_extended_linemap_libdw testfile_nvidia_linemap << EOF +off = 0 + 18 lines +0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +10: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:26:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +40: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:27:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +90: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:25:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +a0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28 +150: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:28 +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +1e0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +220: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:9:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + foo inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:6 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2b0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +2f0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:18:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +330: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:19:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no + _Z1aPiS_S_ inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/bar.h:8 + bar inlined at /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:31 +3c0: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +480: /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4/main.cu:33:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +EOF diff --git a/tests/run-nvidia-extended-linemap-readelf.sh b/tests/run-nvidia-extended-linemap-readelf.sh new file mode 100755 index 00000000..1fa9b7b4 --- /dev/null +++ b/tests/run-nvidia-extended-linemap-readelf.sh @@ -0,0 +1,120 @@ +# Copyright (C) 2011 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/test-subr.sh + +# NOTE: +# the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2 +# nvcc -o main main.cu -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80 -lcudart -lcuda -lstdc++ -lm +# cuobjdump -xelf all main +# mv main.sm_80.cubin testfile_nvidia_linemap + +testfiles testfile_nvidia_linemap +testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_nvidia_linemap << EOF + +DWARF section [ 5] '.debug_line' at offset 0x3e0: + +Table at offset 0: + + Length: 253 + DWARF version: 2 + Prologue length: 111 + Address size: 8 + Segment selector size: 0 + Min instruction length: 1 + Max operations per instruction: 1 + Initial value if 'is_stmt': 1 + Line base: -5 + Line range: 14 + Opcode base: 10 + +Opcodes: + [1] 0 arguments + [2] 1 argument + [3] 1 argument + [4] 1 argument + [5] 1 argument + [6] 0 arguments + [7] 0 arguments + [8] 0 arguments + [9] 1 argument + +Directory table: + /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4 + +File name table: + Entry Dir Time Size Name + 1 1 1626104146 1819 main.cu + 2 1 1626104111 211 bar.h + +Line number statements: + [ 79] extended opcode 2: set address to 0 + [ 84] set file to 1 + [ 86] advance line by constant 24 to 25 + [ 88] copy + [ 89] special opcode 240: address+16 = 0x10 , line+1 = 26 + [ 8a] advance line by constant 1 to 27 + [ 8c] advance address by 48 to 0x40 + [ 8e] copy + [ 8f] advance line by constant -2 to 25 + [ 91] advance address by 80 to 0x90 + [ 94] copy + [ 95] special opcode 242: address+16 = 0xa0 , line+3 = 28 + [ 96] advance address by 96 to 0x100 + [ 99] copy + [ 9a] extended opcode 144: set inlined context 6, function name foo (0x0) + [ 9f] advance line by constant -20 to 8 + [ a1] copy + [ a2] advance line by constant 1 to 9 + [ a4] advance address by 80 to 0x150 + [ a7] copy + [ a8] extended opcode 144: set inlined context 0, function name foo (0x0) + [ ad] advance line by constant 22 to 31 + [ af] advance address by 144 to 0x1e0 + [ b2] copy + [ b3] set file to 2 + [ b5] extended opcode 144: set inlined context 9, function name bar (0x4) + [ ba] advance line by constant -25 to 6 + [ bc] copy + [ bd] set file to 1 + [ bf] extended opcode 144: set inlined context 10, function name foo (0x0) + [ c4] advance line by constant 2 to 8 + [ c6] copy + [ c7] advance line by constant 1 to 9 + [ c9] advance address by 64 to 0x220 + [ cc] copy + [ cd] set file to 2 + [ cf] extended opcode 144: set inlined context 9, function name bar (0x4) + [ d4] advance line by constant -2 to 7 + [ d6] advance address by 144 to 0x2b0 + [ d9] copy + [ da] advance line by constant 1 to 8 + [ dc] advance address by 64 to 0x2f0 + [ df] copy + [ e0] set file to 1 + [ e2] extended opcode 144: set inlined context 14, function name _Z1aPiS_S_ (0x8) + [ e7] advance line by constant 10 to 18 + [ e9] copy + [ ea] advance line by constant 1 to 19 + [ ec] advance address by 64 to 0x330 + [ ef] copy + [ f0] extended opcode 144: set inlined context 0, function name foo (0x0) + [ f5] advance line by constant 14 to 33 + [ f7] advance address by 144 to 0x3c0 + [ fa] copy + [ fb] advance address by 192 to 0x480 + [ fe] extended opcode 1: end of sequence +EOF diff --git a/tests/testfile_nvidia_linemap.bz2 b/tests/testfile_nvidia_linemap.bz2 new file mode 100644 index 00000000..8a6d09fb Binary files /dev/null and b/tests/testfile_nvidia_linemap.bz2 differ -- cgit v1.2.1 From cc913c824f4031c8f499d6b80c91b8ed66dd7c5d Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Fri, 5 Nov 2021 22:26:35 -0400 Subject: PR28430: debuginfod: support --passive mode Add support for a limited mode for debuginfod that uses a pure read-only sqlite index. This mode is useful for load spreading based on naively shared or replicated databases. Signed-off-by: Frank Ch. Eigler --- NEWS | 1 + debuginfod/ChangeLog | 8 ++ debuginfod/debuginfod.cxx | 185 ++++++++++++++++++----------- doc/ChangeLog | 5 + doc/debuginfod.8 | 54 ++++++--- tests/ChangeLog | 6 + tests/Makefile.am | 4 +- tests/run-debuginfod-extraction-passive.sh | 77 ++++++++++++ 8 files changed, 253 insertions(+), 87 deletions(-) create mode 100755 tests/run-debuginfod-extraction-passive.sh diff --git a/NEWS b/NEWS index 897b391d..e553b6e1 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,7 @@ debuginfod: Supply extra HTTP response headers, describing archive/file Add -r option to use -I/-X regexes for grooming stale files. Protect against wasted CPU from duplicate concurrent requests. Limit the duration of groom ops roughly to rescan (-t) times. + Add --passive mode for serving from read-only database. Several other performance improvements & prometheus metrics. libdw: Support for the NVIDIA Cuda line map extensions. diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 15b2ba40..f06d3ee3 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2021-11-05 Frank Ch. Eigler + + PR28430 + * debuginfod.cxx (parse_opt): Add "--passive" flag. Complain + about inconsistent flags. + (main): In passive mode, suppress scan/groom/traverse threads and + other read-write database ops. + 2021-11-04 Frank Ch. Eigler PR28514 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 45981d8d..521cb529 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -376,6 +376,8 @@ static const struct argp_option options[] = prefetch cache.", 0}, #define ARGP_KEY_FORWARDED_TTL_LIMIT 0x1007 {"forwarded-ttl-limit", ARGP_KEY_FORWARDED_TTL_LIMIT, "NUM", 0, "Limit of X-Forwarded-For hops, default 8.", 0}, +#define ARGP_KEY_PASSIVE 0x1008 + { "passive", ARGP_KEY_PASSIVE, NULL, 0, "Do not scan or groom, read-only database.", 0 }, { NULL, 0, NULL, 0, NULL, 0 }, }; @@ -425,6 +427,7 @@ static long fdcache_prefetch_mbs; static long fdcache_prefetch_fds; static unsigned forwarded_ttl_limit = 8; static string tmpdir; +static bool passive_p = false; static void set_metric(const string& key, double value); // static void inc_metric(const string& key); @@ -524,36 +527,56 @@ parse_opt (int key, char *arg, } break; case 'L': + if (passive_p) + argp_failure(state, 1, EINVAL, "-L option inconsistent with passive mode"); traverse_logical = true; break; - case 'D': extra_ddl.push_back(string(arg)); break; + case 'D': + if (passive_p) + argp_failure(state, 1, EINVAL, "-D option inconsistent with passive mode"); + extra_ddl.push_back(string(arg)); + break; case 't': + if (passive_p) + argp_failure(state, 1, EINVAL, "-t option inconsistent with passive mode"); rescan_s = (unsigned) atoi(arg); break; case 'g': + if (passive_p) + argp_failure(state, 1, EINVAL, "-g option inconsistent with passive mode"); groom_s = (unsigned) atoi(arg); break; case 'G': + if (passive_p) + argp_failure(state, 1, EINVAL, "-G option inconsistent with passive mode"); maxigroom = true; break; case 'c': + if (passive_p) + argp_failure(state, 1, EINVAL, "-c option inconsistent with passive mode"); concurrency = (unsigned) atoi(arg); if (concurrency < 1) concurrency = 1; break; case 'I': // NB: no problem with unconditional free here - an earlier failed regcomp would exit program + if (passive_p) + argp_failure(state, 1, EINVAL, "-I option inconsistent with passive mode"); regfree (&file_include_regex); rc = regcomp (&file_include_regex, arg, REG_EXTENDED|REG_NOSUB); if (rc != 0) argp_failure(state, 1, EINVAL, "regular expression"); break; case 'X': + if (passive_p) + argp_failure(state, 1, EINVAL, "-X option inconsistent with passive mode"); regfree (&file_exclude_regex); rc = regcomp (&file_exclude_regex, arg, REG_EXTENDED|REG_NOSUB); if (rc != 0) argp_failure(state, 1, EINVAL, "regular expression"); break; case 'r': + if (passive_p) + argp_failure(state, 1, EINVAL, "-r option inconsistent with passive mode"); regex_groom = true; break; case ARGP_KEY_FDCACHE_FDS: @@ -586,6 +609,15 @@ parse_opt (int key, char *arg, if ( fdcache_prefetch_mbs < 0) argp_failure(state, 1, EINVAL, "fdcache prefetch mbs"); break; + case ARGP_KEY_PASSIVE: + passive_p = true; + if (source_paths.size() > 0 + || maxigroom + || extra_ddl.size() > 0 + || traverse_logical) + // other conflicting options tricky to check + argp_failure(state, 1, EINVAL, "inconsistent options with passive mode"); + break; // case 'h': argp_state_help (state, stderr, ARGP_HELP_LONG|ARGP_HELP_EXIT_OK); default: return ARGP_ERR_UNKNOWN; } @@ -3732,22 +3764,25 @@ main (int argc, char *argv[]) (void) signal (SIGUSR2, sigusr2_handler); // end-user /* Get database ready. */ - rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE - |SQLITE_OPEN_URI - |SQLITE_OPEN_PRIVATECACHE - |SQLITE_OPEN_CREATE - |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ - NULL); - if (rc == SQLITE_CORRUPT) - { - (void) unlink (db_path.c_str()); - error (EXIT_FAILURE, 0, - "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); - } - else if (rc) - { - error (EXIT_FAILURE, 0, - "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + if (! passive_p) + { + rc = sqlite3_open_v2 (db_path.c_str(), &db, (SQLITE_OPEN_READWRITE + |SQLITE_OPEN_URI + |SQLITE_OPEN_PRIVATECACHE + |SQLITE_OPEN_CREATE + |SQLITE_OPEN_FULLMUTEX), /* thread-safe */ + NULL); + if (rc == SQLITE_CORRUPT) + { + (void) unlink (db_path.c_str()); + error (EXIT_FAILURE, 0, + "cannot open %s, deleted database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } + else if (rc) + { + error (EXIT_FAILURE, 0, + "cannot open %s, consider deleting database: %s", db_path.c_str(), sqlite3_errmsg(db)); + } } // open the readonly query variant @@ -3765,8 +3800,10 @@ main (int argc, char *argv[]) } - obatched(clog) << "opened database " << db_path << endl; + obatched(clog) << "opened database " << db_path + << (db?" rw":"") << (dbq?" ro":"") << endl; obatched(clog) << "sqlite version " << sqlite3_version << endl; + obatched(clog) << "service mode " << (passive_p ? "passive":"active") << endl; // add special string-prefix-similarity function used in rpm sref/sdef resolution rc = sqlite3_create_function(dbq, "sharedprefix", 2, SQLITE_UTF8, NULL, @@ -3775,13 +3812,16 @@ main (int argc, char *argv[]) error (EXIT_FAILURE, 0, "cannot create sharedprefix function: %s", sqlite3_errmsg(dbq)); - if (verbose > 3) - obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl; - rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL); - if (rc != SQLITE_OK) + if (! passive_p) { - error (EXIT_FAILURE, 0, - "cannot run database schema ddl: %s", sqlite3_errmsg(db)); + if (verbose > 3) + obatched(clog) << "ddl: " << DEBUGINFOD_SQLITE_DDL << endl; + rc = sqlite3_exec (db, DEBUGINFOD_SQLITE_DDL, NULL, NULL, NULL); + if (rc != SQLITE_OK) + { + error (EXIT_FAILURE, 0, + "cannot run database schema ddl: %s", sqlite3_errmsg(db)); + } } // Start httpd server threads. Separate pool for IPv4 and IPv6, in @@ -3845,27 +3885,31 @@ main (int argc, char *argv[]) } // run extra -D sql if given - for (auto&& i: extra_ddl) - { - if (verbose > 1) - obatched(clog) << "extra ddl:\n" << i << endl; - rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL); - if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) - error (0, 0, - "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db)); - } - - if (maxigroom) - obatched(clog) << "maxigroomed database" << endl; + if (! passive_p) + for (auto&& i: extra_ddl) + { + if (verbose > 1) + obatched(clog) << "extra ddl:\n" << i << endl; + rc = sqlite3_exec (db, i.c_str(), NULL, NULL, NULL); + if (rc != SQLITE_OK && rc != SQLITE_DONE && rc != SQLITE_ROW) + error (0, 0, + "warning: cannot run database extra ddl %s: %s", i.c_str(), sqlite3_errmsg(db)); + + if (maxigroom) + obatched(clog) << "maxigroomed database" << endl; + } - obatched(clog) << "search concurrency " << concurrency << endl; - obatched(clog) << "rescan time " << rescan_s << endl; + if (! passive_p) + obatched(clog) << "search concurrency " << concurrency << endl; + if (! passive_p) + obatched(clog) << "rescan time " << rescan_s << endl; obatched(clog) << "fdcache fds " << fdcache_fds << endl; obatched(clog) << "fdcache mbs " << fdcache_mbs << endl; obatched(clog) << "fdcache prefetch " << fdcache_prefetch << endl; obatched(clog) << "fdcache tmpdir " << tmpdir << endl; obatched(clog) << "fdcache tmpdir min% " << fdcache_mintmp << endl; - obatched(clog) << "groom time " << groom_s << endl; + if (! passive_p) + obatched(clog) << "groom time " << groom_s << endl; obatched(clog) << "prefetch fds " << fdcache_prefetch_fds << endl; obatched(clog) << "prefetch mbs " << fdcache_prefetch_mbs << endl; obatched(clog) << "forwarded ttl limit " << forwarded_ttl_limit << endl; @@ -3873,7 +3917,7 @@ main (int argc, char *argv[]) if (scan_archives.size()>0) { obatched ob(clog); - auto& o = ob << "scanning archive types "; + auto& o = ob << "accepting archive types "; for (auto&& arch : scan_archives) o << arch.first << "(" << arch.second << ") "; o << endl; @@ -3884,37 +3928,40 @@ main (int argc, char *argv[]) vector all_threads; - pthread_t pt; - rc = pthread_create (& pt, NULL, thread_main_groom, NULL); - if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n"); - else + if (! passive_p) { -#ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "groom"); -#endif - all_threads.push_back(pt); - } - - if (scan_files || scan_archives.size() > 0) - { - rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL); + pthread_t pt; + rc = pthread_create (& pt, NULL, thread_main_groom, NULL); if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n"); + error (EXIT_FAILURE, rc, "cannot spawn thread to groom database\n"); + else + { #ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "traverse"); + (void) pthread_setname_np (pt, "groom"); #endif - all_threads.push_back(pt); + all_threads.push_back(pt); + } - for (unsigned i=0; i 0) { - rc = pthread_create (& pt, NULL, thread_main_scanner, NULL); + rc = pthread_create (& pt, NULL, thread_main_fts_source_paths, NULL); if (rc) - error (EXIT_FAILURE, rc, "cannot spawn thread to scan source files / archives\n"); + error (EXIT_FAILURE, rc, "cannot spawn thread to traverse source paths\n"); #ifdef HAVE_PTHREAD_SETNAME_NP - (void) pthread_setname_np (pt, "scan"); + (void) pthread_setname_np (pt, "traverse"); #endif all_threads.push_back(pt); + + for (unsigned i=0; i + + PR28430 + * debuginfod.8 (--passive): Document new flag & operation mode. + 2021-08-28 Di Chen * debuginfod.8 (-d): Document ":memory:" as in-memory database. diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index fde06bb8..1e56f656 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -74,9 +74,10 @@ all. If no PATH is listed, or none of the scanning options is given, then \fBdebuginfod\fP will simply serve content that it accumulated into -its index in all previous runs, and federate to any upstream -debuginfod servers. - +its index in all previous runs, periodically groom the database, and +federate to any upstream debuginfod servers. In \fIpassive\fP mode, +\fBdebuginfod\fP will only serve content from a read-only index and +federated upstream servers, but will not scan or groom. .SH OPTIONS @@ -122,6 +123,16 @@ testing the magic string ":memory:" can be used to use an one-time memory-only database. The default database file is \%$HOME/.debuginfod.sqlite. +.TP +.B "\-\-passive" +Set the server to passive mode, where it only services webapi +requests, including participating in federation. It performs no +scanning, no grooming, and so only opens the sqlite database +read-only. This way a database can be safely shared between a active +scanner/groomer server and multiple passive ones, thereby sharing +service load. Archive pattern options must still be given, so +debuginfod can recognize file name extensions for unpacking. + .TP .B "\-D SQL" "\-\-ddl=SQL" Execute given sqlite statement after the database is opened and @@ -365,22 +376,22 @@ be helpful to apply tight \-I or \-X regular-expression constraints to exclude files from scanning that you know have no debuginfo-relevant content. -As debuginfod runs, it periodically rescans its target directories, -and any new content found is added to the database. Old content, such -as data for files that have disappeared or that have been replaced -with newer versions is removed at a periodic \fIgrooming\fP pass. -This means that the sqlite files grow fast during initial indexing, -slowly during index rescans, and periodically shrink during grooming. -There is also an optional one-shot \fImaximal grooming\fP pass is -available. It removes information debuginfo-unrelated data from the -archive content index such as file names found in archives ("archive -sdef" records) that are not referred to as source files from any -binaries find in archives ("archive sref" records). This can save -considerable disk space. However, it is slow and temporarily requires -up to twice the database size as free space. Worse: it may result in -missing source-code info if the archive traversals were interrupted, -so that not all source file references were known. Use it rarely to -polish a complete index. +As debuginfod runs in normal \fIactive\fP mode, it periodically +rescans its target directories, and any new content found is added to +the database. Old content, such as data for files that have +disappeared or that have been replaced with newer versions is removed +at a periodic \fIgrooming\fP pass. This means that the sqlite files +grow fast during initial indexing, slowly during index rescans, and +periodically shrink during grooming. There is also an optional +one-shot \fImaximal grooming\fP pass is available. It removes +information debuginfo-unrelated data from the archive content index +such as file names found in archives ("archive sdef" records) that are +not referred to as source files from any binaries find in archives +("archive sref" records). This can save considerable disk space. +However, it is slow and temporarily requires up to twice the database +size as free space. Worse: it may result in missing source-code info +if the archive traversals were interrupted, so that not all source +file references were known. Use it rarely to polish a complete index. You should ensure that ample disk space remains available. (The flood of error messages on -ENOSPC is ugly and nagging. But, like for most @@ -413,6 +424,11 @@ worry about disk space. If a system crash corrupts the database, or you want to force debuginfod to reset and start over, simply erase the sqlite file before restarting debuginfod. +In contrast, in \fIpassive\fP mode, all scanning and grooming is +disabled, and the index database remains read-only. This makes the +database more suitable for sharing between servers or sites with +simple one-way replication, and data management considerations are +generally moot. .SH SECURITY diff --git a/tests/ChangeLog b/tests/ChangeLog index db8b13bd..a59cdd51 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-11-05 Frank Ch. Eigler + + PR28430 + * run-debuginfod-extraction-passive.sh: New test. + * Makefile.am (TESTS, EXTRA_DIST): Add it. + 2021-10-20 John M Mellor-Crummey * nvidia_extended_linemap_libdw.c: New file. diff --git a/tests/Makefile.am b/tests/Makefile.am index 6d3e75af..bfb8b13a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -235,7 +235,8 @@ TESTS += run-debuginfod-dlopen.sh \ run-debuginfod-federation-metrics.sh \ run-debuginfod-percent-escape.sh \ run-debuginfod-x-forwarded-for.sh \ - run-debuginfod-response-headers.sh + run-debuginfod-response-headers.sh \ + run-debuginfod-extraction-passive.sh endif endif @@ -531,6 +532,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-debuginfod-archive-test.sh \ run-debuginfod-percent-escape.sh \ run-debuginfod-response-headers.sh \ + run-debuginfod-extraction-passive.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ diff --git a/tests/run-debuginfod-extraction-passive.sh b/tests/run-debuginfod-extraction-passive.sh new file mode 100755 index 00000000..c2724b58 --- /dev/null +++ b/tests/run-debuginfod-extraction-passive.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x + +mkdir Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=11000 +get_ports + +DB=${PWD}/.debuginfod.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +cp -rvp ${abs_srcdir}/debuginfod-tars Z +tempfiles Z + +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v Z > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 + +wait_ready $PORT1 'ready' 1 + +# Start second passive server with same database +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE --passive -d $DB -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT2 -v > vlog$PORT2 2>&1 & +PID2=$! + +tempfiles vlog$PORT2 +errfiles vlog$PORT2 + +wait_ready $PORT2 'ready' 1 + +# Wait for first server to finish indexing +wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 +wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 +wait_ready $PORT1 'thread_busy{role="scan"}' 0 + +# No similar metrics for the passive server +! (curl http://localhost:$PORT2/metrics | egrep 'role="scan"|role="groom"|role="traverse"') + +# Confirm no active threads +! (ps -q $PID2 -e -L -o '%p %c %a' | egrep 'scan|groom|traverse') + +# Do a random lookup via passive server +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS=http://localhost:$PORT2 ${abs_builddir}/../debuginfod/debuginfod-find debuginfo cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb + +tempfiles $DB* + +kill $PID1 +wait $PID1 +PID1=0 + +kill $PID2 +wait $PID2 +PID2=0 + +exit 0 -- cgit v1.2.1 From 983e86fd89e8bf02f2d27ba5dce5bf078af4ceda Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 10 Nov 2021 16:26:07 +0100 Subject: Prepare for 0.186 Set version to 0.186 Update NEWS and elfutils.spec.in Regenerate po/*.po files Signed-off-by: Mark Wielaard --- ChangeLog | 5 + NEWS | 4 +- config/ChangeLog | 6 +- config/elfutils.spec.in | 23 ++ configure.ac | 2 +- po/ChangeLog | 4 + po/de.po | 817 +++++++++++++++++++++-------------------- po/es.po | 818 +++++++++++++++++++++-------------------- po/ja.po | 953 ++++++++++++++++++++++++++---------------------- po/pl.po | 818 +++++++++++++++++++++-------------------- po/uk.po | 818 +++++++++++++++++++++-------------------- 11 files changed, 2235 insertions(+), 2033 deletions(-) diff --git a/ChangeLog b/ChangeLog index d4b89f9c..d61b21c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2021-11-10 Mark Wielaard + + * configure.ac (AC_INIT): Set version to 0.186. + * NEWS: Add translation item. + 2021-09-03 John Mellor-Crummey * NEWS: Read inlining info in NVIDIA extended line map diff --git a/NEWS b/NEWS index e553b6e1..490932ae 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -Version 0.186 (one after 0.185) +Version 0.186 debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files /etc/debuginfod/*.urls rather than hardcoded into the @@ -22,6 +22,8 @@ libdw: Support for the NVIDIA Cuda line map extensions. are defined in dwarf.h. New functions dwarf_linecontext and dwarf_linefunctionname +translations: Update Japanese translation. + Version 0.185 debuginfod-client: Simplify curl handle reuse so downloads which diff --git a/config/ChangeLog b/config/ChangeLog index bd41654f..acbaaa88 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2021-11-10 Mark Wielaard + + * elfutils.spec.in: Update for 0.186. + 2021-10-03 Frank Ch. Eigler PR27783 @@ -12,7 +16,7 @@ 2021-07-06 Alice Zhang - * debuginfod.sysconfig: Introduce default retry limit. + * debuginfod.sysconfig: Introduce default retry limit. 2021-05-10 Mark Wielaard diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 8f6a8e03..aac0dffc 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -337,6 +337,29 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Wed Nov 10 2021 Mark Wielaard 0.186-1 +- debuginfod-client: Default $DEBUGINFOD_URLS is computed from + drop-in files /etc/debuginfod/*.urls rather than + hardcoded into the /etc/profile.d/debuginfod* + scripts. + Add $DEBUGINFOD_MAXSIZE and $DEBUGINFOD_MAXTIME settings + for skipping large/slow transfers. + Add $DEBUGINFOD_RETRY for retrying aborted lookups. +- debuginfod: Supply extra HTTP response headers, describing + archive/file names that satisfy the requested buildid content. + Support -d :memory: option for in-memory databases. + Protect against loops in federated server configurations. + Add -r option to use -I/-X regexes for grooming stale files. + Protect against wasted CPU from duplicate concurrent requests. + Limit the duration of groom ops roughly to rescan (-t) times. + Add --passive mode for serving from read-only database. + Several other performance improvements & prometheus metrics. +- libdw: Support for the NVIDIA Cuda line map extensions. + DW_LNE_NVIDIA_inlined_call and DW_LNE_NVIDIA_set_function_name + are defined in dwarf.h. New functions dwarf_linecontext and + dwarf_linefunctionname. +- translations: Update Japanese translation. + * Sat May 22 2021 Mark Wielaard 0.185-1 - debuginfod-client: Simplify curl handle reuse so downloads which return an error are retried. diff --git a/configure.ac b/configure.ac index 76563557..ff9581d2 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see . -AC_INIT([elfutils],[0.185],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) +AC_INIT([elfutils],[0.186],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) dnl Workaround for older autoconf < 2.64 m4_ifndef([AC_PACKAGE_URL], diff --git a/po/ChangeLog b/po/ChangeLog index 95a55ed8..afbdc249 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2021-11-10 Mark Wielaard + + * *.po: Update for 0.186. + 2021-07-25 Hayatsu Shunsuke * ja.po: update Japanese translation diff --git a/po/de.po b/po/de.po index a7615810..cb5e011a 100644 --- a/po/de.po +++ b/po/de.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch \n" "Language-Team: German\n" @@ -37,11 +37,6 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format -msgid "cannot allocate memory" -msgstr "konnte Verzeichnis nicht erstellen: %s" - #: lib/printversion.c:40 #, fuzzy, c-format msgid "" @@ -54,8 +49,8 @@ msgstr "" "GARANTIE,\n" "auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "Kein Speicher mehr verfügbar" @@ -646,7 +641,7 @@ msgstr "ungültige Grösse des Quell-Operanden" msgid "invalid size of destination operand" msgstr "ungültige Grösse des Ziel-Operanden" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -734,8 +729,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -866,7 +861,7 @@ msgstr "" msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Verschiedenes:" @@ -1201,194 +1196,194 @@ msgstr "Das Archiv '%s' ist zu groß" msgid "cannot read ELF header of %s(%s): %s" msgstr "\"Konnte ELF-Kopf von %s(%s): %s nicht lesen" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "Programm-Köpfe:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "Programm-Köpfe:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "invalid section header" msgid "section headers" msgstr "ungültiger Abschnitts-Header" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy msgid "section header string table index" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy msgid "could not obtain section header" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy msgid "could not obtain section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Eingabeauswahloptionen:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "Konnte Kernel Module nicht finden" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Ausgabeformat:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Mehr als ein Name der Ausgabedatei angegeben." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "DATEI..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1618,14 +1613,14 @@ msgstr "" msgid "Invalid value '%s' for --gaps parameter." msgstr "" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 -#: src/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, c-format msgid "cannot open '%s'" msgstr "'%s' kann nicht geöffnet werden" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "" @@ -1635,7 +1630,7 @@ msgstr "" msgid "cannot create EBL descriptor for '%s'" msgstr "" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "" @@ -3477,105 +3472,105 @@ msgstr "neue Datei konnte nicht angelegt werden" msgid "text relocation flag set but not needed\n" msgstr "" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "" #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, fuzzy, c-format msgid "cannot get program header count: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, fuzzy, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " "function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3684,12 +3679,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: INTERNER FEHLER %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2767 #, c-format msgid "while closing '%s'" msgstr "beim Schliessen von '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: Dateiformat nicht erkannt" @@ -3724,24 +3719,24 @@ msgstr "" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: Dateiformat nicht erkannt" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "Kann Suchbaum nicht erstellen" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 #: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 #: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -3755,58 +3750,58 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:776 +#: src/nm.c:775 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:777 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:779 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:781 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1249 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1255 +#: src/nm.c:1254 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1336 +#: src/nm.c:1335 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: entry size in section `%s' is not what we expect" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1622 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" @@ -3880,7 +3875,7 @@ msgstr "Inhalt des Abschnitts %s:\n" msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "neue Datei konnte nicht angelegt werden" @@ -4064,7 +4059,7 @@ msgstr "" msgid "cannot generate Elf descriptor: %s" msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "" @@ -4074,11 +4069,11 @@ msgstr "" msgid "cannot get section: %s" msgstr "" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 -#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "" @@ -4088,8 +4083,8 @@ msgstr "" msgid "cannot get section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "" @@ -4411,7 +4406,7 @@ msgid "" " Segment Sections..." msgstr "" -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "" @@ -4446,18 +4441,18 @@ msgstr "" msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" #: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ungültige .debug_line Sektion" @@ -4742,14 +4737,14 @@ msgstr "ungültige .debug_line Sektion" msgid "invalid data in gnu.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3452 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" " Bitmask Size: %zu bytes %%% bits set 2nd hash shift: %u\n" msgstr "" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4760,13 +4755,13 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" msgstr "" -#: src/readelf.c:3614 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4774,102 +4769,102 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:3631 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3655 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3697 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3746 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3749 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3762 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 +#: src/readelf.c:3835 #, fuzzy, c-format msgid "sprintf failure" msgstr "mprotect fehlgeschlagen" -#: src/readelf.c:4319 +#: src/readelf.c:4317 msgid "empty block" msgstr "" -#: src/readelf.c:4322 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4800 +#: src/readelf.c:4798 #, c-format msgid "%*s[%2] %s \n" msgstr "" -#: src/readelf.c:4867 +#: src/readelf.c:4865 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:4872 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:4879 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:4886 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -4877,79 +4872,79 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:5107 +#: src/readelf.c:5105 #, c-format msgid "" "\n" "Abbreviation section at offset %:\n" msgstr "" -#: src/readelf.c:5120 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:5136 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:5182 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "unbekannte Version" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "Kein Adress-Wert" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:5414 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -4960,239 +4955,239 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5445 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" "Table at offset %zu:\n" msgstr "" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5511 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5523 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5544 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6\n" msgstr "" -#: src/readelf.c:5555 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6\n" "\n" msgstr "" -#: src/readelf.c:5610 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " %s: %\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " %s: %\n" -#: src/readelf.c:5823 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "Ungültige Daten" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:6367 +#: src/readelf.c:6365 msgid " \n" msgstr "" -#: src/readelf.c:6624 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:6642 +#: src/readelf.c:6640 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:6692 +#: src/readelf.c:6690 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6791 src/readelf.c:6945 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:6808 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:6814 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:6924 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#)" msgstr "" -#: src/readelf.c:6931 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#)" msgstr "" -#: src/readelf.c:6968 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "" -#: src/readelf.c:7053 +#: src/readelf.c:7051 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "" -#: src/readelf.c:7063 +#: src/readelf.c:7061 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "" -#: src/readelf.c:7085 +#: src/readelf.c:7083 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "" -#: src/readelf.c:7415 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Ungültige Datei" -#: src/readelf.c:7419 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr "unbekannte Form %" -#: src/readelf.c:7423 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:7738 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5200,12 +5195,12 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:7788 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7806 #, c-format msgid "" " Type unit at offset %:\n" @@ -5214,7 +5209,7 @@ msgid "" " Type signature: %#, Type offset: %# [%]\n" msgstr "" -#: src/readelf.c:7820 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5222,37 +5217,37 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:7895 +#: src/readelf.c:7893 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:7941 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:7985 +#: src/readelf.c:7981 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5260,7 +5255,7 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:8037 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5268,18 +5263,18 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:8369 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "unbekannte Form %" -#: src/readelf.c:8400 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8517 #, c-format msgid "" "\n" @@ -5298,177 +5293,187 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:8524 +#: src/readelf.c:8539 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:8532 +#: src/readelf.c:8547 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "Kein Adress-Wert" -#: src/readelf.c:8540 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "" -#: src/readelf.c:8550 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:8565 +#: src/readelf.c:8580 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:8576 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8668 msgid "" "\n" "File name table:" msgstr "" -#: src/readelf.c:8714 +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:8753 +#: src/readelf.c:8775 msgid "" "\n" "No line number statements." msgstr "" -#: src/readelf.c:8757 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:8777 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8828 #, c-format msgid " special opcode %u: address+%u = " msgstr "" -#: src/readelf.c:8815 +#: src/readelf.c:8832 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:8818 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:8841 +#: src/readelf.c:8858 msgid " end of sequence" msgstr "" -#: src/readelf.c:8859 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:8887 +#: src/readelf.c:8904 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -#: src/readelf.c:8901 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr "" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, c-format +msgid " set function name %s (0x%x)\n" +msgstr "" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8976 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8988 msgid " copy" msgstr "" -#: src/readelf.c:8929 +#: src/readelf.c:8999 #, c-format msgid " advance address by %u to " msgstr "" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %\n" msgstr "" -#: src/readelf.c:8955 +#: src/readelf.c:9025 #, c-format msgid " set file to %\n" msgstr "" -#: src/readelf.c:8966 +#: src/readelf.c:9036 #, c-format msgid " set column to %\n" msgstr "" -#: src/readelf.c:8973 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %\n" msgstr "" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "" -#: src/readelf.c:8990 +#: src/readelf.c:9060 #, c-format msgid " advance address by constant %u to " msgstr "" -#: src/readelf.c:9010 +#: src/readelf.c:9080 #, c-format msgid " advance address by fixed value %u to \n" msgstr "" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr "" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:9035 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr "" @@ -5476,108 +5481,108 @@ msgstr "" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:9084 +#: src/readelf.c:9154 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9320 #, c-format msgid " \n" msgstr "" -#: src/readelf.c:9290 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "Ungültige Daten" -#: src/readelf.c:9543 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " \n" msgstr "" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:9891 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:9914 +#: src/readelf.c:9984 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "" -#: src/readelf.c:10015 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " %s: %\n" -#: src/readelf.c:10027 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " %s: %\n" -#: src/readelf.c:10069 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %\n" msgstr "" -#: src/readelf.c:10077 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%\n" msgstr "" -#: src/readelf.c:10102 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, % items:\n" msgstr "" -#: src/readelf.c:10109 +#: src/readelf.c:10179 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10191 #, c-format msgid " % arguments:" msgstr "" -#: src/readelf.c:10136 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" -#: src/readelf.c:10381 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -5586,77 +5591,77 @@ msgid "" msgstr "" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10456 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10466 #, c-format msgid " *** error, missing string terminator\n" msgstr "" -#: src/readelf.c:10425 +#: src/readelf.c:10495 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10526 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10540 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10603 +#: src/readelf.c:10673 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:10705 +#: src/readelf.c:10775 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:10728 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:10740 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:10755 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:10768 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:10782 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5665,142 +5670,142 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:10855 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:10882 +#: src/readelf.c:10952 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" -#: src/readelf.c:10911 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#\n" msgstr "" -#: src/readelf.c:10936 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#\n" msgstr "" -#: src/readelf.c:10943 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#\n" msgstr "" -#: src/readelf.c:10950 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#\n" msgstr "" -#: src/readelf.c:10957 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#\n" msgstr "" -#: src/readelf.c:10971 +#: src/readelf.c:11041 #, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:10996 +#: src/readelf.c:11066 #, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11025 +#: src/readelf.c:11095 #, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11057 +#: src/readelf.c:11127 #, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" -#: src/readelf.c:11195 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:11926 +#: src/readelf.c:11996 #, c-format msgid "" "\n" "%*s... ..." msgstr "" -#: src/readelf.c:12438 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:12466 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9 %s\n" msgstr "" -#: src/readelf.c:12518 +#: src/readelf.c:12588 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/readelf.c:12552 +#: src/readelf.c:12622 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12575 +#: src/readelf.c:12645 #, c-format msgid "" "\n" "Note segment of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12622 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no data to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12719 src/readelf.c:12770 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12724 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12659 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -5808,21 +5813,21 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:12673 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no strings to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12705 +#: src/readelf.c:12775 #, c-format msgid "" "\n" "String section [%zu] '%s' contains % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12710 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -5830,45 +5835,45 @@ msgid "" "offset %#0:\n" msgstr "" -#: src/readelf.c:12759 +#: src/readelf.c:12829 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:12789 +#: src/readelf.c:12859 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:12846 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:12849 +#: src/readelf.c:12919 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:12853 +#: src/readelf.c:12923 #, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" -#: src/readelf.c:12871 +#: src/readelf.c:12941 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -6276,17 +6281,17 @@ msgstr "" msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6297,132 +6302,132 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: Kein Eintrag %s in dem Archiv!\n" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:1092 +#: src/strip.c:1097 #, fuzzy, c-format msgid "cannot get number of phdrs" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1121 src/strip.c:1164 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:1250 +#: src/strip.c:1254 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/strip.c:1259 +#: src/strip.c:1263 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:1688 +#: src/strip.c:1692 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1697 +#: src/strip.c:1701 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format msgid "no memory to create section header string table" msgstr "" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -6508,7 +6513,7 @@ msgstr "" msgid "cannot get shdrstrndx:%s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "" @@ -6528,12 +6533,12 @@ msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" @@ -6548,12 +6553,12 @@ msgstr "konnte Programm-Kopf nicht kopieren: %s" msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" @@ -6563,14 +6568,14 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot create directory '%s'" msgstr "konnte Verzeichnis nicht erstellen: %s" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 -#: src/unstrip.c:1750 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 -#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" @@ -6580,222 +6585,232 @@ msgstr "konnte Symboltabelle nicht aktualisieren: %s" msgid "cannot update section header: %s" msgstr "" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:593 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:848 +#: src/unstrip.c:850 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:852 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:869 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "ungültiger Offset %zu für Symbol %s" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1042 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1046 +#: src/unstrip.c:1048 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1053 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1057 +#: src/unstrip.c:1059 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1064 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1075 src/unstrip.c:1556 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1155 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1362 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1406 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1410 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1628 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1758 +#: src/unstrip.c:1760 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:1790 +#: src/unstrip.c:1792 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:2065 +#: src/unstrip.c:2067 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "" -#: src/unstrip.c:2118 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "konnte Programm-Kopf nicht aktualisieren: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2174 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2177 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2235 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2312 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2327 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2331 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2344 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2375 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" @@ -6860,7 +6875,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -6872,6 +6887,10 @@ msgstr "" msgid "Show instances of inlined functions" msgstr "" +#, fuzzy, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "konnte Verzeichnis nicht erstellen: %s" + #~ msgid "%s+%# <%s+%#>" #~ msgstr "%s+%# <%s+%#>" diff --git a/po/es.po b/po/es.po index 65bf523d..a65b516c 100644 --- a/po/es.po +++ b/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils.master.es\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz \n" @@ -39,11 +39,6 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -#, fuzzy, c-format -msgid "cannot allocate memory" -msgstr "No se puede asignar sección PLT: %s" - #: lib/printversion.c:40 #, fuzzy, c-format msgid "" @@ -57,8 +52,8 @@ msgstr "" "garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN " "DETERMINADO.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "memoria agotada" @@ -648,7 +643,7 @@ msgstr "tamaño inválido del operando fuente" msgid "invalid size of destination operand" msgstr "tamaño inválido del operando destino" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -734,8 +729,8 @@ msgstr "no coinciden los datos/scn" msgid "invalid section header" msgstr "encabezamiento de sección inválida" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -872,7 +867,7 @@ msgstr "" msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misceláneos:" @@ -1208,195 +1203,195 @@ msgstr " El archivo '%s' es demasiado grande" msgid "cannot read ELF header of %s(%s): %s" msgstr "no se puede leer el encabezamiento ELF de %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "no se puede obtener el encabezamiento ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "encabezamientos de programa:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "encabezamientos de programa:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "Section Headers:" msgid "section headers" msgstr "encabezamientos de sección:" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy #| msgid "cannot get section header string table index" msgid "section header string table index" msgstr "no se puede obtener índice de cadena de encabezamiento de sección" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy msgid "could not obtain section header" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy msgid "could not obtain section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Opciones de selección de entrada:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "no se pueden hallar módulos de kernel" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Formato de salida:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Se ha dado más de un nombre de archivo de salida." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "FICHERO..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1630,14 +1625,14 @@ msgstr "%s %s differ: brecha" msgid "Invalid value '%s' for --gaps parameter." msgstr "Valor inválido '%s' para parámetro --gaps" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 -#: src/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, c-format msgid "cannot open '%s'" msgstr "Imposible abrir '%s'" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "No puede crear descriptor ELF para '%s': %s" @@ -1647,7 +1642,7 @@ msgstr "No puede crear descriptor ELF para '%s': %s" msgid "cannot create EBL descriptor for '%s'" msgstr "no se puede crear el descriptor EBL para '%s'" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" @@ -3775,96 +3770,96 @@ msgstr "no sepuede crear fichero nuevo" msgid "text relocation flag set but not needed\n" msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Selección de entrada:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "Agregar RUTA a todos los nombres de ficheros" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "Usar RUTA como root de jerarquía de debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "" "Localizar origen de reubicaciones de texto en FICHEROS (a.out por defecto)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[FICHERO...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "No se puede obtener encabezamiento ELF '%s': %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "'%s' es no un DSO o PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "obtener encabezamiento de sección get de sección %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "No se puede leer sección dinámica: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "no hay reubicaciones de texto reportado en '%s'" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "Error al leer fichero ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, fuzzy, c-format msgid "cannot get program header count: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, fuzzy, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "" "Nos se puede obtener el índice de encabezamiento de programa en compensación " "%d: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "No se puede obtener tabla de símbolos %zu en '%s': %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "No se puede obtener reubicación en índice %d en sección %zu en '%s': %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s no compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "El archivo que contiene la función '%s' no está compilado con -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3873,7 +3868,7 @@ msgstr "" "el fichero que contiene la función '%s' podría no estar compilado con -fpic/-" "fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3882,7 +3877,7 @@ msgstr "" "Tanto el fichero que contiene la función '%s' como el fichero que contiene " "la función '%s' no están compilados con -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3991,12 +3986,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: ERROR INTERNO %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2767 #, c-format msgid "while closing '%s'" msgstr "error al cerrar '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: No se reconoce el formato del fichero" @@ -4031,24 +4026,24 @@ msgstr "imposible restablecer compensación de archivo al inicio" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: no se reconoció el formato de fichero" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "No se puede crear el árbol de búsqueda" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 #: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 #: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "no se puede obtener índice de cadena de encabezamiento de sección" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -4062,7 +4057,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4071,53 +4066,53 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:776 +#: src/nm.c:775 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:777 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:779 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:781 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1249 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " -#: src/nm.c:1255 +#: src/nm.c:1254 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada" -#: src/nm.c:1336 +#: src/nm.c:1335 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Operación inválida" -#: src/nm.c:1622 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay símbolos" @@ -4194,7 +4189,7 @@ msgstr "Contenido de la sección %s:\n" msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "no sepuede crear fichero nuevo" @@ -4382,7 +4377,7 @@ msgstr "Sección de depuración DWARF desconocida `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "no se puede crear descriptor ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" @@ -4392,11 +4387,11 @@ msgstr "no se pudieron determinar el número de secciones: %s" msgid "cannot get section: %s" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 -#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" @@ -4406,8 +4401,8 @@ msgstr "No se puede obtener encabezamiento de sección: %s" msgid "cannot get section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" @@ -4750,7 +4745,7 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" @@ -4793,18 +4788,18 @@ msgstr "" msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" #: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr ".debug_line section inválida" @@ -5152,7 +5147,7 @@ msgstr "Datos inválidos en sección [%zu] '%s'" msgid "invalid data in gnu.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3452 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5162,7 +5157,7 @@ msgstr "" " Tamaño de Bitmask: %zu bytes %%% bits establecen segundo " "cambio de dispersión: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5179,7 +5174,7 @@ msgstr[1] "" "Sección de lista de biblioteca [%2zu] '%s' en compensación %#0 " "contiene entradas %d:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5187,7 +5182,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3614 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -5198,102 +5193,102 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de % bytes con " "desplazamiento %#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3655 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3697 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3746 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3749 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3762 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 +#: src/readelf.c:3835 #, fuzzy, c-format msgid "sprintf failure" msgstr "mprotect falló" -#: src/readelf.c:4319 +#: src/readelf.c:4317 msgid "empty block" msgstr "bloque vacío" -#: src/readelf.c:4322 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4800 +#: src/readelf.c:4798 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:4865 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4874 +#: src/readelf.c:4872 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4881 +#: src/readelf.c:4879 #, fuzzy, c-format msgid "%s %# used with different base addresses" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4888 +#: src/readelf.c:4886 #, fuzzy, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4988 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4996 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -5304,7 +5299,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [ Código]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5313,20 +5308,20 @@ msgstr "" "\n" "Sección de abreviatura en compensación %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] compensación: %, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5335,52 +5330,52 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "versión desconocida" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "no hay valor de dirección" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5395,12 +5390,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entradas %zu:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5408,7 +5403,7 @@ msgstr "" " Inicio [%*zu]: %0#*, longitud: %5, compensación CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5489 src/readelf.c:8426 #, fuzzy, c-format msgid "" "\n" @@ -5417,150 +5412,150 @@ msgstr "" "\n" "Tabla en compensación %Zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:5511 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5523 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5544 +#: src/readelf.c:5542 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5555 +#: src/readelf.c:5553 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5610 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:5823 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "datos inválidos" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacía\n" -#: src/readelf.c:6367 +#: src/readelf.c:6365 #, fuzzy msgid " \n" msgstr " \n" -#: src/readelf.c:6624 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5570,7 +5565,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5579,65 +5574,65 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:6808 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:6814 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:6924 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#)" msgstr " (compensación: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#)" msgstr " (fin de compensación: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "Puntero %-26sLSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7051 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7061 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7083 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Archivo inválido" -#: src/readelf.c:7419 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " establecer archivo a %\n" -#: src/readelf.c:7423 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5648,12 +5643,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7806 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5666,7 +5661,7 @@ msgstr "" "Tamaño de dirección: %, Tamaño de compensación: %\n" " Tipo de firma: %#, Tipo de compensación: %#\n" -#: src/readelf.c:7820 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5677,39 +5672,39 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7893 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "no se ha podido obtener etiqueta de DIE en compensación% en sección " "'%s': %s" -#: src/readelf.c:7933 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7981 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5720,7 +5715,7 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8033 #, fuzzy, c-format msgid "" "\n" @@ -5730,18 +5725,18 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:8369 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "Forma % desconocida" -#: src/readelf.c:8400 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "No se puede obtener sección de datos de línea: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8517 #, fuzzy, c-format msgid "" "\n" @@ -5772,34 +5767,34 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8539 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "no se puede obtener versión de símbolo: %s" -#: src/readelf.c:8532 +#: src/readelf.c:8547 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "no hay valor de dirección" -#: src/readelf.c:8540 +#: src/readelf.c:8555 #, fuzzy, c-format msgid "cannot handle segment selector size: %u\n" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:8550 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'" -#: src/readelf.c:8565 +#: src/readelf.c:8580 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] argumento %hhu \n" msgstr[1] " [%*] argumento %hhu\n" -#: src/readelf.c:8576 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5807,12 +5802,12 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8668 #, fuzzy msgid "" "\n" @@ -5821,7 +5816,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:8714 +#: src/readelf.c:8729 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5829,7 +5824,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:8753 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5838,7 +5833,7 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8757 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5846,121 +5841,132 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8777 +#: src/readelf.c:8794 #, fuzzy, c-format msgid "invalid maximum operations per instruction is zero" msgstr "longitud mínima inválida de tamaño de cadena coincidente" -#: src/readelf.c:8811 +#: src/readelf.c:8828 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " opcode especial %u: dirección+%u = %s, línea%+d = %zu\n" -#: src/readelf.c:8815 +#: src/readelf.c:8832 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" " opcode especial %u: dirección+%u = %s, op_index = %u, línea%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8858 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:8859 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "Establecer dirección a %s\n" -#: src/readelf.c:8887 +#: src/readelf.c:8904 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "definir nuevo archivo: dir=%u, mtime=%, longitud=%, nombre=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "También mostrar nombres de función" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8976 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8988 msgid " copy" msgstr "Copiar" -#: src/readelf.c:8929 +#: src/readelf.c:8999 #, fuzzy, c-format msgid " advance address by %u to " msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %\n" msgstr " línea de avance por la constante %d a %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9025 #, c-format msgid " set file to %\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9036 #, c-format msgid " set column to %\n" msgstr " Establecer columna a %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %\n" msgstr "Establecer '%s' a %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:8990 +#: src/readelf.c:9060 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "Dirección de avance por constante %u a %s\n" -#: src/readelf.c:9010 +#: src/readelf.c:9080 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "dirección de avance por valor corregido %u a %s\n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:9035 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" @@ -5968,110 +5974,110 @@ msgstr " establecer isa para %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " opcódigo con parámetro % desconocido:" msgstr[1] " opcódigo con parámetros % desconocido:" -#: src/readelf.c:9084 +#: src/readelf.c:9154 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9290 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "datos inválidos" -#: src/readelf.c:9543 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " \n" msgstr " \n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "no es posible obtener datos de la sección de macro información: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:9914 +#: src/readelf.c:9984 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:10015 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:10027 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:10069 +#: src/readelf.c:10139 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (compensación: %#)" -#: src/readelf.c:10077 +#: src/readelf.c:10147 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10102 +#: src/readelf.c:10172 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " opcódigo con parámetro % desconocido:" -#: src/readelf.c:10109 +#: src/readelf.c:10179 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10191 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] argumento %hhu \n" -#: src/readelf.c:10136 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6, Compensación CU DIE: %6, " "nombre: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -6083,42 +6089,42 @@ msgstr "" " %*s String\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10456 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10466 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10495 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10526 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10540 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10603 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -6127,7 +6133,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -6136,22 +6142,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -6159,7 +6165,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:10782 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6172,12 +6178,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:10882 +#: src/readelf.c:10952 #, fuzzy, c-format msgid "" "\n" @@ -6186,37 +6192,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:10999 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10936 +#: src/readelf.c:11006 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10943 +#: src/readelf.c:11013 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10950 +#: src/readelf.c:11020 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:10957 +#: src/readelf.c:11027 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10971 +#: src/readelf.c:11041 #, fuzzy, c-format msgid "" "\n" @@ -6225,7 +6231,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11066 #, fuzzy, c-format msgid "" "\n" @@ -6234,7 +6240,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11095 #, fuzzy, c-format msgid "" "\n" @@ -6243,7 +6249,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11127 #, fuzzy, c-format msgid "" "\n" @@ -6252,18 +6258,18 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:11195 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -6272,21 +6278,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:12438 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:12466 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12588 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "no se puede obtener el contenido de sección de nota: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -6295,7 +6301,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de % bytes en compensación %#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -6304,7 +6310,7 @@ msgstr "" "\n" "Segmento de nota de % bytes en compensación %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" @@ -6313,12 +6319,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12719 src/readelf.c:12770 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s" -#: src/readelf.c:12654 +#: src/readelf.c:12724 #, fuzzy, c-format msgid "" "\n" @@ -6328,7 +6334,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12729 #, fuzzy, c-format msgid "" "\n" @@ -6339,7 +6345,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" @@ -6348,7 +6354,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12775 #, fuzzy, c-format msgid "" "\n" @@ -6358,7 +6364,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12780 #, fuzzy, c-format msgid "" "\n" @@ -6369,7 +6375,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6378,7 +6384,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:12789 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6387,12 +6393,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:12846 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "no se puede obtener el índice de símbolo de archivo '%s': %s" -#: src/readelf.c:12849 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6401,7 +6407,7 @@ msgstr "" "\n" "Archivo '%s' no tiene índice de símbolo\n" -#: src/readelf.c:12853 +#: src/readelf.c:12923 #, fuzzy, c-format msgid "" "\n" @@ -6410,12 +6416,12 @@ msgstr "" "\n" "Índice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12941 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s" -#: src/readelf.c:12876 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6830,17 +6836,17 @@ msgstr "Quitar sección de comentario" msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "no sepuede stat fichero de entrada '%s'" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "mientras se abría '%s'" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" @@ -6851,132 +6857,132 @@ msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, fuzzy, c-format msgid "cannot get number of phdrs" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1121 src/strip.c:1164 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:1250 +#: src/strip.c:1254 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "No se puede asignar sección PLT: %s" -#: src/strip.c:1259 +#: src/strip.c:1263 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "No se puede añadir nueva sección: %s" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "al crear sección de encabezamiento de sección: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, fuzzy, c-format msgid "no memory to create section header string table" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "al computar la suma de verificación para información de depuración" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error al leer el fichero: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "Error al terminar '%s': %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -7064,7 +7070,7 @@ msgstr "no se puede crear el encabezamiento ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "No se puede encontrar la sección: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" @@ -7084,12 +7090,12 @@ msgstr "no se puede actualizar reubicación: %s" msgid "cannot copy ELF header: %s" msgstr "no se puede copiar encabezamiento ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" @@ -7104,12 +7110,12 @@ msgstr "no puede copiar encabezamiento de programa: %s" msgid "cannot copy section header: %s" msgstr "no se puede copiar encabezamiento de sección: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" @@ -7119,14 +7125,14 @@ msgstr "no pueden copiar datos de sección: %s" msgid "cannot create directory '%s'" msgstr "no se puede crear el directorio '%s'" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 -#: src/unstrip.c:1750 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "no se puede obtener entrada de tabla de símbolos: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 -#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "no se puede actualizar tabla de símbolos: %s" @@ -7136,170 +7142,180 @@ msgstr "no se puede actualizar tabla de símbolos: %s" msgid "cannot update section header: %s" msgstr "no se puede actualizar encabezamiento de sección: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "no se puede actualizar reubicación: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "no se puede obtener versión de símbolo: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:595 #, fuzzy, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab" -#: src/unstrip.c:848 +#: src/unstrip.c:850 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:852 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:869 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "compensación de cadena inválida en símbolo [%Zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "no se puede leer nombre [%Zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1042 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr ".debug_line section inválida" -#: src/unstrip.c:1046 +#: src/unstrip.c:1048 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "No se puede obtener encabezamiento de sección 0th: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1053 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "no se puede obtener sección para símbolos\n" -#: src/unstrip.c:1057 +#: src/unstrip.c:1059 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "no se puede obtener versión de símbolo: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1064 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1075 src/unstrip.c:1556 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "contenido inválido en sección '%s'" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "" "no se pueden actualizar datos de tabla de cadenas de encabezamiento de " "sección: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "no se puede obtener índice de sección de tabla de cadenas de encabezamiento " "de sección: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" -#: src/unstrip.c:1406 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "más secciones en el archivo despojado que en el archivo de depuración -- " "¿argumentos invertidos?" -#: src/unstrip.c:1410 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "No se puede añadir nueva sección: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1760 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:1790 +#: src/unstrip.c:1792 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:2065 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "no se puede leer la sección de datos: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "no se puede actualizar encabezamiento de programa: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "no se puede escribir al archivo de salida: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink " "-u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7307,61 +7323,61 @@ msgstr "" "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere " "prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "no se puede crear un descriptor ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " -#: src/unstrip.c:2312 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "no puede hallar archivo de depuración para módulo '%s': %su" -#: src/unstrip.c:2331 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "No se obtuvo el archivo '%s' de módulo '%s' " -#: src/unstrip.c:2375 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" @@ -7454,7 +7470,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -7467,6 +7483,10 @@ msgstr "También mostrar nombres de función" msgid "Show instances of inlined functions" msgstr "" +#, fuzzy, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "No se puede asignar sección PLT: %s" + #, fuzzy #~ msgid "" #~ " [%6tx] base address\n" diff --git a/po/ja.po b/po/ja.po index 8359b929..595bdffb 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi \n" "Language-Team: Japanese \n" @@ -34,10 +34,6 @@ msgid "" " - 'auto', 'tty', 'if-tty'\n" msgstr "" -#: lib/color.c:194 src/objdump.c:728 -msgid "cannot allocate memory" -msgstr "メモリーを割り当てられません" - #: lib/printversion.c:40 #, c-format msgid "" @@ -46,8 +42,9 @@ msgid "" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 +#, c-format msgid "memory exhausted" msgstr "メモリー枯渇" @@ -314,8 +311,8 @@ msgid "" "Find addresses in files mapped as read from FILE in Linux /proc/PID/maps " "format" msgstr "" -"Linux の /proc/PID/maps 形式の FILE から 読み込んだ マッピング された ファイル" -" から アドレスを 探す" +"Linux の /proc/PID/maps 形式の FILE から 読み込んだ マッピング された ファイ" +"ル から アドレスを 探す" #: libdwfl/argp-std.c:56 msgid "Find addresses in the running kernel" @@ -572,6 +569,7 @@ msgid " Args: " msgstr "" #: libebl/eblobjnote.c:300 +#, c-format msgid " Build ID: " msgstr " ビルド ID: " @@ -615,7 +613,8 @@ msgstr "ソース演算子の大きさが無効です" msgid "invalid size of destination operand" msgstr "宛先演算子の大きさが無効です" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6215 +#, c-format msgid "invalid encoding" msgstr "無効なエンコードです" @@ -699,8 +698,9 @@ msgstr "データ/scnの不整合です" msgid "invalid section header" msgstr "不当なセクションヘッダーです" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 +#, c-format msgid "invalid data" msgstr "不当なデータです" @@ -736,8 +736,8 @@ msgstr "リロケータブルファイルのみがセクショングループを msgid "" "program header only allowed in executables, shared objects, and core files" msgstr "" -"プログラムヘッダーは、実行可能ファイル、共有オブジェクト、コアファイルにの" -"み認められています" +"プログラムヘッダーは、実行可能ファイル、共有オブジェクト、コアファイルにのみ" +"認められています" #: libelf/elf_error.c:231 msgid "file has no program header" @@ -816,7 +816,8 @@ msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -"アドレスの サブルーチンの インライン展開を 引き起こした 全ての ソース位置を 表示" +"アドレスの サブルーチンの インライン展開を 引き起こした 全ての ソース位置を " +"表示" #: src/addr2line.c:74 msgid "Show demangled symbols (ARG is always ignored)" @@ -826,7 +827,7 @@ msgstr "デマングルされた シンボルを 表示 (ARGは常に無視さ msgid "Print all information on one line, and indent inlines" msgstr "全ての 情報を 一行で 表示し、 字下げする" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misc:" @@ -835,7 +836,8 @@ msgstr "Misc:" #: src/addr2line.c:86 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." -msgstr "ADDR のソースファイルと行の情報を 検索する (デフォルトでは a.out から)" +msgstr "" +"ADDR のソースファイルと行の情報を 検索する (デフォルトでは a.out から)" #. Strings for arguments in help texts. #: src/addr2line.c:90 @@ -1027,10 +1029,12 @@ msgid "no entry %s in archive\n" msgstr "アーカイブに項目 %s がありません\n" #: src/ar.c:472 src/ar.c:927 src/ar.c:1134 +#, c-format msgid "cannot create hash table" msgstr "ハッシュテーブルを作成できません" #: src/ar.c:479 src/ar.c:934 src/ar.c:1143 +#, c-format msgid "cannot insert into hash table" msgstr "ハッシュテーブルに挿入できません" @@ -1070,6 +1074,7 @@ msgid "cannot rename temporary file to %.*s" msgstr "一時ファイルを %.*s に名前変更できません" #: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#, c-format msgid "cannot create new file" msgstr "新しいファイルを作成できません" @@ -1109,22 +1114,27 @@ msgid "cannot read %s: %s" msgstr "%s を読み込めません: %s" #: src/ar.c:1483 +#, c-format msgid "cannot represent ar_date" msgstr "ar_date を表現できません" #: src/ar.c:1489 +#, c-format msgid "cannot represent ar_uid" msgstr "ar_uid を表現できません" #: src/ar.c:1495 +#, c-format msgid "cannot represent ar_gid" msgstr "ar_gid を表現できません" #: src/ar.c:1501 +#, c-format msgid "cannot represent ar_mode" msgstr "ar_mode を表現できません" #: src/ar.c:1507 +#, c-format msgid "cannot represent ar_size" msgstr "ar_size を表現できません" @@ -1152,176 +1162,190 @@ msgstr "アーカイブ '%s' は大きすぎます" msgid "cannot read ELF header of %s(%s): %s" msgstr "%s(%s) の ELF ヘッダーを読み込めません: %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 msgid "ELF header" msgstr "" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 msgid "program headers" msgstr "" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 msgid "program header" msgstr "" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 msgid "section headers" msgstr "" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 msgid "section header string table index" msgstr "" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 msgid "could not obtain section header" msgstr "セクションヘッダーを取得できませんでした" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 msgid "could not obtain section name" msgstr "セクション名を取得できませんでした" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 msgid "Classification options" msgstr "分類オプション" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" -msgstr "ELF オブジェクト または アーカイブ/静的ライブラリに 見えるファイル (デフォルト)" +msgstr "" +"ELF オブジェクト または アーカイブ/静的ライブラリに 見えるファイル (デフォル" +"ト)" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" -msgstr "ファイルは 通常の ELF オブジェクト (アーカイブ/静的ライブラリ でない)" +msgstr "" +"ファイルは 通常の ELF オブジェクト (アーカイブ/静的ライブラリ でない)" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "ファイルは ELF アーカイブ または 静的ライブラリ" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "ファイルは ELF コアダンプファイル" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -"ファイルは シンボルテーブル または .debug_* セクション付きの さらにストリップ可能な ELF ファイル" +"ファイルは シンボルテーブル または .debug_* セクション付きの さらにストリップ" +"可能な ELF ファイル" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "ファイルは (主に) ELF 実行可能プログラム (主として DSO ではない)" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "ファイルは ELF 実行可能プログラム (DSO かもしれない)" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" -msgstr "ファイルは (主に) ELF 共有オブジェクト(DSO) (主として 実行可能プログラムでない)" +msgstr "" +"ファイルは (主に) ELF 共有オブジェクト(DSO) (主として 実行可能プログラム" +"でない)" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" -msgstr "ファイルは ELF 共有オブジェクト(DSO) (実行可能プログラム かもしれない)" +msgstr "" +"ファイルは ELF 共有オブジェクト(DSO) (実行可能プログラム かもしれない)" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 msgid "File is a linux kernel module" msgstr "ファイルは linux カーネル モジュール" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" -msgstr "ファイルは デバッグ専用 ELF ファイル (分離した .debug、 .dwo または dwz マルチファイル)" +msgstr "" +"ファイルは デバッグ専用 ELF ファイル (分離した .debug、 .dwo または dwz マル" +"チファイル)" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" -msgstr "ファイルは ロード可能な ELF オブジェクト (プログラム または 共有オブジェクト)" +msgstr "" +"ファイルは ロード可能な ELF オブジェクト (プログラム または 共有オブジェク" +"ト)" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "入力フラグ" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" -msgstr "通常 (シンボリックリンク や 特別デバイス でない) ファイルのみを 分類する" +msgstr "" +"通常 (シンボリックリンク や 特別デバイス でない) ファイルのみを 分類する" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "処理するファイル名を 標準入力から 改行区切りで 読み込む" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "処理するファイル名を 標準入力から ASCII ヌル文字区切りで 読み込む" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "標準入力から ファイルを 読み込まない (デフォルト)" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" -msgstr "圧縮ファイル または 組み込み(カーネル) ELF イメージ のオープンを 試みる" +msgstr "" +"圧縮ファイル または 組み込み(カーネル) ELF イメージ のオープンを 試みる" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 msgid "Output flags" msgstr "出力フラグ" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "改行区切りで ファイル名を 出力する" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "ASCII ヌル文字区切りで ファイル名を 出力する" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 msgid "Do not output file names" msgstr "ファイル名を出力しない" -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" -msgstr "ファイル名を 表示するならば、 一致するファイルを 表示する (デフォルト)" +msgstr "" +"ファイル名を 表示するならば、 一致するファイルを 表示する (デフォルト)" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "ファイル名を 表示するならば、 一致しないファイルを 表示する" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "追加のフラグ" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "追加の情報を 出力する (複数回指定されうる)" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "いくつかのエラー出力を 抑制する ( --verbose の反対)" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1372,7 +1396,9 @@ msgstr "最初のものに限らず、 全ての差異を 出力する" msgid "" "Control treatment of gaps in loadable segments [ignore|match] (default: " "ignore)" -msgstr "ロード可能セグメントの gap の 扱いを 制御する [ignore|match] (デフォルト: ignore)" +msgstr "" +"ロード可能セグメントの gap の 扱いを 制御する [ignore|match] (デフォルト: " +"ignore)" #: src/elfcmp.c:65 msgid "Ignore permutation of buckets in SHT_HASH section" @@ -1550,14 +1576,14 @@ msgstr "" msgid "Invalid value '%s' for --gaps parameter." msgstr "--gaps パラメータ に対する不当な値 '%s' です" -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 -#: src/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, c-format msgid "cannot open '%s'" msgstr "'%s' を開けません" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "'%s' の ELF 記述子を作成できません: %s" @@ -1567,7 +1593,7 @@ msgstr "'%s' の ELF 記述子を作成できません: %s" msgid "cannot create EBL descriptor for '%s'" msgstr "'%s' の EBL 記述子を作成できません" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "セクション %zu のセクションヘッダーを取得できません: %s" @@ -1588,6 +1614,7 @@ msgid "-o option specified twice" msgstr "-o オプションが 2 回指定されています" #: src/elfcompress.c:124 +#, c-format msgid "-t option specified twice" msgstr "-t オプションが 2 回指定されています" @@ -1598,10 +1625,12 @@ msgstr "不明な圧縮タイプ '%s'" #. We need at least one input file. #: src/elfcompress.c:145 src/elfcompress.c:1345 +#, c-format msgid "No input file given" msgstr "入力ファイルが与えられていません" #: src/elfcompress.c:151 src/elfcompress.c:1350 +#, c-format msgid "Only one input file allowed together with '-o'" msgstr "'-o' と一緒の場合は入力ファイルは 1 つしか認められません" @@ -1620,8 +1649,9 @@ msgstr "" msgid "" "SECTION name to (de)compress, SECTION is an extended wildcard pattern " "(defaults to '.?(z)debug*')" -msgstr "圧縮(展開)する セクション名。 SECTION は 拡張 ワイルドカード パターン" -"(デフォルトで '.?(z)debug*')" +msgstr "" +"圧縮(展開)する セクション名。 SECTION は 拡張 ワイルドカード パターン(デ" +"フォルトで '.?(z)debug*')" #: src/elfcompress.c:1316 msgid "Print a message for each section being (de)compressed" @@ -1662,7 +1692,8 @@ msgid "" "Binary has been created with GNU ld and is therefore known to be broken in " "certain ways" msgstr "" -"バイナリーは GNU ld で作成され、 従って、 ある方法で 壊れることが 知られている" +"バイナリーは GNU ld で作成され、 従って、 ある方法で 壊れることが 知られてい" +"る" #. Short description of program. #: src/elflint.c:73 @@ -1843,7 +1874,8 @@ msgstr "" msgid "" "section [%2d] '%s': section group [%2zu] '%s' does not precede group member\n" msgstr "" -"セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーより前にありません\n" +"セクション [%2d] '%s': セクショングループ [%2zu] '%s' がグループメンバーより" +"前にありません\n" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 @@ -3486,113 +3518,117 @@ msgstr "新しいファイルを生成できません" msgid "text relocation flag set but not needed\n" msgstr "" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "入力選択:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "全ての ファイル名に対して PATH を先頭に 付け加える" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "debuginfo 階層の ルートとして PATH を使用する" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." -msgstr "FILE (デフォルトでは a.out)の テキスト リロケーションの ソースを 検索する" +msgstr "" +"FILE (デフォルトでは a.out)の テキスト リロケーションの ソースを 検索する" #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "ELF ヘッダー '%s' を取得できません: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "'%s' は DSO または PIE ではありません" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "dynamic セクションを読み込めません: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "ELF ファイルの読み込み中" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, c-format msgid "cannot get program header count: %s" msgstr "プログラムヘッダー数を取得できません: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "オフセット %zd に位置するプログラムヘッダー索引を取得できません: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s は -fpic/-fPIC 付きでコンパイルされていません\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていません\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" "fPIC\n" msgstr "" -"関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていないかもしれません\n" +"関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていないかもしれま" +"せん\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " "function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" -"関数 '%s' を含むファイル または 関数 '%s' を含むファイルは -fpic/-fPIC 付きでコンパイルされていません\n" +"関数 '%s' を含むファイル または 関数 '%s' を含むファイルは -fpic/-fPIC 付きで" +"コンパイルされていません\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" msgstr "" -"リロケーションは 書き込み禁止セグメントの オフセット %llu に位置するメモリを 修正します\n" +"リロケーションは 書き込み禁止セグメントの オフセット %llu に位置するメモリを " +"修正します\n" #: src/nm.c:66 src/strip.c:70 msgid "Output selection:" @@ -3693,12 +3729,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: 内部エラー %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2767 #, c-format msgid "while closing '%s'" msgstr "'%s' を閉じている最中" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: ファイル形式を認識できませんでした" @@ -3733,24 +3769,24 @@ msgstr "アーカイブのオフセットを最初にリセットできません msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: ファイル形式を認識できません" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "検索ツリーを生成できません" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 #: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 #: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文字列テーブル索引が得られません" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -3764,7 +3800,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3773,51 +3809,51 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:776 +#: src/nm.c:775 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:777 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:779 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:781 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1249 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" -#: src/nm.c:1255 +#: src/nm.c:1254 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: セクション `%s' の大きさは項目の大きさの整数倍ではありません" -#: src/nm.c:1336 +#: src/nm.c:1335 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: 不当な操作" -#: src/nm.c:1622 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: シンボルがありません" @@ -3886,10 +3922,12 @@ msgid "Contents of section %s:\n" msgstr "" #: src/objdump.c:687 +#, c-format msgid "cannot disassemble" msgstr "逆アセンブルできません" -#: src/objdump.c:760 +#: src/objdump.c:759 +#, c-format msgid "cannot create backend for elf file" msgstr "elf ファイル用にバックエンドを作成できません" @@ -3904,6 +3942,7 @@ msgid "ARCHIVE" msgstr "" #: src/ranlib.c:102 +#, c-format msgid "Archive name required" msgstr "アーカイブ名が必要です" @@ -3924,7 +3963,8 @@ msgstr "ELF入力選択:" #: src/readelf.c:99 msgid "" "Use the named SECTION (default .gnu_debugdata) as (compressed) ELF input data" -msgstr "ELF 入力データとして SECTION (デフォルトでは .gnu_debugdata) を使用する" +msgstr "" +"ELF 入力データとして SECTION (デフォルトでは .gnu_debugdata) を使用する" #: src/readelf.c:102 msgid "" @@ -4066,7 +4106,7 @@ msgstr "不明な DWARF デバッグセクション `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "Elf 記述子を生成できません: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定できません: %s" @@ -4076,21 +4116,22 @@ msgstr "セクション数を決定できません: %s" msgid "cannot get section: %s" msgstr "セクションを取得できません: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 -#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "セクションヘッダーを取得できません: %s" #: src/readelf.c:663 +#, c-format msgid "cannot get section name" msgstr "セクション名を取得できません" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "%s の内容を取得できません: %s" @@ -4101,6 +4142,7 @@ msgid "cannot create temp file '%s'" msgstr "一時ファイル '%s' を作成できません" #: src/readelf.c:697 +#, c-format msgid "cannot write section data" msgstr "セクションデータを書き込みできません" @@ -4110,6 +4152,7 @@ msgid "error while closing Elf descriptor: %s" msgstr "Elf 記述子を閉じている時にエラー: %s" #: src/readelf.c:710 +#, c-format msgid "error while rewinding file descriptor" msgstr "ファイル記述子を巻き戻している時にエラー" @@ -4144,6 +4187,7 @@ msgid "cannot read ELF header: %s" msgstr "ELF ヘッダーを読み込めません: %s" #: src/readelf.c:948 +#, c-format msgid "cannot create EBL handle" msgstr "EBL ハンドルを作成できません" @@ -4429,7 +4473,7 @@ msgstr "" " セクションからセグメントへのマッビング:\n" " セグメント セクション..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "プログラムヘッダーを得られません: %s" @@ -4468,18 +4512,18 @@ msgstr "<不当なシンボル>" msgid "" msgstr "<不当なセクション>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "セクションヘッダーを得られません: %s" #: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "不当な .debug_line セクション" @@ -4787,7 +4831,7 @@ msgstr "セクション [%zu] '%s' の不当なデータ" msgid "invalid data in gnu.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3452 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4797,7 +4841,7 @@ msgstr "" " ビットマスクの大きさ: %zu バイト %%% ビット設定 第2ハッシュシフ" "ト: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -4810,7 +4854,7 @@ msgstr[0] "" "オフセット %3$#0 のライブラリー一覧セクション [%1$2zu] '%2$s' には " "%4$d 個の項目があります:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -4818,7 +4862,7 @@ msgstr "" " ライブラリー タイムスタンプ チェックサム バー" "ジョン フラグ" -#: src/readelf.c:3614 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -4829,102 +4873,102 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのオブジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3631 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:3655 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3697 #, c-format msgid " File: %11\n" msgstr " ファイル: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3746 #, c-format msgid " %s: %, %s\n" msgstr " %s: %、%s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3749 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3762 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 +#: src/readelf.c:3835 #, c-format msgid "sprintf failure" msgstr "" -#: src/readelf.c:4319 +#: src/readelf.c:4317 msgid "empty block" msgstr "空ブロック" -#: src/readelf.c:4322 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "%zu バイトのブロック:" -#: src/readelf.c:4800 +#: src/readelf.c:4798 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:4865 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4874 +#: src/readelf.c:4872 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4881 +#: src/readelf.c:4879 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4888 +#: src/readelf.c:4886 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4988 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4996 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5099 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -4935,7 +4979,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -4944,20 +4988,20 @@ msgstr "" "\n" "オフセット % の略語セクション:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語を読んでいる間にエラー: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %、子: %s、タグ: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -4966,52 +5010,52 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5182 +#: src/readelf.c:5180 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, fuzzy, c-format msgid "Unknown version" msgstr "不明なバージョン" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, fuzzy, c-format msgid "unsupported address size" msgstr "アドレス値ではありません" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes の内容を得られません: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5024,19 +5068,19 @@ msgstr[0] "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] 開始: %0#*、長さ: %5、CU DIE オフセット: %6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5489 src/readelf.c:8426 #, fuzzy, c-format msgid "" "\n" @@ -5045,152 +5089,152 @@ msgstr "" "\n" "オフセット %Zu のテーブル:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:5511 +#: src/readelf.c:5509 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5523 +#: src/readelf.c:5521 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5527 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5538 +#: src/readelf.c:5536 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5544 +#: src/readelf.c:5542 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5555 +#: src/readelf.c:5553 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5610 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5654 +#: src/readelf.c:5652 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5675 src/readelf.c:9177 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5730 src/readelf.c:9232 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5769 src/readelf.c:9271 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:5823 +#: src/readelf.c:5821 #, fuzzy, c-format msgid "invalid range list data" msgstr "不当なデータ" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6025 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6105 src/readelf.c:9799 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6367 +#: src/readelf.c:6365 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6622 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5199,7 +5243,7 @@ msgstr "" "\n" "オフセット %3$# の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6692 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5208,65 +5252,65 @@ msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6791 src/readelf.c:6945 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "不当な拡大エンコード" -#: src/readelf.c:6808 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:6814 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "LSDA ポインターエンコード:" -#: src/readelf.c:6924 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#)" msgstr " (オフセット: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#)" msgstr " (終了オフセット: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA ポインター: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7051 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "属性コードを得られません: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7061 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "属性様式を得られません: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7083 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "属性値を得られません: %s" -#: src/readelf.c:7415 +#: src/readelf.c:7413 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "不当なファイル" -#: src/readelf.c:7419 +#: src/readelf.c:7417 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:7423 +#: src/readelf.c:7421 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5277,12 +5321,12 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7786 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7806 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5294,7 +5338,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7820 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5305,39 +5349,39 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7857 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7886 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られません: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7893 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "セクション '%2$s' 中のオフセット %1$ の DIE のタグを得られません: " "%3$s" -#: src/readelf.c:7933 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次の DIE を得られません: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7981 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5348,7 +5392,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:8037 +#: src/readelf.c:8033 #, fuzzy, c-format msgid "" "\n" @@ -5358,18 +5402,18 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:8369 +#: src/readelf.c:8365 #, fuzzy, c-format msgid "unknown form: %s" msgstr "不明な様式 %" -#: src/readelf.c:8400 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "ラインデータセクションデータを得られません: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8517 #, fuzzy, c-format msgid "" "\n" @@ -5399,33 +5443,33 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8539 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr ".debug_line バージョンを扱えません: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8547 #, c-format msgid "cannot handle address size: %u\n" msgstr "アドレスサイズを扱えません: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "セグメントセレクタサイズを扱えません: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' 中のオフセット %1$tu に不当なデータ" -#: src/readelf.c:8565 +#: src/readelf.c:8580 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu パラメーター\n" -#: src/readelf.c:8576 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5433,12 +5477,12 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8597 src/readelf.c:8674 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8653 +#: src/readelf.c:8668 #, fuzzy msgid "" "\n" @@ -5447,7 +5491,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:8714 +#: src/readelf.c:8729 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5455,7 +5499,7 @@ msgstr "" "ファイル名テーブル:\n" " Entry Dir 時刻 大きさ 名前" -#: src/readelf.c:8753 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5464,7 +5508,7 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8757 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5472,118 +5516,129 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8777 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8811 +#: src/readelf.c:8828 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:8815 +#: src/readelf.c:8832 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8836 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8858 #, fuzzy msgid " end of sequence" msgstr "列の終わり" -#: src/readelf.c:8859 +#: src/readelf.c:8876 #, fuzzy, c-format msgid " set address to " msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:8887 +#: src/readelf.c:8904 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "新ファイルを定義する: dir=%u、mtime=%、長さh=%、名前=%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8918 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを % に設定する\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "関数名も表示" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8976 msgid " unknown opcode" msgstr "不明なオペコード" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8988 msgid " copy" msgstr "複写" -#: src/readelf.c:8929 +#: src/readelf.c:8999 #, fuzzy, c-format msgid " advance address by %u to " msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %\n" msgstr "行を定数 %d だけ進めて % にする\n" -#: src/readelf.c:8955 +#: src/readelf.c:9025 #, c-format msgid " set file to %\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:8966 +#: src/readelf.c:9036 #, c-format msgid " set column to %\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:8973 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %\n" msgstr " '%s' を % に設定する\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr "基本ブロックフラグを設定する" -#: src/readelf.c:8990 +#: src/readelf.c:9060 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:9010 +#: src/readelf.c:9080 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "アドレスを固定値 %u だけ進めて %s にする\n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr "プロローグ終了フラグを設定する" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr "エピローグ開始フラグを設定する" -#: src/readelf.c:9035 +#: src/readelf.c:9105 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを % に設定する\n" @@ -5591,103 +5646,103 @@ msgstr " ファイルを % に設定する\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:9084 +#: src/readelf.c:9154 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr ".debug_loclists の内容を取得できません: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9360 #, fuzzy, c-format msgid "invalid loclists data" msgstr "不当なデータ" -#: src/readelf.c:9543 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc の内容を得られません: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9826 src/readelf.c:10870 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクロ情報セクションのデータを得られません: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:9914 +#: src/readelf.c:9984 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:10015 +#: src/readelf.c:10085 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:10027 +#: src/readelf.c:10097 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10040 +#: src/readelf.c:10110 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:10069 +#: src/readelf.c:10139 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10077 +#: src/readelf.c:10147 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10102 +#: src/readelf.c:10172 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:10109 +#: src/readelf.c:10179 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10121 +#: src/readelf.c:10191 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] %hhu パラメーター\n" -#: src/readelf.c:10136 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10337 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" @@ -5695,7 +5750,7 @@ msgstr "" # # "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い -#: src/readelf.c:10381 +#: src/readelf.c:10451 #, fuzzy, c-format msgid "" "\n" @@ -5707,42 +5762,42 @@ msgstr "" " %4$*s 文字列\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10456 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10466 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** 文字列の読込み中にエラー: %s\n" -#: src/readelf.c:10425 +#: src/readelf.c:10495 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10594 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10526 +#: src/readelf.c:10596 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10540 +#: src/readelf.c:10610 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10549 +#: src/readelf.c:10619 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10603 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -5751,7 +5806,7 @@ msgstr "" "\n" "呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -5760,22 +5815,22 @@ msgstr "" "\n" "例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr "呼出しサイトコード化: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -5783,7 +5838,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:10782 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5796,12 +5851,12 @@ msgstr "" " 離着陸場: %#\n" " 行動: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "不当な TType コード化" -#: src/readelf.c:10882 +#: src/readelf.c:10952 #, fuzzy, c-format msgid "" "\n" @@ -5811,37 +5866,37 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10981 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:10999 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10936 +#: src/readelf.c:11006 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10943 +#: src/readelf.c:11013 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10950 +#: src/readelf.c:11020 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10957 +#: src/readelf.c:11027 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10971 +#: src/readelf.c:11041 #, fuzzy, c-format msgid "" "\n" @@ -5851,7 +5906,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11066 #, fuzzy, c-format msgid "" "\n" @@ -5861,7 +5916,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11095 #, fuzzy, c-format msgid "" "\n" @@ -5871,7 +5926,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11127 #, fuzzy, c-format msgid "" "\n" @@ -5880,18 +5935,18 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:11195 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デバッグ内容記述子を得られません: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータの変換ができません: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -5900,21 +5955,21 @@ msgstr "" "\n" "%*s... < %u 回の繰返し> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " 所有者 データ大きさタイプ\n" -#: src/readelf.c:12466 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12588 #, c-format msgid "cannot get content of note: %s" msgstr "ノートセクションの内容を取得できません: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -5924,7 +5979,7 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのノートセクション [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:12575 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -5933,7 +5988,7 @@ msgstr "" "\n" "オフセット %2$#0 の %1$ バイトのノートセグメント:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12692 #, fuzzy, c-format msgid "" "\n" @@ -5942,12 +5997,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12719 src/readelf.c:12770 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12724 #, fuzzy, c-format msgid "" "\n" @@ -5957,7 +6012,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12729 #, fuzzy, c-format msgid "" "\n" @@ -5968,7 +6023,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12743 #, fuzzy, c-format msgid "" "\n" @@ -5977,7 +6032,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12705 +#: src/readelf.c:12775 #, fuzzy, c-format msgid "" "\n" @@ -5987,7 +6042,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12780 #, fuzzy, c-format msgid "" "\n" @@ -5998,7 +6053,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6007,7 +6062,7 @@ msgstr "" "\n" "セクション [%lu] がありません" -#: src/readelf.c:12789 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6016,12 +6071,12 @@ msgstr "" "\n" "セクション '%s' がありません" -#: src/readelf.c:12846 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6030,7 +6085,7 @@ msgstr "" "\n" "アーカイブ '%s' にはシンボル索引がありません\n" -#: src/readelf.c:12853 +#: src/readelf.c:12923 #, c-format msgid "" "\n" @@ -6039,12 +6094,12 @@ msgstr "" "\n" "アーカイブ '%s' の索引は %zu 個の項目を持ちます:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12941 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "'%2$s' の オフセット %1$zu のメンバーを抽出できません: %3$s" -#: src/readelf.c:12876 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンバー '%s' には以下があります:\n" @@ -6165,6 +6220,7 @@ msgid "Total" msgstr "" #: src/size.c:482 +#, c-format msgid "cannot get section header" msgstr "セクションヘッダーを取得できません" @@ -6230,7 +6286,9 @@ msgstr "フレーム アドレスに 対する DWARF debuginfo name の検索を msgid "" "Additionally show inlined function frames using DWARF debuginfo if available " "(implies -d)" -msgstr "可能であれば DWARF debuginfo を使って インライン 関数の フレームを表示 (暗黙的に -d を伴う)" +msgstr "" +"可能であれば DWARF debuginfo を使って インライン 関数の フレームを表示 (暗黙" +"的に -d を伴う)" #: src/stack.c:661 msgid "Additionally show module file information" @@ -6244,7 +6302,8 @@ msgstr "ソース ファイル情報を さらに 表示" msgid "" "Show all additional information (activation, debugname, inlines, module and " "source)" -msgstr "全ての 追加情報を 表示 (activation, debugname, inlines, module, source)" +msgstr "" +"全ての 追加情報を 表示 (activation, debugname, inlines, module, source)" #: src/stack.c:667 msgid "Do not resolve address to function symbol name" @@ -6268,7 +6327,9 @@ msgstr "" #: src/stack.c:677 msgid "Show module memory map with build-id, elf and debug files detected" -msgstr "検出された ビルド ID、 elf、 debug ファイル付きで モジュールの メモリマップを 表示" +msgstr "" +"検出された ビルド ID、 elf、 debug ファイル付きで モジュールの メモリマップ" +"を 表示" #: src/stack.c:685 msgid "" @@ -6283,6 +6344,7 @@ msgid "" msgstr "" #: src/stack.c:760 +#, c-format msgid "Couldn't show any frames." msgstr "フレームを表示できません" @@ -6303,8 +6365,8 @@ msgid "" "Select character size and endianness: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " "{B,L} = 32-bit" msgstr "" -"文字サイズと エンディアンを 選択: s = 7-bit, S = 8-bit, {b,l} = 16-bit, " -"{B,L} = 32-bit" +"文字サイズと エンディアンを 選択: s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B," +"L} = 32-bit" #: src/strings.c:73 msgid "Print name of the file before each string." @@ -6401,15 +6463,17 @@ msgid "" "Remove the named section. SECTION is an extended wildcard pattern. May be " "given more than once. Only non-allocated sections can be removed." msgstr "" -"指定された セクションを 取り除く。 SECTION は 拡張 ワイルド カード パターン。 2回以上 与え られても よい。" -"割り当て されない セクション のみ 取り除ける。" +"指定された セクションを 取り除く。 SECTION は 拡張 ワイルド カード パター" +"ン。 2回以上 与え られても よい。割り当て されない セクション のみ 取り除け" +"る。" #: src/strip.c:91 msgid "" "Keep the named section. SECTION is an extended wildcard pattern. May be " "given more than once." msgstr "" -"指定された セクションを 保持する。 SECTION は 拡張 ワイルド カード パターン。 2回以上 与え られても よい。" +"指定された セクションを 保持する。 SECTION は 拡張 ワイルド カード パター" +"ン。 2回以上 与え られても よい。" #. Short description of program. #: src/strip.c:98 @@ -6444,24 +6508,26 @@ msgid "-F option specified twice" msgstr "-F オプションが 2 回指定されています" #: src/strip.c:362 +#, c-format msgid "cannot both keep and remove .comment section" msgstr ".comment セクションを保持しつつ取り除くことはできません" #: src/strip.c:481 +#, c-format msgid "bad relocation" msgstr "" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "入力ファイル '%s' を stat できません" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "'%s' を開いている間" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" @@ -6472,130 +6538,132 @@ msgstr "%s: アーカイブから抜き出している時は -o や -f は使え #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: アーカイブのストリップには対応していません" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" -#: src/strip.c:1092 +#: src/strip.c:1097 +#, c-format msgid "cannot get number of phdrs" msgstr "phdrs の数を取得できません" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "ファイル '%s' の新しい ehdr を作成できません: %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1121 src/strip.c:1164 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "ファイル '%s' の新しい phdr を作成できません: %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" -#: src/strip.c:1250 +#: src/strip.c:1254 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "割り当てされるセクション '%s' は取り除けません" -#: src/strip.c:1259 +#: src/strip.c:1263 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "セクション '%s' を保持しつつ取り除くことはできません" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: ELF ヘッダーの更新中にエラー: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: shdrstrndx の取得中にエラー: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: shdrstrndx の更新中にエラー: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' のための出力を準備している間" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生成している間: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 +#, c-format msgid "no memory to create section header string table" msgstr "セクションヘッダー文字列テーブルを作成するメモリがありません" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込み中: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "'%s' を生成中" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "デバッグ情報のチェックサムを計算中" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: ファイルを読込み中にエラー: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "書き込み中 '%s'" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' の終了中にエラー: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' のアクセスと変更日付を設定できません" @@ -6634,7 +6702,9 @@ msgstr "モジュール名、 ファイル名、 ビルドIDの リスト表示 #: src/unstrip.c:82 msgid "Force combining files even if some ELF headers don't seem to match" -msgstr "いくつかの ELF ヘッダー が 一致しない ように 見えた としても ファイルの 結合を 強制" +msgstr "" +"いくつかの ELF ヘッダー が 一致しない ように 見えた としても ファイルの 結合" +"を 強制" #: src/unstrip.c:126 #, c-format @@ -6664,9 +6734,11 @@ msgstr "ちょうど2つの引数が必要です" #: src/unstrip.c:200 #, c-format msgid "-m, -a, -R, and -i options not allowed with explicit files" -msgstr "明示的なファイルを使用する際は -m, -a, -R, -i オプションは認められていません" +msgstr "" +"明示的なファイルを使用する際は -m, -a, -R, -i オプションは認められていません" #: src/unstrip.c:213 +#, c-format msgid "-o or -d is required when using implicit files" msgstr "暗黙的なファイルを使用する際は -o または -d が必要です" @@ -6680,7 +6752,7 @@ msgstr "ELF ヘッダーを作成できません: %s" msgid "cannot get shdrstrndx:%s" msgstr "shdrstrndx を取得できません: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "ELF ヘッダーを取得できません: %s" @@ -6700,12 +6772,12 @@ msgstr "新しい zero セクションを更新できません: %s" msgid "cannot copy ELF header: %s" msgstr "ELF ヘッダーを複製できません: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, c-format msgid "cannot get number of program headers: %s" msgstr "プログラムヘッダ数を取得できません: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "プログラムヘッダーを作成できません: %s" @@ -6720,12 +6792,12 @@ msgstr "プログラムヘッダーを複製できません: %s" msgid "cannot copy section header: %s" msgstr "セクションヘッダーを複製できません: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "セクションデータを取得できません: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "セクションデータを複製できません: %s" @@ -6735,14 +6807,14 @@ msgstr "セクションデータを複製できません: %s" msgid "cannot create directory '%s'" msgstr "ディレクトリ '%s' を作成できません" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 -#: src/unstrip.c:1750 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "シンボルテーブル項目を取得できません: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 -#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "シンボルテーブルを更新できません: %s" @@ -6752,222 +6824,232 @@ msgstr "シンボルテーブルを更新できません: %s" msgid "cannot update section header: %s" msgstr "セクションヘッダーを更新できません: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "リロケーションを更新できません: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "シンボルバージョンを取得できません: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:848 +#: src/unstrip.c:850 #, c-format msgid "cannot get symbol section data: %s" msgstr "シンボルセクションデータを取得できません: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:852 #, c-format msgid "cannot get string section data: %s" msgstr "文字列セクションデータを取得できません: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:869 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "シンボル [%zu] の中に不当な文字列オフセットがあります" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "セクション [%zu] の名前を読み込めません: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1042 #, c-format msgid "bad sh_link for group section: %s" msgstr "グループセクションに対する誤った sh_link です: %s" -#: src/unstrip.c:1046 +#: src/unstrip.c:1048 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "グループセクションに対する shdr を取得できませんでした: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1053 #, c-format msgid "bad data for group symbol section: %s" msgstr "グループシンボルセクションに対する誤ったデータです: %s" -#: src/unstrip.c:1057 +#: src/unstrip.c:1059 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "グループセクションに対するシンボルを取得できませんでした: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1064 #, c-format msgid "bad symbol name for group section: %s" msgstr "グループセクションに対する誤ったシンボル名です: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1075 src/unstrip.c:1556 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1155 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1166 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1362 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1406 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1410 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1628 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1758 +#: src/unstrip.c:1760 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "シンボル [%zu] が不当なセクション索引を持っています" -#: src/unstrip.c:1790 +#: src/unstrip.c:1792 #, c-format msgid "group has invalid section index [%zd]" msgstr "グループが不当なセクション索引 [%zd] を持っています" -#: src/unstrip.c:2065 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "セクションデータを読み込めません: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新できません: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2174 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2177 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2235 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2239 msgid ", use --force" msgstr "" -#: src/unstrip.c:2265 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2269 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2273 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2277 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2308 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2312 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2327 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2331 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2344 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2375 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" @@ -7032,7 +7114,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "" @@ -7044,6 +7126,9 @@ msgstr "関数名を さらに 表示" msgid "Show instances of inlined functions" msgstr "インライン関数の実体を表示" +#~ msgid "cannot allocate memory" +#~ msgstr "メモリーを割り当てられません" + #, fuzzy #~ msgid "" #~ " [%6tx] base address\n" diff --git a/po/pl.po b/po/pl.po index 51d41ebd..f50b9f8a 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\n" "PO-Revision-Date: 2021-02-22 16:25+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" @@ -41,11 +41,6 @@ msgstr "" " • „never”, „no”, „none”\n" " • „auto”, „tty”, „if-tty”\n" -#: lib/color.c:194 src/objdump.c:728 -#, c-format -msgid "cannot allocate memory" -msgstr "nie można przydzielić pamięci" - #: lib/printversion.c:40 #, c-format msgid "" @@ -59,8 +54,8 @@ msgstr "" "BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI\n" "HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "pamięć wyczerpana" @@ -630,7 +625,7 @@ msgstr "nieprawidłowy rozmiar operandu źródłowego" msgid "invalid size of destination operand" msgstr "nieprawidłowy rozmiar operandu docelowego" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "nieprawidłowe kodowanie" @@ -715,8 +710,8 @@ msgstr "dane/scn nie zgadzają się" msgid "invalid section header" msgstr "nieprawidłowy nagłówek sekcji" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "nieprawidłowe dane" @@ -845,7 +840,7 @@ msgstr "" msgid "Print all information on one line, and indent inlines" msgstr "Wyświetla wszystkie informacje w jednym wierszy i wyrównuje wstawki" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Różne:" @@ -1181,73 +1176,73 @@ msgstr "archiwum „%s” jest za duże" msgid "cannot read ELF header of %s(%s): %s" msgstr "nie można odczytać nagłówka ELF %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "otwieranie" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "odczytywanie" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 msgid "ELF header" msgstr "nagłówek ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 msgid "program headers" msgstr "nagłówki programu" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 msgid "program header" msgstr "nagłówek programu" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 msgid "section headers" msgstr "nagłówki sekcji" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 msgid "section header string table index" msgstr "sekcja nagłówek ciąg tabela indeks" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 msgid "could not obtain section header" msgstr "nie można uzyskać nagłówka sekcji" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 msgid "could not obtain section name" msgstr "nie można uzyskać nazwy sekcji" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "zapisywanie do standardowego wyjścia" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "odczytywanie ze standardowego wejścia" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 msgid "Classification options" msgstr "Opcje klasyfikacji" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" "Plik wygląda jak obiekt ELF lub archiwum/biblioteka statyczna (domyślnie)" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" "Plik jest zwykłym obiektem ELF (nie jest archiwum/biblioteką statyczną)" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "Plik jest archiwum lub biblioteką statyczną ELF" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "Plik jest plikiem zrzutu core ELF" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" @@ -1255,60 +1250,60 @@ msgstr "" "Plik jest plikiem ELF z tabelą symboli lub sekcjami .debug_* i może być " "dalej okrojony" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "Plik jest (głównie) wykonywalnym programem ELF (nie jest głównie DSO)" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "Plik jest wykonywalnym programem ELF (może być także DSO)" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" "Plik jest (głównie) obiektem współdzielonym ELF (DSO) (nie jest głównie " "plikiem wykonywalnym)" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" "Plik jest obiektem współdzielonym ELF (DSO) (może być także plikiem " "wykonywalnym)" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 msgid "File is a linux kernel module" msgstr "Plik jest modułem jądra Linux" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" "Plik jest wyłącznie plikiem debugowania ELF (oddzielne .debug, .dwo lub " "wieloplikowe dwz)" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" "Plik jest wczytywalnym obiektem ELF (programem lub obiektem współdzielonym)" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "Flagi wejścia" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" "Klasyfikuje tylko zwykłe (niebędące dowiązaniami symbolicznymi lub " "urządzeniami specjalnymi) pliki" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" "Odczytuje także nazwy plików do przetworzenia ze standardowego wejścia, " "rozdzielone znakami nowego wiersza" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" @@ -1316,57 +1311,57 @@ msgstr "" "Odczytuje także nazwy plików do przetworzenia ze standardowego wejścia, " "rozdzielone bajtami NUL ASCII" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "Bez odczytywania plików ze standardowego wejścia (domyślnie)" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "Próbuje otwierać skompresowane pliki lub osadzone obrazy ELF (jądra)" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 msgid "Output flags" msgstr "Flagi wyjścia" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "Wyświetla nazwy plików, rozdzielone znakami nowego wiersza" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "Wyświetla nazwy plików, rozdzielone znakami NUL ASCII" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 msgid "Do not output file names" msgstr "Bez wyświetlania nazw plików" -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "Podczas wyświetlana nazw plików wyświetla pasujące pliki (domyślnie)" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "Podczas wyświetlania nazw plików wyświetla niepasujące pliki" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "Dodatkowe flagi" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "Wyświetla dodatkowe informacje (można podać wiele razy)" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "Zmniejsza wyjście błędów (odpowiednik opcji --verbose)" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "PLIK…" -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1633,14 +1628,14 @@ msgstr "%s %s różnią się: luka" msgid "Invalid value '%s' for --gaps parameter." msgstr "Nieprawidłowa wartość „%s” dla parametru --gaps." -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 -#: src/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, c-format msgid "cannot open '%s'" msgstr "nie można otworzyć „%s”" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "nie można utworzyć deskryptora ELF dla „%s”: %s" @@ -1650,7 +1645,7 @@ msgstr "nie można utworzyć deskryptora ELF dla „%s”: %s" msgid "cannot create EBL descriptor for '%s'" msgstr "nie można utworzyć deskryptora EBL dla „%s”" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "nie można uzyskać nagłówka sekcji dla sekcji %zu: %s" @@ -3728,91 +3723,91 @@ msgstr "nie można utworzyć zaplecza dla pliku ELF\n" msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Wybór wejścia:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "Dołącza ŚCIEŻKĘ do wszystkich nazw plików" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "Używa ŚCIEŻKI jako korzenia dla hierarchii debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "Odnajduje źródło relokacji tekstu w PLIKACH (domyślnie a.out)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[PLIK…]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "nie można uzyskać nagłówka ELF „%s”: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "„%s” nie jest DSO ani PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "uzyskiwanie nagłówka sekcji dla sekcji %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "nie można odczytać sekcji dynamicznej: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "brak relokacji tekstu w „%s”" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "podczas odczytywania pliku ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, c-format msgid "cannot get program header count: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "nie można uzyskać indeksu nagłówka programu pod offsetem %zd: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "nie można uzyskać sekcji tabeli symboli %zu w „%s”: %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "nie można uzyskać relokacji pod indeksem %d w sekcji %zu w „%s”: %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s nie został skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "plik zawierający funkcję „%s” nie został skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3820,7 +3815,7 @@ msgid "" msgstr "" "plik zawierający funkcję „%s” mógł nie zostać skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3829,7 +3824,7 @@ msgstr "" "plik zawierający funkcję „%s” lub plik zawierający funkcję „%s” nie został " "skompilowany z -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3936,12 +3931,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: BŁĄD WEWNĘTRZNY %d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2767 #, c-format msgid "while closing '%s'" msgstr "podczas zamykania „%s”" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" @@ -3975,24 +3970,24 @@ msgstr "nie można przywrócić offsetu w archiwum na początek" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: nie rozpoznano formatu pliku" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "nie można utworzyć drzewa wyszukiwania" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 #: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 #: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -4006,7 +4001,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4015,7 +4010,7 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:776 +#: src/nm.c:775 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4023,45 +4018,45 @@ msgid "Name" msgstr " Nazwa: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:777 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:779 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:781 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1249 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: rozmiar wpisu w sekcji %zd „%s” nie jest tym, czego oczekiwano" -#: src/nm.c:1255 +#: src/nm.c:1254 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: rozmiar sekcji %zd „%s” nie jest wielokrotnością rozmiaru wpisu" -#: src/nm.c:1336 +#: src/nm.c:1335 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: wpisy (%zd) w sekcji %zd „%s” są za duże" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: nieprawidłowe działanie" -#: src/nm.c:1622 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" @@ -4137,7 +4132,7 @@ msgstr "Zawartość sekcji %s:\n" msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:760 +#: src/objdump.c:759 #, c-format msgid "cannot create backend for elf file" msgstr "nie można utworzyć zaplecza dla pliku ELF" @@ -4324,7 +4319,7 @@ msgstr "Nieznana sekcja debugowania DWARF „%s”.\n" msgid "cannot generate Elf descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można określić liczby sekcji: %s" @@ -4334,11 +4329,11 @@ msgstr "nie można określić liczby sekcji: %s" msgid "cannot get section: %s" msgstr "nie można uzyskać sekcji: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 -#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "nie można uzyskać nagłówka sekcji: %s" @@ -4348,8 +4343,8 @@ msgstr "nie można uzyskać nagłówka sekcji: %s" msgid "cannot get section name" msgstr "nie można uzyskać nazwy sekcji" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartości %s: %s" @@ -4692,7 +4687,7 @@ msgstr "" " Mapowanie sekcji do segmentów:\n" " Segment sekcji…" -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" @@ -4741,18 +4736,18 @@ msgstr "" msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "Nie można dekompresować sekcji" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "nie można uzyskać nagłówka sekcji [%zd]: %s" #: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 #, c-format msgid "invalid sh_link value in section %zu" msgstr "nieprawidłowa wartość sh_link w sekcji %zu" @@ -5133,7 +5128,7 @@ msgstr "nieprawidłowy łańcuch w sekcji sysv.hash64 %d" msgid "invalid data in gnu.hash section %d" msgstr "nieprawidłowe dane w sekcji gnu.hash %d" -#: src/readelf.c:3452 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5143,7 +5138,7 @@ msgstr "" " Rozmiar maski bitowej: %zu B %%% b ustawionych drugie " "przesunięcie skrótu: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5164,7 +5159,7 @@ msgstr[2] "" "Sekcja listy bibliotek [%2zu] „%s” pod offsetem %#0 zawiera %d " "wpisów:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5172,7 +5167,7 @@ msgstr "" " Biblioteka Czas Suma k. Wersja " "Flagi" -#: src/readelf.c:3614 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -5182,102 +5177,102 @@ msgstr "" "\n" "Sekcja atrybutów obiektu [%2zu] „%s” % B pod offsetem %#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " Właściciel Rozmiar\n" -#: src/readelf.c:3655 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3697 #, c-format msgid " File: %11\n" msgstr " Plik: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3746 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3749 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3762 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 +#: src/readelf.c:3835 #, c-format msgid "sprintf failure" msgstr "sprintf się nie powiodło" -#: src/readelf.c:4319 +#: src/readelf.c:4317 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:4322 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "blok o %zu B:" -#: src/readelf.c:4800 +#: src/readelf.c:4798 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s \n" -#: src/readelf.c:4867 +#: src/readelf.c:4865 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4874 +#: src/readelf.c:4872 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4881 +#: src/readelf.c:4879 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# zostało użyte z różnymi adresami podstawowymi" -#: src/readelf.c:4888 +#: src/readelf.c:4886 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# zostało użyte z różnymi atrybutami %s i %s" -#: src/readelf.c:4988 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4996 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] … % B…\n" -#: src/readelf.c:5099 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -5288,7 +5283,7 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [ Kod]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5297,20 +5292,20 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** błąd podczas odczytywania skrótu: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, potomek: %s, znacznik: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5319,52 +5314,52 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5180 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "nie można uzyskać danych sekcji .debug_addr: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, c-format msgid " Address size: %8\n" msgstr " Rozmiar adresu: %8\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, c-format msgid " Segment size: %8\n" msgstr " Rozmiar segmentu: %8\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, c-format msgid "Unknown version" msgstr "Nieznana wersja" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, c-format msgid "unsupported address size" msgstr "nieobsługiwany rozmiar adresu" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "nieobsługiwany rozmiar segmentu" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartości .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5382,12 +5377,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5395,7 +5390,7 @@ msgstr "" " [%*zu] początek: %0#*, długość: %5, offset CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" @@ -5404,13 +5399,13 @@ msgstr "" "\n" "Tabela pod offsetem %zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidłowe dane w sekcji [%zu] „%s”" -#: src/readelf.c:5511 +#: src/readelf.c:5509 #, c-format msgid "" "\n" @@ -5419,27 +5414,27 @@ msgstr "" "\n" " Długość: %6\n" -#: src/readelf.c:5523 +#: src/readelf.c:5521 #, c-format msgid " DWARF version: %6\n" msgstr " Wersja DWARF: %6\n" -#: src/readelf.c:5527 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "nieobsługiwana wersja aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5536 #, c-format msgid " CU offset: %6\n" msgstr " Offset CU: %6\n" -#: src/readelf.c:5544 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6\n" msgstr " Offset adresu: %6\n" -#: src/readelf.c:5555 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6\n" @@ -5448,17 +5443,17 @@ msgstr "" " Rozmiar segmentu: %6\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr " %zu B wypełnienia\n" -#: src/readelf.c:5654 +#: src/readelf.c:5652 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "nie można uzyskać zawartości .debug_rnglists: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5675 src/readelf.c:9177 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5467,42 +5462,42 @@ msgstr "" "Tabela pod offsetem 0x%:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5730 src/readelf.c:9232 #, c-format msgid " Offset entries: %8\n" msgstr " Wpisy offsetu: %8\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr " Nieznana podstawa CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6] base: " msgstr " Podstawa CU [%6]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr " Brak powiązania z CU.\n" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "za dużo wpisów offsetu dla długości jednostki" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5769 src/readelf.c:9271 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Offsety zaczynające się w 0x%:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5821 #, c-format msgid "invalid range list data" msgstr "nieprawidłowe dane listy zakresów" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" @@ -5511,12 +5506,12 @@ msgstr "" " %zu B wypełnienia\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "nie można uzyskać zawartości .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" @@ -5525,7 +5520,7 @@ msgstr "" "\n" " Nieznana podstawa CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" @@ -5534,30 +5529,30 @@ msgstr "" "\n" " Podstawa CU [%6]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6095 src/readelf.c:9789 msgid "base address" msgstr "adres podstawowy" -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6105 src/readelf.c:9799 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:6367 +#: src/readelf.c:6365 msgid " \n" msgstr " \n" -#: src/readelf.c:6624 +#: src/readelf.c:6622 #, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5566,7 +5561,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywołania [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5575,65 +5570,65 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "nieprawidłowa długość powiększenia" -#: src/readelf.c:6808 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#)" msgstr " (kończący offset: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sWskaźnik LSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7051 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7061 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7083 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] nie można uzyskać wartości atrybutu „%s” (%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7413 #, c-format msgid "invalid file (%): %s" msgstr "nieprawidłowy plik (%): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7417 #, c-format msgid "no srcfiles for CU [%]" msgstr "brak plików źródłowych dla CU [%]" -#: src/readelf.c:7423 +#: src/readelf.c:7421 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "nie można uzyskać CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5644,12 +5639,12 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [Offset]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7786 #, c-format msgid "cannot get next unit: %s" msgstr "nie można uzyskać następnej jednostki: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7806 #, c-format msgid "" " Type unit at offset %:\n" @@ -5662,7 +5657,7 @@ msgstr "" "%, rozmiar offsetu: %\n" " Podpis typu: %#, offset typu: %# [%]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5673,38 +5668,38 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%)" msgstr " Typ jednostki: %s (%)" -#: src/readelf.c:7857 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "nieznana wersja (%d) lub typ jednostki (%d)" -#: src/readelf.c:7886 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7893 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem [%] w sekcji „%s”: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać następnego DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać następnego DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7981 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5715,7 +5710,7 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5726,18 +5721,18 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8365 #, c-format msgid "unknown form: %s" msgstr "nieznana forma: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "nie można uzyskać danych sekcji danych wiersza: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8517 #, c-format msgid "" "\n" @@ -5770,27 +5765,27 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8539 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "nie można obsłużyć wersji .debug_line: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8547 #, c-format msgid "cannot handle address size: %u\n" msgstr "nie można obsłużyć rozmiaru adresu: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "nie można obsłużyć rozmiaru selektora segmentu: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "nieprawidłowe dane pod offsetem %tu w sekcji [%zu] „%s”" -#: src/readelf.c:8565 +#: src/readelf.c:8580 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5798,7 +5793,7 @@ msgstr[0] " [%*] %hhu parametr\n" msgstr[1] " [%*] %hhu parametry\n" msgstr[2] " [%*] %hhu parametrów\n" -#: src/readelf.c:8576 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5806,12 +5801,12 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8597 src/readelf.c:8674 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8668 msgid "" "\n" "File name table:" @@ -5819,11 +5814,11 @@ msgstr "" "\n" "Tabela nazw plików:" -#: src/readelf.c:8714 +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" msgstr " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:8753 +#: src/readelf.c:8775 msgid "" "\n" "No line number statements." @@ -5831,7 +5826,7 @@ msgstr "" "\n" "Brak instrukcji numerów wierszy." -#: src/readelf.c:8757 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5839,118 +5834,129 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:8777 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "nieprawidłowe maksimum operacji na instrukcję wynosi zero" -#: src/readelf.c:8811 +#: src/readelf.c:8828 #, c-format msgid " special opcode %u: address+%u = " msgstr " instrukcja specjalna %u: adres+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8832 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", op_index = %u, wiersz%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr ", wiersz%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8858 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:8859 +#: src/readelf.c:8876 #, c-format msgid " set address to " msgstr " ustawienie adresu na " -#: src/readelf.c:8887 +#: src/readelf.c:8904 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" " definicja nowego pliku: dir=%u, mtime=%, długość=%, nazwa=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "Wyświetla także nazwy funkcji" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8976 msgid " unknown opcode" msgstr " nieznana instrukcja" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8988 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:8929 +#: src/readelf.c:8999 #, c-format msgid " advance address by %u to " msgstr " zwiększenie adresu o %u do " -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr ", op_index do %u" -#: src/readelf.c:8945 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %\n" msgstr " zwiększenie wiersza o stałą %d do %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9025 #, c-format msgid " set file to %\n" msgstr " ustawienie pliku na %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9036 #, c-format msgid " set column to %\n" msgstr " ustawienie kolumny na %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %\n" msgstr " ustawienie „%s” na %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:8990 +#: src/readelf.c:9060 #, c-format msgid " advance address by constant %u to " msgstr " zwiększenie adresu o stałą %u do " -#: src/readelf.c:9010 +#: src/readelf.c:9080 #, c-format msgid " advance address by fixed value %u to \n" msgstr " zwiększenie adresu o stałą wartość %u do \n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " ustawienie flagi końca prologu" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " ustawienie flagi początku epilogu" -#: src/readelf.c:9035 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" @@ -5958,7 +5964,7 @@ msgstr " ustawienie isa na %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5966,101 +5972,101 @@ msgstr[0] " nieznana instrukcja z % parametrem:" msgstr[1] " nieznana instrukcja z % parametrami:" msgstr[2] " nieznana instrukcja z % parametrami:" -#: src/readelf.c:9084 +#: src/readelf.c:9154 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "nie można uzyskać zawartości .debug_loclists: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9320 #, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9290 +#: src/readelf.c:9360 #, c-format msgid "invalid loclists data" msgstr "nieprawidłowe dane loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartości .debug_log: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " \n" msgstr " \n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakończony ciąg na końcu sekcji" -#: src/readelf.c:9914 +#: src/readelf.c:9984 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** brak parametru DW_MACINFO_start_file na końcu sekcji" -#: src/readelf.c:10015 +#: src/readelf.c:10085 #, c-format msgid " Offset: 0x%\n" msgstr " Offset: 0x%\n" -#: src/readelf.c:10027 +#: src/readelf.c:10097 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:10040 +#: src/readelf.c:10110 #, c-format msgid " Flag: 0x%" msgstr " Flaga: 0x%" -#: src/readelf.c:10069 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %\n" msgstr " Długość offsetu: %\n" -#: src/readelf.c:10077 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " Offset .debug_line: 0x%\n" -#: src/readelf.c:10102 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, % items:\n" msgstr " tabela instrukcji rozszerzenia, % elementów:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10179 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10121 +#: src/readelf.c:10191 #, c-format msgid " % arguments:" msgstr " Parametry %:" -#: src/readelf.c:10136 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:10337 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] offset DIE: %6, offset CU DIE: %6, nazwa: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -6072,42 +6078,42 @@ msgstr "" " %*s Ciąg\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10456 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10466 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** błąd, brak znaku kończącego ciąg\n" -#: src/readelf.c:10425 +#: src/readelf.c:10495 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "nie można uzyskać danych sekcji .debug_str_offsets: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10594 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:10526 +#: src/readelf.c:10596 #, c-format msgid " Offset size: %8\n" msgstr " Rozmiar offsetu: %8\n" -#: src/readelf.c:10540 +#: src/readelf.c:10610 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:10549 +#: src/readelf.c:10619 #, c-format msgid " Padding: %8\n" msgstr " Wypełnienie: %8\n" -#: src/readelf.c:10603 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -6116,7 +6122,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywołania [%2zu] „.eh_frame_hdr”:\n" -#: src/readelf.c:10705 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -6125,22 +6131,22 @@ msgstr "" "\n" "Sekcja tabeli obsługiwania wyjątków [%2zu] „.gcc_except_table”:\n" -#: src/readelf.c:10728 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywołania: %#x " -#: src/readelf.c:10768 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -6148,7 +6154,7 @@ msgstr "" "\n" " Tabela strony wywołania:" -#: src/readelf.c:10782 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6161,12 +6167,12 @@ msgstr "" " Lądowisko: %#\n" " Działanie: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "nieprawidłowe kodowanie TType" -#: src/readelf.c:10882 +#: src/readelf.c:10952 #, c-format msgid "" "\n" @@ -6175,37 +6181,37 @@ msgstr "" "\n" "Sekcja GDB [%2zu] „%s” pod offsetem %# zawiera % B:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10981 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#\n" msgstr " offset CU: %#\n" -#: src/readelf.c:10936 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#\n" msgstr " offset TU: %#\n" -#: src/readelf.c:10943 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#\n" msgstr " offset adresu: %#\n" -#: src/readelf.c:10950 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#\n" msgstr " offset symbolu: %#\n" -#: src/readelf.c:10957 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#\n" msgstr " offset stałej: %#\n" -#: src/readelf.c:10971 +#: src/readelf.c:11041 #, c-format msgid "" "\n" @@ -6214,7 +6220,7 @@ msgstr "" "\n" " Lista CU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11066 #, c-format msgid "" "\n" @@ -6223,7 +6229,7 @@ msgstr "" "\n" " Lista TU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11095 #, c-format msgid "" "\n" @@ -6232,7 +6238,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11127 #, c-format msgid "" "\n" @@ -6241,18 +6247,18 @@ msgstr "" "\n" " Tabela symboli pod offsetem %# zawiera %zu gniazd:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można konwertować danych notatki core: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -6261,21 +6267,21 @@ msgstr "" "\n" "%*s… …" -#: src/readelf.c:12438 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " Właściciel Rozmiar danych Typ\n" -#: src/readelf.c:12466 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12588 #, c-format msgid "cannot get content of note: %s" msgstr "nie można uzyskać zawartości notatki: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -6285,7 +6291,7 @@ msgstr "" "Segment notatki [%2zu] „%s” o długości % B pod offsetem " "%#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -6294,7 +6300,7 @@ msgstr "" "\n" "Segment notatki o długości % B pod offsetem %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12692 #, c-format msgid "" "\n" @@ -6303,12 +6309,12 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma danych do zrzucenia.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12719 src/readelf.c:12770 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "nie można uzyskać danych dla sekcji [%zu] „%s”: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12724 #, c-format msgid "" "\n" @@ -6318,7 +6324,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%zu] „%s”, % B pod offsetem " "%#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -6329,7 +6335,7 @@ msgstr "" "Zrzut szesnastkowy sekcji [%zu] „%s”, % B (%zd nieskompresowanych) " "pod offsetem %#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12743 #, c-format msgid "" "\n" @@ -6338,7 +6344,7 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma ciągów do zrzucenia.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12775 #, c-format msgid "" "\n" @@ -6347,7 +6353,7 @@ msgstr "" "\n" "Sekcja ciągów [%zu] „%s” zawiera % B pod offsetem %#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -6358,7 +6364,7 @@ msgstr "" "Sekcja ciągów [%zu] „%s” zawiera % B (%zd nieskompresowanych) pod " "offsetem %#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6367,7 +6373,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:12789 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6376,12 +6382,12 @@ msgstr "" "\n" "sekcja „%s” nie istnieje" -#: src/readelf.c:12846 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum „%s”: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6390,7 +6396,7 @@ msgstr "" "\n" "Archiwum „%s” nie ma indeksu symboli\n" -#: src/readelf.c:12853 +#: src/readelf.c:12923 #, c-format msgid "" "\n" @@ -6399,12 +6405,12 @@ msgstr "" "\n" "Indeks archiwum „%s” ma %zu wpisów:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12941 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "nie można wydobyć elementów pod offsetem %zu w „%s”: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum „%s” zawiera:\n" @@ -6846,17 +6852,17 @@ msgstr "nie można jednocześnie zachować i usunąć sekcji .comment" msgid "bad relocation" msgstr "błędna relokacja" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "nie można wykonać stat na pliku wejściowym „%s”" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "podczas otwierania „%s”" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" @@ -6867,132 +6873,132 @@ msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: brak obsługi okrajania archiwum" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, c-format msgid "cannot get number of phdrs" msgstr "nie można uzyskać liczby phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "nie można utworzyć nowego ehdr dla pliku „%s”: %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1121 src/strip.c:1164 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "nie można utworzyć nowego phdr dla pliku „%s”: %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "plik „%s” ma błędny format" -#: src/strip.c:1250 +#: src/strip.c:1254 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Nie można usunąć przydzielonej sekcji „%s”" -#: src/strip.c:1259 +#: src/strip.c:1263 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Nie można jednocześnie zachować i usunąć sekcji „%s”" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjściowego: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: błąd podczas aktualizowania nagłówka ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: błąd podczas uzyskiwania shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: błąd podczas aktualizowania shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjścia dla „%s”" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciągów nagłówka sekcji: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format msgid "no memory to create section header string table" msgstr "brak pamięci do utworzenia tabeli ciągów nagłówka sekcji" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "Nie można usunąć symbolu [%zd] z przydzielonej tabeli symboli [%zd]" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania „%s”: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia „%s”" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: błąd podczas tworzenia nagłówka ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: błąd podczas odczytywania pliku: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania „%s”" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "błąd podczas kończenia „%s”: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostępu i modyfikacji „%s”" @@ -7080,7 +7086,7 @@ msgstr "nie można utworzyć nagłówka ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "nie można uzyskać shdrstrndx: %s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" @@ -7100,12 +7106,12 @@ msgstr "nie można zaktualizować nowej sekcji zerowej: %s" msgid "cannot copy ELF header: %s" msgstr "nie można skopiować nagłówka ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, c-format msgid "cannot get number of program headers: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "nie można utworzyć nagłówków programu: %s" @@ -7120,12 +7126,12 @@ msgstr "nie można skopiować nagłówka programu: %s" msgid "cannot copy section header: %s" msgstr "nie można skopiować nagłówka sekcji: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "nie można uzyskać danych sekcji: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" @@ -7135,14 +7141,14 @@ msgstr "nie można skopiować danych sekcji: %s" msgid "cannot create directory '%s'" msgstr "nie można utworzyć katalogu „%s”" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 -#: src/unstrip.c:1750 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "nie można uzyskać wpisu tabeli symboli: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 -#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" @@ -7152,166 +7158,176 @@ msgstr "nie można zaktualizować tabeli symboli: %s" msgid "cannot update section header: %s" msgstr "nie można zaktualizować nagłówka sekcji: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "nie można zaktualizować relokacji: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "nieoczekiwany typ sekcji w [%zu] z sh_link do tabeli symboli" -#: src/unstrip.c:848 +#: src/unstrip.c:850 #, c-format msgid "cannot get symbol section data: %s" msgstr "nie można uzyskać danych sekcji symboli: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:852 #, c-format msgid "cannot get string section data: %s" msgstr "nie można uzyskać danych sekcji ciągów: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:869 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "nieprawidłowy offset ciągu w symbolu [%zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "nie można odczytać nazwy sekcji [%zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1042 #, c-format msgid "bad sh_link for group section: %s" msgstr "błędne sh_link dla sekcji grupy: %s" -#: src/unstrip.c:1046 +#: src/unstrip.c:1048 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "nie można uzyskać shdr dla sekcji grupy: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1053 #, c-format msgid "bad data for group symbol section: %s" msgstr "błędne dane dla sekcji symboli grupy: %s" -#: src/unstrip.c:1057 +#: src/unstrip.c:1059 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "nie można uzyskać symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1064 #, c-format msgid "bad symbol name for group section: %s" msgstr "błędna nazwa symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1075 src/unstrip.c:1556 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "nie można odnaleźć pasującej sekcji dla [%zu] „%s”" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "nie można odczytać sekcji „.gnu.prelink_undo”: %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "przepełnienie z shnum = %zu w sekcji „%s”" -#: src/unstrip.c:1166 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "nieprawidłowa zawartość w sekcji „%s”" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "nie można nazwy sekcji do tabeli ciągów: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "nie można zaktualizować danych tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "nie można uzyskać indeksu sekcji tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1406 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "więcej sekcji w okrojonym pliku niż w pliku debugowania — odwrócono " "parametry?" -#: src/unstrip.c:1410 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "brak sekcji w okrojonym pliku" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1760 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "symbol [%zu] ma nieprawidłowy indeks sekcji" -#: src/unstrip.c:1790 +#: src/unstrip.c:1792 #, c-format msgid "group has invalid section index [%zd]" msgstr "grupa ma nieprawidłowy indeks sekcji [%zd]" -#: src/unstrip.c:2065 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "nie można zaktualizować nagłówka programu: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjściowego: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Dane DWARF nie zostały dostosowane do przesunięcia wczesnego konsolidowania; " "proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7319,61 +7335,61 @@ msgstr "" "Dane DWARF w „%s” nie zostały dostosowane do przesunięcia wczesnego " "konsolidowania; proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "OSTRZEŻENIE: " -#: src/unstrip.c:2237 +#: src/unstrip.c:2239 msgid ", use --force" msgstr ", należy użyć opcji --force" -#: src/unstrip.c:2265 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "Różna identyfikacja nagłówka ELF (e_ident)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "Różne typy nagłówka ELF (e_type)" -#: src/unstrip.c:2273 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "Różne typy maszyny nagłówka ELF (e_machine)" -#: src/unstrip.c:2277 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "okrojony nagłówek programu (e_phnum) jest mniejszy niż nieokrojony" -#: src/unstrip.c:2308 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "nie można odnaleźć okrojonego pliku dla modułu „%s”: %s" -#: src/unstrip.c:2312 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "nie można otworzyć okrojonego pliku „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "nie można odnaleźć pliku debugowania dla modułu „%s”: %s" -#: src/unstrip.c:2331 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "nie można otworzyć pliku debugowania „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "moduł „%s” pliku „%s” nie został okrojony" -#: src/unstrip.c:2375 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" @@ -7474,7 +7490,7 @@ msgstr "" "source IDENTYFIKATOR-KOPII /NAZWA-PLIKU\n" "source ŚCIEŻKA /NAZWA-PLIKU\n" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "Uruchamia plik wykonywalny" @@ -7485,3 +7501,7 @@ msgstr "Dodatkowo wyświetla nazwy funkcji" #: tests/dwflmodtest.c:210 msgid "Show instances of inlined functions" msgstr "Wyświetla wystąpienia wstawionych funkcji" + +#, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "nie można przydzielić pamięci" diff --git a/po/uk.po b/po/uk.po index 27c72120..cac761e3 100644 --- a/po/uk.po +++ b/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-05-22 15:33+0200\n" +"POT-Creation-Date: 2021-11-10 16:21+0100\n" "PO-Revision-Date: 2020-03-28 14:59+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" @@ -41,11 +41,6 @@ msgstr "" " - «never», «no», «none»\n" " - «auto», «tty», «if-tty»\n" -#: lib/color.c:194 src/objdump.c:728 -#, c-format -msgid "cannot allocate memory" -msgstr "не вдалося розподілити пам’ять" - #: lib/printversion.c:40 #, c-format msgid "" @@ -58,8 +53,8 @@ msgstr "" "початкових кодах. Умовами ліцензування програми НЕ передбачено жодних " "гарантій, зокрема гарантій працездатності або придатності для певної мети.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:3461 -#: src/readelf.c:11512 src/unstrip.c:312 src/unstrip.c:2404 src/unstrip.c:2609 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: src/unstrip.c:312 #, c-format msgid "memory exhausted" msgstr "пам’ять вичерпано" @@ -634,7 +629,7 @@ msgstr "некоректна розмірність вхідного парам msgid "invalid size of destination operand" msgstr "некоректна розмірність вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:6217 +#: libelf/elf_error.c:87 src/readelf.c:6215 #, c-format msgid "invalid encoding" msgstr "некоректне кодування" @@ -719,8 +714,8 @@ msgstr "невідповідність полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:191 src/readelf.c:10023 src/readelf.c:10623 -#: src/readelf.c:10724 src/readelf.c:10906 +#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 +#: src/readelf.c:10794 src/readelf.c:10976 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -848,7 +843,7 @@ msgstr "Виводити розшифровані символи (АРГ зав msgid "Print all information on one line, and indent inlines" msgstr "Вивести усі дані у один рядок і додати відступи до перенесених рядків" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:65 src/nm.c:100 +#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Інше:" @@ -1187,197 +1182,197 @@ msgstr "розмір архіву «%s» є занадто великим" msgid "cannot read ELF header of %s(%s): %s" msgstr "не вдалося прочитати заголовок ELF з %s(%s): %s" -#: src/elfclassify.c:92 +#: src/elfclassify.c:91 msgid "opening" msgstr "" -#: src/elfclassify.c:99 +#: src/elfclassify.c:98 msgid "reading" msgstr "" -#: src/elfclassify.c:245 +#: src/elfclassify.c:244 #, fuzzy #| msgid "cannot get ELF header" msgid "ELF header" msgstr "не вдалося отримати заголовок ELF" -#: src/elfclassify.c:256 +#: src/elfclassify.c:255 #, fuzzy #| msgid "Program Headers:" msgid "program headers" msgstr "Заголовки програми:" -#: src/elfclassify.c:265 +#: src/elfclassify.c:264 #, fuzzy #| msgid "Program Headers:" msgid "program header" msgstr "Заголовки програми:" -#: src/elfclassify.c:285 +#: src/elfclassify.c:284 #, fuzzy #| msgid "Section Headers:" msgid "section headers" msgstr "Заголовки розділів:" -#: src/elfclassify.c:296 +#: src/elfclassify.c:295 #, fuzzy #| msgid "cannot get section header string table index" msgid "section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" -#: src/elfclassify.c:310 +#: src/elfclassify.c:309 #, fuzzy #| msgid "cannot get section header" msgid "could not obtain section header" msgstr "не вдалося отримати заголовок розділу" -#: src/elfclassify.c:316 +#: src/elfclassify.c:315 #, fuzzy #| msgid "cannot get section name" msgid "could not obtain section name" msgstr "не вдалося отримати назву розділу" -#: src/elfclassify.c:829 +#: src/elfclassify.c:828 msgid "writing to standard output" msgstr "" -#: src/elfclassify.c:856 +#: src/elfclassify.c:855 msgid "reading from standard input" msgstr "" -#: src/elfclassify.c:877 +#: src/elfclassify.c:876 #, fuzzy #| msgid "Input selection options:" msgid "Classification options" msgstr "Вибір параметрів виведення даних:" -#: src/elfclassify.c:879 +#: src/elfclassify.c:878 msgid "File looks like an ELF object or archive/static library (default)" msgstr "" -#: src/elfclassify.c:882 +#: src/elfclassify.c:881 msgid "File is an regular ELF object (not an archive/static library)" msgstr "" -#: src/elfclassify.c:885 +#: src/elfclassify.c:884 msgid "File is an ELF archive or static library" msgstr "" -#: src/elfclassify.c:888 +#: src/elfclassify.c:887 msgid "File is an ELF core dump file" msgstr "" -#: src/elfclassify.c:891 +#: src/elfclassify.c:890 msgid "" "File is an ELF file with symbol table or .debug_* sections and can be " "stripped further" msgstr "" -#: src/elfclassify.c:894 +#: src/elfclassify.c:893 msgid "File is (primarily) an ELF program executable (not primarily a DSO)" msgstr "" -#: src/elfclassify.c:897 +#: src/elfclassify.c:896 msgid "File is an ELF program executable (might also be a DSO)" msgstr "" -#: src/elfclassify.c:900 +#: src/elfclassify.c:899 msgid "" "File is (primarily) an ELF shared object (DSO) (not primarily an executable)" msgstr "" -#: src/elfclassify.c:903 +#: src/elfclassify.c:902 msgid "File is an ELF shared object (DSO) (might also be an executable)" msgstr "" -#: src/elfclassify.c:907 +#: src/elfclassify.c:906 #, fuzzy #| msgid "cannot find kernel modules" msgid "File is a linux kernel module" msgstr "не вдалося виявити модулі ядра" -#: src/elfclassify.c:909 +#: src/elfclassify.c:908 msgid "File is a debug only ELF file (separate .debug, .dwo or dwz multi-file)" msgstr "" -#: src/elfclassify.c:912 +#: src/elfclassify.c:911 msgid "File is a loadable ELF object (program or shared object)" msgstr "" -#: src/elfclassify.c:941 +#: src/elfclassify.c:940 msgid "Input flags" msgstr "" -#: src/elfclassify.c:943 +#: src/elfclassify.c:942 msgid "Only classify regular (not symlink nor special device) files" msgstr "" -#: src/elfclassify.c:945 +#: src/elfclassify.c:944 msgid "" "Also read file names to process from standard input, separated by newlines" msgstr "" -#: src/elfclassify.c:948 +#: src/elfclassify.c:947 msgid "" "Also read file names to process from standard input, separated by ASCII NUL " "bytes" msgstr "" -#: src/elfclassify.c:951 +#: src/elfclassify.c:950 msgid "Do not read files from standard input (default)" msgstr "" -#: src/elfclassify.c:953 +#: src/elfclassify.c:952 msgid "Try to open compressed files or embedded (kernel) ELF images" msgstr "" -#: src/elfclassify.c:956 +#: src/elfclassify.c:955 #, fuzzy #| msgid "Output format:" msgid "Output flags" msgstr "Формат виводу:" -#: src/elfclassify.c:958 +#: src/elfclassify.c:957 msgid "Output names of files, separated by newline" msgstr "" -#: src/elfclassify.c:960 +#: src/elfclassify.c:959 msgid "Output names of files, separated by ASCII NUL" msgstr "" -#: src/elfclassify.c:962 +#: src/elfclassify.c:961 #, fuzzy #| msgid "More than one output file name given." msgid "Do not output file names" msgstr "Вказано декілька назв файлів виведення даних." -#: src/elfclassify.c:964 +#: src/elfclassify.c:963 msgid "If printing file names, print matching files (default)" msgstr "" -#: src/elfclassify.c:966 +#: src/elfclassify.c:965 msgid "If printing file names, print files that do not match" msgstr "" -#: src/elfclassify.c:968 +#: src/elfclassify.c:967 msgid "Additional flags" msgstr "" -#: src/elfclassify.c:970 +#: src/elfclassify.c:969 msgid "Output additional information (can be specified multiple times)" msgstr "" -#: src/elfclassify.c:972 +#: src/elfclassify.c:971 msgid "Suppress some error output (counterpart to --verbose)" msgstr "" #. Strings for arguments in help texts. -#: src/elfclassify.c:980 src/elfcompress.c:1334 src/elflint.c:77 +#: src/elfclassify.c:979 src/elfcompress.c:1334 src/elflint.c:77 #: src/readelf.c:158 msgid "FILE..." msgstr "ФАЙЛ..." -#: src/elfclassify.c:981 +#: src/elfclassify.c:980 msgid "" "Determine the type of an ELF file.\n" "\n" @@ -1609,14 +1604,14 @@ msgstr "%s %s diff: проміжок" msgid "Invalid value '%s' for --gaps parameter." msgstr "Некоректне значення «%s» параметра --gaps." -#: src/elfcmp.c:734 src/findtextrel.c:205 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1030 src/strip.c:1067 -#: src/unstrip.c:2195 src/unstrip.c:2224 +#: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 +#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 +#: src/unstrip.c:2197 src/unstrip.c:2226 #, c-format msgid "cannot open '%s'" msgstr "не вдалося відкрити «%s»" -#: src/elfcmp.c:738 src/findtextrel.c:212 src/ranlib.c:158 +#: src/elfcmp.c:738 src/findtextrel.c:214 src/ranlib.c:158 #, c-format msgid "cannot create ELF descriptor for '%s': %s" msgstr "не вдалося створити дескриптор ELF для «%s»: %s" @@ -1626,7 +1621,7 @@ msgstr "не вдалося створити дескриптор ELF для «% msgid "cannot create EBL descriptor for '%s'" msgstr "не вдалося створити дескриптор EBL для «%s»" -#: src/elfcmp.c:761 src/findtextrel.c:394 +#: src/elfcmp.c:761 src/findtextrel.c:385 #, c-format msgid "cannot get section header of section %zu: %s" msgstr "не вдалося отримати заголовок розділу %zu: %s" @@ -3748,93 +3743,93 @@ msgid "text relocation flag set but not needed\n" msgstr "" "встановлено прапорець пересування тексту, але такий прапорець не потрібен\n" -#: src/findtextrel.c:60 +#: src/findtextrel.c:61 msgid "Input Selection:" msgstr "Вибір параметрів виводу даних:" -#: src/findtextrel.c:61 +#: src/findtextrel.c:62 msgid "Prepend PATH to all file names" msgstr "Додавати ШЛЯХ до всіх назв файлів" -#: src/findtextrel.c:63 +#: src/findtextrel.c:64 msgid "Use PATH as root of debuginfo hierarchy" msgstr "Використовувати ШЛЯХ як кореневий каталог для ієрархії debuginfo" #. Short description of program. -#: src/findtextrel.c:70 +#: src/findtextrel.c:71 msgid "Locate source of text relocations in FILEs (a.out by default)." msgstr "Шукає джерело пересуваного тексту у ФАЙЛАХ (типово, a.out)." #. Strings for arguments in help texts. -#: src/findtextrel.c:74 src/nm.c:108 src/objdump.c:71 src/size.c:80 +#: src/findtextrel.c:75 src/nm.c:108 src/objdump.c:71 src/size.c:80 #: src/strings.c:87 src/strip.c:101 msgid "[FILE...]" msgstr "[ФАЙЛ...]" -#: src/findtextrel.c:222 +#: src/findtextrel.c:224 #, c-format msgid "cannot get ELF header '%s': %s" msgstr "не вдалося отримати заголовок ELF «%s»: %s" -#: src/findtextrel.c:233 +#: src/findtextrel.c:235 #, c-format msgid "'%s' is not a DSO or PIE" msgstr "«%s» не є DSO або PIE" -#: src/findtextrel.c:253 +#: src/findtextrel.c:255 #, c-format msgid "getting get section header of section %zu: %s" msgstr "отримання заголовка розділу get розділу %zu: %s" -#: src/findtextrel.c:277 +#: src/findtextrel.c:279 #, c-format msgid "cannot read dynamic section: %s" msgstr "не вдалося прочитати динамічний розділ: %s" -#: src/findtextrel.c:298 +#: src/findtextrel.c:300 #, c-format msgid "no text relocations reported in '%s'" msgstr "у «%s» не виявлено пересувань тексту" -#: src/findtextrel.c:310 +#: src/findtextrel.c:311 #, c-format msgid "while reading ELF file" msgstr "під час спроби читання файла ELF" -#: src/findtextrel.c:314 +#: src/findtextrel.c:315 #, c-format msgid "cannot get program header count: %s" msgstr "не вдалося отримати кількість заголовків програми: %s" -#: src/findtextrel.c:325 src/findtextrel.c:342 +#: src/findtextrel.c:326 src/findtextrel.c:341 #, c-format msgid "cannot get program header index at offset %zd: %s" msgstr "не вдалося отримати індекс заголовка програми за зміщенням %zd: %s" -#: src/findtextrel.c:406 +#: src/findtextrel.c:397 #, c-format msgid "cannot get symbol table section %zu in '%s': %s" msgstr "не вдалося отримати таблицю символів розділу %zu у «%s»: %s" -#: src/findtextrel.c:427 src/findtextrel.c:450 +#: src/findtextrel.c:418 src/findtextrel.c:441 #, c-format msgid "cannot get relocation at index %d in section %zu in '%s': %s" msgstr "" "не вдалося отримати пересування за індексом %d у розділі %zu у «%s»: %s" -#: src/findtextrel.c:516 +#: src/findtextrel.c:507 #, c-format msgid "%s not compiled with -fpic/-fPIC\n" msgstr "%s не зібрано з -fpic/-fPIC\n" -#: src/findtextrel.c:570 +#: src/findtextrel.c:561 #, c-format msgid "" "the file containing the function '%s' is not compiled with -fpic/-fPIC\n" msgstr "" "файл, що містить функцію «%s», не було зібрано з параметрами -fpic/-fPIC\n" -#: src/findtextrel.c:577 src/findtextrel.c:597 +#: src/findtextrel.c:568 src/findtextrel.c:588 #, c-format msgid "" "the file containing the function '%s' might not be compiled with -fpic/-" @@ -3843,7 +3838,7 @@ msgstr "" "файл, що містить функцію «%s», ймовірно, не було зібрано з параметрами -" "fpic/-fPIC\n" -#: src/findtextrel.c:585 +#: src/findtextrel.c:576 #, c-format msgid "" "either the file containing the function '%s' or the file containing the " @@ -3852,7 +3847,7 @@ msgstr "" "файл, що містить функцію «%s», або файл, що містить функцію «%s», зібрано " "без параметрів -fpic/-fPIC\n" -#: src/findtextrel.c:605 +#: src/findtextrel.c:596 #, c-format msgid "" "a relocation modifies memory at offset %llu in a write-protected segment\n" @@ -3959,12 +3954,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: ВНУТРІШНЯ ПОМИЛКА %d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2763 +#: src/strip.c:2767 #, c-format msgid "while closing '%s'" msgstr "під час закриття «%s»" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:818 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 #, c-format msgid "%s: File format not recognized" msgstr "%s: не вдалося розпізнати формат файла" @@ -3998,24 +3993,24 @@ msgstr "не вдалося відновити зміщення початку msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: не вдалося розпізнати формат файла" -#: src/nm.c:705 +#: src/nm.c:704 #, c-format msgid "cannot create search tree" msgstr "не вдалося створити дерево пошуку" -#: src/nm.c:746 src/nm.c:1239 src/objdump.c:782 src/readelf.c:637 +#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 #: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 #: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3480 src/readelf.c:3530 -#: src/readelf.c:3600 src/readelf.c:11339 src/readelf.c:12533 -#: src/readelf.c:12744 src/readelf.c:12813 src/size.c:398 src/size.c:470 -#: src/strip.c:1084 +#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 +#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 +#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 +#: src/strip.c:1089 #, c-format msgid "cannot get section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" #. We always print this prolog. -#: src/nm.c:771 +#: src/nm.c:770 #, c-format msgid "" "\n" @@ -4029,7 +4024,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:774 +#: src/nm.c:773 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4038,7 +4033,7 @@ msgstr "" "%*s%-*s %-*s Клас Тип %-*s %*s Розділ\n" "\n" -#: src/nm.c:776 +#: src/nm.c:775 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4046,45 +4041,45 @@ msgid "Name" msgstr "Назва: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:778 +#: src/nm.c:777 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:780 +#: src/nm.c:779 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:782 +#: src/nm.c:781 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1250 +#: src/nm.c:1249 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: розмір запису у розділі %zd «%s» не є очікуваним" -#: src/nm.c:1255 +#: src/nm.c:1254 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: розмір розділу %zd «%s» не є кратним до розміру запису" -#: src/nm.c:1336 +#: src/nm.c:1335 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: записи (%zd) у розділі %zd, «%s» є завеликим" #. XXX Add machine specific object file types. -#: src/nm.c:1572 +#: src/nm.c:1571 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна дія" -#: src/nm.c:1622 +#: src/nm.c:1621 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає символів" @@ -4160,7 +4155,7 @@ msgstr "Вміст розділу %s:\n" msgid "cannot disassemble" msgstr "не вдалося дизасемблювати" -#: src/objdump.c:760 +#: src/objdump.c:759 #, fuzzy, c-format msgid "cannot create backend for elf file" msgstr "не вдалося створити файл" @@ -4346,7 +4341,7 @@ msgstr "Невідомий діагностичний розділ DWARF «%s». msgid "cannot generate Elf descriptor: %s" msgstr "не вдалося створити дескриптор Elf: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1179 +#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалося визначити кількість розділів: %s" @@ -4356,11 +4351,11 @@ msgstr "не вдалося визначити кількість розділі msgid "cannot get section: %s" msgstr "не вдалося отримати розділ: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12764 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:489 src/unstrip.c:610 -#: src/unstrip.c:631 src/unstrip.c:671 src/unstrip.c:887 src/unstrip.c:1222 -#: src/unstrip.c:1349 src/unstrip.c:1373 src/unstrip.c:1429 src/unstrip.c:1470 -#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 +#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 +#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 +#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 +#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 #, c-format msgid "cannot get section header: %s" msgstr "не вдалося отримати заголовок розділу: %s" @@ -4370,8 +4365,8 @@ msgstr "не вдалося отримати заголовок розділу: msgid "cannot get section name" msgstr "не вдалося отримати назву розділу" -#: src/readelf.c:672 src/readelf.c:6636 src/readelf.c:10611 src/readelf.c:10713 -#: src/readelf.c:10891 +#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 +#: src/readelf.c:10961 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалося отримати дані %s: %s" @@ -4713,7 +4708,7 @@ msgstr "" " Відображення розділів на сегмент:\n" " Розділи сегмента..." -#: src/readelf.c:1464 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 +#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 #, c-format msgid "cannot get program header: %s" msgstr "не вдалося отримати заголовок програми: %s" @@ -4762,18 +4757,18 @@ msgstr "<НЕКОРЕКТНИЙ СИМВОЛ>" msgid "" msgstr "<НЕКОРЕКТНИЙ РОЗДІЛ>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3496 src/readelf.c:12635 -#: src/readelf.c:12642 src/readelf.c:12686 src/readelf.c:12693 +#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 +#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 msgid "Couldn't uncompress section" msgstr "Не вдалося розпакувати розділ" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3501 +#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "не вдалося отримати заголовок розділу [%zd]: %s" #: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5409 +#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 #, c-format msgid "invalid sh_link value in section %zu" msgstr "некоректне значення sh_link у розділі %zu" @@ -5141,7 +5136,7 @@ msgstr "некоректний ланцюжок у розділі sysv.hash64 %d msgid "invalid data in gnu.hash section %d" msgstr "некоректні дані у розділі gnu.hash %d" -#: src/readelf.c:3452 +#: src/readelf.c:3451 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5151,7 +5146,7 @@ msgstr "" " Розмір бітової маски: %zu байтів %%% встановлених бітів зсув " "2-го хешу: %u\n" -#: src/readelf.c:3541 +#: src/readelf.c:3539 #, c-format msgid "" "\n" @@ -5172,7 +5167,7 @@ msgstr[2] "" "Розділ списку бібліотек [%2zu] «%s» за зміщенням %#0 містить %d " "записів:\n" -#: src/readelf.c:3555 +#: src/readelf.c:3553 msgid "" " Library Time Stamp Checksum Version " "Flags" @@ -5180,7 +5175,7 @@ msgstr "" " Бібліотека Часовий штамп Версія суми " "Прапорці" -#: src/readelf.c:3614 +#: src/readelf.c:3612 #, c-format msgid "" "\n" @@ -5191,102 +5186,102 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:3631 +#: src/readelf.c:3629 msgid " Owner Size\n" msgstr " Власник Розмір\n" -#: src/readelf.c:3655 +#: src/readelf.c:3653 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3694 +#: src/readelf.c:3692 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3699 +#: src/readelf.c:3697 #, c-format msgid " File: %11\n" msgstr " Файл: %11\n" -#: src/readelf.c:3748 +#: src/readelf.c:3746 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3751 +#: src/readelf.c:3749 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3754 +#: src/readelf.c:3752 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3764 +#: src/readelf.c:3762 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3767 +#: src/readelf.c:3765 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3837 +#: src/readelf.c:3835 #, c-format msgid "sprintf failure" msgstr "помилка sprintf" -#: src/readelf.c:4319 +#: src/readelf.c:4317 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:4322 +#: src/readelf.c:4320 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4800 +#: src/readelf.c:4798 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s <ОБРІЗАНО>\n" -#: src/readelf.c:4867 +#: src/readelf.c:4865 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# використано з різними розмірами адрес" -#: src/readelf.c:4874 +#: src/readelf.c:4872 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# використано з різними розмірами зміщень" -#: src/readelf.c:4881 +#: src/readelf.c:4879 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# використано з різними базовими адресами" -#: src/readelf.c:4888 +#: src/readelf.c:4886 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# використано з різними атрибутами, %s і %s" -#: src/readelf.c:4988 +#: src/readelf.c:4986 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4996 +#: src/readelf.c:4994 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ> ... % байтів ...\n" -#: src/readelf.c:5099 +#: src/readelf.c:5097 #, c-format msgid "" "\n" @@ -5297,7 +5292,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" " [ Код]\n" -#: src/readelf.c:5107 +#: src/readelf.c:5105 #, c-format msgid "" "\n" @@ -5306,20 +5301,20 @@ msgstr "" "\n" "Розділ скорочень за зміщенням %:\n" -#: src/readelf.c:5120 +#: src/readelf.c:5118 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під час читання скорочення: %s\n" -#: src/readelf.c:5136 +#: src/readelf.c:5134 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] зміщення: %, дочірній: %s, мітка: %s\n" -#: src/readelf.c:5169 src/readelf.c:5478 src/readelf.c:5645 src/readelf.c:6030 -#: src/readelf.c:6646 src/readelf.c:8386 src/readelf.c:9075 src/readelf.c:9548 -#: src/readelf.c:9799 src/readelf.c:9965 src/readelf.c:10352 -#: src/readelf.c:10412 +#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 +#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 +#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 +#: src/readelf.c:10482 #, c-format msgid "" "\n" @@ -5328,54 +5323,54 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" -#: src/readelf.c:5182 +#: src/readelf.c:5180 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "не вдалося отримати дані розділу .debug_addr: %s" -#: src/readelf.c:5282 src/readelf.c:5306 src/readelf.c:5690 src/readelf.c:9120 +#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:5284 src/readelf.c:5321 src/readelf.c:5703 src/readelf.c:9133 +#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:5285 src/readelf.c:5330 src/readelf.c:5712 src/readelf.c:9142 +#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 #, c-format msgid " Address size: %8\n" msgstr " Розмір адреси: %8\n" -#: src/readelf.c:5287 src/readelf.c:5340 src/readelf.c:5722 src/readelf.c:9152 +#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 #, c-format msgid " Segment size: %8\n" msgstr "" " Розмір сегмента: %8\n" "\n" -#: src/readelf.c:5325 src/readelf.c:5707 src/readelf.c:9137 src/readelf.c:10544 +#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 #, c-format msgid "Unknown version" msgstr "Невідома версія" -#: src/readelf.c:5335 src/readelf.c:5548 src/readelf.c:5717 src/readelf.c:9147 +#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 #, c-format msgid "unsupported address size" msgstr "непідтримуваний розмір адреси" -#: src/readelf.c:5346 src/readelf.c:5559 src/readelf.c:5727 src/readelf.c:9157 +#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір сегмента" -#: src/readelf.c:5399 src/readelf.c:5473 +#: src/readelf.c:5397 src/readelf.c:5471 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалося отримати дані get .debug_aranges: %s" -#: src/readelf.c:5414 +#: src/readelf.c:5412 #, c-format msgid "" "\n" @@ -5393,12 +5388,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщенням %# містить %zu записів:\n" -#: src/readelf.c:5445 +#: src/readelf.c:5443 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5447 +#: src/readelf.c:5445 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5406,7 +5401,7 @@ msgstr "" " [%*zu] початок: %0#*, довжина: %5, зміщення CU DIE: " "%6\n" -#: src/readelf.c:5491 src/readelf.c:8413 +#: src/readelf.c:5489 src/readelf.c:8426 #, c-format msgid "" "\n" @@ -5415,13 +5410,13 @@ msgstr "" "\n" "Таблиця за зміщенням %zu:\n" -#: src/readelf.c:5495 src/readelf.c:5671 src/readelf.c:6670 src/readelf.c:8424 -#: src/readelf.c:9101 +#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 +#: src/readelf.c:9171 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:5511 +#: src/readelf.c:5509 #, c-format msgid "" "\n" @@ -5430,27 +5425,27 @@ msgstr "" "\n" " Довжина: %6\n" -#: src/readelf.c:5523 +#: src/readelf.c:5521 #, c-format msgid " DWARF version: %6\n" msgstr " версія DWARF: %6\n" -#: src/readelf.c:5527 +#: src/readelf.c:5525 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана версія aranges" -#: src/readelf.c:5538 +#: src/readelf.c:5536 #, c-format msgid " CU offset: %6\n" msgstr " зміщення CU: %6\n" -#: src/readelf.c:5544 +#: src/readelf.c:5542 #, c-format msgid " Address size: %6\n" msgstr " Розмір адреси: %6\n" -#: src/readelf.c:5555 +#: src/readelf.c:5553 #, c-format msgid "" " Segment size: %6\n" @@ -5459,17 +5454,17 @@ msgstr "" " Розмір сегмента: %6\n" "\n" -#: src/readelf.c:5610 +#: src/readelf.c:5608 #, c-format msgid " %zu padding bytes\n" msgstr " %zu байтів доповнення\n" -#: src/readelf.c:5654 +#: src/readelf.c:5652 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "не вдалося отримати вміст .debug_rnglists: %s" -#: src/readelf.c:5677 src/readelf.c:9107 +#: src/readelf.c:5675 src/readelf.c:9177 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5478,42 +5473,42 @@ msgstr "" "Таблиця за зміщенням 0x%:\n" "\n" -#: src/readelf.c:5732 src/readelf.c:9162 +#: src/readelf.c:5730 src/readelf.c:9232 #, c-format msgid " Offset entries: %8\n" msgstr " Записи зміщення: %8\n" -#: src/readelf.c:5748 src/readelf.c:9178 +#: src/readelf.c:5746 src/readelf.c:9248 #, c-format msgid " Unknown CU base: " msgstr " Невідома основа CU: " -#: src/readelf.c:5750 src/readelf.c:9180 +#: src/readelf.c:5748 src/readelf.c:9250 #, c-format msgid " CU [%6] base: " msgstr " Основа CU [%6]: " -#: src/readelf.c:5756 src/readelf.c:9186 +#: src/readelf.c:5754 src/readelf.c:9256 #, c-format msgid " Not associated with a CU.\n" msgstr " Не пов'язано із CU.\n" -#: src/readelf.c:5767 src/readelf.c:9197 +#: src/readelf.c:5765 src/readelf.c:9267 #, c-format msgid "too many offset entries for unit length" msgstr "забагато записів зсуву для довжини модуля" -#: src/readelf.c:5771 src/readelf.c:9201 +#: src/readelf.c:5769 src/readelf.c:9271 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Зміщення, що починаються з 0x%:\n" -#: src/readelf.c:5823 +#: src/readelf.c:5821 #, c-format msgid "invalid range list data" msgstr "некоректні дані списку діапазонів" -#: src/readelf.c:6008 src/readelf.c:9526 +#: src/readelf.c:6006 src/readelf.c:9596 #, c-format msgid "" " %zu padding bytes\n" @@ -5522,12 +5517,12 @@ msgstr "" " %zu байтів доповнення\n" "\n" -#: src/readelf.c:6025 +#: src/readelf.c:6023 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалося отримати дані .debug_ranges: %s" -#: src/readelf.c:6061 src/readelf.c:9581 +#: src/readelf.c:6059 src/readelf.c:9651 #, c-format msgid "" "\n" @@ -5536,7 +5531,7 @@ msgstr "" "\n" " Невідома основа CU: " -#: src/readelf.c:6063 src/readelf.c:9583 +#: src/readelf.c:6061 src/readelf.c:9653 #, c-format msgid "" "\n" @@ -5545,31 +5540,31 @@ msgstr "" "\n" " Основа CU [%6]: " -#: src/readelf.c:6072 src/readelf.c:9609 src/readelf.c:9635 +#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6097 src/readelf.c:9719 +#: src/readelf.c:6095 src/readelf.c:9789 #, fuzzy msgid "base address" msgstr " встановити адресу у значення " -#: src/readelf.c:6107 src/readelf.c:9729 +#: src/readelf.c:6105 src/readelf.c:9799 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній список\n" -#: src/readelf.c:6367 +#: src/readelf.c:6365 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6624 +#: src/readelf.c:6622 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалося отримати ELF: %s" -#: src/readelf.c:6642 +#: src/readelf.c:6640 #, c-format msgid "" "\n" @@ -5578,7 +5573,7 @@ msgstr "" "\n" "Розділ відомостей щодо вікна викликів [%2zu] «%s» за зміщенням %#:\n" -#: src/readelf.c:6692 +#: src/readelf.c:6690 #, c-format msgid "" "\n" @@ -5587,65 +5582,65 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:6793 src/readelf.c:6947 +#: src/readelf.c:6791 src/readelf.c:6945 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшення" -#: src/readelf.c:6808 +#: src/readelf.c:6806 msgid "FDE address encoding: " msgstr "Кодування адреси FDE: " -#: src/readelf.c:6814 +#: src/readelf.c:6812 msgid "LSDA pointer encoding: " msgstr "Кодування вказівника LSDA: " -#: src/readelf.c:6924 +#: src/readelf.c:6922 #, c-format msgid " (offset: %#)" msgstr " (зміщення: %#)" -#: src/readelf.c:6931 +#: src/readelf.c:6929 #, c-format msgid " (end offset: %#)" msgstr " (зміщення від кінця: %#)" -#: src/readelf.c:6968 +#: src/readelf.c:6966 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sвказівник LSDA: %#\n" -#: src/readelf.c:7053 +#: src/readelf.c:7051 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] не вдалося отримати код атрибута: %s" -#: src/readelf.c:7063 +#: src/readelf.c:7061 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] не вдалося отримати форму атрибута: %s" -#: src/readelf.c:7085 +#: src/readelf.c:7083 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] не вдалося отримати значення атрибута «%s» (%s): %s" -#: src/readelf.c:7415 +#: src/readelf.c:7413 #, c-format msgid "invalid file (%): %s" msgstr "некоректний файл (%): %s" -#: src/readelf.c:7419 +#: src/readelf.c:7417 #, c-format msgid "no srcfiles for CU [%]" msgstr "немає srcfiles для CU [%]" -#: src/readelf.c:7423 +#: src/readelf.c:7421 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "не вдалося отримати CU DWARF: %s" -#: src/readelf.c:7738 +#: src/readelf.c:7736 #, c-format msgid "" "\n" @@ -5656,12 +5651,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщенням %#:\n" " [Зміщення]\n" -#: src/readelf.c:7788 +#: src/readelf.c:7786 #, c-format msgid "cannot get next unit: %s" msgstr "не вдалося отримати наступний модуль: %s" -#: src/readelf.c:7808 +#: src/readelf.c:7806 #, c-format msgid "" " Type unit at offset %:\n" @@ -5674,7 +5669,7 @@ msgstr "" "%, Розмір зміщення: %\n" " Підпис типу: %#, Зміщення типу: %# [%]\n" -#: src/readelf.c:7820 +#: src/readelf.c:7818 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5685,38 +5680,38 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:7830 src/readelf.c:7993 +#: src/readelf.c:7828 src/readelf.c:7989 #, c-format msgid " Unit type: %s (%)" msgstr " Тип модуля: %s (%)" -#: src/readelf.c:7857 +#: src/readelf.c:7855 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "невідома версія (%d) або тип модуля (%d)" -#: src/readelf.c:7886 +#: src/readelf.c:7884 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалося отримати зміщення DIE: %s" -#: src/readelf.c:7895 +#: src/readelf.c:7893 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "не вдалося отримати мітку DIE за зміщенням [%] у розділі «%s»: %s" -#: src/readelf.c:7933 +#: src/readelf.c:7929 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалося визначити наступний DIE: %s\n" -#: src/readelf.c:7941 +#: src/readelf.c:7937 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалося визначити наступний DIE: %s" -#: src/readelf.c:7985 +#: src/readelf.c:7981 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5727,7 +5722,7 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:8037 +#: src/readelf.c:8033 #, c-format msgid "" "\n" @@ -5738,18 +5733,18 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" "\n" -#: src/readelf.c:8369 +#: src/readelf.c:8365 #, c-format msgid "unknown form: %s" msgstr "невідома форма: %s" -#: src/readelf.c:8400 +#: src/readelf.c:8413 #, c-format msgid "cannot get line data section data: %s" msgstr "не вдалося отримати дані розділу лінійних даних: %s" #. Print what we got so far. -#: src/readelf.c:8502 +#: src/readelf.c:8517 #, c-format msgid "" "\n" @@ -5782,27 +5777,27 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:8524 +#: src/readelf.c:8539 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "не вдалося обробити версію .debug_line: %u\n" -#: src/readelf.c:8532 +#: src/readelf.c:8547 #, c-format msgid "cannot handle address size: %u\n" msgstr "не вдалося обробити розмір адреси: %u\n" -#: src/readelf.c:8540 +#: src/readelf.c:8555 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "не вдалося обробити розмір селектора сегментів: %u\n" -#: src/readelf.c:8550 +#: src/readelf.c:8565 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщенням %tu у розділі [%zu] «%s»" -#: src/readelf.c:8565 +#: src/readelf.c:8580 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5810,7 +5805,7 @@ msgstr[0] " [%*] %hhu аргумент\n" msgstr[1] " [%*] %hhu аргументи\n" msgstr[2] " [%*] %hhu аргументів\n" -#: src/readelf.c:8576 +#: src/readelf.c:8591 msgid "" "\n" "Directory table:" @@ -5818,12 +5813,12 @@ msgstr "" "\n" "Таблиця каталогу:" -#: src/readelf.c:8582 src/readelf.c:8659 +#: src/readelf.c:8597 src/readelf.c:8674 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8653 +#: src/readelf.c:8668 msgid "" "\n" "File name table:" @@ -5831,11 +5826,11 @@ msgstr "" "\n" " Таблиця назв файлів:" -#: src/readelf.c:8714 +#: src/readelf.c:8729 msgid " Entry Dir Time Size Name" msgstr " Запис Кат Час Розмір Назва" -#: src/readelf.c:8753 +#: src/readelf.c:8775 #, fuzzy msgid "" "\n" @@ -5844,7 +5839,7 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8757 +#: src/readelf.c:8779 msgid "" "\n" "Line number statements:" @@ -5852,118 +5847,129 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8777 +#: src/readelf.c:8794 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "некоректну кількість операцій на інструкцію прирівняно до нуля" -#: src/readelf.c:8811 +#: src/readelf.c:8828 #, c-format msgid " special opcode %u: address+%u = " msgstr " спеціальний код операції %u: адреса+%u = " -#: src/readelf.c:8815 +#: src/readelf.c:8832 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", індекс_оп = %u, рядок%+d = %zu\n" -#: src/readelf.c:8818 +#: src/readelf.c:8835 #, c-format msgid ", line%+d = %zu\n" msgstr ", рядок%+d = %zu\n" -#: src/readelf.c:8836 +#: src/readelf.c:8853 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:8841 +#: src/readelf.c:8858 msgid " end of sequence" msgstr " кінець послідовності" -#: src/readelf.c:8859 +#: src/readelf.c:8876 #, c-format msgid " set address to " msgstr " встановити адресу у значення " -#: src/readelf.c:8887 +#: src/readelf.c:8904 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" " визначення нового файла: dir=%u, mtime=%, довжина=%, назва=" "%s\n" -#: src/readelf.c:8901 +#: src/readelf.c:8918 #, c-format msgid " set discriminator to %u\n" msgstr " встановити розрізнення для %u\n" +#: src/readelf.c:8945 +#, c-format +msgid " set inlined context %u, function name %s (0x%x)\n" +msgstr "" + +#: src/readelf.c:8969 +#, fuzzy, c-format +#| msgid "Also show function names" +msgid " set function name %s (0x%x)\n" +msgstr "Показувати також назви функцій" + #. Unknown, ignore it. -#: src/readelf.c:8906 +#: src/readelf.c:8976 msgid " unknown opcode" msgstr " невідомий код операції" #. Takes no argument. -#: src/readelf.c:8918 +#: src/readelf.c:8988 msgid " copy" msgstr " копія" -#: src/readelf.c:8929 +#: src/readelf.c:8999 #, c-format msgid " advance address by %u to " msgstr " збільшення адреси на %u до " -#: src/readelf.c:8933 src/readelf.c:8994 +#: src/readelf.c:9003 src/readelf.c:9064 #, c-format msgid ", op_index to %u" msgstr ", op_index до %u" -#: src/readelf.c:8945 +#: src/readelf.c:9015 #, c-format msgid " advance line by constant %d to %\n" msgstr " просувати рядок на сталу %d до %\n" -#: src/readelf.c:8955 +#: src/readelf.c:9025 #, c-format msgid " set file to %\n" msgstr " встановити файл у %\n" -#: src/readelf.c:8966 +#: src/readelf.c:9036 #, c-format msgid " set column to %\n" msgstr " встановити значення стовпчика %\n" -#: src/readelf.c:8973 +#: src/readelf.c:9043 #, c-format msgid " set '%s' to %\n" msgstr " встановити «%s» у %\n" #. Takes no argument. -#: src/readelf.c:8979 +#: src/readelf.c:9049 msgid " set basic block flag" msgstr " встановити прапорець базового блоку" -#: src/readelf.c:8990 +#: src/readelf.c:9060 #, c-format msgid " advance address by constant %u to " msgstr " збільшити адресу на сталу величину %u до " -#: src/readelf.c:9010 +#: src/readelf.c:9080 #, c-format msgid " advance address by fixed value %u to \n" msgstr " збільшити адресу на фіксовану величину %u до \n" #. Takes no argument. -#: src/readelf.c:9020 +#: src/readelf.c:9090 msgid " set prologue end flag" msgstr " встановити прапорець кінця вступу" #. Takes no argument. -#: src/readelf.c:9025 +#: src/readelf.c:9095 msgid " set epilogue begin flag" msgstr " встановити прапорець початку епілогу" -#: src/readelf.c:9035 +#: src/readelf.c:9105 #, c-format msgid " set isa to %u\n" msgstr " встановити isa у %u\n" @@ -5971,7 +5977,7 @@ msgstr " встановити isa у %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9044 +#: src/readelf.c:9114 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5979,102 +5985,102 @@ msgstr[0] " невідомий код операції з % параме msgstr[1] " невідомий код операції з % параметрами:" msgstr[2] " невідомий код операції з % параметрами:" -#: src/readelf.c:9084 +#: src/readelf.c:9154 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "не вдалося отримати вміст .debug_loclists: %s" -#: src/readelf.c:9250 +#: src/readelf.c:9320 #, fuzzy, c-format msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9290 +#: src/readelf.c:9360 #, c-format msgid "invalid loclists data" msgstr "некоректні дані loclists" -#: src/readelf.c:9543 +#: src/readelf.c:9613 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалося отримати вміст .debug_loc: %s" -#: src/readelf.c:9756 src/readelf.c:10800 +#: src/readelf.c:9826 src/readelf.c:10870 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9811 src/readelf.c:9974 +#: src/readelf.c:9881 src/readelf.c:10044 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалося отримати дані розділу відомостей щодо макросів: %s" -#: src/readelf.c:9891 +#: src/readelf.c:9961 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений рядок наприкінці розділу" -#: src/readelf.c:9914 +#: src/readelf.c:9984 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** пропущено аргумент DW_MACINFO_start_file наприкінці розділу" -#: src/readelf.c:10015 +#: src/readelf.c:10085 #, c-format msgid " Offset: 0x%\n" msgstr " Зміщення: 0x%\n" -#: src/readelf.c:10027 +#: src/readelf.c:10097 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10033 src/readelf.c:10920 +#: src/readelf.c:10103 src/readelf.c:10990 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома версія, не вдалося обробити розділ\n" -#: src/readelf.c:10040 +#: src/readelf.c:10110 #, c-format msgid " Flag: 0x%" msgstr " Прапорець: 0x%" -#: src/readelf.c:10069 +#: src/readelf.c:10139 #, c-format msgid " Offset length: %\n" msgstr " Довжина зміщення: %\n" -#: src/readelf.c:10077 +#: src/readelf.c:10147 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " зміщення .debug_line: 0x%\n" -#: src/readelf.c:10102 +#: src/readelf.c:10172 #, c-format msgid " extension opcode table, % items:\n" msgstr " таблиця кодів операцій розширень, записів — %:\n" -#: src/readelf.c:10109 +#: src/readelf.c:10179 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10121 +#: src/readelf.c:10191 #, c-format msgid " % arguments:" msgstr " % аргументів:" -#: src/readelf.c:10136 +#: src/readelf.c:10206 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:10337 +#: src/readelf.c:10407 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " [%5d] зміщення DIE: %6, зміщення CU DIE: %6, назва: %s\n" -#: src/readelf.c:10381 +#: src/readelf.c:10451 #, c-format msgid "" "\n" @@ -6086,42 +6092,42 @@ msgstr "" " %*s Рядок\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10386 +#: src/readelf.c:10456 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10396 +#: src/readelf.c:10466 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** помилка, пропущено роздільник рядків\n" -#: src/readelf.c:10425 +#: src/readelf.c:10495 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "не вдалося отримати дані розділу .debug_str_offsets: %s" -#: src/readelf.c:10524 +#: src/readelf.c:10594 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:10526 +#: src/readelf.c:10596 #, c-format msgid " Offset size: %8\n" msgstr " Розмір зсуву: %8\n" -#: src/readelf.c:10540 +#: src/readelf.c:10610 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:10549 +#: src/readelf.c:10619 #, c-format msgid " Padding: %8\n" msgstr " Заповнення: %8\n" -#: src/readelf.c:10603 +#: src/readelf.c:10673 #, c-format msgid "" "\n" @@ -6130,7 +6136,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10705 +#: src/readelf.c:10775 #, c-format msgid "" "\n" @@ -6139,22 +6145,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10728 +#: src/readelf.c:10798 #, c-format msgid " LPStart encoding: %#x " msgstr " Кодування LPStart: %#x " -#: src/readelf.c:10740 +#: src/readelf.c:10810 #, c-format msgid " TType encoding: %#x " msgstr " Кодування TType: %#x " -#: src/readelf.c:10755 +#: src/readelf.c:10825 #, c-format msgid " Call site encoding: %#x " msgstr " Кодування місця виклику:%#x " -#: src/readelf.c:10768 +#: src/readelf.c:10838 msgid "" "\n" " Call site table:" @@ -6162,7 +6168,7 @@ msgstr "" "\n" " Таблиця місця виклику:" -#: src/readelf.c:10782 +#: src/readelf.c:10852 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6175,12 +6181,12 @@ msgstr "" " Місце застосування: %#\n" " Дія: %u\n" -#: src/readelf.c:10855 +#: src/readelf.c:10925 #, c-format msgid "invalid TType encoding" msgstr "некоректне кодування TType" -#: src/readelf.c:10882 +#: src/readelf.c:10952 #, c-format msgid "" "\n" @@ -6189,37 +6195,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщенням %# містить % байтів:\n" -#: src/readelf.c:10911 +#: src/readelf.c:10981 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10929 +#: src/readelf.c:10999 #, c-format msgid " CU offset: %#\n" msgstr " зміщення CU: %#\n" -#: src/readelf.c:10936 +#: src/readelf.c:11006 #, c-format msgid " TU offset: %#\n" msgstr " зміщення TU: %#\n" -#: src/readelf.c:10943 +#: src/readelf.c:11013 #, c-format msgid " address offset: %#\n" msgstr " зміщення адреси: %#\n" -#: src/readelf.c:10950 +#: src/readelf.c:11020 #, c-format msgid " symbol offset: %#\n" msgstr " зміщення символу: %#\n" -#: src/readelf.c:10957 +#: src/readelf.c:11027 #, c-format msgid " constant offset: %#\n" msgstr " стале зміщення: %#\n" -#: src/readelf.c:10971 +#: src/readelf.c:11041 #, c-format msgid "" "\n" @@ -6228,7 +6234,7 @@ msgstr "" "\n" " Список CU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:10996 +#: src/readelf.c:11066 #, c-format msgid "" "\n" @@ -6237,7 +6243,7 @@ msgstr "" "\n" " Список TU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11025 +#: src/readelf.c:11095 #, c-format msgid "" "\n" @@ -6246,7 +6252,7 @@ msgstr "" "\n" " Список адрес зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11057 +#: src/readelf.c:11127 #, c-format msgid "" "\n" @@ -6255,18 +6261,18 @@ msgstr "" "\n" " Таблиця символів за зміщенням %# містить %zu позицій:\n" -#: src/readelf.c:11195 +#: src/readelf.c:11265 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалося отримати дескриптор контексту зневаджування: %s" -#: src/readelf.c:11563 src/readelf.c:12190 src/readelf.c:12301 -#: src/readelf.c:12359 +#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 +#: src/readelf.c:12429 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалося перетворити дані запису ядра: %s" -#: src/readelf.c:11926 +#: src/readelf.c:11996 #, c-format msgid "" "\n" @@ -6275,21 +6281,21 @@ msgstr "" "\n" "%*s... <повторюється %u разів> ..." -#: src/readelf.c:12438 +#: src/readelf.c:12508 msgid " Owner Data size Type\n" msgstr " Власник Розм. даних Тип\n" -#: src/readelf.c:12466 +#: src/readelf.c:12536 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12518 +#: src/readelf.c:12588 #, c-format msgid "cannot get content of note: %s" msgstr "не вдалося отримати вміст нотатки: %s" -#: src/readelf.c:12552 +#: src/readelf.c:12622 #, c-format msgid "" "\n" @@ -6299,7 +6305,7 @@ msgstr "" "Розділ записів (note) [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:12575 +#: src/readelf.c:12645 #, c-format msgid "" "\n" @@ -6308,7 +6314,7 @@ msgstr "" "\n" "Сегмент записів з % байтів за зміщенням %#0:\n" -#: src/readelf.c:12622 +#: src/readelf.c:12692 #, c-format msgid "" "\n" @@ -6317,12 +6323,12 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься даних для створення дампу.\n" -#: src/readelf.c:12649 src/readelf.c:12700 +#: src/readelf.c:12719 src/readelf.c:12770 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "не вдалося отримати дані для розділу [%zu] «%s»: %s" -#: src/readelf.c:12654 +#: src/readelf.c:12724 #, c-format msgid "" "\n" @@ -6331,7 +6337,7 @@ msgstr "" "\n" "Шіст. дамп розділу [%zu] «%s», % байтів за зміщенням %#0:\n" -#: src/readelf.c:12659 +#: src/readelf.c:12729 #, c-format msgid "" "\n" @@ -6342,7 +6348,7 @@ msgstr "" "Шіст. дамп розділу [%zu] «%s», % байтів (%zd нестиснено) за " "зміщенням %#0:\n" -#: src/readelf.c:12673 +#: src/readelf.c:12743 #, c-format msgid "" "\n" @@ -6351,7 +6357,7 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься рядків для створення дампу.\n" -#: src/readelf.c:12705 +#: src/readelf.c:12775 #, c-format msgid "" "\n" @@ -6360,7 +6366,7 @@ msgstr "" "\n" "Розділ рядків [%zu] «%s» містить % байтів за зміщенням %#0:\n" -#: src/readelf.c:12710 +#: src/readelf.c:12780 #, c-format msgid "" "\n" @@ -6371,7 +6377,7 @@ msgstr "" "Рядок розділу [%zu] «%s» містить % байти (%zd нестиснено) на " "зміщенні %#0:\n" -#: src/readelf.c:12759 +#: src/readelf.c:12829 #, c-format msgid "" "\n" @@ -6380,7 +6386,7 @@ msgstr "" "\n" "розділу [%lu] не існує" -#: src/readelf.c:12789 +#: src/readelf.c:12859 #, c-format msgid "" "\n" @@ -6389,12 +6395,12 @@ msgstr "" "\n" "розділу «%s» не існує" -#: src/readelf.c:12846 +#: src/readelf.c:12916 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалося отримати покажчик символів архіву «%s»: %s" -#: src/readelf.c:12849 +#: src/readelf.c:12919 #, c-format msgid "" "\n" @@ -6403,7 +6409,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика символів\n" -#: src/readelf.c:12853 +#: src/readelf.c:12923 #, c-format msgid "" "\n" @@ -6412,12 +6418,12 @@ msgstr "" "\n" "Покажчик архіву «%s» містить %zu записів:\n" -#: src/readelf.c:12871 +#: src/readelf.c:12941 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "не вдалося видобути елемент за зміщенням %zu у «%s»: %s" -#: src/readelf.c:12876 +#: src/readelf.c:12946 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» містить:\n" @@ -6866,17 +6872,17 @@ msgstr "неможливо одночасно зберегти і вилучит msgid "bad relocation" msgstr "помилкове пересування" -#: src/strip.c:747 src/strip.c:771 +#: src/strip.c:751 src/strip.c:775 #, c-format msgid "cannot stat input file '%s'" msgstr "не вдалося отримати дані з вхідного файла «%s» за допомогою stat" -#: src/strip.c:761 +#: src/strip.c:765 #, c-format msgid "while opening '%s'" msgstr "під час спроби відкриття «%s»" -#: src/strip.c:799 +#: src/strip.c:803 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6889,133 +6895,133 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:811 +#: src/strip.c:815 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: підтримки вилучення додаткового вмісту з архіву не передбачено" -#: src/strip.c:1047 +#: src/strip.c:1052 #, c-format msgid "cannot open EBL backend" msgstr "не вдалося відкрити канал сервера EBL" -#: src/strip.c:1092 +#: src/strip.c:1097 #, c-format msgid "cannot get number of phdrs" msgstr "не вдалося отримати кількість phdr" -#: src/strip.c:1106 src/strip.c:1149 +#: src/strip.c:1111 src/strip.c:1154 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "не вдалося створити ehdr для файла «%s»: %s" -#: src/strip.c:1116 src/strip.c:1159 +#: src/strip.c:1121 src/strip.c:1164 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "не вдалося створити phdr для файла «%s»: %s" -#: src/strip.c:1240 +#: src/strip.c:1244 #, c-format msgid "illformed file '%s'" msgstr "помилкове форматування файла «%s»" -#: src/strip.c:1250 +#: src/strip.c:1254 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Неможливо вилучити розміщений у пам'яті розділ «%s»" -#: src/strip.c:1259 +#: src/strip.c:1263 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Неможливо одночасно зберегти та вилучити розділ «%s»" -#: src/strip.c:1624 src/strip.c:1739 +#: src/strip.c:1628 src/strip.c:1743 #, c-format msgid "while generating output file: %s" msgstr "під час спроби створення файла з виведеними даними: %s" -#: src/strip.c:1688 +#: src/strip.c:1692 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: помилка під час оновлення заголовка ELF: %s" -#: src/strip.c:1697 +#: src/strip.c:1701 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: помилка під час отримання shdrstrndx: %s" -#: src/strip.c:1705 src/strip.c:2550 +#: src/strip.c:1709 src/strip.c:2554 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: помилка під час оновлення shdrstrndx: %s" -#: src/strip.c:1722 +#: src/strip.c:1726 #, c-format msgid "while preparing output for '%s'" msgstr "під час приготування виведених даних для «%s»" -#: src/strip.c:1784 src/strip.c:1847 +#: src/strip.c:1788 src/strip.c:1851 #, c-format msgid "while create section header section: %s" msgstr "під час створення розділу заголовка розділу: %s" -#: src/strip.c:1793 +#: src/strip.c:1797 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалося розмістити дані розділу: %s" -#: src/strip.c:1859 +#: src/strip.c:1863 #, c-format msgid "while create section header string table: %s" msgstr "під час створення таблиці рядків заголовка розділу: %s" -#: src/strip.c:1866 +#: src/strip.c:1870 #, c-format msgid "no memory to create section header string table" msgstr "недостатньо пам'яті для створення таблиці рядків заголовка розділу" -#: src/strip.c:2079 +#: src/strip.c:2083 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" "Неможливо вилучити символ [%zd] з розміщеної у пам'яті таблиці символів [%zd]" -#: src/strip.c:2466 src/strip.c:2574 +#: src/strip.c:2470 src/strip.c:2578 #, c-format msgid "while writing '%s': %s" msgstr "під час запису «%s»: %s" -#: src/strip.c:2477 +#: src/strip.c:2481 #, c-format msgid "while creating '%s'" msgstr "під час спроби створення «%s»" -#: src/strip.c:2500 +#: src/strip.c:2504 #, c-format msgid "while computing checksum for debug information" msgstr "під час обчислення контрольної суми для діагностичних даних" -#: src/strip.c:2541 +#: src/strip.c:2545 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під час створення заголовка ELF: %s" -#: src/strip.c:2559 +#: src/strip.c:2563 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під час читання файла: %s" -#: src/strip.c:2599 src/strip.c:2619 +#: src/strip.c:2603 src/strip.c:2623 #, c-format msgid "while writing '%s'" msgstr "під час спроби запису «%s»" -#: src/strip.c:2656 src/strip.c:2663 +#: src/strip.c:2660 src/strip.c:2667 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під час завершення «%s»: %s" -#: src/strip.c:2680 src/strip.c:2756 +#: src/strip.c:2684 src/strip.c:2760 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалося встановити права доступу та дату зміни «%s»" @@ -7108,7 +7114,7 @@ msgstr "не вдалося створити заголовок ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "не вдалося отримати shdrstrndx:%s" -#: src/unstrip.c:244 src/unstrip.c:2086 +#: src/unstrip.c:244 src/unstrip.c:2088 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалося отримати заголовок ELF: %s" @@ -7128,12 +7134,12 @@ msgstr "неможливо оновити новий нульовий розді msgid "cannot copy ELF header: %s" msgstr "не вдалося скопіювати заголовок ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 +#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 #, c-format msgid "cannot get number of program headers: %s" msgstr "не вдалося отримати кількість заголовків програми: %s" -#: src/unstrip.c:270 src/unstrip.c:2108 +#: src/unstrip.c:270 src/unstrip.c:2110 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалося створити заголовки програми: %s" @@ -7148,12 +7154,12 @@ msgstr "не вдалося скопіювати заголовок програ msgid "cannot copy section header: %s" msgstr "не вдалося скопіювати заголовок розділу: %s" -#: src/unstrip.c:289 src/unstrip.c:1708 +#: src/unstrip.c:289 src/unstrip.c:1710 #, c-format msgid "cannot get section data: %s" msgstr "не вдалося отримати дані розділу: %s" -#: src/unstrip.c:291 src/unstrip.c:1710 +#: src/unstrip.c:291 src/unstrip.c:1712 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалося скопіювати дані розділу: %s" @@ -7163,14 +7169,14 @@ msgstr "не вдалося скопіювати дані розділу: %s" msgid "cannot create directory '%s'" msgstr "не вдалося створити каталог «%s»" -#: src/unstrip.c:393 src/unstrip.c:657 src/unstrip.c:691 src/unstrip.c:859 -#: src/unstrip.c:1750 +#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 +#: src/unstrip.c:1752 #, c-format msgid "cannot get symbol table entry: %s" msgstr "не вдалося отримати запис таблиці символів: %s" -#: src/unstrip.c:409 src/unstrip.c:660 src/unstrip.c:681 src/unstrip.c:694 -#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 +#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 +#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалося оновити таблицю символів: %s" @@ -7180,167 +7186,177 @@ msgstr "не вдалося оновити таблицю символів: %s" msgid "cannot update section header: %s" msgstr "не вдалося оновити заголовок розділу: %s" -#: src/unstrip.c:467 src/unstrip.c:481 +#: src/unstrip.c:465 +#, c-format +msgid "gelf_getrel failed: %s" +msgstr "" + +#: src/unstrip.c:468 src/unstrip.c:483 #, c-format msgid "cannot update relocation: %s" msgstr "не вдалося оновити пересування: %s" -#: src/unstrip.c:580 +#: src/unstrip.c:480 +#, c-format +msgid "gelf_getrela failed: %s" +msgstr "" + +#: src/unstrip.c:582 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалося отримати версію символу: %s" -#: src/unstrip.c:593 +#: src/unstrip.c:595 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "неочікуваний тип розділу у [%zu] з посиланням sh_link на symtab" -#: src/unstrip.c:848 +#: src/unstrip.c:850 #, c-format msgid "cannot get symbol section data: %s" msgstr "не вдалося отримати дані розділу символів: %s" -#: src/unstrip.c:850 +#: src/unstrip.c:852 #, c-format msgid "cannot get string section data: %s" msgstr "не вдалося отримати дані розділу рядків: %s" -#: src/unstrip.c:867 +#: src/unstrip.c:869 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "некоректне зміщення рядка у символі [%zu]" -#: src/unstrip.c:1025 src/unstrip.c:1433 +#: src/unstrip.c:1027 src/unstrip.c:1435 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "не вдалося прочитати назву розділу [%zu]: %s" -#: src/unstrip.c:1040 +#: src/unstrip.c:1042 #, c-format msgid "bad sh_link for group section: %s" msgstr "помилкове значення sh_link для розділу груп: %s" -#: src/unstrip.c:1046 +#: src/unstrip.c:1048 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "не вдалося отримати shdr для розділу груп: %s" -#: src/unstrip.c:1051 +#: src/unstrip.c:1053 #, c-format msgid "bad data for group symbol section: %s" msgstr "помилкові дані для розділу символів груп: %s" -#: src/unstrip.c:1057 +#: src/unstrip.c:1059 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "не вдалося отримати символ для розділу груп: %s" -#: src/unstrip.c:1062 +#: src/unstrip.c:1064 #, c-format msgid "bad symbol name for group section: %s" msgstr "помилкова назва символу для розділу груп: %s" -#: src/unstrip.c:1073 src/unstrip.c:1554 +#: src/unstrip.c:1075 src/unstrip.c:1556 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "не вдалося знайти відповідний розділ для [%zu] «%s»" -#: src/unstrip.c:1118 src/unstrip.c:1137 src/unstrip.c:1175 +#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалося прочитати розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:1155 +#: src/unstrip.c:1157 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "переповнення з shnum = %zu у розділі «%s»" -#: src/unstrip.c:1166 +#: src/unstrip.c:1168 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміст розділу «%s»" -#: src/unstrip.c:1337 src/unstrip.c:1353 src/unstrip.c:1634 src/unstrip.c:1925 +#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалося додати назву розділу до таблиці рядків: %s" -#: src/unstrip.c:1362 +#: src/unstrip.c:1364 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалося оновити дані заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1391 src/unstrip.c:1395 +#: src/unstrip.c:1393 src/unstrip.c:1397 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "не вдалося визначити індекс розділу заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1399 src/unstrip.c:1403 src/unstrip.c:1649 +#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 #, c-format msgid "cannot get section count: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/unstrip.c:1406 +#: src/unstrip.c:1408 #, c-format msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними для зневаджування — " "помилковий порядок параметрів?" -#: src/unstrip.c:1410 +#: src/unstrip.c:1412 #, c-format msgid "no sections in stripped file" msgstr "у очищеному файлі немає розділів" -#: src/unstrip.c:1458 src/unstrip.c:1569 +#: src/unstrip.c:1460 src/unstrip.c:1571 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалося прочитати таблицю рядків заголовка розділу: %s" -#: src/unstrip.c:1628 +#: src/unstrip.c:1630 #, c-format msgid "cannot add new section: %s" msgstr "не вдалося додати новий розділ: %s" -#: src/unstrip.c:1758 +#: src/unstrip.c:1760 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "символ [%zu] має некоректний індекс розділу" -#: src/unstrip.c:1790 +#: src/unstrip.c:1792 #, c-format msgid "group has invalid section index [%zd]" msgstr "група містить некоректний індекс розділу [%zd]" -#: src/unstrip.c:2065 +#: src/unstrip.c:2067 #, c-format msgid "cannot read section data: %s" msgstr "не вдалося прочитати дані розділу: %s" -#: src/unstrip.c:2094 +#: src/unstrip.c:2096 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалося оновити заголовок ELF: %s" -#: src/unstrip.c:2118 +#: src/unstrip.c:2120 #, c-format msgid "cannot update program header: %s" msgstr "не вдалося оновити заголовок програми: %s" -#: src/unstrip.c:2123 src/unstrip.c:2206 +#: src/unstrip.c:2125 src/unstrip.c:2208 #, c-format msgid "cannot write output file: %s" msgstr "не вдалося записати файл виведених даних: %s" -#: src/unstrip.c:2174 +#: src/unstrip.c:2176 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не скориговано відповідно до відхилення перед компонуванням; " "спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2177 +#: src/unstrip.c:2179 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7348,61 +7364,61 @@ msgstr "" "Дані DWARF у «%s» не скориговано відповідно до відхилення перед " "компонуванням; спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 +#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "не вдалося створити дескриптор ELF: %s" -#: src/unstrip.c:2235 +#: src/unstrip.c:2237 msgid "WARNING: " msgstr "УВАГА: " -#: src/unstrip.c:2237 +#: src/unstrip.c:2239 msgid ", use --force" msgstr ", скористайтеся --force" -#: src/unstrip.c:2265 +#: src/unstrip.c:2267 msgid "ELF header identification (e_ident) different" msgstr "Різні ідентифікатори заголовків ELF (e_ident)" -#: src/unstrip.c:2269 +#: src/unstrip.c:2271 msgid "ELF header type (e_type) different" msgstr "Різні типи заголовків ELF (e_type)" -#: src/unstrip.c:2273 +#: src/unstrip.c:2275 msgid "ELF header machine type (e_machine) different" msgstr "Різні типи архітектур заголовків ELF (e_machine)" -#: src/unstrip.c:2277 +#: src/unstrip.c:2279 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "очищений заголовок програми (e_phnum) є меншим за неочищений" -#: src/unstrip.c:2308 +#: src/unstrip.c:2310 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалося знайти очищений файл для модуля «%s»: %s" -#: src/unstrip.c:2312 +#: src/unstrip.c:2314 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалося відкрити очищений файл «%s» для модуля «%s»: %s" -#: src/unstrip.c:2327 +#: src/unstrip.c:2329 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалося знайти файл діагностичних даних для модуля «%s»: %s" -#: src/unstrip.c:2331 +#: src/unstrip.c:2333 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалося відкрити файл діагностичних даних «%s» для модуля «%s»: %s" -#: src/unstrip.c:2344 +#: src/unstrip.c:2346 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2375 +#: src/unstrip.c:2377 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалося кешувати адреси розділів для модуля «%s»: %s" @@ -7500,7 +7516,7 @@ msgid "" "source PATH /FILENAME\n" msgstr "" -#: tests/backtrace.c:436 +#: tests/backtrace.c:483 msgid "Run executable" msgstr "Запустити виконуваний файл" @@ -7512,6 +7528,10 @@ msgstr "Додатково вивести назви функцій" msgid "Show instances of inlined functions" msgstr "Вивести екземпляри вбудованих функцій" +#, c-format +#~ msgid "cannot allocate memory" +#~ msgstr "не вдалося розподілити пам’ять" + #~ msgid "" #~ " [%6tx] base address\n" #~ " " -- cgit v1.2.1 From 90b9e91b961b794a4e58ab76d9191a5e7343584e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Nogueira?= Date: Wed, 10 Nov 2021 21:17:48 -0300 Subject: debuginfod: fix compilation on platforms without MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "system.h" only declares the error() function, so it needs to be in an 'extern "C"' block, otherwise linking fails. Since we are here, use quotes for "system.h" header, since it's a local header, not a system one. Signed-off-by: Érico Nogueira --- debuginfod/ChangeLog | 4 ++++ debuginfod/debuginfod.cxx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index f06d3ee3..822bd637 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,7 @@ +2021-11-10 Érico N. Rolim + + * debuginfod.cxx: include "system.h" under 'extern "C"' block. + 2021-11-05 Frank Ch. Eigler PR28430 diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 521cb529..764e7b94 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -33,11 +33,11 @@ extern "C" { #include "printversion.h" +#include "system.h" } #include "debuginfod.h" #include -#include #include #ifdef __GNUC__ -- cgit v1.2.1 From 479d60d5a061b1b052d653c898b7b99f26cab3b8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 11 Nov 2021 15:46:26 +0100 Subject: tests: Don't set DEBUGINFOD_TIMEOUT Various tests set DEBUGINFOD_TIMEOUT to 10. Which is less than the default of 90. None of the tests relied on a lower timeout. So just don't set it. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 16 ++++++++++++++++ tests/run-debuginfod-000-permission.sh | 3 --- tests/run-debuginfod-archive-groom.sh | 1 - tests/run-debuginfod-archive-rename.sh | 1 - tests/run-debuginfod-archive-test.sh | 1 - tests/run-debuginfod-artifact-running.sh | 3 --- tests/run-debuginfod-dlopen.sh | 3 --- tests/run-debuginfod-extraction.sh | 3 --- tests/run-debuginfod-federation-link.sh | 1 - tests/run-debuginfod-federation-metrics.sh | 1 - tests/run-debuginfod-federation-sqlite.sh | 1 - tests/run-debuginfod-malformed.sh | 3 --- tests/run-debuginfod-tmp-home.sh | 3 --- tests/run-debuginfod-writable.sh | 3 --- 14 files changed, 16 insertions(+), 27 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index a59cdd51..26a4d674 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,19 @@ +2021-11-11 Mark Wielaard + + * run-debuginfod-000-permission.sh: Don't set DEBUGINFOD_TIMEOUT. + * run-debuginfod-archive-groom.sh: Likewise. + * run-debuginfod-archive-rename.sh: Likewise. + * run-debuginfod-archive-test.sh: Likewise. + * run-debuginfod-artifact-running.sh: Likewise. + * run-debuginfod-dlopen.sh: Likewise. + * run-debuginfod-extraction.sh: Likewise. + * run-debuginfod-federation-link.sh: Likewise. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-malformed.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + * run-debuginfod-writable.sh: Likewise. + 2021-11-05 Frank Ch. Eigler PR28430 diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh index c1b2cf81..1f46c341 100755 --- a/tests/run-debuginfod-000-permission.sh +++ b/tests/run-debuginfod-000-permission.sh @@ -37,9 +37,6 @@ errfiles vlog$PORT1 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 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan diff --git a/tests/run-debuginfod-archive-groom.sh b/tests/run-debuginfod-archive-groom.sh index 030e0aa6..e2c394ef 100755 --- a/tests/run-debuginfod-archive-groom.sh +++ b/tests/run-debuginfod-archive-groom.sh @@ -28,7 +28,6 @@ get_ports DB=${PWD}/.debuginfod_tmp.sqlite tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -export DEBUGINFOD_TIMEOUT=10 # Clean old dirictories mkdir R ${PWD}/F diff --git a/tests/run-debuginfod-archive-rename.sh b/tests/run-debuginfod-archive-rename.sh index 5369949b..a1a6cc1e 100755 --- a/tests/run-debuginfod-archive-rename.sh +++ b/tests/run-debuginfod-archive-rename.sh @@ -27,7 +27,6 @@ base=8200 get_ports DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -export DEBUGINFOD_TIMEOUT=10 tempfiles $DEBUGINFOD_CACHE_PATH $DB # Clean old dirictories mkdir R ${PWD}/F diff --git a/tests/run-debuginfod-archive-test.sh b/tests/run-debuginfod-archive-test.sh index 9f7454bc..5f24ea71 100755 --- a/tests/run-debuginfod-archive-test.sh +++ b/tests/run-debuginfod-archive-test.sh @@ -42,7 +42,6 @@ wait_ready $PORT1 'ready' 1 wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 # Be patient when run on a busy machine things might take a bit. -export DEBUGINFOD_TIMEOUT=10 export DEBUGINFOD_URLS='http://127.0.0.1:'$PORT1 # Check thread comm names diff --git a/tests/run-debuginfod-artifact-running.sh b/tests/run-debuginfod-artifact-running.sh index b9444426..8b9aed37 100755 --- a/tests/run-debuginfod-artifact-running.sh +++ b/tests/run-debuginfod-artifact-running.sh @@ -53,9 +53,6 @@ mv prog F mv prog.debug F tempfiles prog/F -# Be patient when run on a busy machine things might take a bit. -export DEBUGINFOD_TIMEOUT=10 - kill -USR1 $PID1 wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 diff --git a/tests/run-debuginfod-dlopen.sh b/tests/run-debuginfod-dlopen.sh index 39ee5190..7279b02e 100755 --- a/tests/run-debuginfod-dlopen.sh +++ b/tests/run-debuginfod-dlopen.sh @@ -42,9 +42,6 @@ errfiles vlog$PORT1 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 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' ps -q $PID1 -e -L -o '%p %c %a' | grep groom diff --git a/tests/run-debuginfod-extraction.sh b/tests/run-debuginfod-extraction.sh index 06f60e78..a3722c90 100755 --- a/tests/run-debuginfod-extraction.sh +++ b/tests/run-debuginfod-extraction.sh @@ -39,9 +39,6 @@ errfiles vlog$PORT1 # Server must become ready wait_ready $PORT1 'ready' 1 -# Be patient when run on a busy machine things might take a bit. -export DEBUGINFOD_TIMEOUT=10 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index 1347e7b8..4f043741 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -24,7 +24,6 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -export DEBUGINFOD_TIMEOUT=10 tempfiles $DB # Clean old dirictories diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh index 2d0fd6d4..3da457e8 100755 --- a/tests/run-debuginfod-federation-metrics.sh +++ b/tests/run-debuginfod-federation-metrics.sh @@ -24,7 +24,6 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -export DEBUGINFOD_TIMEOUT=10 export DEBUGINFOD_URLS='http://127.0.0.1:0' # Note invalid, will trigger error_count metric tempfiles $DB # Clean old dirictories diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index 45761ed7..449df5db 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -24,7 +24,6 @@ unset VALGRIND_CMD DB=${PWD}/.debuginfod_tmp.sqlite export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -export DEBUGINFOD_TIMEOUT=10 tempfiles $DB # Clean old dirictories diff --git a/tests/run-debuginfod-malformed.sh b/tests/run-debuginfod-malformed.sh index 3bc9e799..83e6a3a9 100755 --- a/tests/run-debuginfod-malformed.sh +++ b/tests/run-debuginfod-malformed.sh @@ -45,9 +45,6 @@ wait_ready $PORT1 'thread_work_total{role="traverse"}' 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 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh index dc9accb0..4256f6f2 100755 --- a/tests/run-debuginfod-tmp-home.sh +++ b/tests/run-debuginfod-tmp-home.sh @@ -45,9 +45,6 @@ wait_ready $PORT1 'thread_work_total{role="traverse"}' 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 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan diff --git a/tests/run-debuginfod-writable.sh b/tests/run-debuginfod-writable.sh index 9cc4ea1d..c521a572 100755 --- a/tests/run-debuginfod-writable.sh +++ b/tests/run-debuginfod-writable.sh @@ -44,9 +44,6 @@ wait_ready $PORT1 'thread_work_total{role="traverse"}' 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 - # Check thread comm names ps -q $PID1 -e -L -o '%p %c %a' | grep groom ps -q $PID1 -e -L -o '%p %c %a' | grep scan -- cgit v1.2.1 From 2e3bc18672f0cede0332ae3194eb2e33d4cc5fd7 Mon Sep 17 00:00:00 2001 From: Matthias Maennich Date: Thu, 18 Nov 2021 19:44:50 +0000 Subject: dwfl: fix potential overflow when reporting on kernel modules dwfl_linux_kernel_report_modules_ has an outstanding ancient bug when reading kernel module information from a modules list file. The target buffer for the module name was sized too small to hold potential values. Fix that by increasing the value to account for the null termination. In practice, this unlikely ever happened, but it now got diagnosed by LLVM as part of a stricter -Wfortify-source implementation [1]: libdwfl/linux-kernel-modules.c:1019:7: error: 'sscanf' may overflow; destination buffer in argument 3 has size 128, but the corresponding specifier may require size 129 [-Werror,-Wfortify-source] modname, &modsz, &modaddr) == 3) [1] https://github.com/llvm/llvm-project/commit/2db66f8d48beeea835cb9a6940e25bc04ab5d941 Suggested-by: Paul Pluzhnikov Signed-off-by: Matthias Maennich --- libdwfl/ChangeLog | 5 +++++ libdwfl/linux-kernel-modules.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index f7e24a21..57b2c494 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-11-18 Matthias Maennich + + * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): + Add one to modname array size. + 2021-02-14 Alexander Miller * core-file.c (dwfl_core_file_report): Move NEW_VERSION before diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c index c0f8dfa4..58c0c417 100644 --- a/libdwfl/linux-kernel-modules.c +++ b/libdwfl/linux-kernel-modules.c @@ -1008,7 +1008,7 @@ dwfl_linux_kernel_report_modules (Dwfl *dwfl) int result = 0; Dwarf_Addr modaddr; unsigned long int modsz; - char modname[128]; + char modname[128+1]; char *line = NULL; size_t linesz = 0; /* We can't just use fscanf here because it's not easy to distinguish \n -- cgit v1.2.1 From a4f766fa0f77a450a41bee1f8f8948306dfa3695 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 18 Nov 2021 21:34:57 +0100 Subject: tests: Add -rdynamic to dwfl_proc_attach_LDFLAGS dwfl-proc-attach uses (overrides) dlopen (so it does nothing). This seems to cause a versioned dlopen symbol to be pulled in when building with LTO. Resulting in a link failure (when dlopen isn't integrated into libc): /usr/bin/ld: dwfl-proc-attach.o (symbol from plugin): undefined reference to symbol 'dlopen@@GLIBC_2.2.5' /usr/bin/ld: /usr/lib64/libdl.so.2: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status Add -rdynamic to the LDFLAGS to add all symbols to the dynamic symbol table for dwfl-proc-attach. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/Makefile.am | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 26a4d674..9dceda89 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-11-18 Mark Wielaard + + * Makefile.am (dwfl_proc_attach_LDFLAGS): Add -rdynamic. + 2021-11-11 Mark Wielaard * run-debuginfod-000-permission.sh: Don't set DEBUGINFOD_TIMEOUT. diff --git a/tests/Makefile.am b/tests/Makefile.am index bfb8b13a..2298a5ae 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -717,7 +717,7 @@ strptr_LDADD = $(libelf) newdata_LDADD = $(libelf) elfstrtab_LDADD = $(libelf) dwfl_proc_attach_LDADD = $(libdw) -dwfl_proc_attach_LDFLAGS = -pthread $(AM_LDFLAGS) +dwfl_proc_attach_LDFLAGS = -pthread -rdynamic $(AM_LDFLAGS) elfshphehdr_LDADD =$(libelf) elfstrmerge_LDADD = $(libdw) $(libelf) dwelfgnucompressed_LDADD = $(libelf) $(libdw) -- cgit v1.2.1 From b4c0791d3e2ad29ee7111e8df1200bc08d6e4671 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 1 Dec 2021 13:42:50 +0100 Subject: debuginfod: Use gmtime_r instead of gmtime to avoid data race Since we are multi-threaded using gmtime might cause a data race because gmtime reuses a global struct to write data into. Make sure that each thread uses their own struct tm and use gmtime_r instead. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod.cxx | 15 +++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 822bd637..625dead0 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-12-01 Mark Wielaard + + * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime. + (add_mhd_last_modified): Likewise. + 2021-11-10 Érico N. Rolim * debuginfod.cxx: include "system.h" under 'extern "C"' block. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 764e7b94..0bbaae9f 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -852,10 +852,11 @@ timestamp (ostream &o) char datebuf[80]; char *now2 = NULL; time_t now_t = time(NULL); - struct tm *now = gmtime (&now_t); - if (now) + struct tm now; + struct tm *nowp = gmtime_r (&now_t, &now); + if (nowp) { - (void) strftime (datebuf, sizeof (datebuf), "%c", now); + (void) strftime (datebuf, sizeof (datebuf), "%c", nowp); now2 = datebuf; } @@ -1070,11 +1071,13 @@ conninfo (struct MHD_Connection * conn) static void add_mhd_last_modified (struct MHD_Response *resp, time_t mtime) { - struct tm *now = gmtime (&mtime); - if (now != NULL) + struct tm now; + struct tm *nowp = gmtime_r (&mtime, &now); + if (nowp != NULL) { char datebuf[80]; - size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", now); + size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", + nowp); if (rc > 0 && rc < sizeof (datebuf)) (void) MHD_add_response_header (resp, "Last-Modified", datebuf); } -- cgit v1.2.1 From 32ceb411faec6ca61ee04707fe014efa15e9a5df Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Dec 2021 13:07:04 +0100 Subject: debuginfod: sqlite3_sharedprefix_fn should not compare past end of string gcc address sanitizer detected a read after the end of string in sqlite3_sharedprefix_fn. Make sure to stop comparing the strings when seeing the zero terminator. Signed-off-by: Mark Wielaard --- debuginfod/debuginfod.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 0bbaae9f..0d3f0297 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3707,7 +3707,7 @@ static void sqlite3_sharedprefix_fn (sqlite3_context* c, int argc, sqlite3_value const unsigned char* a = sqlite3_value_text (argv[0]); const unsigned char* b = sqlite3_value_text (argv[1]); int i = 0; - while (*a++ == *b++) + while (*a != '\0' && *b != '\0' && *a++ == *b++) i++; sqlite3_result_int (c, i); } -- cgit v1.2.1 From 99782bd23feec8d42b22912d20027a0d4f4e9b47 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 1 Dec 2021 13:12:49 +0100 Subject: debuginfod: Fix some memory leaks on debuginfod-client error paths. In a couple of places we might leak some memory when we encounter an error. tmp_url might leak if realloc failed. escaped_string might leak when setting up the data handle fails and we don't use it. And one of the goto out1 should have been goto out2 to make sure we release all allocated resources on exit (also updated a wrong comment about that). Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 7 +++++++ debuginfod/debuginfod-client.c | 16 +++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 625dead0..21d0721e 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,10 @@ +2021-12-01 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Free tmp_url on + realloc error. curl_free escaped_string on error. Fix error out + goto on curl_easy_init failure. Only cleanup data[i] handle and + response_data if it was initialized. + 2021-12-01 Mark Wielaard * debuginfod-client.c (timestamp): Use gmtime_r instead of gmtime. diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index c875ee62..75d3e301 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1,5 +1,6 @@ /* Retrieve ELF / DWARF / source files from the debuginfod. Copyright (C) 2019-2021 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -882,6 +883,7 @@ debuginfod_query_server (debuginfod_client *c, sizeof(char*)); if (realloc_ptr == NULL) { + free (tmp_url); rc = -ENOMEM; goto out1; } @@ -909,7 +911,7 @@ debuginfod_query_server (debuginfod_client *c, goto out1; } - /* thereafter, goto out1 on error. */ + /* thereafter, goto out2 on error. */ /*The beginning of goto block query_in_parallel.*/ query_in_parallel: @@ -962,8 +964,9 @@ debuginfod_query_server (debuginfod_client *c, data[i].handle = curl_easy_init(); if (data[i].handle == NULL) { + if (filename) curl_free (escaped_string); rc = -ENETUNREACH; - goto out1; + goto out2; } data[i].client = c; @@ -1384,9 +1387,12 @@ debuginfod_query_server (debuginfod_client *c, /* remove all handles from multi */ for (int i = 0; i < num_urls; i++) { - curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ - curl_easy_cleanup (data[i].handle); - free (data[i].response_data); + if (data[i].handle != NULL) + { + curl_multi_remove_handle(curlm, data[i].handle); /* ok to repeat */ + curl_easy_cleanup (data[i].handle); + free (data[i].response_data); + } } unlink (target_cache_tmppath); -- cgit v1.2.1 From 66f704ae705a489d35cd03aa9687e192a844d766 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Dec 2021 20:21:16 +0100 Subject: debuginfod: Clear and reset debuginfod_client winning_headers on reuse gcc address sanitizer detected a leak of the debuginfod_client winning_headers when the handle was reused. Make sure to free and reset the winning_headers field before reuse. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod-client.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 21d0721e..8c937d66 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-12-04 Mark Wielaard + + * debuginfod-client.c (debuginfod_query_server): Free winning_headers. + Reset response_data_size when clearing response_data. + 2021-12-01 Mark Wielaard * debuginfod-client.c (debuginfod_query_server): Free tmp_url on diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 75d3e301..9bf97bfc 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1031,7 +1031,11 @@ debuginfod_query_server (debuginfod_client *c, int committed_to = -1; bool verbose_reported = false; struct timespec start_time, cur_time; - c->winning_headers = NULL; + if (c->winning_headers != NULL) + { + free (c->winning_headers); + c->winning_headers = NULL; + } if ( maxtime > 0 && clock_gettime(CLOCK_MONOTONIC_RAW, &start_time) == -1) { rc = errno; @@ -1075,6 +1079,7 @@ debuginfod_query_server (debuginfod_client *c, if (vfd >= 0 && c->winning_headers != NULL) dprintf(vfd, "\n%s", c->winning_headers); data[committed_to].response_data = NULL; + data[committed_to].response_data_size = 0; } } -- cgit v1.2.1 From 8349d63903ce20f15ab78150d150822b1883098b Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 8 Dec 2021 10:20:58 -0500 Subject: debuginfod: correct concurrency bug in fdcache metrics The intern() function called set_metrics() outside a necessary lock being held. helgrind identified this race condition. No QA impact. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 4 ++++ debuginfod/debuginfod.cxx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 8c937d66..8cbaa9aa 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,7 @@ +2021-12-08 Frank Ch. Eigler + + * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex. + 2021-12-04 Mark Wielaard * debuginfod-client.c (debuginfod_query_server): Free winning_headers. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 0d3f0297..a26e7e8f 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1354,8 +1354,8 @@ public: if (verbose > 3) obatched(clog) << "fdcache interned a=" << a << " b=" << b << " fd=" << fd << " mb=" << mb << " front=" << front_p << endl; + set_metrics(); } - set_metrics(); // NB: we age the cache at lookup time too if (statfs_free_enough_p(tmpdir, "tmpdir", fdcache_mintmp)) -- cgit v1.2.1 From 3038ee821b29147f2b036372937747f150f2f755 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 14:26:54 +0100 Subject: libdwfl: Don't read beyond end of file in dwfl_segment_report_module The ELF might not be fully mapped into memory (which probably means the phdrs are bogus). Don't try to read beyond what we have in memory already. Reported-by: Evgeny Vereshchagin Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 57b2c494..b2a8752a 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + read beyond of (actual) end of (memory) file. + 2021-11-18 Matthias Maennich * linux-kernel-modules.c (dwfl_linux_kernel_report_modules): diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index ee9cfa2e..f6a1799e 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -924,8 +924,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Off offset = is32 ? p32[i].p_offset : p64[i].p_offset; GElf_Xword filesz = is32 ? p32[i].p_filesz : p64[i].p_filesz; + /* Don't try to read beyond the actual end of file. */ + if (offset >= file_trimmed_end) + continue; + void *into = contents + offset; - size_t read_size = filesz; + size_t read_size = MIN (filesz, file_trimmed_end - offset); (*memory_callback) (dwfl, addr_segndx (dwfl, segment, vaddr + bias, false), &into, &read_size, vaddr + bias, read_size, -- cgit v1.2.1 From 00d1c798b5225af732ecace438d4895ce6d6d24e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 1 Dec 2021 12:32:27 +0100 Subject: debuginfod: Check result of calling MHD_add_response_header. Although unlikely the MHD_add_response_header can fail for various reasons. If it fails something odd is going on. So check we can actually add a response header and log an error if we cannot. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 12 +++++++++ debuginfod/debuginfod.cxx | 64 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 20 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 8cbaa9aa..0ced2877 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,15 @@ +2021-12-08 Mark Wielaard + + * debuginfod.cxx (add_mhd_response_header): New function. + (reportable_exception::mhd_send_response): Call + MHD_add_response_header. + (add_mhd_last_modified): Likewise. + (handle_buildid_f_match): Likewise. + (handle_buildid_r_match): Likewise. + (handle_metrics): Likewise. And check MHD_Response was actually + created. + (handle_root): Likewise. + 2021-12-08 Frank Ch. Eigler * debuginfod.cxx (intern): Call set_metrics() holding the fdcache mutex. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index a26e7e8f..438e874c 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1,5 +1,6 @@ /* Debuginfo-over-http server. Copyright (C) 2019-2021 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -629,6 +630,9 @@ parse_opt (int key, char *arg, //////////////////////////////////////////////////////////////////////// +static void add_mhd_response_header (struct MHD_Response *r, + const char *h, const char *v); + // represent errors that may get reported to an ostream and/or a libmicrohttpd connection struct reportable_exception @@ -646,7 +650,7 @@ struct reportable_exception MHD_Response* r = MHD_create_response_from_buffer (message.size(), (void*) message.c_str(), MHD_RESPMEM_MUST_COPY); - MHD_add_response_header (r, "Content-Type", "text/plain"); + add_mhd_response_header (r, "Content-Type", "text/plain"); MHD_RESULT rc = MHD_queue_response (c, code, r); MHD_destroy_response (r); return rc; @@ -1067,6 +1071,15 @@ conninfo (struct MHD_Connection * conn) //////////////////////////////////////////////////////////////////////// +/* Wrapper for MHD_add_response_header that logs an error if we + couldn't add the specified header. */ +static void +add_mhd_response_header (struct MHD_Response *r, + const char *h, const char *v) +{ + if (MHD_add_response_header (r, h, v) == MHD_NO) + obatched(clog) << "Error: couldn't add '" << h << "' header" << endl; +} static void add_mhd_last_modified (struct MHD_Response *resp, time_t mtime) @@ -1079,10 +1092,10 @@ add_mhd_last_modified (struct MHD_Response *resp, time_t mtime) size_t rc = strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %T GMT", nowp); if (rc > 0 && rc < sizeof (datebuf)) - (void) MHD_add_response_header (resp, "Last-Modified", datebuf); + add_mhd_response_header (resp, "Last-Modified", datebuf); } - (void) MHD_add_response_header (resp, "Cache-Control", "public"); + add_mhd_response_header (resp, "Cache-Control", "public"); } @@ -1128,10 +1141,11 @@ handle_buildid_f_match (bool internal_req_t, } else { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); std::string file = b_source0.substr(b_source0.find_last_of("/")+1, b_source0.length()); - MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(s.st_size).c_str() ); - MHD_add_response_header (r, "X-DEBUGINFOD-FILE", file.c_str() ); + add_mhd_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(s.st_size).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file " << b_source0 << endl; @@ -1600,10 +1614,11 @@ handle_buildid_r_match (bool internal_req_p, inc_metric ("http_responses_total","result","archive fdcache"); - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); - MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); - MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); - MHD_add_response_header (r, "X-DEBUGINFOD-FILE", b_source1.c_str()); + add_mhd_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(fs.st_size).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", b_source1.c_str()); add_mhd_last_modified (r, fs.st_mtime); if (verbose > 1) obatched(clog) << "serving fdcache archive " << b_source0 << " file " << b_source1 << endl; @@ -1744,12 +1759,14 @@ handle_buildid_r_match (bool internal_req_p, } else { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); std::string file = b_source1.substr(b_source1.find_last_of("/")+1, b_source1.length()); - MHD_add_response_header (r, "X-DEBUGINFOD-SIZE", to_string(fs.st_size).c_str()); - MHD_add_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); - MHD_add_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); - + add_mhd_response_header (r, "Content-Type", + "application/octet-stream"); + add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", + to_string(fs.st_size).c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", + b_source0.c_str()); + add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); add_mhd_last_modified (r, archive_entry_mtime(e)); if (verbose > 1) obatched(clog) << "serving archive " << b_source0 << " file " << b_source1 << endl; @@ -2015,7 +2032,8 @@ and will not query the upstream servers"); auto r = MHD_create_response_from_fd ((uint64_t) s.st_size, fd); if (r) { - MHD_add_response_header (r, "Content-Type", "application/octet-stream"); + add_mhd_response_header (r, "Content-Type", + "application/octet-stream"); add_mhd_last_modified (r, s.st_mtime); if (verbose > 1) obatched(clog) << "serving file from upstream debuginfod/cache" << endl; @@ -2166,8 +2184,11 @@ handle_metrics (off_t* size) MHD_Response* r = MHD_create_response_from_buffer (os.size(), (void*) os.c_str(), MHD_RESPMEM_MUST_COPY); - *size = os.size(); - MHD_add_response_header (r, "Content-Type", "text/plain"); + if (r != NULL) + { + *size = os.size(); + add_mhd_response_header (r, "Content-Type", "text/plain"); + } return r; } @@ -2179,8 +2200,11 @@ handle_root (off_t* size) MHD_Response* r = MHD_create_response_from_buffer (version.size (), (void *) version.c_str (), MHD_RESPMEM_PERSISTENT); - *size = version.size (); - MHD_add_response_header (r, "Content-Type", "text/plain"); + if (r != NULL) + { + *size = version.size (); + add_mhd_response_header (r, "Content-Type", "text/plain"); + } return r; } -- cgit v1.2.1 From 3e1e249bfd8455457716cce798f3f91d01f2f00d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Dec 2021 01:08:48 +0100 Subject: readelf: Workaround stringop-truncation error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In function ‘strncpy’, inlined from ‘print_ehdr’ at readelf.c:1175:4: error: ‘__builtin_strncpy’ specified bound 512 equals destination size [-Werror=stringop-truncation] strncpy doesn't terminate the copied string if there is not enough room. We compensate later by explicitly adding a zero terminator at buf[sizeof (buf) - 1]. Normally gcc does see this, but with -fsanitize=address there is too much (checking) code in between. But it is actually better to not let strncpy do too much work, so substract one from the size. Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/readelf.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 05b2522d..263e9faa 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2021-12-04 Mark Wielaard + + * readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy. + 2021-10-20 John M Mellor-Crummey * readelf.c (print_debug_line_section): Try to read diff --git a/src/readelf.c b/src/readelf.c index c10038e3..93fb5989 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1172,7 +1172,7 @@ print_ehdr (Ebl *ebl, GElf_Ehdr *ehdr) (uint32_t) shdr->sh_link); else { - strncpy (buf, _(" ([0] not available)"), sizeof (buf)); + strncpy (buf, _(" ([0] not available)"), sizeof (buf) - 1); buf[sizeof (buf) - 1] = '\0'; } -- cgit v1.2.1 From fd2cadbe4749f43551f7df90ee41837d83a6fbc4 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Dec 2021 01:18:42 +0100 Subject: tests: varlocs workaround format-overflow errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In function ‘printf’, inlined from ‘handle_attr’ at varlocs.c:932:3: error: ‘%s’ directive argument is null [-Werror=format-overflow=] The warning is technically correct. A %s argument should not be NULL. Although in practice all implementations will print it as "(null)". Workaround this by simply changing the dwarf string functions to return an "" string. The test is for the correct names, either "(null)" or "" would make it fail (also remove a now unnecessary assert, the switch statement will check for unknown opcodes anyway). Signed-off-by: Mark Wielaard --- tests/ChangeLog | 10 ++++++++++ tests/varlocs.c | 11 +++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 9dceda89..a5673f18 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,13 @@ +2021-12-04 Mark Wielaard + + * varlocs.c (dwarf_encoding_string): Return "" instead + of NULL. + (dwarf_tag_string): Return "" instead of NULL. + (dwarf_attr_string): Return "" instead of NULL. + (dwarf_form_string): Return "" instead of NULL. + (dwarf_opcode_string): Return "" instead of NULL. + (print_expr): Remove assert. + 2021-11-18 Mark Wielaard * Makefile.am (dwfl_proc_attach_LDFLAGS): Add -rdynamic. diff --git a/tests/varlocs.c b/tests/varlocs.c index 152c6555..d2c13767 100644 --- a/tests/varlocs.c +++ b/tests/varlocs.c @@ -76,7 +76,7 @@ dwarf_encoding_string (unsigned int code) if (likely (code < sizeof (known) / sizeof (known[0]))) return known[code]; - return NULL; + return ""; } static const char * @@ -88,7 +88,7 @@ dwarf_tag_string (unsigned int tag) DWARF_ALL_KNOWN_DW_TAG #undef DWARF_ONE_KNOWN_DW_TAG default: - return NULL; + return ""; } } @@ -101,7 +101,7 @@ dwarf_attr_string (unsigned int attrnum) DWARF_ALL_KNOWN_DW_AT #undef DWARF_ONE_KNOWN_DW_AT default: - return NULL; + return ""; } } @@ -114,7 +114,7 @@ dwarf_form_string (unsigned int form) DWARF_ALL_KNOWN_DW_FORM #undef DWARF_ONE_KNOWN_DW_FORM default: - return NULL; + return ""; } } @@ -160,7 +160,7 @@ dwarf_opcode_string (unsigned int code) if (likely (code < sizeof (known) / sizeof (known[0]))) return known[code]; - return NULL; + return ""; } // Forward reference for print_expr_block. @@ -198,7 +198,6 @@ print_expr (Dwarf_Attribute *attr, Dwarf_Op *expr, Dwarf_Addr addr, int depth) uint8_t atom = expr->atom; const char *opname = dwarf_opcode_string (atom); - assert (opname != NULL); switch (atom) { -- cgit v1.2.1 From b947f95c2ce7520bf439386209c95454f1add69e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 4 Dec 2021 02:57:24 +0100 Subject: debuginfod: Fix debuginfod_pool leak gcc address sanitizer detected a dangling debuginfod_client handler when debuginfod exits. Make sure to groom the debuginfod client pool before exit after all threads are done. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 4 ++++ debuginfod/debuginfod.cxx | 2 ++ 2 files changed, 6 insertions(+) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 0ced2877..7a4840ff 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,7 @@ +2021-12-04 Mark Wielaard + + * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. + 2021-12-08 Mark Wielaard * debuginfod.cxx (add_mhd_response_header): New function. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 438e874c..35424e47 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -4021,6 +4021,8 @@ main (int argc, char *argv[]) } } + debuginfod_pool_groom (); + // NB: no problem with unconditional free here - an earlier failed regcomp would exit program (void) regfree (& file_include_regex); (void) regfree (& file_exclude_regex); -- cgit v1.2.1 From 5ba884a576afb0ec22660678790621b2a1c4a8e1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 5 Dec 2021 02:22:26 +0100 Subject: configure: Add --enable-sanitize-address --enable-sanitize-address makes sure that all code is compiled with -fsanitizer=address and all tests run against libasan. It can be combined with --enable-sanitize-undefined, but not with --enable-valgrind. In maintainer mode there is one program that causes leaks, i386_gendis, so disable leak detection for that program. One testcase, test_nlist, needs special linker flags, make sure it also uses -fsanitizer=address when using the address sanitizer. Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ configure.ac | 25 +++++++++++++++++++++++++ libcpu/ChangeLog | 5 +++++ libcpu/Makefile.am | 10 +++++++++- tests/ChangeLog | 6 ++++++ tests/Makefile.am | 10 ++++++++-- 6 files changed, 57 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d61b21c7..f00db17b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-12-04 Mark Wielaard + + * configure.ac: Add --enable-sanitize-address. + 2021-11-10 Mark Wielaard * configure.ac (AC_INIT): Set version to 0.186. diff --git a/configure.ac b/configure.ac index ff9581d2..48071165 100644 --- a/configure.ac +++ b/configure.ac @@ -307,10 +307,34 @@ esac AC_DEFINE_UNQUOTED(CHECK_UNDEFINED, $check_undefined_val, [Building with -fsanitize=undefined or not]) +AC_ARG_ENABLE([sanitize-address], + AS_HELP_STRING([--enable-sanitize-address], + [Use gcc address sanitizer]), + [use_address=$enableval], [use_address=no]) +if test "$use_address" = yes; then + old_CFLAGS="$CFLAGS" + old_CXXFLAGS="$CXXFLAGS" + old_LDFLAGS="$LDFLAGS" + # We want to fail immediately on first error, don't try to recover. + CFLAGS="$CFLAGS -fsanitize=address -fno-sanitize-recover" + CXXFLAGS="$CXXFLAGS -fsanitize=address -fno-sanitize-recover" + # Some compilers don't handle -fsanatize=address correctly with --no-undefined + LDFLAGS="-Wl,-z,defs -shared" + AC_LINK_IFELSE([AC_LANG_SOURCE([int main (int argc, char **argv) { return 0; }])], use_address=yes, use_address=no) + AS_IF([test "x$use_address" != xyes], + AC_MSG_WARN([gcc address sanitizer not available]) + CFLAGS="$old_CFLAGS" CXXFLAGS="$old_CXXFLAGS") + LDFLAGS="$old_LDFLAGS" +fi +AM_CONDITIONAL(USE_ADDRESS_SANITIZER, test "$use_address" = yes) + AC_ARG_ENABLE([valgrind], AS_HELP_STRING([--enable-valgrind],[run all tests under valgrind]), [use_valgrind=$enableval], [use_valgrind=no]) if test "$use_valgrind" = yes; then + if test "$use_address" = yes; then + AC_MSG_ERROR([cannot enable valgrind and sanitize address together]) + fi AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no) if test "$HAVE_VALGRIND" = "no"; then AC_MSG_ERROR([valgrind not found]) @@ -809,6 +833,7 @@ AC_MSG_NOTICE([ gcov support : ${use_gcov} run all tests under valgrind : ${use_valgrind} gcc undefined behaviour sanitizer : ${use_undefined} + gcc address sanitizer : ${use_address} use rpath in tests : ${tests_use_rpath} test biarch : ${utrace_cv_cc_biarch} ]) diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog index 7cca9419..48fbba19 100644 --- a/libcpu/ChangeLog +++ b/libcpu/ChangeLog @@ -1,3 +1,8 @@ +2021-12-04 Mark Wielaard + + * Makefile.am (GENDIS_ENV): New variable, depends on + USE_ADDRESS_SANITIZER. + 2020-12-20 Dmitry V. Levin * .gitignore: New file. diff --git a/libcpu/Makefile.am b/libcpu/Makefile.am index 43844ecf..57d0a164 100644 --- a/libcpu/Makefile.am +++ b/libcpu/Makefile.am @@ -61,8 +61,16 @@ noinst_HEADERS += memory-access.h i386_parse.h i386_data.h noinst_PROGRAMS = i386_gendis$(EXEEXT) +# i386_gendis doesn't clean up, ignore leaks. +# It is just a build tool to generate source in maintainer mode. +if USE_ADDRESS_SANITIZER +GENDIS_ENV=env ASAN_OPTIONS=detect_leaks=0 +else +GENDIS_ENV= +endif + $(srcdir)/%_dis.h: %_defs i386_gendis$(EXEEXT) - $(AM_V_GEN)./i386_gendis$(EXEEXT) $< > $@T + $(AM_V_GEN) $(GENDIS_ENV) ./i386_gendis$(EXEEXT) $< > $@T $(AM_V_at)mv -f $@T $@ else diff --git a/tests/ChangeLog b/tests/ChangeLog index a5673f18..76cb974a 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-12-04 Mark Wielaard + + * Makefile.am (EXTRA_NLIST_CFLAGS): New variable depends on + USE_ADDRESS_SANITIZER. + (test_nlist_CFLAGS): Add EXTRA_NLIST_CFLAGS. + 2021-12-04 Mark Wielaard * varlocs.c (dwarf_encoding_string): Return "" instead diff --git a/tests/Makefile.am b/tests/Makefile.am index 2298a5ae..8acaeaf2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -87,7 +87,13 @@ endif # test_nlist checks its own symbol table, and expects various symbols # to be in the order as specified in the source file. Explicitly set -# minimal CFLAGS +# minimal CFLAGS. But add address sanitizer if in use. +if USE_ADDRESS_SANITIZER +EXTRA_NLIST_CFLAGS=-fsanitize=address +else +EXTRA_NLIST_CFLAGS= +endif + test-nlist$(EXEEXT): test-nlist.c $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) \ @@ -635,7 +641,7 @@ scnnames_LDADD = $(libelf) sectiondump_LDADD = $(libelf) showptable_LDADD = $(libelf) hash_LDADD = $(libelf) -test_nlist_CFLAGS =-g -O0 +test_nlist_CFLAGS =-g -O0 $(EXTRA_NLIST_CFLAGS) test_nlist_LDADD = $(libelf) msg_tst_LDADD = $(libelf) newscn_LDADD = $(libelf) -- cgit v1.2.1 From 7fc69582efcfb5f005f04c818a7aab76ff1090be Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 9 Dec 2021 18:00:05 +0100 Subject: debuginfod: Don't format clog using 'right' or 'setw(20)'. Keep the logs just plain unformatted text. This really is a workaround for an apparent bug with gcc 8.3 -fsanitizer=undefined on arm32, which complains about the 'right' formatter: debuginfod.cxx:3472:12: runtime error: reference binding to misaligned address 0x00561ec9 for type '', which requires 2 byte alignment Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod.cxx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 7a4840ff..df373201 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2021-12-09 Mark Wielaard + + * debuginfod.cxx (database_stats_report): Don't format clog + using 'right' and 'setw(20)'. + 2021-12-04 Mark Wielaard * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 35424e47..887e4f5a 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3469,7 +3469,7 @@ database_stats_report() throw sqlite_exception(rc, "step"); obatched(clog) - << right << setw(20) << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL") + << ((const char*) sqlite3_column_text(ps_query, 0) ?: (const char*) "NULL") << " " << (sqlite3_column_text(ps_query, 1) ?: (const unsigned char*) "NULL") << endl; -- cgit v1.2.1 From 809f2d70ec770d512cf6b1e70a67f5eb84c4508c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 13:39:47 +0100 Subject: libdwfl: Don't try to convert too many bytes in dwfl_link_map_report When trying to read (corrupt) phdrs from a core file we only want to read and convert the bytes we could read. Also make sure we don't try to allocate too big buffers. https://sourceware.org/bugzilla/show_bug.cgi?id=28666 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/link_map.c | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index b2a8752a..96251f0d 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-08 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Limit malloc size to max + possible. When converting make sure we don't exceed the number + of bytes available in either in.d_buf nor out.d_buf. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 1e7d4502..1c298a8e 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -847,6 +847,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, /* Note this in the !in_ok path. That means memory_callback failed. But the callback might still have reset the d_size value (to zero). So explicitly set it here again. */ + if (unlikely (phnum > SIZE_MAX / phent)) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } in.d_size = phnum * phent; in.d_buf = malloc (in.d_size); if (unlikely (in.d_buf == NULL)) @@ -876,6 +881,13 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, return false; } size_t nbytes = phnum * phent; + /* We can only process as many bytes/phnum as there are + in in.d_size. The data might have been truncated. */ + if (nbytes > in.d_size) + { + nbytes = in.d_size; + phnum = nbytes / phent; + } void *buf = malloc (nbytes); Elf32_Phdr (*p32)[phnum] = buf; Elf64_Phdr (*p64)[phnum] = buf; @@ -888,10 +900,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, { .d_type = ELF_T_PHDR, .d_version = EV_CURRENT, - .d_size = phnum * phent, + .d_size = nbytes, .d_buf = buf }; - in.d_size = out.d_size; + if (in.d_size > out.d_size) + in.d_size = out.d_size; if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) -- cgit v1.2.1 From c21c606602e1160c19d01e2836e23aa1a9e13432 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 20:48:45 +0100 Subject: libdwfl: Make sure we know the phdr entry size before searching phdrs. Without the program header entry size we cannot search through the phdrs. https://sourceware.org/bugzilla/show_bug.cgi?id=28657 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 4 ++++ libdwfl/link_map.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 96251f0d..d875eabd 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2021-12-08 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure phent != 0. + 2021-12-08 Mark Wielaard * link_map.c (dwfl_link_map_report): Limit malloc size to max diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 1c298a8e..623b3062 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -784,7 +784,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, GElf_Xword dyn_filesz = 0; GElf_Addr dyn_bias = (GElf_Addr) -1; - if (phdr != 0 && phnum != 0) + if (phdr != 0 && phnum != 0 && phent != 0) { Dwfl_Module *phdr_mod; int phdr_segndx = INTUSE(dwfl_addrsegment) (dwfl, phdr, &phdr_mod); -- cgit v1.2.1 From b9ed67836b6f4e580927b4e8e1c8517e70a086be Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 22:20:17 +0100 Subject: libdwfl: Don't trust e_shentsize in dwfl_segment_report_module When calulating the possible section header table end us the actual size of the section headers (sizeof (Elf32_Shdr) or sizeof (Elf64_Shdr)), not the ELF header e_shentsize value, which can be corrupted. This prevents a posssible overflow, but we check the shdrs_end is sane later anyway. https://sourceware.org/bugzilla/show_bug.cgi?id=28659 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d875eabd..76e0899e 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + trust e_shentsize. + 2021-12-08 Mark Wielaard * link_map.c (dwfl_link_map_report): Make sure phent != 0. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index f6a1799e..be0aff76 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -383,7 +383,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, zero sh_size field. We ignore this here because getting shdrs is just a nice bonus (see below in the type == PT_LOAD case where we trim the last segment). */ - shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * ehdr.e32.e_shentsize; + shdrs_end = ehdr.e32.e_shoff + ehdr.e32.e_shnum * sizeof (Elf32_Shdr); break; case ELFCLASS64: @@ -397,7 +397,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (phentsize != sizeof (Elf64_Phdr)) goto out; /* See the NOTE above for shdrs_end and ehdr.e32.e_shnum. */ - shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * ehdr.e64.e_shentsize; + shdrs_end = ehdr.e64.e_shoff + ehdr.e64.e_shnum * sizeof (Elf64_Shdr); break; default: -- cgit v1.2.1 From 98e7adf70896ac179258d41c2aac38e9e91614bb Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 23:44:34 +0100 Subject: libdwfl: Don't install an Elf handle in a Dwfl_Module twice dwfl_segment_report_module can be called with the same module name, start and end address twice (probably because of a corrupt core file). In that case don't override the main.elf handle if it already exists. https://sourceware.org/bugzilla/show_bug.cgi?id=28655 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 76e0899e..1f593ac9 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + Dwfl_Module isn't associated with an Elf before installing it. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index be0aff76..f4acfe53 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -963,7 +963,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, elf->flags |= ELF_F_MALLOCED; } - if (elf != NULL) + if (elf != NULL && mod->main.elf == NULL) { /* Install the file in the module. */ mod->main.elf = elf; -- cgit v1.2.1 From 78ecba0926216e0ad90b71f789636d1e0a9777ca Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 9 Dec 2021 21:24:18 +0100 Subject: libdwfl: Don't try to convert too many dyns in dwfl_link_map_report When trying to read (corrupt) dynamic entries from a core file we only want to read and convert the entries we could read. Also make sure we don't try to allocate too bug a buffer. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/link_map.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 1f593ac9..856bd335 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-09 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Limit dyn_filesz malloc size + to max possible. When converting make sure we don't exceed the number + of bytes available in either in.d_buf or out.d_buf. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Check diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 623b3062..ad93501e 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -994,6 +994,17 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, if ((*memory_callback) (dwfl, dyn_segndx, &in.d_buf, &in.d_size, dyn_vaddr, dyn_filesz, memory_callback_arg)) { + size_t entsize = (elfclass == ELFCLASS32 + ? sizeof (Elf32_Dyn) : sizeof (Elf64_Dyn)); + if (unlikely (dyn_filesz > SIZE_MAX / entsize)) + { + __libdwfl_seterrno (DWFL_E_NOMEM); + return false; + } + /* We can only process as many bytes as there are in + in.d_size. The data might have been truncated. */ + if (dyn_filesz > in.d_size) + dyn_filesz = in.d_size; void *buf = malloc (dyn_filesz); Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; @@ -1009,7 +1020,8 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, .d_size = dyn_filesz, .d_buf = buf }; - in.d_size = out.d_size; + if (in.d_size > out.d_size) + in.d_size = out.d_size; if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) -- cgit v1.2.1 From 80ea3cf328eb94fd78e494d0128561f53e20114d Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Wed, 8 Dec 2021 22:41:47 -0500 Subject: PR28661: debuginfo connection thread pool support Add an option -C, which activates libmicrohttpd's thread-pool mode for handling incoming http connections. Add libmicrohttpd error-logging callback function so as to receive indication of its internal errors, and relay counts to our metrics. Some of these internal errors tipped us off to a microhttpd bug that thread pooling works around. Document in debuginfod.8 page. Hand-tested against "ulimit -u NNN" shells, and with a less strenuous new test case. Signed-off-by: Frank Ch. Eigler --- NEWS | 5 +++ debuginfod/ChangeLog | 8 ++++ debuginfod/debuginfod.cxx | 38 +++++++++++++++-- doc/ChangeLog | 5 +++ doc/debuginfod.8 | 17 ++++++++ tests/ChangeLog | 6 +++ tests/Makefile.am | 4 +- tests/debuginfod-subr.sh | 10 +++++ tests/run-debuginfod-webapi-concurrency.sh | 66 ++++++++++++++++++++++++++++++ 9 files changed, 154 insertions(+), 5 deletions(-) create mode 100755 tests/run-debuginfod-webapi-concurrency.sh diff --git a/NEWS b/NEWS index 490932ae..6be58866 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +Version 0.187 after 0.186 + +debuginfod: Support -C option for connection thread pooling. + + Version 0.186 debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index df373201..2642ef5e 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -3,6 +3,14 @@ * debuginfod.cxx (database_stats_report): Don't format clog using 'right' and 'setw(20)'. +2021-12-08 Frank Ch. Eigler + + * debuginfod.cxx (connection_pool): New global. + (parse_opt): Parse & check -C option to set it. + (error_cb): New callback for libmicrohttpd error counting. + (main): Activate MHD_OPTION_THREAD_POOL_SIZE if appropriate. + Activate error_cb. + 2021-12-04 Mark Wielaard * debuginfod.cxx (main): Call debuginfod_pool_groom before exit. diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 887e4f5a..bb8e8e10 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -353,7 +353,9 @@ static const struct argp_option options[] = { "rescan-time", 't', "SECONDS", 0, "Number of seconds to wait between rescans, 0=disable.", 0 }, { "groom-time", 'g', "SECONDS", 0, "Number of seconds to wait between database grooming, 0=disable.", 0 }, { "maxigroom", 'G', NULL, 0, "Run a complete database groom/shrink pass at startup.", 0 }, - { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM.", 0 }, + { "concurrency", 'c', "NUM", 0, "Limit scanning thread concurrency to NUM, default=#CPUs.", 0 }, + { "connection-pool", 'C', "NUM", OPTION_ARG_OPTIONAL, + "Use webapi connection pool with NUM threads, default=unlim.", 0 }, { "include", 'I', "REGEX", 0, "Include files matching REGEX, default=all.", 0 }, { "exclude", 'X', "REGEX", 0, "Exclude files matching REGEX, default=none.", 0 }, { "port", 'p', "NUM", 0, "HTTP port to listen on, default 8002.", 0 }, @@ -412,6 +414,7 @@ static unsigned rescan_s = 300; static unsigned groom_s = 86400; static bool maxigroom = false; static unsigned concurrency = std::thread::hardware_concurrency() ?: 1; +static int connection_pool = 0; static set source_paths; static bool scan_files = false; static map scan_archives; @@ -558,6 +561,16 @@ parse_opt (int key, char *arg, concurrency = (unsigned) atoi(arg); if (concurrency < 1) concurrency = 1; break; + case 'C': + if (arg) + { + connection_pool = atoi(arg); + if (connection_pool < 2) + argp_failure(state, 1, EINVAL, "-C NUM minimum 2"); + } + else // arg not given + connection_pool = std::thread::hardware_concurrency() * 2 ?: 2; + break; case 'I': // NB: no problem with unconditional free here - an earlier failed regcomp would exit program if (passive_p) @@ -1368,6 +1381,7 @@ public: if (verbose > 3) obatched(clog) << "fdcache interned a=" << a << " b=" << b << " fd=" << fd << " mb=" << mb << " front=" << front_p << endl; + set_metrics(); } @@ -3708,7 +3722,15 @@ sigusr2_handler (int /* sig */) } - +static void // error logging callback from libmicrohttpd internals +error_cb (void *arg, const char *fmt, va_list ap) +{ + (void) arg; + inc_metric("error_count","libmicrohttpd",fmt); + char errmsg[512]; + (void) vsnprintf (errmsg, sizeof(errmsg), fmt, ap); // ok if slightly truncated + obatched(cerr) << "libmicrohttpd error: " << errmsg; // MHD_DLOG calls already include \n +} // A user-defined sqlite function, to score the sharedness of the @@ -3853,7 +3875,7 @@ main (int argc, char *argv[]) // Start httpd server threads. Separate pool for IPv4 and IPv6, in // case the host only has one protocol stack. - MHD_Daemon *d4 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION + MHD_Daemon *d4 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) #if MHD_VERSION >= 0x00095300 | MHD_USE_INTERNAL_POLLING_THREAD #else @@ -3863,8 +3885,11 @@ main (int argc, char *argv[]) http_port, NULL, NULL, /* default accept policy */ handler_cb, NULL, /* handler callback */ + MHD_OPTION_EXTERNAL_LOGGER, error_cb, NULL, + (connection_pool ? MHD_OPTION_THREAD_POOL_SIZE : MHD_OPTION_END), + (connection_pool ? (int)connection_pool : MHD_OPTION_END), MHD_OPTION_END); - MHD_Daemon *d6 = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION + MHD_Daemon *d6 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) #if MHD_VERSION >= 0x00095300 | MHD_USE_INTERNAL_POLLING_THREAD #else @@ -3875,6 +3900,9 @@ main (int argc, char *argv[]) http_port, NULL, NULL, /* default accept policy */ handler_cb, NULL, /* handler callback */ + MHD_OPTION_EXTERNAL_LOGGER, error_cb, NULL, + (connection_pool ? MHD_OPTION_THREAD_POOL_SIZE : MHD_OPTION_END), + (connection_pool ? (int)connection_pool : MHD_OPTION_END), MHD_OPTION_END); if (d4 == NULL && d6 == NULL) // neither ipv4 nor ipv6? boo @@ -3928,6 +3956,8 @@ main (int argc, char *argv[]) if (! passive_p) obatched(clog) << "search concurrency " << concurrency << endl; + obatched(clog) << "webapi connection pool " << connection_pool + << (connection_pool ? "" : " (unlimited)") << endl; if (! passive_p) obatched(clog) << "rescan time " << rescan_s << endl; obatched(clog) << "fdcache fds " << fdcache_fds << endl; diff --git a/doc/ChangeLog b/doc/ChangeLog index 7a73fa10..f25bcd2e 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Frank Ch. Eigler + + PR28661 + * debuginfod.8 (-C): Document new flag. + 2021-11-05 Frank Ch. Eigler PR28430 diff --git a/doc/debuginfod.8 b/doc/debuginfod.8 index 1e56f656..ee8e4078 100644 --- a/doc/debuginfod.8 +++ b/doc/debuginfod.8 @@ -205,6 +205,23 @@ This important for controlling CPU-intensive operations like parsing an ELF file and especially decompressing archives. The default is the number of processors on the system; the minimum is 1. +.TP +.B "\-C" "\-C=NUM" "\-\-connection\-pool" "\-\-connection\-pool=NUM" +Set the size of the pool of threads serving webapi queries. The +following table summarizes the interpretaton of this option and its +optional NUM parameter. +.TS +l l. +no option clone new thread for every request, no fixed pool +\-C use a fixed thread pool sized automatically +\-C=NUM use a fixed thread pool sized NUM, minimum 2 +.TE + +The first mode is useful for friendly bursty traffic. The second mode +is a simple and safe configuration based on the number of processors. +The third mode is suitable for tuned load-limiting configurations +facing unruly traffic. + .TP .B "\-L" Traverse symbolic links encountered during traversal of the PATHs, diff --git a/tests/ChangeLog b/tests/ChangeLog index 76cb974a..82061c6e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,9 @@ +2021-12-09 Frank Ch. Eigler + + * debuginfod-subr.sh (xfail): New proc. + * run-debuginfod-webapi-concurrency.sh: New test for -C. + * Makefile.am: List it. + 2021-12-04 Mark Wielaard * Makefile.am (EXTRA_NLIST_CFLAGS): New variable depends on diff --git a/tests/Makefile.am b/tests/Makefile.am index 8acaeaf2..b2da2c83 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -242,7 +242,8 @@ TESTS += run-debuginfod-dlopen.sh \ run-debuginfod-percent-escape.sh \ run-debuginfod-x-forwarded-for.sh \ run-debuginfod-response-headers.sh \ - run-debuginfod-extraction-passive.sh + run-debuginfod-extraction-passive.sh \ + run-debuginfod-webapi-concurrency.sh endif endif @@ -539,6 +540,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-debuginfod-percent-escape.sh \ run-debuginfod-response-headers.sh \ run-debuginfod-extraction-passive.sh \ + run-debuginfod-webapi-concurrency.sh \ debuginfod-rpms/fedora30/hello2-1.0-2.src.rpm \ debuginfod-rpms/fedora30/hello2-1.0-2.x86_64.rpm \ debuginfod-rpms/fedora30/hello2-debuginfo-1.0-2.x86_64.rpm \ diff --git a/tests/debuginfod-subr.sh b/tests/debuginfod-subr.sh index 59033f35..0b59b5b8 100755 --- a/tests/debuginfod-subr.sh +++ b/tests/debuginfod-subr.sh @@ -158,3 +158,13 @@ PORT1=0 PORT2=0 PID1=0 PID2=0 + + +# run $1 as a sh -c command, invert result code +xfail() { + if sh -c "$1"; then + false + else + true + fi +} diff --git a/tests/run-debuginfod-webapi-concurrency.sh b/tests/run-debuginfod-webapi-concurrency.sh new file mode 100755 index 00000000..402a6307 --- /dev/null +++ b/tests/run-debuginfod-webapi-concurrency.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x + +mkdir Z +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=12000 +get_ports + +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache + +cp -rvp ${abs_srcdir}/debuginfod-tars Z +tempfiles Z + + +for Cnum in "" "-C" "-C10" "-C100" +do + env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE $Cnum -d :memory: -Z .tar.xz -Z .tar.bz2=bzcat -p $PORT1 -t0 -g0 -v --fdcache-fds=0 --fdcache-prefetch-fds=0 Z >> vlog$PORT1 2>&1 & + PID1=$! + tempfiles vlog$PORT1 + errfiles vlog$PORT1 + + wait_ready $PORT1 'ready' 1 + # Wait for server to finish indexing + wait_ready $PORT1 'thread_work_total{role="traverse"}' 1 + wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 + wait_ready $PORT1 'thread_busy{role="scan"}' 0 + + # Do a bunch of lookups in parallel + for jobs in `seq 100`; do + curl -s http://localhost:$PORT1/buildid/cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb/debuginfo > /dev/null & + done + + # all 100 curls should succeed + wait_ready $PORT1 'http_responses_transfer_bytes_count{code="200",type="debuginfo"}' 100 + + (sleep 5; + curl -s http://localhost:$PORT1/metrics | egrep 'error|responses'; + kill $PID1) & + wait # for all curls, the ()& from just above, and for debuginfod + PID1=0 +done + +xfail "grep Server.reached.connection vlog$PORT1" # PR18661 + +exit 0 -- cgit v1.2.1 From db862a11910a5d4c007c549c2b4ce4cad62f242b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 12 Dec 2021 23:26:18 +0100 Subject: libdwfl: Don't allocate more than SIZE_MAX in dwfl_segment_report_module. The code in dwfl_segment_report_module tries to allocate and fill in memory as described in a core file. Normally all memory in filled in through the (phdrs) memory_callback or the read_eagerly callback. If the last callback doesn't work we try to calloc file_trimmed_end bytes and then try to fill in the parts of memory we can from the core file at the correct offsets. file_trimmed_end is a GElf_Off which is an unsigned 64bit type. On 32bit systems this means when cast to a size_t to do an allocation might allocate truncated (much smaller) value. So make sure to not allocate more than SIZE_MAX bytes. It would be nice to have a better way to limit the amount of memory allocated here. A core file might describe really big memory areas for which it doesn't provide any data. In that case we really shouldn't calloc mega- or giga-bytes of zeroed out memory. Reported-by: Evgeny Vereshchagin Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 856bd335..aaea164c 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-12 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't + allocate more than SIZE_MAX. + 2021-12-09 Mark Wielaard * link_map.c (dwfl_link_map_report): Limit dyn_filesz malloc size diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index f4acfe53..46564ec5 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -904,6 +904,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* The caller wants to read the whole file in right now, but hasn't done it for us. Fill in a local image of the virtual file. */ + if (file_trimmed_end > SIZE_MAX) + goto out; + void *contents = calloc (1, file_trimmed_end); if (unlikely (contents == NULL)) goto out; -- cgit v1.2.1 From d70b27cd02227d5b533f9da2c811bea08eddabde Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 9 Dec 2021 10:51:23 +0100 Subject: debuginfod/debuginfod-client.c: use long for cache time configurations time_t is platform dependent and some of architectures e.g. x32, riscv32, arc use 64bit time_t even while they are 32bit architectures, therefore directly using integer printf formats will not work portably. Use a plain long everywhere as the intervals are small enough that it will not be problematic. Signed-off-by: Alexander Kanavin --- debuginfod/ChangeLog | 7 +++++++ debuginfod/debuginfod-client.c | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 2642ef5e..dfb5d42e 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,10 @@ +2021-12-09 Alexander Kanavin + + * debuginfod-client.c (cache_clean_default_interval_s): Change type to + long from time_t. + (cache_miss_default_s): Likewise. + (cache_default_max_unused_age_s): Likewise. + 2021-12-09 Mark Wielaard * debuginfod.cxx (database_stats_report): Don't format clog diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 9bf97bfc..024b0954 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -135,17 +135,17 @@ struct debuginfod_client how frequently the cache should be cleaned. The file's st_mtime represents the time of last cleaning. */ static const char *cache_clean_interval_filename = "cache_clean_interval_s"; -static const time_t cache_clean_default_interval_s = 86400; /* 1 day */ +static const long cache_clean_default_interval_s = 86400; /* 1 day */ /* The cache_miss_default_s within the debuginfod cache specifies how frequently the 000-permision file should be released.*/ -static const time_t cache_miss_default_s = 600; /* 10 min */ +static const long cache_miss_default_s = 600; /* 10 min */ static const char *cache_miss_filename = "cache_miss_s"; /* The cache_max_unused_age_s file within the debuginfod cache specifies the the maximum time since last access that a file will remain in the cache. */ static const char *cache_max_unused_age_filename = "max_unused_age_s"; -static const time_t cache_default_max_unused_age_s = 604800; /* 1 week */ +static const long cache_default_max_unused_age_s = 604800; /* 1 week */ /* Location of the cache of files downloaded from debuginfods. The default parent directory is $HOME, or '/' if $HOME doesn't exist. */ -- cgit v1.2.1 From 8303a9cf380a57d035557a157fe0e4d58e2b3090 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 14 Dec 2021 16:12:31 +0100 Subject: libelf: Use offsetof to get field of unaligned gcc undefined sanitizer flags: elf_begin.c:230:18: runtime error: member access within misaligned address 0xf796400a for type 'struct Elf64_Shdr', which requires 4 byte alignment struct. We aren't actually accessing the field member of the struct, but are taking the address of it. Which the compiler can take as a hint that the address is correctly aligned. But we can do the same by adding the field offsetof to the base address. Which doesn't trigger a runtime error. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/elf_begin.c | 15 +++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 041da9b1..96059eff 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2021-12-15 Mark Wielaard + + * elf_begin.c (get_shnum): Use offsetof to get field of unaligned + struct. + 2021-09-06 Dmitry V. Levin * common.h (allocate_elf): Remove cast of calloc return value. diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 93d1e12f..bd3399de 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -1,5 +1,6 @@ /* Create descriptor for processing file. Copyright (C) 1998-2010, 2012, 2014, 2015, 2016 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -170,9 +171,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL)) /* gcc will optimize the memcpy to a simple memory access while taking care of alignment issues. */ - memcpy (&size, &((Elf32_Shdr *) ((char *) map_address - + ehdr.e32->e_shoff - + offset))->sh_size, + memcpy (&size, ((char *) map_address + + ehdr.e32->e_shoff + + offset + + offsetof (Elf32_Shdr, sh_size)), sizeof (Elf32_Word)); else if (unlikely ((r = pread_retry (fildes, &size, @@ -227,9 +229,10 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL)) /* gcc will optimize the memcpy to a simple memory access while taking care of alignment issues. */ - memcpy (&size, &((Elf64_Shdr *) ((char *) map_address - + ehdr.e64->e_shoff - + offset))->sh_size, + memcpy (&size, ((char *) map_address + + ehdr.e64->e_shoff + + offset + + offsetof (Elf64_Shdr, sh_size)), sizeof (Elf64_Xword)); else if (unlikely ((r = pread_retry (fildes, &size, -- cgit v1.2.1 From 3c9b69161b842708b4ef2f4e0f0b3ad1812798c2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 16 Dec 2021 00:29:22 +0100 Subject: libdwfl: Make sure phent is sane and there is at least one phdr dwfl_link_map_report can only handle program headers that are the correct (32 or 64 bit) size. The buffer read in needs to contain room for at least one Phdr. https://sourceware.org/bugzilla/show_bug.cgi?id=28660 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/link_map.c | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index aaea164c..7bf789e0 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-15 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure phent is either sizeof + Elf32_Phdr or sizeof Elf64_Phdr. Check in.d_size can hold at least one + Phdr. + 2021-12-12 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Don't diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index ad93501e..82df7b69 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -1,5 +1,6 @@ /* Report modules by examining dynamic linker data structures. Copyright (C) 2008-2016 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -784,7 +785,9 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, GElf_Xword dyn_filesz = 0; GElf_Addr dyn_bias = (GElf_Addr) -1; - if (phdr != 0 && phnum != 0 && phent != 0) + if (phdr != 0 && phnum != 0 + && ((elfclass == ELFCLASS32 && phent == sizeof (Elf32_Phdr)) + || (elfclass == ELFCLASS64 && phent == sizeof (Elf64_Phdr)))) { Dwfl_Module *phdr_mod; int phdr_segndx = INTUSE(dwfl_addrsegment) (dwfl, phdr, &phdr_mod); @@ -904,7 +907,16 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, .d_buf = buf }; if (in.d_size > out.d_size) - in.d_size = out.d_size; + { + in.d_size = out.d_size; + phnum = in.d_size / phent; + if (phnum == 0) + { + free (buf); + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } + } if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) -- cgit v1.2.1 From 9098a37fcfb67342ad955efc71d1398e2f8a69c1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 8 Dec 2021 18:02:27 +0100 Subject: libdwfl: Add overflow check while iterating in dwfl_segment_report_module While iterating the notes we could overflow the len variable if the note name or description was too big. Fix this by adding an (unsigned) overflow check. https://sourceware.org/bugzilla/show_bug.cgi?id=28654 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 7bf789e0..f849b816 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Add + len overflow check while iterating notes. + 2021-12-15 Mark Wielaard * link_map.c (dwfl_link_map_report): Make sure phent is either sizeof diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 46564ec5..f323929e 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -543,10 +543,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, const GElf_Nhdr *nh = notes; size_t len = 0; + size_t last_len; while (filesz > len + sizeof (*nh)) { const void *note_name; const void *note_desc; + last_len = len; len += sizeof (*nh); note_name = notes + len; @@ -555,7 +557,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len); note_desc = notes + len; - if (unlikely (filesz < len + nh->n_descsz)) + if (unlikely (filesz < len + nh->n_descsz + || len < last_len + || len + nh->n_descsz < last_len)) break; if (nh->n_type == NT_GNU_BUILD_ID -- cgit v1.2.1 From a11e7753d0bf644feae0b3ed1d23e34961941089 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Dec 2021 18:39:09 +0100 Subject: tests: Use /bin/sh instead of /bin/ls as always there binary run-debuginfod-query-retry.sh would fail when /bin/ls wasn't available. Use /bin/sh instead which really is always available. GNU Guix doesn't have any other standard binary in /bin except for sh. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/run-debuginfod-query-retry.sh | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 82061c6e..c97ed52e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2021-12-17 Mark Wielaard + + * run-debuginfod-query-retry.sh: Use /bin/sh instead of /bin/ls. + 2021-12-09 Frank Ch. Eigler * debuginfod-subr.sh (xfail): New proc. diff --git a/tests/run-debuginfod-query-retry.sh b/tests/run-debuginfod-query-retry.sh index c9192510..0cfdba92 100755 --- a/tests/run-debuginfod-query-retry.sh +++ b/tests/run-debuginfod-query-retry.sh @@ -25,7 +25,7 @@ unset VALGRIND_CMD ######################################################################## # set up tests for retrying failed queries. retry_attempts=`(testrun env DEBUGINFOD_URLS=http://255.255.255.255/JUNKJUNK DEBUGINFOD_RETRY_LIMIT=10 DEBUGINFOD_VERBOSE=1 DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache \ - ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/ls || true) 2>&1 >/dev/null \ + ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo /bin/sh || true) 2>&1 >/dev/null \ | grep -c 'Retry failed query'` if [ $retry_attempts -ne 10 ]; then echo "retry mechanism failed." -- cgit v1.2.1 From ee99a6ec16f52fc31f322f7ec1abfedf400a09fa Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Dec 2021 22:53:13 +0100 Subject: libdwfl: Make sure there is at least one dynamic entry The buffer read in needs to contain room for at least one Elf32_Dyn or Elf64_Dyn entry. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/link_map.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index f849b816..d4eee639 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-16 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure dyn_filesz / entsize is + non-zero. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Add diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 82df7b69..177ad9a5 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -1017,6 +1017,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, in.d_size. The data might have been truncated. */ if (dyn_filesz > in.d_size) dyn_filesz = in.d_size; + if (dyn_filesz / entsize == 0) + { + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } void *buf = malloc (dyn_filesz); Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; -- cgit v1.2.1 From cdf407ef36378ba623c97f9c5c454666f45771fd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Dec 2021 23:51:35 +0100 Subject: libdwfl: Make sure there is at least one phdr The buffer read in needs to contain room for at least one Phdr. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 4 ++++ libdwfl/link_map.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d4eee639..8760b1ef 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2021-12-16 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Make sure phnum is non-zero. + 2021-12-16 Mark Wielaard * link_map.c (dwfl_link_map_report): Make sure dyn_filesz / entsize is diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 177ad9a5..c4f79f11 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -890,6 +890,11 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, { nbytes = in.d_size; phnum = nbytes / phent; + if (phnum == 0) + { + __libdwfl_seterrno (DWFL_E_BADELF); + return false; + } } void *buf = malloc (nbytes); Elf32_Phdr (*p32)[phnum] = buf; -- cgit v1.2.1 From b16ff8198f91714048faaaed2a9b4e6801293226 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 18 Dec 2021 02:01:37 +0100 Subject: libdwfl: Make sure note data is properly aligned. In dwfl_segment_report_module the note data might not be properly aligned. Check that it is before accessing the data directly. Otherwise convert data so it is properly aligned. Also fix NOTE_ALIGN4 and NOTE_ALIGN8 to work correctly with long types. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 5 ++++- libelf/ChangeLog | 5 +++++ libelf/libelfP.h | 4 ++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 8760b1ef..f18a0c45 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-16 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + note data is properly aligned. + 2021-12-16 Mark Wielaard * link_map.c (dwfl_link_map_report): Make sure phnum is non-zero. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index f323929e..2263e3cc 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -517,7 +517,10 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); void *notes; - if (ei_data == MY_ELFDATA) + if (ei_data == MY_ELFDATA + && (uintptr_t) data == (align == 8 + ? NOTE_ALIGN8 ((uintptr_t) data) + : NOTE_ALIGN4 ((uintptr_t) data))) notes = data; else { diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 96059eff..617d97a5 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2021-12-16 Mark Wielaard + + * libelfP.h (NOTE_ALIGN4): And with negative unsigned long. + (NOTE_ALIGN8): Likewise. + 2021-12-15 Mark Wielaard * elf_begin.c (get_shnum): Use offsetof to get field of unaligned diff --git a/libelf/libelfP.h b/libelf/libelfP.h index fc1aebec..2c6995bb 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -603,10 +603,10 @@ extern void __libelf_reset_rawdata (Elf_Scn *scn, void *buf, size_t size, /* Align offset to 4 bytes as needed for note name and descriptor data. This is almost always used, except for GNU Property notes, which use 8 byte padding... */ -#define NOTE_ALIGN4(n) (((n) + 3) & -4U) +#define NOTE_ALIGN4(n) (((n) + 3) & -4UL) /* Special note padding rule for GNU Property notes. */ -#define NOTE_ALIGN8(n) (((n) + 7) & -8U) +#define NOTE_ALIGN8(n) (((n) + 7) & -8UL) /* Convenience macro. */ #define INVALID_NDX(ndx, type, data) \ -- cgit v1.2.1 From 3831c0b2c2334b129a9d04f12dc7549db412d3bd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Dec 2021 17:43:19 +0100 Subject: libdwfl: Make dwfl_segment_report_module aware of maximum Elf size At the end of dwfl_segment_report_module we might try to read in the whole contents described by a core file. To do this we first allocate a zeroed block of memory that is as big as possible. The core file however may describe much more loaded data than is actually available in the Elf image. So pass the maximum size so we can limit the amount of memory we reserve. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 8 ++++++++ libdwfl/core-file.c | 1 + libdwfl/dwfl_segment_report_module.c | 5 +++-- libdwfl/libdwflP.h | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index f18a0c45..6a3e041b 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,11 @@ +2021-12-17 Mark Wielaard + + * libdwflP.h (dwfl_segment_report_module): Add maxread argument. + * core-file.c (dwfl_core_file_report): Pass elf->maximum_size to + dwfl_segment_report_module. + * dwfl_segment_report_module.c (dwfl_segment_report_module): Add + maxread argument. Check file_trimmed_end against maxread. + 2021-12-16 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Check diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index 4e4c9b3c..b04d1d18 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -559,6 +559,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) int seg = dwfl_segment_report_module (dwfl, ndx, NULL, &dwfl_elf_phdr_memory_callback, elf, core_file_read_eagerly, elf, + elf->maximum_size, note_file, note_file_size, &r_debug_info); if (unlikely (seg < 0)) diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 2263e3cc..3e87d207 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -294,6 +294,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + size_t maxread, const void *note_file, size_t note_file_size, const struct r_debug_info *r_debug_info) { @@ -911,8 +912,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* The caller wants to read the whole file in right now, but hasn't done it for us. Fill in a local image of the virtual file. */ - if (file_trimmed_end > SIZE_MAX) - goto out; + if (file_trimmed_end > maxread) + file_trimmed_end = maxread; void *contents = calloc (1, file_trimmed_end); if (unlikely (contents == NULL)) diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h index 4344e356..7503a627 100644 --- a/libdwfl/libdwflP.h +++ b/libdwfl/libdwflP.h @@ -698,6 +698,7 @@ extern int dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, void *memory_callback_arg, Dwfl_Module_Callback *read_eagerly, void *read_eagerly_arg, + size_t maxread, const void *note_file, size_t note_file_size, const struct r_debug_info *r_debug_info); -- cgit v1.2.1 From 163d1e9582efa8248057b088ad9c28fc8d24512e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 17 Dec 2021 18:09:31 +0100 Subject: libdwfl: Make sure the note len increases each iteration In dwfl_segment_report_module we have an overflow check when reading notes, but we could still not make any progress if the number of bytes read (len) didn't increase at all. Check len > last_len. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 6a3e041b..d00ce702 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make + sure the note len increases each iteration. + 2021-12-17 Mark Wielaard * libdwflP.h (dwfl_segment_report_module): Add maxread argument. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 3e87d207..89e05103 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -562,7 +562,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, note_desc = notes + len; if (unlikely (filesz < len + nh->n_descsz - || len < last_len + || len <= last_len || len + nh->n_descsz < last_len)) break; -- cgit v1.2.1 From aab1cc4c0313cd0a0ad9b7ecf794301126daab15 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 19 Dec 2021 15:52:32 +0100 Subject: libelf: Only set shdr state when there is at least one shdr The elf shdr state only needs to be set when scncnt is at least one. Otherwise e_shoff can be bogus. Also use unsigned arithmetic for checking e_shoff alignment. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/elf_begin.c | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 617d97a5..29a8aae1 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2021-12-19 Mark Wielaard + + * elf_begin.c (file_read_elf): Cast ehdr to uintptr_t before e_shoff + alignment check. Only set shdr state when scncnt is larger than zero. + 2021-12-16 Mark Wielaard * libelfP.h (NOTE_ALIGN4): And with negative unsigned long. diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index bd3399de..0c9a988d 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -383,7 +383,7 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */ && (ALLOW_UNALIGNED - || (((uintptr_t) ((char *) ehdr + e_shoff) + || ((((uintptr_t) ehdr + e_shoff) & (__alignof__ (Elf32_Shdr) - 1)) == 0))) { if (unlikely (scncnt > 0 && e_shoff >= maxsize) @@ -395,8 +395,10 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, __libelf_seterrno (ELF_E_INVALID_ELF); return NULL; } - elf->state.elf32.shdr - = (Elf32_Shdr *) ((char *) ehdr + e_shoff); + + if (scncnt > 0) + elf->state.elf32.shdr + = (Elf32_Shdr *) ((char *) ehdr + e_shoff); for (size_t cnt = 0; cnt < scncnt; ++cnt) { @@ -485,15 +487,17 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */ && (ALLOW_UNALIGNED - || (((uintptr_t) ((char *) ehdr + e_shoff) + || ((((uintptr_t) ehdr + e_shoff) & (__alignof__ (Elf64_Shdr) - 1)) == 0))) { if (unlikely (scncnt > 0 && e_shoff >= maxsize) || unlikely (maxsize - e_shoff < scncnt * sizeof (Elf64_Shdr))) goto free_and_out; - elf->state.elf64.shdr - = (Elf64_Shdr *) ((char *) ehdr + e_shoff); + + if (scncnt > 0) + elf->state.elf64.shdr + = (Elf64_Shdr *) ((char *) ehdr + e_shoff); for (size_t cnt = 0; cnt < scncnt; ++cnt) { -- cgit v1.2.1 From fece8e1469d22abe524f15805527ea0173e52f04 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 19 Dec 2021 20:23:30 +0100 Subject: libdwfl: Make sure that ph_buffer_size has room for at least one phdr dwfl_segment_report_module might otherwise try to handle half a phdr taking the other half from after the buffer. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d00ce702..38e2bdaa 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure + that ph_buffer_size has room for at least one phdr. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Make diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 89e05103..840d6f44 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -426,7 +426,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, buffer, otherwise it will be the size of the new buffer that could be read. */ if (ph_buffer_size != 0) - xlatefrom.d_size = ph_buffer_size; + { + phnum = ph_buffer_size / phentsize; + if (phnum == 0) + goto out; + xlatefrom.d_size = ph_buffer_size; + } xlatefrom.d_buf = ph_buffer; -- cgit v1.2.1 From bc14c148a6ad9b84bda428bd3bc75028515f0151 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 19 Dec 2021 20:53:34 +0100 Subject: libdwfl: Make sure dyn_filesz has a sane size In dwfl_segment_report_module dyn_filesz should be able to hold at least one Elf_Dyn element, and not be larger than possible. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/dwfl_segment_report_module.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 38e2bdaa..1f83576d 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-08 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure + that dyn_filesz can contain at least one Elf_Dyn and isn't larger than + possible. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 840d6f44..78c70795 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -787,6 +787,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (dyn_data_size != 0) dyn_filesz = dyn_data_size; + if ((dyn_filesz / dyn_entsize) == 0 + || dyn_filesz > (SIZE_MAX / dyn_entsize)) + goto out; void *dyns = malloc (dyn_filesz); Elf32_Dyn *d32 = dyns; Elf64_Dyn *d64 = dyns; -- cgit v1.2.1 From d844d1575522b5ad9ada0aa3c26105230a1c1884 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 19 Dec 2021 21:11:13 +0100 Subject: libdwfl: Rewrite GElf_Nhdr reading in dwfl_segment_report_module Make sure that the notes filesz is not too big. Rewrite reading of the notes to check for overflow at every step. Also limit the size of the buildid bytes. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++ libdwfl/dwfl_segment_report_module.c | 79 ++++++++++++++++++++---------------- 2 files changed, 49 insertions(+), 35 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 1f83576d..18ffc347 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-19 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Check + notes filesz. Rewrite reading of GElf_Nhdr. + 2021-12-08 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Make sure diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 78c70795..a6d6be85 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -520,6 +520,9 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, if (data_size != 0) filesz = data_size; + if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr)) + continue; + assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr)); void *notes; @@ -532,6 +535,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, { const unsigned int xencoding = ehdr.e32.e_ident[EI_DATA]; + if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr)) + continue; notes = malloc (filesz); if (unlikely (notes == NULL)) continue; /* Next header */ @@ -552,44 +557,48 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, const GElf_Nhdr *nh = notes; size_t len = 0; - size_t last_len; - while (filesz > len + sizeof (*nh)) + while (filesz - len > sizeof (*nh)) { - const void *note_name; - const void *note_desc; - last_len = len; - - len += sizeof (*nh); - note_name = notes + len; - - len += nh->n_namesz; - len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len); - note_desc = notes + len; - - if (unlikely (filesz < len + nh->n_descsz - || len <= last_len - || len + nh->n_descsz < last_len)) - break; - - if (nh->n_type == NT_GNU_BUILD_ID - && nh->n_descsz > 0 - && nh->n_namesz == sizeof "GNU" - && !memcmp (note_name, "GNU", sizeof "GNU")) - { - build_id.vaddr = (note_desc + len += sizeof (*nh); + + size_t namesz = nh->n_namesz; + namesz = align == 8 ? NOTE_ALIGN8 (namesz) : NOTE_ALIGN4 (namesz); + if (namesz > filesz - len || len + namesz < namesz) + break; + + void *note_name = notes + len; + len += namesz; + + size_t descsz = nh->n_descsz; + descsz = align == 8 ? NOTE_ALIGN8 (descsz) : NOTE_ALIGN4 (descsz); + if (descsz > filesz - len || len + descsz < descsz) + break; + + void *note_desc = notes + len; + len += descsz; + + /* We don't handle very short or really large build-ids. We need at + at least 3 and allow for up to 64 (normally ids are 20 long). */ +#define MIN_BUILD_ID_BYTES 3 +#define MAX_BUILD_ID_BYTES 64 + if (nh->n_type == NT_GNU_BUILD_ID + && nh->n_descsz >= MIN_BUILD_ID_BYTES + && nh->n_descsz <= MAX_BUILD_ID_BYTES + && nh->n_namesz == sizeof "GNU" + && !memcmp (note_name, "GNU", sizeof "GNU")) + { + build_id.vaddr = (note_desc - (const void *) notes + note_vaddr); - build_id.len = nh->n_descsz; - build_id.memory = malloc (build_id.len); - if (likely (build_id.memory != NULL)) - memcpy (build_id.memory, note_desc, build_id.len); - break; - } - - len += nh->n_descsz; - len = align == 8 ? NOTE_ALIGN8 (len) : NOTE_ALIGN4 (len); - nh = (void *) notes + len; - } + build_id.len = nh->n_descsz; + build_id.memory = malloc (build_id.len); + if (likely (build_id.memory != NULL)) + memcpy (build_id.memory, note_desc, build_id.len); + break; + } + + nh = (void *) notes + len; + } if (notes != data) free (notes); -- cgit v1.2.1 From 34ef8b44ed5998b025bd77fde4c71d7d8e585cf0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 19 Dec 2021 23:58:32 +0100 Subject: libdwfl: Handle unaligned Ehdr in dwfl_segment_report_module The xlate functions only handle correctly aligned buffers. But they do handle src == dest. So if the source buffer isn't aligned correctly just copy it first into the destination (which is already correctly aligned). Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 18ffc347..6c7e0c4a 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-19 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + buffer and set xlatefrom.d_buf to ehdr when buffer is not aligned. + 2021-12-19 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Check diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index a6d6be85..7f756392 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -367,6 +367,20 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, e_ident = ((const unsigned char *) buffer); ei_class = e_ident[EI_CLASS]; ei_data = e_ident[EI_DATA]; + /* buffer may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + size_t ehdr_align = (ei_class == ELFCLASS32 + ? __alignof__ (Elf32_Ehdr) + : __alignof__ (Elf64_Ehdr)); + if (((uintptr_t) buffer & (ehdr_align - 1)) != 0) + { + memcpy (&ehdr, buffer, + (ei_class == ELFCLASS32 + ? sizeof (Elf32_Ehdr) + : sizeof (Elf64_Ehdr))); + xlatefrom.d_buf = &ehdr; + } switch (ei_class) { case ELFCLASS32: -- cgit v1.2.1 From c1c8bbe8a04697203e18f92c09827defdcf7d204 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 20 Dec 2021 00:31:33 +0100 Subject: libdwfl: Handle unaligned Phdr in dwfl_segment_report_module The xlate functions only handle correctly aligned buffers. But they do handle src == dest. So if the source buffer isn't aligned correctly just copy it first into the destination (which is already correctly aligned). Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/dwfl_segment_report_module.c | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 6c7e0c4a..ac0fbe0f 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-19 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + ph_buffer and set xlatefrom.d_buf to phdrsp when ph_buffer is not + aligned. + 2021-12-19 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 7f756392..de190e90 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -461,6 +461,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlateto.d_buf = phdrsp; xlateto.d_size = phdrsp_bytes; + /* ph_ buffer may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + size_t phdr_align = (class32 + ? __alignof__ (Elf32_Phdr) + : __alignof__ (Elf64_Phdr)); + if (((uintptr_t) ph_buffer & (phdr_align - 1)) != 0) + { + memcpy (phdrsp, ph_buffer, phdrsp_bytes); + xlatefrom.d_buf = phdrsp; + } + /* Track the bounds of the file visible in memory. */ GElf_Off file_trimmed_end = 0; /* Proper p_vaddr + p_filesz end. */ GElf_Off file_end = 0; /* Rounded up to effective page size. */ -- cgit v1.2.1 From 8f8c78cc885d83f999f952dfaa2c2e4595b38f83 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 20 Dec 2021 01:39:21 +0100 Subject: libdwfl: Handle unaligned Nhdr in dwfl_segment_report_module The xlate functions only handle correctly aligned buffers. But they do handle src == dest. So if the source buffer isn't aligned correctly just copy it first into the destination (which is already correctly aligned). https://sourceware.org/bugzilla/show_bug.cgi?id=28715 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index ac0fbe0f..6015f6b7 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-19 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + data and set xlatefrom.d_buf to notes when data is not aligned. + 2021-12-19 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index de190e90..72c85070 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -573,6 +573,18 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlatefrom.d_size = filesz; xlateto.d_buf = notes; xlateto.d_size = filesz; + + /* data may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ + if ((uintptr_t) data != (align == 8 + ? NOTE_ALIGN8 ((uintptr_t) data) + : NOTE_ALIGN4 ((uintptr_t) data))) + { + memcpy (notes, data, filesz); + xlatefrom.d_buf = notes; + } + if (elf32_xlatetom (&xlateto, &xlatefrom, xencoding) == NULL) { free (notes); -- cgit v1.2.1 From 4fdd85881c8acd06db737c45ea6aabc60aef3d4d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 21 Dec 2021 00:55:27 +0100 Subject: libdwfl: Always clean up build_id.memory There was a small memory leak if an error was detected in some places in dwfl_segment_report_module after the build_id.memory was alredy allocated. Fix this by moving initialization of struct elf_build_id early and always free the memory, if not NULL, at exit. https://sourceware.org/bugzilla/show_bug.cgi?id=28685 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 ++++++ libdwfl/dwfl_segment_report_module.c | 26 ++++++++++++-------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 6015f6b7..abd5c34a 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,9 @@ +2021-12-20 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Move + and initialize struct elf_build_id build_id early. Only free memory + early when no longer needed. Free memory if not NULL at out. + 2021-12-19 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 72c85070..5bef249e 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -1,5 +1,6 @@ /* Sniff out modules from ELF headers visible in memory segments. Copyright (C) 2008-2012, 2014, 2015, 2018 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -332,6 +333,12 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, here so we can always safely free it. */ void *phdrsp = NULL; + /* Collect the build ID bits here. */ + struct elf_build_id build_id; + build_id.memory = NULL; + build_id.len = 0; + build_id.vaddr = 0; + if (! (*memory_callback) (dwfl, ndx, &buffer, &buffer_available, start, sizeof (Elf64_Ehdr), memory_callback_arg) || memcmp (buffer, ELFMAG, SELFMAG) != 0) @@ -492,12 +499,6 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, GElf_Addr dyn_vaddr = 0; GElf_Xword dyn_filesz = 0; - /* Collect the build ID bits here. */ - struct elf_build_id build_id; - build_id.memory = NULL; - build_id.len = 0; - build_id.vaddr =0; - Elf32_Phdr *p32 = phdrsp; Elf64_Phdr *p64 = phdrsp; if ((ei_class == ELFCLASS32 @@ -701,10 +702,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* We must have seen the segment covering offset 0, or else the ELF header we read at START was not produced by these program headers. */ if (unlikely (!found_bias)) - { - free (build_id.memory); - goto out; - } + goto out; /* Now we know enough to report a module for sure: its bounds. */ module_start += bias; @@ -772,10 +770,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } } if (skip_this_module) - { - free (build_id.memory); - goto out; - } + goto out; } const char *file_note_name = handle_file_note (module_start, module_end, @@ -940,6 +935,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, /* At this point we do not need BUILD_ID or NAME any more. They have been copied. */ free (build_id.memory); + build_id.memory = NULL; finish_portion (&read_state, &soname, &soname_size); if (unlikely (mod == NULL)) @@ -1042,6 +1038,8 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, } out: + if (build_id.memory != NULL) + free (build_id.memory); free (phdrsp); if (buffer != NULL) (*memory_callback) (dwfl, -1, &buffer, &buffer_available, 0, 0, -- cgit v1.2.1 From 1cf73965853037301a6099dea5368a1303cde2ba Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 23 Dec 2021 23:16:25 +0100 Subject: libdwfl: Make sure dwfl_elf_phdr_memory_callback returns at least minread The callers of dwfl_elf_phdr_memory_callback assume at least minread bytes are read and available. Make sure to check start is smaller than elf->maximum_size before reading more. Return false if end - start is smaller than minread. Found by afl-fuzz. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/core-file.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index abd5c34a..49a35e41 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-23 Mark Wielaard + + * core-file.c (dwfl_elf_phdr_memory_callback): Check start < + elf->maximum_size and end - start < minread. + 2021-12-20 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Move diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index b04d1d18..cefc3db0 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -1,5 +1,6 @@ /* Core file handling. Copyright (C) 2008-2010, 2013, 2015 Red Hat, Inc. + Copyright (C) 2021 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -320,7 +321,7 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx, (void) more (*buffer_available); /* If it's already on hand anyway, use as much as there is. */ - if (elf->map_address != NULL) + if (elf->map_address != NULL && start < elf->maximum_size) (void) more (elf->maximum_size - start); /* Make sure we don't look past the end of the actual file, @@ -332,6 +333,9 @@ dwfl_elf_phdr_memory_callback (Dwfl *dwfl, int ndx, if (unlikely (start >= end)) return false; + if (end - start < minread) + return false; + if (elf->map_address != NULL) { void *contents = elf->map_address + elf->start_offset + start; -- cgit v1.2.1 From 5b490793e2ab651df6bbf87f3a06e2552f48be81 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 24 Dec 2021 01:44:57 +0100 Subject: libdwfl: Call xlatetom on aligned buffers in dwfl_link_map_report Make sure that when calling xlatetom for Phdrs and Dyns in dwfl_link_map_report the input buffer is correctly aligned by calling memcpy and setting in.d_buf to out.d_buf. https://sourceware.org/bugzilla/show_bug.cgi?id=28720 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/link_map.c | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 49a35e41..73d8613c 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-23 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Call memcpy and set in.d_buf to + out.d_buf before calling xlatetom for unaligned buffers. + 2021-12-23 Mark Wielaard * core-file.c (dwfl_elf_phdr_memory_callback): Check start < diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index c4f79f11..f57c5585 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -922,11 +922,20 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, return false; } } + bool is32 = (elfclass == ELFCLASS32); + size_t phdr_align = (is32 + ? __alignof__ (Elf32_Phdr) + : __alignof__ (Elf64_Phdr)); + if (!in_from_exec + && ((uintptr_t) in.d_buf & (phdr_align - 1)) != 0) + { + memcpy (out.d_buf, in.d_buf, in.d_size); + in.d_buf = out.d_buf; + } if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) { - bool is32 = (elfclass == ELFCLASS32); for (size_t i = 0; i < phnum; ++i) { GElf_Word type = (is32 @@ -1044,6 +1053,14 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, }; if (in.d_size > out.d_size) in.d_size = out.d_size; + size_t dyn_align = (elfclass == ELFCLASS32 + ? __alignof__ (Elf32_Dyn) + : __alignof__ (Elf64_Dyn)); + if (((uintptr_t) in.d_buf & (dyn_align - 1)) != 0) + { + memcpy (out.d_buf, in.d_buf, in.d_size); + in.d_buf = out.d_buf; + } if (likely ((elfclass == ELFCLASS32 ? elf32_xlatetom : elf64_xlatetom) (&out, &in, elfdata) != NULL)) -- cgit v1.2.1 From 9f70a762ab88ceebb8a48a7c9c3ce39ff7f205af Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 24 Dec 2021 02:01:32 +0100 Subject: libdwfl: Calculate addr to read by hand in link_map.c read_addrs. The gcc undefined sanitizer doesn't like the trick we use to calculate the (possibly) unaligned addresses to read. So calculate them by hand as unsigned char pointers. https://sourceware.org/bugzilla/show_bug.cgi?id=28720 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 4 ++++ libdwfl/link_map.c | 11 +++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 73d8613c..149383ad 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2021-12-23 Mark Wielaard + + * link_map.c (read_addrs): Calculate addr to read by hand. + 2021-12-23 Mark Wielaard * link_map.c (dwfl_link_map_report): Call memcpy and set in.d_buf to diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index f57c5585..cd9c5042 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -270,26 +270,25 @@ read_addrs (struct memory_closure *closure, return true; } - Elf32_Addr (*a32)[n] = vaddr - (*read_vaddr) + (*buffer); - Elf64_Addr (*a64)[n] = (void *) a32; + unsigned char *addr = vaddr - (*read_vaddr) + (*buffer); if (elfclass == ELFCLASS32) { if (elfdata == ELFDATA2MSB) for (size_t i = 0; i < n; ++i) - addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i])); + addrs[i] = BE32 (read_4ubyte_unaligned_noncvt (addr + i * 4)); else for (size_t i = 0; i < n; ++i) - addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (&(*a32)[i])); + addrs[i] = LE32 (read_4ubyte_unaligned_noncvt (addr + i * 4)); } else { if (elfdata == ELFDATA2MSB) for (size_t i = 0; i < n; ++i) - addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i])); + addrs[i] = BE64 (read_8ubyte_unaligned_noncvt (addr + i * 8)); else for (size_t i = 0; i < n; ++i) - addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (&(*a64)[i])); + addrs[i] = LE64 (read_8ubyte_unaligned_noncvt (addr + i * 8)); } return false; -- cgit v1.2.1 From 8b9d809568c37c4a6b9225f3c44cadabeb5fa1b0 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 6 Jan 2022 16:44:56 +0100 Subject: libdwfl: Fix overflow check in link_map.c read_addrs The buffer_available overflow check wasn't complete. Also check nb isn't too big. https://sourceware.org/bugzilla/show_bug.cgi?id=28720 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 4 ++++ libdwfl/link_map.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 149383ad..f8319f44 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,7 @@ +2022-01-03 Mark Wielaard + + * link_map.c (read_addrs): Fix buffer_available nb overflow. + 2021-12-23 Mark Wielaard * link_map.c (read_addrs): Calculate addr to read by hand. diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index cd9c5042..99222bb9 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -257,7 +257,8 @@ read_addrs (struct memory_closure *closure, /* Read a new buffer if the old one doesn't cover these words. */ if (*buffer == NULL || vaddr < *read_vaddr - || vaddr - (*read_vaddr) + nb > *buffer_available) + || nb > *buffer_available + || vaddr - (*read_vaddr) > *buffer_available - nb) { release_buffer (closure, buffer, buffer_available, 0); -- cgit v1.2.1 From 90b1b14a9a7e659cf5665855ae07da424e5cbd96 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 6 Jan 2022 17:35:13 +0100 Subject: libdwfl: Handle unaligned Dyns in dwfl_segment_report_module The xlate functions only handle correctly aligned buffers. But they do handle src == dest. So if the source buffer isn't aligned correctly just copy it first into the destination (which is already correctly aligned). https://sourceware.org/bugzilla/show_bug.cgi?id=28720 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/dwfl_segment_report_module.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index f8319f44..aace969f 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2022-01-03 Mark Wielaard + + * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy + dyn_data and set xlatefrom.d_buf to dyns when dyns is not aligned. + 2022-01-03 Mark Wielaard * link_map.c (read_addrs): Fix buffer_available nb overflow. diff --git a/libdwfl/dwfl_segment_report_module.c b/libdwfl/dwfl_segment_report_module.c index 5bef249e..1461ae26 100644 --- a/libdwfl/dwfl_segment_report_module.c +++ b/libdwfl/dwfl_segment_report_module.c @@ -844,7 +844,19 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name, xlateto.d_buf = dyns; xlateto.d_size = dyn_filesz; + /* dyn_data may be unaligned, in which case xlatetom would not work. + xlatetom does work when the in and out d_buf are equal (but not + for any other overlap). */ bool is32 = (ei_class == ELFCLASS32); + size_t dyn_align = (is32 + ? __alignof__ (Elf32_Dyn) + : __alignof__ (Elf64_Dyn)); + if (((uintptr_t) dyn_data & (dyn_align - 1)) != 0) + { + memcpy (dyns, dyn_data, dyn_filesz); + xlatefrom.d_buf = dyns; + } + if ((is32 && elf32_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL) || (!is32 && elf64_xlatetom (&xlateto, &xlatefrom, ei_data) != NULL)) { -- cgit v1.2.1 From 04a5fd7400429398e096ccd1b32f71a1f1c8db76 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 6 Jan 2022 17:58:59 +0100 Subject: libdwfl: Declare possible zero sized arrays only when non-zero The gcc undefined sanitizer complains when seeing a zero sized array declaration. Move the declaration to the point in the code where we know they aren't zero sized. https://sourceware.org/bugzilla/show_bug.cgi?id=28720 Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/link_map.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index aace969f..b2588b12 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2022-01-03 Mark Wielaard + + * link_map.c (dwfl_link_map_report): Only declare d32 and d64 before + actual use. + 2022-01-03 Mark Wielaard * dwfl_segment_report_module.c (dwfl_segment_report_module): Copy diff --git a/libdwfl/link_map.c b/libdwfl/link_map.c index 99222bb9..c0207cd3 100644 --- a/libdwfl/link_map.c +++ b/libdwfl/link_map.c @@ -1037,8 +1037,6 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, return false; } void *buf = malloc (dyn_filesz); - Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; - Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; if (unlikely (buf == NULL)) { __libdwfl_seterrno (DWFL_E_NOMEM); @@ -1068,6 +1066,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, /* We are looking for DT_DEBUG. */ if (elfclass == ELFCLASS32) { + Elf32_Dyn (*d32)[dyn_filesz / sizeof (Elf32_Dyn)] = buf; size_t n = dyn_filesz / sizeof (Elf32_Dyn); for (size_t i = 0; i < n; ++i) if ((*d32)[i].d_tag == DT_DEBUG) @@ -1078,6 +1077,7 @@ dwfl_link_map_report (Dwfl *dwfl, const void *auxv, size_t auxv_size, } else { + Elf64_Dyn (*d64)[dyn_filesz / sizeof (Elf64_Dyn)] = buf; size_t n = dyn_filesz / sizeof (Elf64_Dyn); for (size_t i = 0; i < n; ++i) if ((*d64)[i].d_tag == DT_DEBUG) -- cgit v1.2.1 From c4726913b7766634cc5d8a97624e1b4708452d73 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Mon, 31 Jan 2022 18:13:40 -0500 Subject: man debuginfod-client-config.7: Elaborate $DEBUGINFOD_URLS Add reference to /etc/profile.d and /etc/debuginfod/*.urls as possible source of default. (No need to autoconf @prefix@ it, these paths are customarily distro standard rather than elfutils configurables.) Drop warning about federation loops, due to protection via PR27917 (0.186). Signed-off-by: Frank Ch. Eigler --- doc/ChangeLog | 4 ++++ doc/debuginfod-client-config.7 | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/ChangeLog b/doc/ChangeLog index f25bcd2e..303e3dc0 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,7 @@ +2022-01-31 Frank Ch. Eigler + + * debuginfod-client-config.7: Elaborate DEBUGINFOD_URLS. + 2021-12-08 Frank Ch. Eigler PR28661 diff --git a/doc/debuginfod-client-config.7 b/doc/debuginfod-client-config.7 index 1cc19215..fecc6038 100644 --- a/doc/debuginfod-client-config.7 +++ b/doc/debuginfod-client-config.7 @@ -24,8 +24,8 @@ temporary files. The default is /tmp. .B $DEBUGINFOD_URLS This environment variable contains a list of URL prefixes for trusted debuginfod instances. Alternate URL prefixes are separated by space. -Avoid referential loops that cause a server to contact itself, directly -or indirectly - the results would be hilarious. +This environment variable may be set by /etc/profile.d scripts +reading /etc/debuginfod/*.urls files. .TP .B $DEBUGINFOD_CACHE_PATH -- cgit v1.2.1 From 52d72316e0d0274b2d717142601c0fff3a77f0ba Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 16 Feb 2022 14:47:46 +0100 Subject: backends: Use PTRACE_GETREGSET for ppc_set_initial_registers_tid The code in ppc_initreg.c used PTRACE_PEEKUSER to fetch all registers one by one. Which is slightly inefficient. It did this because it wanted things to work on linux 2.6.18 which didn't support PTRACE_GETREGSET. PTRACE_GETREGSET was only officially since 2.6.34 (but backported to some earlier versions). It seems ok to require a linux kernel that supports PTRACE_GETREGSET now. This is much more efficient since it takes just one ptrace call instead of 44 calls to fetch each register individually. For some really old versions we need to include to get PTRACE_GETREGSET defined. And on ppc64 there is no 32bit version of struct pt_regs available, so we define that ourselves and check how much data is returned to know whether this is a full pt_regs or one for a 32bit process. An alternative would be to use the raw iov_base bytes with 64bit or 32bit offset constants to get at the registers instead of using a struct with names. The code works for inspecting a 32bit process from a 64bit build, but not the other way around (the previous code also didn't). This could work if we also defined and used a 64bit pt_regs struct on ppc32. But it seems a use case that is not really used (it was hard enough finding ppc32 setups to test this on). Tested against ppc and ppc64 on linux 2.6.32 and glibc 2.12 and ppc and ppc64 on linux 3.10.0 with glibc 2.17. Signed-off-by: Mark Wielaard --- backends/ChangeLog | 5 ++++ backends/ppc_initreg.c | 66 +++++++++++++++++++++++++++++++------------------- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/backends/ChangeLog b/backends/ChangeLog index b48af4e1..51959259 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,8 @@ +2022-02-16 Mark Wielaard + + * ppc_initreg.c (ppc_set_initial_registers_tid): Define struct + pt_regs32. Use PTRACE_GETREGSET. + 2021-09-29 William Cohen * riscv_init.c (riscv_return_value_location_lp64f): New function diff --git a/backends/ppc_initreg.c b/backends/ppc_initreg.c index e5cca7e1..8ed72fb4 100644 --- a/backends/ppc_initreg.c +++ b/backends/ppc_initreg.c @@ -1,5 +1,6 @@ /* Fetch live process registers from TID. Copyright (C) 2013 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -34,7 +35,11 @@ #if defined(__powerpc__) && defined(__linux__) # include # include +# ifndef PTRACE_GETREGSET +# include +# endif # include +# include #endif #include "system.h" @@ -75,39 +80,50 @@ ppc_set_initial_registers_tid (pid_t tid __attribute__ ((unused)), #if !defined(__powerpc__) || !defined(__linux__) return false; #else /* __powerpc__ */ - union - { - struct pt_regs r; - long l[sizeof (struct pt_regs) / sizeof (long)]; - } - user_regs; - eu_static_assert (sizeof (struct pt_regs) % sizeof (long) == 0); - /* PTRACE_GETREGS is EIO on kernel-2.6.18-308.el5.ppc64. */ - errno = 0; - for (unsigned regno = 0; regno < sizeof (user_regs) / sizeof (long); - regno++) - { - user_regs.l[regno] = ptrace (PTRACE_PEEKUSER, tid, - (void *) (uintptr_t) (regno - * sizeof (long)), - NULL); - if (errno != 0) - return false; - } -#define GPRS (sizeof (user_regs.r.gpr) / sizeof (*user_regs.r.gpr)) + +/* pt_regs for 32bit processes. Same as 64bit pt_regs but all registers + are 32bit instead of 64bit long. */ +#define GPRS 32 + struct pt_regs32 + { + uint32_t gpr[GPRS]; + uint32_t nip; + uint32_t msr; + uint32_t orig_gpr3; + uint32_t ctr; + uint32_t link; + uint32_t xer; + uint32_t ccr; + uint32_t mq; + uint32_t trap; + uint32_t dar; + uint32_t dsisr; + uint32_t result; + }; + + struct pt_regs regs; + struct pt_regs32 *regs32 = (struct pt_regs32 *) ®s; + struct iovec iovec; + iovec.iov_base = ®s; + iovec.iov_len = sizeof (regs); + if (ptrace (PTRACE_GETREGSET, tid, NT_PRSTATUS, &iovec) != 0) + return false; + + /* Did we get the full pt_regs or less (the 32bit pt_regs)? */ + bool get32 = iovec.iov_len < sizeof (struct pt_regs); Dwarf_Word dwarf_regs[GPRS]; for (unsigned gpr = 0; gpr < GPRS; gpr++) - dwarf_regs[gpr] = user_regs.r.gpr[gpr]; + dwarf_regs[gpr] = get32 ? regs32->gpr[gpr] : regs.gpr[gpr]; if (! setfunc (0, GPRS, dwarf_regs, arg)) return false; - dwarf_regs[0] = user_regs.r.link; // LR uses both 65 and 108 numbers, there is no consistency for it. - if (! setfunc (65, 1, dwarf_regs, arg)) + Dwarf_Word link = get32 ? regs32->link : regs.link; + if (! setfunc (65, 1, &link, arg)) return false; /* Registers like msr, ctr, xer, dar, dsisr etc. are probably irrelevant for CFI. */ - dwarf_regs[0] = user_regs.r.nip; - return setfunc (-1, 1, dwarf_regs, arg); + Dwarf_Word pc = get32 ? (Dwarf_Word) regs32->nip : regs.nip; + return setfunc (-1, 1, &pc, arg); #endif /* __powerpc__ */ } -- cgit v1.2.1 From 29859f2e79ef3c650ee9712cae990c6a7f787a7d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 10 Mar 2022 17:03:36 +0100 Subject: configure: Test for _FORTIFY_SOURCE=3 support. _FORTIFY_SOURCE=3 adds extra glibc (dynamic) fortification checks when using GCC 12. This adds a configure check to see if -D_FORTIFY_SOURCE=3 can be used. If not, configure will fall back to -D_FORTIFY_SOURCE=2. On some older glibc versions (glibc 2.17) using -D_FORTIFY_SOURCE=3 provides the same fortification as _FORTIFY_SOURCE=2. On some newer glibc versions and older GCC (glibc 2.34 amd gcc 11) using -D_FORTIFY_SOURCE=3 produces a not supported warning (and we fall back to -D_FORTIFY_SOURCE=2). With newer glibc and newer GCC versions (glibc 2.35 and gcc 12) -D_FORTIFY_SOURCE=3 will use the newer dynamic fortification checks. This patch also makes sure that AC_PROG_CXX is used earlier so that CXXFLAGS is always setup correctly (even if we then don't use it). And it outputs both the CFLAGS and CXXFLAGS as used at the end. Signed-off-by: Mark Wielaard --- ChangeLog | 6 ++++++ configure.ac | 37 +++++++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index f00db17b..bfa666c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-03-10 Mark Wielaard + + * configure.ac: Move AC_PROG_CXX earlier. Check for both + -D_FORTIFY_SOURCE=3 and -D_FORTIFY_SOURCE=2 support. Also + set CXXFLAGS. Output final CFLAGS and CXXFLAGS setting. + 2021-12-04 Mark Wielaard * configure.ac: Add --enable-sanitize-address. diff --git a/configure.ac b/configure.ac index 48071165..52882fa9 100644 --- a/configure.ac +++ b/configure.ac @@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl Configure input file for elfutils. -*-autoconf-*- dnl dnl Copyright (C) 1996-2019 Red Hat, Inc. +dnl Copyright (C) 2022 Mark J. Wielaard dnl dnl This file is part of elfutils. dnl @@ -88,6 +89,7 @@ AS_IF([test "$use_locks" = yes], AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.]) AC_PROG_CC_C99 +AC_PROG_CXX AC_PROG_RANLIB AC_PROG_YACC AM_PROG_LEX @@ -231,25 +233,38 @@ AC_CACHE_CHECK([whether fts.h is bad when included (with LFS)], ac_cv_bad_fts, AS_IF([test "x$ac_cv_bad_fts" = "xyes"], [CFLAGS="$CFLAGS -DBAD_FTS=1" CXXFLAGS="$CXXFLAGS -DBAD_FTS=1"]) -# See if we can add -D_FORTIFY_SOURCE=2. Don't do it if it is already +# See if we can add -D_FORTIFY_SOURCE=2 or =3. Don't do it if it is already # (differently) defined or if it generates warnings/errors because we # don't use the right optimisation level (string.h will warn about that). -AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 to CFLAGS]) +AC_MSG_CHECKING([whether to add -D_FORTIFY_SOURCE=2 or =3 to CFLAGS]) case "$CFLAGS" in - *-D_FORTIFY_SOURCE=2*) + *-D_FORTIFY_SOURCE=*) AC_MSG_RESULT([no, already there]) ;; *) save_CFLAGS="$CFLAGS" - CFLAGS="-D_FORTIFY_SOURCE=2 $CFLAGS -Werror" + # Try 3 first. + CFLAGS="-D_FORTIFY_SOURCE=3 $save_CFLAGS -Werror" + fortified_cflags="" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include int main() { return 0; } - ]])], [ AC_MSG_RESULT([yes]) - CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS" ], - [ AC_MSG_RESULT([no]) - CFLAGS="$save_CFLAGS"]) - ;; + ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=3]) + fortified_cflags="-D_FORTIFY_SOURCE=3" ], []) + + # If that didn't work, try 2. + if test -z "$fortified_cflags"; then + CFLAGS="-D_FORTIFY_SOURCE=2 $save_CFLAGS -Werror" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + #include + int main() { return 0; } + ]])], [ AC_MSG_RESULT([yes -D_FORTIFY_SOURCE=2]) + fortified_cflags="-D_FORTIFY_SOURCE=2" ], + [ AC_MSG_RESULT([no, cannot be used])]) + fi + CFLAGS="$fortified_cflags $save_CFLAGS" + CXXFLAGS="$fortified_cflags $CXXFLAGS" + ;; esac dnl enable debugging of branch prediction. @@ -757,7 +772,6 @@ AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"]) # Look for libmicrohttpd, libarchive, sqlite for debuginfo server # minimum versions as per rhel7. AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server])) -AC_PROG_CXX AS_IF([test "x$enable_debuginfod" != "xno"], [ AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip]) AX_CXX_COMPILE_STDCXX(11, noext, mandatory) @@ -804,6 +818,9 @@ AC_MSG_NOTICE([ Maintainer mode : ${enable_maintainer_mode} build arch : ${ac_cv_build} + CFLAGS=${CFLAGS} + CXXFLAGS=${CXXFLAGS} + RECOMMENDED FEATURES (should all be yes) gzip support : ${with_zlib} bzip2 support : ${with_bzlib} -- cgit v1.2.1 From 9e39d31c4ec1c8f7eb16886f8b7fd04c0a4f2462 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 11 Mar 2022 15:44:21 +0100 Subject: addr2line: Make --absolute the default, add --relative option. Make --absolute (including the compilation directory in file names) the default and add a new option --relative to get the previous default behavior. https://www.sourceware.org/bugzilla/show_bug.cgi?id=28951 Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ NEWS | 3 +++ src/ChangeLog | 7 +++++++ src/addr2line.c | 14 +++++++++++--- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index bfa666c0..f0ea04be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-03-11 Mark Wielaard + + * NEWS: Document new --relative option for addr2line. + 2022-03-10 Mark Wielaard * configure.ac: Move AC_PROG_CXX earlier. Check for both diff --git a/NEWS b/NEWS index 6be58866..ea74c019 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ Version 0.187 after 0.186 debuginfod: Support -C option for connection thread pooling. +addr2line: The -A, --absolute option, which shows file names including + the full compilation directory is now the default. To get the + old behavior use the new option --relative. Version 0.186 diff --git a/src/ChangeLog b/src/ChangeLog index 263e9faa..0e705b7d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2022-03-11 Mark Wielaard + + * addr2line.c (OPT_RELATIVE): New constant. + (options): Add --relative. + (use_comp_dir): Initialize to true. + (parse_opt): Handle OPT_RELATIVE. + 2021-12-04 Mark Wielaard * readelf.c (print_ehdr): Pass sizeof (buf) - 1 to strncpy. diff --git a/src/addr2line.c b/src/addr2line.c index 34945046..7c8d3a72 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -1,5 +1,6 @@ /* Locate source files and line information for given addresses Copyright (C) 2005-2010, 2012, 2013, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 2005. @@ -49,7 +50,8 @@ ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT; /* Values for the parameters which have no short form. */ #define OPT_DEMANGLER 0x100 -#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */ +#define OPT_PRETTY 0x101 /* 'p' is already used to select the process. */ +#define OPT_RELATIVE 0x102 /* 'r' is something else in binutils addr2line. */ /* Definitions of arguments for argp functions. */ static const struct argp_option options[] = @@ -62,7 +64,7 @@ static const struct argp_option options[] = { "addresses", 'a', NULL, 0, N_("Print address before each entry"), 0 }, { "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 }, { "absolute", 'A', NULL, 0, - N_("Show absolute file names using compilation directory"), 0 }, + N_("Show absolute file names using compilation directory (default)"), 0 }, { "functions", 'f', NULL, 0, N_("Also show function names"), 0 }, { "symbols", 'S', NULL, 0, N_("Also show symbol or section names"), 0 }, { "symbols-sections", 'x', NULL, 0, N_("Also show symbol and the section names"), 0 }, @@ -74,6 +76,8 @@ static const struct argp_option options[] = N_("Show demangled symbols (ARG is always ignored)"), 0 }, { "pretty-print", OPT_PRETTY, NULL, 0, N_("Print all information on one line, and indent inlines"), 0 }, + { "relative", OPT_RELATIVE, NULL, 0, + N_("Show relative file names without compilation directory"), 0 }, { NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 }, /* Unsupported options. */ @@ -111,7 +115,7 @@ static bool print_addresses; static bool only_basenames; /* True if absolute file names based on DW_AT_comp_dir should be shown. */ -static bool use_comp_dir; +static bool use_comp_dir = true; /* True if line flags should be shown. */ static bool show_flags; @@ -236,6 +240,10 @@ parse_opt (int key, char *arg, struct argp_state *state) use_comp_dir = true; break; + case OPT_RELATIVE: + use_comp_dir = false; + break; + case 'f': show_functions = true; break; -- cgit v1.2.1 From 9a36370010df049b1d301a5531246ec7a693b95b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 14 Mar 2022 13:13:34 +0100 Subject: configure: Use AS_HELP_STRING instead of AC_HELP_STRING. In most places we already used AS_HELP_STRING. A few places used AC_HELP_STRING. Which has been deprecated for a long time. Use AS_HELP_STRING instead of AC_HELP_STRING everywhere. Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ configure.ac | 4 ++-- m4/ChangeLog | 5 +++++ m4/biarch.m4 | 2 +- m4/zip.m4 | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f0ea04be..2f46f903 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2021-03-14 Mark Wielaard + + * configure.ac: Use AS_HELP_STRING instead of AC_HELP_STRING. + 2021-03-11 Mark Wielaard * NEWS: Document new --relative option for addr2line. diff --git a/configure.ac b/configure.ac index 52882fa9..1aff9f30 100644 --- a/configure.ac +++ b/configure.ac @@ -744,7 +744,7 @@ AC_CHECK_PROG(HAVE_ZSTD, zstd, yes, no) AM_CONDITIONAL([HAVE_ZSTD],[test "x$HAVE_ZSTD" = "xyes"]) # Look for libcurl for libdebuginfod minimum version as per rhel7. -AC_ARG_ENABLE([libdebuginfod],AC_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)])) +AC_ARG_ENABLE([libdebuginfod],AS_HELP_STRING([--enable-libdebuginfod], [Build debuginfod client library (can be =dummy)])) AS_IF([test "x$enable_libdebuginfod" != "xno"], [ if test "x$enable_libdebuginfod" != "xdummy"; then AC_MSG_NOTICE([checking libdebuginfod dependencies, --disable-libdebuginfod or --enable-libdebuginfo=dummy to skip]) @@ -771,7 +771,7 @@ AM_CONDITIONAL([DUMMY_LIBDEBUGINFOD],[test "x$enable_libdebuginfod" = "xdummy"]) # Look for libmicrohttpd, libarchive, sqlite for debuginfo server # minimum versions as per rhel7. -AC_ARG_ENABLE([debuginfod],AC_HELP_STRING([--enable-debuginfod], [Build debuginfod server])) +AC_ARG_ENABLE([debuginfod],AS_HELP_STRING([--enable-debuginfod], [Build debuginfod server])) AS_IF([test "x$enable_debuginfod" != "xno"], [ AC_MSG_NOTICE([checking debuginfod C++11 support, --disable-debuginfod to skip]) AX_CXX_COMPILE_STDCXX(11, noext, mandatory) diff --git a/m4/ChangeLog b/m4/ChangeLog index 32832693..d4c3c28c 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,8 @@ +2022-03-14 Mark Wielaard + + * biarch.m4: Use AS_HELP_STRING instead of AC_HELP_STRING. + * zip.m4: Likewise. + 2020-12-15 Dmitry V. Levin * .gitignore: New file. diff --git a/m4/biarch.m4 b/m4/biarch.m4 index c238d8d1..68618473 100644 --- a/m4/biarch.m4 +++ b/m4/biarch.m4 @@ -28,7 +28,7 @@ biarch_CC="$biarch_CC $utrace_biarch"])]) AC_DEFUN([utrace_BIARCH], [AC_REQUIRE([utrace_HOST64]) utrace_biarch_forced=no AC_ARG_WITH([biarch], - AC_HELP_STRING([--with-biarch], + AS_HELP_STRING([--with-biarch], [enable biarch tests despite build problems]), [AS_IF([test "x$with_biarch" != xno], [utrace_biarch_forced=yes])]) AS_IF([test $utrace_biarch_forced = yes], [dnl diff --git a/m4/zip.m4 b/m4/zip.m4 index ab6fd57e..8affa3fa 100644 --- a/m4/zip.m4 +++ b/m4/zip.m4 @@ -4,7 +4,7 @@ dnl and sets AC_DEFINE(USE_$2) and LIBS. AC_DEFUN([eu_ZIPLIB], [dnl AC_ARG_WITH([[$1]], -AC_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),, +AS_HELP_STRING([--with-[$1]], [support [$1] compression in libdwfl]),, [with_[$1]=default]) if test $with_[$1] != no; then AC_SEARCH_LIBS([$4], [$3], [with_[$1]=yes], -- cgit v1.2.1 From 1b09e67353f46f2ff9039da78a37d7717155df08 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 17 Mar 2022 13:58:56 +0100 Subject: libelf: Take map offset into account for Shdr alignment check in elf_begin The sh_num function tries to get at the zero section Shdr directly. When the file is mmapped it has to make sure the offset into the file to the start of the Elf structure is taken into account when trying to cast the address to make sure the alignment is correct. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/elf_begin.c | 8 +++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 29a8aae1..1883af07 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2022-03-17 Mark Wielaard + + * elf_begin.c (get_shnum): Take offset into account for Shdr + alignment check. + 2021-12-19 Mark Wielaard * elf_begin.c (file_read_elf): Cast ehdr to uintptr_t before e_shoff diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 0c9a988d..53bbff40 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -1,6 +1,6 @@ /* Create descriptor for processing file. Copyright (C) 1998-2010, 2012, 2014, 2015, 2016 Red Hat, Inc. - Copyright (C) 2021 Mark J. Wielaard + Copyright (C) 2021, 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -158,7 +158,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) map_address + ehdr.e32->e_shoff)) + || (((size_t) ((char *) (map_address + ehdr.e32->e_shoff + + offset))) & (__alignof__ (Elf32_Shdr) - 1)) == 0)) /* We can directly access the memory. */ result = ((Elf32_Shdr *) ((char *) map_address + ehdr.e32->e_shoff @@ -218,7 +219,8 @@ get_shnum (void *map_address, unsigned char *e_ident, int fildes, Elf64_Xword size; if (likely (map_address != NULL) && e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((size_t) ((char *) map_address + ehdr.e64->e_shoff)) + || (((size_t) ((char *) (map_address + ehdr.e64->e_shoff + + offset))) & (__alignof__ (Elf64_Shdr) - 1)) == 0)) /* We can directly access the memory. */ size = ((Elf64_Shdr *) ((char *) map_address + ehdr.e64->e_shoff -- cgit v1.2.1 From ed42e7cf11ddb11ffcce9e17276476e0c3d14c71 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 17 Mar 2022 14:03:06 +0100 Subject: libelf: Make sure ar_size starts with a digit before calling atol. The ar_size field is a 10 character string, not zero terminated, of decimal digits right padded with spaces. Make sure it actually starts with a digit before calling atol on it. We already make sure it is zero terminated. Otherwise atol might produce unexpected results. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 4 ++++ libelf/elf_begin.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 1883af07..07dd905f 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2022-03-17 Mark Wielaard + + * elf_begin.c (read_long_names): Check ar_size starts with a digit. + 2022-03-17 Mark Wielaard * elf_begin.c (get_shnum): Take offset into account for Shdr diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index 53bbff40..17d9b1f3 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -765,6 +765,11 @@ read_long_names (Elf *elf) *((char *) mempcpy (buf, hdr->ar_size, sizeof (hdr->ar_size))) = '\0'; string = buf; } + + /* atol expects to see at least one digit. + It also cannot be negative (-). */ + if (!isdigit(string[0])) + return NULL; len = atol (string); if (memcmp (hdr->ar_name, "// ", 16) == 0) -- cgit v1.2.1 From 0346d5fd96f64c1c23ab738eec54dfbb8c112dc3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Mar 2022 00:59:38 +0100 Subject: libelf: Check alignment of Verdef, Verdaux, Verneed and Vernaux offsets The Verdef, Verdaux, Verneed and Vernaux structures contain fields which point to the next structures. Make sure these offsets are correctly aligned for the structures they point to. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 6 ++++++ libelf/version_xlate.h | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 07dd905f..f6b47c68 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,9 @@ +2022-03-18 Mark Wielaard + + * version_xlate.h (elf_cvt_Verdef): Check alignment of def_offset + and aux_offset. + (elf_cvt_Verneed): Check alignment of need_offset and aux_offset. + 2022-03-17 Mark Wielaard * elf_begin.c (read_long_names): Check ar_size starts with a digit. diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h index 9fe01c64..b7bd301d 100644 --- a/libelf/version_xlate.h +++ b/libelf/version_xlate.h @@ -1,5 +1,6 @@ /* Conversion functions for versioning information. Copyright (C) 1998, 1999, 2000, 2002, 2003, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -66,7 +67,9 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *asrc; /* Test for correct offset. */ - if (def_offset > len || len - def_offset < sizeof (GElf_Verdef)) + if (def_offset > len + || len - def_offset < sizeof (GElf_Verdef) + || (def_offset & (__alignof__ (GElf_Verdef) - 1)) != 0) return; /* Work the tree from the first record. */ @@ -95,7 +98,9 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) GElf_Verdaux *adest; /* Test for correct offset. */ - if (aux_offset > len || len - aux_offset < sizeof (GElf_Verdaux)) + if (aux_offset > len + || len - aux_offset < sizeof (GElf_Verdaux) + || (aux_offset & (__alignof__ (GElf_Verdaux) - 1)) != 0) return; adest = (GElf_Verdaux *) ((char *) dest + aux_offset); @@ -165,7 +170,9 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *asrc; /* Test for correct offset. */ - if (need_offset > len || len - need_offset < sizeof (GElf_Verneed)) + if (need_offset > len + || len - need_offset < sizeof (GElf_Verneed) + || (need_offset & (__alignof__ (GElf_Verneed) - 1)) != 0) return; /* Work the tree from the first record. */ @@ -192,7 +199,9 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) GElf_Vernaux *adest; /* Test for correct offset. */ - if (aux_offset > len || len - aux_offset < sizeof (GElf_Vernaux)) + if (aux_offset > len + || len - aux_offset < sizeof (GElf_Vernaux) + || (aux_offset & (__alignof__ (GElf_Vernaux) - 1)) != 0) return; adest = (GElf_Vernaux *) ((char *) dest + aux_offset); -- cgit v1.2.1 From 0e142c560bf599627056efd6deb41af36a7163dd Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Mar 2022 16:01:20 +0100 Subject: libdwfl: Close ar members when they cannot be processed. When reporting ar members they should be closed when they cannot be processed. A comment in offline.c said that process_file called elf_end if it returned NULL. But this is incorrect. And other places that call process_file do call elf_end explicitly when it returns NULL. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/offline.c | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index b2588b12..182f4e34 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2022-02-18 Mark Wielaard + + * offline.c (process_archive_member): Close member if process_file + failed. + 2022-01-03 Mark Wielaard * link_map.c (dwfl_link_map_report): Only declare d32 and d64 before diff --git a/libdwfl/offline.c b/libdwfl/offline.c index d8697cf2..58ba4c36 100644 --- a/libdwfl/offline.c +++ b/libdwfl/offline.c @@ -1,5 +1,6 @@ /* Recover relocatibility for addresses computed from debug information. Copyright (C) 2005-2009, 2012 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -233,8 +234,11 @@ process_archive_member (Dwfl *dwfl, const char *name, const char *file_name, free (member_name); free (module_name); - if (*mod == NULL) /* process_file called elf_end. */ - return ELF_C_NULL; + if (*mod == NULL) + { + elf_end (member); + return ELF_C_NULL; + } /* Advance the archive-reading offset for the next iteration. */ return elf_next (member); -- cgit v1.2.1 From 3b878cfe71b5637ad043382e8c300233cff89f6e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 18 Mar 2022 16:44:53 +0100 Subject: libdwfl: Use memcpy to assign image header field values The values in the kernel image header aren't properly aligned. Use memcpy and the LE16, LE32 macros to assign and check the values. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 5 +++++ libdwfl/image-header.c | 24 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 182f4e34..9c5c8517 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,8 @@ +2022-02-18 Mark Wielaard + + * image-header.c (__libdw_image_header): Assign header values for + magic1, magic2, version, offset, length and sects using memcpy. + 2022-02-18 Mark Wielaard * offline.c (process_archive_member): Close member if process_file diff --git a/libdwfl/image-header.c b/libdwfl/image-header.c index 25fbfd99..f906068a 100644 --- a/libdwfl/image-header.c +++ b/libdwfl/image-header.c @@ -1,5 +1,6 @@ /* Linux kernel image support for libdwfl. Copyright (C) 2009-2011 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -80,17 +81,28 @@ __libdw_image_header (int fd, off_t *start_offset, header = header_buffer - H_START; } - if (*(uint16_t *) (header + H_MAGIC1) == LE16 (MAGIC1) - && *(uint32_t *) (header + H_MAGIC2) == LE32 (MAGIC2) - && LE16 (*(uint16_t *) (header + H_VERSION)) >= MIN_VERSION) + uint16_t magic1; + uint32_t magic2; + uint16_t version; + memcpy (&magic1, header + H_MAGIC1, sizeof (uint16_t)); + memcpy (&magic2, header + H_MAGIC2, sizeof (uint32_t)); + memcpy (&version, header + H_VERSION, sizeof (uint16_t)); + if (magic1 == LE16 (MAGIC1) && magic2 == LE32 (MAGIC2) + && LE16 (version) >= MIN_VERSION) { /* The magic numbers match and the version field is sufficient. Extract the payload bounds. */ - uint32_t offset = LE32 (*(uint32_t *) (header + H_PAYLOAD_OFFSET)); - uint32_t length = LE32 (*(uint32_t *) (header + H_PAYLOAD_LENGTH)); + uint32_t offset; + uint32_t length; + uint8_t sects; + memcpy (&offset, header + H_PAYLOAD_OFFSET, sizeof (uint32_t)); + memcpy (&length, header + H_PAYLOAD_LENGTH, sizeof (uint32_t)); + memcpy (§s, header + H_SETUP_SECTS, sizeof (uint8_t)); + offset = LE32 (offset); + length = LE32 (length); - offset += ((*(uint8_t *) (header + H_SETUP_SECTS) ?: 4) + 1) * 512; + offset += ((sects ?: 4) + 1) * 512; if (offset > H_END && offset < mapped_size && mapped_size - offset >= length) -- cgit v1.2.1 From 2785ba7ad21e3f28949c7333d48412122ebbcfa2 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 20 Mar 2022 22:21:05 +0100 Subject: libelf: Don't overflow offsets in elf_cvt_Verneed and elf_cvt_Verdef The conversion functions for Verdef and Verneed keep offsets to the next structure. Make sure that following vd_aux, vda_next, vd_next, vn_aux, vna_next and vn_next don't overflow (and wrap around) the offsets. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 7 +++++++ libelf/version_xlate.h | 56 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index f6b47c68..ea204e2b 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,10 @@ +2022-03-20 Mark Wielaard + + * version_xlate.h (elf_cvt_Verdef): Make sure aux_offset and + def_offset don't overflow. + (elf_cvt_Verneed): Make sure aux_offset and need_offset don't + overflow. + 2022-03-18 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Check alignment of def_offset diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h index b7bd301d..97f3b730 100644 --- a/libelf/version_xlate.h +++ b/libelf/version_xlate.h @@ -87,10 +87,16 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) ddest->vd_aux = bswap_32 (dsrc->vd_aux); ddest->vd_next = bswap_32 (dsrc->vd_next); + if (ddest->vd_aux > len - def_offset) + return; aux_offset = def_offset + ddest->vd_aux; } else - aux_offset = def_offset + dsrc->vd_aux; + { + if (dsrc->vd_aux > len - def_offset) + return; + aux_offset = def_offset + dsrc->vd_aux; + } /* Handle all the auxiliary records belonging to this definition. */ do @@ -107,19 +113,29 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) asrc = (GElf_Verdaux *) ((char *) src + aux_offset); if (encode) - aux_offset += asrc->vda_next; + { + if (asrc->vda_next > len - aux_offset) + return; + aux_offset += asrc->vda_next; + } adest->vda_name = bswap_32 (asrc->vda_name); adest->vda_next = bswap_32 (asrc->vda_next); if (! encode) - aux_offset += adest->vda_next; + { + if (adest->vda_next > len - aux_offset) + return; + aux_offset += adest->vda_next; + } } while (asrc->vda_next != 0); /* Encode now if necessary. */ if (encode) { + if (dsrc->vd_next > len - def_offset) + return; def_offset += dsrc->vd_next; ddest->vd_version = bswap_16 (dsrc->vd_version); @@ -131,7 +147,11 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len, int encode) ddest->vd_next = bswap_32 (dsrc->vd_next); } else - def_offset += ddest->vd_next; + { + if (ddest->vd_next > len - def_offset) + return; + def_offset += ddest->vd_next; + } } while (dsrc->vd_next != 0); } @@ -188,10 +208,16 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) ndest->vn_aux = bswap_32 (nsrc->vn_aux); ndest->vn_next = bswap_32 (nsrc->vn_next); + if (ndest->vn_aux > len - need_offset) + return; aux_offset = need_offset + ndest->vn_aux; } else - aux_offset = need_offset + nsrc->vn_aux; + { + if (nsrc->vn_aux > len - need_offset) + return; + aux_offset = need_offset + nsrc->vn_aux; + } /* Handle all the auxiliary records belonging to this requirement. */ do @@ -208,7 +234,11 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) asrc = (GElf_Vernaux *) ((char *) src + aux_offset); if (encode) - aux_offset += asrc->vna_next; + { + if (asrc->vna_next > len - aux_offset) + return; + aux_offset += asrc->vna_next; + } adest->vna_hash = bswap_32 (asrc->vna_hash); adest->vna_flags = bswap_16 (asrc->vna_flags); @@ -217,13 +247,19 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) adest->vna_next = bswap_32 (asrc->vna_next); if (! encode) - aux_offset += adest->vna_next; + { + if (adest->vna_next > len - aux_offset) + return; + aux_offset += adest->vna_next; + } } while (asrc->vna_next != 0); /* Encode now if necessary. */ if (encode) { + if (nsrc->vn_next > len - need_offset) + return; need_offset += nsrc->vn_next; ndest->vn_version = bswap_16 (nsrc->vn_version); @@ -233,7 +269,11 @@ elf_cvt_Verneed (void *dest, const void *src, size_t len, int encode) ndest->vn_next = bswap_32 (nsrc->vn_next); } else - need_offset += ndest->vn_next; + { + if (ndest->vn_next > len - need_offset) + return; + need_offset += ndest->vn_next; + } } while (nsrc->vn_next != 0); } -- cgit v1.2.1 From 4b77a7682f4c1489e1527ec86e3fddb1d25da1a1 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 23 Mar 2022 01:20:56 +0100 Subject: libelf: Correct alignment of ELF_T_GNUHASH data for ELFCLASS64 ELF_T_GNUHASH data is just 32bit words for ELFCLASS32. But for ELFCLASS64 it is a mix of 32bit and 64bit words. In the elf_cvt_gnuhash function we rely on the alignment of the whole to be 64bit word aligned, even though the first 4 words are 32bits. Otherwise we might try to convert an unaligned 64bit word. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/elf_getdata.c | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index ea204e2b..5ea1e41e 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2022-03-22 Mark Wielaard + + * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different + alignment for ELFCLASS32 and ELFCLASS64. + 2022-03-20 Mark Wielaard * version_xlate.h (elf_cvt_Verdef): Make sure aux_offset and diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c index 475c6ded..a704aae3 100644 --- a/libelf/elf_getdata.c +++ b/libelf/elf_getdata.c @@ -1,5 +1,6 @@ /* Return the next data element from the section after possibly converting it. Copyright (C) 1998-2005, 2006, 2007, 2015, 2016 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -77,7 +78,6 @@ static const Elf_Type shtype_map[TYPEIDX (SHT_HISUNW) + 1] = const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] = { # define TYPE_ALIGNS(Bits) \ - { \ [ELF_T_ADDR] = __alignof__ (ElfW2(Bits,Addr)), \ [ELF_T_EHDR] = __alignof__ (ElfW2(Bits,Ehdr)), \ [ELF_T_HALF] = __alignof__ (ElfW2(Bits,Half)), \ @@ -100,13 +100,17 @@ const uint_fast8_t __libelf_type_aligns[ELFCLASSNUM - 1][ELF_T_NUM] = [ELF_T_MOVE] = __alignof__ (ElfW2(Bits,Move)), \ [ELF_T_LIB] = __alignof__ (ElfW2(Bits,Lib)), \ [ELF_T_NHDR] = __alignof__ (ElfW2(Bits,Nhdr)), \ - [ELF_T_GNUHASH] = __alignof__ (Elf32_Word), \ [ELF_T_AUXV] = __alignof__ (ElfW2(Bits,auxv_t)), \ [ELF_T_CHDR] = __alignof__ (ElfW2(Bits,Chdr)), \ - [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */ \ - } - [ELFCLASS32 - 1] = TYPE_ALIGNS (32), - [ELFCLASS64 - 1] = TYPE_ALIGNS (64), + [ELF_T_NHDR8] = 8 /* Special case for GNU Property note. */ + [ELFCLASS32 - 1] = { + TYPE_ALIGNS (32), + [ELF_T_GNUHASH] = __alignof__ (Elf32_Word), + }, + [ELFCLASS64 - 1] = { + TYPE_ALIGNS (64), + [ELF_T_GNUHASH] = __alignof__ (Elf64_Xword), + }, # undef TYPE_ALIGNS }; -- cgit v1.2.1 From 3bd6b4b3a8476c2be96d6f417999e7f227e0e017 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 21 Mar 2022 00:13:56 +0100 Subject: tests: Check addsections test binary is 64bit for run-large-elf-file.sh The test binary should be 64bit to be able to create 4GB, or larger, ELF files. https://sourceware.org/bugzilla/show_bug.cgi?id=28975 Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/run-large-elf-file.sh | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/tests/ChangeLog b/tests/ChangeLog index c97ed52e..c195f9f7 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2022-03-20 Mark Wielaard + + * run-large-elf-file.sh: Check elf class of addsections binary. + 2021-12-17 Mark Wielaard * run-debuginfod-query-retry.sh: Use /bin/sh instead of /bin/ls. diff --git a/tests/run-large-elf-file.sh b/tests/run-large-elf-file.sh index 667d24d8..7116de53 100755 --- a/tests/run-large-elf-file.sh +++ b/tests/run-large-elf-file.sh @@ -1,5 +1,6 @@ #! /usr/bin/env bash # Copyright (C) 2019 Red Hat, Inc. +# Copyright (C) 2022 Mark J. Wielaard # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify @@ -26,6 +27,16 @@ if test $long_bit -ne 64; then exit 77 fi +# The test binary also needs to be 64bits itself +elfclass=64 +testrun ${abs_top_builddir}/src/readelf -h ${abs_builddir}/addsections | grep ELF32 \ + && elfclass=32 +echo elfclass: $elfclass +if test $elfclass -ne 64; then + echo "Only 64bit binaries can create > 4GB ELF files" + exit 77 +fi + # These tests need lots of disk space since they test files > 4GB. # Skip if there just isn't enough (2.5 * 4 = 10GB). space_available=$[$(stat -f --format="%a*%S" .)/(1024 * 1024 * 1024)] -- cgit v1.2.1 From d85945f1056641180e03fb48ab770b893125786e Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 21 Mar 2022 00:34:24 +0100 Subject: configure: Don't check whether -m64 works for 32bit host biarch check Running a 32bit backtrace test against a 64bit binary doesn't work. Only a 64bit binary can backtrace a 32bit binary. So disable the biarch check that inserts -m64 for a 32bit host. https://sourceware.org/bugzilla/show_bug.cgi?id=24158 Signed-off-by: Mark Wielaard --- ChangeLog | 5 +++++ configure.ac | 2 -- m4/ChangeLog | 4 ++++ m4/biarch.m4 | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f46f903..3357f69b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2021-03-20 Mark Wielaard + + * configure.ac: Remove -m64 on 32bit target comments for + utrace_BIARCH check. + 2021-03-14 Mark Wielaard * configure.ac: Use AS_HELP_STRING instead of AC_HELP_STRING. diff --git a/configure.ac b/configure.ac index 1aff9f30..2418d474 100644 --- a/configure.ac +++ b/configure.ac @@ -706,9 +706,7 @@ if test "$sys_user_has_user_regs" = "yes"; then fi # On a 64-bit host where can can use $CC -m32, we'll run two sets of tests. -# Likewise in a 32-bit build on a host where $CC -m64 works. utrace_BIARCH -# `$utrace_biarch' will be `-m64' even on an uniarch i386 machine. CC_BIARCH="$CC $utrace_biarch" AC_SUBST([CC_BIARCH]) diff --git a/m4/ChangeLog b/m4/ChangeLog index d4c3c28c..8729f58c 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,3 +1,7 @@ +2022-03-20 Mark Wielaard + + * biarch.m4: Don't check whether -m64 works for 32bit host. + 2022-03-14 Mark Wielaard * biarch.m4: Use AS_HELP_STRING instead of AC_HELP_STRING. diff --git a/m4/biarch.m4 b/m4/biarch.m4 index 68618473..c7baead7 100644 --- a/m4/biarch.m4 +++ b/m4/biarch.m4 @@ -34,7 +34,7 @@ AC_ARG_WITH([biarch], AS_IF([test $utrace_biarch_forced = yes], [dnl utrace_cv_cc_biarch=yes AC_MSG_NOTICE([enabling biarch tests regardless using $biarch_CC])], [dnl -AS_IF([test x$utrace_cv_CC_m32 != xnone], [dnl +AS_IF([test x$utrace_cv_CC_m32 != xnone -a x$utrace_cv_host64 != xno], [dnl AC_CACHE_CHECK([whether $biarch_CC makes executables we can run], utrace_cv_cc_biarch, [dnl save_CC="$CC" -- cgit v1.2.1 From 31d551ae4dd8cf307c68f86b6c1ecac2f92b522a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 24 Mar 2022 23:06:09 +0100 Subject: libelf: Sync elf.h from glibc. Adds EM_INTELGT, NT_ARM_TAGGED_ADDR_CTRL, NT_ARM_PAC_ENABLED_KEYS, ELF_NOTE_FDO, NT_FDO_PACKAGING_METADATA and OpenRISC 1000 specific relocs. It also adds and renames some GNU_PROPERTY constants. But none of the constants the elfutils code uses was renamed or given a different constant value. dwelf_elf_e_machine_string was updated to handle EM_INTELGT. Signed-off-by: Mark Wielaard --- libdwelf/ChangeLog | 5 ++ libdwelf/dwelf_elf_e_machine_string.c | 2 + libelf/ChangeLog | 4 ++ libelf/elf.h | 107 ++++++++++++++++++++++++++-------- 4 files changed, 94 insertions(+), 24 deletions(-) diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index 5f7fb4ed..c9010af8 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,8 @@ +2022-03-24 Mark Wielaard + + * dwelf_elf_e_machine_string.c (dwelf_elf_e_machine_string): Add + EM_INTELGT Intel Graphics Technology. + 2021-02-14 Alexander Miller * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before diff --git a/libdwelf/dwelf_elf_e_machine_string.c b/libdwelf/dwelf_elf_e_machine_string.c index 387648e2..051c70b5 100644 --- a/libdwelf/dwelf_elf_e_machine_string.c +++ b/libdwelf/dwelf_elf_e_machine_string.c @@ -360,6 +360,8 @@ dwelf_elf_e_machine_string (int machine) return "XMOS xCORE"; case EM_MCHP_PIC: return "Microchip 8-bit PIC"; + case EM_INTELGT: + return "Intel Graphics Technology"; case EM_KM32: return "KM211 KM32"; case EM_KMX32: diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 5ea1e41e..7fd6202b 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2022-03-24 Mark Wielaard + + * elf.h: Update from glibc. + 2022-03-22 Mark Wielaard * elf_getdata.c (__libelf_type_aligns): ELF_T_GNUHASH has different diff --git a/libelf/elf.h b/libelf/elf.h index 8e3e618f..0735f6b5 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -1,5 +1,5 @@ /* This file defines standard ELF types, structures, and macros. - Copyright (C) 1995-2020 Free Software Foundation, Inc. + Copyright (C) 1995-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -336,7 +336,8 @@ typedef struct #define EM_BA2 202 /* Beyond BA2 */ #define EM_XCORE 203 /* XMOS xCORE */ #define EM_MCHP_PIC 204 /* Microchip 8-bit PIC(r) */ - /* reserved 205-209 */ +#define EM_INTELGT 205 /* Intel Graphics Technology */ + /* reserved 206-209 */ #define EM_KM32 210 /* KM211 KM32 */ #define EM_KMX32 211 /* KM211 KMX32 */ #define EM_EMX16 212 /* KM211 KMX16 */ @@ -813,6 +814,10 @@ typedef struct address keys. */ #define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication generic key. */ +#define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* AArch64 tagged address + control. */ +#define NT_ARM_PAC_ENABLED_KEYS 0x40a /* AArch64 pointer authentication + enabled keys. */ #define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note. */ #define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers. */ #define NT_MIPS_FP_MODE 0x801 /* MIPS floating-point mode. */ @@ -1226,8 +1231,7 @@ typedef struct #define AT_L3_CACHESIZE 46 #define AT_L3_CACHEGEOMETRY 47 -#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery - (AArch64). */ +#define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery */ /* Note section contents. Each entry in the note section begins with a header of a fixed form. */ @@ -1254,6 +1258,8 @@ typedef struct /* Note entries for GNU systems have this name. */ #define ELF_NOTE_GNU "GNU" +/* Note entries for freedesktop.org have this name. */ +#define ELF_NOTE_FDO "FDO" /* Defined types of notes for Solaris. */ @@ -1297,6 +1303,10 @@ typedef struct /* Program property. */ #define NT_GNU_PROPERTY_TYPE_0 5 +/* Packaging metadata as defined on + https://systemd.io/COREDUMP_PACKAGE_METADATA/ */ +#define NT_FDO_PACKAGING_METADATA 0xcafe1a7e + /* Note section name of program property. */ #define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property" @@ -1307,6 +1317,23 @@ typedef struct /* No copy relocation on protected data symbol. */ #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 +/* A 4-byte unsigned integer property: A bit is set if it is set in all + relocatable inputs. */ +#define GNU_PROPERTY_UINT32_AND_LO 0xb0000000 +#define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff + +/* A 4-byte unsigned integer property: A bit is set if it is set in any + relocatable inputs. */ +#define GNU_PROPERTY_UINT32_OR_LO 0xb0008000 +#define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff + +/* The needed properties by the object file. */ +#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO + +/* Set if the object file requires canonical function pointers and + cannot be used with copy relocation. */ +#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) + /* Processor-specific semantics, lo */ #define GNU_PROPERTY_LOPROC 0xc0000000 /* Processor-specific semantics, hi */ @@ -1324,31 +1351,26 @@ typedef struct /* The x86 instruction sets indicated by the corresponding bits are used in program. Their support in the hardware is optional. */ -#define GNU_PROPERTY_X86_ISA_1_USED 0xc0000000 +#define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 /* The x86 instruction sets indicated by the corresponding bits are used in program and they must be supported by the hardware. */ -#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0000001 +#define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 /* X86 processor-specific features used in program. */ #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 -#define GNU_PROPERTY_X86_ISA_1_486 (1U << 0) -#define GNU_PROPERTY_X86_ISA_1_586 (1U << 1) -#define GNU_PROPERTY_X86_ISA_1_686 (1U << 2) -#define GNU_PROPERTY_X86_ISA_1_SSE (1U << 3) -#define GNU_PROPERTY_X86_ISA_1_SSE2 (1U << 4) -#define GNU_PROPERTY_X86_ISA_1_SSE3 (1U << 5) -#define GNU_PROPERTY_X86_ISA_1_SSSE3 (1U << 6) -#define GNU_PROPERTY_X86_ISA_1_SSE4_1 (1U << 7) -#define GNU_PROPERTY_X86_ISA_1_SSE4_2 (1U << 8) -#define GNU_PROPERTY_X86_ISA_1_AVX (1U << 9) -#define GNU_PROPERTY_X86_ISA_1_AVX2 (1U << 10) -#define GNU_PROPERTY_X86_ISA_1_AVX512F (1U << 11) -#define GNU_PROPERTY_X86_ISA_1_AVX512CD (1U << 12) -#define GNU_PROPERTY_X86_ISA_1_AVX512ER (1U << 13) -#define GNU_PROPERTY_X86_ISA_1_AVX512PF (1U << 14) -#define GNU_PROPERTY_X86_ISA_1_AVX512VL (1U << 15) -#define GNU_PROPERTY_X86_ISA_1_AVX512DQ (1U << 16) -#define GNU_PROPERTY_X86_ISA_1_AVX512BW (1U << 17) +/* GNU_PROPERTY_X86_ISA_1_BASELINE: CMOV, CX8 (cmpxchg8b), FPU (fld), + MMX, OSFXSR (fxsave), SCE (syscall), SSE and SSE2. */ +#define GNU_PROPERTY_X86_ISA_1_BASELINE (1U << 0) +/* GNU_PROPERTY_X86_ISA_1_V2: GNU_PROPERTY_X86_ISA_1_BASELINE, + CMPXCHG16B (cmpxchg16b), LAHF-SAHF (lahf), POPCNT (popcnt), SSE3, + SSSE3, SSE4.1 and SSE4.2. */ +#define GNU_PROPERTY_X86_ISA_1_V2 (1U << 1) +/* GNU_PROPERTY_X86_ISA_1_V3: GNU_PROPERTY_X86_ISA_1_V2, AVX, AVX2, BMI1, + BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE. */ +#define GNU_PROPERTY_X86_ISA_1_V3 (1U << 2) +/* GNU_PROPERTY_X86_ISA_1_V4: GNU_PROPERTY_X86_ISA_1_V3, AVX512F, + AVX512BW, AVX512CD, AVX512DQ and AVX512VL. */ +#define GNU_PROPERTY_X86_ISA_1_V4 (1U << 3) /* This indicates that all executable sections are compatible with IBT. */ @@ -4102,4 +4124,41 @@ enum #define R_ARC_TLS_LE_S9 0x4a #define R_ARC_TLS_LE_32 0x4b +/* OpenRISC 1000 specific relocs. */ +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + #endif /* elf.h */ -- cgit v1.2.1 From 1e5302ad3cf02788339a340f6322d1af1f05d9f9 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Sun, 21 Nov 2021 19:43:18 +0000 Subject: libebl: recognize FDO Packaging Metadata ELF note As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/ this note will be used starting from Fedora 36. Allow readelf --notes to pretty print it: Note section [ 3] '.note.package' of 76 bytes at offset 0x2e8: Owner Data size Type FDO 57 FDO_PACKAGING_METADATA Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"} Signed-off-by: Luca Boccassi --- libebl/ChangeLog | 5 +++++ libebl/eblobjnote.c | 4 ++++ libebl/eblobjnotetypename.c | 3 +++ 3 files changed, 12 insertions(+) diff --git a/libebl/ChangeLog b/libebl/ChangeLog index da690a40..2e31e75d 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,8 @@ +2021-12-21 Luca Boccassi + + * eblobjnote.c (ebl_object_note): Handle NT_FDO_PACKAGING_METADATA. + * eblobjnotetypename.c (ebl_object_note_type_name): Likewise. + 2021-09-06 Dmitry V. Levin * eblopenbackend.c (openbackend): Remove cast of calloc return value. diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c index 36efe275..5a7c5c62 100644 --- a/libebl/eblobjnote.c +++ b/libebl/eblobjnote.c @@ -288,6 +288,10 @@ ebl_object_note (Ebl *ebl, uint32_t namesz, const char *name, uint32_t type, if (descsz == 0 && type == NT_VERSION) return; + if (strcmp ("FDO", name) == 0 && type == NT_FDO_PACKAGING_METADATA + && descsz > 0 && desc[descsz - 1] == '\0') + printf(" Packaging Metadata: %.*s\n", (int) descsz, desc); + /* Everything else should have the "GNU" owner name. */ if (strcmp ("GNU", name) != 0) return; diff --git a/libebl/eblobjnotetypename.c b/libebl/eblobjnotetypename.c index 4662906d..473a1f2f 100644 --- a/libebl/eblobjnotetypename.c +++ b/libebl/eblobjnotetypename.c @@ -101,6 +101,9 @@ ebl_object_note_type_name (Ebl *ebl, const char *name, uint32_t type, return buf; } + if (strcmp (name, "FDO") == 0 && type == NT_FDO_PACKAGING_METADATA) + return "FDO_PACKAGING_METADATA"; + if (strcmp (name, "GNU") != 0) { /* NT_VERSION is special, all data is in the name. */ -- cgit v1.2.1 From 4a22e01277e37540d753e3513c4df3bd2b6e1246 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 25 Mar 2022 00:00:47 +0100 Subject: elflint: Recognize NT_FDO_PACKAGING_METADATA Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/elflint.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 0e705b7d..1e3c31a8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2022-03-24 Mark Wielaard + + * elflint.c (check_note_data): Recognize NT_FDO_PACKAGING_METADATA. + 2022-03-11 Mark Wielaard * addr2line.c (OPT_RELATIVE): New constant. diff --git a/src/elflint.c b/src/elflint.c index ef7725ce..d919936f 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -4384,6 +4384,13 @@ section [%2d] '%s': unknown core file note type %" PRIu32 else goto unknown_note; + case NT_FDO_PACKAGING_METADATA: + if (nhdr.n_namesz == sizeof ELF_NOTE_FDO + && strcmp (data->d_buf + name_offset, ELF_NOTE_FDO) == 0) + break; + else + goto unknown_note; + case 0: /* Linux vDSOs use a type 0 note for the kernel version word. */ if (nhdr.n_namesz == sizeof "Linux" -- cgit v1.2.1 From dec6d82cf2e9c79b9b45a29de5ea2d8f25cc633b Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 27 Mar 2022 21:08:36 +0200 Subject: Introduce error_exit as a noreturn variant of error (EXIT_FAILURE, ...) error (EXIT_FAILURE, ...) should be noreturn but on some systems it isn't. This may cause warnings about code that should not be reachable. So have an explicit error_exit wrapper that is noreturn (because it calls exit explicitly). Use error_exit in all tools under the src directory. https://bugzilla.redhat.com/show_bug.cgi?id=2068692 Signed-off-by: Mark Wielaard --- lib/ChangeLog | 4 ++ lib/system.h | 10 ++++ src/ChangeLog | 14 +++++ src/addr2line.c | 3 +- src/ar.c | 41 ++++++------- src/arlib.c | 8 +-- src/elfcompress.c | 5 +- src/nm.c | 24 ++++---- src/objdump.c | 16 +++-- src/readelf.c | 170 +++++++++++++++++++++++------------------------------- src/size.c | 22 ++++--- src/strings.c | 11 ++-- src/strip.c | 58 ++++++++----------- src/unstrip.c | 166 ++++++++++++++++++++++++++-------------------------- 14 files changed, 264 insertions(+), 288 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 8f4d4d9f..6b76f647 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2022-03-27 Mark Wielaard + + * system.h: define error_exit. + 2021-02-14 Alexander Miller * eu-config.h (used_in_asm): New macro. diff --git a/lib/system.h b/lib/system.h index edbc8488..d3f42c91 100644 --- a/lib/system.h +++ b/lib/system.h @@ -1,5 +1,6 @@ /* Declarations for common convenience functions. Copyright (C) 2006-2011 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -51,6 +52,15 @@ void error(int status, int errnum, const char *format, ...); #error "err.h or error.h must be available" #endif +/* error (EXIT_FAILURE, ...) should be noreturn but on some systems it + isn't. This may cause warnings about code that should not be reachable. + So have an explicit error_exit wrapper that is noreturn (because it + calls exit explicitly). */ +#define error_exit(errnum,...) do { \ + error (EXIT_FAILURE,errnum,__VA_ARGS__); \ + exit (EXIT_FAILURE); \ + } while (0) + #if __BYTE_ORDER == __LITTLE_ENDIAN # define LE32(n) (n) # define LE64(n) (n) diff --git a/src/ChangeLog b/src/ChangeLog index 1e3c31a8..c0a3db3f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,17 @@ +2022-03-27 Mark Wielaard + + * addr2line.c: Replace error (EXIT_FAILURE, ...) with error_exit(...). + * ar.c: Likewise. + * arlib.c: Likewise. + * elfcompress.c: Likewise. + * nm.c: Likewise. + * objdump.c: Likewise. + * readelf.c: Likewise. + * size.c: Likewise. + * strings.c: Likewise. + * strip.c: Likewise. + * unstrip.c: Likewise. + 2022-03-24 Mark Wielaard * elflint.c (check_note_data): Recognize NT_FDO_PACKAGING_METADATA. diff --git a/src/addr2line.c b/src/addr2line.c index 7c8d3a72..25db2926 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -524,8 +524,7 @@ adjust_to_section (const char *name, uintmax_t *addr, Dwfl *dwfl) Dwfl_Module *mod = NULL; if (dwfl_getmodules (dwfl, &see_one_module, &mod, 0) != 0 || mod == NULL) - error (EXIT_FAILURE, 0, _("Section syntax requires" - " exactly one module")); + error_exit (0, _("Section syntax requires exactly one module")); int nscn = dwfl_module_relocations (mod); for (int i = 0; i < nscn; ++i) diff --git a/src/ar.c b/src/ar.c index ab6098f0..9e8df120 100644 --- a/src/ar.c +++ b/src/ar.c @@ -386,8 +386,8 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf, if (miss_allowed) return -1; - error (EXIT_FAILURE, errno, _("cannot open archive '%s'"), - arfname); + error_exit (errno, _("cannot open archive '%s'"), + arfname); } if (elf != NULL) @@ -396,16 +396,16 @@ open_archive (const char *arfname, int flags, int mode, Elf **elf, *elf = elf_begin (fd, cmd, NULL); if (*elf == NULL) - error (EXIT_FAILURE, 0, _("cannot open archive '%s': %s"), - arfname, elf_errmsg (-1)); + error_exit (0, _("cannot open archive '%s': %s"), + arfname, elf_errmsg (-1)); if (flags == O_RDONLY && elf_kind (*elf) != ELF_K_AR) - error (EXIT_FAILURE, 0, _("%s: not an archive file"), arfname); + error_exit (0, _("%s: not an archive file"), arfname); } if (st != NULL && fstat (fd, st) != 0) - error (EXIT_FAILURE, errno, _("cannot stat archive '%s'"), - arfname); + error_exit (errno, _("cannot stat archive '%s'"), + arfname); return fd; } @@ -469,14 +469,13 @@ do_oper_extract (int oper, const char *arfname, char **argv, int argc, int fd = open_archive (arfname, O_RDONLY, 0, &elf, NULL, false); if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] }; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } struct stat st; @@ -924,14 +923,13 @@ do_oper_delete (const char *arfname, char **argv, int argc, int fd = open_archive (arfname, O_RDONLY, 0, &elf, &st, false); if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { ENTRY entry = { .key = argv[cnt], .data = &argv[cnt] }; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } arlib_init (); @@ -1131,7 +1129,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, if (oper != oper_qappend) { if (hcreate (2 * argc) == 0) - error (EXIT_FAILURE, errno, _("cannot create hash table")); + error_exit (errno, _("cannot create hash table")); for (int cnt = 0; cnt < argc; ++cnt) { @@ -1139,8 +1137,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, entry.key = full_path ? argv[cnt] : basename (argv[cnt]); entry.data = &argv[cnt]; if (hsearch (entry, ENTER) == NULL) - error (EXIT_FAILURE, errno, - _("cannot insert into hash table")); + error_exit (errno, _("cannot insert into hash table")); } } @@ -1214,7 +1211,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, next: cmd = elf_next (subelf); if (elf_end (subelf) != 0) - error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1)); + error_exit (0, "%s: %s", arfname, elf_errmsg (-1)); } if (oper != oper_qappend) @@ -1222,8 +1219,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, no_old: if (member != NULL) - error (EXIT_FAILURE, 0, _("position member %s not found"), - member); + error_exit (0, _("position member %s not found"), + member); if (oper == oper_move) { @@ -1305,8 +1302,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, found[cnt]->mem = elf_rawfile (newelf, &found[cnt]->size); if (found[cnt]->mem == NULL || elf_cntl (newelf, ELF_C_FDDONE) != 0) - error (EXIT_FAILURE, 0, _("cannot read %s: %s"), - argv[cnt], elf_errmsg (-1)); + error_exit (0, _("cannot read %s: %s"), + argv[cnt], elf_errmsg (-1)); close (newfd); @@ -1374,7 +1371,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, || (arhdr = elf_getarhdr (subelf)) == NULL) /* This should never happen since we already looked at the archive content. But who knows... */ - error (EXIT_FAILURE, 0, "%s: %s", arfname, elf_errmsg (-1)); + error_exit (0, "%s: %s", arfname, elf_errmsg (-1)); arlib_add_symbols (subelf, arfname, arhdr->ar_name, cur_off); diff --git a/src/arlib.c b/src/arlib.c index a14c44d3..c09fc3c6 100644 --- a/src/arlib.c +++ b/src/arlib.c @@ -210,8 +210,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername, { if (sizeof (off) > sizeof (uint32_t) && off > ~((uint32_t) 0)) /* The archive is too big. */ - error (EXIT_FAILURE, 0, _("the archive '%s' is too large"), - arfname); + error_exit (0, _("the archive '%s' is too large"), + arfname); /* We only add symbol tables for ELF files. It makes not much sense to add symbols from executables but we do so for compatibility. @@ -223,8 +223,8 @@ arlib_add_symbols (Elf *elf, const char *arfname, const char *membername, GElf_Ehdr ehdr_mem; GElf_Ehdr *ehdr = gelf_getehdr (elf, &ehdr_mem); if (ehdr == NULL) - error (EXIT_FAILURE, 0, _("cannot read ELF header of %s(%s): %s"), - arfname, membername, elf_errmsg (-1)); + error_exit (0, _("cannot read ELF header of %s(%s): %s"), + arfname, membername, elf_errmsg (-1)); GElf_Word symtype; if (ehdr->e_type == ET_REL) diff --git a/src/elfcompress.c b/src/elfcompress.c index 2c6d91ba..92f2fac8 100644 --- a/src/elfcompress.c +++ b/src/elfcompress.c @@ -1342,12 +1342,11 @@ main (int argc, char **argv) /* Should already be handled by ARGP_KEY_NO_ARGS case above, just sanity check. */ if (remaining >= argc) - error (EXIT_FAILURE, 0, N_("No input file given")); + error_exit (0, N_("No input file given")); /* Likewise for the ARGP_KEY_ARGS case above, an extra sanity check. */ if (foutput != NULL && remaining + 1 < argc) - error (EXIT_FAILURE, 0, - N_("Only one input file allowed together with '-o'")); + error_exit (0, N_("Only one input file allowed together with '-o'")); elf_version (EV_CURRENT); diff --git a/src/nm.c b/src/nm.c index 2ae29c4d..16647589 100644 --- a/src/nm.c +++ b/src/nm.c @@ -137,8 +137,8 @@ static int handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* Internal representation of symbols. */ @@ -378,7 +378,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -390,7 +390,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -700,8 +700,7 @@ get_local_names (Dwarf *dbg) struct local_name **tres = tsearch (newp, &local_root, local_compare); if (tres == NULL) - error (EXIT_FAILURE, errno, - _("cannot create search tree")); + error_exit (errno, _("cannot create search tree")); else if (*tres != newp) free (newp); } @@ -741,8 +740,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* Cache the section names. */ Elf_Scn *scn = NULL; @@ -1234,8 +1232,7 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* The section is that large. */ size_t size = shdr->sh_size; @@ -1331,10 +1328,9 @@ show_symbols (int fd, Ebl *ebl, GElf_Ehdr *ehdr, can use the data memory instead of copying again if what we read is a 64 bit file. */ if (nentries > SIZE_MAX / sizeof (GElf_SymX)) - error (EXIT_FAILURE, 0, - _("%s: entries (%zd) in section %zd `%s' is too large"), - fullname, nentries, elf_ndxscn (scn), - elf_strptr (ebl->elf, shstrndx, shdr->sh_name)); + error_exit (0, _("%s: entries (%zd) in section %zd `%s' is too large"), + fullname, nentries, elf_ndxscn (scn), + elf_strptr (ebl->elf, shstrndx, shdr->sh_name)); GElf_SymX *sym_mem; if (nentries * sizeof (GElf_SymX) < MAX_STACK_ALLOC) sym_mem = (GElf_SymX *) alloca (nentries * sizeof (GElf_SymX)); diff --git a/src/objdump.c b/src/objdump.c index f7ea6c92..b32de17d 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -100,8 +100,8 @@ static int handle_elf (Elf *elf, const char *prefix, const char *fname, #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* List of sections which should be used. */ @@ -255,7 +255,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while close `%s'"), fname); + error_exit (errno, _("while close `%s'"), fname); return result; } @@ -267,7 +267,7 @@ process_file (const char *fname, bool more_than_one) INTERNAL_ERROR (fname); if (close (fd) != 0) - error (EXIT_FAILURE, errno, _("while close `%s'"), fname); + error_exit (errno, _("while close `%s'"), fname); return result; } @@ -684,7 +684,7 @@ show_disasm (Ebl *ebl, const char *fname, uint32_t shstrndx) { DisasmCtx_t *ctx = disasm_begin (ebl, ebl->elf, NULL /* XXX TODO */); if (ctx == NULL) - error (EXIT_FAILURE, 0, _("cannot disassemble")); + error_exit (0, _("cannot disassemble")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -755,8 +755,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname, /* Get the backend for this object file type. */ Ebl *ebl = ebl_openbackend (elf); if (ebl == NULL) - error (EXIT_FAILURE, 0, - _("cannot create backend for elf file")); + error_exit (0, _("cannot create backend for elf file")); printf ("%s: elf%d-%s\n\n", fname, gelf_getclass (elf) == ELFCLASS32 ? 32 : 64, @@ -777,8 +776,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); int result = 0; if (print_disasm) diff --git a/src/readelf.c b/src/readelf.c index 93fb5989..41d64d32 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -828,7 +828,7 @@ create_dwfl (int fd, const char *fname) /* Duplicate an fd for dwfl_report_offline to swallow. */ int dwfl_fd = dup (fd); if (unlikely (dwfl_fd < 0)) - error (EXIT_FAILURE, errno, "dup"); + error_exit (errno, "dup"); /* Use libdwfl in a trivial way to open the libdw handle for us. This takes care of applying relocations to DWARF data in ET_REL files. */ @@ -951,15 +951,13 @@ process_elf_file (Dwfl_Module *dwflmod, int fd) /* Determine the number of sections. */ if (unlikely (elf_getshdrnum (ebl->elf, &shnum) < 0)) - error (EXIT_FAILURE, 0, - _("cannot determine number of sections: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot determine number of sections: %s"), + elf_errmsg (-1)); /* Determine the number of phdrs. */ if (unlikely (elf_getphdrnum (ebl->elf, &phnum) < 0)) - error (EXIT_FAILURE, 0, - _("cannot determine number of program headers: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot determine number of program headers: %s"), + elf_errmsg (-1)); /* For an ET_REL file, libdwfl has adjusted the in-core shdrs and may have applied relocation to some sections. If there are any @@ -1226,9 +1224,8 @@ print_shdr (Ebl *ebl, GElf_Ehdr *ehdr) { size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §ions) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get number of sections: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get number of sections: %s"), + elf_errmsg (-1)); printf (_("\ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ @@ -1238,9 +1235,8 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ /* Get the section header string table index. */ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header string table index: %s"), + elf_errmsg (-1)); puts (_("Section Headers:")); @@ -1262,15 +1258,15 @@ There are %zd section headers, starting at offset %#" PRIx64 ":\n\ Elf_Scn *scn = elf_getscn (ebl->elf, cnt); if (unlikely (scn == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section: %s"), + elf_errmsg (-1)); /* Get the section header. */ GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); char flagbuf[20]; char *cp = flagbuf; @@ -1436,9 +1432,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) size_t sections; if (unlikely (elf_getshdrnum (ebl->elf, §ions) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get number of sections: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get number of sections: %s"), + elf_errmsg (-1)); if (sections == 0) /* No sections in the file. Punt. */ @@ -1447,8 +1442,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); puts (_("\n Section to Segment mapping:\n Segment Sections...")); @@ -1461,8 +1455,8 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) GElf_Phdr *phdr = gelf_getphdr (ebl->elf, cnt, &phdr_mem); /* This must not happen. */ if (unlikely (phdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get program header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get program header: %s"), + elf_errmsg (-1)); /* Iterate over the sections. */ bool in_relro = false; @@ -1472,16 +1466,15 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr) Elf_Scn *scn = elf_getscn (ebl->elf, inner); /* This should not happen. */ if (unlikely (scn == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section: %s"), + elf_errmsg (-1)); /* Get the section header. */ GElf_Shdr shdr_mem; GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); if (shdr->sh_size > 0 /* Compare allocated sections by VMA, unallocated @@ -1598,8 +1591,7 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf32_Word *grpref = (Elf32_Word *) data->d_buf; @@ -1661,10 +1653,9 @@ print_scngrp (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), - elf_errmsg (-1)); + error_exit (0, _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), + elf_errmsg (-1)); } handle_scngrp (ebl, scn, shdr); } @@ -1799,15 +1790,14 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); printf (ngettext ("\ \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", @@ -2005,8 +1995,7 @@ handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); if (shdr->sh_info != 0) printf (ngettext ("\ @@ -2195,8 +2184,7 @@ handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); if (shdr->sh_info != 0) printf (ngettext ("\ @@ -2373,8 +2361,8 @@ print_symtab (Ebl *ebl, int type) size_t shstrndx; const char *sname; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, + _("cannot get section header string table index")); sname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name); if (sname == NULL || strcmp (sname, symbol_table_section) != 0) continue; @@ -2388,9 +2376,9 @@ print_symtab (Ebl *ebl, int type) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, + _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); } handle_symtab (ebl, scn, shdr); } @@ -2449,15 +2437,14 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); /* Now we can compute the number of entries in the section. */ unsigned int nsyms = data->d_size / (class == ELFCLASS32 @@ -2715,15 +2702,14 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); printf (ngettext ("\ \nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", @@ -2791,15 +2777,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); GElf_Shdr glink_mem; GElf_Shdr *glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); int class = gelf_getclass (ebl->elf); printf (ngettext ("\ @@ -2878,8 +2863,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* We have to find the version definition section and extract the version names. */ @@ -3102,8 +3086,8 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) &glink_mem); size_t sh_entsize = gelf_fsize (ebl->elf, ELF_T_HALF, 1, EV_CURRENT); if (glink == NULL) - error (EXIT_FAILURE, 0, _("invalid sh_link value in section %zu"), - elf_ndxscn (scn)); + error_exit (0, _("invalid sh_link value in section %zu"), + elf_ndxscn (scn)); /* Print the header. */ printf (ngettext ("\ @@ -3474,8 +3458,7 @@ handle_hash (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -3495,9 +3478,8 @@ handle_hash (Ebl *ebl) elf_ndxscn (scn)); shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, - _("cannot get section [%zd] header: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, _("cannot get section [%zd] header: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); } if (shdr->sh_type == SHT_HASH) @@ -3524,8 +3506,7 @@ print_liblist (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) { @@ -3594,8 +3575,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) { @@ -3832,7 +3812,7 @@ print_dwarf_addr (Dwfl_Module *dwflmod, : (address_size == 0 ? printf ("%#" PRIx64, address) : printf ("%#0*" PRIx64, 2 + address_size * 2, address)))) < 0) - error (EXIT_FAILURE, 0, _("sprintf failure")); + error_exit (0, _("sprintf failure")); } @@ -11405,8 +11385,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* If the .debug_info section is listed as implicitly required then we must make sure to handle it before handling any other debug @@ -11579,7 +11558,7 @@ print_core_item (unsigned int colno, char sep, unsigned int wrap, int out_len = vasprintf (&out, format, ap); va_end (ap); if (out_len == -1) - error (EXIT_FAILURE, 0, _("memory exhausted")); + error_exit (0, _("memory exhausted")); size_t n = name_width + sizeof ": " - 1 + out_len; @@ -11629,8 +11608,8 @@ convert (Elf *core, Elf_Type type, uint_fast16_t count, ? elf32_xlatetom : elf64_xlatetom) (&valuedata, &indata, elf_getident (core, NULL)[EI_DATA]); if (d == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), + elf_errmsg (-1)); return data + indata.d_size; } @@ -12256,8 +12235,7 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos) Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_AUXV); if (data == NULL) elf_error: - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); const size_t nauxv = descsz / gelf_fsize (core, ELF_T_AUXV, 1, EV_CURRENT); for (size_t i = 0; i < nauxv; ++i) @@ -12367,8 +12345,7 @@ handle_siginfo_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) { Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); if (data == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); unsigned char const *ptr = data->d_buf; unsigned char const *const end = data->d_buf + data->d_size; @@ -12425,8 +12402,7 @@ handle_file_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos) { Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE); if (data == NULL) - error (EXIT_FAILURE, 0, - _("cannot convert core note data: %s"), elf_errmsg (-1)); + error_exit (0, _("cannot convert core note data: %s"), elf_errmsg (-1)); unsigned char const *ptr = data->d_buf; unsigned char const *const end = data->d_buf + data->d_size; @@ -12599,8 +12575,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr) /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn = NULL; while ((scn = elf_nextscn (ebl->elf, scn)) != NULL) @@ -12810,8 +12785,7 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, /* Get the section header string table index. */ size_t shstrndx; if (elf_getshdrstrndx (elf, &shstrndx) < 0) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); for (const struct section_argument *a = list; a != NULL; a = a->next) { @@ -12831,8 +12805,8 @@ for_each_section_argument (Elf *elf, const struct section_argument *list, } if (gelf_getshdr (scn, &shdr_mem) == NULL) - error (EXIT_FAILURE, 0, _("cannot get section header: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot get section header: %s"), + elf_errmsg (-1)); name = elf_strptr (elf, shstrndx, shdr_mem.sh_name); (*dump) (scn, &shdr_mem, name); } @@ -12879,8 +12853,7 @@ print_strings (Ebl *ebl) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); Elf_Scn *scn; GElf_Shdr shdr_mem; @@ -12912,9 +12885,8 @@ dump_archive_index (Elf *elf, const char *fname) { int result = elf_errno (); if (unlikely (result != ELF_E_NO_INDEX)) - error (EXIT_FAILURE, 0, - _("cannot get symbol index of archive '%s': %s"), - fname, elf_errmsg (result)); + error_exit (0, _("cannot get symbol index of archive '%s': %s"), + fname, elf_errmsg (result)); else printf (_("\nArchive '%s' has no symbol index\n"), fname); return; @@ -12937,9 +12909,9 @@ dump_archive_index (Elf *elf, const char *fname) #if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 7) while (1) #endif - error (EXIT_FAILURE, 0, - _("cannot extract member at offset %zu in '%s': %s"), - as_off, fname, elf_errmsg (-1)); + error_exit (0, + _("cannot extract member at offset %zu in '%s': %s"), + as_off, fname, elf_errmsg (-1)); const Elf_Arhdr *h = elf_getarhdr (subelf); diff --git a/src/size.c b/src/size.c index 322ff53e..8f203167 100644 --- a/src/size.c +++ b/src/size.c @@ -102,8 +102,8 @@ static void handle_elf (Elf *elf, const char *fullname, const char *fname); static void show_bsd_totals (void); #define INTERNAL_ERROR(fname) \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)) /* User-selectable options. */ @@ -237,7 +237,7 @@ parse_opt (int key, char *arg, else if (likely (strcmp (arg, "sysv") == 0)) format = format_sysv; else - error (EXIT_FAILURE, 0, _("Invalid format: %s"), arg); + error_exit (0, _("Invalid format: %s"), arg); break; case OPT_RADIX: @@ -248,7 +248,7 @@ parse_opt (int key, char *arg, else if (strcmp (arg, "o") == 0 || strcmp (arg, "8") == 0) radix = radix_octal; else - error (EXIT_FAILURE, 0, _("Invalid radix: %s"), arg); + error_exit (0, _("Invalid radix: %s"), arg); break; case 't': @@ -285,7 +285,7 @@ process_file (const char *fname) INTERNAL_ERROR (fname); if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return 0; } @@ -294,7 +294,7 @@ process_file (const char *fname) int result = handle_ar (fd, elf, NULL, fname); if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } @@ -305,7 +305,7 @@ process_file (const char *fname) } if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); error (0, 0, _("%s: file format not recognized"), fname); @@ -394,8 +394,7 @@ show_sysv (Elf *elf, const char *prefix, const char *fname, /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* First round over the sections: determine the longest section name. */ Elf_Scn *scn = NULL; @@ -466,8 +465,7 @@ show_sysv_one_line (Elf *elf) /* Get the section header string table index. */ size_t shstrndx; if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); /* Iterate over all sections. */ GElf_Off total = 0; @@ -479,7 +477,7 @@ show_sysv_one_line (Elf *elf) GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem); if (unlikely (shdr == NULL)) - error (EXIT_FAILURE, 0, _("cannot get section header")); + error_exit (0, _("cannot get section header")); /* Ignore all sections which are not used at runtime. */ if ((shdr->sh_flags & SHF_ALLOC) == 0) diff --git a/src/strings.c b/src/strings.c index eb278f8e..04aac3b6 100644 --- a/src/strings.c +++ b/src/strings.c @@ -298,8 +298,7 @@ parse_opt (int key, char *arg, case ARGP_KEY_FINI: /* Compute the length in bytes of any match. */ if (min_len <= 0 || min_len > INT_MAX / bytes_per_char) - error (EXIT_FAILURE, 0, - _("invalid minimum length of matched string size")); + error_exit (0, _("invalid minimum length of matched string size")); min_len_bytes = min_len * bytes_per_char; break; @@ -582,7 +581,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) // XXX Eventually add flag which avoids this if the position // XXX is known to match. if (from != 0 && lseek (fd, from, SEEK_SET) != from) - error (EXIT_FAILURE, errno, _("lseek failed")); + error_exit (errno, _("lseek failed")); return read_block_no_mmap (fd, fname, from, to - from); } @@ -599,7 +598,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) if (mmap (elfmap, elfmap_size, PROT_READ, MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, from) == MAP_FAILED) - error (EXIT_FAILURE, errno, _("re-mmap failed")); + error_exit (errno, _("re-mmap failed")); elfmap_base = elfmap; } @@ -636,7 +635,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) and for this we have to make the data writable. */ if (unlikely (mprotect (elfmap, keep_area, PROT_READ | PROT_WRITE) != 0)) - error (EXIT_FAILURE, errno, _("mprotect failed")); + error_exit (errno, _("mprotect failed")); elfmap_base = elfmap + keep_area; } @@ -663,7 +662,7 @@ read_block (int fd, const char *fname, off_t fdlen, off_t from, off_t to) if (mmap (remap_base, read_now, PROT_READ, MAP_PRIVATE | MAP_POPULATE | MAP_FIXED, fd, handled_to) == MAP_FAILED) - error (EXIT_FAILURE, errno, _("re-mmap failed")); + error_exit (errno, _("re-mmap failed")); elfmap_off = handled_to; process_chunk (fname, remap_base - to_keep, diff --git a/src/strip.c b/src/strip.c index d5b753d7..30a1f9da 100644 --- a/src/strip.c +++ b/src/strip.c @@ -130,8 +130,8 @@ static void cleanup_debug (void); #define INTERNAL_ERROR(fname) \ do { \ cleanup_debug (); \ - error (EXIT_FAILURE, 0, _("%s: INTERNAL ERROR %d (%s): %s"), \ - fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \ + error_exit (0, _("%s: INTERNAL ERROR %d (%s): %s"), \ + fname, __LINE__, PACKAGE_VERSION, elf_errmsg (-1)); \ } while (0) @@ -243,14 +243,13 @@ main (int argc, char *argv[]) return EXIT_FAILURE; if (reloc_debug && debug_fname == NULL) - error (EXIT_FAILURE, 0, - _("--reloc-debug-sections used without -f")); + error_exit (0, _("--reloc-debug-sections used without -f")); if (reloc_debug_only && (debug_fname != NULL || remove_secs != NULL || remove_comment == true || remove_debug == true)) - error (EXIT_FAILURE, 0, - _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section")); + error_exit (0, + _("--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --remove-section")); /* Tell the library which version we are expecting. */ elf_version (EV_CURRENT); @@ -264,8 +263,7 @@ main (int argc, char *argv[]) input file. */ if ((output_fname != NULL || debug_fname != NULL) && remaining + 1 < argc) - error (EXIT_FAILURE, 0, _("\ -Only one input file allowed together with '-o' and '-f'")); + error_exit (0, _("Only one input file allowed together with '-o' and '-f'")); /* Process all the remaining files. */ do @@ -478,7 +476,7 @@ relocate (Elf *elf, GElf_Addr offset, const GElf_Sxword addend, || tdata->d_size - offset < size) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("bad relocation")); + error_exit (0, _("bad relocation")); } /* When the symbol value is zero then for SHT_REL @@ -1085,8 +1083,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0)) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("cannot get section header string table index")); + error_exit (0, _("cannot get section header string table index")); } /* Get the number of phdrs in the old file. */ @@ -1094,7 +1091,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (elf_getphdrnum (elf, &phnum) != 0) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("cannot get number of phdrs")); + error_exit (0, _("cannot get number of phdrs")); } /* We now create a new ELF descriptor for the same file. We @@ -1624,9 +1621,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (scn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while generating output file: %s"), - elf_errmsg (-1)); + error_exit (0, _("while generating output file: %s"), + elf_errmsg (-1)); } bool discard_section = (shdr_info[cnt].idx > 0 @@ -1723,8 +1719,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shst == NULL) { cleanup_debug (); - error (EXIT_FAILURE, errno, _("while preparing output for '%s'"), - output_fname ?: fname); + error_exit (errno, _("while preparing output for '%s'"), + output_fname ?: fname); } /* Assign new section numbers. */ @@ -1739,8 +1735,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while generating output file: %s"), + error_exit (0, + _("while generating output file: %s"), elf_errmsg (-1)); } @@ -1784,9 +1780,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header section: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header section: %s"), + elf_errmsg (-1)); } elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == shdr_info[cnt].idx); @@ -1794,8 +1789,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].data == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, _("cannot allocate section data: %s"), - elf_errmsg (-1)); + error_exit (0, _("cannot allocate section data: %s"), + elf_errmsg (-1)); } char *debug_basename = basename (debug_fname_embed ?: debug_fname); @@ -1847,9 +1842,8 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shdr_info[cnt].newscn == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header section: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header section: %s"), + elf_errmsg (-1)); } elf_assert (elf_ndxscn (shdr_info[cnt].newscn) == idx); @@ -1859,15 +1853,13 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, if (shstrtab_data == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("while create section header string table: %s"), - elf_errmsg (-1)); + error_exit (0, _("while create section header string table: %s"), + elf_errmsg (-1)); } if (dwelf_strtab_finalize (shst, shstrtab_data) == NULL) { cleanup_debug (); - error (EXIT_FAILURE, 0, - _("no memory to create section header string table")); + error_exit (0, _("no memory to create section header string table")); } /* We have to set the section size. */ @@ -2764,7 +2756,7 @@ cannot set access and modification date of '%s'"), fname); } if (unlikely (close (fd) != 0)) - error (EXIT_FAILURE, errno, _("while closing '%s'"), fname); + error_exit (errno, _("while closing '%s'"), fname); return result; } diff --git a/src/unstrip.c b/src/unstrip.c index aacc9aad..3472637a 100644 --- a/src/unstrip.c +++ b/src/unstrip.c @@ -225,7 +225,7 @@ parse_opt (int key, char *arg, struct argp_state *state) do \ { \ if (unlikely (!(call))) \ - error (EXIT_FAILURE, 0, msg, elf_errmsg (-1)); \ + error_exit (0, msg, elf_errmsg (-1)); \ } while (0) /* Copy INELF to newly-created OUTELF, exit via error for any problems. */ @@ -316,7 +316,7 @@ make_directories (const char *path) if (errno == ENOENT) make_directories (dir); else - error (EXIT_FAILURE, errno, _("cannot create directory '%s'"), dir); + error_exit (errno, _("cannot create directory '%s'"), dir); } free (dir); } @@ -440,7 +440,7 @@ adjust_reloc (GElf_Xword *info, if (ndx != STN_UNDEF) { if (ndx > map_size) - error (EXIT_FAILURE, 0, "bad symbol ndx section"); + error_exit (0, "bad symbol ndx section"); *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info)); } } @@ -456,7 +456,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, { case SHT_REL: if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "REL section cannot have zero sh_entsize"); + error_exit (0, "REL section cannot have zero sh_entsize"); for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i) { @@ -471,7 +471,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, case SHT_RELA: if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "RELA section cannot have zero sh_entsize"); + error_exit (0, "RELA section cannot have zero sh_entsize"); for (size_t i = 0; i < shdr->sh_size / shdr->sh_entsize; ++i) { @@ -501,13 +501,13 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, /* We must expand the table and rejigger its contents. */ { if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "HASH section cannot have zero sh_entsize"); + error_exit (0, "HASH section cannot have zero sh_entsize"); if (symshdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize"); + error_exit (0, "Symbol table cannot have zero sh_entsize"); const size_t nsym = symshdr->sh_size / symshdr->sh_entsize; const size_t onent = shdr->sh_size / shdr->sh_entsize; if (data->d_size != shdr->sh_size) - error (EXIT_FAILURE, 0, "HASH section has inconsistent size"); + error_exit (0, "HASH section has inconsistent size"); #define CONVERT_HASH(Hash_Word) \ { \ @@ -517,7 +517,7 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, const Hash_Word *const old_bucket = &old_hash[2]; \ const Hash_Word *const old_chain = &old_bucket[nbucket]; \ if (onent != 2 + nbucket + nchain) \ - error (EXIT_FAILURE, 0, "HASH section has inconsistent entsize"); \ + error_exit (0, "HASH section has inconsistent entsize"); \ \ const size_t nent = 2 + nbucket + nsym; \ Hash_Word *const new_hash = xcalloc (nent, sizeof new_hash[0]); \ @@ -562,10 +562,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, /* We must expand the table and move its elements around. */ { if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, - "GNU_versym section cannot have zero sh_entsize"); + error_exit (0, "GNU_versym section cannot have zero sh_entsize"); if (symshdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table cannot have zero sh_entsize"); + error_exit (0, "Symbol table cannot have zero sh_entsize"); const size_t nent = symshdr->sh_size / symshdr->sh_entsize; const size_t onent = shdr->sh_size / shdr->sh_entsize; assert (nent >= onent); @@ -591,9 +590,9 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr, break; default: - error (EXIT_FAILURE, 0, - _("unexpected section type in [%zu] with sh_link to symtab"), - elf_ndxscn (inscn)); + error_exit (0, + _("unexpected section type in [%zu] with sh_link to symtab"), + elf_ndxscn (inscn)); } } @@ -632,7 +631,7 @@ add_new_section_symbols (Elf_Scn *old_symscn, size_t old_shnum, GElf_Shdr *shdr = gelf_getshdr (symscn, &shdr_mem); ELF_CHECK (shdr != NULL, _("cannot get section header: %s")); if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, "Symbol table section cannot have zero sh_entsize"); + error_exit (0, "Symbol table section cannot have zero sh_entsize"); const size_t nsym = shdr->sh_size / shdr->sh_entsize; size_t symndx_map[nsym - 1]; @@ -865,8 +864,8 @@ collect_symbols (Elf *outelf, bool rel, Elf_Scn *symscn, Elf_Scn *strscn, if (sym->st_name >= strdata->d_size || memrchr (strdata->d_buf + sym->st_name, '\0', strdata->d_size - sym->st_name) == NULL) - error (EXIT_FAILURE, 0, - _("invalid string offset in symbol [%zu]"), i); + error_exit (0, + _("invalid string offset in symbol [%zu]"), i); struct symbol *s = &table[i - 1]; s->map = &map[i - 1]; @@ -948,13 +947,13 @@ compare_symbols_output (const void *a, const void *b) /* binutils always puts section symbols in section index order. */ CMP (shndx); else if (s1 != s2) - error (EXIT_FAILURE, 0, "section symbols in unexpected order"); + error_exit (0, "section symbols in unexpected order"); } /* Nothing really matters, so preserve the original order. */ CMP (map); else if (s1 != s2) - error (EXIT_FAILURE, 0, "found two identical symbols"); + error_exit (0, "found two identical symbols"); } return cmp; @@ -1024,8 +1023,8 @@ static inline const char * get_section_name (size_t ndx, const GElf_Shdr *shdr, const Elf_Data *shstrtab) { if (shdr->sh_name >= shstrtab->d_size) - error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"), - ndx, elf_errmsg (-1)); + error_exit (0, _("cannot read section [%zu] name: %s"), + ndx, elf_errmsg (-1)); return shstrtab->d_buf + shdr->sh_name; } @@ -1039,30 +1038,30 @@ get_group_sig (Elf *elf, GElf_Shdr *shdr) Elf_Scn *symscn = elf_getscn (elf, shdr->sh_link); if (symscn == NULL) - error (EXIT_FAILURE, 0, _("bad sh_link for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad sh_link for group section: %s"), + elf_errmsg (-1)); GElf_Shdr symshdr_mem; GElf_Shdr *symshdr = gelf_getshdr (symscn, &symshdr_mem); if (symshdr == NULL) - error (EXIT_FAILURE, 0, _("couldn't get shdr for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("couldn't get shdr for group section: %s"), + elf_errmsg (-1)); Elf_Data *symdata = elf_getdata (symscn, NULL); if (symdata == NULL) - error (EXIT_FAILURE, 0, _("bad data for group symbol section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad data for group symbol section: %s"), + elf_errmsg (-1)); GElf_Sym sym_mem; GElf_Sym *sym = gelf_getsym (symdata, shdr->sh_info, &sym_mem); if (sym == NULL) - error (EXIT_FAILURE, 0, _("couldn't get symbol for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("couldn't get symbol for group section: %s"), + elf_errmsg (-1)); const char *sig = elf_strptr (elf, symshdr->sh_link, sym->st_name); if (sig == NULL) - error (EXIT_FAILURE, 0, _("bad symbol name for group section: %s"), - elf_errmsg (-1)); + error_exit (0, _("bad symbol name for group section: %s"), + elf_errmsg (-1)); return sig; } @@ -1154,8 +1153,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, bool class32 = ehdr.e32.e_ident[EI_CLASS] == ELFCLASS32; size_t shsize = class32 ? sizeof (Elf32_Shdr) : sizeof (Elf64_Shdr); if (unlikely (shnum == 0 || shnum > SIZE_MAX / shsize + 1)) - error (EXIT_FAILURE, 0, _("overflow with shnum = %zu in '%s' section"), - (size_t) shnum, ".gnu.prelink_undo"); + error_exit (0, _("overflow with shnum = %zu in '%s' section"), + (size_t) shnum, ".gnu.prelink_undo"); --shnum; @@ -1165,8 +1164,8 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab, src.d_type = ELF_T_SHDR; if ((size_t) (src.d_buf - undodata->d_buf) > undodata->d_size || undodata->d_size - (src.d_buf - undodata->d_buf) != src.d_size) - error (EXIT_FAILURE, 0, _("invalid contents in '%s' section"), - ".gnu.prelink_undo"); + error_exit (0, _("invalid contents in '%s' section"), + ".gnu.prelink_undo"); const size_t shdr_bytes = shnum * shsize; void *shdr = xmalloc (shdr_bytes); @@ -1363,7 +1362,7 @@ new_shstrtab (Elf *unstripped, size_t unstripped_shnum, ELF_CHECK (elf_flagdata (strtab_data, ELF_C_SET, ELF_F_DIRTY), _("cannot update section header string table data: %s")); if (dwelf_strtab_finalize (strtab, strtab_data) == NULL) - error (EXIT_FAILURE, 0, "Not enough memory to create string table"); + error_exit (0, "Not enough memory to create string table"); /* Update the sh_name fields of sections we aren't modifying later. */ for (size_t i = 0; i < unstripped_shnum - 1; ++i) @@ -1405,11 +1404,11 @@ copy_elided_sections (Elf *unstripped, Elf *stripped, _("cannot get section count: %s")); if (unlikely (stripped_shnum > unstripped_shnum)) - error (EXIT_FAILURE, 0, _("\ + error_exit (0, _("\ more sections in stripped file than debug file -- arguments reversed?")); if (unlikely (stripped_shnum == 0)) - error (EXIT_FAILURE, 0, _("no sections in stripped file")); + error_exit (0, _("no sections in stripped file")); /* Used as sanity check for allocated section offset, if the section offset needs to be preserved. We want to know the max size of the @@ -1432,8 +1431,8 @@ more sections in stripped file than debug file -- arguments reversed?")); sections[i].name = elf_strptr (stripped, stripped_shstrndx, shdr->sh_name); if (sections[i].name == NULL) - error (EXIT_FAILURE, 0, _("cannot read section [%zu] name: %s"), - elf_ndxscn (scn), elf_errmsg (-1)); + error_exit (0, _("cannot read section [%zu] name: %s"), + elf_ndxscn (scn), elf_errmsg (-1)); sections[i].scn = scn; sections[i].outscn = NULL; sections[i].strent = NULL; @@ -1552,9 +1551,8 @@ more sections in stripped file than debug file -- arguments reversed?")); } if (sec == NULL) - error (EXIT_FAILURE, 0, - _("cannot find matching section for [%zu] '%s'"), - elf_ndxscn (scn), name); + error_exit (0, _("cannot find matching section for [%zu] '%s'"), + elf_ndxscn (scn), name); sec->outscn = scn; } @@ -1689,17 +1687,17 @@ more sections in stripped file than debug file -- arguments reversed?")); if (sec->shdr.sh_link != SHN_UNDEF) { if (sec->shdr.sh_link > ndx_sec_num) - error (EXIT_FAILURE, 0, - "section [%zd] has invalid sh_link %" PRId32, - elf_ndxscn (sec->scn), sec->shdr.sh_link); + error_exit (0, + "section [%zd] has invalid sh_link %" PRId32, + elf_ndxscn (sec->scn), sec->shdr.sh_link); shdr_mem.sh_link = ndx_section[sec->shdr.sh_link - 1]; } if (SH_INFO_LINK_P (&sec->shdr) && sec->shdr.sh_info != 0) { if (sec->shdr.sh_info > ndx_sec_num) - error (EXIT_FAILURE, 0, - "section [%zd] has invalid sh_info %" PRId32, - elf_ndxscn (sec->scn), sec->shdr.sh_info); + error_exit (0, + "section [%zd] has invalid sh_info %" PRId32, + elf_ndxscn (sec->scn), sec->shdr.sh_info); shdr_mem.sh_info = ndx_section[sec->shdr.sh_info - 1]; } @@ -1717,9 +1715,9 @@ more sections in stripped file than debug file -- arguments reversed?")); if (stripped_ehdr->e_type != ET_REL && (shdr_mem.sh_flags & SHF_ALLOC)) { if (max_off > 0 && sec->shdr.sh_offset > (Elf64_Off) max_off) - error (EXIT_FAILURE, 0, - "allocated section offset too large [%zd] %" PRIx64, - elf_ndxscn (sec->scn), sec->shdr.sh_offset); + error_exit (0, + "allocated section offset too large [%zd] %" PRIx64, + elf_ndxscn (sec->scn), sec->shdr.sh_offset); shdr_mem.sh_offset = sec->shdr.sh_offset; placed[elf_ndxscn (sec->outscn) - 1] = true; @@ -1740,8 +1738,8 @@ more sections in stripped file than debug file -- arguments reversed?")); Elf_Data *shndxdata = NULL; /* XXX */ if (shdr_mem.sh_entsize == 0) - error (EXIT_FAILURE, 0, - "SYMTAB section cannot have zero sh_entsize"); + error_exit (0, + "SYMTAB section cannot have zero sh_entsize"); for (size_t i = 1; i < shdr_mem.sh_size / shdr_mem.sh_entsize; ++i) { GElf_Sym sym_mem; @@ -1756,8 +1754,8 @@ more sections in stripped file than debug file -- arguments reversed?")); if (shndx != SHN_UNDEF && shndx < SHN_LORESERVE) { if (shndx >= stripped_shnum) - error (EXIT_FAILURE, 0, - _("symbol [%zu] has invalid section index"), i); + error_exit (0, + _("symbol [%zu] has invalid section index"), i); shndx = ndx_section[shndx - 1]; if (shndx < SHN_LORESERVE) @@ -1788,8 +1786,8 @@ more sections in stripped file than debug file -- arguments reversed?")); Elf32_Word *shndx = (Elf32_Word *) outdata->d_buf; for (size_t i = 1; i < shdr_mem.sh_size / sizeof (Elf32_Word); ++i) if (shndx[i] == SHN_UNDEF || shndx[i] >= stripped_shnum) - error (EXIT_FAILURE, 0, - _("group has invalid section index [%zd]"), i); + error_exit (0, + _("group has invalid section index [%zd]"), i); else shndx[i] = ndx_section[shndx[i] - 1]; } @@ -1815,8 +1813,8 @@ more sections in stripped file than debug file -- arguments reversed?")); GElf_Shdr *shdr = gelf_getshdr (unstripped_symtab, &shdr_mem); ELF_CHECK (shdr != NULL, _("cannot get section header: %s")); if (shdr->sh_entsize == 0) - error (EXIT_FAILURE, 0, - "unstripped SYMTAB section cannot have zero sh_entsize"); + error_exit (0, + "unstripped SYMTAB section cannot have zero sh_entsize"); const size_t unstripped_nsym = shdr->sh_size / shdr->sh_entsize; /* First collect all the symbols from both tables. */ @@ -1936,7 +1934,7 @@ more sections in stripped file than debug file -- arguments reversed?")); } if (dwelf_strtab_finalize (symstrtab, symstrdata) == NULL) - error (EXIT_FAILURE, 0, "Not enough memory to create symbol table"); + error_exit (0, "Not enough memory to create symbol table"); elf_flagdata (symstrdata, ELF_C_SET, ELF_F_DIRTY); @@ -2194,7 +2192,7 @@ DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u"), (stripped_ehdr->e_type == ET_REL ? DEFFILEMODE : ACCESSPERMS)); if (outfd < 0) - error (EXIT_FAILURE, errno, _("cannot open '%s'"), output_file); + error_exit (errno, _("cannot open '%s'"), output_file); Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL); ELF_CHECK (outelf != NULL, _("cannot create ELF descriptor: %s")); @@ -2223,7 +2221,7 @@ open_file (const char *file, bool writable) { int fd = open (file, writable ? O_RDWR : O_RDONLY); if (fd < 0) - error (EXIT_FAILURE, errno, _("cannot open '%s'"), file); + error_exit (errno, _("cannot open '%s'"), file); return fd; } @@ -2306,13 +2304,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, &file, NULL); if (file == NULL) - error (EXIT_FAILURE, 0, - _("cannot find stripped file for module '%s': %s"), - modname, dwfl_errmsg (-1)); + error_exit (0, + _("cannot find stripped file for module '%s': %s"), + modname, dwfl_errmsg (-1)); else - error (EXIT_FAILURE, 0, - _("cannot open stripped file '%s' for module '%s': %s"), - modname, file, dwfl_errmsg (-1)); + error_exit (0, + _("cannot open stripped file '%s' for module '%s': %s"), + modname, file, dwfl_errmsg (-1)); } Elf *debug = dwarf_getelf (dwfl_module_getdwarf (mod, &bias)); @@ -2325,13 +2323,13 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, &file); if (file == NULL) - error (EXIT_FAILURE, 0, - _("cannot find debug file for module '%s': %s"), - modname, dwfl_errmsg (-1)); + error_exit (0, + _("cannot find debug file for module '%s': %s"), + modname, dwfl_errmsg (-1)); else - error (EXIT_FAILURE, 0, - _("cannot open debug file '%s' for module '%s': %s"), - modname, file, dwfl_errmsg (-1)); + error_exit (0, + _("cannot open debug file '%s' for module '%s': %s"), + modname, file, dwfl_errmsg (-1)); } if (debug == stripped) @@ -2343,8 +2341,8 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, const char *file; const char *modname = dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, &file, NULL); - error (EXIT_FAILURE, 0, _("module '%s' file '%s' is not stripped"), - modname, file); + error_exit (0, _("module '%s' file '%s' is not stripped"), + modname, file); } } @@ -2373,10 +2371,10 @@ handle_dwfl_module (const char *output_file, bool create_dirs, bool force, get sh_addr values assigned have them, even ones not used in DWARF. They might still be used in the symbol table. */ if (dwfl_module_relocations (mod) < 0) - error (EXIT_FAILURE, 0, - _("cannot cache section addresses for module '%s': %s"), - dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - dwfl_errmsg (-1)); + error_exit (0, + _("cannot cache section addresses for module '%s': %s"), + dwfl_module_info (mod, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + dwfl_errmsg (-1)); } handle_file (output_file, create_dirs, stripped, &stripped_ehdr, debug); @@ -2502,7 +2500,7 @@ handle_implicit_modules (const struct arg_info *info) struct match_module_info mmi = { info->args, NULL, info->match_files }; ptrdiff_t offset = dwfl_getmodules (info->dwfl, &match_module, &mmi, 0); if (offset == 0) - error (EXIT_FAILURE, 0, _("no matching modules found")); + error_exit (0, _("no matching modules found")); if (info->list) do @@ -2512,7 +2510,7 @@ handle_implicit_modules (const struct arg_info *info) else if (info->output_dir == NULL) { if (dwfl_getmodules (info->dwfl, &match_module, &mmi, offset) != 0) - error (EXIT_FAILURE, 0, _("matched more than one module")); + error_exit (0, _("matched more than one module")); handle_dwfl_module (info->output_file, false, info->force, mmi.found, info->all, info->ignore, info->relocate); } -- cgit v1.2.1 From e3e2ae06fbfcd1b2f3de6945689ef9d9c94a2123 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 30 Mar 2022 00:17:08 +0200 Subject: libelf: Also copy/convert partial datastructures in xlate functions The generated xlate functions can only convert full datastructures, dropping any trailing partial data on the floor. That means some of the data might be undefined. Just copy over the trailing bytes as is. That data isn't really usable. But at least it is defined data. https://sourceware.org/bugzilla/show_bug.cgi?id=29000 Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/gelf_xlate.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 7fd6202b..299179cb 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2022-03-29 Mark Wielaard + + * gelf_xlate.c (START): Define and use sz variable. + (END): Use sz variable to decide whether to do a memmove. + 2022-03-24 Mark Wielaard * elf.h: Update from glibc. diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c index b9e7fd65..6f8c57b7 100644 --- a/libelf/gelf_xlate.c +++ b/libelf/gelf_xlate.c @@ -1,5 +1,6 @@ /* Transformation functions for ELF data types. Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007,2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -138,9 +139,14 @@ union unaligned int encode __attribute__ ((unused))) \ { ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \ ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \ + size_t sz = sizeof (ElfW2(Bits, Name)); \ size_t n; \ - for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) { -#define END(Bits, Name) } } + for (n = len / sz; n > 0; ++tdest, ++tsrc, --n) { +#define END(Bits, Name) \ + } \ + if (len % sz > 0) /* Cannot convert partial structures, just copy. */ \ + memmove (dest, src, len % sz); \ + } #define TYPE_EXTRA(Code) #define TYPE_XLATE(Code) Code #define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name) -- cgit v1.2.1 From e646e363e72e06e0ed5574c929236d815ddcbbaf Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Sun, 3 Apr 2022 12:47:17 -0400 Subject: PR28708: debuginfod: use MHD_USE_EPOLL for microhttpd threads Testing on s390x and other architectures indicates that this configuration reduces thundering-herd wakeups and saturation of a small number of threads. The run-debuginfod-webapi-concurrency.sh test appears solid now. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 5 +++++ debuginfod/debuginfod.cxx | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index dfb5d42e..38a389e7 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,8 @@ +2022-04-03 Frank Ch. Eigler + + * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to + encourage more round-robin dispatch of incoming connections. + 2021-12-09 Alexander Kanavin * debuginfod-client.c (cache_clean_default_interval_s): Change type to diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index bb8e8e10..99924d36 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3880,6 +3880,9 @@ main (int argc, char *argv[]) | MHD_USE_INTERNAL_POLLING_THREAD #else | MHD_USE_SELECT_INTERNALLY +#endif +#ifdef MHD_USE_EPOLL + | MHD_USE_EPOLL #endif | MHD_USE_DEBUG, /* report errors to stderr */ http_port, @@ -3894,6 +3897,9 @@ main (int argc, char *argv[]) | MHD_USE_INTERNAL_POLLING_THREAD #else | MHD_USE_SELECT_INTERNALLY +#endif +#ifdef MHD_USE_EPOLL + | MHD_USE_EPOLL #endif | MHD_USE_IPv6 | MHD_USE_DEBUG, /* report errors to stderr */ -- cgit v1.2.1 From 4e4082be03deee515f3b6ce56eab8f2193490535 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Sun, 3 Apr 2022 19:42:48 -0400 Subject: debuginfod: use single ipv4+ipv6 microhttpd daemon configuration Use a single MHD_USE_DUAL_STACK mhd daemon. This way, the thread connection pool is not doubled, saving memory and better matching user expectations. A slight tweak to logging is required to pull IPv4 remote addresses back out, and also to allow IPv6 ::-laden address forwarding through federation links. Signed-off-by: Frank Ch. Eigler --- debuginfod/ChangeLog | 9 ++++++ debuginfod/debuginfod-client.c | 12 +++---- debuginfod/debuginfod.cxx | 71 ++++++++++++++++++++++-------------------- 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 38a389e7..578d951d 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,12 @@ +2022-04-03 Frank Ch. Eigler + + * debuginfod.cxx (main): Use single dual-stack daemon setup, + rather than duplicate ipv4 and ipv6. + (conninfo, handle_buildid): Represent ipv4-mapped ipv6 addresses + in their native ipv4 form for logging and X-F-F: purposes. + * debuginfod-client.c (debuginfod_add_http_header): Tolerate + colons in http header values. + 2022-04-03 Frank Ch. Eigler * debuginfod.cxx (main): Use MHD_USE_EPOLL for libmicrohttpd, to diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 024b0954..41ba88a5 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1548,13 +1548,13 @@ int debuginfod_find_source(debuginfod_client *client, int debuginfod_add_http_header (debuginfod_client *client, const char* header) { /* Sanity check header value is of the form Header: Value. - It should contain exactly one colon that isn't the first or + It should contain at least one colon that isn't the first or last character. */ - char *colon = strchr (header, ':'); - if (colon == NULL - || colon == header - || *(colon + 1) == '\0' - || strchr (colon + 1, ':') != NULL) + char *colon = strchr (header, ':'); /* first colon */ + if (colon == NULL /* present */ + || colon == header /* not at beginning - i.e., have a header name */ + || *(colon + 1) == '\0') /* not at end - i.e., have a value */ + /* NB: but it's okay for a value to contain other colons! */ return -EINVAL; struct curl_slist *temp = curl_slist_append (client->headers, header); diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 99924d36..054ae07a 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1063,9 +1063,22 @@ conninfo (struct MHD_Connection * conn) sts = getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), servname, sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV); } else if (so && so->sa_family == AF_INET6) { - sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), - servname, sizeof (servname), NI_NUMERICHOST | NI_NUMERICSERV); + struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so; + if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) { + struct sockaddr_in addr4; + memset (&addr4, 0, sizeof(addr4)); + addr4.sin_family = AF_INET; + addr4.sin_port = addr6->sin6_port; + memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr)); + sts = getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4), + hostname, sizeof (hostname), servname, sizeof (servname), + NI_NUMERICHOST | NI_NUMERICSERV); + } else { + sts = getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } } + if (sts != 0) { hostname[0] = servname[0] = '\0'; } @@ -2008,13 +2021,26 @@ and will not query the upstream servers"); MHD_CONNECTION_INFO_CLIENT_ADDRESS); struct sockaddr *so = u ? u->client_addr : 0; char hostname[256] = ""; // RFC1035 - if (so && so->sa_family == AF_INET) + if (so && so->sa_family == AF_INET) { (void) getnameinfo (so, sizeof (struct sockaddr_in), hostname, sizeof (hostname), NULL, 0, NI_NUMERICHOST); - else if (so && so->sa_family == AF_INET6) - (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, - NI_NUMERICHOST); - + } else if (so && so->sa_family == AF_INET6) { + struct sockaddr_in6* addr6 = (struct sockaddr_in6*) so; + if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) { + struct sockaddr_in addr4; + memset (&addr4, 0, sizeof(addr4)); + addr4.sin_family = AF_INET; + addr4.sin_port = addr6->sin6_port; + memcpy (&addr4.sin_addr.s_addr, addr6->sin6_addr.s6_addr+12, sizeof(addr4.sin_addr.s_addr)); + (void) getnameinfo ((struct sockaddr*) &addr4, sizeof (addr4), + hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } else { + (void) getnameinfo (so, sizeof (struct sockaddr_in6), hostname, sizeof (hostname), NULL, 0, + NI_NUMERICHOST); + } + } + string xff_complete = string("X-Forwarded-For: ")+xff+string(hostname); debuginfod_add_http_header (client, xff_complete.c_str()); } @@ -3873,26 +3899,8 @@ main (int argc, char *argv[]) } } - // Start httpd server threads. Separate pool for IPv4 and IPv6, in - // case the host only has one protocol stack. - MHD_Daemon *d4 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) -#if MHD_VERSION >= 0x00095300 - | MHD_USE_INTERNAL_POLLING_THREAD -#else - | MHD_USE_SELECT_INTERNALLY -#endif -#ifdef MHD_USE_EPOLL - | MHD_USE_EPOLL -#endif - | MHD_USE_DEBUG, /* report errors to stderr */ - http_port, - NULL, NULL, /* default accept policy */ - handler_cb, NULL, /* handler callback */ - MHD_OPTION_EXTERNAL_LOGGER, error_cb, NULL, - (connection_pool ? MHD_OPTION_THREAD_POOL_SIZE : MHD_OPTION_END), - (connection_pool ? (int)connection_pool : MHD_OPTION_END), - MHD_OPTION_END); - MHD_Daemon *d6 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) + // Start httpd server threads. Use a single dual-homed pool. + MHD_Daemon *d46 = MHD_start_daemon ((connection_pool ? 0 : MHD_USE_THREAD_PER_CONNECTION) #if MHD_VERSION >= 0x00095300 | MHD_USE_INTERNAL_POLLING_THREAD #else @@ -3901,7 +3909,7 @@ main (int argc, char *argv[]) #ifdef MHD_USE_EPOLL | MHD_USE_EPOLL #endif - | MHD_USE_IPv6 + | MHD_USE_DUAL_STACK | MHD_USE_DEBUG, /* report errors to stderr */ http_port, NULL, NULL, /* default accept policy */ @@ -3911,7 +3919,7 @@ main (int argc, char *argv[]) (connection_pool ? (int)connection_pool : MHD_OPTION_END), MHD_OPTION_END); - if (d4 == NULL && d6 == NULL) // neither ipv4 nor ipv6? boo + if (d46 == NULL) { sqlite3 *database = db; sqlite3 *databaseq = dbq; @@ -3922,8 +3930,6 @@ main (int argc, char *argv[]) } obatched(clog) << "started http server on " - << (d4 != NULL ? "IPv4 " : "") - << (d6 != NULL ? "IPv6 " : "") << "port=" << http_port << endl; // add maxigroom sql if -G given @@ -4043,8 +4049,7 @@ main (int argc, char *argv[]) pthread_join (it, NULL); /* Stop all the web service threads. */ - if (d4) MHD_stop_daemon (d4); - if (d6) MHD_stop_daemon (d6); + if (d46) MHD_stop_daemon (d46); if (! passive_p) { -- cgit v1.2.1 From 8db849976f07046d27b4217e9ebd08d5623acc4f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 1 Apr 2022 12:19:20 +0200 Subject: libelf: Return already gotten Elf_Data from elf_getdata_rawchunk elf_getdata_rawchunk keeps a list of Elf_Data_Chunk to track which Elf_Data structures have already been requested. This allows elf_end to clean up all internal data structures and the Elf_Data d_buf if it was malloced. But it didn't check if a chunk was already requested earlier. This meant that if for example dwelf_elf_gnu_build_id was called multiple times to lookup a build-id from the phdrs a new Elf_Data_Chunk was created. This could slowly leak memory. So also keep track of the offset from which the size and type of the rawdata was requested so we can return existing data if it is requested multiple times. Note that the current cache is a simple linked list but the chain is normally not that long. It is normally used to get chunks from the phdrs, and there are normally less than 10. Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 7 +++++++ libelf/elf_getdata_rawchunk.c | 16 ++++++++++++++++ libelf/libelfP.h | 1 + 3 files changed, 24 insertions(+) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 299179cb..985f795d 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,10 @@ +2022-04-01 Mark Wielaard + + * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field. + * elf_getdata_rawchunk.c (elf_getdata_rawchunk): Check whether the + requested chunk, offset, size and type, was already handed out. + Set new Elf_Data_Chunk offset field. + 2022-03-29 Mark Wielaard * gelf_xlate.c (START): Define and use sz variable. diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c index 1072f7de..2f55cbb4 100644 --- a/libelf/elf_getdata_rawchunk.c +++ b/libelf/elf_getdata_rawchunk.c @@ -1,5 +1,6 @@ /* Return converted data from raw chunk of ELF file. Copyright (C) 2007, 2014, 2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -75,6 +76,20 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type) rwlock_rdlock (elf->lock); + /* Maybe we already got this chunk? */ + Elf_Data_Chunk *rawchunks = elf->state.elf.rawchunks; + while (rawchunks != NULL) + { + if ((rawchunks->offset == offset || size == 0) + && rawchunks->data.d.d_size == size + && rawchunks->data.d.d_type == type) + { + result = &rawchunks->data.d; + goto out; + } + rawchunks = rawchunks->next; + } + size_t align = __libelf_type_align (elf->class, type); if (elf->map_address != NULL) { @@ -171,6 +186,7 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size, Elf_Type type) chunk->data.d.d_type = type; chunk->data.d.d_align = align; chunk->data.d.d_version = EV_CURRENT; + chunk->offset = offset; rwlock_unlock (elf->lock); rwlock_wrlock (elf->lock); diff --git a/libelf/libelfP.h b/libelf/libelfP.h index 2c6995bb..56331f45 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -266,6 +266,7 @@ typedef struct Elf_Data_Chunk Elf_Scn dummy_scn; struct Elf_Data_Chunk *next; }; + int64_t offset; /* The original raw offset in the Elf image. */ } Elf_Data_Chunk; -- cgit v1.2.1 From 83251d4091241acddbdcf16f814e3bc6ef3df49a Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Wed, 6 Apr 2022 13:38:04 -0400 Subject: debuginfod: Include "IPv4 IPv6" in server startup message At startup debuginfod prints a message indicating the port which the server is listening to. Prior to commit 4e4082be03 this message would include "IPv4" and/or "IPv6" [...] (48671/48671): started http server on IPv4 IPv6 port=8002 As of commit 4e4082be03 the IP versions have been removed from this message. This change can cause issues in any applications that parse the message for this information. Fix this by adding "IPv4 IPv6" back to the message. Signed-off-by: Aaron Merey --- debuginfod/debuginfod.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 054ae07a..9c0217f6 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3929,7 +3929,7 @@ main (int argc, char *argv[]) error (EXIT_FAILURE, 0, "cannot start http server at port %d", http_port); } - obatched(clog) << "started http server on " + obatched(clog) << "started http server on IPv4 IPv6 " << "port=" << http_port << endl; // add maxigroom sql if -G given -- cgit v1.2.1 From 55e67ce44439f7b4a97d268cd7da261b9bda3277 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 7 Apr 2022 15:16:41 +0200 Subject: config: Add versioned requires on libs/libelf for debuginfod-client elfutils-debuginfod-client contains the debuginfod-client binary which is uses libelf and libdw. Add explicit versioned requires on elfutils-libs and elfutils-libelf so they will always be in sync like done with all other inter sub package dependencies. Signed-off-by: Mark Wielaard --- config/ChangeLog | 5 +++++ config/elfutils.spec.in | 3 +++ 2 files changed, 8 insertions(+) diff --git a/config/ChangeLog b/config/ChangeLog index acbaaa88..d2d61c6c 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2022-04-07 Mark Wielaard + + * elfutils.spec.in (debuginfod-client): Add an explicit requires + on elfutils-libs and elfutils-libelf. + 2021-11-10 Mark Wielaard * elfutils.spec.in: Update for 0.186. diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index aac0dffc..49e5a016 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -141,6 +141,9 @@ profiling) of processes. %package debuginfod-client Summary: Library and command line client for build-id HTTP ELF/DWARF server License: GPLv3+ and (GPLv2+ or LGPLv3+) +# For debuginfod-find binary +Requires: elfutils-libs = %{version}-%{release} +Requires: elfutils-libelf = %{version}-%{release} %package debuginfod-client-devel Summary: Libraries and headers to build debuginfod client applications -- cgit v1.2.1 From 399b55a75830f1854c8da9f29282810e82f270b6 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 13 Apr 2022 17:23:57 +0200 Subject: libdw: Add DWARF5 package file section identifiers, DW_SECT_* This only adds the constants. There is no handling of DWARF package file (dwp) files for now. https://sourceware.org/bugzilla/show_bug.cgi?id=29048 Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 5 +++++ libdw/dwarf.h | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index ca742e6b..38f3a7e2 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2022-04-13 Mark Wielaard + + * dwarf.h: Add DWARF5 package file section identifiers, + DW_SECT_*. + 2021-10-20 John M Mellor-Crummey * dwarf_linecontext.c: New file. diff --git a/libdw/dwarf.h b/libdw/dwarf.h index 3ce7f236..c961bc36 100644 --- a/libdw/dwarf.h +++ b/libdw/dwarf.h @@ -934,6 +934,19 @@ enum DW_LLE_GNU_start_length_entry = 0x3 }; +/* DWARF5 package file section identifiers. */ +enum + { + DW_SECT_INFO = 1, + /* Reserved = 2, */ + DW_SECT_ABBREV = 3, + DW_SECT_LINE = 4, + DW_SECT_LOCLISTS = 5, + DW_SECT_STR_OFFSETS = 6, + DW_SECT_MACRO = 7, + DW_SECT_RNGLISTS = 8, + }; + /* DWARF call frame instruction encodings. */ enum -- cgit v1.2.1 From 8b568fdea8e1baea3d68cc38dec587e4c9219276 Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Fri, 8 Apr 2022 19:37:11 -0400 Subject: PR29022: 000-permissions files cause problems for backups 000-permission files currently used for negative caching can cause permission problems for some backup software and disk usage checkers. Fix this by using empty files for negative caching instead. Also use each empty file's mtime to determine the time since last download attempt instead of the cache_miss_s file's mtime. https://sourceware.org/bugzilla/show_bug.cgi?id=29022 Tested-by: Milian Wolff Signed-off-by: Aaron Merey --- debuginfod/ChangeLog | 8 +++ debuginfod/debuginfod-client.c | 94 +++++++++++++++++++----------- tests/ChangeLog | 11 ++++ tests/Makefile.am | 4 +- tests/run-debuginfod-000-permission.sh | 83 -------------------------- tests/run-debuginfod-federation-link.sh | 4 +- tests/run-debuginfod-federation-metrics.sh | 4 +- tests/run-debuginfod-federation-sqlite.sh | 4 +- tests/run-debuginfod-negative-cache.sh | 83 ++++++++++++++++++++++++++ tests/run-debuginfod-tmp-home.sh | 2 +- 10 files changed, 170 insertions(+), 127 deletions(-) delete mode 100755 tests/run-debuginfod-000-permission.sh create mode 100755 tests/run-debuginfod-negative-cache.sh diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 578d951d..d6f7b282 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,11 @@ +2022-04-13 Aaron Merey + + * debuginfod-client.c (debuginfod_query_server): + Drop st_mode check. Add st_size > 0 check. + Save target_mtime before calling + debuginfod_config_cache. unlink target_cache_path + on EACCESS. Create target_cache_path with DEFFILEMODE. + 2022-04-03 Frank Ch. Eigler * debuginfod.cxx (main): Use single dual-stack daemon setup, diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 41ba88a5..58ef6442 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -138,7 +138,7 @@ static const char *cache_clean_interval_filename = "cache_clean_interval_s"; static const long cache_clean_default_interval_s = 86400; /* 1 day */ /* The cache_miss_default_s within the debuginfod cache specifies how - frequently the 000-permision file should be released.*/ + frequently the empty file should be released.*/ static const long cache_miss_default_s = 600; /* 10 min */ static const char *cache_miss_filename = "cache_miss_s"; @@ -767,42 +767,66 @@ debuginfod_query_server (debuginfod_client *c, if (rc != 0) goto out; - struct stat st; - /* Check if the file exists and it's of permission 000; must check - explicitly rather than trying to open it first (PR28240). */ - if (stat(target_cache_path, &st) == 0 - && (st.st_mode & 0777) == 0) + /* Check if the target is already in the cache. */ + int fd = open(target_cache_path, O_RDONLY); + if (fd >= 0) { - time_t cache_miss; - - rc = debuginfod_config_cache(cache_miss_path, cache_miss_default_s, &st); - if (rc < 0) - goto out; + struct stat st; + if (fstat(fd, &st) != 0) + { + rc = -errno; + close (fd); + goto out; + } - cache_miss = (time_t)rc; - if (time(NULL) - st.st_mtime <= cache_miss) + /* If the file is non-empty, then we are done. */ + if (st.st_size > 0) { - rc = -ENOENT; - goto out; - } + if (path != NULL) + { + *path = strdup(target_cache_path); + if (*path == NULL) + { + rc = -errno; + close (fd); + goto out; + } + } + /* Success!!!! */ + rc = fd; + goto out; + } else - /* TOCTOU non-problem: if another task races, puts a working - download or a 000 file in its place, unlinking here just - means WE will try to download again as uncached. */ - unlink(target_cache_path); - } - - /* If the target is already in the cache (known not-000 - PR28240), - then we are done. */ - int fd = open (target_cache_path, O_RDONLY); - if (fd >= 0) - { - /* Success!!!! */ - if (path != NULL) - *path = strdup(target_cache_path); - rc = fd; - goto out; + { + /* The file is empty. Attempt to download only if enough time + has passed since the last attempt. */ + time_t cache_miss; + time_t target_mtime = st.st_mtime; + rc = debuginfod_config_cache(cache_miss_path, + cache_miss_default_s, &st); + if (rc < 0) + { + close(fd); + goto out; + } + + cache_miss = (time_t)rc; + if (time(NULL) - target_mtime <= cache_miss) + { + close(fd); + rc = -ENOENT; + goto out; + } + else + /* TOCTOU non-problem: if another task races, puts a working + download or an empty file in its place, unlinking here just + means WE will try to download again as uncached. */ + unlink(target_cache_path); + } } + else if (errno == EACCES) + /* Ensure old 000-permission files are not lingering in the cache. */ + unlink(target_cache_path); long timeout = default_timeout; const char* timeout_envvar = getenv(DEBUGINFOD_TIMEOUT_ENV_VAR); @@ -1298,11 +1322,11 @@ debuginfod_query_server (debuginfod_client *c, } } while (num_msg > 0); - /* Create a 000-permission file named as $HOME/.cache if the query - fails with ENOENT.*/ + /* Create an empty file named as $HOME/.cache if the query fails + with ENOENT.*/ if (rc == -ENOENT) { - int efd = open (target_cache_path, O_CREAT|O_EXCL, 0000); + int efd = open (target_cache_path, O_CREAT|O_EXCL, DEFFILEMODE); if (efd >= 0) close(efd); } diff --git a/tests/ChangeLog b/tests/ChangeLog index c195f9f7..6cb0d649 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,14 @@ +2022-04-13 Aaron Merey + + * Makefile.am (TESTS): Remove run-debuginfod-000-permission.sh + and add run-debuginfod-negative-cache.sh. + (EXTRA_DIST): Likewise. + * run-debuginfod-federation-link.sh: Update comments about + negative-hit file. + * run-debuginfod-federation-metrics.sh: Likewise. + * run-debuginfod-federation-sqlite.sh: Likewise. + * run-debuginfod-tmp-home.sh: Likewise. + 2022-03-20 Mark Wielaard * run-large-elf-file.sh: Check elf class of addsections binary. diff --git a/tests/Makefile.am b/tests/Makefile.am index b2da2c83..84c3950a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -227,7 +227,7 @@ TESTS += run-debuginfod-dlopen.sh \ run-debuginfod-file.sh \ run-debuginfod-sizetime.sh \ run-debuginfod-malformed.sh \ - run-debuginfod-000-permission.sh \ + run-debuginfod-negative-cache.sh \ run-debuginfod-tmp-home.sh \ run-debuginfod-writable.sh \ run-debuginfod-no-urls.sh \ @@ -529,7 +529,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ run-debuginfod-sizetime.sh \ run-debuginfod-dlopen.sh \ run-debuginfod-malformed.sh \ - run-debuginfod-000-permission.sh \ + run-debuginfod-negative-cache.sh \ run-debuginfod-tmp-home.sh \ run-debuginfod-writable.sh \ run-debuginfod-no-urls.sh \ diff --git a/tests/run-debuginfod-000-permission.sh b/tests/run-debuginfod-000-permission.sh deleted file mode 100755 index 1f46c341..00000000 --- a/tests/run-debuginfod-000-permission.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (C) 2019-2021 Red Hat, Inc. -# This file is part of elfutils. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# elfutils is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -. $srcdir/debuginfod-subr.sh - -# for test case debugging, uncomment: -set -x -unset VALGRIND_CMD -DB=${PWD}/.debuginfod_tmp.sqlite -tempfiles $DB -export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache -# This variable is essential and ensures no time-race for claiming ports occurs -# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test -base=8000 -get_ports -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ - -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 & -PID1=$! -tempfiles vlog$PORT1 -errfiles vlog$PORT1 -# Server must become ready -wait_ready $PORT1 'ready' 1 -export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / - -# Check thread comm names -ps -q $PID1 -e -L -o '%p %c %a' | grep groom -ps -q $PID1 -e -L -o '%p %c %a' | grep scan -ps -q $PID1 -e -L -o '%p %c %a' | grep traverse - -######################################################################## -# PR25628 -rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests - -# The query is designed to fail, while the 000-permission file should be created. -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then - echo "could not find cache in $DEBUGINFOD_CACHE_PATH" - err -fi - -if [ `stat -c "%A" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != "----------" ]; then - echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is readable" - err -fi - -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` -if [ "$bytecount_before" != "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} has changed." - err -fi - -# set cache_miss_s to 0 and sleep 1 to make the mtime expire. -echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s -sleep 1 -bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` -testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true -bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` -if [ "$bytecount_before" == "$bytecount_after" ]; then - echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} should be incremented." - err -fi - -kill $PID1 -wait $PID1 -PID1=0 -exit 0 diff --git a/tests/run-debuginfod-federation-link.sh b/tests/run-debuginfod-federation-link.sh index 4f043741..d7827436 100755 --- a/tests/run-debuginfod-federation-link.sh +++ b/tests/run-debuginfod-federation-link.sh @@ -136,7 +136,7 @@ file -L L/foo export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID @@ -144,7 +144,7 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID export DEBUGINFOD_URLS=127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID diff --git a/tests/run-debuginfod-federation-metrics.sh b/tests/run-debuginfod-federation-metrics.sh index 3da457e8..3d716246 100755 --- a/tests/run-debuginfod-federation-metrics.sh +++ b/tests/run-debuginfod-federation-metrics.sh @@ -130,7 +130,7 @@ file -L L/foo export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID @@ -138,7 +138,7 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID export DEBUGINFOD_URLS=127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # test parallel queries in client diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index 449df5db..bb3cda12 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -117,7 +117,7 @@ file -L L/foo export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID @@ -125,7 +125,7 @@ testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID export DEBUGINFOD_URLS=127.0.0.1:$PORT1 rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID && false || true -rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop 000-perm negative-hit file +rm -f $DEBUGINFOD_CACHE_PATH/$BUILDID/debuginfo # drop negative-hit file export DEBUGINFOD_URLS=127.0.0.1:$PORT2 testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID # test parallel queries in client diff --git a/tests/run-debuginfod-negative-cache.sh b/tests/run-debuginfod-negative-cache.sh new file mode 100755 index 00000000..f40e99c5 --- /dev/null +++ b/tests/run-debuginfod-negative-cache.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# +# Copyright (C) 2019-2021 Red Hat, Inc. +# This file is part of elfutils. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# elfutils is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +. $srcdir/debuginfod-subr.sh + +# for test case debugging, uncomment: +set -x +unset VALGRIND_CMD +DB=${PWD}/.debuginfod_tmp.sqlite +tempfiles $DB +export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache +# This variable is essential and ensures no time-race for claiming ports occurs +# set base to a unique multiple of 100 not used in any other 'run-debuginfod-*' test +base=8000 +get_ports +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -p $PORT1 -d $DB \ + -t0 -g0 -v ${PWD} > vlog$PORT1 2>&1 & +PID1=$! +tempfiles vlog$PORT1 +errfiles vlog$PORT1 +# Server must become ready +wait_ready $PORT1 'ready' 1 +export DEBUGINFOD_URLS=http://127.0.0.1:$PORT1/ # or without trailing / + +# Check thread comm names +ps -q $PID1 -e -L -o '%p %c %a' | grep groom +ps -q $PID1 -e -L -o '%p %c %a' | grep scan +ps -q $PID1 -e -L -o '%p %c %a' | grep traverse + +######################################################################## +# PR25628 +rm -rf $DEBUGINFOD_CACHE_PATH # clean it from previous tests + +# The query is designed to fail, while the empty file should be created. +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +if [ ! -f $DEBUGINFOD_CACHE_PATH/01234567/debuginfo ]; then + echo "could not find cache in $DEBUGINFOD_CACHE_PATH" + err +fi + +if [ `stat -c "%s" $DEBUGINFOD_CACHE_PATH/01234567/debuginfo` != 0 ]; then + echo "The cache $DEBUGINFOD_CACHE_PATH/01234567/debuginfo is not empty" + err +fi + +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +if [ "$bytecount_before" != "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} has changed." + err +fi + +# set cache_miss_s to 0 and sleep 1 to make the mtime expire. +echo 0 > $DEBUGINFOD_CACHE_PATH/cache_miss_s +sleep 1 +bytecount_before=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo 01234567 || true +bytecount_after=`curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_transfer_bytes_count{code="404",type="debuginfo"}'` +if [ "$bytecount_before" == "$bytecount_after" ]; then + echo "http_responses_transfer_bytes_count{code="404",type="debuginfo"} should be incremented." + err +fi + +kill $PID1 +wait $PID1 +PID1=0 +exit 0 diff --git a/tests/run-debuginfod-tmp-home.sh b/tests/run-debuginfod-tmp-home.sh index 4256f6f2..5946777a 100755 --- a/tests/run-debuginfod-tmp-home.sh +++ b/tests/run-debuginfod-tmp-home.sh @@ -104,7 +104,7 @@ fi # priority over $HOME/.cache, $XDG_CACHE_HOME. cp -vr $DEBUGINFOD_CACHE_PATH tmphome/.debuginfod_client_cache || true # ||true is for tolerating errors, such a valgrind or something else -# leaving 000-perm files in there +# leaving negative-hit files in there # Add a file that doesn't exist in $HOME/.cache, $XDG_CACHE_HOME. mkdir tmphome/.debuginfod_client_cache/deadbeef -- cgit v1.2.1 From 46e4d78de4a51b6e7ea2a2dba150ac9599c29c2f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 14 Apr 2022 13:26:57 +0200 Subject: tests: Don't try to corrupt sqlite database during test. In run-debuginfod-federation-sqlite.sh we used to try to corrupt the sqlite database while the debuginfod server was running and check it detected errors, but that was unreliably and slightly dangerous since part of the database was already mapped into memory. Instead trigger some some random activity, then trigger a shutdown. Signed-off-by: Mark Wielaard --- tests/ChangeLog | 5 +++++ tests/run-debuginfod-federation-sqlite.sh | 17 +++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index 6cb0d649..e49bff05 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2022-04-14 Mark Wielaard + + * run-debuginfod-federation-sqlite.sh: Don't try to corrupt + sqlite database. + 2022-04-13 Aaron Merey * Makefile.am (TESTS): Remove run-debuginfod-000-permission.sh diff --git a/tests/run-debuginfod-federation-sqlite.sh b/tests/run-debuginfod-federation-sqlite.sh index bb3cda12..d9321526 100755 --- a/tests/run-debuginfod-federation-sqlite.sh +++ b/tests/run-debuginfod-federation-sqlite.sh @@ -167,11 +167,11 @@ curl -s http://127.0.0.1:$PORT1/metrics | grep 'http_responses_after_you.*' # waiting. A few hundred ms is typical on this developer's workstation. ######################################################################## -# Corrupt the sqlite database and get debuginfod to trip across its errors -curl -s http://127.0.0.1:$PORT1/metrics | grep 'sqlite3.*reset' -dd if=/dev/zero of=$DB bs=1 count=1 - -# trigger some random activity that's Sure to get sqlite3 upset +# Trigger some some random activity, then trigger a clean shutdown. +# We used to try to corrupt the database while the debuginfod server +# was running and check it detected errors, but that was unreliably +# and slightly dangerous since part of the database was already mapped +# into memory. kill -USR1 $PID1 wait_ready $PORT1 'thread_work_total{role="traverse"}' 2 wait_ready $PORT1 'thread_work_pending{role="scan"}' 0 @@ -179,14 +179,15 @@ wait_ready $PORT1 'thread_busy{role="scan"}' 0 kill -USR2 $PID1 wait_ready $PORT1 'thread_work_total{role="groom"}' 2 curl -s http://127.0.0.1:$PORT1/buildid/beefbeefbeefd00dd00d/debuginfo > /dev/null || true -curl -s http://127.0.0.1:$PORT1/metrics | grep 'error_count.*sqlite' -# Run the tests again without the servers running. The target file should -# be found in the cache. kill -INT $PID1 $PID2 wait $PID1 $PID2 PID1=0 PID2=0 + +# Run the tests again without the servers running. The target file should +# be found in the cache. + tempfiles .debuginfod_* testrun ${abs_builddir}/debuginfod_build_id_find -e F/prog 1 -- cgit v1.2.1 From 21f089d190ad5f5ebbbbea1a3e1db1acfec1dbe9 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 17 Apr 2022 04:35:44 +0200 Subject: libdw: Remove unused atomics.h include from libdwP.h Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 4 ++++ libdw/libdwP.h | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 38f3a7e2..631f2f2a 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,7 @@ +2022-04-16 Mark Wielaard + + * libdwP.h: Remove atomics.h include. + 2022-04-13 Mark Wielaard * dwarf.h: Add DWARF5 package file section identifiers, diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 360ad01a..56b388c1 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -35,7 +35,6 @@ #include #include -#include "atomics.h" /* Known location expressions already decoded. */ -- cgit v1.2.1 From 5b497d8da4920bf7b63a4aa3752cf580b3ad654c Mon Sep 17 00:00:00 2001 From: Di Chen Date: Tue, 1 Mar 2022 20:44:38 +0800 Subject: readelf: Don't consider padding DT_NULL as dynamic section entry when using `$ eu-readelf -d {FILE}` to get the number of dynamic section entris, it wrongly counts the padding DT_NULLs as dynamic section entries. However, DT_NULL Marks end of dynamic section. They should not be considered as dynamic section entries. https://sourceware.org/bugzilla/show_bug.cgi?id=28928 Signed-off-by: Di Chen --- src/ChangeLog | 6 ++++++ src/readelf.c | 31 +++++++++++++++++++++++++------ tests/ChangeLog | 7 +++++++ tests/alldts.c | 5 +++-- tests/run-alldts.sh | 2 +- tests/run-readelf-d.sh | 7 +------ 6 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c0a3db3f..f563e993 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2022-03-01 Di Chen + + * readelf.c (get_dyn_ents): New function. + (handle_dynamic): Use get_dyn_ents to get the actual number of + Dynamic entries in the section. + 2022-03-27 Mark Wielaard * addr2line.c: Replace error (EXIT_FAILURE, ...) with error_exit(...). diff --git a/src/readelf.c b/src/readelf.c index 41d64d32..4b275ece 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1772,6 +1772,24 @@ print_dt_posflag_1 (int class, GElf_Xword d_val) } +static size_t +get_dyn_ents (Elf_Data * dyn_data) +{ + GElf_Dyn *dyn; + size_t dyn_idx = 0; + do + { + GElf_Dyn dyn_mem; + dyn = gelf_getdyn(dyn_data, dyn_idx, &dyn_mem); + if (dyn != NULL) + ++dyn_idx; + } + while (dyn != NULL && dyn->d_tag != DT_NULL); + + return dyn_idx; +} + + static void handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) { @@ -1781,19 +1799,20 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) Elf_Data *data; size_t cnt; size_t shstrndx; - size_t sh_entsize; + size_t dyn_ents; /* Get the data of the section. */ data = elf_getdata (scn, NULL); if (data == NULL) return; + /* Get the dynamic section entry number */ + dyn_ents = get_dyn_ents (data); + /* Get the section header string table index. */ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)) error_exit (0, _("cannot get section header string table index")); - sh_entsize = gelf_fsize (ebl->elf, ELF_T_DYN, 1, EV_CURRENT); - glink = gelf_getshdr (elf_getscn (ebl->elf, shdr->sh_link), &glink_mem); if (glink == NULL) error_exit (0, _("invalid sh_link value in section %zu"), @@ -1803,15 +1822,15 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr) \nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", "\ \nDynamic segment contains %lu entries:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n", - shdr->sh_size / sh_entsize), - (unsigned long int) (shdr->sh_size / sh_entsize), + dyn_ents), + (unsigned long int) dyn_ents, class == ELFCLASS32 ? 10 : 18, shdr->sh_addr, shdr->sh_offset, (int) shdr->sh_link, elf_strptr (ebl->elf, shstrndx, glink->sh_name)); fputs_unlocked (_(" Type Value\n"), stdout); - for (cnt = 0; cnt < shdr->sh_size / sh_entsize; ++cnt) + for (cnt = 0; cnt < dyn_ents; ++cnt) { GElf_Dyn dynmem; GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem); diff --git a/tests/ChangeLog b/tests/ChangeLog index e49bff05..c734b260 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2022-03-01 Di Chen + + * alldts.c (dtflags): Put DT_NULL last. + * run-alldts.sh: NULL comes last. + * run-readelf-d.sh: Adjust Dynamic entries, remove DT_NULL + padding. + 2022-04-14 Mark Wielaard * run-debuginfod-federation-sqlite.sh: Don't try to corrupt diff --git a/tests/alldts.c b/tests/alldts.c index 3e9f9fe6..d0fe4f24 100644 --- a/tests/alldts.c +++ b/tests/alldts.c @@ -44,7 +44,7 @@ main (void) Dwelf_Strent *shstrtabse; const Elf32_Sword dtflags[] = { - DT_NULL, DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT, + DT_NEEDED, DT_PLTRELSZ, DT_PLTGOT, DT_HASH, DT_STRTAB, DT_SYMTAB, DT_RELA, DT_RELASZ, DT_RELAENT, DT_STRSZ, DT_SYMENT, DT_INIT, DT_FINI, DT_SONAME, DT_RPATH, @@ -61,7 +61,8 @@ main (void) DT_GNU_LIBLIST, DT_CONFIG, DT_DEPAUDIT, DT_AUDIT, DT_PLTPAD, DT_MOVETAB, DT_SYMINFO, DT_RELACOUNT, DT_RELCOUNT, DT_FLAGS_1, DT_VERDEF, DT_VERDEFNUM, - DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER + DT_VERNEED, DT_VERNEEDNUM, DT_AUXILIARY, DT_FILTER, + DT_NULL }; const int ndtflags = sizeof (dtflags) / sizeof (dtflags[0]); diff --git a/tests/run-alldts.sh b/tests/run-alldts.sh index 6a9a9ece..ce3630b0 100755 --- a/tests/run-alldts.sh +++ b/tests/run-alldts.sh @@ -27,7 +27,6 @@ testrun_compare ${abs_top_builddir}/src/readelf -d testfile-alldts <<\EOF Dynamic segment contains 66 entries: Addr: 0x000001a0 Offset: 0x000078 Link to section: [ 0] '' Type Value - NULL NEEDED Shared library: [(null)] PLTRELSZ 3735928559 (bytes) PLTGOT 0xdeadbeef @@ -93,6 +92,7 @@ Dynamic segment contains 66 entries: VERNEEDNUM 3735928559 AUXILIARY 0xdeadbeef FILTER 0xdeadbeef + NULL EOF exit 0 diff --git a/tests/run-readelf-d.sh b/tests/run-readelf-d.sh index d0b6ed24..69b01c49 100755 --- a/tests/run-readelf-d.sh +++ b/tests/run-readelf-d.sh @@ -34,7 +34,7 @@ testfiles testlib_dynseg.so testrun_compare ${abs_top_builddir}/src/readelf -d testlib_dynseg.so <<\EOF -Dynamic segment contains 28 entries: +Dynamic segment contains 23 entries: Addr: 0x00000000000017e0 Offset: 0x0007e0 Link to section: [ 3] '.dynstr' Type Value PLTGOT 0x00000000000019c8 @@ -60,11 +60,6 @@ Dynamic segment contains 28 entries: VERNEED 0x0000000000000498 VERNEEDNUM 2 NULL - NULL - NULL - NULL - NULL - NULL EOF exit 0 -- cgit v1.2.1 From 21fa92319657ca479ae108967fd41ac523a2f876 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 19 Apr 2022 11:25:42 +0200 Subject: readelf: Define dyn_mem outside the while loop. The GCC address sanitizer might complain otherwise: stack-use-after-scope src/readelf.c:1787 in get_dyn_ents Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/readelf.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index f563e993..6ef81862 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2022-04-19 Mark Wielaard + + * readelf.c (get_dyn_ents): Define dyn_mem outside the while loop. + 2022-03-01 Di Chen * readelf.c (get_dyn_ents): New function. diff --git a/src/readelf.c b/src/readelf.c index 4b275ece..4b6aab2b 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -1776,10 +1776,10 @@ static size_t get_dyn_ents (Elf_Data * dyn_data) { GElf_Dyn *dyn; + GElf_Dyn dyn_mem; size_t dyn_idx = 0; do { - GElf_Dyn dyn_mem; dyn = gelf_getdyn(dyn_data, dyn_idx, &dyn_mem); if (dyn != NULL) ++dyn_idx; -- cgit v1.2.1 From 7b046b7c060acc32c00748ee66ac350f77bc6571 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1=20via=20Elfutils-devel?= Date: Wed, 19 Jan 2022 13:31:35 +0100 Subject: config: simplify profile.*sh.in MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Simplify needless sh -c "cat glob 2>/dev/null" into cat glob 2>/dev/null under sh and fix re-expansion/-e protection under csh 2. Use $( instead of ` under sh 3. Assign to DEBUGINFOD_URLS directly and either export it or unset it Signed-off-by: Ahelenia Ziemiańska --- config/ChangeLog | 7 +++++++ config/profile.csh.in | 10 +++++----- config/profile.sh.in | 9 ++------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/config/ChangeLog b/config/ChangeLog index d2d61c6c..b9b1c44e 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,10 @@ +2022-01-19 Ahelenia Ziemiańska + + * profile.csh.in: Set DEBUGINFOD_URLS directly. Use "$0" and : + in sh -c. + * profile.sh.in: Set DEBUGINFOD_URLS directly. Don't use sh -c. + Use $() instead of ``. + 2022-04-07 Mark Wielaard * elfutils.spec.in (debuginfod-client): Add an explicit requires diff --git a/config/profile.csh.in b/config/profile.csh.in index 01f7c2f2..012e243a 100644 --- a/config/profile.csh.in +++ b/config/profile.csh.in @@ -1,4 +1,3 @@ - # $HOME/.login* or similar files may first set $DEBUGINFOD_URLS. # If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. # $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. @@ -7,10 +6,11 @@ if (! $?DEBUGINFOD_URLS) then set prefix="@prefix@" - set debuginfod_urls=`sh -c "cat @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` - if ( "$debuginfod_urls" != "" ) then - setenv DEBUGINFOD_URLS "$debuginfod_urls" + set DEBUGINFOD_URLS=`sh -c 'cat "$0"/*.urls; :' "@sysconfdir@/debuginfod" 2>/dev/null | tr '\n' ' '` + if ( "$DEBUGINFOD_URLS" != "" ) then + setenv DEBUGINFOD_URLS "$DEBUGINFOD_URLS" + else + unset DEBUGINFOD_URLS endif - unset debuginfod_urls unset prefix endif diff --git a/config/profile.sh.in b/config/profile.sh.in index afce3963..bad20b1e 100644 --- a/config/profile.sh.in +++ b/config/profile.sh.in @@ -1,4 +1,3 @@ - # $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS. # If $DEBUGINFOD_URLS is not set there, we set it from system *.url files. # $HOME/.*rc or similar files may then amend $DEBUGINFOD_URLS. @@ -7,11 +6,7 @@ if [ -z "$DEBUGINFOD_URLS" ]; then prefix="@prefix@" - debuginfod_urls=`sh -c "cat @sysconfdir@/debuginfod/*.urls 2>/dev/null" | tr '\n' ' '` - if [ -n "$debuginfod_urls" ]; then - DEBUGINFOD_URLS="$debuginfod_urls" - export DEBUGINFOD_URLS - fi - unset debuginfod_urls + DEBUGINFOD_URLS=$(cat "@sysconfdir@/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ') + [ -n "$DEBUGINFOD_URLS" ] && export DEBUGINFOD_URLS || unset DEBUGINFOD_URLS unset prefix fi -- cgit v1.2.1 From 318807e7f968fd70b80408e3df029c04365c47d8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sat, 23 Apr 2022 03:20:17 +0200 Subject: tests: Lower parallel lookups in run-debuginfod-webapi-concurrency.sh With 100 parallel lookups we sometimes see: Server reached connection limit. Closing inbound connection. Lower parallel lookups to 64 Signed-off-by: Mark Wielaard --- tests/ChangeLog | 4 ++++ tests/run-debuginfod-webapi-concurrency.sh | 7 ++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/ChangeLog b/tests/ChangeLog index c734b260..2286f53f 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2022-04-23 Mark Wielaard + + * run-debuginfod-webapi-concurrency.sh: Lower parallel lookups. + 2022-03-01 Di Chen * alldts.c (dtflags): Put DT_NULL last. diff --git a/tests/run-debuginfod-webapi-concurrency.sh b/tests/run-debuginfod-webapi-concurrency.sh index 402a6307..4928f6d0 100755 --- a/tests/run-debuginfod-webapi-concurrency.sh +++ b/tests/run-debuginfod-webapi-concurrency.sh @@ -47,12 +47,13 @@ do wait_ready $PORT1 'thread_busy{role="scan"}' 0 # Do a bunch of lookups in parallel - for jobs in `seq 100`; do + lookup_nr=64 + for jobs in `seq $lookup_nr`; do curl -s http://localhost:$PORT1/buildid/cee13b2ea505a7f37bd20d271c6bc7e5f8d2dfcb/debuginfo > /dev/null & done - # all 100 curls should succeed - wait_ready $PORT1 'http_responses_transfer_bytes_count{code="200",type="debuginfo"}' 100 + # all curls should succeed + wait_ready $PORT1 'http_responses_transfer_bytes_count{code="200",type="debuginfo"}' $lookup_nr (sleep 5; curl -s http://localhost:$PORT1/metrics | egrep 'error|responses'; -- cgit v1.2.1 From 3bcf887340fd47d0d8a3671cc45abe2989d1fd6c Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 24 Apr 2022 12:16:58 +0200 Subject: debuginfod: Use MHD_USE_ITC in MHD_start_daemon flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This prevents the "Server reached connection limit. Closing inbound connection." issue we have been seeing in the run-debuginfod-webapi-concurrency.sh testcase. From the manual: If the connection limit is reached, MHD’s behavior depends a bit on other options. If MHD_USE_ITC was given, MHD will stop accepting connections on the listen socket. This will cause the operating system to queue connections (up to the listen() limit) above the connection limit. Those connections will be held until MHD is done processing at least one of the active connections. If MHD_USE_ITC is not set, then MHD will continue to accept() and immediately close() these connections. https://sourceware.org/bugzilla/show_bug.cgi?id=28708 Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 4 ++++ debuginfod/debuginfod.cxx | 3 +++ tests/ChangeLog | 4 ++++ tests/run-debuginfod-webapi-concurrency.sh | 4 +++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index d6f7b282..0f1bca6f 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags. + 2022-04-13 Aaron Merey * debuginfod-client.c (debuginfod_query_server): diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index 9c0217f6..adca8208 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -3910,6 +3910,9 @@ main (int argc, char *argv[]) | MHD_USE_EPOLL #endif | MHD_USE_DUAL_STACK +#if MHD_VERSION >= 0x00095200 + | MHD_USE_ITC +#endif | MHD_USE_DEBUG, /* report errors to stderr */ http_port, NULL, NULL, /* default accept policy */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 2286f53f..44b8df88 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * run-debuginfod-webapi-concurrency.sh: Fix PR number in xfail. + 2022-04-23 Mark Wielaard * run-debuginfod-webapi-concurrency.sh: Lower parallel lookups. diff --git a/tests/run-debuginfod-webapi-concurrency.sh b/tests/run-debuginfod-webapi-concurrency.sh index 4928f6d0..47dcadcc 100755 --- a/tests/run-debuginfod-webapi-concurrency.sh +++ b/tests/run-debuginfod-webapi-concurrency.sh @@ -62,6 +62,8 @@ do PID1=0 done -xfail "grep Server.reached.connection vlog$PORT1" # PR18661 +# Note this xfail comes too late, the above wait_ready for +# http_responses_transfer_bytes_count will have failed. +xfail "grep Server.reached.connection vlog$PORT1" # PR28661 exit 0 -- cgit v1.2.1 From 6398e94e9ac9a170da088768198d4a2b6e989e19 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 24 Apr 2022 17:48:39 +0200 Subject: elfclassify: Fix --no-stdin flag The no-stdin option was using the wrong flag, classify_flag_stdin, instead of classify_flag_no_stdin. https://sourceware.org/bugzilla/show_bug.cgi?id=28724 Signed-off-by: Mark Wielaard --- src/ChangeLog | 4 ++++ src/elfclassify.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 6ef81862..fd87ce2f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * elfclassify.c (main): Use classify_flag_no_stdin for no-std in options. + 2022-04-19 Mark Wielaard * readelf.c (get_dyn_ents): Define dyn_mem outside the while loop. diff --git a/src/elfclassify.c b/src/elfclassify.c index 2f70b29a..25fe9a65 100644 --- a/src/elfclassify.c +++ b/src/elfclassify.c @@ -946,7 +946,7 @@ separated by newlines"), 2 }, { "stdin0", classify_flag_stdin0, NULL, 0, N_("Also read file names to process from standard input, \ separated by ASCII NUL bytes"), 2 }, - { "no-stdin", classify_flag_stdin, NULL, 0, + { "no-stdin", classify_flag_no_stdin, NULL, 0, N_("Do not read files from standard input (default)"), 2 }, { "compressed", 'z', NULL, 0, N_("Try to open compressed files or embedded (kernel) ELF images"), -- cgit v1.2.1 From 3cf386984c1870c2b39ec3fb47b0deb7b30535c3 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 24 Apr 2022 19:42:29 +0200 Subject: libelf: Check for mremap, elf_update needs it for ELF_C_RDWR_MMAP Add a AC_CHECK_FUNCS configure check for mremap. Some systems like KFreeBSD and the Hurd don't have it. Also add a configure warning because without mremap elf_update will often fail when ELF_C_RDWR_MMAP is used. ELF_C_RDWR_MMAP is an elfutils extension to libelf. https://sourceware.org/bugzilla/show_bug.cgi?id=27337 Signed-off-by: Mark Wielaard --- ChangeLog | 4 ++++ configure.ac | 5 ++++- libelf/ChangeLog | 4 ++++ libelf/elf_update.c | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3357f69b..f0cd28a8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * configure.ac (AC_CHECK_FUNCS): Add mremap. + 2021-03-20 Mark Wielaard * configure.ac: Remove -m64 on 32bit target comments for diff --git a/configure.ac b/configure.ac index 2418d474..33c4b5e5 100644 --- a/configure.ac +++ b/configure.ac @@ -435,7 +435,10 @@ AC_CHECK_DECLS([reallocarray],[],[], [#define _GNU_SOURCE #include ]) -AC_CHECK_FUNCS([process_vm_readv]) +AC_CHECK_FUNCS([process_vm_readv mremap]) + +AS_IF([test "x$ac_cv_func_mremap" = "xno"], + [AC_MSG_WARN([elf_update needs mremap to support ELF_C_RDWR_MMAP])]) AC_CHECK_HEADERS([error.h]) AC_CHECK_HEADERS([err.h]) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 985f795d..00d4ac0f 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2022-04-24 Mark Wielaard + + * elf_update.c (write_file): Check HAVE_MREMAP. + 2022-04-01 Mark Wielaard * libelfP.h (struct Elf_Data_Chunk): Add an int64_t offset field. diff --git a/libelf/elf_update.c b/libelf/elf_update.c index 9b8867ce..97ca9ca9 100644 --- a/libelf/elf_update.c +++ b/libelf/elf_update.c @@ -106,8 +106,10 @@ write_file (Elf *elf, int64_t size, int change_bo, size_t shnum) if (elf->cmd == ELF_C_RDWR_MMAP && (size_t) size > elf->maximum_size) { +#ifdef HAVE_MREMAP if (mremap (elf->map_address, elf->maximum_size, size, 0) == MAP_FAILED) +#endif { __libelf_seterrno (ELF_E_WRITE_ERROR); return -1; -- cgit v1.2.1 From 72823322be9a8f0143de21ccfb67a89696a9522f Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Sun, 24 Apr 2022 19:39:47 -0400 Subject: AUTHORS: Use generator script & git mailmap We can compute a pretty complete list of contributors. Signed-off-by: Frank Ch. Eigler --- .mailmap | 25 +++++++++++++++ AUTHORS | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- AUTHORS.sh | 12 +++++++ ChangeLog | 5 +++ 4 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 .mailmap create mode 100644 AUTHORS.sh diff --git a/.mailmap b/.mailmap new file mode 100644 index 00000000..fd42169b --- /dev/null +++ b/.mailmap @@ -0,0 +1,25 @@ +# help out git with erroneous or incomplete email address mappings + +Piotr Drąg +Domingo Becker +Ulrich Drepper +Ulrich Drepper +Hyu_gabaru Ryu_ichi +kiyoto hashida +Claudio Rodrigo Pereyra Diaz +Gladys Guerrero +Wei Liu +Michael Münch +Noah Sanci +Noriko Mizumoto +Cornelius Neckenig +Francesco Tombolini +Thomas Spura +Geert Warrink +Yulia Poyarkova +Yuri Chornoivan +Ahelenia Ziemiańska +Daniel Cabrera +Thomas Canniot +Ahelenia Ziemiańska наб via Elfutils-devel + diff --git a/AUTHORS b/AUTHORS index ef3c5430..45cb1f8d 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,4 +1,104 @@ -For Now: -Ulrich Drepper. -Roland McGrath +Aaron Merey +Adam Markey +Adrian Ratiu +Ahelenia Ziemiańska +Akihiko Odaki +Alexander Cherepanov +Alexander Kanavin +Alexander Miller +Alice Zhang +Andreas Krebbel +Andreas Schwab +Andrei Homescu +Anthony G. Basile +Ben Woodard +Chih-Hung Hsieh +Claudio Rodrigo Pereyra Diaz +Colin Cross +Cornelius Neckenig +Daniel Cabrera +David Abdurachmanov +Di Chen +Dima Kogan +Dimitris Glezos +Dmitry V. Levin +Dodji Seketeli +Domingo Becker +Eduardo Santiago +Eli Schwartz +Érico Nogueira +Érico Rolim +Filipe Brandenburger +Florian Weimer +Francesco Tombolini +Frank Ch. Eigler +Geert Warrink +Gladys Guerrero +Gustavo Romero +Hayatsu Shunsuke +H.J. Lu +Hyu_gabaru Ryu_ichi +Jakub Jelinek +Jan Kratochvil +Jan Pokorný +Jason P. Leasure +Jean Pihet +Jeff Kenton +Jim Wilson +John M Mellor-Crummey +John Ogness +Jonathan Lebon +Jonathon Anderson +Jose E. Marchesi +Josh Stone +Joshua Watt +Kevin Cernekee +kiyoto hashida +Konrad Kleine +Kurt Roeckx +Kyle McMartin +Lei Zhang +Lubomir Rintel +Luca Boccassi +Luiz Angelo Daros de Luca +Mao Han +Marek Polacek +Mark Wielaard +Martin Liska +Masatake YAMATO +Matt Fleming +Matthias Klose +Matthias Maennich +Max Filippov +Michael Forney +Michael Münch +Mike Frysinger +Milian Wolff +Namhyung Kim +Noah Sanci +Noriko Mizumoto +Omar Sandoval Petr Machata +Pino Toscano +Piotr Drąg +Ravi Bangoria +Richard Henderson +Roland McGrath +Rosen Penev +Ross Burton +Saleem Abdulrasool +Sergei Trofimovich +Srđan Milaković +Steven Chamberlain +Thomas Canniot +Thomas Spura +Timm Bäder +Tom Tromey +Ulf Hermann +Ulrich Drepper +Wei Liu +William Cohen +Yonghong Song +Yulia Poyarkova +Yunlian Jiang +Yuri Chornoivan diff --git a/AUTHORS.sh b/AUTHORS.sh new file mode 100644 index 00000000..ff048a64 --- /dev/null +++ b/AUTHORS.sh @@ -0,0 +1,12 @@ +#! /bin/sh + +# Create the AUTHORS file, by searching the git history. + +# Run as "AUTHORS.sh" to get complete history +# Run with "AUTHORS.sh commitish..commitish" for history between tags + +# shortlog will canonicalize the names using the file .mailmap +git shortlog -s ${1-} | +sed -e 's, via Elfutils-devel,,' | +cut -b8- | # strip the commit counts +sort | uniq diff --git a/ChangeLog b/ChangeLog index f0cd28a8..5ad93a16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2022-04-24 Frank Ch. Eigler + + * AUTHORS.sh, .mailmap: New files. + * AUTHORS: Regenerated to cover entire history of elfutils. + 2022-04-24 Mark Wielaard * configure.ac (AC_CHECK_FUNCS): Add mremap. -- cgit v1.2.1 From 62963dfc4835405a00463f24e79796c622cc2c84 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 22 Apr 2022 23:36:30 +0200 Subject: debuginfod, libdwfl: Initialize libcurl and dlopen debuginfod-client lazily We used to go out of our way to initialize libcurl early before any other thread/code was running. But this meant that we might pay startup cost, which under FIPS is significant, even for code that never uses libdebuginfod or TLS libcurl connections. Although curl_global_init itself isn't thread-safe we can use pthread_once to make sure we don't race against ourselves. This still means we might race against any application code that might use libcurl. But we can assume they will have called curl_global_init before calling dwfl_begin or debuginfod_begin. Signed-off-by: Mark Wielaard --- debuginfod/ChangeLog | 10 ++++++++++ debuginfod/Makefile.am | 4 ++-- debuginfod/debuginfod-client.c | 29 ++++++++++++++--------------- libdwfl/ChangeLog | 7 +++++++ libdwfl/debuginfod-client.c | 14 +++++++++++--- 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog index 0f1bca6f..93c8ae11 100644 --- a/debuginfod/ChangeLog +++ b/debuginfod/ChangeLog @@ -1,3 +1,13 @@ +2022-04-22 Mark Wielaard + + * Makefile.am (libdebuginfod): Add -lpthread. + (libdebuginfod_so_LDLIBS): Likewise. + * debuginfod-client.c (init_control): New static pthread_once_t. + (libcurl_init): New static function. + (debuginfod_begin): Use ptrace_once to call libcurl_init. + (libdebuginfod_ctor): Removed. + (libdebuginfod_dtor): Likewise. + 2022-04-24 Mark Wielaard * debuginfod.cxx (main): Add MHD_USE_ITC to MHD_start_daemon flags. diff --git a/debuginfod/Makefile.am b/debuginfod/Makefile.am index 3adb2755..435cb8a6 100644 --- a/debuginfod/Makefile.am +++ b/debuginfod/Makefile.am @@ -47,7 +47,7 @@ libelf = ../libelf/libelf.a -lz if DUMMY_LIBDEBUGINFOD libdebuginfod = ./libdebuginfod.a else -libdebuginfod = ./libdebuginfod.a $(libcurl_LIBS) +libdebuginfod = ./libdebuginfod.a -lpthread $(libcurl_LIBS) endif else libasm = ../libasm/libasm.so @@ -97,7 +97,7 @@ libdebuginfod_so_LIBS = libdebuginfod_pic.a if DUMMY_LIBDEBUGINFOD libdebuginfod_so_LDLIBS = else -libdebuginfod_so_LDLIBS = $(libcurl_LIBS) $(fts_LIBS) +libdebuginfod_so_LDLIBS = -lpthread $(libcurl_LIBS) $(fts_LIBS) endif $(LIBDEBUGINFOD_SONAME): $(srcdir)/libdebuginfod.map $(libdebuginfod_so_LIBS) $(AM_V_CCLD)$(LINK) $(dso_LDFLAGS) -o $@ \ diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 58ef6442..45a27b5e 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1,6 +1,6 @@ /* Retrieve ELF / DWARF / source files from the debuginfod. Copyright (C) 2019-2021 Red Hat, Inc. - Copyright (C) 2021 Mark J. Wielaard + Copyright (C) 2021, 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -98,6 +98,16 @@ void debuginfod_end (debuginfod_client *c) { } #include #endif +#include + +static pthread_once_t init_control = PTHREAD_ONCE_INIT; + +static void +libcurl_init(void) +{ + curl_global_init(CURL_GLOBAL_DEFAULT); +} + struct debuginfod_client { /* Progress/interrupt callback function. */ @@ -1475,6 +1485,9 @@ debuginfod_query_server (debuginfod_client *c, debuginfod_client * debuginfod_begin (void) { + /* Initialize libcurl lazily, but only once. */ + pthread_once (&init_control, libcurl_init); + debuginfod_client *client; size_t size = sizeof (struct debuginfod_client); client = calloc (1, size); @@ -1608,18 +1621,4 @@ debuginfod_set_verbose_fd(debuginfod_client *client, int fd) client->verbose_fd = fd; } - -/* NB: these are thread-unsafe. */ -__attribute__((constructor)) attribute_hidden void libdebuginfod_ctor(void) -{ - curl_global_init(CURL_GLOBAL_DEFAULT); -} - -/* NB: this is very thread-unsafe: it breaks other threads that are still in libcurl */ -__attribute__((destructor)) attribute_hidden void libdebuginfod_dtor(void) -{ - /* ... so don't do this: */ - /* curl_global_cleanup(); */ -} - #endif /* DUMMY_LIBDEBUGINFOD */ diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 9c5c8517..76053039 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,10 @@ +2022-04-22 Mark Wielaard + + * debuginfod-client.c (init_control): New static pthread_once_t. + (get_client): Use pthread_once to call __libdwfl_debuginfod_init. + (__libdwfl_debuginfod_init): Make static, remove attribute + constructor. + 2022-02-18 Mark Wielaard * image-header.c (__libdw_image_header): Assign header values for diff --git a/libdwfl/debuginfod-client.c b/libdwfl/debuginfod-client.c index 99b66b6e..153260c3 100644 --- a/libdwfl/debuginfod-client.c +++ b/libdwfl/debuginfod-client.c @@ -1,5 +1,6 @@ /* Try to get an ELF or debug file through the debuginfod. Copyright (C) 2019 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -31,6 +32,7 @@ #endif #include "libdwflP.h" +#include #include static __typeof__ (debuginfod_begin) *fp_debuginfod_begin; @@ -38,6 +40,10 @@ static __typeof__ (debuginfod_find_executable) *fp_debuginfod_find_executable; static __typeof__ (debuginfod_find_debuginfo) *fp_debuginfod_find_debuginfo; static __typeof__ (debuginfod_end) *fp_debuginfod_end; +static void __libdwfl_debuginfod_init (void); + +static pthread_once_t init_control = PTHREAD_ONCE_INIT; + /* NB: this is slightly thread-unsafe */ static debuginfod_client * @@ -46,6 +52,8 @@ get_client (Dwfl *dwfl) if (dwfl->debuginfod != NULL) return dwfl->debuginfod; + pthread_once (&init_control, __libdwfl_debuginfod_init); + if (fp_debuginfod_begin != NULL) { dwfl->debuginfod = (*fp_debuginfod_begin) (); @@ -96,9 +104,9 @@ __libdwfl_debuginfod_end (debuginfod_client *c) (*fp_debuginfod_end) (c); } -/* Try to get the libdebuginfod library functions to make sure - everything is initialized early. */ -void __attribute__ ((constructor)) +/* Try to get the libdebuginfod library functions. + Only needs to be called once from get_client. */ +static void __libdwfl_debuginfod_init (void) { void *debuginfod_so = dlopen(DEBUGINFOD_SONAME, RTLD_LAZY); -- cgit v1.2.1 From 55fee962676fbff60c6b0469305bcb077910d64f Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Tue, 11 Jan 2022 22:07:55 -0500 Subject: debuginfod: Use the debuginfod-size response header In some cases the content-length header may not be available in order to pass to a progressfn. If content-length isn't available then attempt to get the size of the download from the debuginfod-size header instead. It should be mentioned that if a compressed file (ex. gzip) is being transferred, the actual transfer length will be less than debuginfod-size. In this case debuginfod-size is a best-guess upper bound on the size of the transfer. Signed-off-by: Aaron Merey --- debuginfod/debuginfod-client.c | 83 ++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c index 45a27b5e..ea6e461a 100644 --- a/debuginfod/debuginfod-client.c +++ b/debuginfod/debuginfod-client.c @@ -1140,11 +1140,45 @@ debuginfod_query_server (debuginfod_client *c, goto out2; } + long dl_size = 0; + if (target_handle && (c->progressfn || maxsize > 0)) + { + /* Get size of file being downloaded. NB: If going through + deflate-compressing proxies, this number is likely to be + unavailable, so -1 may show. */ + CURLcode curl_res; +#ifdef CURLINFO_CONTENT_LENGTH_DOWNLOAD_T + curl_off_t cl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, + &cl); + if (curl_res == CURLE_OK && cl >= 0) + dl_size = (cl > LONG_MAX ? LONG_MAX : (long)cl); +#else + double cl; + curl_res = curl_easy_getinfo(target_handle, + CURLINFO_CONTENT_LENGTH_DOWNLOAD, + &cl); + if (curl_res == CURLE_OK) + dl_size = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl); +#endif + /* If Content-Length is -1, try to get the size from + X-Debuginfod-Size */ + if (dl_size == -1 && c->winning_headers != NULL) + { + long xdl; + char *hdr = strcasestr(c->winning_headers, "x-debuginfod-size"); + + if (hdr != NULL + && sscanf(hdr, "x-debuginfod-size: %ld", &xdl) == 1) + dl_size = xdl; + } + } + if (c->progressfn) /* inform/check progress callback */ { loops ++; - long pa = loops; /* default params for progress callback */ - long pb = 0; /* transfer_timeout tempting, but loops != elapsed-time */ + long pa = loops; /* default param for progress callback */ if (target_handle) /* we've committed to a server; report its download progress */ { CURLcode curl_res; @@ -1164,50 +1198,19 @@ debuginfod_query_server (debuginfod_client *c, pa = (dl >= (double)(LONG_MAX+1UL) ? 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_CONTENT_LENGTH_DOWNLOAD_T - curl_off_t cl; - curl_res = curl_easy_getinfo(target_handle, - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, - &cl); - if (curl_res == 0 && cl >= 0) - pb = (cl > LONG_MAX ? LONG_MAX : (long)cl); -#else - double cl; - curl_res = curl_easy_getinfo(target_handle, - CURLINFO_CONTENT_LENGTH_DOWNLOAD, - &cl); - if (curl_res == 0) - pb = (cl >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)cl); -#endif } - if ((*c->progressfn) (c, pa, pb)) + if ((*c->progressfn) (c, pa, dl_size)) break; } + /* Check to see if we are downloading something which exceeds maxsize, if set.*/ - if (maxsize > 0 && target_handle) + if (target_handle && dl_size > maxsize && maxsize > 0) { - long dl_size = 0; -#ifdef CURLINFO_SIZE_DOWNLOAD_T - curl_off_t download_size_t; - if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, - &download_size_t) == CURLE_OK) - dl_size = download_size_t >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size_t; -#else - double download_size; - if (curl_easy_getinfo(target_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, - &download_size) == CURLE_OK) - dl_size = download_size >= (double)(LONG_MAX+1UL) ? LONG_MAX : (long)download_size; -#endif - if (dl_size > maxsize) - { - if (vfd >=0) - dprintf(vfd, "Content-Length too large.\n"); - rc = -EFBIG; - goto out2; - } + if (vfd >=0) + dprintf(vfd, "Content-Length too large.\n"); + rc = -EFBIG; + goto out2; } } while (still_running); -- cgit v1.2.1 From 08e448456e27339aeb326828d44069028518038a Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Mon, 25 Apr 2022 11:10:46 -0400 Subject: debuginfod: ensure X-DEBUGINFOD-SIZE contains file size For archived files X-DEBUGINFOD-SIZE currently contains the size of the archive instead of the size of the uncompressed file. Fix this. Also add testcases to verify X-DEBUGINFOD-SIZE contains uncompressed file sizes. Signed-off-by: Aaron Merey --- debuginfod/debuginfod.cxx | 2 +- tests/run-debuginfod-response-headers.sh | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx index adca8208..4aaf41c0 100644 --- a/debuginfod/debuginfod.cxx +++ b/debuginfod/debuginfod.cxx @@ -1790,7 +1790,7 @@ handle_buildid_r_match (bool internal_req_p, add_mhd_response_header (r, "Content-Type", "application/octet-stream"); add_mhd_response_header (r, "X-DEBUGINFOD-SIZE", - to_string(fs.st_size).c_str()); + to_string(archive_entry_size(e)).c_str()); add_mhd_response_header (r, "X-DEBUGINFOD-ARCHIVE", b_source0.c_str()); add_mhd_response_header (r, "X-DEBUGINFOD-FILE", file.c_str()); diff --git a/tests/run-debuginfod-response-headers.sh b/tests/run-debuginfod-response-headers.sh index 10b2ab49..62c43887 100755 --- a/tests/run-debuginfod-response-headers.sh +++ b/tests/run-debuginfod-response-headers.sh @@ -86,6 +86,14 @@ grep 'X-DEBUGINFOD-FILE: ' vlog-find$PORT1.2 grep 'X-DEBUGINFOD-SIZE: ' vlog-find$PORT1.2 grep 'X-DEBUGINFOD-ARCHIVE: ' vlog-find$PORT1.2 +# Check that X-DEBUGINFOD-SIZE matches the size of each file +for file in vlog-find$PORT1.1 vlog-find$PORT1.2 +do + st_size=$(stat -c%s $(tail -n 1 $file)) + x_debuginfod_size=$(grep 'X-DEBUGINFOD-SIZE' $file | egrep -o '[0-9]+') + test $st_size -eq $x_debuginfod_size +done + kill $PID1 wait $PID1 PID1=0 -- cgit v1.2.1 From 059e690e896e37c16774047bd1fd0c9e608545b8 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 25 Apr 2022 18:27:33 +0200 Subject: Prepare for 0.187 Set version to 0.187 Update NEWS and elfutils.spec.in Set copyright year in configure.ac and printversion. Regenerate po/*.po files. Signed-off-by: Mark Wielaard --- ChangeLog | 5 + NEWS | 13 +- config/ChangeLog | 4 + config/elfutils.spec.in | 14 + configure.ac | 4 +- lib/ChangeLog | 4 + lib/printversion.c | 2 +- po/ChangeLog | 4 + po/de.po | 1123 +++++++++++++++++++++++----------------------- po/es.po | 1128 +++++++++++++++++++++++------------------------ po/ja.po | 1120 +++++++++++++++++++++++----------------------- po/pl.po | 1120 +++++++++++++++++++++++----------------------- po/uk.po | 1121 +++++++++++++++++++++++----------------------- 13 files changed, 2823 insertions(+), 2839 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5ad93a16..77173d91 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2022-04-25 Mark Wielaard + + * configure.ac (AC_INIT): Set version to 0.187. + * NEWS: Add some more 0.187 items. + 2022-04-24 Frank Ch. Eigler * AUTHORS.sh, .mailmap: New files. diff --git a/NEWS b/NEWS index ea74c019..c74fe3f1 100644 --- a/NEWS +++ b/NEWS @@ -1,11 +1,22 @@ -Version 0.187 after 0.186 +Version 0.187 debuginfod: Support -C option for connection thread pooling. +debuginfod-client: Negative cache file are now zero sized instead of + no-permission files. + addr2line: The -A, --absolute option, which shows file names including the full compilation directory is now the default. To get the old behavior use the new option --relative. +readelf, elflint: Recognize FDO Packaging Metadata ELF notes + +libdw, debuginfo-client: Load libcurl lazily only when files need to + be fetched remotely. libcurl is now never + loaded when DEBUGINFOD_URLS is unset. And when + DEBUGINFOD_URLS is set, libcurl is only loaded + when the debuginfod_begin function is called. + Version 0.186 debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files diff --git a/config/ChangeLog b/config/ChangeLog index b9b1c44e..51415258 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2022-04-25 Mark Wielaard + + * elfutils.spec.in: Update for 0.187. + 2022-01-19 Ahelenia Ziemiańska * profile.csh.in: Set DEBUGINFOD_URLS directly. Use "$0" and : diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 49e5a016..54599159 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -340,6 +340,20 @@ exit 0 %systemd_postun_with_restart debuginfod.service %changelog +* Mon Apr 25 2022 Mark Wielaard 0.187-1 +- debuginfod: Support -C option for connection thread pooling. +- debuginfod-client: Negative cache file are now zero sized instead + of no-permission files. +- addr2line: The -A, --absolute option, which shows file names + includingthe full compilation directory is now the + default. To get theold behavior use the new option --relative. +- readelf, elflint: Recognize FDO Packaging Metadata ELF notes +- libdw, debuginfo-client: Load libcurl lazily only when files need + to be fetched remotely. libcurl is now never loaded when + DEBUGINFOD_URLS is unset. And whenDEBUGINFOD_URLS is set, + libcurl is only loaded when the debuginfod_begin function is + called. + * Wed Nov 10 2021 Mark Wielaard 0.186-1 - debuginfod-client: Default $DEBUGINFOD_URLS is computed from drop-in files /etc/debuginfod/*.urls rather than diff --git a/configure.ac b/configure.ac index 33c4b5e5..11d1cf82 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see . -AC_INIT([elfutils],[0.186],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) +AC_INIT([elfutils],[0.187],[https://sourceware.org/bugzilla],[elfutils],[http://elfutils.org/]) dnl Workaround for older autoconf < 2.64 m4_ifndef([AC_PACKAGE_URL], @@ -45,7 +45,7 @@ fi AC_CONFIG_AUX_DIR([config]) AC_CONFIG_FILES([config/Makefile]) -AC_COPYRIGHT([Copyright (C) 1996-2021 The elfutils developers.]) +AC_COPYRIGHT([Copyright (C) 1996-2022 The elfutils developers.]) AC_PREREQ(2.63) dnl Minimum Autoconf version required. dnl We use GNU make extensions; automake 1.10 defaults to -Wportability. diff --git a/lib/ChangeLog b/lib/ChangeLog index 6b76f647..32dda566 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,7 @@ +2022-04-25 Mark Wielaard + + * printversion.c (print_version): Update copyright year. + 2022-03-27 Mark Wielaard * system.h: define error_exit. diff --git a/lib/printversion.c b/lib/printversion.c index adf127d6..f657329c 100644 --- a/lib/printversion.c +++ b/lib/printversion.c @@ -41,5 +41,5 @@ print_version (FILE *stream, struct argp_state *state) Copyright (C) %s The elfutils developers <%s>.\n\ This is free software; see the source for copying conditions. There is NO\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ -"), "2021", PACKAGE_URL); +"), "2022", PACKAGE_URL); } diff --git a/po/ChangeLog b/po/ChangeLog index afbdc249..6e610671 100644 --- a/po/ChangeLog +++ b/po/ChangeLog @@ -1,3 +1,7 @@ +2022-04-25 Mark Wielaard + + * *.po: Update for 0.187. + 2021-11-10 Mark Wielaard * *.po: Update for 0.186. diff --git a/po/de.po b/po/de.po index cb5e011a..55445203 100644 --- a/po/de.po +++ b/po/de.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-11-10 16:21+0100\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2009-06-29 15:15+0200\n" "Last-Translator: Michael Münch \n" "Language-Team: German\n" @@ -49,7 +49,7 @@ msgstr "" "GARANTIE,\n" "auch nicht für Marktgängigkeit oder Eignung für einen Bestimmten Zweck.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 #: src/unstrip.c:312 #, c-format msgid "memory exhausted" @@ -308,7 +308,7 @@ msgstr "unbekannter Typ" msgid ".debug_addr section missing" msgstr ".debug_line Sektion fehlt" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Eingabeauswahloptionen:" @@ -545,7 +545,7 @@ msgid "No backend" msgstr "Kein Backend" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "" @@ -596,18 +596,18 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Build ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr "" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " OS: %s, ABI: " @@ -641,7 +641,7 @@ msgstr "ungültige Grösse des Quell-Operanden" msgid "invalid size of destination operand" msgstr "ungültige Grösse des Ziel-Operanden" -#: libelf/elf_error.c:87 src/readelf.c:6215 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "ungültige Kodierung" @@ -729,8 +729,8 @@ msgstr "data/scn Unterschied" msgid "invalid section header" msgstr "ungültiger Abschnitts-Header" -#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 -#: src/readelf.c:10794 src/readelf.c:10976 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "Ungültige Daten" @@ -805,94 +805,98 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot decompress data" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:59 #, fuzzy msgid "Input format options:" msgstr "Eingabeauswahloptionen:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "" -#: src/addr2line.c:61 +#: src/addr2line.c:63 #, fuzzy msgid "Output format options:" msgstr "Ausgabeformat:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +msgid "Show absolute file names using compilation directory (default)" msgstr "" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 +#: src/addr2line.c:80 +msgid "Show relative file names without compilation directory" +msgstr "" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Verschiedenes:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, fuzzy, c-format +#: src/addr2line.c:527 +#, fuzzy msgid "Section syntax requires exactly one module" msgstr "Abschnitt syntax benötigt genau ein Modul" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "Konnte Symbol '%s' nicht finden" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" @@ -1062,112 +1066,110 @@ msgstr "" msgid "no entry %s in archive\n" msgstr "Kein Eintrag %s in Archiv\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "Konnte Hash-Tabelle nicht erstellen" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "Konnte nicht in Hash-Tabelle einfügen" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "Konnte %.*s nicht öffnen" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "Konnte %s nicht schreiben" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "Konnte Bearbeitungszeit von %s nicht ändern" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "Konnte temporäre Datei nicht in %.*s umbenennen" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "neue Datei konnte nicht angelegt werden" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: Kein Eintrag %s in dem Archiv!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "Konnte %s nicht öffnen" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s ist keine reguläre Datei" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/ar.c:1483 +#: src/ar.c:1480 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1489 +#: src/ar.c:1486 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1495 +#: src/ar.c:1492 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "konnte Abschnittsdaten nicht kopieren: %s" -#: src/ar.c:1501 +#: src/ar.c:1498 #, fuzzy, c-format msgid "cannot represent ar_mode" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/ar.c:1507 +#: src/ar.c:1504 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "Konnte %s nicht öffnen" @@ -1614,8 +1616,8 @@ msgid "Invalid value '%s' for --gaps parameter." msgstr "" #: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 -#: src/unstrip.c:2197 src/unstrip.c:2226 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 +#: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "'%s' kann nicht geöffnet werden" @@ -1645,7 +1647,7 @@ msgstr "" msgid "cannot get relocation: %s" msgstr "" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "" @@ -1666,7 +1668,7 @@ msgstr "unbekannter Typ" msgid "No input file given" msgstr "Eingabedatei '%s' ignoriert" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "" @@ -1908,7 +1910,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "" @@ -3272,202 +3274,202 @@ msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" msgstr "" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "neue Datei konnte nicht angelegt werden" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3679,12 +3681,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: INTERNER FEHLER %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2767 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "beim Schliessen von '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: Dateiformat nicht erkannt" @@ -3719,24 +3721,23 @@ msgstr "" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: Dateiformat nicht erkannt" -#: src/nm.c:704 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "Kann Suchbaum nicht erstellen" -#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 -#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 -#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 -#: src/strip.c:1089 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "" #. We always print this prolog. -#: src/nm.c:770 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -3750,58 +3751,58 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:773 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" "\n" msgstr "" -#: src/nm.c:775 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:777 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:779 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:781 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1249 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1254 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: entry size in section `%s' is not what we expect" -#: src/nm.c:1335 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: entry size in section `%s' is not what we expect" #. XXX Add machine specific object file types. -#: src/nm.c:1571 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Ungültige Operation" -#: src/nm.c:1621 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: keine Symbole" @@ -3845,11 +3846,11 @@ msgstr "Keine Operation angegeben.\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "" @@ -3871,12 +3872,11 @@ msgid "Contents of section %s:\n" msgstr "Inhalt des Abschnitts %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "Disassemblieren nicht möglich" -#: src/objdump.c:759 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "neue Datei konnte nicht angelegt werden" @@ -4059,21 +4059,21 @@ msgstr "" msgid "cannot generate Elf descriptor: %s" msgstr "konnte Elf-Deskriptor nicht erzeugen: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 -#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 -#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 -#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 +#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" msgstr "" @@ -4083,8 +4083,8 @@ msgstr "" msgid "cannot get section name" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 -#: src/readelf.c:10961 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "" @@ -4144,274 +4144,274 @@ msgstr "" msgid "cannot create EBL handle" msgstr "" -#: src/readelf.c:961 +#: src/readelf.c:959 #, fuzzy, c-format msgid "cannot determine number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "Konnte %s: %s nicht lesen" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " msgstr "" -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" " Class: %s\n" msgstr "" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, fuzzy, c-format msgid " Data: %s\n" msgstr " Daten: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr "" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(aktuell)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr "" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr "" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " Daten: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr "" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#\n" msgstr "" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: % %s\n" msgstr "" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: % %s\n" msgstr "" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr "" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: % %s\n" msgstr "" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(Bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %" msgstr "" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (% in [0].sh_info)" msgstr "" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr "" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %" msgstr "" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (% in [0].sh_size)" msgstr "" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (% in [0].sh_link)" msgstr "" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" "\n" msgstr "" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr "" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" "\n" msgstr " %s: %\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" msgstr "" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" msgstr "" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Programm-Köpfe:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" msgstr "" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" " Segment Sections..." msgstr "" -#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4422,7 +4422,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4433,31 +4433,31 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 -#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4470,43 +4470,43 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr "" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "% (bytes)\n" msgstr "" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" "Invalid symbol table at offset %#0\n" msgstr "" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4525,7 +4525,7 @@ msgstr[1] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4536,29 +4536,29 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr "" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4569,40 +4569,40 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "keine" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4615,17 +4615,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, fuzzy, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Version: %hu Datei: %s Cnt: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Name: %s Flags: %s Version: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -4638,18 +4638,18 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -4662,15 +4662,15 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *lokal* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -4685,59 +4685,59 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr "" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" "\t\t\t unsuccessful lookup: %f\n" msgstr "" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:3451 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4761,7 +4761,7 @@ msgid "" "Flags" msgstr "" -#: src/readelf.c:3612 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -4769,102 +4769,102 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:3629 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr "" -#: src/readelf.c:3653 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3692 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3697 +#: src/readelf.c:3696 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3746 +#: src/readelf.c:3745 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3749 +#: src/readelf.c:3748 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3752 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3762 +#: src/readelf.c:3761 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3765 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3835 -#, fuzzy, c-format +#: src/readelf.c:3834 +#, fuzzy msgid "sprintf failure" msgstr "mprotect fehlgeschlagen" -#: src/readelf.c:4317 +#: src/readelf.c:4316 msgid "empty block" msgstr "" -#: src/readelf.c:4320 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "" -#: src/readelf.c:4798 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2] %s \n" msgstr "" -#: src/readelf.c:4865 +#: src/readelf.c:4864 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4872 +#: src/readelf.c:4871 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4879 +#: src/readelf.c:4878 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4886 +#: src/readelf.c:4885 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4986 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4994 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5097 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -4872,79 +4872,79 @@ msgid "" " [ Code]\n" msgstr "" -#: src/readelf.c:5105 +#: src/readelf.c:5104 #, c-format msgid "" "\n" "Abbreviation section at offset %:\n" msgstr "" -#: src/readelf.c:5118 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr "" -#: src/readelf.c:5134 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr "" -#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 -#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 -#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 -#: src/readelf.c:10482 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" "DWARF section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:5180 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "unbekannte Version" -#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "Kein Adress-Wert" -#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5397 src/readelf.c:5471 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "" -#: src/readelf.c:5412 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -4955,239 +4955,239 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:5443 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5445 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" -#: src/readelf.c:5489 src/readelf.c:8426 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" "Table at offset %zu:\n" msgstr "" -#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 -#: src/readelf.c:9171 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "" -#: src/readelf.c:5509 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5521 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5525 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5536 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5542 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6\n" msgstr "" -#: src/readelf.c:5553 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6\n" "\n" msgstr "" -#: src/readelf.c:5608 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5652 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:5675 src/readelf.c:9177 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " %s: %\n" -#: src/readelf.c:5730 src/readelf.c:9232 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5746 src/readelf.c:9248 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9250 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5754 src/readelf.c:9256 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5765 src/readelf.c:9267 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5769 src/readelf.c:9271 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " %s: %\n" -#: src/readelf.c:5821 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "Ungültige Daten" -#: src/readelf.c:6006 src/readelf.c:9596 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6023 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "" -#: src/readelf.c:6059 src/readelf.c:9651 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6061 src/readelf.c:9653 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:6095 src/readelf.c:9789 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:6105 src/readelf.c:9799 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] %s..%s\n" -#: src/readelf.c:6365 +#: src/readelf.c:6364 msgid " \n" msgstr "" -#: src/readelf.c:6622 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:6640 +#: src/readelf.c:6639 #, c-format msgid "" "\n" "Call frame information section [%2zu] '%s' at offset %#:\n" msgstr "" -#: src/readelf.c:6690 +#: src/readelf.c:6689 #, c-format msgid "" "\n" " [%6tx] Zero terminator\n" msgstr "" -#: src/readelf.c:6791 src/readelf.c:6945 +#: src/readelf.c:6790 src/readelf.c:6944 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "ungültige Abschnittsausrichtung" -#: src/readelf.c:6806 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "" -#: src/readelf.c:6812 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "" -#: src/readelf.c:6922 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#)" msgstr "" -#: src/readelf.c:6929 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#)" msgstr "" -#: src/readelf.c:6966 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "" -#: src/readelf.c:7051 +#: src/readelf.c:7050 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "" -#: src/readelf.c:7061 +#: src/readelf.c:7060 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "" -#: src/readelf.c:7083 +#: src/readelf.c:7082 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "" -#: src/readelf.c:7413 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Ungültige Datei" -#: src/readelf.c:7417 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr "unbekannte Form %" -#: src/readelf.c:7421 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "ELF Kopf konnte nicht ausgelesen werden" -#: src/readelf.c:7736 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5195,12 +5195,12 @@ msgid "" " [Offset]\n" msgstr "" -#: src/readelf.c:7786 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:7806 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %:\n" @@ -5209,7 +5209,7 @@ msgid "" " Type signature: %#, Type offset: %# [%]\n" msgstr "" -#: src/readelf.c:7818 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5217,37 +5217,37 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:7828 src/readelf.c:7989 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7855 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7884 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "" -#: src/readelf.c:7893 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:7929 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "" -#: src/readelf.c:7937 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "" -#: src/readelf.c:7981 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5255,7 +5255,7 @@ msgid "" "%, Offset size: %\n" msgstr "" -#: src/readelf.c:8033 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5263,18 +5263,18 @@ msgid "" "\n" msgstr "" -#: src/readelf.c:8365 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "unbekannte Form %" -#: src/readelf.c:8413 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "" #. Print what we got so far. -#: src/readelf.c:8517 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5293,187 +5293,187 @@ msgid "" "Opcodes:\n" msgstr "" -#: src/readelf.c:8539 +#: src/readelf.c:8538 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "ungültige .debug_line Sektion" -#: src/readelf.c:8547 +#: src/readelf.c:8546 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "Kein Adress-Wert" -#: src/readelf.c:8555 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "" -#: src/readelf.c:8565 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "" -#: src/readelf.c:8580 +#: src/readelf.c:8579 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:8591 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" msgstr "" -#: src/readelf.c:8597 src/readelf.c:8674 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8668 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" msgstr "" -#: src/readelf.c:8729 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr "" -#: src/readelf.c:8775 +#: src/readelf.c:8774 msgid "" "\n" "No line number statements." msgstr "" -#: src/readelf.c:8779 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" msgstr "" -#: src/readelf.c:8794 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8828 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr "" -#: src/readelf.c:8832 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" -#: src/readelf.c:8835 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8853 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr "" -#: src/readelf.c:8858 +#: src/readelf.c:8857 msgid " end of sequence" msgstr "" -#: src/readelf.c:8876 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "Außerhalb des Adressbereiches" -#: src/readelf.c:8904 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" -#: src/readelf.c:8918 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr "" -#: src/readelf.c:8945 +#: src/readelf.c:8944 #, c-format msgid " set inlined context %u, function name %s (0x%x)\n" msgstr "" -#: src/readelf.c:8969 +#: src/readelf.c:8968 #, c-format msgid " set function name %s (0x%x)\n" msgstr "" #. Unknown, ignore it. -#: src/readelf.c:8976 +#: src/readelf.c:8975 #, fuzzy msgid " unknown opcode" msgstr "unbekannter Typ" #. Takes no argument. -#: src/readelf.c:8988 +#: src/readelf.c:8987 msgid " copy" msgstr "" -#: src/readelf.c:8999 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr "" -#: src/readelf.c:9003 src/readelf.c:9064 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:9015 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %\n" msgstr "" -#: src/readelf.c:9025 +#: src/readelf.c:9024 #, c-format msgid " set file to %\n" msgstr "" -#: src/readelf.c:9036 +#: src/readelf.c:9035 #, c-format msgid " set column to %\n" msgstr "" -#: src/readelf.c:9043 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %\n" msgstr "" #. Takes no argument. -#: src/readelf.c:9049 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "" -#: src/readelf.c:9060 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr "" -#: src/readelf.c:9080 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr "" #. Takes no argument. -#: src/readelf.c:9090 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr "" #. Takes no argument. -#: src/readelf.c:9095 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr "" -#: src/readelf.c:9105 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr "" @@ -5481,108 +5481,108 @@ msgstr "" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9114 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] "" msgstr[1] "" -#: src/readelf.c:9154 +#: src/readelf.c:9153 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/readelf.c:9320 +#: src/readelf.c:9319 #, c-format msgid " \n" msgstr "" -#: src/readelf.c:9360 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "Ungültige Daten" -#: src/readelf.c:9613 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "" -#: src/readelf.c:9826 src/readelf.c:10870 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " \n" msgstr "" -#: src/readelf.c:9881 src/readelf.c:10044 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "" -#: src/readelf.c:9961 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "" -#: src/readelf.c:9984 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "" -#: src/readelf.c:10085 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " %s: %\n" -#: src/readelf.c:10097 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10103 src/readelf.c:10990 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " %s: %\n" -#: src/readelf.c:10139 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %\n" msgstr "" -#: src/readelf.c:10147 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%\n" msgstr "" -#: src/readelf.c:10172 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, % items:\n" msgstr "" -#: src/readelf.c:10179 +#: src/readelf.c:10178 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10191 +#: src/readelf.c:10190 #, c-format msgid " % arguments:" msgstr "" -#: src/readelf.c:10206 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10407 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" -#: src/readelf.c:10451 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -5591,77 +5591,77 @@ msgid "" msgstr "" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10456 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10466 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr "" -#: src/readelf.c:10495 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:10594 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10596 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10610 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10619 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10673 +#: src/readelf.c:10672 #, c-format msgid "" "\n" "Call frame search table section [%2zu] '.eh_frame_hdr':\n" msgstr "" -#: src/readelf.c:10775 +#: src/readelf.c:10774 #, c-format msgid "" "\n" "Exception handling table section [%2zu] '.gcc_except_table':\n" msgstr "" -#: src/readelf.c:10798 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr "" -#: src/readelf.c:10810 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "" -#: src/readelf.c:10825 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "" -#: src/readelf.c:10838 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" msgstr "" -#: src/readelf.c:10852 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5670,142 +5670,142 @@ msgid "" " Action: %u\n" msgstr "" -#: src/readelf.c:10925 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "" -#: src/readelf.c:10952 +#: src/readelf.c:10951 #, c-format msgid "" "\n" "GDB section [%2zu] '%s' at offset %# contains % bytes :\n" msgstr "" -#: src/readelf.c:10981 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10999 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#\n" msgstr "" -#: src/readelf.c:11006 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#\n" msgstr "" -#: src/readelf.c:11013 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#\n" msgstr "" -#: src/readelf.c:11020 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#\n" msgstr "" -#: src/readelf.c:11027 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#\n" msgstr "" -#: src/readelf.c:11041 +#: src/readelf.c:11040 #, c-format msgid "" "\n" " CU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11066 +#: src/readelf.c:11065 #, c-format msgid "" "\n" " TU list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11095 +#: src/readelf.c:11094 #, c-format msgid "" "\n" " Address list at offset %# contains %zu entries:\n" msgstr "" -#: src/readelf.c:11127 +#: src/readelf.c:11126 #, c-format msgid "" "\n" " Symbol table at offset %# contains %zu slots:\n" msgstr "" -#: src/readelf.c:11265 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "" -#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 -#: src/readelf.c:12429 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "" -#: src/readelf.c:11996 +#: src/readelf.c:11994 #, c-format msgid "" "\n" "%*s... ..." msgstr "" -#: src/readelf.c:12508 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr "" -#: src/readelf.c:12536 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9 %s\n" msgstr "" -#: src/readelf.c:12588 +#: src/readelf.c:12583 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "Konnte Inhalt von %s: %s nicht lesen" -#: src/readelf.c:12622 +#: src/readelf.c:12616 #, c-format msgid "" "\n" "Note section [%2zu] '%s' of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12645 +#: src/readelf.c:12639 #, c-format msgid "" "\n" "Note segment of % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12692 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no data to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12719 src/readelf.c:12770 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12724 +#: src/readelf.c:12718 #, c-format msgid "" "\n" "Hex dump of section [%zu] '%s', % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12729 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -5813,21 +5813,21 @@ msgid "" "%#0:\n" msgstr "" -#: src/readelf.c:12743 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" "Section [%zu] '%s' has no strings to dump.\n" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/readelf.c:12775 +#: src/readelf.c:12769 #, c-format msgid "" "\n" "String section [%zu] '%s' contains % bytes at offset %#0:\n" msgstr "" -#: src/readelf.c:12780 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -5835,45 +5835,45 @@ msgid "" "offset %#0:\n" msgstr "" -#: src/readelf.c:12829 +#: src/readelf.c:12822 #, c-format msgid "" "\n" "section [%lu] does not exist" msgstr "" -#: src/readelf.c:12859 +#: src/readelf.c:12852 #, c-format msgid "" "\n" "section '%s' does not exist" msgstr "" -#: src/readelf.c:12916 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "" -#: src/readelf.c:12919 +#: src/readelf.c:12910 #, c-format msgid "" "\n" "Archive '%s' has no symbol index\n" msgstr "" -#: src/readelf.c:12923 +#: src/readelf.c:12914 #, c-format msgid "" "\n" "Index of archive '%s' has %zu entries:\n" msgstr "" -#: src/readelf.c:12941 +#: src/readelf.c:12932 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/readelf.c:12946 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "" @@ -5966,39 +5966,39 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr "" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "ungültiger Abschnitt" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:480 +#, fuzzy msgid "cannot get section header" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "" @@ -6159,27 +6159,24 @@ msgstr "" msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, fuzzy, c-format +#: src/strings.c:584 +#, fuzzy msgid "lseek failed" msgstr "lseek64 fehlgeschlagen" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "re-mmap fehlgeschlagen" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect fehlgeschlagen" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" @@ -6244,54 +6241,51 @@ msgstr "" msgid "Discard symbols from object files." msgstr "" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:479 +#, fuzzy msgid "bad relocation" msgstr "Relocations anzeigen" -#: src/strip.c:751 src/strip.c:775 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "" -#: src/strip.c:765 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "" -#: src/strip.c:803 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6302,132 +6296,131 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:815 +#: src/strip.c:813 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: Kein Eintrag %s in dem Archiv!\n" -#: src/strip.c:1052 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "" -#: src/strip.c:1097 -#, fuzzy, c-format +#: src/strip.c:1094 +#, fuzzy msgid "cannot get number of phdrs" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/strip.c:1111 src/strip.c:1154 +#: src/strip.c:1108 src/strip.c:1151 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1121 src/strip.c:1164 +#: src/strip.c:1118 src/strip.c:1161 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "neue Datei konnte nicht angelegt werden" -#: src/strip.c:1244 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "" -#: src/strip.c:1254 +#: src/strip.c:1251 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/strip.c:1263 +#: src/strip.c:1260 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Konnte Archiv '%s' nicht öffnen" -#: src/strip.c:1628 src/strip.c:1743 +#: src/strip.c:1624 src/strip.c:1739 #, c-format msgid "while generating output file: %s" msgstr "" -#: src/strip.c:1692 +#: src/strip.c:1688 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1701 +#: src/strip.c:1697 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1709 src/strip.c:2554 +#: src/strip.c:1705 src/strip.c:2546 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "Fehler beim Schliessen des Elf-Desktriptor: %s\n" -#: src/strip.c:1726 +#: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "" -#: src/strip.c:1788 src/strip.c:1851 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "" -#: src/strip.c:1797 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "" -#: src/strip.c:1863 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "" -#: src/strip.c:1870 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "" -#: src/strip.c:2083 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2470 src/strip.c:2578 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "" -#: src/strip.c:2481 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "" -#: src/strip.c:2504 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "" -#: src/strip.c:2545 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "" -#: src/strip.c:2563 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "" -#: src/strip.c:2603 src/strip.c:2623 +#: src/strip.c:2595 src/strip.c:2615 #, fuzzy, c-format msgid "while writing '%s'" msgstr "beim Schliessen von '%s'" -#: src/strip.c:2660 src/strip.c:2667 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "" -#: src/strip.c:2684 src/strip.c:2760 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "" @@ -6513,7 +6506,7 @@ msgstr "" msgid "cannot get shdrstrndx:%s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:244 src/unstrip.c:2088 +#: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" msgstr "" @@ -6533,12 +6526,12 @@ msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" msgid "cannot copy ELF header: %s" msgstr "" -#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:270 src/unstrip.c:2110 +#: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" @@ -6553,12 +6546,12 @@ msgstr "konnte Programm-Kopf nicht kopieren: %s" msgid "cannot copy section header: %s" msgstr "" -#: src/unstrip.c:289 src/unstrip.c:1710 +#: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:291 src/unstrip.c:1712 +#: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" msgstr "konnte Abschnittsdaten nicht kopieren: %s" @@ -6568,14 +6561,14 @@ msgstr "konnte Abschnittsdaten nicht kopieren: %s" msgid "cannot create directory '%s'" msgstr "konnte Verzeichnis nicht erstellen: %s" -#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 -#: src/unstrip.c:1752 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 +#: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "konnte Eintrag aus der Symboltabelle nicht holen: %s" -#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 -#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 +#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" msgstr "konnte Symboltabelle nicht aktualisieren: %s" @@ -6600,238 +6593,234 @@ msgstr "" msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:582 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "" -#: src/unstrip.c:595 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:850 +#: src/unstrip.c:849 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:852 +#: src/unstrip.c:851 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:869 +#: src/unstrip.c:868 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "ungültiger Offset %zu für Symbol %s" -#: src/unstrip.c:1027 src/unstrip.c:1435 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1042 +#: src/unstrip.c:1041 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1048 +#: src/unstrip.c:1047 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "konnte Versionierungsabschnitt nicht erstellen: %s" -#: src/unstrip.c:1053 +#: src/unstrip.c:1052 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "ungültige .debug_line Sektion" -#: src/unstrip.c:1059 +#: src/unstrip.c:1058 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1064 +#: src/unstrip.c:1063 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "konnte Programm-Kopf nicht erstellen: %s" -#: src/unstrip.c:1075 src/unstrip.c:1556 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1157 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1168 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1364 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1393 src/unstrip.c:1397 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1408 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1412 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1460 src/unstrip.c:1571 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1630 +#: src/unstrip.c:1628 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1760 +#: src/unstrip.c:1758 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:1792 +#: src/unstrip.c:1790 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "ungültiger Abschnittsindex" -#: src/unstrip.c:2067 +#: src/unstrip.c:2065 #, fuzzy, c-format msgid "cannot read section data: %s" msgstr "konnte Abschnittsdaten nicht holen: %s" -#: src/unstrip.c:2096 +#: src/unstrip.c:2094 #, c-format msgid "cannot update ELF header: %s" msgstr "" -#: src/unstrip.c:2120 +#: src/unstrip.c:2118 #, c-format msgid "cannot update program header: %s" msgstr "konnte Programm-Kopf nicht aktualisieren: %s" -#: src/unstrip.c:2125 src/unstrip.c:2208 +#: src/unstrip.c:2123 src/unstrip.c:2206 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2176 +#: src/unstrip.c:2174 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2179 +#: src/unstrip.c:2177 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 +#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2235 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2239 +#: src/unstrip.c:2237 msgid ", use --force" msgstr "" -#: src/unstrip.c:2267 +#: src/unstrip.c:2265 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2271 +#: src/unstrip.c:2269 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2275 +#: src/unstrip.c:2273 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2279 +#: src/unstrip.c:2277 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2310 +#: src/unstrip.c:2308 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2314 +#: src/unstrip.c:2312 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2329 +#: src/unstrip.c:2327 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2333 +#: src/unstrip.c:2331 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2346 +#: src/unstrip.c:2344 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2377 +#: src/unstrip.c:2375 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "kein passendes Modul gefunden" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "mehr als ein passendes Modul" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" diff --git a/po/es.po b/po/es.po index a65b516c..a08b4c2d 100644 --- a/po/es.po +++ b/po/es.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils.master.es\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-11-10 16:21+0100\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2011-01-10 15:17-0300\n" "Last-Translator: Claudio Rodrigo Pereyra Diaz \n" @@ -52,7 +52,7 @@ msgstr "" "garantía, ni siquiera para SU COMERCIALIZACIÓN o PARA SER USADO CON UN FIN " "DETERMINADO.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 #: src/unstrip.c:312 #, c-format msgid "memory exhausted" @@ -313,7 +313,7 @@ msgstr "código operativo desconocido " msgid ".debug_addr section missing" msgstr ".debug_ranges section faltante" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Opciones de selección de entrada:" @@ -547,7 +547,7 @@ msgid "No backend" msgstr "No hay segundo plano (Backend)" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "" @@ -598,18 +598,18 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Build ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " Versión del Enlazador: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " OS: %s, ABI: " @@ -643,7 +643,7 @@ msgstr "tamaño inválido del operando fuente" msgid "invalid size of destination operand" msgstr "tamaño inválido del operando destino" -#: libelf/elf_error.c:87 src/readelf.c:6215 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "codificación inválida" @@ -729,8 +729,8 @@ msgstr "no coinciden los datos/scn" msgid "invalid section header" msgstr "encabezamiento de sección inválida" -#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 -#: src/readelf.c:10794 src/readelf.c:10976 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "datos inválidos" @@ -808,72 +808,81 @@ msgstr "no pueden copiar datos de sección: %s" msgid "cannot decompress data" msgstr "no pueden copiar datos de sección: %s" -#: src/addr2line.c:57 +#: src/addr2line.c:59 #, fuzzy msgid "Input format options:" msgstr "Opciones de selección de entrada:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Manejar direcciones como compensaciones relativas a sección de NOMBRE." -#: src/addr2line.c:61 +#: src/addr2line.c:63 #, fuzzy msgid "Output format options:" msgstr "Formato de salida:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 #, fuzzy msgid "Print address before each entry" msgstr "Imprimir nombre de archivo antes de cada cadena." -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "Mostrar sólo nombres de base de ficheros fuente" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "" "Mostrar nombres de fichero absolutos mediante directorio de compilación" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "También mostrar nombres de función" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "También mostrar símbolo o nombres de sección" -#: src/addr2line.c:68 +#: src/addr2line.c:70 #, fuzzy msgid "Also show symbol and the section names" msgstr "También mostrar símbolo o nombres de sección" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "También mostrar marcas de líneas de tabla" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." msgstr "" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "" +"Mostrar nombres de fichero absolutos mediante directorio de compilación" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misceláneos:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -881,26 +890,25 @@ msgstr "" "por defecto)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[DIREC...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "Sintaxis de sección requiere exactamente un módulo" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %# lies outside section '%s'" msgstr "Compensación %# se encuentra fuera de sección '%s'" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "no se puede encontrar símbolo '%s'" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "compensación %# se encuentra fuera de contenido de '%s'" @@ -1069,112 +1077,110 @@ msgstr "no sepuede stat el archivo '%s'" msgid "no entry %s in archive\n" msgstr "no hay entrada %s en archivo\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "Falló al crear la tabla de dispersión" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "no sepuede insertar en tabla de dispersión" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "no se puede stat '%s'" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "no se puede leer el contenido de %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr " Imposible abrir %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "Falló al escribir %s" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "No se puede cambiar el modo de %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "No puede cambiar tiempo de modificación de %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "no sepuede renombrar fichero temporal para %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "no sepuede crear fichero nuevo" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "no se encuentra miembro de posición %s " -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: ¡no hay entrada %s en archive!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "no sepuede abrir %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "no sepuede efectuar stat %s" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr " %s no es un fichero ordinario " -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "no sepuede obtener descriptor ELF para %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "no sepuede leer %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, fuzzy, c-format msgid "cannot represent ar_date" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1489 +#: src/ar.c:1486 #, fuzzy, c-format msgid "cannot represent ar_uid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1495 +#: src/ar.c:1492 #, fuzzy, c-format msgid "cannot represent ar_gid" msgstr "no pueden copiar datos de sección: %s" -#: src/ar.c:1501 +#: src/ar.c:1498 #, fuzzy, c-format msgid "cannot represent ar_mode" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/ar.c:1507 +#: src/ar.c:1504 #, fuzzy, c-format msgid "cannot represent ar_size" msgstr "no sepuede abrir %s" @@ -1626,8 +1632,8 @@ msgid "Invalid value '%s' for --gaps parameter." msgstr "Valor inválido '%s' para parámetro --gaps" #: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 -#: src/unstrip.c:2197 src/unstrip.c:2226 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 +#: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "Imposible abrir '%s'" @@ -1657,7 +1663,7 @@ msgstr "No se puede obtener contenido de sección %zu: %s" msgid "cannot get relocation: %s" msgstr "No se puede obtener reubicación: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "opción -o especificada dos veces" @@ -1678,7 +1684,7 @@ msgstr "tipo desconocido" msgid "No input file given" msgstr "archivo de entrada vacío" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, fuzzy, c-format msgid "Only one input file allowed together with '-o'" msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" @@ -1932,7 +1938,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "Sección [%2d] '%s': No se pueden obtener datos de sección\n" @@ -3540,7 +3546,7 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero core desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, fuzzy, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3549,7 +3555,7 @@ msgstr "" "phdr[%d]: tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, fuzzy, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3558,40 +3564,40 @@ msgstr "" "Sección [%2d] '%s': tipo de nota de fichero objeto desconocido % en " "compensación %Zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: no hay entradas de nota definidas para el tipo de archivo\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: no puede obtener contenido de sección de nota: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: extra % bytes después de la última nota\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "Sección [%2d] '%s': no hay entradas de nota definidas para el tipo de " "archivo\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" "Sección[%2d] '%s': no se puede obtener el contenido de sección de nota\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "Sección[%2d] '%s': extra % bytes después de la última nota\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3599,145 +3605,145 @@ msgstr "" "Sólo ejecutables, objetos compartidos y ficheros core pueden tener " "encabezamientos de programas\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "no se puede obtener entrada de encabezamiento %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "entrada de encabezamiento de programa %d: tipo %# de entrada de " "encabezamiento de programa desconocido\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "Más de una entrada INTERP en encabezamiento de programa\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "más de una entrada TLS en encabezamiento de programa\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "ejecutable estático no puede tener secciones dinámicas\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "Referencia de sección dinámica en encabezamiento de programa tiene " "compensación errada\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "No coinciden tamaño de sección dinámica en programa y encabezamiento de " "sección\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "Más de una entrada GNU_RELRO en encabezamiento de programa\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "Segmento cargable GNU_RELRO que se aplica no es de escritura\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "Banderas de segmento cargable [%u] no coinciden con banderas GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "Segmento %s no contenido en un segmento cargable\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "Compensación de encabezamiento de programa en encabezamiento ELF y entrada " "PHDR no coinciden" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "Referencia de tabla de búsqueda de marco de llamada en encabezamiento de " "programa tiene una compensación errada\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "Tamaño de tabla de búsqueda de marco de llamada no coincide con programa y " "encabezamiento de sección\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME presente pero no la sección.eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabla de búsqueda de marco de llamada debe ser asignada\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sección [%2zu] '%s' debe ser asignada\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" "tabla de búsqueda de marco de llamada no debe tener permiso de escritura\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sección [%2zu] '%s' no debe tener permiso de escritura\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabla de búsqueda de marco de llamada no debe ser ejecutable\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sección [%2zu] '%s' no debe ser ejecutable\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" "entrada de encabezamiento de programa %d: tamaño de fichero mayor que el " "tamaño de memoria\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" "entrada de encabezamiento de programa %d: alineamiento no es potencia de 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3746,7 +3752,7 @@ msgstr "" "entrada de encabezamiento de programa %d: compensación de fichero y " "dirección virtual no módulo de alineación\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3755,17 +3761,17 @@ msgstr "" "ejecutable/DSO con sección .eh_frame_hdr no tiene una entrada de " "encabezamiento de programa PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "No se puede leer encabezamiento ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "no sepuede crear fichero nuevo" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "Bandera de reubicación de texto establecida pero no necesaria\n" @@ -3986,12 +3992,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: ERROR INTERNO %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2767 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "error al cerrar '%s'" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: No se reconoce el formato del fichero" @@ -4026,24 +4032,23 @@ msgstr "imposible restablecer compensación de archivo al inicio" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: no se reconoció el formato de fichero" -#: src/nm.c:704 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "No se puede crear el árbol de búsqueda" -#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 -#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 -#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 -#: src/strip.c:1089 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "no se puede obtener índice de cadena de encabezamiento de sección" #. We always print this prolog. -#: src/nm.c:770 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4057,7 +4062,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:773 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4066,53 +4071,53 @@ msgstr "" "%*s%-*s %-*s Clase Tipo %-*s %*s Sección\n" "\n" -#: src/nm.c:775 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:777 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:779 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:781 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1249 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " -#: src/nm.c:1254 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: Tamaño de sección `%s' no es múltiplo de tamaño de entrada" -#: src/nm.c:1335 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "" "%s: el tamaño de la entrada en la sección `%s' no es el que esperábamos " #. XXX Add machine specific object file types. -#: src/nm.c:1571 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: Operación inválida" -#: src/nm.c:1621 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: No hay símbolos" @@ -4156,11 +4161,11 @@ msgstr "No se especificó una operación.\n" msgid "while close `%s'" msgstr "mientras cierra `%s'" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "SÍMBOLO INVÁLIDO" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "SECCIÓN INVÁLIDA" @@ -4185,12 +4190,11 @@ msgid "Contents of section %s:\n" msgstr "Contenido de la sección %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "No se puede desensamblar" -#: src/objdump.c:759 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "no sepuede crear fichero nuevo" @@ -4377,21 +4381,21 @@ msgstr "Sección de depuración DWARF desconocida `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "no se puede crear descriptor ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 -#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 -#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 -#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 +#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" @@ -4401,8 +4405,8 @@ msgstr "No se puede obtener encabezamiento de sección: %s" msgid "cannot get section name" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 -#: src/readelf.c:10961 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "No se puede obtener el contenido %s: %s" @@ -4462,48 +4466,48 @@ msgstr "no se pudo leer encabezamiento ELF: %s" msgid "cannot create EBL handle" msgstr "no se puede crear EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, fuzzy, c-format msgid "cannot read ELF: %s" msgstr "no sepuede leer %s: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (Ninguno)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (Fichero reubicable)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (Fichero ejecutable)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (Fichero objeto compartido)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (Fichero núcleo)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS Specific: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Específico del procesador: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4511,7 +4515,7 @@ msgstr "" "Encabezamiento ELF:\n" " Mágico: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4520,125 +4524,125 @@ msgstr "" "\n" " Clase: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Datos: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Versión ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(actual)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " Versión ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Tipo: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " Máquina: %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " Versión: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#\n" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: % %s\n" msgstr " Inicio de encabezamientos de programa: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr " (bytes en el archivo)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: % %s\n" msgstr " Inicio de encabezamientos de sección: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Indicadores: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: % %s\n" msgstr " Tamaño de este encabezamiento: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(bytes)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: % %s\n" msgstr "" " Tamaño de las entradas en encabezamiento del programa: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %" msgstr " Cantidad de entradas de encabezados de programa: %" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (% in [0].sh_info)" msgstr " (% in [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] no disponible)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: % %s\n" msgstr "" " Tamaño de las entradas en el encabezamiento de sección: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %" msgstr " Cantidad de entradas en los encabezamientos de sección: %" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (% in [0].sh_size)" msgstr " (% en [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (% in [0].sh_link)" msgstr " (% en [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4647,19 +4651,19 @@ msgstr "" " Índice de tabla de cadenas de sección de encabezamiento de : XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %\n" "\n" msgstr " Índice de tabla de cadenas de sección de encabezamiento: %\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "no se pudieron determinar el número de secciones: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4668,16 +4672,16 @@ msgstr "" "Hay %d encabezamientos de sección, comenzando en compensación %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "no se puede obtener índice de cadena de encabezamiento de sección" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "encabezamientos de sección:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4685,7 +4689,7 @@ msgstr "" "[Nr] Nombre Tipo Dirección Off Tamaño Inf Al " "Enlace banderas ES" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4693,36 +4697,36 @@ msgstr "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, fuzzy, c-format msgid "bad compression header for section %zd: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, fuzzy, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "No se pueden obtener datos para la sección %d: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "encabezamientos de programa:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Tipo Compensación Dirección Virtual Dirección " "Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4730,12 +4734,12 @@ msgstr "" " Tipo Compensación Dirección Virtual Dirección " "Física Tamaño de Fichero Tamaño de Memoria Alineación de bandera" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Solicitando intérprete de programa: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4745,12 +4749,12 @@ msgstr "" " Sección para asignación de segmento:\n" " Secciones de segmento..." -#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "no se puede obtener memoria para encabezamiento del programa: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4765,7 +4769,7 @@ msgstr[1] "" "\n" "Grupo de sección COMDAT [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4780,31 +4784,31 @@ msgstr[1] "" "\n" "Grupo de sección [%2zu] '%s' con firma '%s' contiene entradas %zu:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 -#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "No se puede obtener encabezamiento de sección: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr ".debug_line section inválida" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4825,36 +4829,36 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Tipo Valor\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteca compartida: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "Nombre-so de la biblioteca: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath de la biblioteca: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "Ruta de ejecución de la biblioteca: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "% (bytes)\n" msgstr "% (bytes)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4863,7 +4867,7 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4888,7 +4892,7 @@ msgstr[1] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4905,29 +4909,29 @@ msgstr[1] "" "Sección de reubicación [%2u] '%s' en compensación %#0 contiene " "entradas %d:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Compensación Tipo Valor Nombre\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr " Compensación Tipo Valor Nombre Adend\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4942,40 +4946,40 @@ msgstr[1] "" "\n" "La tabla de símbolos [%2u] '%s' contiene entradas %u:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] "símbolos locales %lu Tabla de cadena: [%2u] '%s'\n" msgstr[1] " Símbolos locales %lu Tabla de cadenas: [%2u] '%s'\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Núm: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Valor Tamaño Tipo Unión Vis Nombre Ndx\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "símbolo dinámico erróneo" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "nada" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4996,17 +5000,17 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Versión: %hu Fichero: %s Conteo: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nombre: %s Banderas: %s Versión: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5027,19 +5031,19 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Versión: %hd Banderas: %s Índice: %hd Conteo: %hd Nombre: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Principal %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5060,15 +5064,15 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *local* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *global* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5093,22 +5097,22 @@ msgstr[1] "" " Dirección: %#0* Compensación: %#08 Enlace a sección: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Longitud Número % of total Cobertura\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5117,37 +5121,37 @@ msgstr "" " Número promedio de pruebas: búsqueda exitosa: %f\n" " búsqueda sin éxito: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "No se pueden obtener datos para la sección %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:3451 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5182,7 +5186,7 @@ msgstr "" " Biblioteca Marca de tiempo Indicadores " "de versión de suma de verificación" -#: src/readelf.c:3612 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5193,102 +5197,102 @@ msgstr "" "Sección de atributos de objeto [%2zu] '%s' de % bytes con " "desplazamiento %#0:\n" -#: src/readelf.c:3629 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:3653 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3692 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3697 +#: src/readelf.c:3696 #, c-format msgid " File: %11\n" msgstr " File: %11\n" -#: src/readelf.c:3746 +#: src/readelf.c:3745 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3749 +#: src/readelf.c:3748 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3752 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3762 +#: src/readelf.c:3761 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3765 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3835 -#, fuzzy, c-format +#: src/readelf.c:3834 +#, fuzzy msgid "sprintf failure" msgstr "mprotect falló" -#: src/readelf.c:4317 +#: src/readelf.c:4316 msgid "empty block" msgstr "bloque vacío" -#: src/readelf.c:4320 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "bloque de byte %zu:" -#: src/readelf.c:4798 +#: src/readelf.c:4797 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4865 +#: src/readelf.c:4864 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4872 +#: src/readelf.c:4871 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# utilizado con offsetr de diferente tamaño" -#: src/readelf.c:4879 +#: src/readelf.c:4878 #, fuzzy, c-format msgid "%s %# used with different base addresses" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4886 +#: src/readelf.c:4885 #, fuzzy, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# utilizado con direcciones de diferente tamaño" -#: src/readelf.c:4986 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4994 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] ... % bytes ...\n" -#: src/readelf.c:5097 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5299,7 +5303,7 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [ Código]\n" -#: src/readelf.c:5105 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5308,20 +5312,20 @@ msgstr "" "\n" "Sección de abreviatura en compensación %:\n" -#: src/readelf.c:5118 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** error en lectura de abreviatura: %s\n" -#: src/readelf.c:5134 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] compensación: %, hijos: %s, etiqueta: %s\n" -#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 -#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 -#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 -#: src/readelf.c:10482 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5330,52 +5334,52 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:5180 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "versión desconocida" -#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "no hay valor de dirección" -#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5397 src/readelf.c:5471 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "no se ha podido obtener contenido de .debug_aranges: %s" -#: src/readelf.c:5412 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5390,12 +5394,12 @@ msgstr[1] "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entradas %zu:\n" -#: src/readelf.c:5443 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5445 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5403,7 +5407,7 @@ msgstr "" " Inicio [%*zu]: %0#*, longitud: %5, compensación CU DIE: " "%6\n" -#: src/readelf.c:5489 src/readelf.c:8426 +#: src/readelf.c:5488 src/readelf.c:8425 #, fuzzy, c-format msgid "" "\n" @@ -5412,150 +5416,150 @@ msgstr "" "\n" "Tabla en compensación %Zu:\n" -#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 -#: src/readelf.c:9171 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "Datos inválidos en sección [%zu] '%s'" -#: src/readelf.c:5509 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5521 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5525 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5536 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (compensación: %#)" -#: src/readelf.c:5542 +#: src/readelf.c:5541 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5553 +#: src/readelf.c:5552 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:5608 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5652 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:5675 src/readelf.c:9177 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:5730 src/readelf.c:9232 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:5746 src/readelf.c:9248 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9250 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5754 src/readelf.c:9256 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5765 src/readelf.c:9267 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5769 src/readelf.c:9271 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:5821 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "datos inválidos" -#: src/readelf.c:6006 src/readelf.c:9596 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6023 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "no se ha podido obtener contenido de .debug_ranges: %s" -#: src/readelf.c:6059 src/readelf.c:9651 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6061 src/readelf.c:9653 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6095 src/readelf.c:9789 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "Establecer dirección a %s\n" -#: src/readelf.c:6105 src/readelf.c:9799 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] lista vacía\n" -#: src/readelf.c:6365 +#: src/readelf.c:6364 #, fuzzy msgid " \n" msgstr " \n" -#: src/readelf.c:6622 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:6640 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5565,7 +5569,7 @@ msgstr "" "Sección de información de marco de llamada [%2zu] '%s' en compensación " "%#:\n" -#: src/readelf.c:6690 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5574,65 +5578,65 @@ msgstr "" "\n" " [%6tx] Terminator cero\n" -#: src/readelf.c:6791 src/readelf.c:6945 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "longitud de aumento inválida" -#: src/readelf.c:6806 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "Codificación de dirección FDE:" -#: src/readelf.c:6812 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "Codificación de puntero LSDA:" -#: src/readelf.c:6922 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#)" msgstr " (compensación: %#)" -#: src/readelf.c:6929 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#)" msgstr " (fin de compensación: %#)" -#: src/readelf.c:6966 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr "Puntero %-26sLSDA: %#\n" -#: src/readelf.c:7051 +#: src/readelf.c:7050 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "No se puede obtener código de atributo: %s" -#: src/readelf.c:7061 +#: src/readelf.c:7060 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "No se puede obtener forma de atributo: %s" -#: src/readelf.c:7083 +#: src/readelf.c:7082 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "No se puede obtener valor: %s" -#: src/readelf.c:7413 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "Archivo inválido" -#: src/readelf.c:7417 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " establecer archivo a %\n" -#: src/readelf.c:7421 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "no se puede leer encabezamiento ELF: %s" -#: src/readelf.c:7736 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5643,12 +5647,12 @@ msgstr "" "Sección DWARF [%2zu] '%s' en compensación %#:\n" " [Offset]\n" -#: src/readelf.c:7786 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7806 +#: src/readelf.c:7805 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5661,7 +5665,7 @@ msgstr "" "Tamaño de dirección: %, Tamaño de compensación: %\n" " Tipo de firma: %#, Tipo de compensación: %#\n" -#: src/readelf.c:7818 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5672,39 +5676,39 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:7828 src/readelf.c:7989 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7855 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7884 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "no se puede obtener DIE en compensación: %s" -#: src/readelf.c:7893 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "no se ha podido obtener etiqueta de DIE en compensación% en sección " "'%s': %s" -#: src/readelf.c:7929 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "No se puede obtener próximo DIE: %s\n" -#: src/readelf.c:7937 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "No se puede obtener próximo DIE: %s" -#: src/readelf.c:7981 +#: src/readelf.c:7980 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5715,7 +5719,7 @@ msgstr "" " Versión: %, Compensación de sección de abreviatura: %, " "Tamaño de dirección: %, Tamaño de compensación: %\n" -#: src/readelf.c:8033 +#: src/readelf.c:8032 #, fuzzy, c-format msgid "" "\n" @@ -5725,18 +5729,18 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %#:\n" -#: src/readelf.c:8365 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "Forma % desconocida" -#: src/readelf.c:8413 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "No se puede obtener sección de datos de línea: %s" #. Print what we got so far. -#: src/readelf.c:8517 +#: src/readelf.c:8516 #, fuzzy, c-format msgid "" "\n" @@ -5767,34 +5771,34 @@ msgstr "" "\n" "Códigos operativos:\n" -#: src/readelf.c:8539 +#: src/readelf.c:8538 #, fuzzy, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "no se puede obtener versión de símbolo: %s" -#: src/readelf.c:8547 +#: src/readelf.c:8546 #, fuzzy, c-format msgid "cannot handle address size: %u\n" msgstr "no hay valor de dirección" -#: src/readelf.c:8555 +#: src/readelf.c:8554 #, fuzzy, c-format msgid "cannot handle segment selector size: %u\n" msgstr "No se puede encontrar la sección: %s" -#: src/readelf.c:8565 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "datos inválidos en compensación %tu en sección [%zu] '%s'" -#: src/readelf.c:8580 +#: src/readelf.c:8579 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] argumento %hhu \n" msgstr[1] " [%*] argumento %hhu\n" -#: src/readelf.c:8591 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5802,12 +5806,12 @@ msgstr "" "\n" "Tabla de Directorio:" -#: src/readelf.c:8597 src/readelf.c:8674 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8668 +#: src/readelf.c:8667 #, fuzzy msgid "" "\n" @@ -5816,7 +5820,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:8729 +#: src/readelf.c:8728 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5824,7 +5828,7 @@ msgstr "" "Tabla de nombre de archivo:\n" " Directorio de entrada Tiempo Tamaño Nombre" -#: src/readelf.c:8775 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5833,7 +5837,7 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8779 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5841,132 +5845,132 @@ msgstr "" "\n" " Declaraciones de número de Línea:" -#: src/readelf.c:8794 +#: src/readelf.c:8793 #, fuzzy, c-format msgid "invalid maximum operations per instruction is zero" msgstr "longitud mínima inválida de tamaño de cadena coincidente" -#: src/readelf.c:8828 +#: src/readelf.c:8827 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " opcode especial %u: dirección+%u = %s, línea%+d = %zu\n" -#: src/readelf.c:8832 +#: src/readelf.c:8831 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr "" " opcode especial %u: dirección+%u = %s, op_index = %u, línea%+d = %zu\n" -#: src/readelf.c:8835 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8853 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " Código operativo extendido %u: " -#: src/readelf.c:8858 +#: src/readelf.c:8857 #, fuzzy msgid " end of sequence" msgstr "Fin de secuencia" -#: src/readelf.c:8876 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "Establecer dirección a %s\n" -#: src/readelf.c:8904 +#: src/readelf.c:8903 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "definir nuevo archivo: dir=%u, mtime=%, longitud=%, nombre=" "%s\n" -#: src/readelf.c:8918 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " establecer discriminador a %u\n" -#: src/readelf.c:8945 +#: src/readelf.c:8944 #, c-format msgid " set inlined context %u, function name %s (0x%x)\n" msgstr "" -#: src/readelf.c:8969 +#: src/readelf.c:8968 #, fuzzy, c-format #| msgid "Also show function names" msgid " set function name %s (0x%x)\n" msgstr "También mostrar nombres de función" #. Unknown, ignore it. -#: src/readelf.c:8976 +#: src/readelf.c:8975 #, fuzzy msgid " unknown opcode" msgstr "código operativo desconocido " #. Takes no argument. -#: src/readelf.c:8988 +#: src/readelf.c:8987 msgid " copy" msgstr "Copiar" -#: src/readelf.c:8999 +#: src/readelf.c:8998 #, fuzzy, c-format msgid " advance address by %u to " msgstr "Dirección de avance por %u a %s\n" -#: src/readelf.c:9003 src/readelf.c:9064 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:9015 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %\n" msgstr " línea de avance por la constante %d a %\n" -#: src/readelf.c:9025 +#: src/readelf.c:9024 #, c-format msgid " set file to %\n" msgstr " establecer archivo a %\n" -#: src/readelf.c:9036 +#: src/readelf.c:9035 #, c-format msgid " set column to %\n" msgstr " Establecer columna a %\n" -#: src/readelf.c:9043 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %\n" msgstr "Establecer '%s' a %\n" #. Takes no argument. -#: src/readelf.c:9049 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "Establecer bandera de bloque básico" -#: src/readelf.c:9060 +#: src/readelf.c:9059 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "Dirección de avance por constante %u a %s\n" -#: src/readelf.c:9080 +#: src/readelf.c:9079 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "dirección de avance por valor corregido %u a %s\n" #. Takes no argument. -#: src/readelf.c:9090 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " Establecer bandera prologue_end" #. Takes no argument. -#: src/readelf.c:9095 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " Establecer bandera epilogue_begin" -#: src/readelf.c:9105 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " establecer isa para %u\n" @@ -5974,110 +5978,110 @@ msgstr " establecer isa para %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9114 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " opcódigo con parámetro % desconocido:" msgstr[1] " opcódigo con parámetros % desconocido:" -#: src/readelf.c:9154 +#: src/readelf.c:9153 #, fuzzy, c-format msgid "cannot get .debug_loclists content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9320 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9360 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "datos inválidos" -#: src/readelf.c:9613 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "no es posible obtener contenido de .debug_loc: %s" -#: src/readelf.c:9826 src/readelf.c:10870 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " \n" msgstr " \n" -#: src/readelf.c:9881 src/readelf.c:10044 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "no es posible obtener datos de la sección de macro información: %s" -#: src/readelf.c:9961 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:9984 +#: src/readelf.c:9983 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** cadena no finalizada al final de la sección" -#: src/readelf.c:10085 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " Propietario Tamaño\n" -#: src/readelf.c:10097 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10103 src/readelf.c:10990 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " Dirección de punto de entrada: %#\n" -#: src/readelf.c:10139 +#: src/readelf.c:10138 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (compensación: %#)" -#: src/readelf.c:10147 +#: src/readelf.c:10146 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:10172 +#: src/readelf.c:10171 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " opcódigo con parámetro % desconocido:" -#: src/readelf.c:10179 +#: src/readelf.c:10178 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10191 +#: src/readelf.c:10190 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] argumento %hhu \n" -#: src/readelf.c:10206 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10407 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " Compensación [%5d] DIE: %6, Compensación CU DIE: %6, " "nombre: %s\n" -#: src/readelf.c:10451 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6089,42 +6093,42 @@ msgstr "" " %*s String\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10456 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10466 +#: src/readelf.c:10465 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** error en lectura de cadenas: %s\n" -#: src/readelf.c:10495 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/readelf.c:10594 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10596 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10610 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10619 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (compensación: %#)" -#: src/readelf.c:10673 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6133,7 +6137,7 @@ msgstr "" "\n" "Sección de tabla de búsqueda de marco de llamada [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10775 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6142,22 +6146,22 @@ msgstr "" "\n" "Excepción en el manejo de la sección de tabla [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10798 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr "Codificación LPStart: %#x " -#: src/readelf.c:10810 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "Codificación TType: %#x " -#: src/readelf.c:10825 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "Codificación de sitio de llamada: %#x " -#: src/readelf.c:10838 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6165,7 +6169,7 @@ msgstr "" "\n" " Tabla de sitio de llamada:" -#: src/readelf.c:10852 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6178,12 +6182,12 @@ msgstr "" " Landing pad: %#\n" " Action: %u\n" -#: src/readelf.c:10925 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "Codificación TType inválida" -#: src/readelf.c:10952 +#: src/readelf.c:10951 #, fuzzy, c-format msgid "" "\n" @@ -6192,37 +6196,37 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:10981 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10999 +#: src/readelf.c:10998 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:11006 +#: src/readelf.c:11005 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:11013 +#: src/readelf.c:11012 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:11020 +#: src/readelf.c:11019 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (compensación: %#)" -#: src/readelf.c:11027 +#: src/readelf.c:11026 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (fin de compensación: %#)" -#: src/readelf.c:11041 +#: src/readelf.c:11040 #, fuzzy, c-format msgid "" "\n" @@ -6231,7 +6235,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11066 +#: src/readelf.c:11065 #, fuzzy, c-format msgid "" "\n" @@ -6240,7 +6244,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11095 +#: src/readelf.c:11094 #, fuzzy, c-format msgid "" "\n" @@ -6249,7 +6253,7 @@ msgstr "" "\n" "Sección DWARF [%2zu] '%s' en compensación %# contiene entrada %zu:\n" -#: src/readelf.c:11127 +#: src/readelf.c:11126 #, fuzzy, c-format msgid "" "\n" @@ -6258,18 +6262,18 @@ msgstr "" "\n" "Tabla de símbolos inválida en compensación %#0\n" -#: src/readelf.c:11265 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "no se puede depurar descriptor de contexto: %s" -#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 -#: src/readelf.c:12429 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "no es posible convertir datos de la nota principal: %s" -#: src/readelf.c:11996 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6278,21 +6282,21 @@ msgstr "" "\n" "%*s... ..." -#: src/readelf.c:12508 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " Owner Data size Type\n" -#: src/readelf.c:12536 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12588 +#: src/readelf.c:12583 #, fuzzy, c-format msgid "cannot get content of note: %s" msgstr "no se puede obtener el contenido de sección de nota: %s" -#: src/readelf.c:12622 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6301,7 +6305,7 @@ msgstr "" "\n" "Sección de nota [%2zu] '%s' de % bytes en compensación %#0:\n" -#: src/readelf.c:12645 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6310,7 +6314,7 @@ msgstr "" "\n" "Segmento de nota de % bytes en compensación %#0:\n" -#: src/readelf.c:12692 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" @@ -6319,12 +6323,12 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12719 src/readelf.c:12770 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "no se pueden obtener datos para sección [%Zu] '%s': %s" -#: src/readelf.c:12724 +#: src/readelf.c:12718 #, fuzzy, c-format msgid "" "\n" @@ -6334,7 +6338,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12729 +#: src/readelf.c:12723 #, fuzzy, c-format msgid "" "\n" @@ -6345,7 +6349,7 @@ msgstr "" "Volcado Hex de sección [%Zu] '%s', % bytes en compensación " "%#0:\n" -#: src/readelf.c:12743 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" @@ -6354,7 +6358,7 @@ msgstr "" "\n" "Sección [%Zu] '%s' no tiene datos para volcar.\n" -#: src/readelf.c:12775 +#: src/readelf.c:12769 #, fuzzy, c-format msgid "" "\n" @@ -6364,7 +6368,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12780 +#: src/readelf.c:12774 #, fuzzy, c-format msgid "" "\n" @@ -6375,7 +6379,7 @@ msgstr "" "Sección de cadena [%Zu] '%s' contiene % bytes en compensación " "%#0:\n" -#: src/readelf.c:12829 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6384,7 +6388,7 @@ msgstr "" "\n" "sección [%lu] no existe" -#: src/readelf.c:12859 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6393,12 +6397,12 @@ msgstr "" "\n" "sección '%s' no existe" -#: src/readelf.c:12916 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "no se puede obtener el índice de símbolo de archivo '%s': %s" -#: src/readelf.c:12919 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6407,7 +6411,7 @@ msgstr "" "\n" "Archivo '%s' no tiene índice de símbolo\n" -#: src/readelf.c:12923 +#: src/readelf.c:12914 #, fuzzy, c-format msgid "" "\n" @@ -6416,12 +6420,12 @@ msgstr "" "\n" "Índice de archivo '%s' tiene %Zu entradas:\n" -#: src/readelf.c:12941 +#: src/readelf.c:12932 #, fuzzy, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "no es posible extraer miembro en compensación %Zu en '%s': %s" -#: src/readelf.c:12946 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Miembro de archivo contiene '%s':\n" @@ -6518,39 +6522,39 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "sección inválida" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, fuzzy, c-format +#: src/size.c:480 +#, fuzzy msgid "cannot get section header" msgstr "no se puede obtener encabezamiento de sección\n" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(TOTALES)\n" @@ -6714,27 +6718,24 @@ msgstr "Imprimir las cadenas de caracteres imprimibles en archivos." msgid "invalid value '%s' for %s parameter" msgstr "Valor inválido '%s' para parámetro %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "longitud mínima inválida de tamaño de cadena coincidente" -#: src/strings.c:585 -#, fuzzy, c-format +#: src/strings.c:584 +#, fuzzy msgid "lseek failed" msgstr "lseek64 falló" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "re-mmap falló" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect falló" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" @@ -6799,54 +6800,51 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Descarta símbolos de archivos objeto." -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "Sólo se permite ingresar un archivo junto con '-o' y '-f'" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "opción -f especificada dos veces" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "opción -F especificada dos veces" -#: src/strip.c:362 +#: src/strip.c:360 #, fuzzy, c-format msgid "cannot both keep and remove .comment section" msgstr "Quitar sección de comentario" -#: src/strip.c:481 -#, fuzzy, c-format +#: src/strip.c:479 +#, fuzzy msgid "bad relocation" msgstr "Mostrar reubicaciones" -#: src/strip.c:751 src/strip.c:775 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "no sepuede stat fichero de entrada '%s'" -#: src/strip.c:765 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "mientras se abría '%s'" -#: src/strip.c:803 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" @@ -6857,132 +6855,132 @@ msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:815 +#: src/strip.c:813 #, fuzzy, c-format msgid "%s: no support for stripping archive" msgstr "%s: no puede utilizarse -o o -f cuando se extrae un archivo" -#: src/strip.c:1052 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "No se puede abrir el segundo plano EBL" -#: src/strip.c:1097 -#, fuzzy, c-format +#: src/strip.c:1094 +#, fuzzy msgid "cannot get number of phdrs" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/strip.c:1111 src/strip.c:1154 +#: src/strip.c:1108 src/strip.c:1151 #, fuzzy, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1121 src/strip.c:1164 +#: src/strip.c:1118 src/strip.c:1161 #, fuzzy, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "no se puede crear fichero nuevo '%s': %s" -#: src/strip.c:1244 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "Fichero illformed '%s'" -#: src/strip.c:1254 +#: src/strip.c:1251 #, fuzzy, c-format msgid "Cannot remove allocated section '%s'" msgstr "No se puede asignar sección PLT: %s" -#: src/strip.c:1263 +#: src/strip.c:1260 #, fuzzy, c-format msgid "Cannot both keep and remove section '%s'" msgstr "No se puede añadir nueva sección: %s" -#: src/strip.c:1628 src/strip.c:1743 +#: src/strip.c:1624 src/strip.c:1739 #, c-format msgid "while generating output file: %s" msgstr "al generar fichero de salida: %s" -#: src/strip.c:1692 +#: src/strip.c:1688 #, fuzzy, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1701 +#: src/strip.c:1697 #, fuzzy, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1709 src/strip.c:2554 +#: src/strip.c:1705 src/strip.c:2546 #, fuzzy, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:1726 +#: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "al preparar salida para '%s'" -#: src/strip.c:1788 src/strip.c:1851 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "al crear sección de encabezamiento de sección: %s" -#: src/strip.c:1797 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "no se puede asignar espacio para los datos: %s" -#: src/strip.c:1863 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:1870 -#, fuzzy, c-format +#: src/strip.c:1862 +#, fuzzy msgid "no memory to create section header string table" msgstr "al crear tabla de cadenas de encabezamiento de sección: %s" -#: src/strip.c:2083 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2470 src/strip.c:2578 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "al escribir '%s': %s" -#: src/strip.c:2481 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "al crear '%s'" -#: src/strip.c:2504 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "al computar la suma de verificación para información de depuración" -#: src/strip.c:2545 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: error al crear encabezamiento ELF: %s" -#: src/strip.c:2563 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: error al leer el fichero: %s" -#: src/strip.c:2603 src/strip.c:2623 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "al escribir '%s'" -#: src/strip.c:2660 src/strip.c:2667 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "Error al terminar '%s': %s" -#: src/strip.c:2684 src/strip.c:2760 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "no es posible establecer acceso y fecha de modificación de '%s'" @@ -7070,7 +7068,7 @@ msgstr "no se puede crear el encabezamiento ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "No se puede encontrar la sección: %s" -#: src/unstrip.c:244 src/unstrip.c:2088 +#: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" msgstr "no se puede leer encabezamiento ELF: %s" @@ -7090,12 +7088,12 @@ msgstr "no se puede actualizar reubicación: %s" msgid "cannot copy ELF header: %s" msgstr "no se puede copiar encabezamiento ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 #, fuzzy, c-format msgid "cannot get number of program headers: %s" msgstr "no se pudo determinar la cantidad de encabezados de programa: %s" -#: src/unstrip.c:270 src/unstrip.c:2110 +#: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" msgstr "No pueden crear encabezamientos de programa: %s" @@ -7110,12 +7108,12 @@ msgstr "no puede copiar encabezamiento de programa: %s" msgid "cannot copy section header: %s" msgstr "no se puede copiar encabezamiento de sección: %s" -#: src/unstrip.c:289 src/unstrip.c:1710 +#: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:291 src/unstrip.c:1712 +#: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" msgstr "no pueden copiar datos de sección: %s" @@ -7125,14 +7123,14 @@ msgstr "no pueden copiar datos de sección: %s" msgid "cannot create directory '%s'" msgstr "no se puede crear el directorio '%s'" -#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 -#: src/unstrip.c:1752 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 +#: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "no se puede obtener entrada de tabla de símbolos: %s" -#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 -#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 +#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" msgstr "no se puede actualizar tabla de símbolos: %s" @@ -7157,165 +7155,163 @@ msgstr "no se puede actualizar reubicación: %s" msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:582 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "no se puede obtener versión de símbolo: %s" -#: src/unstrip.c:595 +#: src/unstrip.c:594 #, fuzzy, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "tipo de sección inesperado en [%Zu] con sh_link para symtab" -#: src/unstrip.c:850 +#: src/unstrip.c:849 #, fuzzy, c-format msgid "cannot get symbol section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:852 +#: src/unstrip.c:851 #, fuzzy, c-format msgid "cannot get string section data: %s" msgstr "no se pueden obtener datos de sección: %s" -#: src/unstrip.c:869 +#: src/unstrip.c:868 #, fuzzy, c-format msgid "invalid string offset in symbol [%zu]" msgstr "compensación de cadena inválida en símbolo [%Zu]" -#: src/unstrip.c:1027 src/unstrip.c:1435 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, fuzzy, c-format msgid "cannot read section [%zu] name: %s" msgstr "no se puede leer nombre [%Zu]: %s" -#: src/unstrip.c:1042 +#: src/unstrip.c:1041 #, fuzzy, c-format msgid "bad sh_link for group section: %s" msgstr ".debug_line section inválida" -#: src/unstrip.c:1048 +#: src/unstrip.c:1047 #, fuzzy, c-format msgid "couldn't get shdr for group section: %s" msgstr "No se puede obtener encabezamiento de sección 0th: %s" -#: src/unstrip.c:1053 +#: src/unstrip.c:1052 #, fuzzy, c-format msgid "bad data for group symbol section: %s" msgstr "no se puede obtener sección para símbolos\n" -#: src/unstrip.c:1059 +#: src/unstrip.c:1058 #, fuzzy, c-format msgid "couldn't get symbol for group section: %s" msgstr "no se puede obtener versión de símbolo: %s" -#: src/unstrip.c:1064 +#: src/unstrip.c:1063 #, fuzzy, c-format msgid "bad symbol name for group section: %s" msgstr "No se puede obtener el encabezamiento de sección %zu: %s" -#: src/unstrip.c:1075 src/unstrip.c:1556 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "no se puede hallar sección coincidente para [%Zu] '%s'" -#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "no se puede leer sección '.gnu.prelink_undo': %s" -#: src/unstrip.c:1157 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1168 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "contenido inválido en sección '%s'" -#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "no se puede añadir nombre de sección a tabla de cadenas: %s" -#: src/unstrip.c:1364 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" "no se pueden actualizar datos de tabla de cadenas de encabezamiento de " "sección: %s" -#: src/unstrip.c:1393 src/unstrip.c:1397 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "no se puede obtener índice de sección de tabla de cadenas de encabezamiento " "de sección: %s" -#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "No se puede obtener cuenta de sección: %s" -#: src/unstrip.c:1408 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "más secciones en el archivo despojado que en el archivo de depuración -- " "¿argumentos invertidos?" -#: src/unstrip.c:1412 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1460 src/unstrip.c:1571 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "no se puede obtener tabla de cadenas de encabezamiento de sección: %s" -#: src/unstrip.c:1630 +#: src/unstrip.c:1628 #, c-format msgid "cannot add new section: %s" msgstr "No se puede añadir nueva sección: %s" -#: src/unstrip.c:1760 +#: src/unstrip.c:1758 #, fuzzy, c-format msgid "symbol [%zu] has invalid section index" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:1792 +#: src/unstrip.c:1790 #, fuzzy, c-format msgid "group has invalid section index [%zd]" msgstr "símbolo [%Zu] tiene índice de sección inválido" -#: src/unstrip.c:2067 +#: src/unstrip.c:2065 #, c-format msgid "cannot read section data: %s" msgstr "no se puede leer la sección de datos: %s" -#: src/unstrip.c:2096 +#: src/unstrip.c:2094 #, c-format msgid "cannot update ELF header: %s" msgstr "No se puede actualizar encabezamiento ELF: %s" -#: src/unstrip.c:2120 +#: src/unstrip.c:2118 #, c-format msgid "cannot update program header: %s" msgstr "no se puede actualizar encabezamiento de programa: %s" -#: src/unstrip.c:2125 src/unstrip.c:2208 +#: src/unstrip.c:2123 src/unstrip.c:2206 #, c-format msgid "cannot write output file: %s" msgstr "no se puede escribir al archivo de salida: %s" -#: src/unstrip.c:2176 +#: src/unstrip.c:2174 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "datos DWARF no se ajustan para polarización de pre-enlace; considere prelink " "-u" -#: src/unstrip.c:2179 +#: src/unstrip.c:2177 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7323,77 +7319,75 @@ msgstr "" "Datos DWARF en '%s' no se ajustan a polarización de pre-enlace; considere " "prelink -u" -#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 +#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "no se puede crear un descriptor ELF: %s" -#: src/unstrip.c:2237 +#: src/unstrip.c:2235 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2239 +#: src/unstrip.c:2237 msgid ", use --force" msgstr "" -#: src/unstrip.c:2267 +#: src/unstrip.c:2265 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2271 +#: src/unstrip.c:2269 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2275 +#: src/unstrip.c:2273 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2279 +#: src/unstrip.c:2277 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2310 +#: src/unstrip.c:2308 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "no se puede hallar archivo obtenido para módulo '%s': %s " -#: src/unstrip.c:2314 +#: src/unstrip.c:2312 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "No se puede abrir el archivo '%s' obtenido para módulo '%s': %s" -#: src/unstrip.c:2329 +#: src/unstrip.c:2327 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "no puede hallar archivo de depuración para módulo '%s': %su" -#: src/unstrip.c:2333 +#: src/unstrip.c:2331 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "No puede abrir archivo de depuración '%s' para módulo '%s': %s" -#: src/unstrip.c:2346 +#: src/unstrip.c:2344 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "No se obtuvo el archivo '%s' de módulo '%s' " -#: src/unstrip.c:2377 +#: src/unstrip.c:2375 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "No puede almacenar en cache direcciones de sección para módulo '%s': %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "No se encontraron módulos coincidentes" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "coincidió con más de un módulo" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7401,7 +7395,7 @@ msgstr "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 #, fuzzy msgid "" "Combine stripped files with separate symbols and debug information.\n" diff --git a/po/ja.po b/po/ja.po index 595bdffb..8a987212 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-11-10 16:21+0100\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2009-09-20 15:32+0900\n" "Last-Translator: Hyu_gabaru Ryu_ichi \n" "Language-Team: Japanese \n" @@ -42,7 +42,7 @@ msgid "" "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" msgstr "" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 #: src/unstrip.c:312 #, c-format msgid "memory exhausted" @@ -290,7 +290,7 @@ msgstr "不明な言語コードです" msgid ".debug_addr section missing" msgstr ".debug_addr セクションが見つかりません" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "入力選択オプション:" @@ -517,7 +517,7 @@ msgid "No backend" msgstr "バックエンドがありません" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "" @@ -568,18 +568,18 @@ msgstr "" msgid " Args: " msgstr "" -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " ビルド ID: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr "" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr "" @@ -613,7 +613,7 @@ msgstr "ソース演算子の大きさが無効です" msgid "invalid size of destination operand" msgstr "宛先演算子の大きさが無効です" -#: libelf/elf_error.c:87 src/readelf.c:6215 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "無効なエンコードです" @@ -698,8 +698,8 @@ msgstr "データ/scnの不整合です" msgid "invalid section header" msgstr "不当なセクションヘッダーです" -#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 -#: src/readelf.c:10794 src/readelf.c:10976 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "不当なデータです" @@ -771,47 +771,49 @@ msgstr "データを圧縮できません" msgid "cannot decompress data" msgstr "データを展開できません" -#: src/addr2line.c:57 +#: src/addr2line.c:59 msgid "Input format options:" msgstr "入力フォーマットオプション:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "アドレスを NAME セクションに 対する 相対 オフセット として 扱う" -#: src/addr2line.c:61 +#: src/addr2line.c:63 msgid "Output format options:" msgstr "出力フォーマットオプション:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "各項目の前にアドレスを表示" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "ソースファイルの ベースネーム のみ 表示" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "コンパイルディレクトリを 使用して 絶対ファイル名を 表示" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "関数名も表示" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "シンボル名 または セクション名も 表示" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "シンボル名と セクション名も 表示" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "行テーブルフラグも表示" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -819,47 +821,52 @@ msgstr "" "アドレスの サブルーチンの インライン展開を 引き起こした 全ての ソース位置を " "表示" -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "デマングルされた シンボルを 表示 (ARGは常に無視される)" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "全ての 情報を 一行で 表示し、 字下げする" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "コンパイルディレクトリを 使用して 絶対ファイル名を 表示" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Misc:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" "ADDR のソースファイルと行の情報を 検索する (デフォルトでは a.out から)" #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %# lies outside section '%s'" msgstr "" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "シンボル '%s' が見つかりません" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "" @@ -1028,112 +1035,110 @@ msgstr "アーカイブ '%s' を stat できません" msgid "no entry %s in archive\n" msgstr "アーカイブに項目 %s がありません\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "ハッシュテーブルを作成できません" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "ハッシュテーブルに挿入できません" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "'%s' を stat できません" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "%s の内容を読み込めません: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "%.*s を開けません" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "%s への書き込みに失敗しました" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "%s のモードを変更できません" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "%s の更新時間を変更できません" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "一時ファイルを %.*s に名前変更できません" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "新しいファイルを作成できません" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "位置メンバー %s が見つかりません" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: 項目 %s がアーカイブにありません!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "%s を開けません" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "%s を stat できません" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s は一般ファイルではありません" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "%s の ELF 記述子を取得できません: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "%s を読み込めません: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, c-format msgid "cannot represent ar_date" msgstr "ar_date を表現できません" -#: src/ar.c:1489 +#: src/ar.c:1486 #, c-format msgid "cannot represent ar_uid" msgstr "ar_uid を表現できません" -#: src/ar.c:1495 +#: src/ar.c:1492 #, c-format msgid "cannot represent ar_gid" msgstr "ar_gid を表現できません" -#: src/ar.c:1501 +#: src/ar.c:1498 #, c-format msgid "cannot represent ar_mode" msgstr "ar_mode を表現できません" -#: src/ar.c:1507 +#: src/ar.c:1504 #, c-format msgid "cannot represent ar_size" msgstr "ar_size を表現できません" @@ -1577,8 +1582,8 @@ msgid "Invalid value '%s' for --gaps parameter." msgstr "--gaps パラメータ に対する不当な値 '%s' です" #: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 -#: src/unstrip.c:2197 src/unstrip.c:2226 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 +#: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "'%s' を開けません" @@ -1608,7 +1613,7 @@ msgstr "セクション %zu の内容を取得できません: %s" msgid "cannot get relocation: %s" msgstr "リロケーションを取得できません: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "-o オプションが 2 回指定されています" @@ -1629,7 +1634,7 @@ msgstr "不明な圧縮タイプ '%s'" msgid "No input file given" msgstr "入力ファイルが与えられていません" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "'-o' と一緒の場合は入力ファイルは 1 つしか認められません" @@ -1879,7 +1884,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "セクション [%2d] '%s': セクションデータを得られません\n" @@ -3318,202 +3323,202 @@ msgid "" "section [%2d] '%s': unknown core file note type % at offset %zu\n" msgstr "" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " "offset %zu\n" msgstr "" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " "'%s' at offset %zu\n" msgstr "" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" msgstr "" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " "alignment\n" msgstr "" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " "program header entry" msgstr "" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "新しいファイルを生成できません" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3729,12 +3734,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: 内部エラー %d (%s-%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2767 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "'%s' を閉じている最中" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: ファイル形式を認識できませんでした" @@ -3769,24 +3774,23 @@ msgstr "アーカイブのオフセットを最初にリセットできません msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: ファイル形式を認識できません" -#: src/nm.c:704 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "検索ツリーを生成できません" -#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 -#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 -#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 -#: src/strip.c:1089 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "セクションヘッダー文字列テーブル索引が得られません" #. We always print this prolog. -#: src/nm.c:770 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -3800,7 +3804,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:773 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -3809,51 +3813,51 @@ msgstr "" "%*s%-*s %-*s クラス タイプ %-*s %*s セクション\n" "\n" -#: src/nm.c:775 +#: src/nm.c:773 msgctxt "sysv" msgid "Name" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:777 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:779 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:781 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1249 +#: src/nm.c:1246 #, fuzzy, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" -#: src/nm.c:1254 +#: src/nm.c:1251 #, fuzzy, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: セクション `%s' の大きさは項目の大きさの整数倍ではありません" -#: src/nm.c:1335 +#: src/nm.c:1331 #, fuzzy, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: セクションの項目の大きさ `%s' は予期したものとは異なります" #. XXX Add machine specific object file types. -#: src/nm.c:1571 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: 不当な操作" -#: src/nm.c:1621 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: シンボルがありません" @@ -3896,11 +3900,11 @@ msgstr "操作が指定されていません。\n" msgid "while close `%s'" msgstr "" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "不当なシンボル" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "不当なセクション" @@ -3922,12 +3926,10 @@ msgid "Contents of section %s:\n" msgstr "" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "逆アセンブルできません" -#: src/objdump.c:759 -#, c-format +#: src/objdump.c:758 msgid "cannot create backend for elf file" msgstr "elf ファイル用にバックエンドを作成できません" @@ -4106,21 +4108,21 @@ msgstr "不明な DWARF デバッグセクション `%s'.\n" msgid "cannot generate Elf descriptor: %s" msgstr "Elf 記述子を生成できません: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "セクション数を決定できません: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "セクションを取得できません: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 -#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 -#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 -#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 +#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" msgstr "セクションヘッダーを取得できません: %s" @@ -4130,8 +4132,8 @@ msgstr "セクションヘッダーを取得できません: %s" msgid "cannot get section name" msgstr "セクション名を取得できません" -#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 -#: src/readelf.c:10961 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "%s の内容を取得できません: %s" @@ -4191,48 +4193,48 @@ msgstr "ELF ヘッダーを読み込めません: %s" msgid "cannot create EBL handle" msgstr "EBL ハンドルを作成できません" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "プログラムヘッダの数を決定できません: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, c-format msgid "cannot read ELF: %s" msgstr "ELFを読み込めません: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "なし (なし)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (リロケータブルファイル)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "(EXEC (実行ファイル)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (共用オブジェクトファイル)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (コアファイル)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "OS 固有: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "プロセッサー固有: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4240,7 +4242,7 @@ msgstr "" "ELF ヘッダー:\n" " マジック: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4249,123 +4251,123 @@ msgstr "" "\n" " クラス: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " データ: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " 識別バージョン: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(現在)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " ABI バージョン: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " タイプ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " マシン : %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, fuzzy, c-format msgid " Machine: : 0x%x\n" msgstr " マシン : %s\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " バージョン: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#\n" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: % %s\n" msgstr " プログラムヘッダーの開始: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(ファイルへのバイト数)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: % %s\n" msgstr " セクションヘッダーの開始: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " フラグ: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: % %s\n" msgstr " このヘッダーの大きさ: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(バイト)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: % %s\n" msgstr " プログラムヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, fuzzy, c-format msgid " Number of program headers entries: %" msgstr " プログラムヘッダー項目の数 : %\n" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, fuzzy, c-format msgid " (% in [0].sh_info)" msgstr "([0].sh_link の %)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr "([0]は使えません)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: % %s\n" msgstr " セクションヘッダー項目の大きさ:% %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %" msgstr " セクションヘッダー項目の数 : %" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (% in [0].sh_size)" msgstr " ([0].sh_size の %)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (% in [0].sh_link)" msgstr "([0].sh_link の %)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4374,7 +4376,7 @@ msgstr "" " セクションヘッダー文字列テーブル索引: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %\n" @@ -4383,12 +4385,12 @@ msgstr "" " セクションヘッダー文字列テーブル索引: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, fuzzy, c-format msgid "cannot get number of sections: %s" msgstr "セクション数を決定できません: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, fuzzy, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4397,16 +4399,16 @@ msgstr "" "オフセット %2$# から始まる %1$d 個のセクションヘッダーがあります:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, fuzzy, c-format msgid "cannot get section header string table index: %s" msgstr "セクションヘッダー文字列テーブル索引が得られません" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "セクションヘッダー:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4414,7 +4416,7 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES フラグLk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4422,35 +4424,35 @@ msgstr "" "[番] 名前 タイプ アドレス オフセ 大きさ ES " "フラグLk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr "" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, fuzzy, c-format msgid "bad compression header for section %zd: %s" msgstr "セクションヘッダー文字列セクションを生成できません: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, fuzzy, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "プログラムヘッダー:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " タイプ オフセ 仮アドレス 物アドレス ファイ量 メモ量 Flg 調整 " -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4458,12 +4460,12 @@ msgstr "" " タイプ オフセ 仮想アドレス 物理アドレス ファイル量メモ" "量 Flg 調整 " -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[プログラム割込みを要求: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4473,12 +4475,12 @@ msgstr "" " セクションからセグメントへのマッビング:\n" " セグメント セクション..." -#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "プログラムヘッダーを得られません: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4491,7 +4493,7 @@ msgstr[0] "" "署名 '%3$s' を持つ COMDAT セクショングループ [%1$2zu] '%2$s' には %4$zu 個の" "項目があります:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4504,31 +4506,31 @@ msgstr[0] "" "署名 '%3$s' を持つセクショングループ [%1$2zu] '%2$s' には %4$zu 個の項目があ" "ります:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "" msgstr "<不当なシンボル>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "" msgstr "<不当なセクション>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 -#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, fuzzy, c-format msgid "cannot get section [%zd] header: %s" msgstr "セクションヘッダーを得られません: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, fuzzy, c-format msgid "invalid sh_link value in section %zu" msgstr "不当な .debug_line セクション" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4544,36 +4546,36 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " タイプ 値\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "共用ライブラリー: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "ライブラリー so 名: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "ライブラリー rパス: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "ライブラリー run パス: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "% (bytes)\n" msgstr "% (バイト)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4582,7 +4584,7 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4603,7 +4605,7 @@ msgstr[0] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4616,29 +4618,29 @@ msgstr[0] "" "オフセット %3$#0 のリロケーションセクション [%1$2u] '%2$s' には %4$d " "個の項目があります:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " オフセット タイプ 値 名前\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "" msgstr "<不当なRELOC>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr " オフセット タイプ 値 付加名\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4650,39 +4652,39 @@ msgstr[0] "" "\n" "シンボルテーブル [%2u] '%s' には %u 個の項目があります:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" msgstr[0] " %lu ローカルシンボル文字列テーブル: [%2u] '%s'\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " 数 : 値 大き タイプ Bind Vis Ndx 名前\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "不正な動的シンボル" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "なし" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| " msgstr "| <不明>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4698,17 +4700,17 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: バージョン: %hu ファイル: %s 数: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: 名前: %s フラグ: %s バージョン: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -4724,18 +4726,18 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: バージョン: %hd フラグ: %s 索引: %hd 数: %hd 名前: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: 親 %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -4751,15 +4753,15 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *ローカル* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *グローバル* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -4777,22 +4779,22 @@ msgstr[0] "" " アドレス: %#0* オフセット: %#08 セクションへのリンク: " "[%2u] '%s'\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, fuzzy, no-c-format msgid " Length Number % of total Coverage\n" msgstr " 長さ 数 全体の% 範囲 \n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, fuzzy, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -4801,37 +4803,37 @@ msgstr "" " テストの平均数: 検索成功: %f\n" " 検索失敗: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "セクションからデータを得られません %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, fuzzy, c-format msgid "invalid data in sysv.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, fuzzy, c-format msgid "invalid chain in sysv.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, fuzzy, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, fuzzy, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, fuzzy, c-format msgid "invalid data in gnu.hash section %d" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:3451 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -4862,7 +4864,7 @@ msgstr "" " ライブラリー タイムスタンプ チェックサム バー" "ジョン フラグ" -#: src/readelf.c:3612 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -4873,102 +4875,101 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのオブジェクト属性セクション " "[%1$2zu] '%2$s':\n" -#: src/readelf.c:3629 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:3653 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3692 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3697 +#: src/readelf.c:3696 #, c-format msgid " File: %11\n" msgstr " ファイル: %11\n" -#: src/readelf.c:3746 +#: src/readelf.c:3745 #, c-format msgid " %s: %, %s\n" msgstr " %s: %、%s\n" -#: src/readelf.c:3749 +#: src/readelf.c:3748 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3752 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3762 +#: src/readelf.c:3761 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3765 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3835 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "" -#: src/readelf.c:4317 +#: src/readelf.c:4316 msgid "empty block" msgstr "空ブロック" -#: src/readelf.c:4320 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "%zu バイトのブロック:" -#: src/readelf.c:4798 +#: src/readelf.c:4797 #, fuzzy, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%4] %s \n" -#: src/readelf.c:4865 +#: src/readelf.c:4864 #, c-format msgid "%s %# used with different address sizes" msgstr "" -#: src/readelf.c:4872 +#: src/readelf.c:4871 #, c-format msgid "%s %# used with different offset sizes" msgstr "" -#: src/readelf.c:4879 +#: src/readelf.c:4878 #, c-format msgid "%s %# used with different base addresses" msgstr "" -#: src/readelf.c:4886 +#: src/readelf.c:4885 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "" -#: src/readelf.c:4986 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] \n" msgstr "" -#: src/readelf.c:4994 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr "" -#: src/readelf.c:5097 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -4979,7 +4980,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [ コード]\n" -#: src/readelf.c:5105 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -4988,20 +4989,20 @@ msgstr "" "\n" "オフセット % の略語セクション:\n" -#: src/readelf.c:5118 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** 略語を読んでいる間にエラー: %s\n" -#: src/readelf.c:5134 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] オフセット: %、子: %s、タグ: %s\n" -#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 -#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 -#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 -#: src/readelf.c:10482 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5010,52 +5011,52 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:5180 +#: src/readelf.c:5179 #, fuzzy, c-format msgid "cannot get .debug_addr section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, fuzzy, c-format msgid " Address size: %8\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, fuzzy, c-format msgid " Segment size: %8\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, fuzzy, c-format msgid "Unknown version" msgstr "不明なバージョン" -#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, fuzzy, c-format msgid "unsupported address size" msgstr "アドレス値ではありません" -#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "" -#: src/readelf.c:5397 src/readelf.c:5471 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr ".debug_aragnes の内容を得られません: %s" -#: src/readelf.c:5412 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5068,19 +5069,19 @@ msgstr[0] "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:5443 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5445 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" msgstr "" " [%*zu] 開始: %0#*、長さ: %5、CU DIE オフセット: %6\n" -#: src/readelf.c:5489 src/readelf.c:8426 +#: src/readelf.c:5488 src/readelf.c:8425 #, fuzzy, c-format msgid "" "\n" @@ -5089,152 +5090,152 @@ msgstr "" "\n" "オフセット %Zu のテーブル:\n" -#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 -#: src/readelf.c:9171 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/readelf.c:5509 +#: src/readelf.c:5508 #, fuzzy, c-format msgid "" "\n" " Length: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5521 +#: src/readelf.c:5520 #, fuzzy, c-format msgid " DWARF version: %6\n" msgstr " %s: %\n" -#: src/readelf.c:5525 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "" -#: src/readelf.c:5536 +#: src/readelf.c:5535 #, fuzzy, c-format msgid " CU offset: %6\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5542 +#: src/readelf.c:5541 #, fuzzy, c-format msgid " Address size: %6\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5553 +#: src/readelf.c:5552 #, fuzzy, c-format msgid "" " Segment size: %6\n" "\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:5608 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr "" -#: src/readelf.c:5652 +#: src/readelf.c:5651 #, fuzzy, c-format msgid "cannot get .debug_rnglists content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:5675 src/readelf.c:9177 +#: src/readelf.c:5674 src/readelf.c:9176 #, fuzzy, c-format msgid "" "Table at Offset 0x%:\n" "\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:5730 src/readelf.c:9232 +#: src/readelf.c:5729 src/readelf.c:9231 #, fuzzy, c-format msgid " Offset entries: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:5746 src/readelf.c:9248 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr "" -#: src/readelf.c:5748 src/readelf.c:9250 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6] base: " msgstr "" -#: src/readelf.c:5754 src/readelf.c:9256 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr "" -#: src/readelf.c:5765 src/readelf.c:9267 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "" -#: src/readelf.c:5769 src/readelf.c:9271 +#: src/readelf.c:5768 src/readelf.c:9270 #, fuzzy, c-format msgid " Offsets starting at 0x%:\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:5821 +#: src/readelf.c:5820 #, fuzzy, c-format msgid "invalid range list data" msgstr "不当なデータ" -#: src/readelf.c:6006 src/readelf.c:9596 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" "\n" msgstr "" -#: src/readelf.c:6023 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:6059 src/readelf.c:9651 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" " Unknown CU base: " msgstr "" -#: src/readelf.c:6061 src/readelf.c:9653 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" " CU [%6] base: " msgstr "" -#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6095 src/readelf.c:9789 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:6105 src/readelf.c:9799 +#: src/readelf.c:6104 src/readelf.c:9798 #, fuzzy, c-format msgid " [%6tx] empty list\n" msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6365 +#: src/readelf.c:6364 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:6622 +#: src/readelf.c:6621 #, fuzzy, c-format msgid "cannot get ELF: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:6640 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5243,7 +5244,7 @@ msgstr "" "\n" "オフセット %3$# の フレーム情報呼出しセクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:6690 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5252,65 +5253,65 @@ msgstr "" "\n" " [%6tx] ゼロ終端\n" -#: src/readelf.c:6791 src/readelf.c:6945 +#: src/readelf.c:6790 src/readelf.c:6944 #, fuzzy, c-format msgid "invalid augmentation length" msgstr "不当な拡大エンコード" -#: src/readelf.c:6806 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "FDE アドレスエンコード" -#: src/readelf.c:6812 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "LSDA ポインターエンコード:" -#: src/readelf.c:6922 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#)" msgstr " (オフセット: %#)" -#: src/readelf.c:6929 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#)" msgstr " (終了オフセット: %#)" -#: src/readelf.c:6966 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sLSDA ポインター: %#\n" -#: src/readelf.c:7051 +#: src/readelf.c:7050 #, fuzzy, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "属性コードを得られません: %s" -#: src/readelf.c:7061 +#: src/readelf.c:7060 #, fuzzy, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "属性様式を得られません: %s" -#: src/readelf.c:7083 +#: src/readelf.c:7082 #, fuzzy, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "属性値を得られません: %s" -#: src/readelf.c:7413 +#: src/readelf.c:7412 #, fuzzy, c-format msgid "invalid file (%): %s" msgstr "不当なファイル" -#: src/readelf.c:7417 +#: src/readelf.c:7416 #, fuzzy, c-format msgid "no srcfiles for CU [%]" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:7421 +#: src/readelf.c:7420 #, fuzzy, c-format msgid "couldn't get DWARF CU: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7736 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5321,12 +5322,12 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" " [オフセット]\n" -#: src/readelf.c:7786 +#: src/readelf.c:7785 #, fuzzy, c-format msgid "cannot get next unit: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7806 +#: src/readelf.c:7805 #, fuzzy, c-format msgid "" " Type unit at offset %:\n" @@ -5338,7 +5339,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7818 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5349,39 +5350,39 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:7828 src/readelf.c:7989 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%)" msgstr "" -#: src/readelf.c:7855 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "" -#: src/readelf.c:7884 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "DIE オフセットを得られません: %s" -#: src/readelf.c:7893 +#: src/readelf.c:7892 #, fuzzy, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "セクション '%2$s' 中のオフセット %1$ の DIE のタグを得られません: " "%3$s" -#: src/readelf.c:7929 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "次の DIE を得られません: %s\n" -#: src/readelf.c:7937 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "次の DIE を得られません: %s" -#: src/readelf.c:7981 +#: src/readelf.c:7980 #, fuzzy, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5392,7 +5393,7 @@ msgstr "" " バージョン: %2$、略語セクションオフセット: %3$、アドレスの大" "きさ: %4$、オフセットの大きさ: %5$\n" -#: src/readelf.c:8033 +#: src/readelf.c:8032 #, fuzzy, c-format msgid "" "\n" @@ -5402,18 +5403,18 @@ msgstr "" "\n" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" -#: src/readelf.c:8365 +#: src/readelf.c:8364 #, fuzzy, c-format msgid "unknown form: %s" msgstr "不明な様式 %" -#: src/readelf.c:8413 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "ラインデータセクションデータを得られません: %s" #. Print what we got so far. -#: src/readelf.c:8517 +#: src/readelf.c:8516 #, fuzzy, c-format msgid "" "\n" @@ -5443,33 +5444,33 @@ msgstr "" "\n" "命令コード:\n" -#: src/readelf.c:8539 +#: src/readelf.c:8538 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr ".debug_line バージョンを扱えません: %u\n" -#: src/readelf.c:8547 +#: src/readelf.c:8546 #, c-format msgid "cannot handle address size: %u\n" msgstr "アドレスサイズを扱えません: %u\n" -#: src/readelf.c:8555 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "セグメントセレクタサイズを扱えません: %u\n" -#: src/readelf.c:8565 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "セクション [%2$zu] '%3$s' 中のオフセット %1$tu に不当なデータ" -#: src/readelf.c:8580 +#: src/readelf.c:8579 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" msgstr[0] " [%*] %hhu パラメーター\n" -#: src/readelf.c:8591 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5477,12 +5478,12 @@ msgstr "" "\n" "ディレクトリーテーブル:" -#: src/readelf.c:8597 src/readelf.c:8674 +#: src/readelf.c:8596 src/readelf.c:8673 #, fuzzy, c-format msgid " [" msgstr " %s: %s\n" -#: src/readelf.c:8668 +#: src/readelf.c:8667 #, fuzzy msgid "" "\n" @@ -5491,7 +5492,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:8729 +#: src/readelf.c:8728 #, fuzzy msgid " Entry Dir Time Size Name" msgstr "" @@ -5499,7 +5500,7 @@ msgstr "" "ファイル名テーブル:\n" " Entry Dir 時刻 大きさ 名前" -#: src/readelf.c:8775 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5508,7 +5509,7 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8779 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5516,129 +5517,129 @@ msgstr "" "\n" "行 番号 文:" -#: src/readelf.c:8794 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "" -#: src/readelf.c:8828 +#: src/readelf.c:8827 #, fuzzy, c-format msgid " special opcode %u: address+%u = " msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:8832 +#: src/readelf.c:8831 #, fuzzy, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr " 特殊命令コード %u: アドレス+%u = %s, 行%+d = %zu\n" -#: src/readelf.c:8835 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr "" -#: src/readelf.c:8853 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " 拡張命令コード %u: " -#: src/readelf.c:8858 +#: src/readelf.c:8857 #, fuzzy msgid " end of sequence" msgstr "列の終わり" -#: src/readelf.c:8876 +#: src/readelf.c:8875 #, fuzzy, c-format msgid " set address to " msgstr "アドレスを %s に設定する\n" -#: src/readelf.c:8904 +#: src/readelf.c:8903 #, fuzzy, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" "新ファイルを定義する: dir=%u、mtime=%、長さh=%、名前=%s\n" -#: src/readelf.c:8918 +#: src/readelf.c:8917 #, fuzzy, c-format msgid " set discriminator to %u\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:8945 +#: src/readelf.c:8944 #, c-format msgid " set inlined context %u, function name %s (0x%x)\n" msgstr "" -#: src/readelf.c:8969 +#: src/readelf.c:8968 #, fuzzy, c-format #| msgid "Also show function names" msgid " set function name %s (0x%x)\n" msgstr "関数名も表示" #. Unknown, ignore it. -#: src/readelf.c:8976 +#: src/readelf.c:8975 msgid " unknown opcode" msgstr "不明なオペコード" #. Takes no argument. -#: src/readelf.c:8988 +#: src/readelf.c:8987 msgid " copy" msgstr "複写" -#: src/readelf.c:8999 +#: src/readelf.c:8998 #, fuzzy, c-format msgid " advance address by %u to " msgstr "アドレスを %u だけ進めて %s にする\n" -#: src/readelf.c:9003 src/readelf.c:9064 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr "" -#: src/readelf.c:9015 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %\n" msgstr "行を定数 %d だけ進めて % にする\n" -#: src/readelf.c:9025 +#: src/readelf.c:9024 #, c-format msgid " set file to %\n" msgstr " ファイルを % に設定する\n" -#: src/readelf.c:9036 +#: src/readelf.c:9035 #, c-format msgid " set column to %\n" msgstr "カラムを % に設定する\n" -#: src/readelf.c:9043 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %\n" msgstr " '%s' を % に設定する\n" #. Takes no argument. -#: src/readelf.c:9049 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr "基本ブロックフラグを設定する" -#: src/readelf.c:9060 +#: src/readelf.c:9059 #, fuzzy, c-format msgid " advance address by constant %u to " msgstr "アドレスを定数 %u だけ済めて %s にする\n" -#: src/readelf.c:9080 +#: src/readelf.c:9079 #, fuzzy, c-format msgid " advance address by fixed value %u to \n" msgstr "アドレスを固定値 %u だけ進めて %s にする\n" #. Takes no argument. -#: src/readelf.c:9090 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr "プロローグ終了フラグを設定する" #. Takes no argument. -#: src/readelf.c:9095 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr "エピローグ開始フラグを設定する" -#: src/readelf.c:9105 +#: src/readelf.c:9104 #, fuzzy, c-format msgid " set isa to %u\n" msgstr " ファイルを % に設定する\n" @@ -5646,103 +5647,103 @@ msgstr " ファイルを % に設定する\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9114 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" msgstr[0] " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:9154 +#: src/readelf.c:9153 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr ".debug_loclists の内容を取得できません: %s" -#: src/readelf.c:9320 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9360 +#: src/readelf.c:9359 #, fuzzy, c-format msgid "invalid loclists data" msgstr "不当なデータ" -#: src/readelf.c:9613 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr ".debug_loc の内容を得られません: %s" -#: src/readelf.c:9826 src/readelf.c:10870 +#: src/readelf.c:9825 src/readelf.c:10869 #, fuzzy msgid " \n" msgstr " [%6tx] <不当なデータ>\n" -#: src/readelf.c:9881 src/readelf.c:10044 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "マクロ情報セクションのデータを得られません: %s" -#: src/readelf.c:9961 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:9984 +#: src/readelf.c:9983 #, fuzzy, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** 最後のセクションの終端していない文字列" -#: src/readelf.c:10085 +#: src/readelf.c:10084 #, fuzzy, c-format msgid " Offset: 0x%\n" msgstr " 所有者 大きさ\n" -#: src/readelf.c:10097 +#: src/readelf.c:10096 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10103 src/readelf.c:10990 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr "" -#: src/readelf.c:10110 +#: src/readelf.c:10109 #, fuzzy, c-format msgid " Flag: 0x%" msgstr " 入口点アドレス : %#\n" -#: src/readelf.c:10139 +#: src/readelf.c:10138 #, fuzzy, c-format msgid " Offset length: %\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10147 +#: src/readelf.c:10146 #, fuzzy, c-format msgid " .debug_line offset: 0x%\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:10172 +#: src/readelf.c:10171 #, fuzzy, c-format msgid " extension opcode table, % items:\n" msgstr " % 個のパラメーターのある不明な命令コード:" -#: src/readelf.c:10179 +#: src/readelf.c:10178 #, c-format msgid " [%]" msgstr "" -#: src/readelf.c:10191 +#: src/readelf.c:10190 #, fuzzy, c-format msgid " % arguments:" msgstr " [%*] %hhu パラメーター\n" -#: src/readelf.c:10206 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr "" -#: src/readelf.c:10407 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" @@ -5750,7 +5751,7 @@ msgstr "" # # "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s':\n" # # " %4$*s 文字列\n" がエラーになるのは何故? 取り敢えず fuzzy扱い -#: src/readelf.c:10451 +#: src/readelf.c:10450 #, fuzzy, c-format msgid "" "\n" @@ -5762,42 +5763,42 @@ msgstr "" " %4$*s 文字列\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10456 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10466 +#: src/readelf.c:10465 #, fuzzy, c-format msgid " *** error, missing string terminator\n" msgstr " *** 文字列の読込み中にエラー: %s\n" -#: src/readelf.c:10495 +#: src/readelf.c:10494 #, fuzzy, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr ".degub_ranges の内容を得られません: %s" -#: src/readelf.c:10594 +#: src/readelf.c:10593 #, fuzzy, c-format msgid " Length: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10596 +#: src/readelf.c:10595 #, fuzzy, c-format msgid " Offset size: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10610 +#: src/readelf.c:10609 #, fuzzy, c-format msgid " DWARF version: %8\n" msgstr " %s: %\n" -#: src/readelf.c:10619 +#: src/readelf.c:10618 #, fuzzy, c-format msgid " Padding: %8\n" msgstr " (オフセット: %#)" -#: src/readelf.c:10673 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -5806,7 +5807,7 @@ msgstr "" "\n" "呼出しフレーム検索テーブルセクション [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10775 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -5815,22 +5816,22 @@ msgstr "" "\n" "例外取扱いテーブルセクション [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10798 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " LPStart コード化: %#x " -#: src/readelf.c:10810 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr "TType コード化: %#x " -#: src/readelf.c:10825 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr "呼出しサイトコード化: %#x " -#: src/readelf.c:10838 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -5838,7 +5839,7 @@ msgstr "" "\n" " 呼出しサイトテーブル:" -#: src/readelf.c:10852 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -5851,12 +5852,12 @@ msgstr "" " 離着陸場: %#\n" " 行動: %u\n" -#: src/readelf.c:10925 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "不当な TType コード化" -#: src/readelf.c:10952 +#: src/readelf.c:10951 #, fuzzy, c-format msgid "" "\n" @@ -5866,37 +5867,37 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:10981 +#: src/readelf.c:10980 #, fuzzy, c-format msgid " Version: %\n" msgstr " %s: %\n" -#: src/readelf.c:10999 +#: src/readelf.c:10998 #, fuzzy, c-format msgid " CU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:11006 +#: src/readelf.c:11005 #, fuzzy, c-format msgid " TU offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:11013 +#: src/readelf.c:11012 #, fuzzy, c-format msgid " address offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:11020 +#: src/readelf.c:11019 #, fuzzy, c-format msgid " symbol offset: %#\n" msgstr " (オフセット: %#)" -#: src/readelf.c:11027 +#: src/readelf.c:11026 #, fuzzy, c-format msgid " constant offset: %#\n" msgstr " (終了オフセット: %#)" -#: src/readelf.c:11041 +#: src/readelf.c:11040 #, fuzzy, c-format msgid "" "\n" @@ -5906,7 +5907,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11066 +#: src/readelf.c:11065 #, fuzzy, c-format msgid "" "\n" @@ -5916,7 +5917,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11095 +#: src/readelf.c:11094 #, fuzzy, c-format msgid "" "\n" @@ -5926,7 +5927,7 @@ msgstr "" "オフセット %3$# の DWARF セクション [%1$2zu] '%2$s' には %4$zu 個の項" "目があります:\n" -#: src/readelf.c:11127 +#: src/readelf.c:11126 #, fuzzy, c-format msgid "" "\n" @@ -5935,18 +5936,18 @@ msgstr "" "\n" "オフセット %#0 に不当なシンボルテーブル\n" -#: src/readelf.c:11265 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "デバッグ内容記述子を得られません: %s" -#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 -#: src/readelf.c:12429 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "コアノートデータの変換ができません: %s" -#: src/readelf.c:11996 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -5955,21 +5956,21 @@ msgstr "" "\n" "%*s... < %u 回の繰返し> ..." -#: src/readelf.c:12508 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " 所有者 データ大きさタイプ\n" -#: src/readelf.c:12536 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12588 +#: src/readelf.c:12583 #, c-format msgid "cannot get content of note: %s" msgstr "ノートセクションの内容を取得できません: %s" -#: src/readelf.c:12622 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -5979,7 +5980,7 @@ msgstr "" "オフセット %4$#0 の %3$ バイトのノートセクション [%1$2zu] " "'%2$s':\n" -#: src/readelf.c:12645 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -5988,7 +5989,7 @@ msgstr "" "\n" "オフセット %2$#0 の %1$ バイトのノートセグメント:\n" -#: src/readelf.c:12692 +#: src/readelf.c:12686 #, fuzzy, c-format msgid "" "\n" @@ -5997,12 +5998,12 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12719 src/readelf.c:12770 +#: src/readelf.c:12713 src/readelf.c:12764 #, fuzzy, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "セクション [%Zu] '%s' からデータが得られません: %s" -#: src/readelf.c:12724 +#: src/readelf.c:12718 #, fuzzy, c-format msgid "" "\n" @@ -6012,7 +6013,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12729 +#: src/readelf.c:12723 #, fuzzy, c-format msgid "" "\n" @@ -6023,7 +6024,7 @@ msgstr "" "オフセット %4$#0 のセクション [%1$Zu] '%2$s' の16進ダン" "プ、%3$ バイト:\n" -#: src/readelf.c:12743 +#: src/readelf.c:12737 #, fuzzy, c-format msgid "" "\n" @@ -6032,7 +6033,7 @@ msgstr "" "\n" "セクション [%Zu] '%s' にはダンプすべきデータがありません。\n" -#: src/readelf.c:12775 +#: src/readelf.c:12769 #, fuzzy, c-format msgid "" "\n" @@ -6042,7 +6043,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12780 +#: src/readelf.c:12774 #, fuzzy, c-format msgid "" "\n" @@ -6053,7 +6054,7 @@ msgstr "" "オフセット %4$#0 文字列セクション [%1$Zu] '%2$s' には %3$ バ" "イトあります:\n" -#: src/readelf.c:12829 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6062,7 +6063,7 @@ msgstr "" "\n" "セクション [%lu] がありません" -#: src/readelf.c:12859 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6071,12 +6072,12 @@ msgstr "" "\n" "セクション '%s' がありません" -#: src/readelf.c:12916 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "アーカイブのシンボル索引 '%s' を得られません: %s" -#: src/readelf.c:12919 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6085,7 +6086,7 @@ msgstr "" "\n" "アーカイブ '%s' にはシンボル索引がありません\n" -#: src/readelf.c:12923 +#: src/readelf.c:12914 #, c-format msgid "" "\n" @@ -6094,12 +6095,12 @@ msgstr "" "\n" "アーカイブ '%s' の索引は %zu 個の項目を持ちます:\n" -#: src/readelf.c:12941 +#: src/readelf.c:12932 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "'%2$s' の オフセット %1$zu のメンバーを抽出できません: %3$s" -#: src/readelf.c:12946 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "アーカイブメンバー '%s' には以下があります:\n" @@ -6194,37 +6195,36 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:419 msgctxt "sysv" msgid "section" msgstr "" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:480 msgid "cannot get section header" msgstr "セクションヘッダーを取得できません" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(合計)\n" @@ -6390,27 +6390,23 @@ msgstr "ファイル中の表示可能文字からなる文字列を表示する msgid "invalid value '%s' for %s parameter" msgstr "" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "" @@ -6480,54 +6476,50 @@ msgstr "" msgid "Discard symbols from object files." msgstr "オブジェクトファイルからシンボルを捨て去る" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" msgstr "" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "'-o' と '-f' と一緒の場合は入力ファイルは 1 つしか認められません" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "-f オプションが 2 回指定されています" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "-F オプションが 2 回指定されています" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr ".comment セクションを保持しつつ取り除くことはできません" -#: src/strip.c:481 -#, c-format +#: src/strip.c:479 msgid "bad relocation" msgstr "" -#: src/strip.c:751 src/strip.c:775 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "入力ファイル '%s' を stat できません" -#: src/strip.c:765 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "'%s' を開いている間" -#: src/strip.c:803 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: アーカイブから抜き出している時は -o や -f は使えません" @@ -6538,132 +6530,130 @@ msgstr "%s: アーカイブから抜き出している時は -o や -f は使え #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:815 +#: src/strip.c:813 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: アーカイブのストリップには対応していません" -#: src/strip.c:1052 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "EBL バックエンドを開けません" -#: src/strip.c:1097 -#, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" msgstr "phdrs の数を取得できません" -#: src/strip.c:1111 src/strip.c:1154 +#: src/strip.c:1108 src/strip.c:1151 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "ファイル '%s' の新しい ehdr を作成できません: %s" -#: src/strip.c:1121 src/strip.c:1164 +#: src/strip.c:1118 src/strip.c:1161 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "ファイル '%s' の新しい phdr を作成できません: %s" -#: src/strip.c:1244 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "不適格なファイル '%s'" -#: src/strip.c:1254 +#: src/strip.c:1251 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "割り当てされるセクション '%s' は取り除けません" -#: src/strip.c:1263 +#: src/strip.c:1260 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "セクション '%s' を保持しつつ取り除くことはできません" -#: src/strip.c:1628 src/strip.c:1743 +#: src/strip.c:1624 src/strip.c:1739 #, c-format msgid "while generating output file: %s" msgstr "出力ファイルを生成している間: %s" -#: src/strip.c:1692 +#: src/strip.c:1688 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: ELF ヘッダーの更新中にエラー: %s" -#: src/strip.c:1701 +#: src/strip.c:1697 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: shdrstrndx の取得中にエラー: %s" -#: src/strip.c:1709 src/strip.c:2554 +#: src/strip.c:1705 src/strip.c:2546 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: shdrstrndx の更新中にエラー: %s" -#: src/strip.c:1726 +#: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "'%s' のための出力を準備している間" -#: src/strip.c:1788 src/strip.c:1851 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "セクションヘッダーセクションを生成している間: %s" -#: src/strip.c:1797 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "セクションデータを割り当てられません: %s" -#: src/strip.c:1863 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "セクションヘッダー文字列テーブルを生成中: %s" -#: src/strip.c:1870 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "セクションヘッダー文字列テーブルを作成するメモリがありません" -#: src/strip.c:2083 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" -#: src/strip.c:2470 src/strip.c:2578 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "'%s' を書込み中: %s" -#: src/strip.c:2481 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "'%s' を生成中" -#: src/strip.c:2504 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "デバッグ情報のチェックサムを計算中" -#: src/strip.c:2545 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: ELF ヘッダーを生成している間にエラー: %s" -#: src/strip.c:2563 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: ファイルを読込み中にエラー: %s" -#: src/strip.c:2603 src/strip.c:2623 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "書き込み中 '%s'" -#: src/strip.c:2660 src/strip.c:2667 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "'%s' の終了中にエラー: %s" -#: src/strip.c:2684 src/strip.c:2760 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "'%s' のアクセスと変更日付を設定できません" @@ -6752,7 +6742,7 @@ msgstr "ELF ヘッダーを作成できません: %s" msgid "cannot get shdrstrndx:%s" msgstr "shdrstrndx を取得できません: %s" -#: src/unstrip.c:244 src/unstrip.c:2088 +#: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" msgstr "ELF ヘッダーを取得できません: %s" @@ -6772,12 +6762,12 @@ msgstr "新しい zero セクションを更新できません: %s" msgid "cannot copy ELF header: %s" msgstr "ELF ヘッダーを複製できません: %s" -#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 #, c-format msgid "cannot get number of program headers: %s" msgstr "プログラムヘッダ数を取得できません: %s" -#: src/unstrip.c:270 src/unstrip.c:2110 +#: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" msgstr "プログラムヘッダーを作成できません: %s" @@ -6792,12 +6782,12 @@ msgstr "プログラムヘッダーを複製できません: %s" msgid "cannot copy section header: %s" msgstr "セクションヘッダーを複製できません: %s" -#: src/unstrip.c:289 src/unstrip.c:1710 +#: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" msgstr "セクションデータを取得できません: %s" -#: src/unstrip.c:291 src/unstrip.c:1712 +#: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" msgstr "セクションデータを複製できません: %s" @@ -6807,14 +6797,14 @@ msgstr "セクションデータを複製できません: %s" msgid "cannot create directory '%s'" msgstr "ディレクトリ '%s' を作成できません" -#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 -#: src/unstrip.c:1752 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 +#: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "シンボルテーブル項目を取得できません: %s" -#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 -#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 +#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" msgstr "シンボルテーブルを更新できません: %s" @@ -6839,238 +6829,234 @@ msgstr "リロケーションを更新できません: %s" msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:582 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "シンボルバージョンを取得できません: %s" -#: src/unstrip.c:595 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "" -#: src/unstrip.c:850 +#: src/unstrip.c:849 #, c-format msgid "cannot get symbol section data: %s" msgstr "シンボルセクションデータを取得できません: %s" -#: src/unstrip.c:852 +#: src/unstrip.c:851 #, c-format msgid "cannot get string section data: %s" msgstr "文字列セクションデータを取得できません: %s" -#: src/unstrip.c:869 +#: src/unstrip.c:868 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "シンボル [%zu] の中に不当な文字列オフセットがあります" -#: src/unstrip.c:1027 src/unstrip.c:1435 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "セクション [%zu] の名前を読み込めません: %s" -#: src/unstrip.c:1042 +#: src/unstrip.c:1041 #, c-format msgid "bad sh_link for group section: %s" msgstr "グループセクションに対する誤った sh_link です: %s" -#: src/unstrip.c:1048 +#: src/unstrip.c:1047 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "グループセクションに対する shdr を取得できませんでした: %s" -#: src/unstrip.c:1053 +#: src/unstrip.c:1052 #, c-format msgid "bad data for group symbol section: %s" msgstr "グループシンボルセクションに対する誤ったデータです: %s" -#: src/unstrip.c:1059 +#: src/unstrip.c:1058 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "グループセクションに対するシンボルを取得できませんでした: %s" -#: src/unstrip.c:1064 +#: src/unstrip.c:1063 #, c-format msgid "bad symbol name for group section: %s" msgstr "グループセクションに対する誤ったシンボル名です: %s" -#: src/unstrip.c:1075 src/unstrip.c:1556 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, fuzzy, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "セクション [%zu] '%s' の不当なデータ" -#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "" -#: src/unstrip.c:1157 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "" -#: src/unstrip.c:1168 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "" -#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "" -#: src/unstrip.c:1364 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "" -#: src/unstrip.c:1393 src/unstrip.c:1397 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" -#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "" -#: src/unstrip.c:1408 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" -#: src/unstrip.c:1412 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "" -#: src/unstrip.c:1460 src/unstrip.c:1571 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "" -#: src/unstrip.c:1630 +#: src/unstrip.c:1628 #, c-format msgid "cannot add new section: %s" msgstr "" -#: src/unstrip.c:1760 +#: src/unstrip.c:1758 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "シンボル [%zu] が不当なセクション索引を持っています" -#: src/unstrip.c:1792 +#: src/unstrip.c:1790 #, c-format msgid "group has invalid section index [%zd]" msgstr "グループが不当なセクション索引 [%zd] を持っています" -#: src/unstrip.c:2067 +#: src/unstrip.c:2065 #, c-format msgid "cannot read section data: %s" msgstr "セクションデータを読み込めません: %s" -#: src/unstrip.c:2096 +#: src/unstrip.c:2094 #, c-format msgid "cannot update ELF header: %s" msgstr "ELF ヘッダーを更新できません: %s" -#: src/unstrip.c:2120 +#: src/unstrip.c:2118 #, c-format msgid "cannot update program header: %s" msgstr "" -#: src/unstrip.c:2125 src/unstrip.c:2208 +#: src/unstrip.c:2123 src/unstrip.c:2206 #, c-format msgid "cannot write output file: %s" msgstr "" -#: src/unstrip.c:2176 +#: src/unstrip.c:2174 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2179 +#: src/unstrip.c:2177 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" msgstr "" -#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 +#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "" -#: src/unstrip.c:2237 +#: src/unstrip.c:2235 msgid "WARNING: " msgstr "" -#: src/unstrip.c:2239 +#: src/unstrip.c:2237 msgid ", use --force" msgstr "" -#: src/unstrip.c:2267 +#: src/unstrip.c:2265 msgid "ELF header identification (e_ident) different" msgstr "" -#: src/unstrip.c:2271 +#: src/unstrip.c:2269 msgid "ELF header type (e_type) different" msgstr "" -#: src/unstrip.c:2275 +#: src/unstrip.c:2273 msgid "ELF header machine type (e_machine) different" msgstr "" -#: src/unstrip.c:2279 +#: src/unstrip.c:2277 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "" -#: src/unstrip.c:2310 +#: src/unstrip.c:2308 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "" -#: src/unstrip.c:2314 +#: src/unstrip.c:2312 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2329 +#: src/unstrip.c:2327 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "" -#: src/unstrip.c:2333 +#: src/unstrip.c:2331 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "" -#: src/unstrip.c:2346 +#: src/unstrip.c:2344 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "" -#: src/unstrip.c:2377 +#: src/unstrip.c:2375 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" msgstr "" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" diff --git a/po/pl.po b/po/pl.po index f50b9f8a..9f159d33 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: elfutils\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-11-10 16:21+0100\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2021-02-22 16:25+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" @@ -54,7 +54,7 @@ msgstr "" "BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI\n" "HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 #: src/unstrip.c:312 #, c-format msgid "memory exhausted" @@ -302,7 +302,7 @@ msgstr "nieznany kod języka" msgid ".debug_addr section missing" msgstr "brak sekcji .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Opcje wyboru wejścia:" @@ -529,7 +529,7 @@ msgid "No backend" msgstr "Brak zaplecza" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "" @@ -580,18 +580,18 @@ msgstr " Nazwa: " msgid " Args: " msgstr " Parametry: " -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Identyfikator kopii: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " Wersja konsolidatora: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " System operacyjny: %s, ABI: " @@ -625,7 +625,7 @@ msgstr "nieprawidłowy rozmiar operandu źródłowego" msgid "invalid size of destination operand" msgstr "nieprawidłowy rozmiar operandu docelowego" -#: libelf/elf_error.c:87 src/readelf.c:6215 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "nieprawidłowe kodowanie" @@ -710,8 +710,8 @@ msgstr "dane/scn nie zgadzają się" msgid "invalid section header" msgstr "nieprawidłowy nagłówek sekcji" -#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 -#: src/readelf.c:10794 src/readelf.c:10976 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "nieprawidłowe dane" @@ -783,47 +783,49 @@ msgstr "nie można kompresować danych" msgid "cannot decompress data" msgstr "nie można dekompresować danych" -#: src/addr2line.c:57 +#: src/addr2line.c:59 msgid "Input format options:" msgstr "Opcje formatowania wejścia:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Traktuje adresy jako offsety względne do sekcji NAZWA." -#: src/addr2line.c:61 +#: src/addr2line.c:63 msgid "Output format options:" msgstr "Opcje formatowania wyjścia:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "Wyświetla adres pliku przed każdym wpisem" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "Wyświetla tylko podstawowe nazwy plików źródłowych" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "Wyświetla bezwzględne nazwy plików używając katalogu kompilacji" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "Wyświetla także nazwy funkcji" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "Wyświetla także nazwy symboli lub sekcji" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "Wyświetla także nazwy symboli i sekcji" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "Wyświetla także flagi tabeli wierszy" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -831,22 +833,28 @@ msgstr "" "Wyświetla wszystkie położenia źródłowe, które spowodowały wstawione " "rozszerzenie podprogramów pod tym adresem." -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "" "Wyświetla symbole z usuniętym dekorowaniem (PARAMETR jest zawsze ignorowany)" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "Wyświetla wszystkie informacje w jednym wierszy i wyrównuje wstawki" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "Wyświetla bezwzględne nazwy plików używając katalogu kompilacji" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Różne:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "" @@ -854,26 +862,25 @@ msgstr "" "w a.out)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[ADRES…]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "Składnia sekcji wymaga dokładnie jednego modułu" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %# lies outside section '%s'" msgstr "offset %# leży poza sekcją „%s”" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "nie można odnaleźć symbolu „%s”" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "offset %# leży poza zawartością „%s”" @@ -1042,112 +1049,110 @@ msgstr "nie można wykonać stat na archiwum „%s”" msgid "no entry %s in archive\n" msgstr "brak wpisu %s w archiwum\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "nie można utworzyć tabeli mieszającej" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "nie można umieścić w tabeli mieszającej" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "nie można wykonać stat na „%s”" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "nie można odczytać zawartości %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "nie można otworzyć %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "zapisanie %s się nie powiodło" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "nie można zmienić trybu %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "nie można zmienić czasu modyfikacji %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "nie można zmienić nazwy pliku tymczasowego na %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "nie można utworzyć nowego pliku" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "nie odnaleziono położenia elementu %s" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: brak wpisu %s w archiwum.\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "nie można otworzyć %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "nie można wykonać stat na %s" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s nie jest zwykłym plikiem" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "nie można uzyskać deskryptora ELF dla %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "nie można odczytać %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, c-format msgid "cannot represent ar_date" msgstr "nie można przedstawić ar_date" -#: src/ar.c:1489 +#: src/ar.c:1486 #, c-format msgid "cannot represent ar_uid" msgstr "nie można przedstawić ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1492 #, c-format msgid "cannot represent ar_gid" msgstr "nie można przedstawić ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1498 #, c-format msgid "cannot represent ar_mode" msgstr "nie można przedstawić ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1504 #, c-format msgid "cannot represent ar_size" msgstr "nie można przedstawić ar_size" @@ -1629,8 +1634,8 @@ msgid "Invalid value '%s' for --gaps parameter." msgstr "Nieprawidłowa wartość „%s” dla parametru --gaps." #: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 -#: src/unstrip.c:2197 src/unstrip.c:2226 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 +#: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "nie można otworzyć „%s”" @@ -1660,7 +1665,7 @@ msgstr "nie można uzyskać zawartości sekcji %zu: %s" msgid "cannot get relocation: %s" msgstr "nie można uzyskać relokacji: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "Opcję -o podano dwukrotnie" @@ -1681,7 +1686,7 @@ msgstr "nieznany typ kompresji „%s”" msgid "No input file given" msgstr "Nie podano pliku wejściowego" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "Tylko jeden plik wejściowy jest dozwolony z „-o”" @@ -1936,7 +1941,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać danych sekcji\n" @@ -3506,7 +3511,7 @@ msgstr "" "sekcja [%2d]: „%s”: nieznany typ notatki pliku core % pod offsetem " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3515,7 +3520,7 @@ msgstr "" "phdr[%d]: nieznany typ notatki pliku obiektu % o nazwie właściciela " "„%s” pod offsetem %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3524,37 +3529,37 @@ msgstr "" "sekcja [%2d] „%s”: nieznany typ notatki pliku obiektu % o nazwie " "właściciela „%s” pod offsetem %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: brak określonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: nie można uzyskać zawartości sekcji notatki: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: dodatkowe % B po ostatniej notatce\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "sekcja [%2d] „%s”: brak określonych wpisów notatek dla typu pliku\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "sekcja [%2d] „%s”: nie można uzyskać zawartości sekcji notatek\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "sekcja [%2d] „%s”: dodatkowe % B po ostatniej notatce\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3562,135 +3567,135 @@ msgstr "" "tylko pliki wykonywalne, obiekty współdzielone i pliki core mogą mieć " "nagłówki programu\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "nie można uzyskać wpisu nagłówka programu %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "wpis nagłówka programu %d: nieznany typ wpisu nagłówka programu %#\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "więcej niż jeden wpis INTERP w nagłówku programu\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "więcej niż jeden wpis TLS w nagłówku programu\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "statyczny plik wykonywalny nie może mieć sekcji dynamicznych\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "odniesienie sekcji dynamicznej w nagłówku programu ma błędny offset\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "różne rozmiary sekcji dynamicznej w nagłówku programu i sekcji\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "więcej niż jeden wpis GNU_RELRO w nagłówku programu\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "wczytywalny segment wskazywany przez GNU_RELRO nie jest zapisywalny\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "flagi wczytywalnego segmentu [%u] nie pasują do flag GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" msgstr "" "flagi GNU_RELRO [%u] nie są podzbiorem flag wczytywalnego segmentu [%u]\n" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "segment %s nie zawiera się we wczytywalnym segmencie\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "" "offsety nagłówka programu w nagłówku ELF i wpisie PHDR nie zgadzają się" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "odniesienie tabeli wyszukiwania ramki wywołania w nagłówku programu ma " "błędny offset\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "różne rozmiary tabel wyszukiwania ramki wywołania w nagłówku programu " "i sekcji\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "PT_GNU_EH_FRAME jest obecne, ale brak sekcji .eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "tabela wyszukiwania ramki wywołania musi być przydzielona\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "sekcja [%2zu] „%s”: musi być przydzielona\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "tabela wyszukiwania ramki wywołania nie może być zapisywalna\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "sekcja [%2zu] „%s” nie może być zapisywalna\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "tabela wyszukiwania ramki wywołania nie może być wykonywalna\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "sekcja [%2zu] „%s” nie może być wykonywalna\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "wpis nagłówka programu %d: rozmiar pliku większy niż rozmiar pamięci\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "wpis nagłówka programu %d: wyrównanie nie jest potęgą 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3699,7 +3704,7 @@ msgstr "" "wpis nagłówka programu %d: offset w pliku i adres wirtualny nie są " "wielokrotnością wyrównania\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3708,17 +3713,17 @@ msgstr "" "plik wykonywalny/DSO z sekcją .eh_frame_hdr nie ma wpisu nagłówka programu " "PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "nie można odczytać nagłówka ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, c-format msgid "cannot create backend for ELF file\n" msgstr "nie można utworzyć zaplecza dla pliku ELF\n" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "flaga relokacji tekstu jest ustawiona, ale niepotrzebna\n" @@ -3931,12 +3936,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: BŁĄD WEWNĘTRZNY %d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2767 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "podczas zamykania „%s”" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: nie rozpoznano formatu pliku" @@ -3970,24 +3975,23 @@ msgstr "nie można przywrócić offsetu w archiwum na początek" msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: nie rozpoznano formatu pliku" -#: src/nm.c:704 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "nie można utworzyć drzewa wyszukiwania" -#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 -#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 -#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 -#: src/strip.c:1089 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji" #. We always print this prolog. -#: src/nm.c:770 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4001,7 +4005,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:773 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4010,7 +4014,7 @@ msgstr "" "%*s%-*s %-*s Klasa Typ %-*s %*s Sekcja\n" "\n" -#: src/nm.c:775 +#: src/nm.c:773 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4018,45 +4022,45 @@ msgid "Name" msgstr " Nazwa: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:777 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:779 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:781 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1249 +#: src/nm.c:1246 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: rozmiar wpisu w sekcji %zd „%s” nie jest tym, czego oczekiwano" -#: src/nm.c:1254 +#: src/nm.c:1251 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: rozmiar sekcji %zd „%s” nie jest wielokrotnością rozmiaru wpisu" -#: src/nm.c:1335 +#: src/nm.c:1331 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: wpisy (%zd) w sekcji %zd „%s” są za duże" #. XXX Add machine specific object file types. -#: src/nm.c:1571 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: nieprawidłowe działanie" -#: src/nm.c:1621 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: brak symboli" @@ -4099,11 +4103,11 @@ msgstr "Nie podano działania.\n" msgid "while close `%s'" msgstr "podczas zamykania „%s”" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "NIEPRAWIDŁOWY SYMBOL" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "NIEPRAWIDŁOWA SEKCJA" @@ -4128,12 +4132,10 @@ msgid "Contents of section %s:\n" msgstr "Zawartość sekcji %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "nie można deasemblować" -#: src/objdump.c:759 -#, c-format +#: src/objdump.c:758 msgid "cannot create backend for elf file" msgstr "nie można utworzyć zaplecza dla pliku ELF" @@ -4319,21 +4321,21 @@ msgstr "Nieznana sekcja debugowania DWARF „%s”.\n" msgid "cannot generate Elf descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "nie można określić liczby sekcji: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "nie można uzyskać sekcji: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 -#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 -#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 -#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 +#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" msgstr "nie można uzyskać nagłówka sekcji: %s" @@ -4343,8 +4345,8 @@ msgstr "nie można uzyskać nagłówka sekcji: %s" msgid "cannot get section name" msgstr "nie można uzyskać nazwy sekcji" -#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 -#: src/readelf.c:10961 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "nie można uzyskać zwartości %s: %s" @@ -4404,48 +4406,48 @@ msgstr "nie można odczytać nagłówka ELF: %s" msgid "cannot create EBL handle" msgstr "nie można utworzyć uchwytu EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "nie można określić liczby nagłówków programu: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, c-format msgid "cannot read ELF: %s" msgstr "nie można odczytać danych ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (żaden)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (plik relokowalny)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (plik wykonywalny)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (plik obiektu współdzielonego)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (plik core)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "Zależny od systemu: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Zależny od procesora: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4453,7 +4455,7 @@ msgstr "" "Nagłówek ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4462,123 +4464,123 @@ msgstr "" "\n" " Klasa: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Dane: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Wersja Ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(bieżąca)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " System operacyjny/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " Wersja ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Typ: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Komputer: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, c-format msgid " Machine: : 0x%x\n" msgstr " Komputer: : 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " Wersja: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#\n" msgstr " Adres punktu wejściowego: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: % %s\n" msgstr " Początek nagłówków programu: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(bajtów w pliku)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: % %s\n" msgstr " Początek nagłówków sekcji: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Flagi: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: % %s\n" msgstr " Rozmiar tego nagłówka: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(bajtów)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka programu: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %" msgstr " Liczba wpisów nagłówków programu: %" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (% in [0].sh_info)" msgstr " (% w [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] niedostępny)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Rozmiar wpisów nagłówka sekcji: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %" msgstr " Liczba wpisów nagłówków sekcji: %" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (% in [0].sh_size)" msgstr " (% w [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (% in [0].sh_link)" msgstr " (% w [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4587,7 +4589,7 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %\n" @@ -4596,12 +4598,12 @@ msgstr "" " Indeks tabeli ciągów nagłówków sekcji: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, c-format msgid "cannot get number of sections: %s" msgstr "nie można uzyskać liczby sekcji: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4610,16 +4612,16 @@ msgstr "" "Liczba nagłówków sekcji: %zd, rozpoczynających się od offsetu %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, c-format msgid "cannot get section header string table index: %s" msgstr "nie można uzyskać indeksu tabeli ciągów nagłówków sekcji: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "Nagłówki sekcji:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4627,7 +4629,7 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozm. ES Flagi Lk " "Inf Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4635,36 +4637,36 @@ msgstr "" "[Nr] Nazwa Typ Adres Offset Rozmiar ES " "Flagi Lk Inf Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr " [Kompresja Rozmiar Al]" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "błędny nagłówek kompresji dla sekcji %zd: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "błędny rozmiar kompresji gnu dla sekcji %zd: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Nagłówki programu:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Typ Offset AdresWirt AdresFiz RozmPlik RozmPam Flg " "Wyrównanie" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4672,12 +4674,12 @@ msgstr "" " Typ Offset AdresWirtualny AdresFizyczny RozmPlik " "RozmPam Flg Wyrównanie" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Wywołanie interpretera programu: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4687,12 +4689,12 @@ msgstr "" " Mapowanie sekcji do segmentów:\n" " Segment sekcji…" -#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "nie można uzyskać nagłówka programu: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4710,7 +4712,7 @@ msgstr[2] "" "\n" "Grupa sekcji COMDAT [%2zu] „%s” z podpisem „%s” zawiera %zu wpisów:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4728,31 +4730,31 @@ msgstr[2] "" "\n" "Grupa sekcji [%2zu] „%s” z podpisem „%s” zawiera %zu wpisów:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "" msgstr "" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "" msgstr "" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 -#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "Nie można dekompresować sekcji" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "nie można uzyskać nagłówka sekcji [%zd]: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, c-format msgid "invalid sh_link value in section %zu" msgstr "nieprawidłowa wartość sh_link w sekcji %zu" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4778,36 +4780,36 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "'%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Typ Wartość\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Biblioteka współdzielona: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "soname biblioteki: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "rpath biblioteki: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "runpath biblioteki: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "% (bytes)\n" msgstr "% (bajtów)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4816,7 +4818,7 @@ msgstr "" "\n" "Nieprawidłowa tabela symboli pod offsetem %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4845,7 +4847,7 @@ msgstr[2] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4863,30 +4865,30 @@ msgstr[2] "" "\n" "Sekcja relokacji [%2u] „%s” pod offsetem %#0 zawiera %d wpisów:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Offset Typ Wartość Nazwa\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "" msgstr "" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" " Offset Typ Wartość Koniec Nazwa\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4904,7 +4906,7 @@ msgstr[2] "" "\n" "Tabela symboli [%2u] „%s” zawiera %u wpisów:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4912,33 +4914,33 @@ msgstr[0] " %lu symbol lokalny Tabela ciągów: [%2u] „%s”\n" msgstr[1] " %lu symbole lokalne Tabela ciągów: [%2u] „%s”\n" msgstr[2] " %lu symboli lokalnych Tabela ciągów: [%2u] „%s”\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Numer: Wartość Rozm Typ Bind Widoczność Ndx Nazwa\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "błędny symbol dynamiczny" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "brak" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| " msgstr "| " -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4964,17 +4966,17 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Wersja: %hu Plik: %s Licznik: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Nazwa: %s Flagi: %s Wersja: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5000,19 +5002,19 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr "" " %#06x: Wersja: %hd Flagi: %s Indeks: %hd Licznik: %hd Nazwa: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Rodzic %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5035,15 +5037,15 @@ msgstr[2] "" "Sekcja symboli wersji [%2u] „%s” zawiera %d wpisów:\n" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] „%s”" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *lokalny* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *globalny* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5074,22 +5076,22 @@ msgstr[2] "" " Adres: %#0* Offset: %#08 Dowiązanie do sekcji: [%2u] " "„%s”\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Długość Liczba % całości Pokrycie\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5098,37 +5100,37 @@ msgstr "" " Średnia liczba testów: udane wyszukania: %f\n" "\t\t\t nieudane wyszukania: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "nie można uzyskać danych dla sekcji %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "nieprawidłowe dane w sekcji sysv.hash %d" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "nieprawidłowy łańcuch w sekcji sysv.hash %d" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "nieprawidłowe dane w sekcji sysv.hash64 %d" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "nieprawidłowy łańcuch w sekcji sysv.hash64 %d" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "nieprawidłowe dane w sekcji gnu.hash %d" -#: src/readelf.c:3451 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5167,7 +5169,7 @@ msgstr "" " Biblioteka Czas Suma k. Wersja " "Flagi" -#: src/readelf.c:3612 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5177,102 +5179,101 @@ msgstr "" "\n" "Sekcja atrybutów obiektu [%2zu] „%s” % B pod offsetem %#0:\n" -#: src/readelf.c:3629 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " Właściciel Rozmiar\n" -#: src/readelf.c:3653 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3692 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3697 +#: src/readelf.c:3696 #, c-format msgid " File: %11\n" msgstr " Plik: %11\n" -#: src/readelf.c:3746 +#: src/readelf.c:3745 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3749 +#: src/readelf.c:3748 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3752 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3762 +#: src/readelf.c:3761 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3765 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3835 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "sprintf się nie powiodło" -#: src/readelf.c:4317 +#: src/readelf.c:4316 msgid "empty block" msgstr "pusty blok" -#: src/readelf.c:4320 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "blok o %zu B:" -#: src/readelf.c:4798 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s \n" -#: src/readelf.c:4865 +#: src/readelf.c:4864 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami adresu" -#: src/readelf.c:4872 +#: src/readelf.c:4871 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# zostało użyte z różnymi rozmiarami offsetu" -#: src/readelf.c:4879 +#: src/readelf.c:4878 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# zostało użyte z różnymi adresami podstawowymi" -#: src/readelf.c:4886 +#: src/readelf.c:4885 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# zostało użyte z różnymi atrybutami %s i %s" -#: src/readelf.c:4986 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:4994 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] … % B…\n" -#: src/readelf.c:5097 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5283,7 +5284,7 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [ Kod]\n" -#: src/readelf.c:5105 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5292,20 +5293,20 @@ msgstr "" "\n" "Sekcja skrótów pod offsetem %:\n" -#: src/readelf.c:5118 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** błąd podczas odczytywania skrótu: %s\n" -#: src/readelf.c:5134 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] offset: %, potomek: %s, znacznik: %s\n" -#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 -#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 -#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 -#: src/readelf.c:10482 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5314,52 +5315,52 @@ msgstr "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:5180 +#: src/readelf.c:5179 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "nie można uzyskać danych sekcji .debug_addr: %s" -#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, c-format msgid " Address size: %8\n" msgstr " Rozmiar adresu: %8\n" -#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, c-format msgid " Segment size: %8\n" msgstr " Rozmiar segmentu: %8\n" -#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, c-format msgid "Unknown version" msgstr "Nieznana wersja" -#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, c-format msgid "unsupported address size" msgstr "nieobsługiwany rozmiar adresu" -#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "nieobsługiwany rozmiar segmentu" -#: src/readelf.c:5397 src/readelf.c:5471 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "nie można uzyskać zawartości .debug_aranges: %s" -#: src/readelf.c:5412 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5377,12 +5378,12 @@ msgstr[2] "" "\n" "Sekcja DWARF [%2zu] „%s” pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:5443 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5445 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5390,7 +5391,7 @@ msgstr "" " [%*zu] początek: %0#*, długość: %5, offset CU DIE: " "%6\n" -#: src/readelf.c:5489 src/readelf.c:8426 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" @@ -5399,13 +5400,13 @@ msgstr "" "\n" "Tabela pod offsetem %zu:\n" -#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 -#: src/readelf.c:9171 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "nieprawidłowe dane w sekcji [%zu] „%s”" -#: src/readelf.c:5509 +#: src/readelf.c:5508 #, c-format msgid "" "\n" @@ -5414,27 +5415,27 @@ msgstr "" "\n" " Długość: %6\n" -#: src/readelf.c:5521 +#: src/readelf.c:5520 #, c-format msgid " DWARF version: %6\n" msgstr " Wersja DWARF: %6\n" -#: src/readelf.c:5525 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "nieobsługiwana wersja aranges" -#: src/readelf.c:5536 +#: src/readelf.c:5535 #, c-format msgid " CU offset: %6\n" msgstr " Offset CU: %6\n" -#: src/readelf.c:5542 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6\n" msgstr " Offset adresu: %6\n" -#: src/readelf.c:5553 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6\n" @@ -5443,17 +5444,17 @@ msgstr "" " Rozmiar segmentu: %6\n" "\n" -#: src/readelf.c:5608 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr " %zu B wypełnienia\n" -#: src/readelf.c:5652 +#: src/readelf.c:5651 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "nie można uzyskać zawartości .debug_rnglists: %s" -#: src/readelf.c:5675 src/readelf.c:9177 +#: src/readelf.c:5674 src/readelf.c:9176 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5462,42 +5463,42 @@ msgstr "" "Tabela pod offsetem 0x%:\n" "\n" -#: src/readelf.c:5730 src/readelf.c:9232 +#: src/readelf.c:5729 src/readelf.c:9231 #, c-format msgid " Offset entries: %8\n" msgstr " Wpisy offsetu: %8\n" -#: src/readelf.c:5746 src/readelf.c:9248 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr " Nieznana podstawa CU: " -#: src/readelf.c:5748 src/readelf.c:9250 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6] base: " msgstr " Podstawa CU [%6]: " -#: src/readelf.c:5754 src/readelf.c:9256 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr " Brak powiązania z CU.\n" -#: src/readelf.c:5765 src/readelf.c:9267 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "za dużo wpisów offsetu dla długości jednostki" -#: src/readelf.c:5769 src/readelf.c:9271 +#: src/readelf.c:5768 src/readelf.c:9270 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Offsety zaczynające się w 0x%:\n" -#: src/readelf.c:5821 +#: src/readelf.c:5820 #, c-format msgid "invalid range list data" msgstr "nieprawidłowe dane listy zakresów" -#: src/readelf.c:6006 src/readelf.c:9596 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" @@ -5506,12 +5507,12 @@ msgstr "" " %zu B wypełnienia\n" "\n" -#: src/readelf.c:6023 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "nie można uzyskać zawartości .debug_ranges: %s" -#: src/readelf.c:6059 src/readelf.c:9651 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" @@ -5520,7 +5521,7 @@ msgstr "" "\n" " Nieznana podstawa CU: " -#: src/readelf.c:6061 src/readelf.c:9653 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" @@ -5529,30 +5530,30 @@ msgstr "" "\n" " Podstawa CU [%6]: " -#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] \n" -#: src/readelf.c:6095 src/readelf.c:9789 +#: src/readelf.c:6094 src/readelf.c:9788 msgid "base address" msgstr "adres podstawowy" -#: src/readelf.c:6105 src/readelf.c:9799 +#: src/readelf.c:6104 src/readelf.c:9798 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] pusta lista\n" -#: src/readelf.c:6365 +#: src/readelf.c:6364 msgid " \n" msgstr " \n" -#: src/readelf.c:6622 +#: src/readelf.c:6621 #, c-format msgid "cannot get ELF: %s" msgstr "nie można uzyskać ELF: %s" -#: src/readelf.c:6640 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5561,7 +5562,7 @@ msgstr "" "\n" "Sekcja informacji o ramce wywołania [%2zu] „%s” pod offsetem %#:\n" -#: src/readelf.c:6690 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5570,65 +5571,65 @@ msgstr "" "\n" " [%6tx] Zerowy koniec\n" -#: src/readelf.c:6791 src/readelf.c:6945 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "nieprawidłowa długość powiększenia" -#: src/readelf.c:6806 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "Kodowanie adresu FDE: " -#: src/readelf.c:6812 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "Kodowanie wskaźnika LSDA: " -#: src/readelf.c:6922 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#)" msgstr " (offset: %#)" -#: src/readelf.c:6929 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#)" msgstr " (kończący offset: %#)" -#: src/readelf.c:6966 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sWskaźnik LSDA: %#\n" -#: src/readelf.c:7051 +#: src/readelf.c:7050 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] nie można uzyskać kodu atrybutu: %s" -#: src/readelf.c:7061 +#: src/readelf.c:7060 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] nie można uzyskać formy atrybutu: %s" -#: src/readelf.c:7083 +#: src/readelf.c:7082 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] nie można uzyskać wartości atrybutu „%s” (%s): %s" -#: src/readelf.c:7413 +#: src/readelf.c:7412 #, c-format msgid "invalid file (%): %s" msgstr "nieprawidłowy plik (%): %s" -#: src/readelf.c:7417 +#: src/readelf.c:7416 #, c-format msgid "no srcfiles for CU [%]" msgstr "brak plików źródłowych dla CU [%]" -#: src/readelf.c:7421 +#: src/readelf.c:7420 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "nie można uzyskać CU DWARF: %s" -#: src/readelf.c:7736 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5639,12 +5640,12 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" " [Offset]\n" -#: src/readelf.c:7786 +#: src/readelf.c:7785 #, c-format msgid "cannot get next unit: %s" msgstr "nie można uzyskać następnej jednostki: %s" -#: src/readelf.c:7806 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %:\n" @@ -5657,7 +5658,7 @@ msgstr "" "%, rozmiar offsetu: %\n" " Podpis typu: %#, offset typu: %# [%]\n" -#: src/readelf.c:7818 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5668,38 +5669,38 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:7828 src/readelf.c:7989 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%)" msgstr " Typ jednostki: %s (%)" -#: src/readelf.c:7855 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "nieznana wersja (%d) lub typ jednostki (%d)" -#: src/readelf.c:7884 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "nie można uzyskać offsetu DIE: %s" -#: src/readelf.c:7893 +#: src/readelf.c:7892 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "nie można uzyskać znacznika DIE pod offsetem [%] w sekcji „%s”: %s" -#: src/readelf.c:7929 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "nie można uzyskać następnego DIE: %s\n" -#: src/readelf.c:7937 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "nie można uzyskać następnego DIE: %s" -#: src/readelf.c:7981 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5710,7 +5711,7 @@ msgstr "" " Wersja: %, offset sekcji skrótów: %, rozmiar adresu: " "%, rozmiar offsetu: %\n" -#: src/readelf.c:8033 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5721,18 +5722,18 @@ msgstr "" "Sekcja DWARF [%2zu] „%s” pod offsetem %#:\n" "\n" -#: src/readelf.c:8365 +#: src/readelf.c:8364 #, c-format msgid "unknown form: %s" msgstr "nieznana forma: %s" -#: src/readelf.c:8413 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "nie można uzyskać danych sekcji danych wiersza: %s" #. Print what we got so far. -#: src/readelf.c:8517 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5765,27 +5766,27 @@ msgstr "" "\n" "Instrukcje:\n" -#: src/readelf.c:8539 +#: src/readelf.c:8538 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "nie można obsłużyć wersji .debug_line: %u\n" -#: src/readelf.c:8547 +#: src/readelf.c:8546 #, c-format msgid "cannot handle address size: %u\n" msgstr "nie można obsłużyć rozmiaru adresu: %u\n" -#: src/readelf.c:8555 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "nie można obsłużyć rozmiaru selektora segmentu: %u\n" -#: src/readelf.c:8565 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "nieprawidłowe dane pod offsetem %tu w sekcji [%zu] „%s”" -#: src/readelf.c:8580 +#: src/readelf.c:8579 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5793,7 +5794,7 @@ msgstr[0] " [%*] %hhu parametr\n" msgstr[1] " [%*] %hhu parametry\n" msgstr[2] " [%*] %hhu parametrów\n" -#: src/readelf.c:8591 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5801,12 +5802,12 @@ msgstr "" "\n" "Tabela katalogu:" -#: src/readelf.c:8597 src/readelf.c:8674 +#: src/readelf.c:8596 src/readelf.c:8673 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8668 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" @@ -5814,11 +5815,11 @@ msgstr "" "\n" "Tabela nazw plików:" -#: src/readelf.c:8729 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr " Wpis Kat Czas Rozmiar Nazwa" -#: src/readelf.c:8775 +#: src/readelf.c:8774 msgid "" "\n" "No line number statements." @@ -5826,7 +5827,7 @@ msgstr "" "\n" "Brak instrukcji numerów wierszy." -#: src/readelf.c:8779 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5834,129 +5835,129 @@ msgstr "" "\n" "Instrukcje numerów wierszy:" -#: src/readelf.c:8794 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "nieprawidłowe maksimum operacji na instrukcję wynosi zero" -#: src/readelf.c:8828 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr " instrukcja specjalna %u: adres+%u = " -#: src/readelf.c:8832 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", op_index = %u, wiersz%+d = %zu\n" -#: src/readelf.c:8835 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr ", wiersz%+d = %zu\n" -#: src/readelf.c:8853 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " instrukcja rozszerzona %u: " -#: src/readelf.c:8858 +#: src/readelf.c:8857 msgid " end of sequence" msgstr " koniec sekwencji" -#: src/readelf.c:8876 +#: src/readelf.c:8875 #, c-format msgid " set address to " msgstr " ustawienie adresu na " -#: src/readelf.c:8904 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" " definicja nowego pliku: dir=%u, mtime=%, długość=%, nazwa=" "%s\n" -#: src/readelf.c:8918 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " ustawienie dyskryminatora na %u\n" -#: src/readelf.c:8945 +#: src/readelf.c:8944 #, c-format msgid " set inlined context %u, function name %s (0x%x)\n" msgstr "" -#: src/readelf.c:8969 +#: src/readelf.c:8968 #, fuzzy, c-format #| msgid "Also show function names" msgid " set function name %s (0x%x)\n" msgstr "Wyświetla także nazwy funkcji" #. Unknown, ignore it. -#: src/readelf.c:8976 +#: src/readelf.c:8975 msgid " unknown opcode" msgstr " nieznana instrukcja" #. Takes no argument. -#: src/readelf.c:8988 +#: src/readelf.c:8987 msgid " copy" msgstr " kopiowanie" -#: src/readelf.c:8999 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr " zwiększenie adresu o %u do " -#: src/readelf.c:9003 src/readelf.c:9064 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr ", op_index do %u" -#: src/readelf.c:9015 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %\n" msgstr " zwiększenie wiersza o stałą %d do %\n" -#: src/readelf.c:9025 +#: src/readelf.c:9024 #, c-format msgid " set file to %\n" msgstr " ustawienie pliku na %\n" -#: src/readelf.c:9036 +#: src/readelf.c:9035 #, c-format msgid " set column to %\n" msgstr " ustawienie kolumny na %\n" -#: src/readelf.c:9043 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %\n" msgstr " ustawienie „%s” na %\n" #. Takes no argument. -#: src/readelf.c:9049 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr " ustawienie podstawowej flagi bloku" -#: src/readelf.c:9060 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr " zwiększenie adresu o stałą %u do " -#: src/readelf.c:9080 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr " zwiększenie adresu o stałą wartość %u do \n" #. Takes no argument. -#: src/readelf.c:9090 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " ustawienie flagi końca prologu" #. Takes no argument. -#: src/readelf.c:9095 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " ustawienie flagi początku epilogu" -#: src/readelf.c:9105 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " ustawienie isa na %u\n" @@ -5964,7 +5965,7 @@ msgstr " ustawienie isa na %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9114 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5972,101 +5973,101 @@ msgstr[0] " nieznana instrukcja z % parametrem:" msgstr[1] " nieznana instrukcja z % parametrami:" msgstr[2] " nieznana instrukcja z % parametrami:" -#: src/readelf.c:9154 +#: src/readelf.c:9153 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "nie można uzyskać zawartości .debug_loclists: %s" -#: src/readelf.c:9320 +#: src/readelf.c:9319 #, c-format msgid " \n" msgstr " \n" -#: src/readelf.c:9360 +#: src/readelf.c:9359 #, c-format msgid "invalid loclists data" msgstr "nieprawidłowe dane loclists" -#: src/readelf.c:9613 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "nie można uzyskać zawartości .debug_log: %s" -#: src/readelf.c:9826 src/readelf.c:10870 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " \n" msgstr " \n" -#: src/readelf.c:9881 src/readelf.c:10044 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "nie można uzyskać danych sekcji informacji o makrach: %s" -#: src/readelf.c:9961 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** niezakończony ciąg na końcu sekcji" -#: src/readelf.c:9984 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** brak parametru DW_MACINFO_start_file na końcu sekcji" -#: src/readelf.c:10085 +#: src/readelf.c:10084 #, c-format msgid " Offset: 0x%\n" msgstr " Offset: 0x%\n" -#: src/readelf.c:10097 +#: src/readelf.c:10096 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10103 src/readelf.c:10990 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr " nieznana wersja, nie można przetworzyć sekcji\n" -#: src/readelf.c:10110 +#: src/readelf.c:10109 #, c-format msgid " Flag: 0x%" msgstr " Flaga: 0x%" -#: src/readelf.c:10139 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %\n" msgstr " Długość offsetu: %\n" -#: src/readelf.c:10147 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " Offset .debug_line: 0x%\n" -#: src/readelf.c:10172 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, % items:\n" msgstr " tabela instrukcji rozszerzenia, % elementów:\n" -#: src/readelf.c:10179 +#: src/readelf.c:10178 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10191 +#: src/readelf.c:10190 #, c-format msgid " % arguments:" msgstr " Parametry %:" -#: src/readelf.c:10206 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr " brak parametrów." -#: src/readelf.c:10407 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr " [%5d] offset DIE: %6, offset CU DIE: %6, nazwa: %s\n" -#: src/readelf.c:10451 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6078,42 +6079,42 @@ msgstr "" " %*s Ciąg\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10456 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10466 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** błąd, brak znaku kończącego ciąg\n" -#: src/readelf.c:10495 +#: src/readelf.c:10494 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "nie można uzyskać danych sekcji .debug_str_offsets: %s" -#: src/readelf.c:10594 +#: src/readelf.c:10593 #, c-format msgid " Length: %8\n" msgstr " Długość: %8\n" -#: src/readelf.c:10596 +#: src/readelf.c:10595 #, c-format msgid " Offset size: %8\n" msgstr " Rozmiar offsetu: %8\n" -#: src/readelf.c:10610 +#: src/readelf.c:10609 #, c-format msgid " DWARF version: %8\n" msgstr " Wersja DWARF: %8\n" -#: src/readelf.c:10619 +#: src/readelf.c:10618 #, c-format msgid " Padding: %8\n" msgstr " Wypełnienie: %8\n" -#: src/readelf.c:10673 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6122,7 +6123,7 @@ msgstr "" "\n" "Sekcja tabeli wyszukiwania ramki wywołania [%2zu] „.eh_frame_hdr”:\n" -#: src/readelf.c:10775 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6131,22 +6132,22 @@ msgstr "" "\n" "Sekcja tabeli obsługiwania wyjątków [%2zu] „.gcc_except_table”:\n" -#: src/readelf.c:10798 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " Kodowanie LPStart: %#x " -#: src/readelf.c:10810 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr " Kodowanie TType: %#x " -#: src/readelf.c:10825 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr " Kodowanie strony wywołania: %#x " -#: src/readelf.c:10838 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6154,7 +6155,7 @@ msgstr "" "\n" " Tabela strony wywołania:" -#: src/readelf.c:10852 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6167,12 +6168,12 @@ msgstr "" " Lądowisko: %#\n" " Działanie: %u\n" -#: src/readelf.c:10925 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "nieprawidłowe kodowanie TType" -#: src/readelf.c:10952 +#: src/readelf.c:10951 #, c-format msgid "" "\n" @@ -6181,37 +6182,37 @@ msgstr "" "\n" "Sekcja GDB [%2zu] „%s” pod offsetem %# zawiera % B:\n" -#: src/readelf.c:10981 +#: src/readelf.c:10980 #, c-format msgid " Version: %\n" msgstr " Wersja: %\n" -#: src/readelf.c:10999 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#\n" msgstr " offset CU: %#\n" -#: src/readelf.c:11006 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#\n" msgstr " offset TU: %#\n" -#: src/readelf.c:11013 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#\n" msgstr " offset adresu: %#\n" -#: src/readelf.c:11020 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#\n" msgstr " offset symbolu: %#\n" -#: src/readelf.c:11027 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#\n" msgstr " offset stałej: %#\n" -#: src/readelf.c:11041 +#: src/readelf.c:11040 #, c-format msgid "" "\n" @@ -6220,7 +6221,7 @@ msgstr "" "\n" " Lista CU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11066 +#: src/readelf.c:11065 #, c-format msgid "" "\n" @@ -6229,7 +6230,7 @@ msgstr "" "\n" " Lista TU pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11095 +#: src/readelf.c:11094 #, c-format msgid "" "\n" @@ -6238,7 +6239,7 @@ msgstr "" "\n" " Lista adresów pod offsetem %# zawiera %zu wpisów:\n" -#: src/readelf.c:11127 +#: src/readelf.c:11126 #, c-format msgid "" "\n" @@ -6247,18 +6248,18 @@ msgstr "" "\n" " Tabela symboli pod offsetem %# zawiera %zu gniazd:\n" -#: src/readelf.c:11265 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "nie można uzyskać deskryptora kontekstu debugowania: %s" -#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 -#: src/readelf.c:12429 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "nie można konwertować danych notatki core: %s" -#: src/readelf.c:11996 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6267,21 +6268,21 @@ msgstr "" "\n" "%*s… …" -#: src/readelf.c:12508 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " Właściciel Rozmiar danych Typ\n" -#: src/readelf.c:12536 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12588 +#: src/readelf.c:12583 #, c-format msgid "cannot get content of note: %s" msgstr "nie można uzyskać zawartości notatki: %s" -#: src/readelf.c:12622 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6291,7 +6292,7 @@ msgstr "" "Segment notatki [%2zu] „%s” o długości % B pod offsetem " "%#0:\n" -#: src/readelf.c:12645 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6300,7 +6301,7 @@ msgstr "" "\n" "Segment notatki o długości % B pod offsetem %#0:\n" -#: src/readelf.c:12692 +#: src/readelf.c:12686 #, c-format msgid "" "\n" @@ -6309,12 +6310,12 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma danych do zrzucenia.\n" -#: src/readelf.c:12719 src/readelf.c:12770 +#: src/readelf.c:12713 src/readelf.c:12764 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "nie można uzyskać danych dla sekcji [%zu] „%s”: %s" -#: src/readelf.c:12724 +#: src/readelf.c:12718 #, c-format msgid "" "\n" @@ -6324,7 +6325,7 @@ msgstr "" "Segment zrzutu szesnastkowego [%zu] „%s”, % B pod offsetem " "%#0:\n" -#: src/readelf.c:12729 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -6335,7 +6336,7 @@ msgstr "" "Zrzut szesnastkowy sekcji [%zu] „%s”, % B (%zd nieskompresowanych) " "pod offsetem %#0:\n" -#: src/readelf.c:12743 +#: src/readelf.c:12737 #, c-format msgid "" "\n" @@ -6344,7 +6345,7 @@ msgstr "" "\n" "Sekcja [%zu] „%s” nie ma ciągów do zrzucenia.\n" -#: src/readelf.c:12775 +#: src/readelf.c:12769 #, c-format msgid "" "\n" @@ -6353,7 +6354,7 @@ msgstr "" "\n" "Sekcja ciągów [%zu] „%s” zawiera % B pod offsetem %#0:\n" -#: src/readelf.c:12780 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -6364,7 +6365,7 @@ msgstr "" "Sekcja ciągów [%zu] „%s” zawiera % B (%zd nieskompresowanych) pod " "offsetem %#0:\n" -#: src/readelf.c:12829 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6373,7 +6374,7 @@ msgstr "" "\n" "sekcja [%lu] nie istnieje" -#: src/readelf.c:12859 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6382,12 +6383,12 @@ msgstr "" "\n" "sekcja „%s” nie istnieje" -#: src/readelf.c:12916 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "nie można uzyskać indeksu symboli archiwum „%s”: %s" -#: src/readelf.c:12919 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6396,7 +6397,7 @@ msgstr "" "\n" "Archiwum „%s” nie ma indeksu symboli\n" -#: src/readelf.c:12923 +#: src/readelf.c:12914 #, c-format msgid "" "\n" @@ -6405,12 +6406,12 @@ msgstr "" "\n" "Indeks archiwum „%s” ma %zu wpisów:\n" -#: src/readelf.c:12941 +#: src/readelf.c:12932 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "nie można wydobyć elementów pod offsetem %zu w „%s”: %s" -#: src/readelf.c:12946 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Element archiwum „%s” zawiera:\n" @@ -6504,39 +6505,38 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (ex %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "nieprawidłowa sekcja" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:480 msgid "cannot get section header" msgstr "nie można uzyskać nagłówka sekcji" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(CAŁKOWITE)\n" @@ -6717,27 +6717,23 @@ msgstr "Wyświetla ciągi znaków drukowalnych w plikach." msgid "invalid value '%s' for %s parameter" msgstr "nieprawidłowa wartość „%s” dla parametru %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "nieprawidłowa minimalna długość dopasowanego rozmiaru ciągu" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "lseek się nie powiodło" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "ponowne mmap się nie powiodło" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "mprotect się nie powiodło" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "Pomijanie sekcji %zd „%s” dane poza plikiem" @@ -6813,13 +6809,11 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Odrzuca symbole z plików obiektów." -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "Użyto --reloc-debug-sections bez opcji -f" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6827,42 +6821,40 @@ msgstr "" "Opcja --reloc-debug-sections-only jest niezgodna z -f, -g, --remove-comment " "i --remove-section" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "Tylko jeden plik wejściowy jest dozwolony z „-o” i „-f”" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "Opcję -f podano dwukrotnie" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "Opcję -F podano dwukrotnie" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "nie można jednocześnie zachować i usunąć sekcji .comment" -#: src/strip.c:481 -#, c-format +#: src/strip.c:479 msgid "bad relocation" msgstr "błędna relokacja" -#: src/strip.c:751 src/strip.c:775 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "nie można wykonać stat na pliku wejściowym „%s”" -#: src/strip.c:765 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "podczas otwierania „%s”" -#: src/strip.c:803 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" @@ -6873,132 +6865,130 @@ msgstr "%s: nie można używać -o lub -f podczas okrajania archiwum" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:815 +#: src/strip.c:813 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: brak obsługi okrajania archiwum" -#: src/strip.c:1052 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "nie można otworzyć zaplecza EBL" -#: src/strip.c:1097 -#, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" msgstr "nie można uzyskać liczby phdr" -#: src/strip.c:1111 src/strip.c:1154 +#: src/strip.c:1108 src/strip.c:1151 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "nie można utworzyć nowego ehdr dla pliku „%s”: %s" -#: src/strip.c:1121 src/strip.c:1164 +#: src/strip.c:1118 src/strip.c:1161 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "nie można utworzyć nowego phdr dla pliku „%s”: %s" -#: src/strip.c:1244 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "plik „%s” ma błędny format" -#: src/strip.c:1254 +#: src/strip.c:1251 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Nie można usunąć przydzielonej sekcji „%s”" -#: src/strip.c:1263 +#: src/strip.c:1260 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Nie można jednocześnie zachować i usunąć sekcji „%s”" -#: src/strip.c:1628 src/strip.c:1743 +#: src/strip.c:1624 src/strip.c:1739 #, c-format msgid "while generating output file: %s" msgstr "podczas tworzenia pliku wyjściowego: %s" -#: src/strip.c:1692 +#: src/strip.c:1688 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: błąd podczas aktualizowania nagłówka ELF: %s" -#: src/strip.c:1701 +#: src/strip.c:1697 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: błąd podczas uzyskiwania shdrstrndx: %s" -#: src/strip.c:1709 src/strip.c:2554 +#: src/strip.c:1705 src/strip.c:2546 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: błąd podczas aktualizowania shdrstrndx: %s" -#: src/strip.c:1726 +#: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "podczas przygotowywania wyjścia dla „%s”" -#: src/strip.c:1788 src/strip.c:1851 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "podczas tworzenia sekcji nagłówka sekcji: %s" -#: src/strip.c:1797 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "nie można przydzielić danych sekcji: %s" -#: src/strip.c:1863 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "podczas tworzenia tabeli ciągów nagłówka sekcji: %s" -#: src/strip.c:1870 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "brak pamięci do utworzenia tabeli ciągów nagłówka sekcji" -#: src/strip.c:2083 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "Nie można usunąć symbolu [%zd] z przydzielonej tabeli symboli [%zd]" -#: src/strip.c:2470 src/strip.c:2578 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "podczas zapisywania „%s”: %s" -#: src/strip.c:2481 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "podczas tworzenia „%s”" -#: src/strip.c:2504 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "podczas obliczania sumy kontrolnej dla informacji debugowania" -#: src/strip.c:2545 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: błąd podczas tworzenia nagłówka ELF: %s" -#: src/strip.c:2563 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: błąd podczas odczytywania pliku: %s" -#: src/strip.c:2603 src/strip.c:2623 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "podczas zapisywania „%s”" -#: src/strip.c:2660 src/strip.c:2667 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "błąd podczas kończenia „%s”: %s" -#: src/strip.c:2684 src/strip.c:2760 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "nie można ustawić czasu dostępu i modyfikacji „%s”" @@ -7086,7 +7076,7 @@ msgstr "nie można utworzyć nagłówka ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "nie można uzyskać shdrstrndx: %s" -#: src/unstrip.c:244 src/unstrip.c:2088 +#: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" msgstr "nie można uzyskać nagłówka ELF: %s" @@ -7106,12 +7096,12 @@ msgstr "nie można zaktualizować nowej sekcji zerowej: %s" msgid "cannot copy ELF header: %s" msgstr "nie można skopiować nagłówka ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 #, c-format msgid "cannot get number of program headers: %s" msgstr "nie można uzyskać liczby nagłówków programu: %s" -#: src/unstrip.c:270 src/unstrip.c:2110 +#: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" msgstr "nie można utworzyć nagłówków programu: %s" @@ -7126,12 +7116,12 @@ msgstr "nie można skopiować nagłówka programu: %s" msgid "cannot copy section header: %s" msgstr "nie można skopiować nagłówka sekcji: %s" -#: src/unstrip.c:289 src/unstrip.c:1710 +#: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" msgstr "nie można uzyskać danych sekcji: %s" -#: src/unstrip.c:291 src/unstrip.c:1712 +#: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" msgstr "nie można skopiować danych sekcji: %s" @@ -7141,14 +7131,14 @@ msgstr "nie można skopiować danych sekcji: %s" msgid "cannot create directory '%s'" msgstr "nie można utworzyć katalogu „%s”" -#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 -#: src/unstrip.c:1752 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 +#: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "nie można uzyskać wpisu tabeli symboli: %s" -#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 -#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 +#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" msgstr "nie można zaktualizować tabeli symboli: %s" @@ -7173,161 +7163,159 @@ msgstr "nie można zaktualizować relokacji: %s" msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:582 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "nie można uzyskać wersji symbolu: %s" -#: src/unstrip.c:595 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "nieoczekiwany typ sekcji w [%zu] z sh_link do tabeli symboli" -#: src/unstrip.c:850 +#: src/unstrip.c:849 #, c-format msgid "cannot get symbol section data: %s" msgstr "nie można uzyskać danych sekcji symboli: %s" -#: src/unstrip.c:852 +#: src/unstrip.c:851 #, c-format msgid "cannot get string section data: %s" msgstr "nie można uzyskać danych sekcji ciągów: %s" -#: src/unstrip.c:869 +#: src/unstrip.c:868 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "nieprawidłowy offset ciągu w symbolu [%zu]" -#: src/unstrip.c:1027 src/unstrip.c:1435 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "nie można odczytać nazwy sekcji [%zu]: %s" -#: src/unstrip.c:1042 +#: src/unstrip.c:1041 #, c-format msgid "bad sh_link for group section: %s" msgstr "błędne sh_link dla sekcji grupy: %s" -#: src/unstrip.c:1048 +#: src/unstrip.c:1047 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "nie można uzyskać shdr dla sekcji grupy: %s" -#: src/unstrip.c:1053 +#: src/unstrip.c:1052 #, c-format msgid "bad data for group symbol section: %s" msgstr "błędne dane dla sekcji symboli grupy: %s" -#: src/unstrip.c:1059 +#: src/unstrip.c:1058 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "nie można uzyskać symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1064 +#: src/unstrip.c:1063 #, c-format msgid "bad symbol name for group section: %s" msgstr "błędna nazwa symbolu dla sekcji grupy: %s" -#: src/unstrip.c:1075 src/unstrip.c:1556 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "nie można odnaleźć pasującej sekcji dla [%zu] „%s”" -#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "nie można odczytać sekcji „.gnu.prelink_undo”: %s" -#: src/unstrip.c:1157 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "przepełnienie z shnum = %zu w sekcji „%s”" -#: src/unstrip.c:1168 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "nieprawidłowa zawartość w sekcji „%s”" -#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "nie można nazwy sekcji do tabeli ciągów: %s" -#: src/unstrip.c:1364 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "nie można zaktualizować danych tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1393 src/unstrip.c:1397 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "nie można uzyskać indeksu sekcji tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "nie można uzyskać licznika sekcji: %s" -#: src/unstrip.c:1408 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "więcej sekcji w okrojonym pliku niż w pliku debugowania — odwrócono " "parametry?" -#: src/unstrip.c:1412 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "brak sekcji w okrojonym pliku" -#: src/unstrip.c:1460 src/unstrip.c:1571 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "nie można odczytać tabeli ciągów nagłówków sekcji: %s" -#: src/unstrip.c:1630 +#: src/unstrip.c:1628 #, c-format msgid "cannot add new section: %s" msgstr "nie można dodać nowej sekcji: %s" -#: src/unstrip.c:1760 +#: src/unstrip.c:1758 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "symbol [%zu] ma nieprawidłowy indeks sekcji" -#: src/unstrip.c:1792 +#: src/unstrip.c:1790 #, c-format msgid "group has invalid section index [%zd]" msgstr "grupa ma nieprawidłowy indeks sekcji [%zd]" -#: src/unstrip.c:2067 +#: src/unstrip.c:2065 #, c-format msgid "cannot read section data: %s" msgstr "nie można odczytać danych sekcji: %s" -#: src/unstrip.c:2096 +#: src/unstrip.c:2094 #, c-format msgid "cannot update ELF header: %s" msgstr "nie można zaktualizować nagłówka ELF: %s" -#: src/unstrip.c:2120 +#: src/unstrip.c:2118 #, c-format msgid "cannot update program header: %s" msgstr "nie można zaktualizować nagłówka programu: %s" -#: src/unstrip.c:2125 src/unstrip.c:2208 +#: src/unstrip.c:2123 src/unstrip.c:2206 #, c-format msgid "cannot write output file: %s" msgstr "nie można zapisać pliku wyjściowego: %s" -#: src/unstrip.c:2176 +#: src/unstrip.c:2174 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Dane DWARF nie zostały dostosowane do przesunięcia wczesnego konsolidowania; " "proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2179 +#: src/unstrip.c:2177 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7335,77 +7323,75 @@ msgstr "" "Dane DWARF w „%s” nie zostały dostosowane do przesunięcia wczesnego " "konsolidowania; proszę rozważyć polecenie prelink -u" -#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 +#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "nie można utworzyć deskryptora ELF: %s" -#: src/unstrip.c:2237 +#: src/unstrip.c:2235 msgid "WARNING: " msgstr "OSTRZEŻENIE: " -#: src/unstrip.c:2239 +#: src/unstrip.c:2237 msgid ", use --force" msgstr ", należy użyć opcji --force" -#: src/unstrip.c:2267 +#: src/unstrip.c:2265 msgid "ELF header identification (e_ident) different" msgstr "Różna identyfikacja nagłówka ELF (e_ident)" -#: src/unstrip.c:2271 +#: src/unstrip.c:2269 msgid "ELF header type (e_type) different" msgstr "Różne typy nagłówka ELF (e_type)" -#: src/unstrip.c:2275 +#: src/unstrip.c:2273 msgid "ELF header machine type (e_machine) different" msgstr "Różne typy maszyny nagłówka ELF (e_machine)" -#: src/unstrip.c:2279 +#: src/unstrip.c:2277 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "okrojony nagłówek programu (e_phnum) jest mniejszy niż nieokrojony" -#: src/unstrip.c:2310 +#: src/unstrip.c:2308 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "nie można odnaleźć okrojonego pliku dla modułu „%s”: %s" -#: src/unstrip.c:2314 +#: src/unstrip.c:2312 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "nie można otworzyć okrojonego pliku „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2329 +#: src/unstrip.c:2327 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "nie można odnaleźć pliku debugowania dla modułu „%s”: %s" -#: src/unstrip.c:2333 +#: src/unstrip.c:2331 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "nie można otworzyć pliku debugowania „%s” dla modułu „%s”: %s" -#: src/unstrip.c:2346 +#: src/unstrip.c:2344 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "moduł „%s” pliku „%s” nie został okrojony" -#: src/unstrip.c:2377 +#: src/unstrip.c:2375 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "" "nie można utworzyć pamięci podręcznej adresów sekcji dla modułu „%s”: %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "nie odnaleziono pasujących modułów" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "pasuje więcej niż jeden moduł" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7413,7 +7399,7 @@ msgstr "" "OKROJONY-PLIK PLIK-DEBUGOWANIA\n" "[MODUŁ…]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" diff --git a/po/uk.po b/po/uk.po index cac761e3..ecdb85d3 100644 --- a/po/uk.po +++ b/po/uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2021-11-10 16:21+0100\n" +"POT-Creation-Date: 2022-04-25 18:22+0200\n" "PO-Revision-Date: 2020-03-28 14:59+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" @@ -53,7 +53,7 @@ msgstr "" "початкових кодах. Умовами ліцензування програми НЕ передбачено жодних " "гарантій, зокрема гарантій працездатності або придатності для певної мети.\n" -#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11582 +#: lib/xmalloc.c:48 lib/xmalloc.c:61 lib/xmalloc.c:73 src/readelf.c:11580 #: src/unstrip.c:312 #, c-format msgid "memory exhausted" @@ -304,7 +304,7 @@ msgstr "невідомий код мови" msgid ".debug_addr section missing" msgstr "пропущено розділ .debug_addr" -#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2550 +#: libdwfl/argp-std.c:47 src/stack.c:643 src/unstrip.c:2548 msgid "Input selection options:" msgstr "Вибір параметрів виведення даних:" @@ -533,7 +533,7 @@ msgid "No backend" msgstr "Немає сервера" #: libebl/eblcorenotetypename.c:100 libebl/eblobjnotetypename.c:79 -#: libebl/eblobjnotetypename.c:110 libebl/eblobjnotetypename.c:131 +#: libebl/eblobjnotetypename.c:113 libebl/eblobjnotetypename.c:134 #: libebl/eblosabiname.c:73 libebl/eblsectionname.c:83 #: libebl/eblsectiontypename.c:115 libebl/eblsegmenttypename.c:81 msgid "" @@ -584,18 +584,18 @@ msgstr "Назва: " msgid " Args: " msgstr " Арг.: " -#: libebl/eblobjnote.c:300 +#: libebl/eblobjnote.c:304 #, c-format msgid " Build ID: " msgstr " Ід. збирання: " #. A non-null terminated version string. -#: libebl/eblobjnote.c:311 +#: libebl/eblobjnote.c:315 #, c-format msgid " Linker version: %.*s\n" msgstr " Версія компонувальника: %.*s\n" -#: libebl/eblobjnote.c:638 +#: libebl/eblobjnote.c:642 #, c-format msgid " OS: %s, ABI: " msgstr " ОС: %s, ABI: " @@ -629,7 +629,7 @@ msgstr "некоректна розмірність вхідного парам msgid "invalid size of destination operand" msgstr "некоректна розмірність вихідного параметра" -#: libelf/elf_error.c:87 src/readelf.c:6215 +#: libelf/elf_error.c:87 src/readelf.c:6214 #, c-format msgid "invalid encoding" msgstr "некоректне кодування" @@ -714,8 +714,8 @@ msgstr "невідповідність полів data/scn" msgid "invalid section header" msgstr "некоректний заголовок розділу" -#: libelf/elf_error.c:191 src/readelf.c:10093 src/readelf.c:10693 -#: src/readelf.c:10794 src/readelf.c:10976 +#: libelf/elf_error.c:191 src/readelf.c:10092 src/readelf.c:10692 +#: src/readelf.c:10793 src/readelf.c:10975 #, c-format msgid "invalid data" msgstr "некоректні дані" @@ -787,47 +787,49 @@ msgstr "неможливо стиснути дані" msgid "cannot decompress data" msgstr "неможливо розпакувати дані" -#: src/addr2line.c:57 +#: src/addr2line.c:59 msgid "Input format options:" msgstr "Параметри форматування вхідних даних:" -#: src/addr2line.c:59 +#: src/addr2line.c:61 msgid "Treat addresses as offsets relative to NAME section." msgstr "Вважати адреси зміщеннями відносно розділу НАЗВА." -#: src/addr2line.c:61 +#: src/addr2line.c:63 msgid "Output format options:" msgstr "Параметри форматування результатів:" -#: src/addr2line.c:62 +#: src/addr2line.c:64 msgid "Print address before each entry" msgstr "Виводити адресу перед кожним записом" -#: src/addr2line.c:63 +#: src/addr2line.c:65 msgid "Show only base names of source files" msgstr "Показувати лише базові назви файлів коду програми" -#: src/addr2line.c:65 -msgid "Show absolute file names using compilation directory" +#: src/addr2line.c:67 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show absolute file names using compilation directory (default)" msgstr "Показувати абсолютні назви файлів з використанням каталогу збирання" -#: src/addr2line.c:66 +#: src/addr2line.c:68 msgid "Also show function names" msgstr "Показувати також назви функцій" -#: src/addr2line.c:67 +#: src/addr2line.c:69 msgid "Also show symbol or section names" msgstr "Показувати також назви символів та розділів" -#: src/addr2line.c:68 +#: src/addr2line.c:70 msgid "Also show symbol and the section names" msgstr "Показувати також назви символів та розділів" -#: src/addr2line.c:69 +#: src/addr2line.c:71 msgid "Also show line table flags" msgstr "Показувати також прапорці рядків таблиці" -#: src/addr2line.c:71 +#: src/addr2line.c:73 msgid "" "Show all source locations that caused inline expansion of subroutines at the " "address." @@ -835,46 +837,51 @@ msgstr "" "Показати усі місця у початковому коді, у яких було виявлено вбудоване " "розгортання підпрограм за вказаною адресою." -#: src/addr2line.c:74 +#: src/addr2line.c:76 msgid "Show demangled symbols (ARG is always ignored)" msgstr "Виводити розшифровані символи (АРГ завжди ігнорується)" -#: src/addr2line.c:76 +#: src/addr2line.c:78 msgid "Print all information on one line, and indent inlines" msgstr "Вивести усі дані у один рядок і додати відступи до перенесених рядків" -#: src/addr2line.c:78 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 +#: src/addr2line.c:80 +#, fuzzy +#| msgid "Show absolute file names using compilation directory" +msgid "Show relative file names without compilation directory" +msgstr "Показувати абсолютні назви файлів з використанням каталогу збирання" + +#: src/addr2line.c:82 src/elfcmp.c:70 src/findtextrel.c:66 src/nm.c:100 #: src/strings.c:78 msgid "Miscellaneous:" msgstr "Інше:" #. Short description of program. -#: src/addr2line.c:86 +#: src/addr2line.c:90 msgid "" "Locate source files and line information for ADDRs (in a.out by default)." msgstr "Шукати АДРЕСИ у файлах кодів та даних про рядки (типово, у a.out)." #. Strings for arguments in help texts. -#: src/addr2line.c:90 +#: src/addr2line.c:94 msgid "[ADDR...]" msgstr "[АДРЕСА...]" -#: src/addr2line.c:519 -#, c-format +#: src/addr2line.c:527 msgid "Section syntax requires exactly one module" msgstr "Синтаксис розділів вимагає точного одного модуля" -#: src/addr2line.c:542 +#: src/addr2line.c:549 #, c-format msgid "offset %# lies outside section '%s'" msgstr "зміщення %# розташовано поза межами розділу «%s»" -#: src/addr2line.c:652 +#: src/addr2line.c:659 #, c-format msgid "cannot find symbol '%s'" msgstr "не вдалося знайти символ «%s»" -#: src/addr2line.c:657 +#: src/addr2line.c:664 #, c-format msgid "offset %# lies outside contents of '%s'" msgstr "зміщення %# розташовано поза межами вмісту «%s»" @@ -1046,112 +1053,110 @@ msgstr "не вдалося отримати дані архіву «%s» за msgid "no entry %s in archive\n" msgstr "у архіві немає запису %s\n" -#: src/ar.c:472 src/ar.c:927 src/ar.c:1134 -#, c-format +#: src/ar.c:472 src/ar.c:926 src/ar.c:1132 msgid "cannot create hash table" msgstr "не вдалося створити таблицю хешів" -#: src/ar.c:479 src/ar.c:934 src/ar.c:1143 -#, c-format +#: src/ar.c:478 src/ar.c:932 src/ar.c:1140 msgid "cannot insert into hash table" msgstr "не вдалося вставити запис до таблиці хешів" -#: src/ar.c:487 src/ranlib.c:148 +#: src/ar.c:486 src/ranlib.c:148 #, c-format msgid "cannot stat '%s'" msgstr "не вдалося отримати дані з «%s» за допомогою stat" -#: src/ar.c:589 +#: src/ar.c:588 #, c-format msgid "cannot read content of %s: %s" msgstr "не вдалося прочитати вміст з %s: %s" -#: src/ar.c:632 +#: src/ar.c:631 #, c-format msgid "cannot open %.*s" msgstr "не вдалося відкрити %.*s" -#: src/ar.c:654 +#: src/ar.c:653 #, c-format msgid "failed to write %s" msgstr "не вдалося записати %s" -#: src/ar.c:666 +#: src/ar.c:665 #, c-format msgid "cannot change mode of %s" msgstr "не вдалося змінити права доступу до %s" -#: src/ar.c:682 +#: src/ar.c:681 #, c-format msgid "cannot change modification time of %s" msgstr "не вдалося змінити часову мітку зміни %s" -#: src/ar.c:728 +#: src/ar.c:727 #, c-format msgid "cannot rename temporary file to %.*s" msgstr "не вдалося перейменувати файл тимчасових даних на %.*s" -#: src/ar.c:764 src/ar.c:1019 src/ar.c:1423 src/ranlib.c:222 +#: src/ar.c:763 src/ar.c:1017 src/ar.c:1420 src/ranlib.c:222 #, c-format msgid "cannot create new file" msgstr "не вдалося створити файл" -#: src/ar.c:1225 +#: src/ar.c:1222 #, c-format msgid "position member %s not found" msgstr "не виявлено елемента позиції %s" -#: src/ar.c:1235 +#: src/ar.c:1232 #, c-format msgid "%s: no entry %s in archive!\n" msgstr "%s: у архіві немає запису %s!\n" -#: src/ar.c:1264 src/objdump.c:241 +#: src/ar.c:1261 src/objdump.c:241 #, c-format msgid "cannot open %s" msgstr "не вдалося відкрити %s" -#: src/ar.c:1269 +#: src/ar.c:1266 #, c-format msgid "cannot stat %s" msgstr "не вдалося отримати дані %s за допомогою stat" -#: src/ar.c:1275 +#: src/ar.c:1272 #, c-format msgid "%s is no regular file" msgstr "%s не є звичайним файлом" -#: src/ar.c:1288 +#: src/ar.c:1285 #, c-format msgid "cannot get ELF descriptor for %s: %s\n" msgstr "не вдалося отримати дескриптор ELF для %s: %s\n" -#: src/ar.c:1308 +#: src/ar.c:1305 #, c-format msgid "cannot read %s: %s" msgstr "не вдалося прочитати %s: %s" -#: src/ar.c:1483 +#: src/ar.c:1480 #, c-format msgid "cannot represent ar_date" msgstr "неможливо представити ar_date" -#: src/ar.c:1489 +#: src/ar.c:1486 #, c-format msgid "cannot represent ar_uid" msgstr "неможливо представити ar_uid" -#: src/ar.c:1495 +#: src/ar.c:1492 #, c-format msgid "cannot represent ar_gid" msgstr "неможливо представити ar_gid" -#: src/ar.c:1501 +#: src/ar.c:1498 #, c-format msgid "cannot represent ar_mode" msgstr "неможливо представити ar_mode" -#: src/ar.c:1507 +#: src/ar.c:1504 #, c-format msgid "cannot represent ar_size" msgstr "неможливо представити ar_size" @@ -1605,8 +1610,8 @@ msgid "Invalid value '%s' for --gaps parameter." msgstr "Некоректне значення «%s» параметра --gaps." #: src/elfcmp.c:734 src/findtextrel.c:195 src/nm.c:364 src/ranlib.c:141 -#: src/size.c:272 src/strings.c:185 src/strip.c:1035 src/strip.c:1072 -#: src/unstrip.c:2197 src/unstrip.c:2226 +#: src/size.c:272 src/strings.c:185 src/strip.c:1033 src/strip.c:1070 +#: src/unstrip.c:2195 src/unstrip.c:2224 #, c-format msgid "cannot open '%s'" msgstr "не вдалося відкрити «%s»" @@ -1636,7 +1641,7 @@ msgstr "не вдалося отримати вміст розділу %zu: %s" msgid "cannot get relocation: %s" msgstr "не вдалося отримати пересування: %s" -#: src/elfcompress.c:117 src/strip.c:308 src/unstrip.c:117 +#: src/elfcompress.c:117 src/strip.c:306 src/unstrip.c:117 #, c-format msgid "-o option specified twice" msgstr "параметр -o вказано двічі" @@ -1657,7 +1662,7 @@ msgstr "невідомий тип стиснення «%s»" msgid "No input file given" msgstr "Не надано файла вхідних даних" -#: src/elfcompress.c:151 src/elfcompress.c:1350 +#: src/elfcompress.c:151 src/elfcompress.c:1349 #, c-format msgid "Only one input file allowed together with '-o'" msgstr "З параметром «-o» можна використовувати лише один файл вхідних даних" @@ -1917,7 +1922,7 @@ msgstr "" #: src/elflint.c:610 src/elflint.c:1498 src/elflint.c:1549 src/elflint.c:1655 #: src/elflint.c:1991 src/elflint.c:2317 src/elflint.c:2943 src/elflint.c:3106 -#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4458 +#: src/elflint.c:3254 src/elflint.c:3456 src/elflint.c:4465 #, c-format msgid "section [%2d] '%s': cannot get section data\n" msgstr "розділ [%2d] «%s»: не вдалося отримати дані розділу\n" @@ -3515,7 +3520,7 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки файла core % за зміщенням " "%zu\n" -#: src/elflint.c:4397 +#: src/elflint.c:4404 #, c-format msgid "" "phdr[%d]: unknown object file note type % with owner name '%s' at " @@ -3524,7 +3529,7 @@ msgstr "" "phdr[%d]: невідомий тип нотатки у файлі об'єктів, %, із іменем " "власника «%s» за зміщенням %zu\n" -#: src/elflint.c:4402 +#: src/elflint.c:4409 #, c-format msgid "" "section [%2d] '%s': unknown object file note type % with owner name " @@ -3533,39 +3538,39 @@ msgstr "" "розділ [%2d] «%s»: невідомий тип нотатки у файлі об'єктів, %, із " "іменем власника «%s» за зміщенням %zu\n" -#: src/elflint.c:4421 +#: src/elflint.c:4428 #, c-format msgid "phdr[%d]: no note entries defined for the type of file\n" msgstr "phdr[%d]: для цього типу файлів не визначено записів нотаток\n" -#: src/elflint.c:4441 +#: src/elflint.c:4448 #, c-format msgid "phdr[%d]: cannot get content of note section: %s\n" msgstr "phdr[%d]: не вдалося отримати вміст розділу нотаток: %s\n" -#: src/elflint.c:4444 +#: src/elflint.c:4451 #, c-format msgid "phdr[%d]: extra % bytes after last note\n" msgstr "phdr[%d]: зайві % байтів після останнього запису нотатки\n" -#: src/elflint.c:4465 +#: src/elflint.c:4472 #, c-format msgid "section [%2d] '%s': no note entries defined for the type of file\n" msgstr "" "розділ [%2d] «%s»: для цього типу файлів не визначено записів нотаток\n" -#: src/elflint.c:4472 +#: src/elflint.c:4479 #, c-format msgid "section [%2d] '%s': cannot get content of note section\n" msgstr "розділ [%2d] «%s»: не вдалося отримати вміст розділу нотаток\n" -#: src/elflint.c:4475 +#: src/elflint.c:4482 #, c-format msgid "section [%2d] '%s': extra % bytes after last note\n" msgstr "" "розділ [%2d] «%s»: додаткові % байтів після останньої нотатки\n" -#: src/elflint.c:4493 +#: src/elflint.c:4500 #, c-format msgid "" "only executables, shared objects, and core files can have program headers\n" @@ -3573,66 +3578,66 @@ msgstr "" "заголовки програм можуть бути лише у виконуваних файлів, об’єктних файлів " "спільного використання або файлів core\n" -#: src/elflint.c:4508 +#: src/elflint.c:4515 #, c-format msgid "cannot get program header entry %d: %s\n" msgstr "не вдалося отримати запис заголовка програми %d: %s\n" -#: src/elflint.c:4518 +#: src/elflint.c:4525 #, c-format msgid "program header entry %d: unknown program header entry type %#\n" msgstr "" "запис заголовка програми %d: невідомий тип запису заголовка програми " "%#\n" -#: src/elflint.c:4529 +#: src/elflint.c:4536 #, c-format msgid "more than one INTERP entry in program header\n" msgstr "більше за один запис INTERP у заголовку програми\n" -#: src/elflint.c:4537 +#: src/elflint.c:4544 #, c-format msgid "more than one TLS entry in program header\n" msgstr "більше за один запис TLS у заголовку програми\n" -#: src/elflint.c:4544 +#: src/elflint.c:4551 #, c-format msgid "static executable cannot have dynamic sections\n" msgstr "у статичному виконуваному файлі не може бути динамічних розділів\n" -#: src/elflint.c:4558 +#: src/elflint.c:4565 #, c-format msgid "dynamic section reference in program header has wrong offset\n" msgstr "" "посилання на динамічний розділ у заголовку програми має помилкове зміщення\n" -#: src/elflint.c:4561 +#: src/elflint.c:4568 #, c-format msgid "dynamic section size mismatch in program and section header\n" msgstr "" "розміри динамічного розділу у заголовку програми та у заголовку розділу не " "збігаються\n" -#: src/elflint.c:4571 +#: src/elflint.c:4578 #, c-format msgid "more than one GNU_RELRO entry in program header\n" msgstr "більше за один запис GNU_RELRO у заголовку програми\n" -#: src/elflint.c:4592 +#: src/elflint.c:4599 #, c-format msgid "loadable segment GNU_RELRO applies to is not writable\n" msgstr "" "придатний до завантаження сегмент, до якого звертається GNU_RELRO, " "непридатний до запису\n" -#: src/elflint.c:4603 +#: src/elflint.c:4610 #, c-format msgid "loadable segment [%u] flags do not match GNU_RELRO [%u] flags\n" msgstr "" "прапорці придатного до завантаження сегмента [%u] не відповідають прапорцям " "GNU_RELRO [%u]\n" -#: src/elflint.c:4610 +#: src/elflint.c:4617 #, c-format msgid "" "GNU_RELRO [%u] flags are not a subset of the loadable segment [%u] flags\n" @@ -3640,76 +3645,76 @@ msgstr "" "прапорці GNU_RELRO [%u] не є підмножиною прапорців завантажуваного сегмента " "[%u]\n" -#: src/elflint.c:4619 src/elflint.c:4642 +#: src/elflint.c:4626 src/elflint.c:4649 #, c-format msgid "%s segment not contained in a loaded segment\n" msgstr "сегмент %s не міститься у завантаженому сегменті\n" -#: src/elflint.c:4648 +#: src/elflint.c:4655 #, c-format msgid "program header offset in ELF header and PHDR entry do not match" msgstr "зміщення заголовка програми у заголовку ELF і запис PHDR не збігаються" -#: src/elflint.c:4675 +#: src/elflint.c:4682 #, c-format msgid "call frame search table reference in program header has wrong offset\n" msgstr "" "посилання на таблицю вікон викликів у заголовку програми має помилкове " "зміщення\n" -#: src/elflint.c:4678 +#: src/elflint.c:4685 #, c-format msgid "call frame search table size mismatch in program and section header\n" msgstr "" "розміри таблиці пошуку вікон виклику у заголовку програми та у заголовку " "розділу не збігаються\n" -#: src/elflint.c:4691 +#: src/elflint.c:4698 #, c-format msgid "PT_GNU_EH_FRAME present but no .eh_frame_hdr section\n" msgstr "існує PT_GNU_EH_FRAME, хоча немає розділу .eh_frame_hdr\n" -#: src/elflint.c:4699 +#: src/elflint.c:4706 #, c-format msgid "call frame search table must be allocated\n" msgstr "таблицю пошуку вікон викликів має бути розміщено у пам’яті\n" -#: src/elflint.c:4702 +#: src/elflint.c:4709 #, c-format msgid "section [%2zu] '%s' must be allocated\n" msgstr "розділ [%2zu] «%s» має бути розміщено у пам’яті\n" -#: src/elflint.c:4706 +#: src/elflint.c:4713 #, c-format msgid "call frame search table must not be writable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до запису\n" -#: src/elflint.c:4709 +#: src/elflint.c:4716 #, c-format msgid "section [%2zu] '%s' must not be writable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до запису\n" -#: src/elflint.c:4714 +#: src/elflint.c:4721 #, c-format msgid "call frame search table must not be executable\n" msgstr "таблиця пошуку вікон викликів не повинна бути придатною до виконання\n" -#: src/elflint.c:4717 +#: src/elflint.c:4724 #, c-format msgid "section [%2zu] '%s' must not be executable\n" msgstr "розділ [%2zu] «%s» не повинен бути придатним до виконання\n" -#: src/elflint.c:4728 +#: src/elflint.c:4735 #, c-format msgid "program header entry %d: file size greater than memory size\n" msgstr "запис заголовка програми %d: розмір файла перевищує об’єм пам’яті\n" -#: src/elflint.c:4735 +#: src/elflint.c:4742 #, c-format msgid "program header entry %d: alignment not a power of 2\n" msgstr "запис заголовка програми %d: значення вирівнювання не є степенем 2\n" -#: src/elflint.c:4738 +#: src/elflint.c:4745 #, c-format msgid "" "program header entry %d: file offset and virtual address not module of " @@ -3718,7 +3723,7 @@ msgstr "" "запис заголовка програми %d: зміщення у файлі і віртуальна адреса не " "співвідносяться з вирівнюванням\n" -#: src/elflint.c:4751 +#: src/elflint.c:4758 #, c-format msgid "" "executable/DSO with .eh_frame_hdr section does not have a PT_GNU_EH_FRAME " @@ -3727,17 +3732,17 @@ msgstr "" "виконуваний модуль/DSO з розділом .eh_frame_hdr не містить запису заголовка " "програми PT_GNU_EH_FRAME" -#: src/elflint.c:4785 +#: src/elflint.c:4792 #, c-format msgid "cannot read ELF header: %s\n" msgstr "не вдалося прочитати заголовок ELF: %s\n" -#: src/elflint.c:4797 +#: src/elflint.c:4804 #, fuzzy, c-format msgid "cannot create backend for ELF file\n" msgstr "не вдалося створити файл" -#: src/elflint.c:4818 +#: src/elflint.c:4825 #, c-format msgid "text relocation flag set but not needed\n" msgstr "" @@ -3954,12 +3959,12 @@ msgid "%s: INTERNAL ERROR %d (%s): %s" msgstr "%s: ВНУТРІШНЯ ПОМИЛКА %d (%s): %s" #: src/nm.c:381 src/nm.c:393 src/size.c:288 src/size.c:297 src/size.c:308 -#: src/strip.c:2767 +#: src/strip.c:2759 #, c-format msgid "while closing '%s'" msgstr "під час закриття «%s»" -#: src/nm.c:403 src/objdump.c:280 src/strip.c:822 +#: src/nm.c:403 src/objdump.c:280 src/strip.c:820 #, c-format msgid "%s: File format not recognized" msgstr "%s: не вдалося розпізнати формат файла" @@ -3993,24 +3998,23 @@ msgstr "не вдалося відновити зміщення початку msgid "%s%s%s: file format not recognized" msgstr "%s%s%s: не вдалося розпізнати формат файла" -#: src/nm.c:704 -#, c-format +#: src/nm.c:703 msgid "cannot create search tree" msgstr "не вдалося створити дерево пошуку" -#: src/nm.c:745 src/nm.c:1238 src/objdump.c:781 src/readelf.c:637 -#: src/readelf.c:1451 src/readelf.c:1602 src/readelf.c:1803 src/readelf.c:2009 -#: src/readelf.c:2199 src/readelf.c:2377 src/readelf.c:2453 src/readelf.c:2719 -#: src/readelf.c:2795 src/readelf.c:2882 src/readelf.c:3478 src/readelf.c:3528 -#: src/readelf.c:3598 src/readelf.c:11409 src/readelf.c:12603 -#: src/readelf.c:12814 src/readelf.c:12883 src/size.c:398 src/size.c:470 -#: src/strip.c:1089 +#: src/nm.c:743 src/nm.c:1235 src/objdump.c:779 src/readelf.c:637 +#: src/readelf.c:1445 src/readelf.c:1594 src/readelf.c:1814 src/readelf.c:2017 +#: src/readelf.c:2206 src/readelf.c:2384 src/readelf.c:2459 src/readelf.c:2724 +#: src/readelf.c:2799 src/readelf.c:2885 src/readelf.c:3480 src/readelf.c:3528 +#: src/readelf.c:3597 src/readelf.c:11407 src/readelf.c:12597 +#: src/readelf.c:12807 src/readelf.c:12875 src/size.c:397 src/size.c:468 +#: src/strip.c:1086 #, c-format msgid "cannot get section header string table index" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків" #. We always print this prolog. -#: src/nm.c:770 +#: src/nm.c:768 #, c-format msgid "" "\n" @@ -4024,7 +4028,7 @@ msgstr "" "\n" #. The header line. -#: src/nm.c:773 +#: src/nm.c:771 #, c-format msgid "" "%*s%-*s %-*s Class Type %-*s %*s Section\n" @@ -4033,7 +4037,7 @@ msgstr "" "%*s%-*s %-*s Клас Тип %-*s %*s Розділ\n" "\n" -#: src/nm.c:775 +#: src/nm.c:773 #, fuzzy #| msgid " Name: " msgctxt "sysv" @@ -4041,45 +4045,45 @@ msgid "Name" msgstr "Назва: " #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:777 +#: src/nm.c:775 msgctxt "sysv" msgid "Value" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:779 +#: src/nm.c:777 msgctxt "sysv" msgid "Size" msgstr "" #. TRANS: the "sysv|" parts makes the string unique. -#: src/nm.c:781 +#: src/nm.c:779 msgctxt "sysv" msgid "Line" msgstr "" -#: src/nm.c:1249 +#: src/nm.c:1246 #, c-format msgid "%s: entry size in section %zd `%s' is not what we expect" msgstr "%s: розмір запису у розділі %zd «%s» не є очікуваним" -#: src/nm.c:1254 +#: src/nm.c:1251 #, c-format msgid "%s: size of section %zd `%s' is not multiple of entry size" msgstr "%s: розмір розділу %zd «%s» не є кратним до розміру запису" -#: src/nm.c:1335 +#: src/nm.c:1331 #, c-format msgid "%s: entries (%zd) in section %zd `%s' is too large" msgstr "%s: записи (%zd) у розділі %zd, «%s» є завеликим" #. XXX Add machine specific object file types. -#: src/nm.c:1571 +#: src/nm.c:1567 #, c-format msgid "%s%s%s%s: Invalid operation" msgstr "%s%s%s%s: некоректна дія" -#: src/nm.c:1621 +#: src/nm.c:1617 #, c-format msgid "%s%s%s: no symbols" msgstr "%s%s%s: немає символів" @@ -4122,11 +4126,11 @@ msgstr "Не вказано дії.\n" msgid "while close `%s'" msgstr "під час закриття «%s»" -#: src/objdump.c:363 src/readelf.c:2104 src/readelf.c:2296 +#: src/objdump.c:363 src/readelf.c:2112 src/readelf.c:2303 msgid "INVALID SYMBOL" msgstr "НЕКОРЕКТНИЙ СИМВОЛ" -#: src/objdump.c:378 src/readelf.c:2138 src/readelf.c:2332 +#: src/objdump.c:378 src/readelf.c:2146 src/readelf.c:2339 msgid "INVALID SECTION" msgstr "НЕКОРЕКТНИЙ РОЗДІЛ" @@ -4151,12 +4155,11 @@ msgid "Contents of section %s:\n" msgstr "Вміст розділу %s:\n" #: src/objdump.c:687 -#, c-format msgid "cannot disassemble" msgstr "не вдалося дизасемблювати" -#: src/objdump.c:759 -#, fuzzy, c-format +#: src/objdump.c:758 +#, fuzzy msgid "cannot create backend for elf file" msgstr "не вдалося створити файл" @@ -4341,21 +4344,21 @@ msgstr "Невідомий діагностичний розділ DWARF «%s». msgid "cannot generate Elf descriptor: %s" msgstr "не вдалося створити дескриптор Elf: %s" -#: src/readelf.c:628 src/readelf.c:955 src/strip.c:1184 +#: src/readelf.c:628 src/readelf.c:954 src/strip.c:1181 #, c-format msgid "cannot determine number of sections: %s" msgstr "не вдалося визначити кількість розділів: %s" -#: src/readelf.c:646 src/readelf.c:1265 src/readelf.c:1475 +#: src/readelf.c:646 src/readelf.c:1261 src/readelf.c:1469 #, c-format msgid "cannot get section: %s" msgstr "не вдалося отримати розділ: %s" -#: src/readelf.c:655 src/readelf.c:1272 src/readelf.c:1483 src/readelf.c:12834 -#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:612 -#: src/unstrip.c:633 src/unstrip.c:673 src/unstrip.c:889 src/unstrip.c:1224 -#: src/unstrip.c:1351 src/unstrip.c:1375 src/unstrip.c:1431 src/unstrip.c:1472 -#: src/unstrip.c:1665 src/unstrip.c:1816 src/unstrip.c:1959 src/unstrip.c:2058 +#: src/readelf.c:655 src/readelf.c:1268 src/readelf.c:1476 src/readelf.c:12827 +#: src/unstrip.c:397 src/unstrip.c:428 src/unstrip.c:491 src/unstrip.c:611 +#: src/unstrip.c:632 src/unstrip.c:672 src/unstrip.c:888 src/unstrip.c:1223 +#: src/unstrip.c:1350 src/unstrip.c:1374 src/unstrip.c:1430 src/unstrip.c:1471 +#: src/unstrip.c:1663 src/unstrip.c:1814 src/unstrip.c:1957 src/unstrip.c:2056 #, c-format msgid "cannot get section header: %s" msgstr "не вдалося отримати заголовок розділу: %s" @@ -4365,8 +4368,8 @@ msgstr "не вдалося отримати заголовок розділу: msgid "cannot get section name" msgstr "не вдалося отримати назву розділу" -#: src/readelf.c:672 src/readelf.c:6634 src/readelf.c:10681 src/readelf.c:10783 -#: src/readelf.c:10961 +#: src/readelf.c:672 src/readelf.c:6633 src/readelf.c:10680 src/readelf.c:10782 +#: src/readelf.c:10960 #, c-format msgid "cannot get %s content: %s" msgstr "не вдалося отримати дані %s: %s" @@ -4426,48 +4429,48 @@ msgstr "не вдалося прочитати заголовок ELF: %s" msgid "cannot create EBL handle" msgstr "не вдалося створити дескриптор EBL" -#: src/readelf.c:961 +#: src/readelf.c:959 #, c-format msgid "cannot determine number of program headers: %s" msgstr "не вдалося визначити кількість заголовків програми: %s" -#: src/readelf.c:993 +#: src/readelf.c:991 #, c-format msgid "cannot read ELF: %s" msgstr "не вдалося прочитати ELF: %s" -#: src/readelf.c:1054 +#: src/readelf.c:1052 msgid "NONE (None)" msgstr "NONE (Немає)" -#: src/readelf.c:1055 +#: src/readelf.c:1053 msgid "REL (Relocatable file)" msgstr "REL (Придатний до пересування файл)" -#: src/readelf.c:1056 +#: src/readelf.c:1054 msgid "EXEC (Executable file)" msgstr "EXEC (Виконуваний файл)" -#: src/readelf.c:1057 +#: src/readelf.c:1055 msgid "DYN (Shared object file)" msgstr "DYN (Файл об’єктів спільного використання)" -#: src/readelf.c:1058 +#: src/readelf.c:1056 msgid "CORE (Core file)" msgstr "CORE (Файл ядра)" -#: src/readelf.c:1063 +#: src/readelf.c:1061 #, c-format msgid "OS Specific: (%x)\n" msgstr "ОС-специфічне: (%x)\n" #. && e_type <= ET_HIPROC always true -#: src/readelf.c:1065 +#: src/readelf.c:1063 #, c-format msgid "Processor Specific: (%x)\n" msgstr "Специфічне для процесора: (%x)\n" -#: src/readelf.c:1075 +#: src/readelf.c:1073 msgid "" "ELF Header:\n" " Magic: " @@ -4475,7 +4478,7 @@ msgstr "" "Заголовок ELF:\n" " Magic: " -#: src/readelf.c:1079 +#: src/readelf.c:1077 #, c-format msgid "" "\n" @@ -4484,123 +4487,123 @@ msgstr "" "\n" " Клас: %s\n" -#: src/readelf.c:1084 +#: src/readelf.c:1082 #, c-format msgid " Data: %s\n" msgstr " Дані: %s\n" -#: src/readelf.c:1090 +#: src/readelf.c:1088 #, c-format msgid " Ident Version: %hhd %s\n" msgstr " Версія Ident: %hhd %s\n" -#: src/readelf.c:1092 src/readelf.c:1114 +#: src/readelf.c:1090 src/readelf.c:1112 msgid "(current)" msgstr "(поточний)" -#: src/readelf.c:1096 +#: src/readelf.c:1094 #, c-format msgid " OS/ABI: %s\n" msgstr " ОС/ABI: %s\n" -#: src/readelf.c:1099 +#: src/readelf.c:1097 #, c-format msgid " ABI Version: %hhd\n" msgstr " Версія ABI: %hhd\n" -#: src/readelf.c:1102 +#: src/readelf.c:1100 msgid " Type: " msgstr " Тип: " -#: src/readelf.c:1107 +#: src/readelf.c:1105 #, c-format msgid " Machine: %s\n" msgstr " Архітектура: %s\n" -#: src/readelf.c:1109 +#: src/readelf.c:1107 #, c-format msgid " Machine: : 0x%x\n" msgstr " Архітектура: <невідома>: 0x%x\n" -#: src/readelf.c:1112 +#: src/readelf.c:1110 #, c-format msgid " Version: %d %s\n" msgstr " Версія: %d %s\n" -#: src/readelf.c:1116 +#: src/readelf.c:1114 #, c-format msgid " Entry point address: %#\n" msgstr " Адреса вхідної точки: %#\n" -#: src/readelf.c:1119 +#: src/readelf.c:1117 #, c-format msgid " Start of program headers: % %s\n" msgstr " Початок заголовків програм: % %s\n" -#: src/readelf.c:1120 src/readelf.c:1123 +#: src/readelf.c:1118 src/readelf.c:1121 msgid "(bytes into file)" msgstr "(байтів у файл)" -#: src/readelf.c:1122 +#: src/readelf.c:1120 #, c-format msgid " Start of section headers: % %s\n" msgstr " Початок заголовків розділів: % %s\n" -#: src/readelf.c:1125 +#: src/readelf.c:1123 #, c-format msgid " Flags: %s\n" msgstr " Прапорці: %s\n" -#: src/readelf.c:1128 +#: src/readelf.c:1126 #, c-format msgid " Size of this header: % %s\n" msgstr " Розмір цього заголовка: % %s\n" -#: src/readelf.c:1129 src/readelf.c:1132 src/readelf.c:1149 +#: src/readelf.c:1127 src/readelf.c:1130 src/readelf.c:1147 msgid "(bytes)" msgstr "(байтів)" -#: src/readelf.c:1131 +#: src/readelf.c:1129 #, c-format msgid " Size of program header entries: % %s\n" msgstr " Розмір записів заголовка програми: % %s\n" -#: src/readelf.c:1134 +#: src/readelf.c:1132 #, c-format msgid " Number of program headers entries: %" msgstr " Кількість записів заголовків програми: %" -#: src/readelf.c:1141 +#: src/readelf.c:1139 #, c-format msgid " (% in [0].sh_info)" msgstr " (% у [0].sh_info)" -#: src/readelf.c:1144 src/readelf.c:1161 src/readelf.c:1175 +#: src/readelf.c:1142 src/readelf.c:1159 src/readelf.c:1173 msgid " ([0] not available)" msgstr " ([0] недоступний)" -#: src/readelf.c:1148 +#: src/readelf.c:1146 #, c-format msgid " Size of section header entries: % %s\n" msgstr " Розмір записів заголовків розділів: % %s\n" -#: src/readelf.c:1151 +#: src/readelf.c:1149 #, c-format msgid " Number of section headers entries: %" msgstr " Кількість записів заголовків розділів: %" -#: src/readelf.c:1158 +#: src/readelf.c:1156 #, c-format msgid " (% in [0].sh_size)" msgstr " (% у [0].sh_size)" #. We managed to get the zeroth section. -#: src/readelf.c:1171 +#: src/readelf.c:1169 #, c-format msgid " (% in [0].sh_link)" msgstr " (% у [0].sh_link)" -#: src/readelf.c:1179 +#: src/readelf.c:1177 #, c-format msgid "" " Section header string table index: XINDEX%s\n" @@ -4609,7 +4612,7 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: XINDEX%s\n" "\n" -#: src/readelf.c:1183 +#: src/readelf.c:1181 #, c-format msgid "" " Section header string table index: %\n" @@ -4618,12 +4621,12 @@ msgstr "" " Індекс заголовка розділу у таблиці рядків: %\n" "\n" -#: src/readelf.c:1230 src/readelf.c:1440 +#: src/readelf.c:1227 src/readelf.c:1435 #, c-format msgid "cannot get number of sections: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/readelf.c:1233 +#: src/readelf.c:1230 #, c-format msgid "" "There are %zd section headers, starting at offset %#:\n" @@ -4632,16 +4635,16 @@ msgstr "" "Виявлено %zd заголовків розділів, зміщення початку — %#:\n" "\n" -#: src/readelf.c:1242 +#: src/readelf.c:1238 #, c-format msgid "cannot get section header string table index: %s" msgstr "не вдалося визначити індекс заголовка розділу у таблиці рядків: %s" -#: src/readelf.c:1245 +#: src/readelf.c:1241 msgid "Section Headers:" msgstr "Заголовки розділів:" -#: src/readelf.c:1248 +#: src/readelf.c:1244 msgid "" "[Nr] Name Type Addr Off Size ES Flags Lk " "Inf Al" @@ -4649,7 +4652,7 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES Прап Lk " "Інф Al" -#: src/readelf.c:1250 +#: src/readelf.c:1246 msgid "" "[Nr] Name Type Addr Off Size ES " "Flags Lk Inf Al" @@ -4657,35 +4660,35 @@ msgstr "" "[№ ] Назва Тип Адр Змі Розмір ES " "Прап Lk Інф Al" -#: src/readelf.c:1255 +#: src/readelf.c:1251 msgid " [Compression Size Al]" msgstr " [Стискання Розмір Ал]" -#: src/readelf.c:1257 +#: src/readelf.c:1253 msgid " [Compression Size Al]" msgstr " [Стискання Розмір Ал]" -#: src/readelf.c:1335 +#: src/readelf.c:1331 #, c-format msgid "bad compression header for section %zd: %s" msgstr "помилковий заголовок стиснення для розділу %zd: %s" -#: src/readelf.c:1346 +#: src/readelf.c:1342 #, c-format msgid "bad gnu compressed size for section %zd: %s" msgstr "помилкове значення стисненого розміру gnu для розділу %zd: %s" -#: src/readelf.c:1364 +#: src/readelf.c:1360 msgid "Program Headers:" msgstr "Заголовки програми:" -#: src/readelf.c:1366 +#: src/readelf.c:1362 msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align" msgstr "" " Тип Зміщен ВіртАдр ФізАдр РозмФайл РозмПам Пра Вирів" -#: src/readelf.c:1369 +#: src/readelf.c:1365 msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align" @@ -4693,12 +4696,12 @@ msgstr "" " Тип Зміщен ВіртАдр ФізАдр " "РозмФайлРозмПам Пра Вирів" -#: src/readelf.c:1426 +#: src/readelf.c:1422 #, c-format msgid "\t[Requesting program interpreter: %s]\n" msgstr "\t[Запит щодо інтерпретатора програми: %s]\n" -#: src/readelf.c:1453 +#: src/readelf.c:1447 msgid "" "\n" " Section to Segment mapping:\n" @@ -4708,12 +4711,12 @@ msgstr "" " Відображення розділів на сегмент:\n" " Розділи сегмента..." -#: src/readelf.c:1464 src/unstrip.c:2117 src/unstrip.c:2159 src/unstrip.c:2166 +#: src/readelf.c:1458 src/unstrip.c:2115 src/unstrip.c:2157 src/unstrip.c:2164 #, c-format msgid "cannot get program header: %s" msgstr "не вдалося отримати заголовок програми: %s" -#: src/readelf.c:1610 +#: src/readelf.c:1602 #, c-format msgid "" "\n" @@ -4731,7 +4734,7 @@ msgstr[2] "" "\n" "Група розділів COMDAT [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1615 +#: src/readelf.c:1607 #, c-format msgid "" "\n" @@ -4749,31 +4752,31 @@ msgstr[2] "" "\n" "Група розділів [%2zu] «%s» з підписом «%s» містить %zu записів:\n" -#: src/readelf.c:1623 +#: src/readelf.c:1615 msgid "" msgstr "<НЕКОРЕКТНИЙ СИМВОЛ>" -#: src/readelf.c:1637 +#: src/readelf.c:1629 msgid "" msgstr "<НЕКОРЕКТНИЙ РОЗДІЛ>" -#: src/readelf.c:1660 src/readelf.c:2387 src/readelf.c:3494 src/readelf.c:12705 -#: src/readelf.c:12712 src/readelf.c:12756 src/readelf.c:12763 +#: src/readelf.c:1652 src/readelf.c:2394 src/readelf.c:3496 src/readelf.c:12699 +#: src/readelf.c:12706 src/readelf.c:12750 src/readelf.c:12757 msgid "Couldn't uncompress section" msgstr "Не вдалося розпакувати розділ" -#: src/readelf.c:1665 src/readelf.c:2392 src/readelf.c:3499 +#: src/readelf.c:1656 src/readelf.c:2399 src/readelf.c:3500 #, c-format msgid "cannot get section [%zd] header: %s" msgstr "не вдалося отримати заголовок розділу [%zd]: %s" -#: src/readelf.c:1809 src/readelf.c:2459 src/readelf.c:2725 src/readelf.c:2801 -#: src/readelf.c:3105 src/readelf.c:3179 src/readelf.c:5407 +#: src/readelf.c:1818 src/readelf.c:2465 src/readelf.c:2730 src/readelf.c:2805 +#: src/readelf.c:3108 src/readelf.c:3182 src/readelf.c:5406 #, c-format msgid "invalid sh_link value in section %zu" msgstr "некоректне значення sh_link у розділі %zu" -#: src/readelf.c:1812 +#: src/readelf.c:1821 #, c-format msgid "" "\n" @@ -4796,36 +4799,36 @@ msgstr[2] "" "Динамічний сегмент містить %lu записів:\n" " Адр: %#0* Зміщення: %#08 Пос. на розділ: [%2u] '%s'\n" -#: src/readelf.c:1822 +#: src/readelf.c:1831 msgid " Type Value\n" msgstr " Тип Значення\n" -#: src/readelf.c:1846 +#: src/readelf.c:1855 #, c-format msgid "Shared library: [%s]\n" msgstr "Спільна бібліотека: [%s]\n" -#: src/readelf.c:1851 +#: src/readelf.c:1860 #, c-format msgid "Library soname: [%s]\n" msgstr "Назва so бібліотеки: [%s]\n" -#: src/readelf.c:1856 +#: src/readelf.c:1865 #, c-format msgid "Library rpath: [%s]\n" msgstr "Rpath бібліотеки: [%s]\n" -#: src/readelf.c:1861 +#: src/readelf.c:1870 #, c-format msgid "Library runpath: [%s]\n" msgstr "Runpath бібліотеки: [%s]\n" -#: src/readelf.c:1881 +#: src/readelf.c:1890 #, c-format msgid "% (bytes)\n" msgstr "% (байт)\n" -#: src/readelf.c:1994 src/readelf.c:2184 +#: src/readelf.c:2003 src/readelf.c:2192 #, c-format msgid "" "\n" @@ -4834,7 +4837,7 @@ msgstr "" "\n" "Некоректна таблиця символів за зміщенням %#0\n" -#: src/readelf.c:2012 src/readelf.c:2202 +#: src/readelf.c:2020 src/readelf.c:2209 #, c-format msgid "" "\n" @@ -4863,7 +4866,7 @@ msgstr[2] "" #. The .rela.dyn section does not refer to a specific section but #. instead of section index zero. Do not try to print a section #. name. -#: src/readelf.c:2027 src/readelf.c:2217 +#: src/readelf.c:2035 src/readelf.c:2224 #, c-format msgid "" "\n" @@ -4881,30 +4884,30 @@ msgstr[2] "" "\n" "Розділ пересування [%2u] «%s» за зміщенням %#0 містить %d записів:\n" -#: src/readelf.c:2037 +#: src/readelf.c:2045 msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:2039 +#: src/readelf.c:2047 msgid " Offset Type Value Name\n" msgstr " Зміщення Тип Значення Назва\n" -#: src/readelf.c:2092 src/readelf.c:2103 src/readelf.c:2116 src/readelf.c:2137 -#: src/readelf.c:2149 src/readelf.c:2283 src/readelf.c:2295 src/readelf.c:2309 -#: src/readelf.c:2331 src/readelf.c:2344 +#: src/readelf.c:2100 src/readelf.c:2111 src/readelf.c:2124 src/readelf.c:2145 +#: src/readelf.c:2157 src/readelf.c:2290 src/readelf.c:2302 src/readelf.c:2316 +#: src/readelf.c:2338 src/readelf.c:2351 msgid "" msgstr "<НЕКОРЕКТНЕ ПЕРЕМІЩЕННЯ>" -#: src/readelf.c:2227 +#: src/readelf.c:2234 msgid " Offset Type Value Addend Name\n" msgstr " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:2229 +#: src/readelf.c:2236 msgid " Offset Type Value Addend Name\n" msgstr "" " Зміщення Тип Значення Назва додатка\n" -#: src/readelf.c:2467 +#: src/readelf.c:2473 #, c-format msgid "" "\n" @@ -4922,7 +4925,7 @@ msgstr[2] "" "\n" "Таблиця символів [%2u] «%s» містить %u записів:\n" -#: src/readelf.c:2472 +#: src/readelf.c:2478 #, c-format msgid " %lu local symbol String table: [%2u] '%s'\n" msgid_plural " %lu local symbols String table: [%2u] '%s'\n" @@ -4930,33 +4933,33 @@ msgstr[0] " %lu лок. символ Таблиця символів: [%2u] « msgstr[1] " %lu лок. символи Таблиця символів: [%2u] «%s»\n" msgstr[2] " %lu лок. символів Таблиця символів: [%2u] «%s»\n" -#: src/readelf.c:2480 +#: src/readelf.c:2486 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2482 +#: src/readelf.c:2488 msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " №№ Знач. Роз. Тип Зв’яз Вид. Інд Назва\n" -#: src/readelf.c:2502 +#: src/readelf.c:2508 #, c-format msgid "%5u: %0* %6 %-7s %-6s %-9s %6s %s" msgstr "%5u: %0* %6 %-7s %-6s %-9s %6s %s" -#: src/readelf.c:2595 +#: src/readelf.c:2601 #, c-format msgid "bad dynamic symbol" msgstr "помилковий динамічний символ" -#: src/readelf.c:2680 +#: src/readelf.c:2686 msgid "none" msgstr "немає" -#: src/readelf.c:2697 +#: src/readelf.c:2703 msgid "| " msgstr "| <невідомо>" -#: src/readelf.c:2728 +#: src/readelf.c:2733 #, c-format msgid "" "\n" @@ -4979,17 +4982,17 @@ msgstr[2] "" "Розділ потреби у версіях [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2749 +#: src/readelf.c:2754 #, c-format msgid " %#06x: Version: %hu File: %s Cnt: %hu\n" msgstr " %#06x: Версія: %hu Файл: %s Кть: %hu\n" -#: src/readelf.c:2762 +#: src/readelf.c:2767 #, c-format msgid " %#06x: Name: %s Flags: %s Version: %hu\n" msgstr " %#06x: Назва: %s Прап: %s Версія: %hu\n" -#: src/readelf.c:2805 +#: src/readelf.c:2809 #, c-format msgid "" "\n" @@ -5012,18 +5015,18 @@ msgstr[2] "" "Розділ визначення версії [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:2833 +#: src/readelf.c:2837 #, c-format msgid " %#06x: Version: %hd Flags: %s Index: %hd Cnt: %hd Name: %s\n" msgstr " %#06x: Версія: %hd Прап.: %s Індекс: %hd К-ть: %hd Назва: %s\n" -#: src/readelf.c:2848 +#: src/readelf.c:2852 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: батьківський %d: %s\n" #. Print the header. -#: src/readelf.c:3109 +#: src/readelf.c:3112 #, c-format msgid "" "\n" @@ -5046,15 +5049,15 @@ msgstr[2] "" "Розділ символів версій [%2u] «%s», що містить %d записів:\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»" -#: src/readelf.c:3137 +#: src/readelf.c:3140 msgid " 0 *local* " msgstr " 0 *локальний* " -#: src/readelf.c:3142 +#: src/readelf.c:3145 msgid " 1 *global* " msgstr " 1 *загальний* " -#: src/readelf.c:3184 +#: src/readelf.c:3187 #, c-format msgid "" "\n" @@ -5082,22 +5085,22 @@ msgstr[2] "" "блоками):\n" " Адр.: %#0* Зміщ.: %#08 Посилання на розділ: [%2u] «%s»\n" -#: src/readelf.c:3206 +#: src/readelf.c:3209 #, no-c-format msgid " Length Number % of total Coverage\n" msgstr " Довжина Номер % від загал. Покриття\n" -#: src/readelf.c:3208 +#: src/readelf.c:3211 #, c-format msgid " 0 %6 %5.1f%%\n" msgstr " 0 %6 %5.1f%%\n" -#: src/readelf.c:3215 +#: src/readelf.c:3218 #, c-format msgid "%7d %6 %5.1f%% %5.1f%%\n" msgstr "%7d %6 %5.1f%% %5.1f%%\n" -#: src/readelf.c:3228 +#: src/readelf.c:3231 #, c-format msgid "" " Average number of tests: successful lookup: %f\n" @@ -5106,37 +5109,37 @@ msgstr "" " Середня кількість тестів: успішний пошук: %f\n" "\t\t\t неуспішний пошук: %f\n" -#: src/readelf.c:3246 src/readelf.c:3310 src/readelf.c:3376 +#: src/readelf.c:3249 src/readelf.c:3313 src/readelf.c:3379 #, c-format msgid "cannot get data for section %d: %s" msgstr "не вдалося отримати дані для розділу %d: %s" -#: src/readelf.c:3254 +#: src/readelf.c:3257 #, c-format msgid "invalid data in sysv.hash section %d" msgstr "некоректні дані у розділі sysv.hash %d" -#: src/readelf.c:3283 +#: src/readelf.c:3286 #, c-format msgid "invalid chain in sysv.hash section %d" msgstr "некоректний ланцюжок у розділі sysv.hash %d" -#: src/readelf.c:3318 +#: src/readelf.c:3321 #, c-format msgid "invalid data in sysv.hash64 section %d" msgstr "некоректні дані у розділі sysv.hash64 %d" -#: src/readelf.c:3349 +#: src/readelf.c:3352 #, c-format msgid "invalid chain in sysv.hash64 section %d" msgstr "некоректний ланцюжок у розділі sysv.hash64 %d" -#: src/readelf.c:3385 +#: src/readelf.c:3388 #, c-format msgid "invalid data in gnu.hash section %d" msgstr "некоректні дані у розділі gnu.hash %d" -#: src/readelf.c:3451 +#: src/readelf.c:3454 #, c-format msgid "" " Symbol Bias: %u\n" @@ -5175,7 +5178,7 @@ msgstr "" " Бібліотека Часовий штамп Версія суми " "Прапорці" -#: src/readelf.c:3612 +#: src/readelf.c:3611 #, c-format msgid "" "\n" @@ -5186,102 +5189,101 @@ msgstr "" "Розділ атрибутів об’єктів [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:3629 +#: src/readelf.c:3628 msgid " Owner Size\n" msgstr " Власник Розмір\n" -#: src/readelf.c:3653 +#: src/readelf.c:3652 #, c-format msgid " %-13s %4\n" msgstr " %-13s %4\n" #. Unknown subsection, print and skip. -#: src/readelf.c:3692 +#: src/readelf.c:3691 #, c-format msgid " %-4u %12\n" msgstr " %-4u %12\n" #. Tag_File -#: src/readelf.c:3697 +#: src/readelf.c:3696 #, c-format msgid " File: %11\n" msgstr " Файл: %11\n" -#: src/readelf.c:3746 +#: src/readelf.c:3745 #, c-format msgid " %s: %, %s\n" msgstr " %s: %, %s\n" -#: src/readelf.c:3749 +#: src/readelf.c:3748 #, c-format msgid " %s: %\n" msgstr " %s: %\n" -#: src/readelf.c:3752 +#: src/readelf.c:3751 #, c-format msgid " %s: %s\n" msgstr " %s: %s\n" -#: src/readelf.c:3762 +#: src/readelf.c:3761 #, c-format msgid " %u: %\n" msgstr " %u: %\n" -#: src/readelf.c:3765 +#: src/readelf.c:3764 #, c-format msgid " %u: %s\n" msgstr " %u: %s\n" -#: src/readelf.c:3835 -#, c-format +#: src/readelf.c:3834 msgid "sprintf failure" msgstr "помилка sprintf" -#: src/readelf.c:4317 +#: src/readelf.c:4316 msgid "empty block" msgstr "порожній блок" -#: src/readelf.c:4320 +#: src/readelf.c:4319 #, c-format msgid "%zu byte block:" msgstr "%zu-байтовий блок:" -#: src/readelf.c:4798 +#: src/readelf.c:4797 #, c-format msgid "%*s[%2] %s \n" msgstr "%*s[%2] %s <ОБРІЗАНО>\n" -#: src/readelf.c:4865 +#: src/readelf.c:4864 #, c-format msgid "%s %# used with different address sizes" msgstr "%s %# використано з різними розмірами адрес" -#: src/readelf.c:4872 +#: src/readelf.c:4871 #, c-format msgid "%s %# used with different offset sizes" msgstr "%s %# використано з різними розмірами зміщень" -#: src/readelf.c:4879 +#: src/readelf.c:4878 #, c-format msgid "%s %# used with different base addresses" msgstr "%s %# використано з різними базовими адресами" -#: src/readelf.c:4886 +#: src/readelf.c:4885 #, c-format msgid "%s %# used with different attribute %s and %s" msgstr "%s %# використано з різними атрибутами, %s і %s" -#: src/readelf.c:4986 +#: src/readelf.c:4985 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ У РЕШТІ РОЗДІЛУ>\n" -#: src/readelf.c:4994 +#: src/readelf.c:4993 #, c-format msgid " [%6tx] ... % bytes ...\n" msgstr " [%6tx] <НЕВИКОРИСТОВУВАНІ ДАНІ> ... % байтів ...\n" -#: src/readelf.c:5097 +#: src/readelf.c:5096 #, c-format msgid "" "\n" @@ -5292,7 +5294,7 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" " [ Код]\n" -#: src/readelf.c:5105 +#: src/readelf.c:5104 #, c-format msgid "" "\n" @@ -5301,20 +5303,20 @@ msgstr "" "\n" "Розділ скорочень за зміщенням %:\n" -#: src/readelf.c:5118 +#: src/readelf.c:5117 #, c-format msgid " *** error while reading abbreviation: %s\n" msgstr " *** помилка під час читання скорочення: %s\n" -#: src/readelf.c:5134 +#: src/readelf.c:5133 #, c-format msgid " [%5u] offset: %, children: %s, tag: %s\n" msgstr " [%5u] зміщення: %, дочірній: %s, мітка: %s\n" -#: src/readelf.c:5167 src/readelf.c:5476 src/readelf.c:5643 src/readelf.c:6028 -#: src/readelf.c:6644 src/readelf.c:8399 src/readelf.c:9145 src/readelf.c:9618 -#: src/readelf.c:9869 src/readelf.c:10035 src/readelf.c:10422 -#: src/readelf.c:10482 +#: src/readelf.c:5166 src/readelf.c:5475 src/readelf.c:5642 src/readelf.c:6027 +#: src/readelf.c:6643 src/readelf.c:8398 src/readelf.c:9144 src/readelf.c:9617 +#: src/readelf.c:9868 src/readelf.c:10034 src/readelf.c:10421 +#: src/readelf.c:10481 #, c-format msgid "" "\n" @@ -5323,54 +5325,54 @@ msgstr "" "\n" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" -#: src/readelf.c:5180 +#: src/readelf.c:5179 #, c-format msgid "cannot get .debug_addr section data: %s" msgstr "не вдалося отримати дані розділу .debug_addr: %s" -#: src/readelf.c:5280 src/readelf.c:5304 src/readelf.c:5688 src/readelf.c:9190 +#: src/readelf.c:5279 src/readelf.c:5303 src/readelf.c:5687 src/readelf.c:9189 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:5282 src/readelf.c:5319 src/readelf.c:5701 src/readelf.c:9203 +#: src/readelf.c:5281 src/readelf.c:5318 src/readelf.c:5700 src/readelf.c:9202 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:5283 src/readelf.c:5328 src/readelf.c:5710 src/readelf.c:9212 +#: src/readelf.c:5282 src/readelf.c:5327 src/readelf.c:5709 src/readelf.c:9211 #, c-format msgid " Address size: %8\n" msgstr " Розмір адреси: %8\n" -#: src/readelf.c:5285 src/readelf.c:5338 src/readelf.c:5720 src/readelf.c:9222 +#: src/readelf.c:5284 src/readelf.c:5337 src/readelf.c:5719 src/readelf.c:9221 #, c-format msgid " Segment size: %8\n" msgstr "" " Розмір сегмента: %8\n" "\n" -#: src/readelf.c:5323 src/readelf.c:5705 src/readelf.c:9207 src/readelf.c:10614 +#: src/readelf.c:5322 src/readelf.c:5704 src/readelf.c:9206 src/readelf.c:10613 #, c-format msgid "Unknown version" msgstr "Невідома версія" -#: src/readelf.c:5333 src/readelf.c:5546 src/readelf.c:5715 src/readelf.c:9217 +#: src/readelf.c:5332 src/readelf.c:5545 src/readelf.c:5714 src/readelf.c:9216 #, c-format msgid "unsupported address size" msgstr "непідтримуваний розмір адреси" -#: src/readelf.c:5344 src/readelf.c:5557 src/readelf.c:5725 src/readelf.c:9227 +#: src/readelf.c:5343 src/readelf.c:5556 src/readelf.c:5724 src/readelf.c:9226 #, c-format msgid "unsupported segment size" msgstr "непідтримуваний розмір сегмента" -#: src/readelf.c:5397 src/readelf.c:5471 +#: src/readelf.c:5396 src/readelf.c:5470 #, c-format msgid "cannot get .debug_aranges content: %s" msgstr "не вдалося отримати дані get .debug_aranges: %s" -#: src/readelf.c:5412 +#: src/readelf.c:5411 #, c-format msgid "" "\n" @@ -5388,12 +5390,12 @@ msgstr[2] "" "\n" "Розділ DWARF [%2zu] «%s» за зміщенням %# містить %zu записів:\n" -#: src/readelf.c:5443 +#: src/readelf.c:5442 #, c-format msgid " [%*zu] ???\n" msgstr " [%*zu] ???\n" -#: src/readelf.c:5445 +#: src/readelf.c:5444 #, c-format msgid "" " [%*zu] start: %0#*, length: %5, CU DIE offset: %6\n" @@ -5401,7 +5403,7 @@ msgstr "" " [%*zu] початок: %0#*, довжина: %5, зміщення CU DIE: " "%6\n" -#: src/readelf.c:5489 src/readelf.c:8426 +#: src/readelf.c:5488 src/readelf.c:8425 #, c-format msgid "" "\n" @@ -5410,13 +5412,13 @@ msgstr "" "\n" "Таблиця за зміщенням %zu:\n" -#: src/readelf.c:5493 src/readelf.c:5669 src/readelf.c:6668 src/readelf.c:8437 -#: src/readelf.c:9171 +#: src/readelf.c:5492 src/readelf.c:5668 src/readelf.c:6667 src/readelf.c:8436 +#: src/readelf.c:9170 #, c-format msgid "invalid data in section [%zu] '%s'" msgstr "некоректні дані у розділі [%zu] «%s»" -#: src/readelf.c:5509 +#: src/readelf.c:5508 #, c-format msgid "" "\n" @@ -5425,27 +5427,27 @@ msgstr "" "\n" " Довжина: %6\n" -#: src/readelf.c:5521 +#: src/readelf.c:5520 #, c-format msgid " DWARF version: %6\n" msgstr " версія DWARF: %6\n" -#: src/readelf.c:5525 +#: src/readelf.c:5524 #, c-format msgid "unsupported aranges version" msgstr "непідтримувана версія aranges" -#: src/readelf.c:5536 +#: src/readelf.c:5535 #, c-format msgid " CU offset: %6\n" msgstr " зміщення CU: %6\n" -#: src/readelf.c:5542 +#: src/readelf.c:5541 #, c-format msgid " Address size: %6\n" msgstr " Розмір адреси: %6\n" -#: src/readelf.c:5553 +#: src/readelf.c:5552 #, c-format msgid "" " Segment size: %6\n" @@ -5454,17 +5456,17 @@ msgstr "" " Розмір сегмента: %6\n" "\n" -#: src/readelf.c:5608 +#: src/readelf.c:5607 #, c-format msgid " %zu padding bytes\n" msgstr " %zu байтів доповнення\n" -#: src/readelf.c:5652 +#: src/readelf.c:5651 #, c-format msgid "cannot get .debug_rnglists content: %s" msgstr "не вдалося отримати вміст .debug_rnglists: %s" -#: src/readelf.c:5675 src/readelf.c:9177 +#: src/readelf.c:5674 src/readelf.c:9176 #, c-format msgid "" "Table at Offset 0x%:\n" @@ -5473,42 +5475,42 @@ msgstr "" "Таблиця за зміщенням 0x%:\n" "\n" -#: src/readelf.c:5730 src/readelf.c:9232 +#: src/readelf.c:5729 src/readelf.c:9231 #, c-format msgid " Offset entries: %8\n" msgstr " Записи зміщення: %8\n" -#: src/readelf.c:5746 src/readelf.c:9248 +#: src/readelf.c:5745 src/readelf.c:9247 #, c-format msgid " Unknown CU base: " msgstr " Невідома основа CU: " -#: src/readelf.c:5748 src/readelf.c:9250 +#: src/readelf.c:5747 src/readelf.c:9249 #, c-format msgid " CU [%6] base: " msgstr " Основа CU [%6]: " -#: src/readelf.c:5754 src/readelf.c:9256 +#: src/readelf.c:5753 src/readelf.c:9255 #, c-format msgid " Not associated with a CU.\n" msgstr " Не пов'язано із CU.\n" -#: src/readelf.c:5765 src/readelf.c:9267 +#: src/readelf.c:5764 src/readelf.c:9266 #, c-format msgid "too many offset entries for unit length" msgstr "забагато записів зсуву для довжини модуля" -#: src/readelf.c:5769 src/readelf.c:9271 +#: src/readelf.c:5768 src/readelf.c:9270 #, c-format msgid " Offsets starting at 0x%:\n" msgstr " Зміщення, що починаються з 0x%:\n" -#: src/readelf.c:5821 +#: src/readelf.c:5820 #, c-format msgid "invalid range list data" msgstr "некоректні дані списку діапазонів" -#: src/readelf.c:6006 src/readelf.c:9596 +#: src/readelf.c:6005 src/readelf.c:9595 #, c-format msgid "" " %zu padding bytes\n" @@ -5517,12 +5519,12 @@ msgstr "" " %zu байтів доповнення\n" "\n" -#: src/readelf.c:6023 +#: src/readelf.c:6022 #, c-format msgid "cannot get .debug_ranges content: %s" msgstr "не вдалося отримати дані .debug_ranges: %s" -#: src/readelf.c:6059 src/readelf.c:9651 +#: src/readelf.c:6058 src/readelf.c:9650 #, c-format msgid "" "\n" @@ -5531,7 +5533,7 @@ msgstr "" "\n" " Невідома основа CU: " -#: src/readelf.c:6061 src/readelf.c:9653 +#: src/readelf.c:6060 src/readelf.c:9652 #, c-format msgid "" "\n" @@ -5540,31 +5542,31 @@ msgstr "" "\n" " Основа CU [%6]: " -#: src/readelf.c:6070 src/readelf.c:9679 src/readelf.c:9705 +#: src/readelf.c:6069 src/readelf.c:9678 src/readelf.c:9704 #, c-format msgid " [%6tx] \n" msgstr " [%6tx] <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6095 src/readelf.c:9789 +#: src/readelf.c:6094 src/readelf.c:9788 #, fuzzy msgid "base address" msgstr " встановити адресу у значення " -#: src/readelf.c:6105 src/readelf.c:9799 +#: src/readelf.c:6104 src/readelf.c:9798 #, c-format msgid " [%6tx] empty list\n" msgstr " [%6tx] порожній список\n" -#: src/readelf.c:6365 +#: src/readelf.c:6364 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:6622 +#: src/readelf.c:6621 #, c-format msgid "cannot get ELF: %s" msgstr "не вдалося отримати ELF: %s" -#: src/readelf.c:6640 +#: src/readelf.c:6639 #, c-format msgid "" "\n" @@ -5573,7 +5575,7 @@ msgstr "" "\n" "Розділ відомостей щодо вікна викликів [%2zu] «%s» за зміщенням %#:\n" -#: src/readelf.c:6690 +#: src/readelf.c:6689 #, c-format msgid "" "\n" @@ -5582,65 +5584,65 @@ msgstr "" "\n" " [%6tx] нульовий переривач\n" -#: src/readelf.c:6791 src/readelf.c:6945 +#: src/readelf.c:6790 src/readelf.c:6944 #, c-format msgid "invalid augmentation length" msgstr "некоректна довжина збільшення" -#: src/readelf.c:6806 +#: src/readelf.c:6805 msgid "FDE address encoding: " msgstr "Кодування адреси FDE: " -#: src/readelf.c:6812 +#: src/readelf.c:6811 msgid "LSDA pointer encoding: " msgstr "Кодування вказівника LSDA: " -#: src/readelf.c:6922 +#: src/readelf.c:6921 #, c-format msgid " (offset: %#)" msgstr " (зміщення: %#)" -#: src/readelf.c:6929 +#: src/readelf.c:6928 #, c-format msgid " (end offset: %#)" msgstr " (зміщення від кінця: %#)" -#: src/readelf.c:6966 +#: src/readelf.c:6965 #, c-format msgid " %-26sLSDA pointer: %#\n" msgstr " %-26sвказівник LSDA: %#\n" -#: src/readelf.c:7051 +#: src/readelf.c:7050 #, c-format msgid "DIE [%] cannot get attribute code: %s" msgstr "DIE [%] не вдалося отримати код атрибута: %s" -#: src/readelf.c:7061 +#: src/readelf.c:7060 #, c-format msgid "DIE [%] cannot get attribute form: %s" msgstr "DIE [%] не вдалося отримати форму атрибута: %s" -#: src/readelf.c:7083 +#: src/readelf.c:7082 #, c-format msgid "DIE [%] cannot get attribute '%s' (%s) value: %s" msgstr "DIE [%] не вдалося отримати значення атрибута «%s» (%s): %s" -#: src/readelf.c:7413 +#: src/readelf.c:7412 #, c-format msgid "invalid file (%): %s" msgstr "некоректний файл (%): %s" -#: src/readelf.c:7417 +#: src/readelf.c:7416 #, c-format msgid "no srcfiles for CU [%]" msgstr "немає srcfiles для CU [%]" -#: src/readelf.c:7421 +#: src/readelf.c:7420 #, c-format msgid "couldn't get DWARF CU: %s" msgstr "не вдалося отримати CU DWARF: %s" -#: src/readelf.c:7736 +#: src/readelf.c:7735 #, c-format msgid "" "\n" @@ -5651,12 +5653,12 @@ msgstr "" "Розділ DWARF [%2zu] «%s» за зміщенням %#:\n" " [Зміщення]\n" -#: src/readelf.c:7786 +#: src/readelf.c:7785 #, c-format msgid "cannot get next unit: %s" msgstr "не вдалося отримати наступний модуль: %s" -#: src/readelf.c:7806 +#: src/readelf.c:7805 #, c-format msgid "" " Type unit at offset %:\n" @@ -5669,7 +5671,7 @@ msgstr "" "%, Розмір зміщення: %\n" " Підпис типу: %#, Зміщення типу: %# [%]\n" -#: src/readelf.c:7818 +#: src/readelf.c:7817 #, c-format msgid "" " Compilation unit at offset %:\n" @@ -5680,38 +5682,38 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:7828 src/readelf.c:7989 +#: src/readelf.c:7827 src/readelf.c:7988 #, c-format msgid " Unit type: %s (%)" msgstr " Тип модуля: %s (%)" -#: src/readelf.c:7855 +#: src/readelf.c:7854 #, c-format msgid "unknown version (%d) or unit type (%d)" msgstr "невідома версія (%d) або тип модуля (%d)" -#: src/readelf.c:7884 +#: src/readelf.c:7883 #, c-format msgid "cannot get DIE offset: %s" msgstr "не вдалося отримати зміщення DIE: %s" -#: src/readelf.c:7893 +#: src/readelf.c:7892 #, c-format msgid "cannot get tag of DIE at offset [%] in section '%s': %s" msgstr "" "не вдалося отримати мітку DIE за зміщенням [%] у розділі «%s»: %s" -#: src/readelf.c:7929 +#: src/readelf.c:7928 #, c-format msgid "cannot get next DIE: %s\n" msgstr "не вдалося визначити наступний DIE: %s\n" -#: src/readelf.c:7937 +#: src/readelf.c:7936 #, c-format msgid "cannot get next DIE: %s" msgstr "не вдалося визначити наступний DIE: %s" -#: src/readelf.c:7981 +#: src/readelf.c:7980 #, c-format msgid "" " Split compilation unit at offset %:\n" @@ -5722,7 +5724,7 @@ msgstr "" " Версія: %, Зміщення розділу скорочень: %, Адреса: %, " "Зміщення: %\n" -#: src/readelf.c:8033 +#: src/readelf.c:8032 #, c-format msgid "" "\n" @@ -5733,18 +5735,18 @@ msgstr "" "Розділ DWARF [%2zu] «%s» зі зміщенням %#:\n" "\n" -#: src/readelf.c:8365 +#: src/readelf.c:8364 #, c-format msgid "unknown form: %s" msgstr "невідома форма: %s" -#: src/readelf.c:8413 +#: src/readelf.c:8412 #, c-format msgid "cannot get line data section data: %s" msgstr "не вдалося отримати дані розділу лінійних даних: %s" #. Print what we got so far. -#: src/readelf.c:8517 +#: src/readelf.c:8516 #, c-format msgid "" "\n" @@ -5777,27 +5779,27 @@ msgstr "" "\n" "Коди операцій:\n" -#: src/readelf.c:8539 +#: src/readelf.c:8538 #, c-format msgid "cannot handle .debug_line version: %u\n" msgstr "не вдалося обробити версію .debug_line: %u\n" -#: src/readelf.c:8547 +#: src/readelf.c:8546 #, c-format msgid "cannot handle address size: %u\n" msgstr "не вдалося обробити розмір адреси: %u\n" -#: src/readelf.c:8555 +#: src/readelf.c:8554 #, c-format msgid "cannot handle segment selector size: %u\n" msgstr "не вдалося обробити розмір селектора сегментів: %u\n" -#: src/readelf.c:8565 +#: src/readelf.c:8564 #, c-format msgid "invalid data at offset %tu in section [%zu] '%s'" msgstr "некоректні дані зі зміщенням %tu у розділі [%zu] «%s»" -#: src/readelf.c:8580 +#: src/readelf.c:8579 #, c-format msgid " [%*] %hhu argument\n" msgid_plural " [%*] %hhu arguments\n" @@ -5805,7 +5807,7 @@ msgstr[0] " [%*] %hhu аргумент\n" msgstr[1] " [%*] %hhu аргументи\n" msgstr[2] " [%*] %hhu аргументів\n" -#: src/readelf.c:8591 +#: src/readelf.c:8590 msgid "" "\n" "Directory table:" @@ -5813,12 +5815,12 @@ msgstr "" "\n" "Таблиця каталогу:" -#: src/readelf.c:8597 src/readelf.c:8674 +#: src/readelf.c:8596 src/readelf.c:8673 #, c-format msgid " [" msgstr " [" -#: src/readelf.c:8668 +#: src/readelf.c:8667 msgid "" "\n" "File name table:" @@ -5826,11 +5828,11 @@ msgstr "" "\n" " Таблиця назв файлів:" -#: src/readelf.c:8729 +#: src/readelf.c:8728 msgid " Entry Dir Time Size Name" msgstr " Запис Кат Час Розмір Назва" -#: src/readelf.c:8775 +#: src/readelf.c:8774 #, fuzzy msgid "" "\n" @@ -5839,7 +5841,7 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8779 +#: src/readelf.c:8778 msgid "" "\n" "Line number statements:" @@ -5847,129 +5849,129 @@ msgstr "" "\n" "Оператори номерів рядків:" -#: src/readelf.c:8794 +#: src/readelf.c:8793 #, c-format msgid "invalid maximum operations per instruction is zero" msgstr "некоректну кількість операцій на інструкцію прирівняно до нуля" -#: src/readelf.c:8828 +#: src/readelf.c:8827 #, c-format msgid " special opcode %u: address+%u = " msgstr " спеціальний код операції %u: адреса+%u = " -#: src/readelf.c:8832 +#: src/readelf.c:8831 #, c-format msgid ", op_index = %u, line%+d = %zu\n" msgstr ", індекс_оп = %u, рядок%+d = %zu\n" -#: src/readelf.c:8835 +#: src/readelf.c:8834 #, c-format msgid ", line%+d = %zu\n" msgstr ", рядок%+d = %zu\n" -#: src/readelf.c:8853 +#: src/readelf.c:8852 #, c-format msgid " extended opcode %u: " msgstr " розширений код операції %u: " -#: src/readelf.c:8858 +#: src/readelf.c:8857 msgid " end of sequence" msgstr " кінець послідовності" -#: src/readelf.c:8876 +#: src/readelf.c:8875 #, c-format msgid " set address to " msgstr " встановити адресу у значення " -#: src/readelf.c:8904 +#: src/readelf.c:8903 #, c-format msgid " define new file: dir=%u, mtime=%, length=%, name=%s\n" msgstr "" " визначення нового файла: dir=%u, mtime=%, довжина=%, назва=" "%s\n" -#: src/readelf.c:8918 +#: src/readelf.c:8917 #, c-format msgid " set discriminator to %u\n" msgstr " встановити розрізнення для %u\n" -#: src/readelf.c:8945 +#: src/readelf.c:8944 #, c-format msgid " set inlined context %u, function name %s (0x%x)\n" msgstr "" -#: src/readelf.c:8969 +#: src/readelf.c:8968 #, fuzzy, c-format #| msgid "Also show function names" msgid " set function name %s (0x%x)\n" msgstr "Показувати також назви функцій" #. Unknown, ignore it. -#: src/readelf.c:8976 +#: src/readelf.c:8975 msgid " unknown opcode" msgstr " невідомий код операції" #. Takes no argument. -#: src/readelf.c:8988 +#: src/readelf.c:8987 msgid " copy" msgstr " копія" -#: src/readelf.c:8999 +#: src/readelf.c:8998 #, c-format msgid " advance address by %u to " msgstr " збільшення адреси на %u до " -#: src/readelf.c:9003 src/readelf.c:9064 +#: src/readelf.c:9002 src/readelf.c:9063 #, c-format msgid ", op_index to %u" msgstr ", op_index до %u" -#: src/readelf.c:9015 +#: src/readelf.c:9014 #, c-format msgid " advance line by constant %d to %\n" msgstr " просувати рядок на сталу %d до %\n" -#: src/readelf.c:9025 +#: src/readelf.c:9024 #, c-format msgid " set file to %\n" msgstr " встановити файл у %\n" -#: src/readelf.c:9036 +#: src/readelf.c:9035 #, c-format msgid " set column to %\n" msgstr " встановити значення стовпчика %\n" -#: src/readelf.c:9043 +#: src/readelf.c:9042 #, c-format msgid " set '%s' to %\n" msgstr " встановити «%s» у %\n" #. Takes no argument. -#: src/readelf.c:9049 +#: src/readelf.c:9048 msgid " set basic block flag" msgstr " встановити прапорець базового блоку" -#: src/readelf.c:9060 +#: src/readelf.c:9059 #, c-format msgid " advance address by constant %u to " msgstr " збільшити адресу на сталу величину %u до " -#: src/readelf.c:9080 +#: src/readelf.c:9079 #, c-format msgid " advance address by fixed value %u to \n" msgstr " збільшити адресу на фіксовану величину %u до \n" #. Takes no argument. -#: src/readelf.c:9090 +#: src/readelf.c:9089 msgid " set prologue end flag" msgstr " встановити прапорець кінця вступу" #. Takes no argument. -#: src/readelf.c:9095 +#: src/readelf.c:9094 msgid " set epilogue begin flag" msgstr " встановити прапорець початку епілогу" -#: src/readelf.c:9105 +#: src/readelf.c:9104 #, c-format msgid " set isa to %u\n" msgstr " встановити isa у %u\n" @@ -5977,7 +5979,7 @@ msgstr " встановити isa у %u\n" #. This is a new opcode the generator but not we know about. #. Read the parameters associated with it but then discard #. everything. Read all the parameters for this opcode. -#: src/readelf.c:9114 +#: src/readelf.c:9113 #, c-format msgid " unknown opcode with % parameter:" msgid_plural " unknown opcode with % parameters:" @@ -5985,102 +5987,102 @@ msgstr[0] " невідомий код операції з % параме msgstr[1] " невідомий код операції з % параметрами:" msgstr[2] " невідомий код операції з % параметрами:" -#: src/readelf.c:9154 +#: src/readelf.c:9153 #, c-format msgid "cannot get .debug_loclists content: %s" msgstr "не вдалося отримати вміст .debug_loclists: %s" -#: src/readelf.c:9320 +#: src/readelf.c:9319 #, fuzzy, c-format msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9360 +#: src/readelf.c:9359 #, c-format msgid "invalid loclists data" msgstr "некоректні дані loclists" -#: src/readelf.c:9613 +#: src/readelf.c:9612 #, c-format msgid "cannot get .debug_loc content: %s" msgstr "не вдалося отримати вміст .debug_loc: %s" -#: src/readelf.c:9826 src/readelf.c:10870 +#: src/readelf.c:9825 src/readelf.c:10869 msgid " \n" msgstr " <НЕКОРЕКТНІ ДАНІ>\n" -#: src/readelf.c:9881 src/readelf.c:10044 +#: src/readelf.c:9880 src/readelf.c:10043 #, c-format msgid "cannot get macro information section data: %s" msgstr "не вдалося отримати дані розділу відомостей щодо макросів: %s" -#: src/readelf.c:9961 +#: src/readelf.c:9960 #, c-format msgid "%*s*** non-terminated string at end of section" msgstr "%*s*** незавершений рядок наприкінці розділу" -#: src/readelf.c:9984 +#: src/readelf.c:9983 #, c-format msgid "%*s*** missing DW_MACINFO_start_file argument at end of section" msgstr "%*s*** пропущено аргумент DW_MACINFO_start_file наприкінці розділу" -#: src/readelf.c:10085 +#: src/readelf.c:10084 #, c-format msgid " Offset: 0x%\n" msgstr " Зміщення: 0x%\n" -#: src/readelf.c:10097 +#: src/readelf.c:10096 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10103 src/readelf.c:10990 +#: src/readelf.c:10102 src/readelf.c:10989 #, c-format msgid " unknown version, cannot parse section\n" msgstr " невідома версія, не вдалося обробити розділ\n" -#: src/readelf.c:10110 +#: src/readelf.c:10109 #, c-format msgid " Flag: 0x%" msgstr " Прапорець: 0x%" -#: src/readelf.c:10139 +#: src/readelf.c:10138 #, c-format msgid " Offset length: %\n" msgstr " Довжина зміщення: %\n" -#: src/readelf.c:10147 +#: src/readelf.c:10146 #, c-format msgid " .debug_line offset: 0x%\n" msgstr " зміщення .debug_line: 0x%\n" -#: src/readelf.c:10172 +#: src/readelf.c:10171 #, c-format msgid " extension opcode table, % items:\n" msgstr " таблиця кодів операцій розширень, записів — %:\n" -#: src/readelf.c:10179 +#: src/readelf.c:10178 #, c-format msgid " [%]" msgstr " [%]" -#: src/readelf.c:10191 +#: src/readelf.c:10190 #, c-format msgid " % arguments:" msgstr " % аргументів:" -#: src/readelf.c:10206 +#: src/readelf.c:10205 #, c-format msgid " no arguments." msgstr " немає аргументів." -#: src/readelf.c:10407 +#: src/readelf.c:10406 #, c-format msgid " [%5d] DIE offset: %6, CU DIE offset: %6, name: %s\n" msgstr "" " [%5d] зміщення DIE: %6, зміщення CU DIE: %6, назва: %s\n" -#: src/readelf.c:10451 +#: src/readelf.c:10450 #, c-format msgid "" "\n" @@ -6092,42 +6094,42 @@ msgstr "" " %*s Рядок\n" #. TRANS: the debugstr| prefix makes the string unique. -#: src/readelf.c:10456 +#: src/readelf.c:10455 msgctxt "debugstr" msgid "Offset" msgstr "" -#: src/readelf.c:10466 +#: src/readelf.c:10465 #, c-format msgid " *** error, missing string terminator\n" msgstr " *** помилка, пропущено роздільник рядків\n" -#: src/readelf.c:10495 +#: src/readelf.c:10494 #, c-format msgid "cannot get .debug_str_offsets section data: %s" msgstr "не вдалося отримати дані розділу .debug_str_offsets: %s" -#: src/readelf.c:10594 +#: src/readelf.c:10593 #, c-format msgid " Length: %8\n" msgstr " Довжина: %8\n" -#: src/readelf.c:10596 +#: src/readelf.c:10595 #, c-format msgid " Offset size: %8\n" msgstr " Розмір зсуву: %8\n" -#: src/readelf.c:10610 +#: src/readelf.c:10609 #, c-format msgid " DWARF version: %8\n" msgstr " версія DWARF: %8\n" -#: src/readelf.c:10619 +#: src/readelf.c:10618 #, c-format msgid " Padding: %8\n" msgstr " Заповнення: %8\n" -#: src/readelf.c:10673 +#: src/readelf.c:10672 #, c-format msgid "" "\n" @@ -6136,7 +6138,7 @@ msgstr "" "\n" "Розділ таблиці пошуку вікон виклику [%2zu] '.eh_frame_hdr':\n" -#: src/readelf.c:10775 +#: src/readelf.c:10774 #, c-format msgid "" "\n" @@ -6145,22 +6147,22 @@ msgstr "" "\n" "Розділ таблиці обробки виключень [%2zu] '.gcc_except_table':\n" -#: src/readelf.c:10798 +#: src/readelf.c:10797 #, c-format msgid " LPStart encoding: %#x " msgstr " Кодування LPStart: %#x " -#: src/readelf.c:10810 +#: src/readelf.c:10809 #, c-format msgid " TType encoding: %#x " msgstr " Кодування TType: %#x " -#: src/readelf.c:10825 +#: src/readelf.c:10824 #, c-format msgid " Call site encoding: %#x " msgstr " Кодування місця виклику:%#x " -#: src/readelf.c:10838 +#: src/readelf.c:10837 msgid "" "\n" " Call site table:" @@ -6168,7 +6170,7 @@ msgstr "" "\n" " Таблиця місця виклику:" -#: src/readelf.c:10852 +#: src/readelf.c:10851 #, c-format msgid "" " [%4u] Call site start: %#\n" @@ -6181,12 +6183,12 @@ msgstr "" " Місце застосування: %#\n" " Дія: %u\n" -#: src/readelf.c:10925 +#: src/readelf.c:10924 #, c-format msgid "invalid TType encoding" msgstr "некоректне кодування TType" -#: src/readelf.c:10952 +#: src/readelf.c:10951 #, c-format msgid "" "\n" @@ -6195,37 +6197,37 @@ msgstr "" "\n" "Розділ GDB [%2zu] «%s» за зміщенням %# містить % байтів:\n" -#: src/readelf.c:10981 +#: src/readelf.c:10980 #, c-format msgid " Version: %\n" msgstr " Версія: %\n" -#: src/readelf.c:10999 +#: src/readelf.c:10998 #, c-format msgid " CU offset: %#\n" msgstr " зміщення CU: %#\n" -#: src/readelf.c:11006 +#: src/readelf.c:11005 #, c-format msgid " TU offset: %#\n" msgstr " зміщення TU: %#\n" -#: src/readelf.c:11013 +#: src/readelf.c:11012 #, c-format msgid " address offset: %#\n" msgstr " зміщення адреси: %#\n" -#: src/readelf.c:11020 +#: src/readelf.c:11019 #, c-format msgid " symbol offset: %#\n" msgstr " зміщення символу: %#\n" -#: src/readelf.c:11027 +#: src/readelf.c:11026 #, c-format msgid " constant offset: %#\n" msgstr " стале зміщення: %#\n" -#: src/readelf.c:11041 +#: src/readelf.c:11040 #, c-format msgid "" "\n" @@ -6234,7 +6236,7 @@ msgstr "" "\n" " Список CU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11066 +#: src/readelf.c:11065 #, c-format msgid "" "\n" @@ -6243,7 +6245,7 @@ msgstr "" "\n" " Список TU зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11095 +#: src/readelf.c:11094 #, c-format msgid "" "\n" @@ -6252,7 +6254,7 @@ msgstr "" "\n" " Список адрес зі зміщенням %# містить %zu записів:\n" -#: src/readelf.c:11127 +#: src/readelf.c:11126 #, c-format msgid "" "\n" @@ -6261,18 +6263,18 @@ msgstr "" "\n" " Таблиця символів за зміщенням %# містить %zu позицій:\n" -#: src/readelf.c:11265 +#: src/readelf.c:11264 #, c-format msgid "cannot get debug context descriptor: %s" msgstr "не вдалося отримати дескриптор контексту зневаджування: %s" -#: src/readelf.c:11633 src/readelf.c:12260 src/readelf.c:12371 -#: src/readelf.c:12429 +#: src/readelf.c:11630 src/readelf.c:12257 src/readelf.c:12367 +#: src/readelf.c:12424 #, c-format msgid "cannot convert core note data: %s" msgstr "не вдалося перетворити дані запису ядра: %s" -#: src/readelf.c:11996 +#: src/readelf.c:11994 #, c-format msgid "" "\n" @@ -6281,21 +6283,21 @@ msgstr "" "\n" "%*s... <повторюється %u разів> ..." -#: src/readelf.c:12508 +#: src/readelf.c:12503 msgid " Owner Data size Type\n" msgstr " Власник Розм. даних Тип\n" -#: src/readelf.c:12536 +#: src/readelf.c:12531 #, c-format msgid " %-13.*s %9 %s\n" msgstr " %-13.*s %9 %s\n" -#: src/readelf.c:12588 +#: src/readelf.c:12583 #, c-format msgid "cannot get content of note: %s" msgstr "не вдалося отримати вміст нотатки: %s" -#: src/readelf.c:12622 +#: src/readelf.c:12616 #, c-format msgid "" "\n" @@ -6305,7 +6307,7 @@ msgstr "" "Розділ записів (note) [%2zu] «%s» з % байтів за зміщенням " "%#0:\n" -#: src/readelf.c:12645 +#: src/readelf.c:12639 #, c-format msgid "" "\n" @@ -6314,7 +6316,7 @@ msgstr "" "\n" "Сегмент записів з % байтів за зміщенням %#0:\n" -#: src/readelf.c:12692 +#: src/readelf.c:12686 #, c-format msgid "" "\n" @@ -6323,12 +6325,12 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься даних для створення дампу.\n" -#: src/readelf.c:12719 src/readelf.c:12770 +#: src/readelf.c:12713 src/readelf.c:12764 #, c-format msgid "cannot get data for section [%zu] '%s': %s" msgstr "не вдалося отримати дані для розділу [%zu] «%s»: %s" -#: src/readelf.c:12724 +#: src/readelf.c:12718 #, c-format msgid "" "\n" @@ -6337,7 +6339,7 @@ msgstr "" "\n" "Шіст. дамп розділу [%zu] «%s», % байтів за зміщенням %#0:\n" -#: src/readelf.c:12729 +#: src/readelf.c:12723 #, c-format msgid "" "\n" @@ -6348,7 +6350,7 @@ msgstr "" "Шіст. дамп розділу [%zu] «%s», % байтів (%zd нестиснено) за " "зміщенням %#0:\n" -#: src/readelf.c:12743 +#: src/readelf.c:12737 #, c-format msgid "" "\n" @@ -6357,7 +6359,7 @@ msgstr "" "\n" "У розділі [%zu] «%s» не міститься рядків для створення дампу.\n" -#: src/readelf.c:12775 +#: src/readelf.c:12769 #, c-format msgid "" "\n" @@ -6366,7 +6368,7 @@ msgstr "" "\n" "Розділ рядків [%zu] «%s» містить % байтів за зміщенням %#0:\n" -#: src/readelf.c:12780 +#: src/readelf.c:12774 #, c-format msgid "" "\n" @@ -6377,7 +6379,7 @@ msgstr "" "Рядок розділу [%zu] «%s» містить % байти (%zd нестиснено) на " "зміщенні %#0:\n" -#: src/readelf.c:12829 +#: src/readelf.c:12822 #, c-format msgid "" "\n" @@ -6386,7 +6388,7 @@ msgstr "" "\n" "розділу [%lu] не існує" -#: src/readelf.c:12859 +#: src/readelf.c:12852 #, c-format msgid "" "\n" @@ -6395,12 +6397,12 @@ msgstr "" "\n" "розділу «%s» не існує" -#: src/readelf.c:12916 +#: src/readelf.c:12907 #, c-format msgid "cannot get symbol index of archive '%s': %s" msgstr "не вдалося отримати покажчик символів архіву «%s»: %s" -#: src/readelf.c:12919 +#: src/readelf.c:12910 #, c-format msgid "" "\n" @@ -6409,7 +6411,7 @@ msgstr "" "\n" "У архіві «%s» немає покажчика символів\n" -#: src/readelf.c:12923 +#: src/readelf.c:12914 #, c-format msgid "" "\n" @@ -6418,12 +6420,12 @@ msgstr "" "\n" "Покажчик архіву «%s» містить %zu записів:\n" -#: src/readelf.c:12941 +#: src/readelf.c:12932 #, c-format msgid "cannot extract member at offset %zu in '%s': %s" msgstr "не вдалося видобути елемент за зміщенням %zu у «%s»: %s" -#: src/readelf.c:12946 +#: src/readelf.c:12937 #, c-format msgid "Archive member '%s' contains:\n" msgstr "Елемент архіву «%s» містить:\n" @@ -6520,39 +6522,38 @@ msgctxt "bsd" msgid "filename" msgstr "" -#: src/size.c:418 src/size.c:560 +#: src/size.c:417 src/size.c:558 #, c-format msgid " (ex %s)" msgstr " (прикл. %s)" -#: src/size.c:420 +#: src/size.c:419 #, fuzzy #| msgid "invalid section" msgctxt "sysv" msgid "section" msgstr "некоректний розділ" -#: src/size.c:421 +#: src/size.c:420 msgctxt "sysv" msgid "size" msgstr "" -#: src/size.c:422 +#: src/size.c:421 msgctxt "sysv" msgid "addr" msgstr "" -#: src/size.c:451 src/size.c:454 src/size.c:457 +#: src/size.c:450 src/size.c:453 src/size.c:456 msgctxt "sysv" msgid "Total" msgstr "" -#: src/size.c:482 -#, c-format +#: src/size.c:480 msgid "cannot get section header" msgstr "не вдалося отримати заголовок розділу" -#: src/size.c:585 +#: src/size.c:583 msgid "(TOTALS)\n" msgstr "(ЗАГАЛОМ)\n" @@ -6735,27 +6736,23 @@ msgstr "Вивести рядки файлів з символів, придат msgid "invalid value '%s' for %s parameter" msgstr "некоректне значення «%s» параметра %s" -#: src/strings.c:302 -#, c-format +#: src/strings.c:301 msgid "invalid minimum length of matched string size" msgstr "некоректна мінімальна довжина розмірності рядка для порівняння" -#: src/strings.c:585 -#, c-format +#: src/strings.c:584 msgid "lseek failed" msgstr "помилка lseek" -#: src/strings.c:602 src/strings.c:666 -#, c-format +#: src/strings.c:601 src/strings.c:665 msgid "re-mmap failed" msgstr "помилка повторного використання mmap" -#: src/strings.c:639 -#, c-format +#: src/strings.c:638 msgid "mprotect failed" msgstr "помилка mprotect" -#: src/strings.c:728 +#: src/strings.c:727 #, c-format msgid "Skipping section %zd '%s' data outside file" msgstr "Пропускаємо дані %zd «%s» поза файлом" @@ -6832,13 +6829,11 @@ msgstr "" msgid "Discard symbols from object files." msgstr "Відкинути символи з об’єктних файлів" -#: src/strip.c:247 -#, c-format +#: src/strip.c:246 msgid "--reloc-debug-sections used without -f" msgstr "--reloc-debug-sections використано без -f" -#: src/strip.c:253 -#, c-format +#: src/strip.c:252 msgid "" "--reloc-debug-sections-only incompatible with -f, -g, --remove-comment and --" "remove-section" @@ -6846,43 +6841,41 @@ msgstr "" "--reloc-debug-sections-only є несумісним із -f, -g, --remove-comment та --" "remove-section" -#: src/strip.c:267 -#, c-format +#: src/strip.c:266 msgid "Only one input file allowed together with '-o' and '-f'" msgstr "" "Разом з «-o» або «-f» можна використовувати лише один файл вхідних даних" -#: src/strip.c:290 +#: src/strip.c:288 #, c-format msgid "-f option specified twice" msgstr "параметр -f вказано двічі" -#: src/strip.c:299 +#: src/strip.c:297 #, c-format msgid "-F option specified twice" msgstr "параметр -F вказано двічі" -#: src/strip.c:362 +#: src/strip.c:360 #, c-format msgid "cannot both keep and remove .comment section" msgstr "неможливо одночасно зберегти і вилучити розділ .comment" -#: src/strip.c:481 -#, c-format +#: src/strip.c:479 msgid "bad relocation" msgstr "помилкове пересування" -#: src/strip.c:751 src/strip.c:775 +#: src/strip.c:749 src/strip.c:773 #, c-format msgid "cannot stat input file '%s'" msgstr "не вдалося отримати дані з вхідного файла «%s» за допомогою stat" -#: src/strip.c:765 +#: src/strip.c:763 #, c-format msgid "while opening '%s'" msgstr "під час спроби відкриття «%s»" -#: src/strip.c:803 +#: src/strip.c:801 #, c-format msgid "%s: cannot use -o or -f when stripping archive" msgstr "" @@ -6895,133 +6888,131 @@ msgstr "" #. result = handle_ar (fd, elf, NULL, fname, #. preserve_dates ? tv : NULL); #. -#: src/strip.c:815 +#: src/strip.c:813 #, c-format msgid "%s: no support for stripping archive" msgstr "%s: підтримки вилучення додаткового вмісту з архіву не передбачено" -#: src/strip.c:1052 +#: src/strip.c:1050 #, c-format msgid "cannot open EBL backend" msgstr "не вдалося відкрити канал сервера EBL" -#: src/strip.c:1097 -#, c-format +#: src/strip.c:1094 msgid "cannot get number of phdrs" msgstr "не вдалося отримати кількість phdr" -#: src/strip.c:1111 src/strip.c:1154 +#: src/strip.c:1108 src/strip.c:1151 #, c-format msgid "cannot create new ehdr for file '%s': %s" msgstr "не вдалося створити ehdr для файла «%s»: %s" -#: src/strip.c:1121 src/strip.c:1164 +#: src/strip.c:1118 src/strip.c:1161 #, c-format msgid "cannot create new phdr for file '%s': %s" msgstr "не вдалося створити phdr для файла «%s»: %s" -#: src/strip.c:1244 +#: src/strip.c:1241 #, c-format msgid "illformed file '%s'" msgstr "помилкове форматування файла «%s»" -#: src/strip.c:1254 +#: src/strip.c:1251 #, c-format msgid "Cannot remove allocated section '%s'" msgstr "Неможливо вилучити розміщений у пам'яті розділ «%s»" -#: src/strip.c:1263 +#: src/strip.c:1260 #, c-format msgid "Cannot both keep and remove section '%s'" msgstr "Неможливо одночасно зберегти та вилучити розділ «%s»" -#: src/strip.c:1628 src/strip.c:1743 +#: src/strip.c:1624 src/strip.c:1739 #, c-format msgid "while generating output file: %s" msgstr "під час спроби створення файла з виведеними даними: %s" -#: src/strip.c:1692 +#: src/strip.c:1688 #, c-format msgid "%s: error while updating ELF header: %s" msgstr "%s: помилка під час оновлення заголовка ELF: %s" -#: src/strip.c:1701 +#: src/strip.c:1697 #, c-format msgid "%s: error while getting shdrstrndx: %s" msgstr "%s: помилка під час отримання shdrstrndx: %s" -#: src/strip.c:1709 src/strip.c:2554 +#: src/strip.c:1705 src/strip.c:2546 #, c-format msgid "%s: error updating shdrstrndx: %s" msgstr "%s: помилка під час оновлення shdrstrndx: %s" -#: src/strip.c:1726 +#: src/strip.c:1722 #, c-format msgid "while preparing output for '%s'" msgstr "під час приготування виведених даних для «%s»" -#: src/strip.c:1788 src/strip.c:1851 +#: src/strip.c:1783 src/strip.c:1845 #, c-format msgid "while create section header section: %s" msgstr "під час створення розділу заголовка розділу: %s" -#: src/strip.c:1797 +#: src/strip.c:1792 #, c-format msgid "cannot allocate section data: %s" msgstr "не вдалося розмістити дані розділу: %s" -#: src/strip.c:1863 +#: src/strip.c:1856 #, c-format msgid "while create section header string table: %s" msgstr "під час створення таблиці рядків заголовка розділу: %s" -#: src/strip.c:1870 -#, c-format +#: src/strip.c:1862 msgid "no memory to create section header string table" msgstr "недостатньо пам'яті для створення таблиці рядків заголовка розділу" -#: src/strip.c:2083 +#: src/strip.c:2075 #, c-format msgid "Cannot remove symbol [%zd] from allocated symbol table [%zd]" msgstr "" "Неможливо вилучити символ [%zd] з розміщеної у пам'яті таблиці символів [%zd]" -#: src/strip.c:2470 src/strip.c:2578 +#: src/strip.c:2462 src/strip.c:2570 #, c-format msgid "while writing '%s': %s" msgstr "під час запису «%s»: %s" -#: src/strip.c:2481 +#: src/strip.c:2473 #, c-format msgid "while creating '%s'" msgstr "під час спроби створення «%s»" -#: src/strip.c:2504 +#: src/strip.c:2496 #, c-format msgid "while computing checksum for debug information" msgstr "під час обчислення контрольної суми для діагностичних даних" -#: src/strip.c:2545 +#: src/strip.c:2537 #, c-format msgid "%s: error while creating ELF header: %s" msgstr "%s: помилка під час створення заголовка ELF: %s" -#: src/strip.c:2563 +#: src/strip.c:2555 #, c-format msgid "%s: error while reading the file: %s" msgstr "%s: помилка під час читання файла: %s" -#: src/strip.c:2603 src/strip.c:2623 +#: src/strip.c:2595 src/strip.c:2615 #, c-format msgid "while writing '%s'" msgstr "під час спроби запису «%s»" -#: src/strip.c:2660 src/strip.c:2667 +#: src/strip.c:2652 src/strip.c:2659 #, c-format msgid "error while finishing '%s': %s" msgstr "помилка під час завершення «%s»: %s" -#: src/strip.c:2684 src/strip.c:2760 +#: src/strip.c:2676 src/strip.c:2752 #, c-format msgid "cannot set access and modification date of '%s'" msgstr "не вдалося встановити права доступу та дату зміни «%s»" @@ -7114,7 +7105,7 @@ msgstr "не вдалося створити заголовок ELF: %s" msgid "cannot get shdrstrndx:%s" msgstr "не вдалося отримати shdrstrndx:%s" -#: src/unstrip.c:244 src/unstrip.c:2088 +#: src/unstrip.c:244 src/unstrip.c:2086 #, c-format msgid "cannot get ELF header: %s" msgstr "не вдалося отримати заголовок ELF: %s" @@ -7134,12 +7125,12 @@ msgstr "неможливо оновити новий нульовий розді msgid "cannot copy ELF header: %s" msgstr "не вдалося скопіювати заголовок ELF: %s" -#: src/unstrip.c:265 src/unstrip.c:2106 src/unstrip.c:2149 +#: src/unstrip.c:265 src/unstrip.c:2104 src/unstrip.c:2147 #, c-format msgid "cannot get number of program headers: %s" msgstr "не вдалося отримати кількість заголовків програми: %s" -#: src/unstrip.c:270 src/unstrip.c:2110 +#: src/unstrip.c:270 src/unstrip.c:2108 #, c-format msgid "cannot create program headers: %s" msgstr "не вдалося створити заголовки програми: %s" @@ -7154,12 +7145,12 @@ msgstr "не вдалося скопіювати заголовок програ msgid "cannot copy section header: %s" msgstr "не вдалося скопіювати заголовок розділу: %s" -#: src/unstrip.c:289 src/unstrip.c:1710 +#: src/unstrip.c:289 src/unstrip.c:1708 #, c-format msgid "cannot get section data: %s" msgstr "не вдалося отримати дані розділу: %s" -#: src/unstrip.c:291 src/unstrip.c:1712 +#: src/unstrip.c:291 src/unstrip.c:1710 #, c-format msgid "cannot copy section data: %s" msgstr "не вдалося скопіювати дані розділу: %s" @@ -7169,14 +7160,14 @@ msgstr "не вдалося скопіювати дані розділу: %s" msgid "cannot create directory '%s'" msgstr "не вдалося створити каталог «%s»" -#: src/unstrip.c:393 src/unstrip.c:659 src/unstrip.c:693 src/unstrip.c:861 -#: src/unstrip.c:1752 +#: src/unstrip.c:393 src/unstrip.c:658 src/unstrip.c:692 src/unstrip.c:860 +#: src/unstrip.c:1750 #, c-format msgid "cannot get symbol table entry: %s" msgstr "не вдалося отримати запис таблиці символів: %s" -#: src/unstrip.c:409 src/unstrip.c:662 src/unstrip.c:683 src/unstrip.c:696 -#: src/unstrip.c:1773 src/unstrip.c:1968 src/unstrip.c:1992 +#: src/unstrip.c:409 src/unstrip.c:661 src/unstrip.c:682 src/unstrip.c:695 +#: src/unstrip.c:1771 src/unstrip.c:1966 src/unstrip.c:1990 #, c-format msgid "cannot update symbol table: %s" msgstr "не вдалося оновити таблицю символів: %s" @@ -7201,162 +7192,160 @@ msgstr "не вдалося оновити пересування: %s" msgid "gelf_getrela failed: %s" msgstr "" -#: src/unstrip.c:582 +#: src/unstrip.c:581 #, c-format msgid "cannot get symbol version: %s" msgstr "не вдалося отримати версію символу: %s" -#: src/unstrip.c:595 +#: src/unstrip.c:594 #, c-format msgid "unexpected section type in [%zu] with sh_link to symtab" msgstr "неочікуваний тип розділу у [%zu] з посиланням sh_link на symtab" -#: src/unstrip.c:850 +#: src/unstrip.c:849 #, c-format msgid "cannot get symbol section data: %s" msgstr "не вдалося отримати дані розділу символів: %s" -#: src/unstrip.c:852 +#: src/unstrip.c:851 #, c-format msgid "cannot get string section data: %s" msgstr "не вдалося отримати дані розділу рядків: %s" -#: src/unstrip.c:869 +#: src/unstrip.c:868 #, c-format msgid "invalid string offset in symbol [%zu]" msgstr "некоректне зміщення рядка у символі [%zu]" -#: src/unstrip.c:1027 src/unstrip.c:1435 +#: src/unstrip.c:1026 src/unstrip.c:1434 #, c-format msgid "cannot read section [%zu] name: %s" msgstr "не вдалося прочитати назву розділу [%zu]: %s" -#: src/unstrip.c:1042 +#: src/unstrip.c:1041 #, c-format msgid "bad sh_link for group section: %s" msgstr "помилкове значення sh_link для розділу груп: %s" -#: src/unstrip.c:1048 +#: src/unstrip.c:1047 #, c-format msgid "couldn't get shdr for group section: %s" msgstr "не вдалося отримати shdr для розділу груп: %s" -#: src/unstrip.c:1053 +#: src/unstrip.c:1052 #, c-format msgid "bad data for group symbol section: %s" msgstr "помилкові дані для розділу символів груп: %s" -#: src/unstrip.c:1059 +#: src/unstrip.c:1058 #, c-format msgid "couldn't get symbol for group section: %s" msgstr "не вдалося отримати символ для розділу груп: %s" -#: src/unstrip.c:1064 +#: src/unstrip.c:1063 #, c-format msgid "bad symbol name for group section: %s" msgstr "помилкова назва символу для розділу груп: %s" -#: src/unstrip.c:1075 src/unstrip.c:1556 +#: src/unstrip.c:1074 src/unstrip.c:1554 #, c-format msgid "cannot find matching section for [%zu] '%s'" msgstr "не вдалося знайти відповідний розділ для [%zu] «%s»" -#: src/unstrip.c:1120 src/unstrip.c:1139 src/unstrip.c:1177 +#: src/unstrip.c:1119 src/unstrip.c:1138 src/unstrip.c:1176 #, c-format msgid "cannot read '.gnu.prelink_undo' section: %s" msgstr "не вдалося прочитати розділ «.gnu.prelink_undo»: %s" -#: src/unstrip.c:1157 +#: src/unstrip.c:1156 #, c-format msgid "overflow with shnum = %zu in '%s' section" msgstr "переповнення з shnum = %zu у розділі «%s»" -#: src/unstrip.c:1168 +#: src/unstrip.c:1167 #, c-format msgid "invalid contents in '%s' section" msgstr "некоректний вміст розділу «%s»" -#: src/unstrip.c:1339 src/unstrip.c:1355 src/unstrip.c:1636 src/unstrip.c:1927 +#: src/unstrip.c:1338 src/unstrip.c:1354 src/unstrip.c:1634 src/unstrip.c:1925 #, c-format msgid "cannot add section name to string table: %s" msgstr "не вдалося додати назву розділу до таблиці рядків: %s" -#: src/unstrip.c:1364 +#: src/unstrip.c:1363 #, c-format msgid "cannot update section header string table data: %s" msgstr "не вдалося оновити дані заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1393 src/unstrip.c:1397 +#: src/unstrip.c:1392 src/unstrip.c:1396 #, c-format msgid "cannot get section header string table section index: %s" msgstr "" "не вдалося визначити індекс розділу заголовка розділу у таблиці рядків: %s" -#: src/unstrip.c:1401 src/unstrip.c:1405 src/unstrip.c:1651 +#: src/unstrip.c:1400 src/unstrip.c:1404 src/unstrip.c:1649 #, c-format msgid "cannot get section count: %s" msgstr "не вдалося отримати кількість розділів: %s" -#: src/unstrip.c:1408 -#, c-format +#: src/unstrip.c:1407 msgid "more sections in stripped file than debug file -- arguments reversed?" msgstr "" "у очищеному файлі більше розділів ніж у файлі з даними для зневаджування — " "помилковий порядок параметрів?" -#: src/unstrip.c:1412 -#, c-format +#: src/unstrip.c:1411 msgid "no sections in stripped file" msgstr "у очищеному файлі немає розділів" -#: src/unstrip.c:1460 src/unstrip.c:1571 +#: src/unstrip.c:1459 src/unstrip.c:1569 #, c-format msgid "cannot read section header string table: %s" msgstr "не вдалося прочитати таблицю рядків заголовка розділу: %s" -#: src/unstrip.c:1630 +#: src/unstrip.c:1628 #, c-format msgid "cannot add new section: %s" msgstr "не вдалося додати новий розділ: %s" -#: src/unstrip.c:1760 +#: src/unstrip.c:1758 #, c-format msgid "symbol [%zu] has invalid section index" msgstr "символ [%zu] має некоректний індекс розділу" -#: src/unstrip.c:1792 +#: src/unstrip.c:1790 #, c-format msgid "group has invalid section index [%zd]" msgstr "група містить некоректний індекс розділу [%zd]" -#: src/unstrip.c:2067 +#: src/unstrip.c:2065 #, c-format msgid "cannot read section data: %s" msgstr "не вдалося прочитати дані розділу: %s" -#: src/unstrip.c:2096 +#: src/unstrip.c:2094 #, c-format msgid "cannot update ELF header: %s" msgstr "не вдалося оновити заголовок ELF: %s" -#: src/unstrip.c:2120 +#: src/unstrip.c:2118 #, c-format msgid "cannot update program header: %s" msgstr "не вдалося оновити заголовок програми: %s" -#: src/unstrip.c:2125 src/unstrip.c:2208 +#: src/unstrip.c:2123 src/unstrip.c:2206 #, c-format msgid "cannot write output file: %s" msgstr "не вдалося записати файл виведених даних: %s" -#: src/unstrip.c:2176 +#: src/unstrip.c:2174 #, c-format msgid "DWARF data not adjusted for prelinking bias; consider prelink -u" msgstr "" "Дані DWARF не скориговано відповідно до відхилення перед компонуванням; " "спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2179 +#: src/unstrip.c:2177 #, c-format msgid "" "DWARF data in '%s' not adjusted for prelinking bias; consider prelink -u" @@ -7364,76 +7353,74 @@ msgstr "" "Дані DWARF у «%s» не скориговано відповідно до відхилення перед " "компонуванням; спробуйте виправити це командою prelink -u" -#: src/unstrip.c:2199 src/unstrip.c:2251 src/unstrip.c:2263 src/unstrip.c:2353 +#: src/unstrip.c:2197 src/unstrip.c:2249 src/unstrip.c:2261 src/unstrip.c:2351 #, c-format msgid "cannot create ELF descriptor: %s" msgstr "не вдалося створити дескриптор ELF: %s" -#: src/unstrip.c:2237 +#: src/unstrip.c:2235 msgid "WARNING: " msgstr "УВАГА: " -#: src/unstrip.c:2239 +#: src/unstrip.c:2237 msgid ", use --force" msgstr ", скористайтеся --force" -#: src/unstrip.c:2267 +#: src/unstrip.c:2265 msgid "ELF header identification (e_ident) different" msgstr "Різні ідентифікатори заголовків ELF (e_ident)" -#: src/unstrip.c:2271 +#: src/unstrip.c:2269 msgid "ELF header type (e_type) different" msgstr "Різні типи заголовків ELF (e_type)" -#: src/unstrip.c:2275 +#: src/unstrip.c:2273 msgid "ELF header machine type (e_machine) different" msgstr "Різні типи архітектур заголовків ELF (e_machine)" -#: src/unstrip.c:2279 +#: src/unstrip.c:2277 msgid "stripped program header (e_phnum) smaller than unstripped" msgstr "очищений заголовок програми (e_phnum) є меншим за неочищений" -#: src/unstrip.c:2310 +#: src/unstrip.c:2308 #, c-format msgid "cannot find stripped file for module '%s': %s" msgstr "не вдалося знайти очищений файл для модуля «%s»: %s" -#: src/unstrip.c:2314 +#: src/unstrip.c:2312 #, c-format msgid "cannot open stripped file '%s' for module '%s': %s" msgstr "не вдалося відкрити очищений файл «%s» для модуля «%s»: %s" -#: src/unstrip.c:2329 +#: src/unstrip.c:2327 #, c-format msgid "cannot find debug file for module '%s': %s" msgstr "не вдалося знайти файл діагностичних даних для модуля «%s»: %s" -#: src/unstrip.c:2333 +#: src/unstrip.c:2331 #, c-format msgid "cannot open debug file '%s' for module '%s': %s" msgstr "не вдалося відкрити файл діагностичних даних «%s» для модуля «%s»: %s" -#: src/unstrip.c:2346 +#: src/unstrip.c:2344 #, c-format msgid "module '%s' file '%s' is not stripped" msgstr "у модулі «%s» файл «%s» не очищено strip" -#: src/unstrip.c:2377 +#: src/unstrip.c:2375 #, c-format msgid "cannot cache section addresses for module '%s': %s" msgstr "не вдалося кешувати адреси розділів для модуля «%s»: %s" -#: src/unstrip.c:2505 -#, c-format +#: src/unstrip.c:2503 msgid "no matching modules found" msgstr "відповідних модулів не виявлено" -#: src/unstrip.c:2515 -#, c-format +#: src/unstrip.c:2513 msgid "matched more than one module" msgstr "встановлено відповідність декількох модулів" -#: src/unstrip.c:2560 +#: src/unstrip.c:2558 msgid "" "STRIPPED-FILE DEBUG-FILE\n" "[MODULE...]" @@ -7441,7 +7428,7 @@ msgstr "" "ОЧИЩЕНИЙ-ФАЙЛ ФАЙЛ-DEBUG\n" "[МОДУЛЬ...]" -#: src/unstrip.c:2561 +#: src/unstrip.c:2559 msgid "" "Combine stripped files with separate symbols and debug information.\n" "\n" -- cgit v1.2.1