> Date: Mon, 12 Jul 2021 20:11:30 +0200
> From: Jasper Lievisse Adriaanse <j...@jasper.la>
> 
> On Sun, Jul 11, 2021 at 03:58:05PM +0200, Jasper Lievisse Adriaanse wrote:
> > Hi,
> > 
> > When printing a trace from ddb, some architectures are limited by the 
> > number of
> > registers which are used to pass arguments. If the number of arguments to a 
> > function
> > exceeded this number, the code in db_stack_trace_print() would print that 
> > many arguments
> > without any indication that one or more arguments aren't printed.
> > 
> > Here's a diff that tweaks the output to make it clear there were more 
> > arguments.
> > Do we want to print ',...' for each ommited argument (like this diff does)
> > or perhaps just a single ',...'?
> 
> I think just printing a single instance of ',...' gets the point across.
> OK?

Actually, since we use -msave-args on amd64 the arguments are saved on
the stack.  I think this means there is no limit on the number of
arguments we can print...

> Index: arch/amd64/amd64/db_trace.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/amd64/amd64/db_trace.c,v
> retrieving revision 1.53
> diff -u -p -r1.53 db_trace.c
> --- arch/amd64/amd64/db_trace.c       14 May 2020 06:58:54 -0000      1.53
> +++ arch/amd64/amd64/db_trace.c       12 Jul 2021 18:08:21 -0000
> @@ -137,7 +137,7 @@ db_stack_trace_print(db_expr_t addr, int
>  
>       lastframe = 0;
>       while (count && frame != 0) {
> -             int             narg;
> +             int             narg, extra_args = 0;
>               unsigned int    i;
>               char *          name;
>               db_expr_t       offset;
> @@ -165,8 +165,12 @@ db_stack_trace_print(db_expr_t addr, int
>               }
>  
>               narg = db_ctf_func_numargs(sym);
> -             if (narg < 0 || narg > 6)
> +             if (narg < 0)
>                       narg = 6;
> +             else if (narg > 6) {
> +                     narg = 6;
> +                     extra_args = 1;
> +             }
>  
>               if (name == NULL)
>                       (*pr)("%lx(", callpc);
> @@ -204,6 +208,10 @@ db_stack_trace_print(db_expr_t addr, int
>                       if (--narg != 0)
>                               (*pr)(",");
>               }
> +
> +             if (extra_args)
> +                     (*pr)(",...");
> +
>               (*pr)(") at ");
>               db_printsym(callpc, DB_STGY_PROC, pr);
>               (*pr)("\n");
> Index: arch/powerpc/ddb/db_trace.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/powerpc/ddb/db_trace.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 db_trace.c
> --- arch/powerpc/ddb/db_trace.c       14 May 2020 06:58:54 -0000      1.17
> +++ arch/powerpc/ddb/db_trace.c       12 Jul 2021 18:08:21 -0000
> @@ -123,7 +123,7 @@ db_stack_trace_print(db_expr_t addr, int
>       Elf_Sym         *sym;
>       char            *name;
>       char             c, *cp = modif;
> -     int              i, narg, trace_proc = 0;
> +     int              i, narg, trace_proc = 0, extra_args = 0;
>  
>       while ((c = *cp++) != 0) {
>               if (c == 't')
> @@ -158,8 +158,12 @@ db_stack_trace_print(db_expr_t addr, int
>                       (*pr)("at 0x%lx", lr - 4);
>               } else {
>                       narg = db_ctf_func_numargs(sym);
> -                     if (narg < 0 || narg > 8)
> +                     if (narg < 0)
>                               narg = 8;
> +                     else if (narg > 8) {
> +                             narg = 8;
> +                             extra_args = 1;
> +                     }
>  
>                       (*pr)("%s(", name);
>  
> @@ -172,6 +176,9 @@ db_stack_trace_print(db_expr_t addr, int
>                                               (*pr)(",");
>                               }
>                       }
> +
> +                     if (extra_args)
> +                             (*pr)(",...");
>  
>                       (*pr)(") at ");
>                       db_printsym(lr - 4, DB_STGY_PROC, pr);
> 
> -- 
> jasper
> 
> 

Reply via email to