On Tue, 2014-03-11 at 18:29 -0700, Josh Stone wrote:
This adds testfilebaxmin, an ET_EXEC binary with .gnu_debugdata that
doesn't match the load address of the main file. A previous bug made
this trigger a kernel heuristic that forces the module to act like
ET_DYN, which makes things like dwfl_module_relocate_address report
relative addresses rather than proper absolute addresses.
For example, before the fix dwflsyms would print:
deregister_tm_clones (0) 0x400430, rel: 0x430 (.text)
Now it properly prints:
deregister_tm_clones (0) 0x400430, rel: 0x400430 (.text)
These new test additions confirm that it's fixed.
Signed-off-by: Josh Stone <jistone(a)redhat.com>
+2014-03-11 Josh Stone <jistone(a)redhat.com>
+
+ * testfilebaxmin.bz2: New testfile.
+ * Makefile.am (EXTRA_DIST): Add testfilebaxmin.bz2.
+ * run-readelf-s.sh: Test testfilebaxmin.
+ * run-dwflsyms.sh: Likewise.
Thanks for this. Looks good to me.
+# Make sure that find_aux_sym doesn't corrupt relocations,
avoiding a kernel
+# heuristic that forces ET_EXEC->ET_DYN. NB: ld.gold doesn't seem to produce
+# the mismatched load addrs between the main file and the mini_debuginfo, so
+# this is forcing ld.bfd.
+#
+# gcc -g -o bax foo.c bar.c -fuse-ld=bfd
+# eu-strip --remove-comment -f bax.debug bax
+# nm -D bax --format=posix --defined-only | awk '{ print $1 }' | sort >
dynsyms
+# nm bax.debug --format=posix --defined-only | awk '{ if ($2 == "T" || $2
== "t") print $1 }'
Note for future. To help ppc64 ELFv1 abi (which uses function
descriptors), this can also be expressed as:
# nm "$debuginfo" --format=sysv --defined-only | awk -F \| '{ if ($4 ~
"FUNC") print $1 }' | sort > funcsyms
There is no difference in this case, it only matters for arches that use
function descriptors, which aren't easily spotted in the posix format.
Cheers,
Mark