:p
atchew
Login
Testing this on hexagon binaries exposed issues with symbols having file but no line information. Pierrick Bouvier (2): contrib/plugins/uftrace_symbols.py: fix symbols reading contrib/plugins/uftrace_symbols.py: handle missing source line from addr2line contrib/plugins/uftrace_symbols.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) -- 2.47.3
When running this on hexagon binary, we observe some undefined symbols without any address or size. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> --- contrib/plugins/uftrace_symbols.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/plugins/uftrace_symbols.py b/contrib/plugins/uftrace_symbols.py index XXXXXXX..XXXXXXX 100755 --- a/contrib/plugins/uftrace_symbols.py +++ b/contrib/plugins/uftrace_symbols.py @@ -XXX,XX +XXX,XX @@ def get_symbols(elf_file): out = out.strip().split('\n') for line in out: info = line.split(' ') - if len(info) == 3: - # missing size information + if len(info) < 4: + # missing size/address information continue addr, size, type, name = info # add only symbols from .text section -- 2.47.3
Some symbols have only a file information, and no line information. In this case, addr2line reports '?'. Replace with 0 to guarantee consistent data for consumers. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> --- contrib/plugins/uftrace_symbols.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib/plugins/uftrace_symbols.py b/contrib/plugins/uftrace_symbols.py index XXXXXXX..XXXXXXX 100755 --- a/contrib/plugins/uftrace_symbols.py +++ b/contrib/plugins/uftrace_symbols.py @@ -XXX,XX +XXX,XX @@ def find_symbols_locations(elf_file, symbols): file, line = out[i].split(':') # addr2line may return 'line (discriminator [0-9]+)' sometimes, # remove this to keep only line number. - line = line.split(' ')[0] + if line == '?': + line = 0 + else: + line = int(line.split(' ')[0]) s.set_loc(file, line) class BinaryFile: -- 2.47.3
Testing this on hexagon binaries exposed issues with symbols having file but no line information. v2 -- - fix first patch to deal with the case nm returns more than 4 columns for a given symbol Pierrick Bouvier (2): contrib/plugins/uftrace_symbols.py: fix symbols reading contrib/plugins/uftrace_symbols.py: handle missing source line from addr2line contrib/plugins/uftrace_symbols.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) -- 2.43.0
When running this on hexagon binary, we observe some undefined symbols without any address or size. Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> --- contrib/plugins/uftrace_symbols.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/plugins/uftrace_symbols.py b/contrib/plugins/uftrace_symbols.py index XXXXXXX..XXXXXXX 100755 --- a/contrib/plugins/uftrace_symbols.py +++ b/contrib/plugins/uftrace_symbols.py @@ -XXX,XX +XXX,XX @@ def get_symbols(elf_file): out = out.strip().split('\n') for line in out: info = line.split(' ') - if len(info) == 3: - # missing size information + if len(info) != 4: + # missing size/address information continue addr, size, type, name = info # add only symbols from .text section -- 2.43.0
Some symbols have only a file information, and no line information. In this case, addr2line reports '?'. Replace with 0 to guarantee consistent data for consumers. Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com> --- contrib/plugins/uftrace_symbols.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/contrib/plugins/uftrace_symbols.py b/contrib/plugins/uftrace_symbols.py index XXXXXXX..XXXXXXX 100755 --- a/contrib/plugins/uftrace_symbols.py +++ b/contrib/plugins/uftrace_symbols.py @@ -XXX,XX +XXX,XX @@ def find_symbols_locations(elf_file, symbols): file, line = out[i].split(':') # addr2line may return 'line (discriminator [0-9]+)' sometimes, # remove this to keep only line number. - line = line.split(' ')[0] + if line == '?': + line = 0 + else: + line = int(line.split(' ')[0]) s.set_loc(file, line) class BinaryFile: -- 2.43.0