/* 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)
 {
 }
 
 
                                                 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 */
 
     /* 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.  */
 
 }
 
 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);
 
   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.  */
 
 /* 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);
 
 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
 }
   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
 
    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);
       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);
     }
 }
 
          }
       },
     [=] (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",