diff options
author | Sergio Lopez <slp@redhat.com> | 2017-12-04 09:17:12 +0100 |
---|---|---|
committer | Sergio Durigan Junior <sergiodj@redhat.com> | 2017-12-04 11:54:32 -0500 |
commit | afa840dcc021eaeb975dcde3bedbf46ea0511717 (patch) | |
tree | ecad46a127904cf53161c6c1f3aef804d84f068c | |
parent | 7403715e305f7733d8dfa4a8e1739f12f5180cb2 (diff) | |
download | gdb-afa840dcc021eaeb975dcde3bedbf46ea0511717.zip gdb-afa840dcc021eaeb975dcde3bedbf46ea0511717.tar.gz gdb-afa840dcc021eaeb975dcde3bedbf46ea0511717.tar.bz2 |
Implement 'set dump-excluded-mappings' command
Commit df8411da087dc05481926f4c4a82deabc5bc3859 implemented support for
checking /proc/PID/coredump_filter, and also changed gcore behavior to
unconditionally honor the VM_DONTDUMP flag, preventing sections marked
as such for being dumped into the core file.
This patch implements the 'set dump-excluded-mappings' command for
instructing gdb to ignore the VM_DONTDUMP flag. Combined with 'set
use-coredump-filter', this allows the user to restore the old behavior,
dumping all sections (except the ones marked as IO) unconditionally.
gdb/Changelog:
2017-11-29 Sergio Lopez <slp@redhat.com>
* linux-tdep.c (dump_excluded_mappings): New variable.
(dump_mapping_p): Use dump_excluded_mappings variable.
(_initialize_linux_tdep): New command 'set dump_excluded_mappings'.
-rw-r--r-- | gdb/linux-tdep.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 24237b8..c8a8216 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -93,6 +93,11 @@ struct smaps_vmflags static int use_coredump_filter = 1; +/* Whether the value of smaps_vmflags->exclude_coredump should be + ignored, including mappings marked with the VM_DONTDUMP flag in + the dump. */ +static int dump_excluded_mappings = 0; + /* This enum represents the signals' numbers on a generic architecture running the Linux kernel. The definition of "generic" comes from the file <include/uapi/asm-generic/signal.h>, from the Linux kernel @@ -655,7 +660,7 @@ dump_mapping_p (filter_flags filterflags, const struct smaps_vmflags *v, return 0; /* Check if we should exclude this mapping. */ - if (v->exclude_coredump) + if (!dump_excluded_mappings && v->exclude_coredump) return 0; /* Update our notion of whether this mapping is shared or @@ -2469,6 +2474,17 @@ show_use_coredump_filter (struct ui_file *file, int from_tty, " corefiles is %s.\n"), value); } +/* Display whether the gcore command is dumping mappings marked with + the VM_DONTDUMP flag. */ + +static void +show_dump_excluded_mappings (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Dumping of mappings marked with the VM_DONTDUMP" + " flag is %s.\n"), value); +} + /* To be called from the various GDB_OSABI_LINUX handlers for the various GNU/Linux architectures and machine types. */ @@ -2517,4 +2533,16 @@ of /proc/PID/coredump_filter when generating the corefile. For more information about this file, refer to the manpage of core(5)."), NULL, show_use_coredump_filter, &setlist, &showlist); + + add_setshow_boolean_cmd ("dump-excluded-mappings", class_files, + &dump_excluded_mappings, _("\ +Set whether gcore should dump mappings marked with the VM_DONTDUMP flag."), + _("\ +Show whether gcore should dump mappings marked with the VM_DONTDUMP flag."), + _("\ +Use this command to set whether gcore should dump mappings marked with the\n\ +VM_DONTDUMP flag (\"dd\" in /proc/PID/smaps) when generating the corefile. For\n\ +more information about this file, refer to the manpage of proc(5) and core(5)."), + NULL, show_dump_excluded_mappings, + &setlist, &showlist); } |