Module Name: src Committed By: skrll Date: Sat Nov 23 12:03:56 UTC 2024
Modified Files: src/sys/arch/riscv/conf: files.riscv src/sys/arch/riscv/riscv: db_machdep.c Added Files: src/sys/arch/riscv/riscv: db_memrw.c Log Message: risc-v: split db_{read,write}_bytes from db_machdep.c Another step towards crash(8) support To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/arch/riscv/conf/files.riscv cvs rdiff -u -r1.12 -r1.13 src/sys/arch/riscv/riscv/db_machdep.c cvs rdiff -u -r0 -r1.1 src/sys/arch/riscv/riscv/db_memrw.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/riscv/conf/files.riscv diff -u src/sys/arch/riscv/conf/files.riscv:1.15 src/sys/arch/riscv/conf/files.riscv:1.16 --- src/sys/arch/riscv/conf/files.riscv:1.15 Sat Apr 6 10:08:54 2024 +++ src/sys/arch/riscv/conf/files.riscv Sat Nov 23 12:03:55 2024 @@ -1,4 +1,4 @@ -# $NetBSD: files.riscv,v 1.15 2024/04/06 10:08:54 skrll Exp $ +# $NetBSD: files.riscv,v 1.16 2024/11/23 12:03:55 skrll Exp $ # maxpartitions 16 @@ -33,6 +33,7 @@ file arch/riscv/riscv/cpu_switch.S file arch/riscv/riscv/db_interface.c ddb file arch/riscv/riscv/db_disasm.c ddb file arch/riscv/riscv/db_machdep.c ddb | kgdb +file arch/riscv/riscv/db_memrw.c ddb | kgdb file arch/riscv/riscv/db_trace.c ddb file arch/riscv/riscv/exec_machdep.c file arch/riscv/riscv/fixup.c Index: src/sys/arch/riscv/riscv/db_machdep.c diff -u src/sys/arch/riscv/riscv/db_machdep.c:1.12 src/sys/arch/riscv/riscv/db_machdep.c:1.13 --- src/sys/arch/riscv/riscv/db_machdep.c:1.12 Sat Nov 23 11:37:43 2024 +++ src/sys/arch/riscv/riscv/db_machdep.c Sat Nov 23 12:03:55 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: db_machdep.c,v 1.12 2024/11/23 11:37:43 skrll Exp $ */ +/* $NetBSD: db_machdep.c,v 1.13 2024/11/23 12:03:55 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> -__RCSID("$NetBSD: db_machdep.c,v 1.12 2024/11/23 11:37:43 skrll Exp $"); +__RCSID("$NetBSD: db_machdep.c,v 1.13 2024/11/23 12:03:55 skrll Exp $"); #include <sys/param.h> @@ -220,58 +220,3 @@ next_instr_address(db_addr_t pc, bool bd { return pc + (bdslot_p ? 0 : 4); } - -void -db_read_bytes(db_addr_t addr, size_t len, char *data) -{ - const char *src = (char *)addr; - int err; - - /* If asked to fetch from userspace, do it safely */ - if ((intptr_t)addr >= 0) { - err = copyin(src, data, len); - if (err) { -#ifdef DDB - db_printf("address %p is invalid\n", src); -#endif - memset(data, 0, len); - } - return; - } - - while (len--) { - *data++ = *src++; - } -} - -/* - * Write bytes to kernel address space for debugger. - */ -void -db_write_bytes(vaddr_t addr, size_t len, const char *data) -{ - int err; - - /* If asked to fetch from userspace, do it safely */ - if ((intptr_t)addr >= 0) { - err = copyout(data, (char *)addr, len); - if (err) { -#ifdef DDB - db_printf("address %p is invalid\n", (char *)addr); -#endif - } - return; - } - - if (len == 8) { - *(uint64_t *)addr = *(const uint64_t *) data; - } else if (len == 4) { - *(uint32_t *)addr = *(const uint32_t *) data; - } else if (len == 2) { - *(uint16_t *)addr = *(const uint16_t *) data; - } else { - KASSERT(len == 1); - *(uint8_t *)addr = *(const uint8_t *) data; - } - __asm("fence rw,rw; fence.i"); -} Added files: Index: src/sys/arch/riscv/riscv/db_memrw.c diff -u /dev/null src/sys/arch/riscv/riscv/db_memrw.c:1.1 --- /dev/null Sat Nov 23 12:03:56 2024 +++ src/sys/arch/riscv/riscv/db_memrw.c Sat Nov 23 12:03:55 2024 @@ -0,0 +1,97 @@ +/* $NetBSD: db_memrw.c,v 1.1 2024/11/23 12:03:55 skrll Exp $ */ + +/*- + * Copyright (c) 2014 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> + +__RCSID("$NetBSD: db_memrw.c,v 1.1 2024/11/23 12:03:55 skrll Exp $"); + +#include <sys/param.h> + +#include <riscv/db_machdep.h> + +#include <ddb/db_access.h> +#include <ddb/db_output.h> + + +void +db_read_bytes(db_addr_t addr, size_t len, char *data) +{ + const char *src = (char *)addr; + int err; + + /* If asked to fetch from userspace, do it safely */ + if ((intptr_t)addr >= 0) { + err = copyin(src, data, len); + if (err) { +#ifdef DDB + db_printf("address %p is invalid\n", src); +#endif + memset(data, 0, len); + } + return; + } + + while (len--) { + *data++ = *src++; + } +} + +/* + * Write bytes to kernel address space for debugger. + */ +void +db_write_bytes(vaddr_t addr, size_t len, const char *data) +{ + int err; + + /* If asked to fetch from userspace, do it safely */ + if ((intptr_t)addr >= 0) { + err = copyout(data, (char *)addr, len); + if (err) { +#ifdef DDB + db_printf("address %p is invalid\n", (char *)addr); +#endif + } + return; + } + + if (len == 8) { + *(uint64_t *)addr = *(const uint64_t *) data; + } else if (len == 4) { + *(uint32_t *)addr = *(const uint32_t *) data; + } else if (len == 2) { + *(uint16_t *)addr = *(const uint16_t *) data; + } else { + KASSERT(len == 1); + *(uint8_t *)addr = *(const uint8_t *) data; + } + __asm("fence rw,rw; fence.i"); +}