From aa95b2d43883666937d31335d0178d2218d9c9aa Mon Sep 17 00:00:00 2001 From: Aaron Merey Date: Tue, 9 Nov 2021 16:47:36 -0500 Subject: [PATCH] gdb: Add aliases for read_core_file_mappings callbacks Add aliases read_core_file_mappings_loop_ftype and read_core_file_mappings_pre_loop_ftype. Intended for use with read_core_file_mappings. Also add build_id parameter to read_core_file_mappings_loop_ftype. --- gdb/arch-utils.c | 15 +++++---------- gdb/arch-utils.h | 15 +++++---------- gdb/corelow.c | 2 +- gdb/gdbarch.c | 2 +- gdb/gdbarch.h | 16 ++++++++++++++-- gdb/gdbarch.sh | 14 +++++++++++++- gdb/linux-tdep.c | 19 +++++++------------ 7 files changed, 46 insertions(+), 37 deletions(-) diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index 862f26b6cf7..6c6dca22d63 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -1075,16 +1075,11 @@ default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc) /* See arch-utils.h. */ void -default_read_core_file_mappings (struct gdbarch *gdbarch, - struct bfd *cbfd, - gdb::function_view - pre_loop_cb, - gdb::function_view - loop_cb) +default_read_core_file_mappings + (struct gdbarch *gdbarch, + struct bfd *cbfd, + read_core_file_mappings_pre_loop_ftype pre_loop_cb, + read_core_file_mappings_loop_ftype loop_cb) { } diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h index 03e9082f6d7..07cc496a02a 100644 --- a/gdb/arch-utils.h +++ b/gdb/arch-utils.h @@ -295,14 +295,9 @@ extern std::string default_get_pc_address_flags (frame_info *frame, CORE_ADDR pc); /* Default implementation of gdbarch read_core_file_mappings method. */ -extern void default_read_core_file_mappings (struct gdbarch *gdbarch, - struct bfd *cbfd, - gdb::function_view - pre_loop_cb, - gdb::function_view - loop_cb); +extern void default_read_core_file_mappings + (struct gdbarch *gdbarch, + struct bfd *cbfd, + read_core_file_mappings_pre_loop_ftype pre_loop_cb, + read_core_file_mappings_loop_ftype loop_cb); #endif /* ARCH_UTILS_H */ diff --git a/gdb/corelow.c b/gdb/corelow.c index 5f48d96aa12..10942e6af01 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -214,7 +214,7 @@ core_target::build_file_mappings () /* read_core_file_mappings will invoke this lambda for each mapping that it finds. */ [&] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, - const char *filename) + const char *filename, const bfd_build_id *build_id) { /* Architecture-specific read_core_mapping methods are expected to weed out non-file-backed mappings. */ diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index f89dcc57754..689187f8b1e 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -5411,7 +5411,7 @@ set_gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, } void -gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view pre_loop_cb, gdb::function_view loop_cb) +gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, read_core_file_mappings_pre_loop_ftype pre_loop_cb, read_core_file_mappings_loop_ftype loop_cb) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->read_core_file_mappings != NULL); diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index f73d5624633..eae5395af9c 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -131,6 +131,18 @@ enum class memtag_type allocation, }; +/* Callback types for 'read_core_file_mappings' gdbarch method. */ + +using read_core_file_mappings_pre_loop_ftype = + gdb::function_view; + +using read_core_file_mappings_loop_ftype = + gdb::function_view; /* The following are pre-initialized by GDBARCH. */ @@ -1712,8 +1724,8 @@ extern void set_gdbarch_get_pc_address_flags (struct gdbarch *gdbarch, gdbarch_g /* Read core file mappings */ -typedef void (gdbarch_read_core_file_mappings_ftype) (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view pre_loop_cb, gdb::function_view loop_cb); -extern void gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view pre_loop_cb, gdb::function_view loop_cb); +typedef void (gdbarch_read_core_file_mappings_ftype) (struct gdbarch *gdbarch, struct bfd *cbfd, read_core_file_mappings_pre_loop_ftype pre_loop_cb, read_core_file_mappings_loop_ftype loop_cb); +extern void gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, read_core_file_mappings_pre_loop_ftype pre_loop_cb, read_core_file_mappings_loop_ftype loop_cb); extern void set_gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, gdbarch_read_core_file_mappings_ftype *read_core_file_mappings); extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch); diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 829f24192ae..83a359b4f59 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -1210,7 +1210,7 @@ m;ULONGEST;type_align;struct type *type;type;;default_type_align;;0 f;std::string;get_pc_address_flags;frame_info *frame, CORE_ADDR pc;frame, pc;;default_get_pc_address_flags;;0 # Read core file mappings -m;void;read_core_file_mappings;struct bfd *cbfd, gdb::function_view pre_loop_cb, gdb::function_view loop_cb;cbfd, pre_loop_cb, loop_cb;;default_read_core_file_mappings;;0 +m;void;read_core_file_mappings;struct bfd *cbfd, read_core_file_mappings_pre_loop_ftype pre_loop_cb, read_core_file_mappings_loop_ftype loop_cb;cbfd, pre_loop_cb, loop_cb;;default_read_core_file_mappings;;0 EOF } @@ -1402,6 +1402,18 @@ enum class memtag_type allocation, }; +/* Callback types for 'read_core_file_mappings' gdbarch method. */ + +using read_core_file_mappings_pre_loop_ftype = + gdb::function_view; + +using read_core_file_mappings_loop_ftype = + gdb::function_view; EOF # function typedef's diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index ae2f7c14f6d..e2cff83086a 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -1097,16 +1097,11 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args, for each mapping. */ static void -linux_read_core_file_mappings (struct gdbarch *gdbarch, - struct bfd *cbfd, - gdb::function_view - pre_loop_cb, - gdb::function_view - loop_cb) +linux_read_core_file_mappings + (struct gdbarch *gdbarch, + struct bfd *cbfd, + read_core_file_mappings_pre_loop_ftype pre_loop_cb, + read_core_file_mappings_loop_ftype loop_cb) { /* Ensure that ULONGEST is big enough for reading 64-bit core files. */ gdb_static_assert (sizeof (ULONGEST) >= 8); @@ -1189,7 +1184,7 @@ linux_read_core_file_mappings (struct gdbarch *gdbarch, char * filename = filenames; filenames += strlen ((char *) filenames) + 1; - loop_cb (i, start, end, file_ofs, filename); + loop_cb (i, start, end, file_ofs, filename, nullptr); } } @@ -1218,7 +1213,7 @@ linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args) } }, [=] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, - const char *filename) + const char *filename, const bfd_build_id *build_id) { if (gdbarch_addr_bit (gdbarch) == 32) printf_filtered ("\t%10s %10s %10s %10s %s\n", -- 2.39.5