On Mon, Jul 12, 2021 at 08:18:20PM +0200, Mark Kettenis wrote:
> > Date: Mon, 12 Jul 2021 20:11:30 +0200
> > From: Jasper Lievisse Adriaanse <[email protected]>
> >
> > 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...
Good point, there's no reason to cap narg at 6 any longer unless
db_ctf_func_numargs()
failed. Here's the diff for amd64. Other platforms could benefit from the
",..." approach but those'll be separate diffs.
OK?
Index: 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
--- db_trace.c 14 May 2020 06:58:54 -0000 1.53
+++ db_trace.c 30 Aug 2021 08:44:36 -0000
@@ -164,8 +164,7 @@ db_stack_trace_print(db_expr_t addr, int
}
}
- narg = db_ctf_func_numargs(sym);
- if (narg < 0 || narg > 6)
+ if ((narg = db_ctf_func_numargs(sym)) < 0)
narg = 6;
if (name == NULL)