Tom,
My compile and link on ia64 was broken. I guess my attention to kgdb ml was
remiss lately. It builds now and was tested on MP ia64 box.
Finish removing hardware breakpoint support. Later, reintroduce in ia64.patch
which won't be included in -mm related kgdb work.
thanks,
bob
Signed-off-by: Bob Picco <[EMAIL PROTECTED]>
arch/ia64/kernel/kgdb.c | 187 ------------------------------------------------
1 file changed, 187 deletions(-)
Index: linux-2.6-kgdb-testing.git/arch/ia64/kernel/kgdb.c
===================================================================
--- linux-2.6-kgdb-testing.git.orig/arch/ia64/kernel/kgdb.c 2006-09-26
11:38:36.000000000 -0400
+++ linux-2.6-kgdb-testing.git/arch/ia64/kernel/kgdb.c 2006-09-26
14:25:07.000000000 -0400
@@ -576,190 +576,6 @@ int kgdb_arch_remove_breakpoint(unsigned
return kgdb_set_mem((char *)addr, (char *)bundle, BREAK_INSTR_SIZE);
}
-static int hw_breakpoint_init;
-
-void do_init_hw_break(void)
-{
- s64 status;
- int i;
-
- hw_breakpoint_init = 1;
-
-#ifdef CONFIG_IA64_HP_SIM
- hw_break_total_ibr = 8;
- hw_break_total_dbr = 8;
- status = 0;
-#else
- status = ia64_pal_debug_info(&hw_break_total_ibr, &hw_break_total_dbr);
-#endif
-
- if (status) {
- printk(KERN_INFO "do_init_hw_break: pal call failed %d\n",
- (int)status);
- return;
- }
-
- if (HW_BREAKPOINT > MAX_HW_BREAKPOINT) {
- printk(KERN_INFO "do_init_hw_break: %d exceeds max %d\n",
- (int)HW_BREAKPOINT, (int)MAX_HW_BREAKPOINT);
-
- while ((HW_BREAKPOINT > MAX_HW_BREAKPOINT)
- && hw_break_total_ibr != 1)
- hw_break_total_ibr--;
- while (HW_BREAKPOINT > MAX_HW_BREAKPOINT)
- hw_break_total_dbr--;
- }
-
- breakinfo = hwbreaks;
-
- memset(breakinfo, 0, HW_BREAKPOINT * sizeof(struct hw_breakpoint));
-
- for (i = 0; i < hw_break_total_dbr; i++)
- breakinfo[i].capable = HWCAP_DBR;
-
- for (; i < HW_BREAKPOINT; i++)
- breakinfo[i].capable = HWCAP_IBR;
-
- return;
-}
-
-void kgdb_correct_hw_break(void)
-{
- int breakno;
-
- if (!breakinfo)
- return;
-
- for (breakno = 0; breakno < HW_BREAKPOINT; breakno++) {
- if (breakinfo[breakno].enabled) {
- if (breakinfo[breakno].capable & HWCAP_IBR) {
- int ibreakno = breakno - hw_break_total_dbr;
- ia64_set_ibr(ibreakno << 1,
- breakinfo[breakno].addr);
- ia64_set_ibr((ibreakno << 1) + 1,
- (~breakinfo[breakno].mask &
- ((1UL << 56UL) - 1)) |
- (1UL << 56UL) | (1UL << 63UL));
- } else {
- ia64_set_dbr(breakno << 1,
- breakinfo[breakno].addr);
- ia64_set_dbr((breakno << 1) + 1,
- (~breakinfo[breakno].
- mask & ((1UL << 56UL) - 1)) |
- (1UL << 56UL) |
- (breakinfo[breakno].type << 62UL));
- }
- } else {
- if (breakinfo[breakno].capable & HWCAP_IBR)
- ia64_set_ibr(((breakno -
- hw_break_total_dbr) << 1) + 1,
- 0);
- else
- ia64_set_dbr((breakno << 1) + 1, 0);
- }
- }
-
- return;
-}
-
-int hardware_breakpoint(unsigned long addr, int length, int type, int action)
-{
- int breakno, found, watch;
- unsigned long mask;
- extern unsigned long _start[];
-
- if (!hw_breakpoint_init)
- do_init_hw_break();
-
- if (!breakinfo)
- return 0;
- else if (addr == (unsigned long)_start)
- return 1;
-
- if (type == WATCH_ACCESS)
- mask = HWCAP_DBR;
- else
- mask = 1UL << type;
-
- for (watch = 0, found = 0, breakno = 0; breakno < HW_BREAKPOINT;
- breakno++) {
- if (action) {
- if (breakinfo[breakno].enabled
- || !(breakinfo[breakno].capable & mask))
- continue;
- breakinfo[breakno].enabled = 1;
- breakinfo[breakno].type = type;
- breakinfo[breakno].mask = length - 1;
- breakinfo[breakno].addr = addr;
- watch = breakno;
- } else if (breakinfo[breakno].enabled &&
- ((length < 0 && breakinfo[breakno].addr == addr) ||
- ((breakinfo[breakno].capable & mask) &&
- (breakinfo[breakno].mask == (length - 1)) &&
- (breakinfo[breakno].addr == addr)))) {
- breakinfo[breakno].enabled = 0;
- breakinfo[breakno].type = 0UL;
- } else
- continue;
- found++;
- if (type != WATCH_ACCESS)
- break;
- else if (found == 2)
- break;
- else
- mask = HWCAP_IBR;
- }
-
- if (type == WATCH_ACCESS && found == 1) {
- breakinfo[watch].enabled = 0;
- found = 0;
- }
-
- mb();
- return found;
-}
-
-int kgdb_arch_set_hw_breakpoint(unsigned long addr, int len,
- enum kgdb_bptype type)
-{
- return hardware_breakpoint(addr, len, type - '1', 1);
-}
-
-int kgdb_arch_remove_hw_breakpoint(unsigned long addr, int len,
- enum kgdb_bptype type)
-{
- return hardware_breakpoint(addr, len, type - '1', 0);
-}
-
-int kgdb_remove_hw_break(unsigned long addr)
-{
- return hardware_breakpoint(addr, 8, WATCH_INSTRUCTION, 0);
-
-}
-
-void kgdb_remove_all_hw_break(void)
-{
- int i;
-
- for (i = 0; i < HW_BREAKPOINT; i++)
- memset(&breakinfo[i], 0, sizeof(struct hw_breakpoint));
-}
-
-int kgdb_set_hw_break(unsigned long addr)
-{
- return hardware_breakpoint(addr, 8, WATCH_INSTRUCTION, 1);
-}
-
-void kgdb_disable_hw_debug(struct pt_regs *regs)
-{
- unsigned long hw_breakpoint_status;
-
- hw_breakpoint_status = ia64_getreg(_IA64_REG_PSR);
- if (hw_breakpoint_status & IA64_PSR_DB)
- ia64_setreg(_IA64_REG_PSR_L,
- hw_breakpoint_status ^ IA64_PSR_DB);
-}
-
volatile static struct smp_unw {
struct unw_frame_info *unw;
struct task_struct *task;
@@ -1124,8 +940,5 @@ static void do_kgdb_handle_exception(str
}
struct kgdb_arch arch_kgdb_ops = {
- .set_hw_breakpoint = kgdb_arch_set_hw_breakpoint,
- .remove_hw_breakpoint = kgdb_arch_remove_hw_breakpoint,
.gdb_bpt_instr = {0xcc},
- .flags = KGDB_HW_BREAKPOINT,
};
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Kgdb-bugreport mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/kgdb-bugreport