[Rpm-maint] [PATCH] find-debuginfo.sh: Don't copy extra sections into .gnu_debugdata.
Panu Matilainen
pmatilai at laiskiainen.org
Mon Oct 10 12:21:38 UTC 2016
On 10/07/2016 06:00 PM, Mark Wielaard wrote:
> When creating the compressed mini-symtab section in find-debuginfo
> add_minidebug we explicitly remove .gdb_index and .comment. But there
> can be other non-empty sections in the debuginfo that shouldn't be
> copied. For example rust binaries might have a .rustc section.
>
> Explicitly remove any non-allocated PROGBITS or NOTE sections.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1382394
>
> Signed-off-by: Mark Wielaard <mjw at redhat.com>
> ---
> scripts/find-debuginfo.sh | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/find-debuginfo.sh b/scripts/find-debuginfo.sh
> index 5f6e0bb..1524ac2 100644
> --- a/scripts/find-debuginfo.sh
> +++ b/scripts/find-debuginfo.sh
> @@ -193,6 +193,14 @@ add_minidebug()
> local keep_symbols=`mktemp`
> local mini_debuginfo=`mktemp`
>
> + # In the minisymtab we don't need the .debug_ sections (already removed
> + # by -S) but also not any other non-allocated PROGBITS or NOTE sections.
> + # List and remove them explicitly. We do want to keep the allocated,
> + # symbol and NOBITS sections so cannot use --keep-only because that is
> + # too agressive. Field $2 is the section name, $3 is the section type
> + # and $8 are the section flags.
> + local remove_sections=`readelf -W -S "$debuginfo" | awk '{ if (index($2,".debug_") != 1 && ($3 == "PROGBITS" || $3 == "NOTE") && index($8,"A") == 0) printf "--remove-section "$2" " }'`
> +
> # Extract the dynamic symbols from the main binary, there is no need to also have these
> # in the normal symbol table
> nm -D "$binary" --format=posix --defined-only | awk '{ print $1 }' | sort > "$dynsyms"
> @@ -204,7 +212,7 @@ add_minidebug()
> # Keep all the function symbols not already in the dynamic symbol table
> comm -13 "$dynsyms" "$funcsyms" > "$keep_symbols"
> # Copy the full debuginfo, keeping only a minumal set of symbols and removing some unnecessary sections
> - objcopy -S --remove-section .gdb_index --remove-section .comment --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null
> + objcopy -S $remove_sections --keep-symbols="$keep_symbols" "$debuginfo" "$mini_debuginfo" &> /dev/null
> #Inject the compressed data into the .gnu_debugdata section of the original binary
> xz "$mini_debuginfo"
> mini_debuginfo="${mini_debuginfo}.xz"
>
Applied, thanks!
- Panu -
More information about the Rpm-maint
mailing list