Index | Thread | Search

From:
Scott Cheloha <scottcheloha@gmail.com>
Subject:
Re: ddb(4): db_read_bytes, db_write_bytes: change data parameter to void pointer
To:
tech@openbsd.org
Date:
Mon, 12 Feb 2024 13:39:29 -0600

Download raw body.

Thread
On Thu, Feb 08, 2024 at 10:01:43AM -0600, Scott Cheloha wrote:
> Almost all db_read_bytes/db_write_bytes callers cast the data
> parameter to a "char *", which suggests that the function prototypes
> don't match how the functions are actually used.
> 
> Change the data parameter to db_read_bytes/db_write/bytes from
> "char *" to "void *", update all implementations to use a "char *"
> internally, and update all callers to remove the casts.
> 
> While we're updating the callers, we can also change any magic sizes
> to sizeof.

Updated patch.

- Fix a few db_write_bytes() implementations I missed during the first
  pass.

Index: ./ddb/db_access.h
===================================================================
RCS file: /cvs/src/sys/ddb/db_access.h,v
diff -u -p -r1.11 db_access.h
--- ./ddb/db_access.h	20 Jan 2020 15:58:23 -0000	1.11
+++ ./ddb/db_access.h	12 Feb 2024 19:37:05 -0000
@@ -36,5 +36,5 @@
 db_expr_t db_get_value(vaddr_t, size_t, int);
 void db_put_value(vaddr_t, size_t, db_expr_t);
 
-void db_read_bytes(vaddr_t, size_t, char *);
-void db_write_bytes(vaddr_t, size_t, char *);
+void db_read_bytes(vaddr_t, size_t, void *);
+void db_write_bytes(vaddr_t, size_t, void *);
Index: ./arch/alpha/alpha/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/alpha/alpha/db_interface.c,v
diff -u -p -r1.28 db_interface.c
--- ./arch/alpha/alpha/db_interface.c	14 Apr 2022 19:47:10 -0000	1.28
+++ ./arch/alpha/alpha/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -188,12 +188,12 @@ ddb_trap(a0, a1, a2, entry, regs)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(addr, size, data)
+db_read_bytes(addr, size, datap)
 	vaddr_t		addr;
 	register size_t	size;
-	register char	*data;
+	register void	*datap;
 {
-	register char	*src;
+	register char	*data = datap, *src;
 
 	src = (char *)addr;
 	while (size-- > 0)
@@ -207,9 +207,9 @@ void
 db_write_bytes(addr, size, data)
 	vaddr_t		addr;
 	register size_t	size;
-	register char	*data;
+	register void	*datap;
 {
-	register char	*dst;
+	register char	*data = datap, *dst;
 
 	dst = (char *)addr;
 	while (size-- > 0)
Index: ./arch/amd64/amd64/db_memrw.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/db_memrw.c,v
diff -u -p -r1.8 db_memrw.c
--- ./arch/amd64/amd64/db_memrw.c	30 Apr 2017 13:04:49 -0000	1.8
+++ ./arch/amd64/amd64/db_memrw.c	12 Feb 2024 19:37:05 -0000
@@ -60,9 +60,9 @@
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char *src;
+	char *data = datap, *src;
 
 	src = (char *)addr;
 
@@ -90,12 +90,12 @@ db_read_bytes(vaddr_t addr, size_t size,
  * pages writable temporarily.
  */
 static void
-db_write_text(vaddr_t addr, size_t size, char *data)
+db_write_text(vaddr_t addr, size_t size, void *datap)
 {
 	pt_entry_t *pte, oldpte, tmppte;
 	vaddr_t pgva;
 	size_t limit;
-	char *dst;
+	char *data = datap, *dst;
 
 	if (size == 0)
 		return;
@@ -160,10 +160,10 @@ db_write_text(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	extern char etext;
-	char *dst;
+	char *data = datap, *dst;
 
 	/* If any part is in kernel text, use db_write_text() */
 	if (addr >= KERNBASE && addr < (vaddr_t)&etext) {
Index: ./arch/arm/arm/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/arm/arm/db_interface.c,v
diff -u -p -r1.20 db_interface.c
--- ./arch/arm/arm/db_interface.c	15 Oct 2022 08:04:02 -0000	1.20
+++ ./arch/arm/arm/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -182,9 +182,9 @@ db_validate_address(vaddr_t addr)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*src = (char *)addr;
+	char *data = datap, *src = (char *)addr;
 
 	if (db_validate_address((u_int)src)) {
 		db_printf("address %p is invalid\n", src);
@@ -301,11 +301,11 @@ db_write_text(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	extern char etext[];
 	extern char kernel_text[];
-	char *dst;
+	char *data = datap, *dst;
 	size_t loop;
 
 	/* If any part is in kernel text, use db_write_text() */
@@ -434,7 +434,7 @@ db_branch_taken(u_int insn, vaddr_t pc, 
 	case 0x7:	/* ldr pc, [pc, reg, lsl #2] */
 		addr = db_fetch_reg(insn & 0xf, db_regs);
 		addr = pc + 8 + (addr << 2);
-		db_read_bytes(addr, 4, (char *)&addr);
+		db_read_bytes(addr, sizeof(addr), &addr);
 		return (addr);
 	case 0x1:	/* mov pc, reg */
 		addr = db_fetch_reg(insn & 0xf, db_regs);
@@ -460,7 +460,7 @@ db_branch_taken(u_int insn, vaddr_t pc, 
 			addr = addr + 4 + ((nregs - 1) << 2);
 			break;
 		}
-		db_read_bytes(addr, 4, (char *)&addr);
+		db_read_bytes(addr, sizeof(addr), &addr);
 		return (addr);
 	default:
 		panic("branch_taken: botch");
Index: ./arch/arm64/arm64/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/arm64/db_interface.c,v
diff -u -p -r1.14 db_interface.c
--- ./arch/arm64/arm64/db_interface.c	7 Nov 2022 09:43:04 -0000	1.14
+++ ./arch/arm64/arm64/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -197,9 +197,9 @@ db_validate_address(vaddr_t addr)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*src = (char *)addr;
+	char *data = datap, *src = (char *)addr;
 
 	if (db_validate_address((vaddr_t)src)) {
 		db_printf("address %p is invalid\n", src);
@@ -235,11 +235,11 @@ db_read_bytes(vaddr_t addr, size_t size,
  * pages writable temporarily.
  */
 static void
-db_write_text(vaddr_t addr, size_t size, char *data)
+db_write_text(vaddr_t addr, size_t size, void *datap)
 {
 	vaddr_t pgva;
 	size_t limit;
-	char *dst;
+	char *data = datap, *dst;
 
 	if (size == 0)
 		return;
@@ -277,10 +277,10 @@ db_write_text(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	extern char etext[];
-	char *dst;
+	char *data = datap, *dst;
 	size_t loop;
 
 	/* If any part is in kernel text, use db_write_text() */
Index: arch/arm64/arm64/db_trace.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/arm64/db_trace.c,v
diff -u -p -r1.15 db_trace.c
--- arch/arm64/arm64/db_trace.c	17 Jun 2023 08:13:56 -0000	1.15
+++ arch/arm64/arm64/db_trace.c	12 Feb 2024 19:37:05 -0000
@@ -86,10 +86,8 @@ db_stack_trace_print(db_expr_t addr, int
 			lastlr =  p->p_addr->u_pcb.pcb_tf->tf_elr;
 		} else {
 			sp = addr;
-			db_read_bytes(sp, sizeof(vaddr_t),
-			    (char *)&frame);
-			db_read_bytes(sp + 8, sizeof(vaddr_t),
-			    (char *)&lr);
+			db_read_bytes(sp, sizeof(frame), &frame);
+			db_read_bytes(sp + 8, sizeof(lr), &lr);
 			lastlr = 0;
 		}
 	}
@@ -109,11 +107,11 @@ db_stack_trace_print(db_expr_t addr, int
 		(*pr)("\n");
 
 		// can we detect traps ?
-		db_read_bytes(frame, sizeof(vaddr_t), (char *)&frame);
+		db_read_bytes(frame, sizeof(frame), &frame);
 		if (frame == 0)
 			break;
 		lastlr = lr;
-		db_read_bytes(frame + 8, sizeof(vaddr_t), (char *)&lr);
+		db_read_bytes(frame + 8, sizeof(lr), &lr);
 
 		if (name != NULL) {
 			if ((strcmp (name, "handle_el0_irq") == 0) ||
Index: ./arch/hppa/hppa/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/hppa/hppa/db_interface.c,v
diff -u -p -r1.49 db_interface.c
--- ./arch/hppa/hppa/db_interface.c	26 Apr 2023 16:53:58 -0000	1.49
+++ ./arch/hppa/hppa/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -134,8 +134,9 @@ db_enter(void)
 }
 
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
 	register char *src = (char *)addr;
 
 	while (size--)
@@ -143,8 +144,9 @@ db_read_bytes(vaddr_t addr, size_t size,
 }
 
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
 	register char *dst = (char *)addr;
 
 	while (size--)
Index: ./arch/i386/i386/db_memrw.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/db_memrw.c,v
diff -u -p -r1.18 db_memrw.c
--- ./arch/i386/i386/db_memrw.c	23 Sep 2020 15:13:26 -0000	1.18
+++ ./arch/i386/i386/db_memrw.c	12 Feb 2024 19:37:05 -0000
@@ -50,9 +50,9 @@
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*src;
+	char *data = datap, *src;
 
 	src = (char *)addr;
 	while (size-- > 0)
@@ -136,9 +136,9 @@ db_write_text(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*dst;
+	char *data = datap, *dst;
 	extern char	etext;
 
 	if (addr >= VM_MIN_KERNEL_ADDRESS &&
Index: ./arch/m88k/m88k/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/m88k/m88k/db_interface.c,v
diff -u -p -r1.28 db_interface.c
--- ./arch/m88k/m88k/db_interface.c	14 Apr 2022 19:47:11 -0000	1.28
+++ ./arch/m88k/m88k/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -487,9 +487,9 @@ ddb_entry_trap(level, eframe)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char *src;
+	char *data = datap, *src;
 
 	src = (char *)addr;
 
@@ -502,10 +502,10 @@ db_read_bytes(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	extern pt_entry_t *pmap_pte(pmap_t, vaddr_t);
-	char *dst = (char *)addr;
+	char *data = datap, *dst = (char *)addr;
 	vaddr_t va;
 	paddr_t pa;
 	pt_entry_t *pte, opte, npte;
Index: arch/m88k/m88k/db_sstep.c
===================================================================
RCS file: /cvs/src/sys/arch/m88k/m88k/db_sstep.c,v
diff -u -p -r1.8 db_sstep.c
--- arch/m88k/m88k/db_sstep.c	8 Nov 2019 15:01:15 -0000	1.8
+++ arch/m88k/m88k/db_sstep.c	12 Feb 2024 19:37:05 -0000
@@ -149,7 +149,7 @@ db_set_single_step(db_regs_t *regs)
 		 * User was stopped at pc, e.g. the instruction
 		 * at pc was not executed.
 		 */
-		db_read_bytes(pc, sizeof(inst), (caddr_t)&inst);
+		db_read_bytes(pc, sizeof(inst), &inst);
 
 		/*
 		 * Find if this instruction may cause a branch, and set up a
Index: arch/m88k/m88k/db_trace.c
===================================================================
RCS file: /cvs/src/sys/arch/m88k/m88k/db_trace.c,v
diff -u -p -r1.19 db_trace.c
--- arch/m88k/m88k/db_trace.c	11 Apr 2023 00:45:07 -0000	1.19
+++ arch/m88k/m88k/db_trace.c	12 Feb 2024 19:37:05 -0000
@@ -286,7 +286,7 @@ db_trace_get_val(vaddr_t addr, u_int *pt
 		db_recover = prev;
 		return 0;
 	} else {
-		db_read_bytes(addr, 4, (char *)ptr);
+		db_read_bytes(addr, sizeof(*ptr), ptr);
 		db_recover = prev;
 		return 1;
 	}
@@ -772,7 +772,7 @@ db_stack_trace_cmd2(db_regs_t *regs, int
 		    badaddr((vaddr_t)(stack + 4), 4))
 			break;
 
-		db_read_bytes((vaddr_t)stack, 2 * sizeof(int), (char *)pair);
+		db_read_bytes((vaddr_t)stack, sizeof(pair), pair);
 
 		/* the pairs should match and equal stack+8 */
 		if (pair[0] == pair[1]) {
Index: ./arch/mips64/mips64/db_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/mips64/mips64/db_machdep.c,v
diff -u -p -r1.60 db_machdep.c
--- ./arch/mips64/mips64/db_machdep.c	11 Jan 2023 03:17:56 -0000	1.60
+++ ./arch/mips64/mips64/db_machdep.c	12 Feb 2024 19:37:05 -0000
@@ -281,8 +281,10 @@ db_cpuinfo_cmd(db_expr_t addr, int have_
 #endif
 
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
+
 	while (size >= sizeof(uint32_t)) {
 		*(uint32_t *)data = kdbpeek(addr);
 		data += sizeof(uint32_t);
@@ -302,8 +304,9 @@ db_read_bytes(vaddr_t addr, size_t size,
 }
 
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
 	vaddr_t ptr = addr;
 	size_t len = size;
 
Index: ./arch/powerpc/ddb/db_memrw.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/ddb/db_memrw.c,v
diff -u -p -r1.6 db_memrw.c
--- ./arch/powerpc/ddb/db_memrw.c	15 Oct 2022 08:04:02 -0000	1.6
+++ ./arch/powerpc/ddb/db_memrw.c	12 Feb 2024 19:37:05 -0000
@@ -53,9 +53,9 @@
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*src = (char *)addr;
+	char *data = datap, *src = (char *)addr;
 	faultbuf env;
 	faultbuf *old_onfault = curpcb->pcb_onfault;
 	if (setfault(&env)) {
@@ -80,9 +80,9 @@ db_read_bytes(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*dst = (char *)addr;
+	char *data = datap, *dst = (char *)addr;
 	faultbuf env;
 	faultbuf *old_onfault = curpcb->pcb_onfault;
 
Index: arch/powerpc/ddb/db_trace.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc/ddb/db_trace.c,v
diff -u -p -r1.20 db_trace.c
--- arch/powerpc/ddb/db_trace.c	26 Apr 2023 16:53:59 -0000	1.20
+++ arch/powerpc/ddb/db_trace.c	12 Feb 2024 19:37:05 -0000
@@ -158,7 +158,7 @@ db_stack_trace_print(db_expr_t addr, int
 			addr = p->p_addr->u_pcb.pcb_sp;
 		}
 		sp = addr;
-		db_read_bytes(sp + 4, sizeof(vaddr_t), (char *)&lr);
+		db_read_bytes(sp + 4, sizeof(lr), &lr);
 	}
 
 	while (count && sp != 0) {
@@ -213,11 +213,11 @@ db_stack_trace_print(db_expr_t addr, int
 				(*pr)("--- trap (type 0x%x) ---\n", type);
 		}
 
-		db_read_bytes(sp, sizeof(vaddr_t), (char *)&sp);
+		db_read_bytes(sp, sizeof(sp), &sp);
 		if (sp == 0)
 			break;
 
-		db_read_bytes(sp + 4, sizeof(vaddr_t), (char *)&lr);
+		db_read_bytes(sp + 4, sizeof(lr), &lr);
 
 		if (INKERNEL(sp)) {
 			if (sp <= lastsp) {
Index: ./arch/powerpc64/powerpc64/db_memrw.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/powerpc64/db_memrw.c,v
diff -u -p -r1.2 db_memrw.c
--- ./arch/powerpc64/powerpc64/db_memrw.c	12 Jun 2020 22:01:01 -0000	1.2
+++ ./arch/powerpc64/powerpc64/db_memrw.c	12 Feb 2024 19:37:05 -0000
@@ -46,9 +46,9 @@
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char *src;
+	char *data = datap, *src;
 
 	src = (char *)addr;
 
@@ -136,10 +136,10 @@ db_write_text(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	extern char _start[], _etext[];
-	char *dst;
+	char *data = datap, *dst;
 
 	/* If any part is in kernel text, use db_write_text() */
 	if (addr >= (vaddr_t)_start && addr < (vaddr_t)_etext) {
Index: arch/powerpc64/powerpc64/db_trace.c
===================================================================
RCS file: /cvs/src/sys/arch/powerpc64/powerpc64/db_trace.c,v
diff -u -p -r1.9 db_trace.c
--- arch/powerpc64/powerpc64/db_trace.c	26 Apr 2023 16:53:59 -0000	1.9
+++ arch/powerpc64/powerpc64/db_trace.c	12 Feb 2024 19:37:05 -0000
@@ -120,8 +120,8 @@ db_stack_trace_print(db_expr_t addr, int
 		} else
 			sp = addr;
 		/* The 1st return address is in the 2nd frame. */
-		db_read_bytes(sp, sizeof(vaddr_t), (char *)&sp);
-		db_read_bytes(sp + 16, sizeof(vaddr_t), (char *)&lr);
+		db_read_bytes(sp, sizeof(sp), &sp);
+		db_read_bytes(sp + 16, sizeof(lr), &lr);
 		callpc = lr - 4;
 		has_frame = 1;
 	}
@@ -138,8 +138,7 @@ db_stack_trace_print(db_expr_t addr, int
 			iaddr = sym->st_value;
 			limit = MIN(iaddr + 0x100, callpc);
 			for (; iaddr < limit; iaddr += 4) {
-				db_read_bytes(iaddr, sizeof(ins),
-				    (char *)&ins);
+				db_read_bytes(iaddr, sizeof(ins), &ins);
 				if (inst_establish_frame(ins)) {
 					has_frame = 1;
 					break;
@@ -178,14 +177,14 @@ db_stack_trace_print(db_expr_t addr, int
 			lr = ddb_regs.lr;
 			has_frame = 1;
 		} else {
-			db_read_bytes(sp, sizeof(vaddr_t), (char *)&sp);
+			db_read_bytes(sp, sizeof(sp), &sp);
 			if (sp == 0)
 				break;
 			if (sp <= lastsp) {
 				(*pr)("Bad frame pointer: 0x%lx\n", sp);
 				break;
 			}
-			db_read_bytes(sp + 16, sizeof(vaddr_t), (char *)&lr);
+			db_read_bytes(sp + 16, sizeof(lr), &lr);
 		}
 		callpc = lr - 4;
 
Index: ./arch/riscv64/riscv64/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/riscv64/riscv64/db_interface.c,v
diff -u -p -r1.8 db_interface.c
--- ./arch/riscv64/riscv64/db_interface.c	14 Apr 2022 19:47:11 -0000	1.8
+++ ./arch/riscv64/riscv64/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -179,9 +179,9 @@ db_validate_address(vaddr_t addr)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char	*src = (char *)addr;
+	char *data = datap, *src = (char *)addr;
 
 	if (db_validate_address((vaddr_t)src)) {
 		db_printf("address %p is invalid\n", src);
@@ -217,7 +217,7 @@ db_read_bytes(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
 	// XXX
 }
Index: arch/riscv64/riscv64/db_trace.c
===================================================================
RCS file: /cvs/src/sys/arch/riscv64/riscv64/db_trace.c,v
diff -u -p -r1.5 db_trace.c
--- arch/riscv64/riscv64/db_trace.c	22 Feb 2022 07:46:04 -0000	1.5
+++ arch/riscv64/riscv64/db_trace.c	12 Feb 2024 19:37:05 -0000
@@ -74,8 +74,8 @@ db_stack_trace_print(db_expr_t addr, int
 		ra = ddb_regs.tf_ra;
 		frame = ddb_regs.tf_s[0];
 	} else {
-		db_read_bytes(addr - 16, sizeof(vaddr_t), (char *)&frame);
-		db_read_bytes(addr - 8, sizeof(vaddr_t), (char *)&ra);
+		db_read_bytes(addr - 16, sizeof(frame), &frame);
+		db_read_bytes(addr - 8, sizeof(ra), &ra);
 	}
 
 	while (count != 0 && frame != 0) {
@@ -109,20 +109,18 @@ db_stack_trace_print(db_expr_t addr, int
 		    subr == (vaddr_t)cpu_exception_handler_user) {
 			struct trapframe *tf = (struct trapframe *)frame;
 
-			db_read_bytes((vaddr_t)&tf->tf_ra, sizeof(ra),
-			    (char *)&ra);
+			db_read_bytes((vaddr_t)&tf->tf_ra, sizeof(ra), &ra);
 			db_read_bytes((vaddr_t)&tf->tf_s[0], sizeof(frame),
-			    (char *)&frame);
+			    &frame);
 		} else {
-			db_read_bytes(frame - 16, sizeof(frame),
-			    (char *)&frame);
+			db_read_bytes(frame - 16, sizeof(frame), &frame);
 			if (frame == 0)
 				break;
 			if ((frame & 0x7) != 0) {
 				(*pr)("bad frame pointer: 0x%lx\n", frame);
 				break;
 			}
-			db_read_bytes(frame - 8, sizeof(ra), (char *)&ra);
+			db_read_bytes(frame - 8, sizeof(ra), &ra);
 		}
 
 		if (INKERNEL(frame)) {
Index: ./arch/sh/sh/db_memrw.c
===================================================================
RCS file: /cvs/src/sys/arch/sh/sh/db_memrw.c,v
diff -u -p -r1.1.1.1 db_memrw.c
--- ./arch/sh/sh/db_memrw.c	6 Oct 2006 21:02:55 -0000	1.1.1.1
+++ ./arch/sh/sh/db_memrw.c	12 Feb 2024 19:37:05 -0000
@@ -49,9 +49,9 @@
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char *src = (char *)addr;
+	char *data = datap, *src = (char *)addr;
 
 	/* properly aligned 4-byte */
 	if (size == 4 && ((addr & 3) == 0) && (((uintptr_t)data & 3) == 0)) {
@@ -73,9 +73,9 @@ db_read_bytes(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
-	char *dst = (char *)addr;
+	char *data = datap, *dst = (char *)addr;
 
 	/* properly aligned 4-byte */
 	if (size == 4 && ((addr & 3) == 0) && (((uintptr_t)data & 3) == 0)) {
Index: ./arch/sparc64/sparc64/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/sparc64/db_interface.c,v
diff -u -p -r1.61 db_interface.c
--- ./arch/sparc64/sparc64/db_interface.c	31 Jan 2023 15:18:55 -0000	1.61
+++ ./arch/sparc64/sparc64/db_interface.c	12 Feb 2024 19:37:05 -0000
@@ -523,8 +523,9 @@ db_stopcpu(struct cpu_info *ci)
  * Read bytes from kernel address space for debugger.
  */
 void
-db_read_bytes(vaddr_t addr, size_t size, char *data)
+db_read_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
 	register char	*src;
 
 	src = (char *)addr;
@@ -541,8 +542,9 @@ db_read_bytes(vaddr_t addr, size_t size,
  * Write bytes to kernel address space for debugger.
  */
 void
-db_write_bytes(vaddr_t addr, size_t size, char *data)
+db_write_bytes(vaddr_t addr, size_t size, void *datap)
 {
+	char *data = datap;
 	register char	*dst;
 	extern vaddr_t ktext;
 	extern paddr_t ktextp;