From 73702c398046d8e01e6a0f5860b7e75cd37a9518 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Tue, 14 Jun 2022 10:52:54 -0700 Subject: [PATCH] pmcannotate: Don't increment end address passed to objdump -d. libpmc already returns an end address that is after the end of the last instruction of a function (on both amd64 and arm64) as the end address written to the annotate map file is computed as the start address of the symbol plus the size. Adding one could result in a curious failure where an entire function's contents in assembly was reduced instead to only the first instruction. The reason is that when the end instruction is bumped by one, objdump -d can append the first instruction of the next function in its output. However, since pmcannotate concatenates all of the objdump -d output from various functions into a single file which it then searches to find the assembly for a given file, if this additional trailer was earlier in the file than the full function, the trailer was chosen to represent the entire function resulting in the truncated listing of the function. Sponsored by: University of Cambridge, Google, Inc. Differential Revision: https://reviews.freebsd.org/D35399 --- usr.sbin/pmcannotate/pmcannotate.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/usr.sbin/pmcannotate/pmcannotate.c b/usr.sbin/pmcannotate/pmcannotate.c index 03f384d3f531..f3ffeed92738 100644 --- a/usr.sbin/pmcannotate/pmcannotate.c +++ b/usr.sbin/pmcannotate/pmcannotate.c @@ -434,11 +434,6 @@ fqueue_getall(const char *bin, char *temp, int asmf) start = agg->ag_ostart; end = agg->ag_oend; - /* - * Fix-up the end address in order to show it in the objdump's - * trace. - */ - end++; if (asmf) snprintf(tmpf, sizeof(tmpf), "objdump --start-address=%p "