[<prev] [next>] [day] [month] [year] [list]
Message-ID: <176060840170.709179.14105443112485527789.tip-bot2@tip-bot2>
Date: Thu, 16 Oct 2025 09:53:21 -0000
From: "tip-bot2 for Pankaj Raghav" <tip-bot2@...utronix.de>
To: linux-tip-commits@...r.kernel.org
Cc: Pankaj Raghav <p.raghav@...sung.com>, Josh Poimboeuf <jpoimboe@...nel.org>,
x86@...nel.org, linux-kernel@...r.kernel.org
Subject:
[tip: objtool/core] scripts/faddr2line: Fix "Argument list too long" error
The following commit has been merged into the objtool/core branch of tip:
Commit-ID: ff5c0466486ba8d07ab2700380e8fd6d5344b4e9
Gitweb: https://git.kernel.org/tip/ff5c0466486ba8d07ab2700380e8fd6d5344b4e9
Author: Pankaj Raghav <p.raghav@...sung.com>
AuthorDate: Sun, 21 Sep 2025 12:03:58 +02:00
Committer: Josh Poimboeuf <jpoimboe@...nel.org>
CommitterDate: Tue, 14 Oct 2025 14:45:20 -07:00
scripts/faddr2line: Fix "Argument list too long" error
The run_readelf() function reads the entire output of readelf into a
single shell variable. For large object files with extensive debug
information, the size of this variable can exceed the system's
command-line argument length limit.
When this variable is subsequently passed to sed via `echo "${out}"`, it
triggers an "Argument list too long" error, causing the script to fail.
Fix this by redirecting the output of readelf to a temporary file
instead of a variable. The sed commands are then modified to read from
this file, avoiding the argument length limitation entirely.
Signed-off-by: Pankaj Raghav <p.raghav@...sung.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@...nel.org>
---
scripts/faddr2line | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 7746d4a..6228753 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -111,14 +111,19 @@ find_dir_prefix() {
run_readelf() {
local objfile=$1
- local out=$(${READELF} --file-header --section-headers --symbols --wide $objfile)
+ local tmpfile
+ tmpfile=$(mktemp)
+
+ ${READELF} --file-header --section-headers --symbols --wide "$objfile" > "$tmpfile"
# This assumes that readelf first prints the file header, then the section headers, then the symbols.
# Note: It seems that GNU readelf does not prefix section headers with the "There are X section headers"
# line when multiple options are given, so let's also match with the "Section Headers:" line.
- ELF_FILEHEADER=$(echo "${out}" | sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/q;p')
- ELF_SECHEADERS=$(echo "${out}" | sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/,$p' | sed -n '/Symbol table .* contains [0-9]* entries:/q;p')
- ELF_SYMS=$(echo "${out}" | sed -n '/Symbol table .* contains [0-9]* entries:/,$p')
+ ELF_FILEHEADER=$(sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/q;p' "$tmpfile")
+ ELF_SECHEADERS=$(sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/,$p' "$tmpfile" | sed -n '/Symbol table .* contains [0-9]* entries:/q;p')
+ ELF_SYMS=$(sed -n '/Symbol table .* contains [0-9]* entries:/,$p' "$tmpfile")
+
+ rm -f -- "$tmpfile"
}
check_vmlinux() {
Powered by blists - more mailing lists