git: f0a7df4a6cc9 - main - ddb: make db_error reliably no-return
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 09 Jul 2024 18:45:18 UTC
The branch main has been updated by rlibby:
URL: https://cgit.FreeBSD.org/src/commit/?id=f0a7df4a6cc9a795680d580fcabd993379e22ae5
commit f0a7df4a6cc9a795680d580fcabd993379e22ae5
Author: Ryan Libby <rlibby@FreeBSD.org>
AuthorDate: 2024-07-09 17:59:27 +0000
Commit: Ryan Libby <rlibby@FreeBSD.org>
CommitDate: 2024-07-09 17:59:27 +0000
ddb: make db_error reliably no-return
Most code assumes db_error does not return, but according to
kdb_reenter_silent, there may be cases where it could. Instead, panic
if kdb_reenter_silent returns and mark the routine as __dead2. This
addresses gcc warnings.
Reported by: GCC -Wmaybe-uninitialized
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D45918
---
sys/ddb/db_command.c | 1 +
sys/ddb/ddb.h | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c
index f621bd614ca2..1043f7091085 100644
--- a/sys/ddb/db_command.c
+++ b/sys/ddb/db_command.c
@@ -580,6 +580,7 @@ db_error(const char *s)
db_printf("%s", s);
db_flush_lex();
kdb_reenter_silent();
+ panic("%s: did not reenter debugger", __func__);
}
static void
diff --git a/sys/ddb/ddb.h b/sys/ddb/ddb.h
index ab7dab1daa45..8088226c6939 100644
--- a/sys/ddb/ddb.h
+++ b/sys/ddb/ddb.h
@@ -233,7 +233,7 @@ void db_check_interrupt(void);
void db_clear_watchpoints(void);
db_addr_t db_disasm(db_addr_t loc, bool altfmt);
/* instruction disassembler */
-void db_error(const char *s);
+void db_error(const char *s) __dead2;
int db_expression(db_expr_t *valuep);
int db_getc(void);
int db_get_variable(db_expr_t *valuep);