gdb: Add aliases for read_core_file_mappings callbacks
authorAaron Merey <amerey@redhat.com>
Tue, 9 Nov 2021 21:47:36 +0000 (16:47 -0500)
committerAaron Merey <amerey@redhat.com>
Wed, 17 Nov 2021 03:29:51 +0000 (22:29 -0500)
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
gdb/arch-utils.h
gdb/corelow.c
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/linux-tdep.c

index 862f26b6cf7833ffd4ac13230c878a717232b55c..6c6dca22d63d34d9a60687e80a294d624620162b 100644 (file)
@@ -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<void (ULONGEST count)>
-                                  pre_loop_cb,
-                                gdb::function_view<void (int num,
-                                                         ULONGEST start,
-                                                         ULONGEST end,
-                                                         ULONGEST file_ofs,
-                                                         const char *filename)>
-                                  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)
 {
 }
 
index 03e9082f6d771ccb1868ece935b8109b1e3447f8..07cc496a02ae45cc525c9616be4b31f4ee20f4cc 100644 (file)
@@ -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<void (ULONGEST count)>
-                                              pre_loop_cb,
-                                            gdb::function_view<void (int num,
-                                                                     ULONGEST start,
-                                                                     ULONGEST end,
-                                                                     ULONGEST file_ofs,
-                                                                     const char *filename)>
-                                              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 */
index 5f48d96aa12de0d16f199e65b76b5af3bc4d441b..10942e6af01fe2859ec175922fd52dfed70ef226 100644 (file)
@@ -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.  */
index f89dcc5775429bbb0d130fdd72eb84fb7f1a35e9..689187f8b1e5a155a4f1b0ddc66eea6623425ab0 100644 (file)
@@ -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<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> 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);
index f73d5624633187124f8b999868da1ac866dc467f..eae5395af9c4ed2ac7c0fb84cc5554d7b2e47261 100644 (file)
@@ -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<void (ULONGEST count)>;
+
+using read_core_file_mappings_loop_ftype =
+  gdb::function_view<void (int num,
+                          ULONGEST start,
+                          ULONGEST end,
+                          ULONGEST file_ofs,
+                          const char *filename,
+                          const bfd_build_id *build_id)>;
 
 
 /* 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<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> loop_cb);
-extern void gdbarch_read_core_file_mappings (struct gdbarch *gdbarch, struct bfd *cbfd, gdb::function_view<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> 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);
index 829f24192ae0aee2792c76fc82518a42ae3e7a5a..83a359b4f599b1c9db47256c11d71610c8caf3e6 100755 (executable)
@@ -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<void (ULONGEST count)> pre_loop_cb, gdb::function_view<void (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs, const char *filename)> 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<void (ULONGEST count)>;
+
+using read_core_file_mappings_loop_ftype =
+  gdb::function_view<void (int num,
+                          ULONGEST start,
+                          ULONGEST end,
+                          ULONGEST file_ofs,
+                          const char *filename,
+                          const bfd_build_id *build_id)>;
 EOF
 
 # function typedef's
index ae2f7c14f6d3ea187a89a7e83ae83f156a2e7488..e2cff83086a77ac734449057eb500b90650a60b5 100644 (file)
@@ -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<void (ULONGEST count)>
-                                pre_loop_cb,
-                              gdb::function_view<void (int num,
-                                                       ULONGEST start,
-                                                       ULONGEST end,
-                                                       ULONGEST file_ofs,
-                                                       const char *filename)>
-                                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",