Move gdb output filtering to its own function so that it can be reused from other places. Signed-off-by: Petr Tesarik <ptesarik@xxxxxxx> --- symbols.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-)
[PATCH 1/11] Move cmd_p() main processing into its own function Move gdb output filtering to its own function so that it can be reused from other places. Signed-off-by: Petr Tesarik <ptesarik@xxxxxxx> --- symbols.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) --- a/symbols.c +++ b/symbols.c @@ -72,6 +72,7 @@ struct elf_common; static void Elf32_Sym_to_common(Elf32_Sym *, struct elf_common *); static void Elf64_Sym_to_common(Elf64_Sym *, struct elf_common *); static void cmd_datatype_common(ulong); +static void process_gdb_output(char *, unsigned, const char *, int); static int display_per_cpu_info(struct syment *); static struct load_module *get_module_percpu_sym_owner(struct syment *); static int is_percpu_symbol(struct syment *); @@ -6388,13 +6389,11 @@ cmd_p(void) { int c; struct syment *sp, *percpu_sp; - unsigned radix, restore_radix; - int leader, do_load_module_filter, success; + unsigned radix; + int do_load_module_filter; char buf1[BUFSIZE]; - char buf2[BUFSIZE]; - char *p1; - leader = do_load_module_filter = radix = restore_radix = 0; + do_load_module_filter = radix = 0; while ((c = getopt(argcnt, args, "dhxu")) != EOF) { switch(c) @@ -6427,12 +6426,11 @@ cmd_p(void) if (argerrs || !args[optind]) cmd_usage(pc->curcmd, SYNOPSIS); + sp = NULL; if ((sp = symbol_search(args[optind])) && !args[optind+1]) { if ((percpu_sp = per_cpu_symbol_search(args[optind])) && display_per_cpu_info(percpu_sp)) return; - sprintf(buf2, "%s = ", args[optind]); - leader = strlen(buf2); if (module_symbol(sp->value, NULL, NULL, NULL, *gdb_output_radix)) do_load_module_filter = TRUE; } else if ((percpu_sp = per_cpu_symbol_search(args[optind])) && @@ -6441,19 +6439,31 @@ cmd_p(void) else if (st->flags & LOAD_MODULE_SYMS) do_load_module_filter = TRUE; + process_gdb_output(concat_args(buf1, 0, TRUE), radix, + sp ? sp->name : NULL, do_load_module_filter); +} + +static void +process_gdb_output(char *gdb_request, unsigned radix, + const char *leader, int do_load_module_filter) +{ + unsigned restore_radix; + int success; + char buf1[BUFSIZE]; + char *p1; + if (leader || do_load_module_filter) open_tmpfile(); set_temporary_radix(radix, &restore_radix); - success = gdb_pass_through(concat_args(buf1, 0, TRUE), NULL, - GNU_RETURN_ON_ERROR); + success = gdb_pass_through(gdb_request, NULL, GNU_RETURN_ON_ERROR); if (success && (leader || do_load_module_filter)) { int firstline; if (leader) { - fprintf(pc->saved_fp, "%s", buf2); + fprintf(pc->saved_fp, "%s = ", leader); fflush(pc->saved_fp); } @@ -6482,8 +6492,7 @@ cmd_p(void) restore_current_radix(restore_radix); if (!success) - error(FATAL, "gdb request failed: %s\n", - concat_args(buf1, 0, TRUE)); + error(FATAL, "gdb request failed: %s\n", gdb_request); } /*
-- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility