* [PATCH] Revert "scripts/faddr2line: Combine three readelf calls into one"
@ 2026-09-05 1:24 Srikar Dronamraju
2026-09-14 19:00 ` Josh Poimboeuf
0 siblings, 1 reply; 3+ messages in thread
From: Srikar Dronamraju @ 2026-09-05 1:24 UTC (permalink / raw)
To: Josh Poimboeuf, Brian Johannesmeyer
Cc: Madhavan Srinivasan, linuxppc-dev, Srikar Dronamraju, linux-kernel
This reverts commit b8d9d9496c1e ("scripts/faddr2line: Combine three
readelf calls into one")
scripts/faddr2line stopped working on PowerPc systems with this commit.
Output of scripts/faddr2line on latest kernel sources
$ scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
$
Output of scripts/faddr2line with revert
$ scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
need_active_balance+0x1d4/0x21c:
imbalanced_active_balance at kernel/sched/fair.c:12047
(inlined by) need_active_balance at kernel/sched/fair.c:12061
$
readelf on Powerpc when passed with --file-header --section-headers
--symbol --wide option doesnt show the line
"There are 62 section headers, starting at offset 0x16f1a850:"
Hence faddr2line parsing gets broken.
It could be a bug in Powerpc readelf that this line doesnt get printed.
However since its breaking with existing readelf, its better to be
reverted.
With the revert, we end up calling readelf three times but this should
still be fine since calling faddr2line is a debug tool.
Fixes: b8d9d9496c1e ("scripts/faddr2line: Combine three readelf calls into one")
Signed-off-by: Srikar Dronamraju <srikar@linux.ibm.com>
---
scripts/faddr2line | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 622875396bcf..bf2098beefbe 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -111,19 +111,10 @@ find_dir_prefix() {
run_readelf() {
local objfile=$1
- 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=$(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"
+ ELF_FILEHEADER=$(${READELF} --file-header $objfile)
+ ELF_SECHEADERS=$(${READELF} --section-headers --wide $objfile)
+ ELF_SYMS=$(${READELF} --symbols --wide $objfile)
}
check_vmlinux() {
--
2.52.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Revert "scripts/faddr2line: Combine three readelf calls into one"
2026-09-05 1:24 [PATCH] Revert "scripts/faddr2line: Combine three readelf calls into one" Srikar Dronamraju
@ 2026-09-14 19:00 ` Josh Poimboeuf
2026-09-15 2:15 ` Srikar Dronamraju
0 siblings, 1 reply; 3+ messages in thread
From: Josh Poimboeuf @ 2026-09-14 19:00 UTC (permalink / raw)
To: Srikar Dronamraju
Cc: Brian Johannesmeyer, Madhavan Srinivasan, linuxppc-dev, linux-kernel
On Sat, Sep 05, 2026 at 06:54:49AM +0530, Srikar Dronamraju wrote:
> This reverts commit b8d9d9496c1e ("scripts/faddr2line: Combine three
> readelf calls into one")
>
> scripts/faddr2line stopped working on PowerPc systems with this commit.
>
> Output of scripts/faddr2line on latest kernel sources
> $ scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
> $
> Output of scripts/faddr2line with revert
> $ scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
> need_active_balance+0x1d4/0x21c:
> imbalanced_active_balance at kernel/sched/fair.c:12047
> (inlined by) need_active_balance at kernel/sched/fair.c:12061
> $
>
> readelf on Powerpc when passed with --file-header --section-headers
> --symbol --wide option doesnt show the line
> "There are 62 section headers, starting at offset 0x16f1a850:"
>
> Hence faddr2line parsing gets broken.
>
> It could be a bug in Powerpc readelf that this line doesnt get printed.
> However since its breaking with existing readelf, its better to be
> reverted.
>
> With the revert, we end up calling readelf three times but this should
> still be fine since calling faddr2line is a debug tool.
>
> Fixes: b8d9d9496c1e ("scripts/faddr2line: Combine three readelf calls into one")
> Signed-off-by: Srikar Dronamraju <srikar@linux.ibm.com>
Can you run
bash -x scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
to see what line it's failing at?
Any chance the below fixes it?
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 622875396bcfc..550c0f9b9d473 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -78,7 +78,7 @@ GREP="grep"
# Enforce ASCII-only output from tools like readelf
# ensuring sed processes strings correctly.
-export LANG=C
+export LC_ALL=C
command -v ${AWK} >/dev/null 2>&1 || die "${AWK} isn't installed"
command -v ${READELF} >/dev/null 2>&1 || die "${READELF} isn't installed"
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Revert "scripts/faddr2line: Combine three readelf calls into one"
2026-09-14 19:00 ` Josh Poimboeuf
@ 2026-09-15 2:15 ` Srikar Dronamraju
0 siblings, 0 replies; 3+ messages in thread
From: Srikar Dronamraju @ 2026-09-15 2:15 UTC (permalink / raw)
To: Josh Poimboeuf
Cc: Brian Johannesmeyer, Madhavan Srinivasan, linuxppc-dev, linux-kernel
* Josh Poimboeuf <jpoimboe@kernel.org> [2026-09-14 12:00:26]:
> > It could be a bug in Powerpc readelf that this line doesnt get printed.
> > However since its breaking with existing readelf, its better to be
> > reverted.
> >
> > With the revert, we end up calling readelf three times but this should
> > still be fine since calling faddr2line is a debug tool.
> >
> > Fixes: b8d9d9496c1e ("scripts/faddr2line: Combine three readelf calls into one")
> > Signed-off-by: Srikar Dronamraju <srikar@linux.ibm.com>
>
> Can you run
>
> bash -x scripts/faddr2line ./vmlinux need_active_balance+0x1d4/0x21c
>
+ set -o errexit
+ set -o nounset
+ UTIL_SUFFIX=
+ [[ '' == '' ]]
+ UTIL_PREFIX=
+ READELF=readelf
+ ADDR2LINE=addr2line
+ AWK=awk
+ GREP=grep
+ export LC_ALL=C
+ LC_ALL=C
+ command -v awk
+ command -v readelf
+ command -v addr2line
+ [[ 2 -lt 2 ]]
+ objfile=./vmlinux
+ LIST=0
+ [[ ./vmlinux == \-\-\l\i\s\t ]]
+ [[ ! -f ./vmlinux ]]
+ shift
+ run_readelf ./vmlinux
+ local objfile=./vmlinux
+ local tmpfile
++ mktemp
+ tmpfile=/tmp/tmp.BGkKH2pxoy
+ readelf --file-header --section-headers --symbols --wide ./vmlinux
++ sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/q;p' /tmp/tmp.BGkKH2pxoy
+ ELF_FILEHEADER='ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2'\''s complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: PowerPC64
Version: 0x1
Entry point address: 0xc000000000000000
Start of program headers: 64 (bytes into file)
Start of section headers: 425572840 (bytes into file)
Flags: 0x2, abiv2
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 2
Size of section headers: 64 (bytes)
Number of section headers: 61
Section header string table index: 60'
++ sed -n '/Symbol table .* contains [0-9]* entries:/q;p'
++ sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/,$p' /tmp/tmp.BGkKH2pxoy
+ ELF_SECHEADERS='Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .head.text PROGBITS c000000000000000 010000 008000 00 AX 0 0 128
[ 2] .text PROGBITS c000000000008000 018000 1474ed4 00 AX 0 0 256
[ 3] .rodata PROGBITS c000000001480000 1490000 6217ce 00 WA 0 0 65536
[ 4] .pci_fixup PROGBITS c000000001aa17d0 1ab17d0 004590 00 WA 0 0 8
[ 5] .printk_index PROGBITS c000000001aa5d60 1ab5d60 00f770 00 WA 0 0 8
[ 6] __ksymtab PROGBITS c000000001ab54d0 1ac54d0 045120 00 A 0 0 8
[ 7] __kcrctab PROGBITS c000000001afa5f0 1b0a5f0 00b830 00 A 0 0 4
[ 8] __kflagstab PROGBITS c000000001b05e20 1b15e20 002e0c 00 A 0 0 1
[ 9] __ksymtab_strings PROGBITS c000000001b08c2c 1b18c2c 039a9c 01 AMS 0 0 1
[10] __param PROGBITS c000000001b426c8 1b526c8 002e18 00 WA 0 0 8
[11] __modver PROGBITS c000000001b454e0 1b554e0 0005a0 00 WA 0 0 8
[12] __ex_table PROGBITS c000000001b45a80 1b55a80 002ab8 00 A 0 0 4
[13] .notes NOTE c000000001b48538 1b58538 000088 00 A 0 0 4
[14] .BTF PROGBITS c000000001b50000 1b60000 4d833d 00 A 0 0 1
[15] .BTF_ids PROGBITS c000000002030000 2040000 00138c 00 A 0 0 1
[16] .branch_lt PROGBITS c000000002040000 2050000 003030 00 WA 0 0 8
[17] .got PROGBITS c000000002043100 2053100 000380 08 WA 0 0 256
[18] __soft_mask_table PROGBITS c000000002043480 2053480 000080 00 A 0 0 8
[19] __restart_table PROGBITS c000000002043500 2053500 0000c0 00 A 0 0 8
[20] __stf_entry_barrier_fixup PROGBITS c0000000020435c0 20535c0 0001e8 00 A 0 0 4
[21] __uaccess_flush_fixup PROGBITS c0000000020437a8 20537a8 000008 00 A 0 0 4
[22] __entry_flush_fixup PROGBITS c0000000020437b0 20537b0 0001d8 00 A 0 0 4
[23] __scv_entry_flush_fixup PROGBITS c000000002043988 2053988 000010 00 A 0 0 4
[24] __stf_exit_barrier_fixup PROGBITS c000000002043998 2053998 000060 00 A 0 0 4
[25] __rfi_flush_fixup PROGBITS c0000000020439f8 20539f8 000060 00 A 0 0 4
[26] __spec_barrier_fixup PROGBITS c000000002043a58 2053a58 000690 00 A 0 0 4
[27] .init.text PROGBITS c000000003000000 3010000 0b0000 00 WAX 0 0 32
[28] .exit.text PROGBITS c0000000030b0000 30c0000 004158 00 AX 0 0 32
[29] .init.data PROGBITS c0000000030c0000 30d0000 1c4580 00 WA 0 0 65536
[30] __ftr_fixup PROGBITS c000000003284580 3294580 00eaf0 00 A 0 0 8
[31] __mmu_ftr_fixup PROGBITS c000000003293070 32a3070 001830 00 A 0 0 8
[32] __lwsync_fixup PROGBITS c0000000032948a0 32a48a0 000dc8 00 A 0 0 4
[33] .data..percpu PROGBITS c0000000032a0000 32b0000 1e0e58 00 WA 0 0 4096
[34] .machine.desc PROGBITS c000000003480e58 3490e58 000410 00 WA 0 0 8
[35] .dynsym DYNSYM c000000003481268 3491268 000048 18 A 36 3 8
[36] .dynstr STRTAB c0000000034812b0 34912b0 000001 00 A 0 0 1
[37] .dynamic DYNAMIC c0000000034812b8 34912b8 000120 10 WA 36 0 8
[38] .gnu.hash GNU_HASH c0000000034813d8 34913d8 00001c 00 A 35 0 8
[39] .rela.dyn RELA c0000000034813f8 34913f8 519030 18 A 35 0 8
[40] .data PROGBITS c0000000039a0000 39b0000 610100 00 WA 0 0 128
[41] .data..init_task NOBITS c000000003fb4000 3fc0100 004000 00 WA 0 0 1
[42] .data..page_aligned PROGBITS c000000003fc0000 3fd0000 010000 00 WA 0 0 65536
[43] .data..cacheline_aligned PROGBITS c000000003fd0000 3fe0000 023500 00 WA 0 0 128
[44] .data..read_mostly PROGBITS c000000003ff3500 4003500 03cb80 00 WA 0 0 128
[45] .data_nosave PROGBITS c000000004040000 407bcec 000000 00 W 0 0 1
[46] __bug_table PROGBITS c000000004040000 4050000 02bcec 00 WA 0 0 1
[47] .bss NOBITS c000000004070000 407bcec 725338 00 WA 0 0 65536
[48] .debug_aranges PROGBITS 0000000000000000 407bcf0 0279d0 00 0 0 16
[49] .debug_info PROGBITS 0000000000000000 40a36c0 fa4d575 00 0 0 1
[50] .debug_abbrev PROGBITS 0000000000000000 13af0c35 673114 00 0 0 1
[51] .debug_line PROGBITS 0000000000000000 14163d49 211a8e7 00 0 0 1
[52] .debug_frame PROGBITS 0000000000000000 1627e630 3ba1f8 00 0 0 8
[53] .debug_str PROGBITS 0000000000000000 16638828 426e36 01 MS 0 0 1
[54] .debug_line_str PROGBITS 0000000000000000 16a5f65e 0004f5 01 MS 0 0 1
[55] .debug_loclists PROGBITS 0000000000000000 16a5fb53 1efdaf5 00 0 0 1
[56] .debug_rnglists PROGBITS 0000000000000000 1895d648 4d9186 00 0 0 1
[57] .comment PROGBITS 0000000000000000 18e367ce 00002e 01 MS 0 0 1
[58] .symtab SYMTAB 0000000000000000 18e36800 42b670 18 59 150524 8
[59] .strtab STRTAB 0000000000000000 19261e70 379870 00 0 0 1
[60] .shstrtab STRTAB 0000000000000000 195db6e0 000302 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
D (mbind), p (processor specific)'
> to see what line it's failing at?
>
As you can see, the last executed line line is
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')
which it self is called from run_readelf
since sed -o errexit is set in the script, sed returns an non-zero error
and that causes the script to exit if the line is not found.
The other options are
1. to reset sed -o errexit in run_readelf
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 622875396bcf..f1b83913d08c 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -116,12 +116,14 @@ run_readelf() {
${READELF} --file-header --section-headers --symbols --wide "$objfile" > "$tmpfile"
+ set +o errexit
# 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=$(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")
+ set -o errexit
rm -f -- "$tmpfile"
}
2. or use || true with sed, so that it doesn't fail.
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 622875396bcf..6e867b053ac4 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -119,9 +119,9 @@ run_readelf() {
# 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=$(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")
+ ELF_FILEHEADER=$(sed -n '/There are [0-9]* section headers, starting at offset\|Section Headers:/q;p' "$tmpfile" || true)
+ 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' || true)
+ ELF_SYMS=$(sed -n '/Symbol table .* contains [0-9]* entries:/,$p' "$tmpfile" || true)
rm -f -- "$tmpfile"
}
Note: only the SECHEADERS line needs true but adding true to just that line looks hacky.
3. remove set -o errexit for the entire file.
diff --git a/scripts/faddr2line b/scripts/faddr2line
index 622875396bcf..174ab098750f 100755
--- a/scripts/faddr2line
+++ b/scripts/faddr2line
@@ -41,7 +41,6 @@
# free_reserved_area at mm/page_alloc.c:6429 (discriminator 2)
-set -o errexit
set -o nounset
usage() {
4. patch I sent before, use readelf multiple times.
I have tried and verified these options work correctly too.
However I feel option 4, where we run readelf 3 times is the cleanest.
> Any chance the below fixes it?
>
> diff --git a/scripts/faddr2line b/scripts/faddr2line
> index 622875396bcfc..550c0f9b9d473 100755
> --- a/scripts/faddr2line
> +++ b/scripts/faddr2line
> @@ -78,7 +78,7 @@ GREP="grep"
>
> # Enforce ASCII-only output from tools like readelf
> # ensuring sed processes strings correctly.
> -export LANG=C
> +export LC_ALL=C
>
As you can see above from the log, I have tried this but this doesn't help
> command -v ${AWK} >/dev/null 2>&1 || die "${AWK} isn't installed"
> command -v ${READELF} >/dev/null 2>&1 || die "${READELF} isn't installed"
--
Thanks and Regards
Srikar Dronamraju
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-15 2:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-05 1:24 [PATCH] Revert "scripts/faddr2line: Combine three readelf calls into one" Srikar Dronamraju
2026-09-14 19:00 ` Josh Poimboeuf
2026-09-15 2:15 ` Srikar Dronamraju
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®