[Crash-utility] question about kernel module dwarf unwinder support
Dave Anderson
anderson at redhat.com
Mon Sep 30 13:54:45 UTC 2013
----- Original Message -----
> Hi All,
>
> We have ported crash-utility to TileGX arch and it generally works well.
>
> For stack backtrace, we are using dwarf based approach and using
> .debug_frame section.
>
> Currently, the problem is letting dwarf unwinder support kernel module
> (.ko), we have work out this problem by quite ugly way:
>
> * we modified target independent code in kernel.c to invoke new added
> tilegx hook "tilegx_add_module_unwind_table" for "mod -s" command.
>
> diff --git a/kernel.c b/kernel.c
> index 3fc0b68..5f3f2ef 100755
> --- a/kernel.c
> +++ b/kernel.c
> @@ -3760,6 +3760,10 @@ do_module_cmd(ulong flag, char *modref, ulong
> address,
> break;
>
> case LOAD_SPECIFIED_MODULE_SYMBOLS:
> + #ifdef TILEGX
> + if (!tilegx_add_module_unwind_table(modref, objfile, address))
> + error(FATAL, "cannot load debug frame from: %s\n", objfile);
> + #endif
>
>
> * in "tilegx_add_module_unwind_table" we parse .ko file, locate
> .debug_frame/.rela.debug_frame, perform relocation on .debug_frame, then
> add the relocated .debug_frame to module unwind table list. then later,
> the if the pc is in module address space, then module unwind table list
> will be searched instead of kernel unwinder table.
>
> I don't know if this approach will be accepted by the community when we
> return all our TileGX backend. Are there any better approach to support
> kernel module dwarf unwinding that will not affect the target-indepent code?
>
> thanks in advance.
Hello Jiong,
So should I presume that you are ultimately planning to post a complete
patchset that introduces the TILE architecture? I'm not at all familiar
with the processor type, but is there something that would differentiate
TILE and TILEGX?
Anyway, I do try to avoid "#ifdef <ARCH>" if at all possible.
A few questions:
Your patch only makes the call if "mod -s <module>" is used -- but what
if "mod -S" used?
If your call fails, you force "mod -s <module>" to also fail -- do you
really want to do that?
There are a number of places where the subsequent load_module_symbols()
call may fail -- do you still want to accept the data from your function
in that case?
Is it possible that you can call your function after load_module_symbols()
has succeeded? If that is possible, then perhaps you could at least move
your function call location to here in load_module_symbols(), maybe at
line #10050:
10042
10043 add_symbols:
10044 result = add_symbol_file(st->current);
10045
10046 if (CRASHDEBUG(2))
10047 check_for_dups(st->current);
10048
10049 st->current = NULL;
10050
10051 return result;
10052 }
That would also cover the "mod -S" command as well.
Dave Anderson
More information about the Crash-utility
mailing list