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 ',...'? Index: 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 --- amd64/amd64/db_trace.c 14 May 2020 06:58:54 -0000 1.53 +++ amd64/amd64/db_trace.c 11 Jul 2021 13:23:04 -0000 @@ -137,7 +136,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 +164,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) { + extra_args = narg % 6; narg = 6; + } if (name == NULL) (*pr)("%lx(", callpc); @@ -204,6 +207,9 @@ db_stack_trace_print(db_expr_t addr, int if (--narg != 0) (*pr)(","); } + for (i = extra_args; i > 0; i--) + (*pr)(",..."); + (*pr)(") at "); db_printsym(callpc, DB_STGY_PROC, pr); (*pr)("\n"); Index: 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 --- powerpc/ddb/db_trace.c 14 May 2020 06:58:54 -0000 1.17 +++ powerpc/ddb/db_trace.c 11 Jul 2021 13:23:04 -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) { + extra_args = narg % 8; + narg = 8; + } (*pr)("%s(", name); @@ -172,6 +176,9 @@ db_stack_trace_print(db_expr_t addr, int (*pr)(","); } } + + for (i = extra_args; i > 0; i--) + (*pr)(",..."); (*pr)(") at "); db_printsym(lr - 4, DB_STGY_PROC, pr); -- jasper