From e9ef4f394d34b122da58a2706deb7e5f4f131a5b Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 20 Apr 2010 22:35:58 +0000 Subject: procfs.c: iterate_over_mappings callback has wrong profile. 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/procfs.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'gdb/procfs.c') diff --git a/gdb/procfs.c b/gdb/procfs.c index a04b604..57270fc 100644 --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -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; -- cgit v1.1