Index: alpha-osf1-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/alpha-osf1-tdep.c,v retrieving revision 1.5 diff -c -3 -p -r1.5 alpha-osf1-tdep.c *** alpha-osf1-tdep.c 21 May 2002 15:36:02 -0000 1.5 --- alpha-osf1-tdep.c 18 Jul 2002 20:29:34 -0000 *************** alpha_osf1_init_abi (struct gdbarch_info *** 58,63 **** --- 58,67 ---- struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); set_gdbarch_pc_in_sigtramp (gdbarch, alpha_osf1_pc_in_sigtramp); + /* The next/step support via procfs on OSF1 is broken when running + on multi-processor machines. We need to use software single stepping + instead. */ + set_gdbarch_software_single_step (gdbarch, alpha_software_single_step); tdep->skip_sigtramp_frame = alpha_osf1_skip_sigtramp_frame; tdep->sigcontext_addr = alpha_osf1_sigcontext_addr; Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.63 diff -c -3 -p -r1.63 infrun.c *** infrun.c 18 Jul 2002 17:53:49 -0000 1.63 --- infrun.c 18 Jul 2002 20:29:36 -0000 *************** handle_inferior_event (struct execution_ *** 1826,1835 **** if (stop_signal == TARGET_SIGNAL_TRAP) { ! if (SOFTWARE_SINGLE_STEP_P () && singlestep_breakpoints_inserted_p) ! ecs->random_signal = 0; ! else if (breakpoints_inserted ! && breakpoint_here_p (stop_pc - DECR_PC_AFTER_BREAK)) { ecs->random_signal = 0; if (!breakpoint_thread_match (stop_pc - DECR_PC_AFTER_BREAK, --- 1826,1836 ---- if (stop_signal == TARGET_SIGNAL_TRAP) { ! /* Check if a regular breakpoint has been hit before checking ! for a potential single step breakpoint. Otherwise, GDB will ! not see this breakpoint hit when stepping onto breakpoints. */ ! if (breakpoints_inserted ! && breakpoint_here_p (stop_pc - DECR_PC_AFTER_BREAK)) { ecs->random_signal = 0; if (!breakpoint_thread_match (stop_pc - DECR_PC_AFTER_BREAK, *************** handle_inferior_event (struct execution_ *** 1885,1890 **** --- 1886,1901 ---- } } } + else if (SOFTWARE_SINGLE_STEP_P () && singlestep_breakpoints_inserted_p) + { + /* Readjust the stop_pc as it is off by DECR_PC_AFTER_BREAK + compared to the value it would have if the system stepping + capability was used. This allows the rest of the code in + this function to use this address without having to worry + whether software single step is in use or not. */ + stop_pc -= DECR_PC_AFTER_BREAK; + ecs->random_signal = 0; + } } else ecs->random_signal = 1; Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.78 diff -c -3 -p -r1.78 breakpoint.c *** breakpoint.c 26 Jun 2002 05:20:04 -0000 1.78 --- breakpoint.c 18 Jul 2002 20:29:42 -0000 *************** bpstat_stop_status (CORE_ADDR *pc, int n *** 2429,2436 **** trap event. For a trace/singlestep trap event, we would not want to subtract DECR_PC_AFTER_BREAK from the PC. */ ! bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P () ? ! 0 : DECR_PC_AFTER_BREAK); ALL_BREAKPOINTS_SAFE (b, temp) { --- 2429,2435 ---- trap event. For a trace/singlestep trap event, we would not want to subtract DECR_PC_AFTER_BREAK from the PC. */ ! bp_addr = *pc - (not_a_breakpoint ? 0 : DECR_PC_AFTER_BREAK); ALL_BREAKPOINTS_SAFE (b, temp) {