lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <556C3D8E.2060506@suse.cz>
Date:	Mon, 01 Jun 2015 13:10:06 +0200
From:	Martin Liška <mliska@...e.cz>
To:	Arnaldo Carvalho de Melo <acme@...nel.org>
CC:	David Ahern <dsahern@...il.com>, a.p.zijlstra@...llo.nl,
	paulus@...ba.org, mingo@...hat.com, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] perf: introduce new two options for objdump.

On 05/20/2015 03:05 PM, Arnaldo Carvalho de Melo wrote:
> Em Wed, May 20, 2015 at 03:02:01PM +0200, Martin Liška escreveu:
>> On 05/19/2015 04:33 PM, Arnaldo Carvalho de Melo wrote:
>>> Em Tue, May 19, 2015 at 08:29:58AM -0600, David Ahern escreveu:
>>>> On 5/19/15 8:08 AM, Arnaldo Carvalho de Melo wrote:
>>>>> Em Thu, Jan 29, 2015 at 02:03:46PM +0100, Martin Liška escreveu:
>>>>>> Newly introduced options usedfull for off-box usage:
>>>
>>>>>    New useful options for off-box usage:
>>>
>>>>>>   --objdump-prefix: specify prefix to add to the absolute paths
>>>>>>   where objdump looks for source files.
>>>>>>   --objdump-prefix-strip: indicate how many initial directory names
>>>>>>   to strip off the hardwired absolute paths, passed to objdump.
>>>>>>   It has no effect without --objdump-prefix.
>>>
>>>>> Does this, for instance, allows one looking at source code + assembly
>>>>> with debuginfo packages? Is that a usecase you tested this against?
>>>
>>>>> Anyway, sorry for the delay in processing this, fell thru the cracks ;-\
>>>
>>>>> Can you please respin this on top of my current perf/core, at:
>>>
>>>>> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
>>>
>>>> Perhaps it should be generalized a bit? Right now we have symfs for the
>>>> location of the tree for binaries. What about a srcfs for a source tree?
>>>
>>> That is a good idea indeed.
>>>
>>> - Arnaldo
>>>
>>
>> Hello.
>>
>> I was motivated to be able to annotate source code, realized out-of-box. More precisely, on a machine A
>> I run perf record, I moved the report file to machine B and I use these options to annotate source code.
>>
>> Let's consider source code location
>>
>> Machine A:
>> P1=/a/b/c/d/source-files
>>
>> Machine B:
>> P2=/x/y/z/source-files
>>
>> Using just a single option (--objdump-prefix) works, but one how to place source code on machine B to:
>> /a/b/c/d/x/y/z/source-files
>>
>> That's quite cumbersome, thus adding second option, one can strip '/a/b/c/d', with --objdump-prefix-strip=4.
>> Still, no ideal, but it's quite flexible. A new 'srcfs' can used as --objdump-prefix, am I right?
> 
> I guess so, and yeah, the feature implemented in your patch has value,
> thanks for collaborating! It is just that it may fit better as a
> complement to the --symfs stuff, that is also for off-box analysis:
> 
> --symfs=<directory>::
>         Look for files with symbols relative to this directory.
> 
>> Respun version of patch is attached.
> 
> Thanks, will wait for further discussion before applying,
> 
> - Arnaldo

Hello Arnaldo.

Are we going to wait any longer? It looks there's no discussion effort in this thread ;)

Thanks,
Martin

>  
>> Thanks,
>> Martin
>>
> 
>> diff --git a/tools/perf/Documentation/perf-annotate.txt b/tools/perf/Documentation/perf-annotate.txt
>> index e9cd39a..4d2a5be 100644
>> --- a/tools/perf/Documentation/perf-annotate.txt
>> +++ b/tools/perf/Documentation/perf-annotate.txt
>> @@ -90,6 +90,12 @@ OPTIONS
>>  --objdump=<path>::
>>          Path to objdump binary.
>>  
>> +--objdump-prefix=<path>::
>> +	Specify prefix to add to the absolute paths where objdump looks for source files.
>> +
>> +--objdump-prefix-strip=<level>::
>> +	Indicate how many initial directory names to strip off the hardwired absolute paths, passed to objdump. It has no effect without --objdump-prefix.
>> +
>>  --skip-missing::
>>  	Skip symbols that cannot be annotated.
>>  
>> diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
>> index c33b69f..2b3cb21 100644
>> --- a/tools/perf/Documentation/perf-report.txt
>> +++ b/tools/perf/Documentation/perf-report.txt
>> @@ -286,6 +286,12 @@ OPTIONS
>>  --objdump=<path>::
>>          Path to objdump binary.
>>  
>> +--objdump-prefix=<path>::
>> +	Specify prefix to add to the absolute paths where objdump looks for source files.
>> +
>> +--objdump-prefix-strip=<level>::
>> +	Indicate how many initial directory names to strip off the hardwired absolute paths, passed to objdump. It has no effect without --objdump-prefix.
>> +
>>  --group::
>>  	Show event group information together.
>>  
>> diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt
>> index 9e5b07eb..2f269e9 100644
>> --- a/tools/perf/Documentation/perf-top.txt
>> +++ b/tools/perf/Documentation/perf-top.txt
>> @@ -157,6 +157,16 @@ Default is to monitor all CPUS.
>>  --asm-raw::
>>  	Show raw instruction encoding of assembly instructions.
>>  
>> +--objdump=<path>::
>> +        Path to objdump binary.
>> +
>> +--objdump-prefix=<path>::
>> +	Specify prefix to add to the absolute paths where objdump looks for source files.
>> +
>> +--objdump-prefix-strip=<level>::
>> +	Indicate how many initial directory names to strip off the hardwired absolute paths, passed to objdump. It has no effect without --objdump-prefix.
>> +
>> +
>>  -g::
>>  	Enables call-graph (stack chain/backtrace) recording.
>>  
>> diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
>> index b57a027..9f0690d 100644
>> --- a/tools/perf/builtin-annotate.c
>> +++ b/tools/perf/builtin-annotate.c
>> @@ -324,6 +324,11 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)
>>  		   "Specify disassembler style (e.g. -M intel for intel syntax)"),
>>  	OPT_STRING(0, "objdump", &objdump_path, "path",
>>  		   "objdump binary to use for disassembly and annotations"),
>> +	OPT_STRING(0, "objdump-prefix", &objdump_prefix_path, "path",
>> +		   "prefix to the absolute paths where objdump looks for source files"),
>> +	OPT_STRING(0, "objdump-prefix-strip", &objdump_prefix_strip, "level",
>> +		   "Indicate how many initial directory names to strip off the hardwired "
>> +		   "absolute paths, passed to objdump."),
>>  	OPT_BOOLEAN(0, "group", &symbol_conf.event_group,
>>  		    "Show event group information together"),
>>  	OPT_END()
>> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
>> index 56025d9..3328fb8 100644
>> --- a/tools/perf/builtin-report.c
>> +++ b/tools/perf/builtin-report.c
>> @@ -715,6 +715,11 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
>>  		    "add last branch records to call history"),
>>  	OPT_STRING(0, "objdump", &objdump_path, "path",
>>  		   "objdump binary to use for disassembly and annotations"),
>> +	OPT_STRING(0, "objdump-prefix", &objdump_prefix_path, "path",
>> +		   "prefix to the absolute paths where objdump looks for source files"),
>> +	OPT_STRING(0, "objdump-prefix-strip", &objdump_prefix_strip, "level",
>> +		   "Indicate how many initial directory names to strip off the hardwired "
>> +		   "absolute paths, passed to objdump."),
>>  	OPT_BOOLEAN(0, "demangle", &symbol_conf.demangle,
>>  		    "Disable symbol demangling"),
>>  	OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel,
>> diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
>> index 6b98742..24bdb08 100644
>> --- a/tools/perf/builtin-top.c
>> +++ b/tools/perf/builtin-top.c
>> @@ -1150,6 +1150,11 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
>>  		    "Enable kernel symbol demangling"),
>>  	OPT_STRING(0, "objdump", &objdump_path, "path",
>>  		    "objdump binary to use for disassembly and annotations"),
>> +	OPT_STRING(0, "objdump-prefix", &objdump_prefix_path, "path",
>> +		   "prefix to the absolute paths where objdump looks for source files"),
>> +	OPT_STRING(0, "objdump-prefix-strip", &objdump_prefix_strip, "level",
>> +		   "Indicate how many initial directory names to strip off the hardwired "
>> +		   "absolute paths, passed to objdump."),
>>  	OPT_STRING('M', "disassembler-style", &disassembler_style, "disassembler style",
>>  		   "Specify disassembler style (e.g. -M intel for intel syntax)"),
>>  	OPT_STRING('u', "uid", &target->uid_str, "user", "user to profile"),
>> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
>> index 7f5bdfc..c5373f4 100644
>> --- a/tools/perf/util/annotate.c
>> +++ b/tools/perf/util/annotate.c
>> @@ -23,6 +23,8 @@
>>  
>>  const char 	*disassembler_style;
>>  const char	*objdump_path;
>> +const char	*objdump_prefix_path;
>> +const char	*objdump_prefix_strip;
>>  static regex_t	 file_lineno;
>>  
>>  static struct ins *ins__find(const char *name);
>> @@ -1039,12 +1041,16 @@ fallback:
>>  	}
>>  
>>  	snprintf(command, sizeof(command),
>> -		 "%s %s%s --start-address=0x%016" PRIx64
>> +		 "%s %s%s %s%s %s%s --start-address=0x%016" PRIx64
>>  		 " --stop-address=0x%016" PRIx64
>>  		 " -l -d %s %s -C %s 2>/dev/null|grep -v %s|expand",
>>  		 objdump_path ? objdump_path : "objdump",
>>  		 disassembler_style ? "-M " : "",
>>  		 disassembler_style ? disassembler_style : "",
>> +		 objdump_prefix_path ? "--prefix=" : "",
>> +		 objdump_prefix_path ? objdump_prefix_path : "",
>> +		 objdump_prefix_strip ? "--prefix-strip=" : "",
>> +		 objdump_prefix_strip ? objdump_prefix_strip : "",
>>  		 map__rip_2objdump(map, sym->start),
>>  		 map__rip_2objdump(map, sym->end),
>>  		 symbol_conf.annotate_asm_raw ? "" : "--no-show-raw",
>> diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
>> index cadbdc9..fd9782e 100644
>> --- a/tools/perf/util/annotate.h
>> +++ b/tools/perf/util/annotate.h
>> @@ -168,5 +168,7 @@ static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused,
>>  #endif
>>  
>>  extern const char	*disassembler_style;
>> +extern const char	*objdump_prefix_path;
>> +extern const char	*objdump_prefix_strip;
>>  
>>  #endif	/* __PERF_ANNOTATE_H */
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ