diff options
Diffstat (limited to 'gdb/linux-tdep.c')
-rw-r--r-- | gdb/linux-tdep.c | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 2ca9f59..0b2b032 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -726,6 +726,25 @@ dump_mapping_p (filter_flags filterflags, const struct smaps_vmflags *v, return dump_p; } +/* As above, but return true only when we should dump the NT_FILE + entry. */ + +static int +dump_note_entry_p (filter_flags filterflags, const struct smaps_vmflags *v, + int maybe_private_p, int mapping_anon_p, int mapping_file_p, + const char *filename, ULONGEST addr, ULONGEST offset) +{ + /* vDSO and vsyscall mappings will end up in the core file. Don't + put them in the NT_FILE note. */ + if (strcmp ("[vdso]", filename) == 0 + || strcmp ("[vsyscall]", filename) == 0) + return 0; + + /* Otherwise, any other file-based mapping should be placed in the + note. */ + return filename != nullptr; +} + /* Implement the "info proc" command. */ static void @@ -1240,10 +1259,20 @@ typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size, const char *filename, void *data); +typedef int linux_dump_mapping_p_ftype (filter_flags filterflags, + const struct smaps_vmflags *v, + int maybe_private_p, + int mapping_anon_p, + int mapping_file_p, + const char *filename, + ULONGEST addr, + ULONGEST offset); + /* List memory regions in the inferior for a corefile. */ static int linux_find_memory_regions_full (struct gdbarch *gdbarch, + linux_dump_mapping_p_ftype *should_dump_mapping_p, linux_find_memory_region_ftype *func, void *obfd) { @@ -1394,9 +1423,10 @@ linux_find_memory_regions_full (struct gdbarch *gdbarch, } if (has_anonymous) - should_dump_p = dump_mapping_p (filterflags, &v, priv, - mapping_anon_p, mapping_file_p, - filename, addr, offset); + should_dump_p = should_dump_mapping_p (filterflags, &v, priv, + mapping_anon_p, + mapping_file_p, + filename, addr, offset); else { /* Older Linux kernels did not support the "Anonymous:" counter. @@ -1460,6 +1490,7 @@ linux_find_memory_regions (struct gdbarch *gdbarch, data.obfd = obfd; return linux_find_memory_regions_full (gdbarch, + dump_mapping_p, linux_find_memory_regions_thunk, &data); } @@ -1543,7 +1574,9 @@ linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, pack_long (buf, long_type, 1); obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type)); - linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback, + linux_find_memory_regions_full (gdbarch, + dump_note_entry_p, + linux_make_mappings_callback, &mapping_data); if (mapping_data.file_count != 0) |