tree b33a50166e421383356139c4e8c5645959d6c9c4
parent a21b0b354d4ac39be691f51c53562e2c24443d9e
parent 74cf249d5cf7de84c88cca69a2f13b13d500ff94
author Ingo Molnar <mingo@kernel.org> 1389544787 +0100
committer Ingo Molnar <mingo@kernel.org> 1389544787 +0100
mergetag object 74cf249d5cf7de84c88cca69a2f13b13d500ff94
 type commit
 tag perf-core-for-mingo
 tagger Arnaldo Carvalho de Melo <acme@redhat.com> 1388175923 -0300
 
 User visible changes:
 
 Improvements:
 
 . Support showing source code, asking for variables to be collected
   at probe time and other 'perf probe' operations that use DWARF information.
 
   This supports only binaries with debugging information at this time, detached
   debuginfo (aka debuginfo packages) support should come in later patches.
   (Masami Hiramatsu)
 
 . Add a perf.data file header window in the 'perf report' TUI, associated
   with the 'i' hotkey, providing a counterpart to the --header option in the
   stdio UI. (Namhyung Kim)
 
 . Guest related improvements to 'perf kvm', including allowing to
   specify a directory with guest specific /proc information. (Dongsheng Yang)
 
 . Print session information only if --stdio is given (Namhyung Kim)
 
 Developer stuff:
 
 Fixes:
 
 . Get rid of a duplicate va_end() in error reporting (Namhyung Kim)
 
 . If a hist entry doesn't have symbol information, compare it with its
   address. Affects upcoming new feature (--cumulate) (Namhyung Kim)
 
 Improvements:
 
 . Make libtraceevent install target quieter (Jiri Olsa)
 
 . Make tests/make output more compact (Jiri Olsa)
 
 . Ignore generated files in feature-checks (Chunwei Chen)
 
 New APIs:
 
 . Introduce pevent_filter_strerror() in libtraceevent, similar in
   purpose to libc's strerror() function. (Namhyung Kim)
 
 Refactorings:
 
 . Use perf_data_file methods to write output file in 'record' and
   'inject' (Jiri Olsa)
 
 . Use pr_*() functions where applicable in 'report' (Namhyumg Kim)
 
 . Add 'machine' 'addr_location' struct to have full picture (machine,
   thread, map, symbol, addr) for a (partially) resolved address, reducing
   function signatures (Arnaldo Carvalho de Melo)
 
 . Reduce code duplication in the histogram entry creation/insertion. (Arnaldo Carvalho de Melo)
 
 . Auto allocate annotation histogram data structures, (Arnaldo Carvalho de Melo)
 
 . No need to test against NULL before calling free, also set
   freed memory in struct pointers to NULL, to help fixing use after
   free bugs. (Arnaldo Carvalho de Melo>
 
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.15 (GNU/Linux)
 
 iQIcBAABAgAGBQJSveX1AAoJENZQFvNTUqpAHsoP/R6raJVlZOQsOw/GxpWdazs/
 1Hca1YZ3JKKySrL15yPD19P2kp9B9TtF18zIdLtqymt2oWOz7r9uHP8KgUEdRXOn
 l055PlVFy8O2HWRJnK1By3tdtR9YzSZRGblX84mnXmrAGcogpA07jPD0oZtem+l0
 9jC9szOcHRHXmlI1xgXEKBad9+P0Y+VXNQjzKQ2ZW5U44rISY0jpjMOmk//Rjwpz
 /mATGyzxFG8bNGt3Z4g/2MfJu4t6c6blilDyUFGvLCtUGdfQJ+f5uq3ayLeDWQxo
 iq8Lf3LBqAniTw14vh5TvfO2/Myz1QaJfcU/Y+rSv1+F/eDORCJuI2LaxU84xTCV
 euDtmlk/ro95QVJXPNgqYwLWcYv3cUu6Q82aPwiip5OwY76RezIBHNy23FpFIA+b
 BbVNS+BGUNqwFOTb20RzpH3af2BUog1wVShcBeeXRovDQLPyf+R31U3pKKNVMJP5
 lU4YZM7eK6wjhVcQyxqftvay8XXzANwoyaKcJJWzTOJM8jUhZ3xFtDivL7tuXgYm
 SKTrEbNp89Ui7i14r+ABrPDHsS73eChK2/ylKfYT0I7VVx1JtA2KtIMEx+tmk3lh
 MWJNgW74X2DWZRRbnkJMvahXcY3t2cJ6lWantHoDz0QIlZnlkfAaPHSy/q7E6+B+
 gZw0dnqM23vZLAheolDG
 =lh8y
 -----END PGP SIGNATURE-----

Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core

Pull perf updates from Arnaldo Carvalho de Melo:

User visible changes:

Improvements:

 * Support showing source code, asking for variables to be collected
   at probe time and other 'perf probe' operations that use DWARF information.

   This supports only binaries with debugging information at this time, detached
   debuginfo (aka debuginfo packages) support should come in later patches.
   (Masami Hiramatsu)

 * Add a perf.data file header window in the 'perf report' TUI, associated
   with the 'i' hotkey, providing a counterpart to the --header option in the
   stdio UI. (Namhyung Kim)

 * Guest related improvements to 'perf kvm', including allowing to
   specify a directory with guest specific /proc information. (Dongsheng Yang)

 * Print session information only if --stdio is given (Namhyung Kim)

Developer stuff:

Fixes:

 * Get rid of a duplicate va_end() in error reporting (Namhyung Kim)

 * If a hist entry doesn't have symbol information, compare it with its
   address. Affects upcoming new feature (--cumulate) (Namhyung Kim)

Improvements:

 * Make libtraceevent install target quieter (Jiri Olsa)

 * Make tests/make output more compact (Jiri Olsa)

 * Ignore generated files in feature-checks (Chunwei Chen)

New APIs:

 * Introduce pevent_filter_strerror() in libtraceevent, similar in
   purpose to libc's strerror() function. (Namhyung Kim)

Refactorings:

 * Use perf_data_file methods to write output file in 'record' and
   'inject' (Jiri Olsa)

 * Use pr_*() functions where applicable in 'report' (Namhyumg Kim)

 * Add 'machine' 'addr_location' struct to have full picture (machine,
   thread, map, symbol, addr) for a (partially) resolved address, reducing
   function signatures (Arnaldo Carvalho de Melo)

 * Reduce code duplication in the histogram entry creation/insertion. (Arnaldo Carvalho de Melo)

 * Auto allocate annotation histogram data structures, (Arnaldo Carvalho de Melo)

 * No need to test against NULL before calling free, also set
   freed memory in struct pointers to NULL, to help fixing use after
   free bugs. (Arnaldo Carvalho de Melo>

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
