procfs.c: iterate_over_mappings callback has wrong profile.
authorJoel Brobecker <brobecker@gnat.com>
Tue, 20 Apr 2010 22:35:58 +0000 (22:35 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Tue, 20 Apr 2010 22:35:58 +0000 (22:35 +0000)
The function proc_find_memory_regions calls iterate_over_mappings as
follow:

> return iterate_over_mappings (pi, func, data,
>                               find_memory_regions_callback);

The problem is that both func and find_memory_regions_callback
do not match the profile expected by iterate_over_mappings:

> iterate_over_mappings (procinfo *pi, int (*child_func) (), void *data,
>                        int (*func) (struct prmap *map,
>                                     int (*child_func) (),
>                                     void *data))

We cannot change proc_find_memory_regions such that FUNC is a pointer
to a function that takes no argument (in place of the 6 that it has).
This is because proc_find_memory_regions is used as a target_ops method.
However, it turns out that changing iterate_over_mappings to conform
to the profile imposed by the target_ops vector is possible without
much effort.

gdb/ChangeLog:

        * procfs.c (iterate_over_mappings_cb_ftype): New typedef.
        (iterate_over_mappings): Adjust function profile. Add declaration.
        (insert_dbx_link_bpt_in_region, info_mappings_callback):
        Adjust accordingly.

gdb/ChangeLog
gdb/procfs.c

index 50caa17..0bd3f9e 100644 (file)
@@ -1,5 +1,12 @@
 2010-04-20  Joel Brobecker  <brobecker@adacore.com>
 
+       * procfs.c (iterate_over_mappings_cb_ftype): New typedef.
+       (iterate_over_mappings): Adjust function profile. Add declaration.
+       (insert_dbx_link_bpt_in_region, info_mappings_callback):
+       Adjust accordingly.
+
+2010-04-20  Joel Brobecker  <brobecker@adacore.com>
+
        * procfs.c (solib_mappings_callback): Move function up to avoid
        a compiler warning.
 
index a04b604..57270fc 100644 (file)
@@ -445,6 +445,19 @@ static void free_syscalls (procinfo *pi);
 static int find_syscall (procinfo *pi, char *name);
 #endif /* DYNAMIC_SYSCALLS */
 
+/* A function type used as a callback back iterate_over_mappings.  */
+typedef int (iterate_over_mappings_cb_ftype)
+  (CORE_ADDR vaddr, unsigned long size, int read, int write, int execute,
+   void *data);
+
+static int iterate_over_mappings
+  (procinfo *pi,
+   iterate_over_mappings_cb_ftype *child_func,
+   void *data,
+   int (*func) (struct prmap *map,
+                iterate_over_mappings_cb_ftype *child_func,
+                void *data));
+
 /* The head of the procinfo list: */
 static procinfo * procinfo_list;
 
@@ -4096,7 +4109,7 @@ solib_mappings_callback (struct prmap *map, int (*func) (int, CORE_ADDR),
 
 static int
 insert_dbx_link_bpt_in_region (struct prmap *map,
-                               int (*child_func) (),
+                               iterate_over_mappings_cb_ftype *child_func,
                                void *data)
 {
   procinfo *pi = (procinfo *) data;
@@ -5617,9 +5630,11 @@ procfs_use_watchpoints (struct target_ops *t)
  */
 
 static int
-iterate_over_mappings (procinfo *pi, int (*child_func) (), void *data,
+iterate_over_mappings (procinfo *pi,
+                      iterate_over_mappings_cb_ftype *child_func,
+                      void *data,
                       int (*func) (struct prmap *map,
-                                   int (*child_func) (),
+                                   iterate_over_mappings_cb_ftype *child_func,
                                    void *data))
 {
   char pathname[MAX_PROC_NAME_SIZE];
@@ -5767,7 +5782,9 @@ mappingflags (long flags)
  */
 
 static int
-info_mappings_callback (struct prmap *map, int (*ignore) (), void *unused)
+info_mappings_callback (struct prmap *map,
+                       iterate_over_mappings_cb_ftype *ignore,
+                       void *unused)
 {
   unsigned int pr_off;