Dave,
On Wed, Mar 6, 2013 at 10:04 PM, Dave Anderson <anderson(a)redhat.com> wrote:
----- Original Message -----
> Hi Dave,
>
> Current when pass integer type to gdb_get_datatype in crash, it would return
> req->typecode=0 and req->length=0.
>
> As it only allow TYPE_CODE_ENUM to be passed. here is a patch for fixing it.
> Do you think it could be merged?
That's the OP_VAR_VALUE section -- what is the command that you're using that
ends up passing an integer type to the function? And what problem does it
cause?
I enhance whatis command in my local code base to show the function's
original variant
name.
If not with my change, the original result is:
int schedule_delayed_work_on(int , struct delayed_work * , long unsigned int );
With my change, the result becomes:
int schedule_delayed_work_on(int cpu, struct delayed_work * dwork,
long unsigned int delay);
So it look nicer, right? :)
But I meet an issue that whatis is not intent for showing function
prototype only, but for
structure/union/integer type.
So I need to add arg_to_datatype in whatis_variable to tell the passed
data's type to whether
call gdb's function for exacting out the function parameter's name.
Then I face the bug as I reported...
Dave
Thanks,
Lei
>
> +--- gdb-7.3.1/gdb/symtab.c
> ++++ gdb-7.3.1/gdb/symtab.c
> +@@ -5064,14 +5064,13 @@ gdb_get_datatype(struct gnu_request *req)
> + if (gdb_CRASHDEBUG(2))
> + console("expr->elts[0].opcode:
> OP_VAR_VALUE\n");
> + type = expr->elts[2].symbol->type;
> +- if (TYPE_CODE(type) == TYPE_CODE_ENUM) {
> +- req->typecode = TYPE_CODE(type);
> +- req->value =
> SYMBOL_VALUE(expr->elts[2].symbol);
> +- req->tagname = TYPE_TAG_NAME(type);
> +- if (!req->tagname) {
> +- val = evaluate_type(expr);
> +- eval_enum(value_type(val), req);
> +- }
> ++ req->typecode = TYPE_CODE(type);
> ++ req->length = TYPE_LENGTH(type);
> ++ req->value = SYMBOL_VALUE(expr->elts[2].symbol);
> ++ req->tagname = TYPE_TAG_NAME(type);
> ++ if (!req->tagname) {
> ++ val = evaluate_type(expr);
> ++ eval_enum(value_type(val), req);
> + }
> + break;
> +
>
> Thanks,
> Lei
>