aboutsummaryrefslogtreecommitdiff
path: root/sys/ddb
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2022-01-07 16:25:33 +0000
committerWarner Losh <imp@FreeBSD.org>2022-01-07 16:25:33 +0000
commitd6c0538dae8d138219dfd051994a44c50e741212 (patch)
tree7b7112ffe8424b93f068539805fa1b28675129e6 /sys/ddb
parent1d85ab6b86f0f0fe67488acbb6a8b95b08c87906 (diff)
downloadsrc-d6c0538dae8d138219dfd051994a44c50e741212.tar.gz
src-d6c0538dae8d138219dfd051994a44c50e741212.zip
ddb: Remove SOFTWARE_SSTEP support
It was needed for mips only, and only kinda sorta worked for mips. It can be brought back if we grow another architecture that need it. Sponsored by: Netflix
Diffstat (limited to 'sys/ddb')
-rw-r--r--sys/ddb/db_break.c35
-rw-r--r--sys/ddb/db_break.h6
-rw-r--r--sys/ddb/db_run.c108
3 files changed, 0 insertions, 149 deletions
diff --git a/sys/ddb/db_break.c b/sys/ddb/db_break.c
index 9da67238951b..d373d6be4318 100644
--- a/sys/ddb/db_break.c
+++ b/sys/ddb/db_break.c
@@ -204,41 +204,6 @@ db_clear_breakpoints(void)
}
}
-#ifdef SOFTWARE_SSTEP
-/*
- * Set a temporary breakpoint.
- * The instruction is changed immediately,
- * so the breakpoint does not have to be on the breakpoint list.
- */
-db_breakpoint_t
-db_set_temp_breakpoint(db_addr_t addr)
-{
- register db_breakpoint_t bkpt;
-
- bkpt = db_breakpoint_alloc();
- if (bkpt == 0) {
- db_printf("Too many breakpoints.\n");
- return 0;
- }
-
- bkpt->map = NULL;
- bkpt->address = addr;
- bkpt->flags = BKPT_TEMP;
- bkpt->init_count = 1;
- bkpt->count = 1;
-
- BKPT_WRITE(bkpt->address, &bkpt->bkpt_inst);
- return bkpt;
-}
-
-void
-db_delete_temp_breakpoint(db_breakpoint_t bkpt)
-{
- BKPT_CLEAR(bkpt->address, &bkpt->bkpt_inst);
- db_breakpoint_free(bkpt);
-}
-#endif /* SOFTWARE_SSTEP */
-
/*
* List breakpoints.
*/
diff --git a/sys/ddb/db_break.h b/sys/ddb/db_break.h
index 2d3283cc1529..70fc75abd5ae 100644
--- a/sys/ddb/db_break.h
+++ b/sys/ddb/db_break.h
@@ -57,13 +57,7 @@ struct db_breakpoint {
typedef struct db_breakpoint *db_breakpoint_t;
void db_clear_breakpoints(void);
-#ifdef SOFTWARE_SSTEP
-void db_delete_temp_breakpoint(db_breakpoint_t);
-#endif
db_breakpoint_t db_find_breakpoint_here(db_addr_t addr);
void db_set_breakpoints(void);
-#ifdef SOFTWARE_SSTEP
-db_breakpoint_t db_set_temp_breakpoint(db_addr_t);
-#endif
#endif /* !_DDB_DB_BREAK_H_ */
diff --git a/sys/ddb/db_run.c b/sys/ddb/db_run.c
index c9ea87fca79c..f003508f7736 100644
--- a/sys/ddb/db_run.c
+++ b/sys/ddb/db_run.c
@@ -70,30 +70,6 @@ int db_inst_count;
int db_load_count;
int db_store_count;
-#ifdef SOFTWARE_SSTEP
-db_breakpoint_t db_not_taken_bkpt = 0;
-db_breakpoint_t db_taken_bkpt = 0;
-#endif
-
-#ifndef db_set_single_step
-void db_set_single_step(void);
-#endif
-#ifndef db_clear_single_step
-void db_clear_single_step(void);
-#endif
-#ifndef db_pc_is_singlestep
-static bool
-db_pc_is_singlestep(db_addr_t pc)
-{
-#ifdef SOFTWARE_SSTEP
- if ((db_not_taken_bkpt != 0 && pc == db_not_taken_bkpt->address)
- || (db_taken_bkpt != 0 && pc == db_taken_bkpt->address))
- return (true);
-#endif
- return (false);
-}
-#endif
-
bool
db_stop_at_pc(int type, int code, bool *is_breakpoint, bool *is_watchpoint)
{
@@ -103,8 +79,6 @@ db_stop_at_pc(int type, int code, bool *is_breakpoint, bool *is_watchpoint)
*is_breakpoint = IS_BREAKPOINT_TRAP(type, code);
*is_watchpoint = IS_WATCHPOINT_TRAP(type, code);
pc = PC_REGS();
- if (db_pc_is_singlestep(pc))
- *is_breakpoint = false;
db_clear_single_step();
db_clear_breakpoints();
@@ -230,23 +204,10 @@ db_restart_at_pc(bool watchpt)
* We are about to execute this instruction,
* so count it now.
*/
-#ifdef SOFTWARE_SSTEP
- db_expr_t ins =
-#endif
db_get_value(pc, sizeof(int), false);
db_inst_count++;
db_load_count += inst_load(ins);
db_store_count += inst_store(ins);
-#ifdef SOFTWARE_SSTEP
- /* XXX works on mips, but... */
- if (inst_branch(ins) || inst_call(ins)) {
- ins = db_get_value(next_instr_address(pc,1),
- sizeof(int), false);
- db_inst_count++;
- db_load_count += inst_load(ins);
- db_store_count += inst_store(ins);
- }
-#endif /* SOFTWARE_SSTEP */
}
if (db_run_mode == STEP_CONTINUE) {
@@ -265,75 +226,6 @@ db_restart_at_pc(bool watchpt)
}
}
-#ifdef SOFTWARE_SSTEP
-/*
- * Software implementation of single-stepping.
- * If your machine does not have a trace mode
- * similar to the vax or sun ones you can use
- * this implementation, done for the mips.
- * Just define the above conditional and provide
- * the functions/macros defined below.
- *
- * extern bool
- * inst_branch(), returns true if the instruction might branch
- * extern unsigned
- * branch_taken(), return the address the instruction might
- * branch to
- * db_getreg_val(); return the value of a user register,
- * as indicated in the hardware instruction
- * encoding, e.g. 8 for r8
- *
- * next_instr_address(pc,bd) returns the address of the first
- * instruction following the one at "pc",
- * which is either in the taken path of
- * the branch (bd==1) or not. This is
- * for machines (mips) with branch delays.
- *
- * A single-step may involve at most 2 breakpoints -
- * one for branch-not-taken and one for branch taken.
- * If one of these addresses does not already have a breakpoint,
- * we allocate a breakpoint and save it here.
- * These breakpoints are deleted on return.
- */
-
-void
-db_set_single_step(void)
-{
- db_addr_t pc = PC_REGS(), brpc;
- unsigned inst;
-
- /*
- * User was stopped at pc, e.g. the instruction
- * at pc was not executed.
- */
- inst = db_get_value(pc, sizeof(int), false);
- if (inst_branch(inst) || inst_call(inst) || inst_return(inst)) {
- brpc = branch_taken(inst, pc);
- if (brpc != pc) { /* self-branches are hopeless */
- db_taken_bkpt = db_set_temp_breakpoint(brpc);
- }
- pc = next_instr_address(pc, 1);
- }
- pc = next_instr_address(pc, 0);
- db_not_taken_bkpt = db_set_temp_breakpoint(pc);
-}
-
-void
-db_clear_single_step(void)
-{
-
- if (db_not_taken_bkpt != 0) {
- db_delete_temp_breakpoint(db_not_taken_bkpt);
- db_not_taken_bkpt = 0;
- }
- if (db_taken_bkpt != 0) {
- db_delete_temp_breakpoint(db_taken_bkpt);
- db_taken_bkpt = 0;
- }
-}
-
-#endif /* SOFTWARE_SSTEP */
-
/* single-step */
/*ARGSUSED*/
void