Masatake YAMATO 840bb0acb5 unwind-libdw: use the mmap_notify subsystem
The unwind subsystem uses the mmap_cache subsystem even it uses
unwind-libdw as backend. unwind-libdw doesn't need the full set of the
mmap_cache subsystem; libdw has a feature for caching a memory
mapping.

This commit does three things.

(1) Make the unwind subsystem not use the mmap_cache subsystem.
The unwind subsystem never concern the memory mapping of the target.
It becomes a thin layer.

(2) Make unwind-libunwind use the mmap_cache subsystem directly.

(3) Make unwind-libdw use the mmap_notify subsystem to know when it
should call dwfl_linux_proc_report/dwfl_report_end for updating the
cache.

Here is a subsystem structure that this patch
introduces:

	+-------------------------------------+
	|            unwind subsys            |
	+------------------+------------------+
	| unwind-libunwind |   unwind-libdw   |
	+------------------+------------------+
	|    mmap_cache    |                  |
	+------------------+                  |
	|               mmap_notify           |
	+-------------------------------------+
	|                syscall              |
	+-------------------------------------+
               mmap/munmap/mprotect/brk...

* unwind.c: Don't include "mmap_cache.h".
(unwind_init): Don't call mmap_cache_enable.
(unwind_tcb_print, unwind_tcb_capture): Don't call mmap_cache related
functions, just invoke unwinder.tcb_walk.
* unwind.h (struct unwind_unwinder_t): Remove tcb_flush_cache field.

* unwind-libdw.c: Include "mmap_notify.h" instead of "mmap_cache.h".
(struct ctx): Add last_proc_updating field to record the generation
of memory mapping that is cached by dwfl_linux_proc_report
and dwfl_report_end.
(mapping_generation): A variable counting how many times the memory
mapping of targets has been changed.
(updating_mapping_generation): New utility function for updating
mapping_generation.
(init): New function for registering updating_mapping_generation
in the mmap_notify subsystem as a callback function.
(tcb_init): Initialize ctx::last_proc_updating.
(tcb_flush_cache): Rename to flush_cache_maybe.  Rebuild the cache data
only if the data is stale.
(tcb_walk): Call flush_cache_maybe for avoiding referring staled cache data.
(unwinder): Set init function, remove tcb_flush_cache field.
* unwind-libunwind.c (init): Enable the mmap_cache subsystem.
(tcb_walk): Call mmap_cache_rebuild_if_invalid and unw_flush_cache for
updating the cache of the memory mapping before walking the stack.
(tcb_walk): Rename to walk.
(unwinder): Remove tcb_flush_cache field.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
2018-05-03 22:01:30 +00:00
2018-04-04 20:32:42 +00:00
2018-04-05 01:40:00 +00:00
2018-04-11 22:01:37 +00:00
2017-06-17 22:54:08 +00:00
2018-01-07 03:11:21 +00:00
2018-04-24 00:35:27 +00:00
2015-07-20 22:03:07 +00:00
2018-02-13 22:00:00 +00:00
2018-03-28 04:29:22 +00:00
2018-02-13 22:00:00 +00:00
2017-05-22 17:33:51 +00:00
2018-04-05 01:40:00 +00:00
2017-07-08 01:49:00 +00:00
2017-07-08 01:49:00 +00:00
2018-05-03 00:09:53 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2009-07-08 21:01:21 +00:00
2015-07-20 22:03:07 +00:00
2018-05-03 00:09:53 +00:00
2018-02-15 11:07:03 +00:00
2018-02-13 22:00:00 +00:00
2017-07-24 12:10:54 +00:00
2017-07-24 12:10:54 +00:00
2018-04-05 01:40:00 +00:00
2017-12-14 00:05:04 +00:00
2015-08-28 08:46:23 +00:00
2017-05-22 17:33:51 +00:00
2018-04-27 00:56:25 +00:00
2017-05-22 17:33:51 +00:00
2018-05-03 00:09:53 +00:00
2017-05-22 17:33:51 +00:00
2018-04-12 23:00:28 +00:00
2018-05-03 00:09:53 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-09-05 10:09:10 +02:00
2017-05-22 17:33:51 +00:00
2018-04-19 18:03:58 +00:00
2018-02-13 22:00:00 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-09-05 10:09:10 +02:00
2018-04-13 01:00:09 +02:00
2017-05-22 17:33:51 +00:00
2017-09-05 10:09:10 +02:00
2017-03-05 16:29:41 +00:00
2017-06-17 22:54:08 +00:00
2017-06-17 22:54:08 +00:00
2015-11-22 23:10:12 +00:00
2018-04-13 01:00:09 +02:00
2018-04-13 01:00:09 +02:00
2017-05-22 17:33:51 +00:00
2018-04-13 01:00:09 +02:00
2018-04-13 01:00:09 +02:00
2017-05-22 17:33:51 +00:00
2017-09-17 12:04:11 +00:00
2017-06-17 22:54:08 +00:00
2018-03-29 16:00:18 +00:00
2017-05-22 17:33:51 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-04-05 01:40:00 +00:00
2015-09-16 00:14:55 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-04-13 01:00:10 +02:00
2016-12-27 23:32:44 +00:00
2017-06-17 22:54:08 +00:00
2017-05-22 17:33:51 +00:00
2017-06-17 22:54:08 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2016-12-26 10:43:35 +00:00
2018-03-15 14:24:22 +00:00
2017-07-09 18:43:34 +00:00
2017-07-24 12:10:54 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2017-05-22 17:33:51 +00:00
2018-03-16 00:55:58 +00:00
2018-02-21 23:03:27 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-04-05 01:40:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2018-04-05 01:40:00 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2018-02-11 00:26:09 +00:00
2018-04-05 01:40:00 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-06-17 22:54:08 +00:00
2018-04-05 01:40:00 +00:00
2017-12-03 19:53:48 +01:00
2018-02-13 22:00:00 +00:00
2018-02-13 22:00:00 +00:00
2016-12-01 00:05:09 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-06-17 22:54:08 +00:00
2017-05-22 17:33:51 +00:00
2017-05-22 17:33:51 +00:00
2017-07-24 12:10:54 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2018-04-05 01:40:00 +00:00
2017-12-23 02:53:54 +00:00
2018-04-05 01:40:00 +00:00
2015-12-07 00:38:38 +00:00
2017-09-05 10:09:10 +02:00
2018-04-05 01:40:00 +00:00
2017-01-20 18:30:11 +00:00
2017-05-22 17:33:51 +00:00
2018-02-13 22:00:00 +00:00
2018-04-27 00:56:25 +00:00

strace - the linux syscall tracer

This is strace -- a diagnostic, debugging and instructional userspace utility with a traditional command-line interface for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state. The operation of strace is made possible by the kernel feature known as ptrace.

strace is released under a Berkeley-style license at the request of Paul Kranenburg; see the file COPYING for details.

See the file NEWS for information on what has changed in recent versions.

Please read the file INSTALL-git for installation instructions.

The user discussion and development of strace take place on the strace mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to strace-devel@lists.strace.io. The mailing list archives are available at https://lists.strace.io/pipermail/strace-devel/ and other archival sites.

The GIT repository of strace is available at GitHub and GitLab.

The latest binary strace packages are available in many repositories, including OBS, Fedora rawhide, and Sisyphus.

Build Status Code Coverage

Description
No description provided
Readme 17 MiB
Languages
C 92.2%
Shell 3.4%
M4 1.4%
Makefile 0.8%
Roff 0.7%
Other 1.5%