On Wed, Mar 02, 2016 at 12:21:04PM +0100, Martin Pieuchot wrote:
> amd64 is the only arch that defines a function to set/get the value of
> the registers saved when entering ddb(4). This function is only needed
> because db_regs[] contains an offset relative to a trapframe rather than
> an address.
>
> I like the fact that db_regs[] contains an offset rather than an address,
> this should allow us dump any saved trapframe. But I don't think that we
> need a MD function for that. So let's kill the only one left as a first
> step.
>
> ok?
no objections.
-ml
>
> Index: amd64/db_trace.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/amd64/amd64/db_trace.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 db_trace.c
> --- amd64/db_trace.c 1 Mar 2016 21:35:13 -0000 1.16
> +++ amd64/db_trace.c 2 Mar 2016 11:09:42 -0000
> @@ -41,59 +41,32 @@
> #include <ddb/db_variables.h>
> #include <ddb/db_output.h>
>
> -#if 1
> -#define dbreg(xx) (long *)offsetof(db_regs_t, tf_ ## xx)
> -#else
> -#define dbreg(xx) (long *)&ddb_regs.tf_ ## xx
> -#endif
> -
> -static int db_x86_64_regop(struct db_variable *, db_expr_t *, int);
> -
> /*
> * Machine register set.
> */
> struct db_variable db_regs[] = {
> - { "rdi", dbreg(rdi), db_x86_64_regop },
> - { "rsi", dbreg(rsi), db_x86_64_regop },
> - { "rbp", dbreg(rbp), db_x86_64_regop },
> - { "rbx", dbreg(rbx), db_x86_64_regop },
> - { "rdx", dbreg(rdx), db_x86_64_regop },
> - { "rcx", dbreg(rcx), db_x86_64_regop },
> - { "rax", dbreg(rax), db_x86_64_regop },
> - { "r8", dbreg(r8), db_x86_64_regop },
> - { "r9", dbreg(r9), db_x86_64_regop },
> - { "r10", dbreg(r10), db_x86_64_regop },
> - { "r11", dbreg(r11), db_x86_64_regop },
> - { "r12", dbreg(r12), db_x86_64_regop },
> - { "r13", dbreg(r13), db_x86_64_regop },
> - { "r14", dbreg(r14), db_x86_64_regop },
> - { "r15", dbreg(r15), db_x86_64_regop },
> - { "rip", dbreg(rip), db_x86_64_regop },
> - { "cs", dbreg(cs), db_x86_64_regop },
> - { "rflags", dbreg(rflags), db_x86_64_regop },
> - { "rsp", dbreg(rsp), db_x86_64_regop },
> - { "ss", dbreg(ss), db_x86_64_regop },
> + { "rdi", (long *)&ddb_regs.tf_rdi, FCN_NULL },
> + { "rsi", (long *)&ddb_regs.tf_rsi, FCN_NULL },
> + { "rbp", (long *)&ddb_regs.tf_rbp, FCN_NULL },
> + { "rbx", (long *)&ddb_regs.tf_rbx, FCN_NULL },
> + { "rdx", (long *)&ddb_regs.tf_rdx, FCN_NULL },
> + { "rcx", (long *)&ddb_regs.tf_rcx, FCN_NULL },
> + { "rax", (long *)&ddb_regs.tf_rax, FCN_NULL },
> + { "r8", (long *)&ddb_regs.tf_r8, FCN_NULL },
> + { "r9", (long *)&ddb_regs.tf_r9, FCN_NULL },
> + { "r10", (long *)&ddb_regs.tf_r10, FCN_NULL },
> + { "r11", (long *)&ddb_regs.tf_r11, FCN_NULL },
> + { "r12", (long *)&ddb_regs.tf_r12, FCN_NULL },
> + { "r13", (long *)&ddb_regs.tf_r13, FCN_NULL },
> + { "r14", (long *)&ddb_regs.tf_r14, FCN_NULL },
> + { "r15", (long *)&ddb_regs.tf_r15, FCN_NULL },
> + { "rip", (long *)&ddb_regs.tf_rip, FCN_NULL },
> + { "cs", (long *)&ddb_regs.tf_cs, FCN_NULL },
> + { "rflags", (long *)&ddb_regs.tf_rflags, FCN_NULL },
> + { "rsp", (long *)&ddb_regs.tf_rsp, FCN_NULL },
> + { "ss", (long *)&ddb_regs.tf_ss, FCN_NULL },
> };
> struct db_variable * db_eregs = db_regs + nitems(db_regs);
> -
> -static int
> -db_x86_64_regop(struct db_variable *vp, db_expr_t *val, int opcode)
> -{
> - db_expr_t *regaddr =
> - (db_expr_t *)(((uint8_t *)DDB_REGS) + ((size_t)vp->valuep));
> -
> - switch (opcode) {
> - case DB_VAR_GET:
> - *val = *regaddr;
> - break;
> - case DB_VAR_SET:
> - *regaddr = *val;
> - break;
> - default:
> - panic("db_x86_64_regop: unknown op %d", opcode);
> - }
> - return 0;
> -}
>
> /*
> * Stack trace.
>