PERFORCE change 57102 for review
Robert Watson
rwatson at FreeBSD.org
Sun Jul 11 11:39:20 PDT 2004
http://perforce.freebsd.org/chv.cgi?CH=57102
Change 57102 by rwatson at rwatson_tislabs on 2004/07/11 18:38:21
Integrate netperf_socket:
- KDB changes
- Add additional soreceive() comments.
- Break out soreceive_rcvoob() from soreceive().
Affected files ...
.. //depot/projects/netperf_socket/sys/alpha/alpha/alpha-gdbstub.c#2 delete
.. //depot/projects/netperf_socket/sys/alpha/alpha/api_up1000.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/db_disasm.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/db_interface.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/db_trace.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_1000a.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_2100_a50.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_2100_a500.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_axppci_33.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_eb164.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_eb64plus.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_kn20aa.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_kn300.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_st550.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/dec_st6600.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/interrupt.c#5 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/machdep.c#7 integrate
.. //depot/projects/netperf_socket/sys/alpha/alpha/trap.c#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/conf/GENERIC#4 integrate
.. //depot/projects/netperf_socket/sys/alpha/conf/GENERIC.hints#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/conf/NOTES#2 integrate
.. //depot/projects/netperf_socket/sys/alpha/include/db_machdep.h#2 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/amd64-gdbstub.c#2 delete
.. //depot/projects/netperf_socket/sys/amd64/amd64/db_interface.c#4 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/db_trace.c#3 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/machdep.c#10 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/support.S#7 integrate
.. //depot/projects/netperf_socket/sys/amd64/amd64/trap.c#7 integrate
.. //depot/projects/netperf_socket/sys/amd64/conf/GENERIC#9 integrate
.. //depot/projects/netperf_socket/sys/amd64/include/db_machdep.h#2 integrate
.. //depot/projects/netperf_socket/sys/amd64/include/frame.h#3 integrate
.. //depot/projects/netperf_socket/sys/amd64/isa/clock.c#5 integrate
.. //depot/projects/netperf_socket/sys/compat/ndis/kern_ndis.c#16 integrate
.. //depot/projects/netperf_socket/sys/compat/ndis/ndis_var.h#8 integrate
.. //depot/projects/netperf_socket/sys/compat/ndis/subr_ndis.c#12 integrate
.. //depot/projects/netperf_socket/sys/conf/NOTES#27 integrate
.. //depot/projects/netperf_socket/sys/conf/files#38 integrate
.. //depot/projects/netperf_socket/sys/conf/files.alpha#6 integrate
.. //depot/projects/netperf_socket/sys/conf/files.amd64#11 integrate
.. //depot/projects/netperf_socket/sys/conf/files.i386#20 integrate
.. //depot/projects/netperf_socket/sys/conf/files.ia64#5 integrate
.. //depot/projects/netperf_socket/sys/conf/files.pc98#12 integrate
.. //depot/projects/netperf_socket/sys/conf/files.powerpc#4 integrate
.. //depot/projects/netperf_socket/sys/conf/files.sparc64#6 integrate
.. //depot/projects/netperf_socket/sys/conf/options#20 integrate
.. //depot/projects/netperf_socket/sys/conf/options.alpha#2 integrate
.. //depot/projects/netperf_socket/sys/contrib/ipfilter/netinet/ip_fil.c#5 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_access.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_break.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_command.c#3 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_elf.c#3 delete
.. //depot/projects/netperf_socket/sys/ddb/db_kld.c#2 delete
.. //depot/projects/netperf_socket/sys/ddb/db_main.c#1 branch
.. //depot/projects/netperf_socket/sys/ddb/db_output.c#3 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_print.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_ps.c#4 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_run.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_sysctl.c#2 delete
.. //depot/projects/netperf_socket/sys/ddb/db_thread.c#1 branch
.. //depot/projects/netperf_socket/sys/ddb/db_trap.c#2 delete
.. //depot/projects/netperf_socket/sys/ddb/db_variables.c#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/db_variables.h#2 integrate
.. //depot/projects/netperf_socket/sys/ddb/ddb.h#2 integrate
.. //depot/projects/netperf_socket/sys/dev/cx/if_cx.c#12 integrate
.. //depot/projects/netperf_socket/sys/dev/cy/cy.c#11 integrate
.. //depot/projects/netperf_socket/sys/dev/digi/digi.c#11 integrate
.. //depot/projects/netperf_socket/sys/dev/digi/digi.h#4 integrate
.. //depot/projects/netperf_socket/sys/dev/fdc/fdc_pccard.c#2 integrate
.. //depot/projects/netperf_socket/sys/dev/gfb/gfb_pci.c#4 integrate
.. //depot/projects/netperf_socket/sys/dev/if_ndis/if_ndis_pccard.c#6 integrate
.. //depot/projects/netperf_socket/sys/dev/if_ndis/if_ndis_pci.c#7 integrate
.. //depot/projects/netperf_socket/sys/dev/if_ndis/if_ndisvar.h#7 integrate
.. //depot/projects/netperf_socket/sys/dev/rc/rc.c#10 integrate
.. //depot/projects/netperf_socket/sys/dev/rp/rp.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/rp/rpvar.h#2 integrate
.. //depot/projects/netperf_socket/sys/dev/si/si.c#9 integrate
.. //depot/projects/netperf_socket/sys/dev/si/si.h#3 integrate
.. //depot/projects/netperf_socket/sys/dev/sio/sio.c#17 integrate
.. //depot/projects/netperf_socket/sys/dev/sx/sx.c#8 integrate
.. //depot/projects/netperf_socket/sys/dev/sx/sx.h#3 integrate
.. //depot/projects/netperf_socket/sys/dev/syscons/syscons.c#8 integrate
.. //depot/projects/netperf_socket/sys/doc/Doxyfile#1 branch
.. //depot/projects/netperf_socket/sys/doc/Makefile#1 branch
.. //depot/projects/netperf_socket/sys/i386/conf/GENERIC#8 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/db_interface.c#5 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/db_trace.c#2 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/i386-gdbstub.c#2 delete
.. //depot/projects/netperf_socket/sys/i386/i386/machdep.c#9 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/trap.c#5 integrate
.. //depot/projects/netperf_socket/sys/i386/include/db_machdep.h#2 integrate
.. //depot/projects/netperf_socket/sys/i386/include/frame.h#3 integrate
.. //depot/projects/netperf_socket/sys/i386/isa/clock.c#6 integrate
.. //depot/projects/netperf_socket/sys/ia64/conf/GENERIC#4 integrate
.. //depot/projects/netperf_socket/sys/ia64/conf/SKI#3 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/db_interface.c#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/db_trace.c#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/ia64-gdbstub.c#2 delete
.. //depot/projects/netperf_socket/sys/ia64/ia64/machdep.c#6 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/trap.c#6 integrate
.. //depot/projects/netperf_socket/sys/ia64/ia64/unwind.c#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/include/db_machdep.h#2 integrate
.. //depot/projects/netperf_socket/sys/ia64/include/md_var.h#3 integrate
.. //depot/projects/netperf_socket/sys/ia64/include/unwind.h#2 integrate
.. //depot/projects/netperf_socket/sys/kern/device_if.m#2 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_kdb.c#2 integrate
.. //depot/projects/netperf_socket/sys/kern/tty.c#12 integrate
.. //depot/projects/netperf_socket/sys/kern/uipc_socket.c#30 integrate
.. //depot/projects/netperf_socket/sys/modules/uart/Makefile#4 integrate
.. //depot/projects/netperf_socket/sys/pc98/conf/GENERIC#7 integrate
.. //depot/projects/netperf_socket/sys/pc98/i386/machdep.c#7 integrate
.. //depot/projects/netperf_socket/sys/pc98/pc98/clock.c#6 integrate
.. //depot/projects/netperf_socket/sys/pc98/pc98/sio.c#15 integrate
.. //depot/projects/netperf_socket/sys/sparc64/conf/GENERIC#6 integrate
.. //depot/projects/netperf_socket/sys/sparc64/conf/NOTES#5 integrate
.. //depot/projects/netperf_socket/sys/sparc64/include/db_machdep.h#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/include/frame.h#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/pci/psycho.c#7 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/db_interface.c#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/db_trace.c#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/machdep.c#4 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/mp_machdep.c#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/trap.c#2 integrate
.. //depot/projects/netperf_socket/sys/sys/param.h#18 integrate
.. //depot/projects/netperf_socket/sys/sys/sx.h#3 integrate
.. //depot/projects/netperf_socket/sys/sys/tty.h#10 integrate
.. //depot/projects/netperf_socket/sys/tools/makeobjops.awk#3 integrate
.. //depot/projects/netperf_socket/sys/vm/vm_page.c#10 integrate
Differences ...
==== //depot/projects/netperf_socket/sys/alpha/alpha/api_up1000.c#2 (text+ko) ====
@@ -25,10 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/api_up1000.c,v 1.10 2003/08/25 03:43:07 marcel Exp $");
-
-#include "opt_ddb.h"
-#include "opt_dev_sc.h"
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/api_up1000.c,v 1.11 2004/07/10 22:29:40 marcel Exp $");
#include <sys/param.h>
#include <sys/reboot.h>
@@ -49,18 +46,6 @@
#include <alpha/pci/irongatereg.h>
#include <alpha/pci/irongatevar.h>
-#ifndef NO_SIO
-#ifndef CONSPEED
-#define CONSPEED TTYDEF_SPEED
-#endif
-static int comcnrate = CONSPEED;
-extern int comconsole;
-extern int siocnattach(int, int);
-extern int siogdbattach(int, int);
-#endif
-
-extern int sccnattach(void);
-
void api_up1000_init(void);
static void api_up1000_cons_init(void);
@@ -85,40 +70,15 @@
irongate_init();
-#ifndef NO_SIO
-#ifdef DDB
- siogdbattach(0x2f8, 57600);
-#endif
-#endif
-
ctb = (struct ctb *)(((caddr_t)hwrpb) + hwrpb->rpb_ctb_off);
switch (ctb->ctb_term_type) {
case 2:
-#ifndef NO_SIO
- /* serial console ... */
- /*
- * Delay to allow PROM putchars to complete.
- * FIFO depth * character time,
- * character time = (1000000 / (defaultrate / 10))
- */
- DELAY(160000000 / comcnrate);
- comconsole = 0;
- if (siocnattach(0x3f8, comcnrate))
- panic("can't init serial console");
-
boothowto |= RB_SERIAL;
-#endif
break;
case 3:
- /* display console ... */
- /* XXX */
-#ifdef DEV_SC
- sccnattach();
-#else
- panic("not configured to use display && keyboard console");
-#endif
+ boothowto &= ~RB_SERIAL;
break;
default:
==== //depot/projects/netperf_socket/sys/alpha/alpha/db_disasm.c#2 (text+ko) ====
@@ -46,7 +46,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
/* __KERNEL_RCSID(0, "$NetBSD: db_disasm.c,v 1.4 1997/09/16 22:52:40 thorpej Exp $"); */
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_disasm.c,v 1.9 2003/08/22 07:20:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_disasm.c,v 1.10 2004/07/10 23:47:18 marcel Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -813,26 +813,9 @@
* (optional) alternate format. Return address of start of
* next instruction.
*/
-int alpha_print_instruction(db_addr_t, alpha_instruction, boolean_t);
-db_addr_t
-db_disasm(loc, altfmt)
- db_addr_t loc;
- boolean_t altfmt;
-{
- alpha_instruction inst;
-
- inst.bits = db_get_value(loc, 4, 0);
-
- loc += alpha_print_instruction(loc, inst, altfmt);
- return (loc);
-}
-
-int
-alpha_print_instruction(iadr, i, showregs)
- db_addr_t iadr;
- alpha_instruction i;
- boolean_t showregs;
+static int
+alpha_print_instr(db_addr_t iadr, alpha_instruction i, boolean_t showregs)
{
const char *opcode;
int ireg;
@@ -1038,7 +1021,7 @@
if (i.mem_format.opcode == op_ldah)
signed_immediate <<= 16;
db_printf(" <0x%lx>", signed_immediate +
- db_register_value(DDB_REGS, i.mem_format.rs));
+ db_register_value(i.mem_format.rs));
}
break;
case op_br:
@@ -1084,10 +1067,23 @@
db_printf(",");
db_printf("%s=0x%lx",
name_of_register[regnum[ireg]],
- db_register_value(DDB_REGS, regnum[ireg]));
+ db_register_value(regnum[ireg]));
}
db_printf(">");
}
db_printf("\n");
return (sizeof(alpha_instruction));
}
+
+db_addr_t
+db_disasm(loc, altfmt)
+ db_addr_t loc;
+ boolean_t altfmt;
+{
+ alpha_instruction inst;
+
+ inst.bits = db_get_value(loc, 4, 0);
+
+ loc += alpha_print_instr(loc, inst, altfmt);
+ return (loc);
+}
==== //depot/projects/netperf_socket/sys/alpha/alpha/db_interface.c#2 (text+ko) ====
@@ -47,17 +47,15 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
/* __KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.2 1997/09/16 19:07:19 thorpej Exp $"); */
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_interface.c,v 1.28 2003/08/22 07:20:25 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_interface.c,v 1.29 2004/07/10 23:47:18 marcel Exp $");
#include <sys/param.h>
-#include <sys/proc.h>
-#include <sys/reboot.h>
#include <sys/systm.h>
+#include <sys/cons.h>
+#include <sys/kdb.h>
#include <sys/kernel.h>
-#include <sys/cons.h>
-#include <sys/ktr.h>
-#include <sys/lock.h>
#include <sys/pcpu.h>
+#include <sys/proc.h>
#include <sys/smp.h>
#include <vm/vm.h>
@@ -73,209 +71,104 @@
#include <ddb/db_access.h>
#include <ddb/db_sym.h>
#include <ddb/db_variables.h>
-#include <machine/setjmp.h>
-static jmp_buf *db_nofault = 0;
-extern jmp_buf db_jmpbuf;
+static db_varfcn_t db_frame;
-extern void gdb_handle_exception(db_regs_t *, int, int);
-
-#if 0
-extern char *trap_type[];
-extern int trap_types;
-#endif
-
-int db_active;
-
-void ddbprinttrap(unsigned long, unsigned long, unsigned long,
- unsigned long);
-
struct db_variable db_regs[] = {
- { "v0", &ddb_regs.tf_regs[FRAME_V0], FCN_NULL },
- { "t0", &ddb_regs.tf_regs[FRAME_T0], FCN_NULL },
- { "t1", &ddb_regs.tf_regs[FRAME_T1], FCN_NULL },
- { "t2", &ddb_regs.tf_regs[FRAME_T2], FCN_NULL },
- { "t3", &ddb_regs.tf_regs[FRAME_T3], FCN_NULL },
- { "t4", &ddb_regs.tf_regs[FRAME_T4], FCN_NULL },
- { "t5", &ddb_regs.tf_regs[FRAME_T5], FCN_NULL },
- { "t6", &ddb_regs.tf_regs[FRAME_T6], FCN_NULL },
- { "t7", &ddb_regs.tf_regs[FRAME_T7], FCN_NULL },
- { "s0", &ddb_regs.tf_regs[FRAME_S0], FCN_NULL },
- { "s1", &ddb_regs.tf_regs[FRAME_S1], FCN_NULL },
- { "s2", &ddb_regs.tf_regs[FRAME_S2], FCN_NULL },
- { "s3", &ddb_regs.tf_regs[FRAME_S3], FCN_NULL },
- { "s4", &ddb_regs.tf_regs[FRAME_S4], FCN_NULL },
- { "s5", &ddb_regs.tf_regs[FRAME_S5], FCN_NULL },
- { "s6", &ddb_regs.tf_regs[FRAME_S6], FCN_NULL },
- { "a0", &ddb_regs.tf_regs[FRAME_A0], FCN_NULL },
- { "a1", &ddb_regs.tf_regs[FRAME_A1], FCN_NULL },
- { "a2", &ddb_regs.tf_regs[FRAME_A2], FCN_NULL },
- { "a3", &ddb_regs.tf_regs[FRAME_A3], FCN_NULL },
- { "a4", &ddb_regs.tf_regs[FRAME_A4], FCN_NULL },
- { "a5", &ddb_regs.tf_regs[FRAME_A5], FCN_NULL },
- { "t8", &ddb_regs.tf_regs[FRAME_T8], FCN_NULL },
- { "t9", &ddb_regs.tf_regs[FRAME_T9], FCN_NULL },
- { "t10", &ddb_regs.tf_regs[FRAME_T10], FCN_NULL },
- { "t11", &ddb_regs.tf_regs[FRAME_T11], FCN_NULL },
- { "ra", &ddb_regs.tf_regs[FRAME_RA], FCN_NULL },
- { "t12", &ddb_regs.tf_regs[FRAME_T12], FCN_NULL },
- { "at", &ddb_regs.tf_regs[FRAME_AT], FCN_NULL },
- { "gp", &ddb_regs.tf_regs[FRAME_GP], FCN_NULL },
- { "sp", &ddb_regs.tf_regs[FRAME_SP], FCN_NULL },
- { "pc", &ddb_regs.tf_regs[FRAME_PC], FCN_NULL },
- { "ps", &ddb_regs.tf_regs[FRAME_PS], FCN_NULL },
- { "ai", &ddb_regs.tf_regs[FRAME_T11], FCN_NULL },
- { "pv", &ddb_regs.tf_regs[FRAME_T12], FCN_NULL },
+ { "v0", (db_expr_t *)FRAME_V0, db_frame },
+ { "t0", (db_expr_t *)FRAME_T0, db_frame },
+ { "t1", (db_expr_t *)FRAME_T1, db_frame },
+ { "t2", (db_expr_t *)FRAME_T2, db_frame },
+ { "t3", (db_expr_t *)FRAME_T3, db_frame },
+ { "t4", (db_expr_t *)FRAME_T4, db_frame },
+ { "t5", (db_expr_t *)FRAME_T5, db_frame },
+ { "t6", (db_expr_t *)FRAME_T6, db_frame },
+ { "t7", (db_expr_t *)FRAME_T7, db_frame },
+ { "s0", (db_expr_t *)FRAME_S0, db_frame },
+ { "s1", (db_expr_t *)FRAME_S1, db_frame },
+ { "s2", (db_expr_t *)FRAME_S2, db_frame },
+ { "s3", (db_expr_t *)FRAME_S3, db_frame },
+ { "s4", (db_expr_t *)FRAME_S4, db_frame },
+ { "s5", (db_expr_t *)FRAME_S5, db_frame },
+ { "s6", (db_expr_t *)FRAME_S6, db_frame },
+ { "a0", (db_expr_t *)FRAME_A0, db_frame },
+ { "a1", (db_expr_t *)FRAME_A1, db_frame },
+ { "a2", (db_expr_t *)FRAME_A2, db_frame },
+ { "a3", (db_expr_t *)FRAME_A3, db_frame },
+ { "a4", (db_expr_t *)FRAME_A4, db_frame },
+ { "a5", (db_expr_t *)FRAME_A5, db_frame },
+ { "t8", (db_expr_t *)FRAME_T8, db_frame },
+ { "t9", (db_expr_t *)FRAME_T9, db_frame },
+ { "t10", (db_expr_t *)FRAME_T10, db_frame },
+ { "t11", (db_expr_t *)FRAME_T11, db_frame },
+ { "ra", (db_expr_t *)FRAME_RA, db_frame },
+ { "t12", (db_expr_t *)FRAME_T12, db_frame },
+ { "at", (db_expr_t *)FRAME_AT, db_frame },
+ { "gp", (db_expr_t *)FRAME_GP, db_frame },
+ { "sp", (db_expr_t *)FRAME_SP, db_frame },
+ { "pc", (db_expr_t *)FRAME_PC, db_frame },
+ { "ps", (db_expr_t *)FRAME_PS, db_frame },
+ { "ai", (db_expr_t *)FRAME_T11, db_frame },
+ { "pv", (db_expr_t *)FRAME_T12, db_frame },
};
struct db_variable *db_eregs = db_regs + sizeof(db_regs)/sizeof(db_regs[0]);
-/*
- * Print trap reason.
- */
-void
-ddbprinttrap(a0, a1, a2, entry)
- unsigned long a0, a1, a2, entry;
+static int
+db_frame(struct db_variable *vp, db_expr_t *valuep, int op)
{
- /* XXX Implement. */
-
- printf("ddbprinttrap(0x%lx, 0x%lx, 0x%lx, 0x%lx)\n", a0, a1, a2,
- entry);
+ if (kdb_frame == NULL)
+ return (0);
+ if (op == DB_VAR_GET)
+ *valuep = kdb_frame->tf_regs[(uintptr_t)vp->valuep];
+ else
+ kdb_frame->tf_regs[(uintptr_t)vp->valuep] = *valuep;
+ return (1);
}
/*
- * ddb_trap - field a kernel trap
+ * Read bytes from kernel address space for debugger.
*/
int
-kdb_trap(a0, a1, a2, entry, regs)
- unsigned long a0, a1, a2, entry;
- db_regs_t *regs;
+db_read_bytes(vm_offset_t addr, size_t size, char *data)
{
- int ddb_mode = !(boothowto & RB_GDB);
- register_t s;
+ jmp_buf jb;
+ void *prev_jb;
+ char *src;
+ int ret;
- /*
- * Don't bother checking for usermode, since a benign entry
- * by the kernel (call to Debugger() or a breakpoint) has
- * already checked for usermode. If neither of those
- * conditions exist, something Bad has happened.
- */
-
- if (entry != ALPHA_KENTRY_IF ||
- (a0 != ALPHA_IF_CODE_BUGCHK && a0 != ALPHA_IF_CODE_BPT
- && a0 != ALPHA_IF_CODE_GENTRAP)) {
-#if 0
- if (ddb_mode) {
- db_printf("ddbprinttrap from 0x%lx\n", /* XXX */
- regs->tf_regs[FRAME_PC]);
- ddbprinttrap(a0, a1, a2, entry);
- /*
- * Tell caller "We did NOT handle the trap."
- * Caller should panic, or whatever.
- */
- return (0);
- }
-#endif
- if (db_nofault) {
- jmp_buf *no_fault = db_nofault;
- db_nofault = 0;
- longjmp(*no_fault, 1);
- }
+ prev_jb = kdb_jmpbuf(jb);
+ ret = setjmp(jb);
+ if (ret == 0) {
+ src = (char *)addr;
+ while (size-- > 0)
+ *data++ = *src++;
}
-
- /*
- * XXX Should switch to DDB's own stack, here.
- */
-
- ddb_regs = *regs;
-
- s = intr_disable();
-
-#ifdef SMP
-#ifdef DIAGNOSTIC
- db_printf("stopping %x\n", PCPU_GET(other_cpus));
-#endif
- stop_cpus(PCPU_GET(other_cpus));
-#ifdef DIAGNOSTIC
- db_printf("stopped_cpus=%x\n", stopped_cpus);
-#endif
-#endif
-
- db_active++;
-
- if (ddb_mode) {
- cndbctl(TRUE); /* DDB active, unblank video */
- db_trap(entry, a0); /* Where the work happens */
- cndbctl(FALSE); /* DDB inactive */
- } else
- gdb_handle_exception(&ddb_regs, entry, a0);
-
- db_active--;
-
-#ifdef SMP
- restart_cpus(stopped_cpus);
-#endif
-
- intr_restore(s);
-
- *regs = ddb_regs;
-
- /*
- * Tell caller "We HAVE handled the trap."
- */
- return (1);
+ (void)kdb_jmpbuf(prev_jb);
+ return (ret);
}
/*
- * Read bytes from kernel address space for debugger.
- */
-void
-db_read_bytes(addr, size, data)
- vm_offset_t addr;
- register size_t size;
- register char *data;
-{
- register char *src;
-
- db_nofault = &db_jmpbuf;
-
- src = (char *)addr;
- while (size-- > 0)
- *data++ = *src++;
-
- db_nofault = 0;
-}
-
-/*
* Write bytes to kernel address space for debugger.
*/
-void
-db_write_bytes(addr, size, data)
- vm_offset_t addr;
- register size_t size;
- register char *data;
+int
+db_write_bytes(vm_offset_t addr, size_t size, char *data)
{
- register char *dst;
+ jmp_buf jb;
+ void *prev_jb;
+ char *dst;
+ int ret;
- db_nofault = &db_jmpbuf;
-
- dst = (char *)addr;
- while (size-- > 0)
- *dst++ = *data++;
- alpha_pal_imb();
-
- db_nofault = 0;
-}
-
-void
-Debugger(const char* msg)
-{
- u_int saveintr;
-
- printf("%s\n", msg);
- saveintr = alpha_pal_swpipl(ALPHA_PSL_IPL_HIGH);
- __asm("call_pal 0x81"); /* XXX bugchk */
- alpha_pal_swpipl(saveintr);
+ prev_jb = kdb_jmpbuf(jb);
+ ret = setjmp(jb);
+ if (ret == 0) {
+ dst = (char *)addr;
+ while (size-- > 0)
+ *dst++ = *data++;
+ alpha_pal_imb();
+ }
+ (void)kdb_jmpbuf(prev_jb);
+ return (ret);
}
/*
@@ -338,9 +231,7 @@
};
u_long
-db_register_value(regs, regno)
- db_regs_t *regs;
- int regno;
+db_register_value(int regno)
{
if (regno > 31 || regno < 0) {
@@ -351,7 +242,7 @@
if (regno == 31)
return (0);
- return (regs->tf_regs[reg_to_frame[regno]]);
+ return (kdb_frame->tf_regs[reg_to_frame[regno]]);
}
/*
@@ -446,19 +337,6 @@
return (FALSE);
}
-#if 0
-boolean_t
-db_inst_spill(ins, regn)
- int ins, regn;
-{
- alpha_instruction insn;
-
- insn.bits = ins;
- return ((insn.mem_format.opcode == op_stq) &&
- (insn.mem_format.rd == regn));
-}
-#endif
-
boolean_t
db_inst_load(ins)
int ins;
@@ -520,10 +398,7 @@
}
db_addr_t
-db_branch_taken(ins, pc, regs)
- int ins;
- db_addr_t pc;
- db_regs_t *regs;
+db_branch_taken(int ins, db_addr_t pc)
{
alpha_instruction insn;
db_addr_t newpc;
@@ -534,7 +409,7 @@
* Jump format: target PC is (contents of instruction's "RB") & ~3.
*/
case op_j:
- newpc = db_register_value(regs, insn.jump_format.rs) & ~3;
+ newpc = db_register_value(insn.jump_format.rs) & ~3;
break;
/*
==== //depot/projects/netperf_socket/sys/alpha/alpha/db_trace.c#2 (text+ko) ====
@@ -42,10 +42,11 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
/*__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.9 2000/12/13 03:16:36 mycroft Exp $");*/
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_trace.c,v 1.18 2004/01/04 23:30:47 obrien Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/db_trace.c,v 1.19 2004/07/10 23:47:18 marcel Exp $");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/kdb.h>
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/sysent.h>
@@ -60,11 +61,6 @@
#include <ddb/db_output.h>
#include <alpha/alpha/db_instruction.h>
-struct trace_request {
- register_t ksp;
- register_t pc;
-};
-
/*
* Information about the `standard' Alpha function prologue.
*/
@@ -186,13 +182,15 @@
}
static void
-decode_syscall(int number, struct proc *p)
+decode_syscall(int number, struct thread *td)
{
+ struct proc *p;
c_db_sym_t sym;
db_expr_t diff;
sy_call_t *f;
const char *symname;
+ p = (td != NULL) ? td->td_proc : NULL;
db_printf(" (%d", number);
if (p != NULL && 0 <= number && number < p->p_sysent->sv_size) {
f = p->p_sysent->sv_table[number].sy_call;
@@ -205,99 +203,34 @@
db_printf(")");
}
-void
-db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count, char *modif)
+static int
+db_backtrace(struct thread *td, db_addr_t frame, db_addr_t pc, int count)
{
- db_addr_t callpc = 0, frame = 0, symval;
struct prologue_info pi;
+ struct trapframe *tf;
+ const char *symname;
+ c_db_sym_t sym;
db_expr_t diff;
- c_db_sym_t sym;
+ db_addr_t symval;
+ u_long last_ipl, tfps;
int i;
- u_long tfps;
- const char *symname;
- struct pcb *pcbp;
- struct trapframe *tf = NULL;
- boolean_t ra_from_tf = FALSE;
- boolean_t ra_from_pcb;
- u_long last_ipl = ~0L;
- struct proc *p = NULL;
- struct thread *td = NULL;
- boolean_t have_trapframe = FALSE;
- pid_t pid;
if (count == -1)
- count = 65535;
+ count = 1024;
- if (!have_addr) {
- td = curthread;
- p = td->td_proc;
- addr = DDB_REGS->tf_regs[FRAME_SP] - FRAME_SIZE * 8;
- tf = (struct trapframe *)addr;
- have_trapframe = 1;
- } else if (addr < KERNBASE) {
- pid = (addr % 16) + ((addr >> 4) % 16) * 10 +
- ((addr >> 8) % 16) * 100 + ((addr >> 12) % 16) * 1000 +
- ((addr >> 16) % 16) * 10000;
- /*
- * The pcb for curproc is not valid at this point,
- * so fall back to the default case.
- */
- if (pid == curthread->td_proc->p_pid) {
- td = curthread;
- p = td->td_proc;
- addr = DDB_REGS->tf_regs[FRAME_SP] - FRAME_SIZE * 8;
- tf = (struct trapframe *)addr;
- have_trapframe = 1;
- } else {
- /* sx_slock(&allproc_lock); */
- LIST_FOREACH(p, &allproc, p_list) {
- if (p->p_pid == pid)
- break;
- }
- /* sx_sunlock(&allproc_lock); */
- if (p == NULL) {
- db_printf("pid %d not found\n", pid);
- return;
- }
- if ((p->p_sflag & PS_INMEM) == 0) {
- db_printf("pid %d swapped out\n", pid);
- return;
- }
- pcbp = FIRST_THREAD_IN_PROC(p)->td_pcb; /* XXXKSE */
- addr = (db_expr_t)pcbp->pcb_hw.apcb_ksp;
- callpc = pcbp->pcb_context[7];
- frame = addr;
- }
- } else {
- struct trace_request *tr;
-
- tr = (struct trace_request *)addr;
- if (tr->ksp < KERNBASE || tr->pc < KERNBASE) {
- db_printf("alpha trace requires known PC =eject=\n");
- return;
- }
- callpc = tr->pc;
- addr = tr->ksp;
- frame = addr;
- }
-
+ last_ipl = ~0L;
+ tf = NULL;
while (count--) {
- if (have_trapframe) {
- frame = (db_addr_t)tf + FRAME_SIZE * 8;
- callpc = tf->tf_regs[FRAME_PC];
- ra_from_tf = TRUE;
- have_trapframe = 0;
- }
- sym = db_search_symbol(callpc, DB_STGY_ANY, &diff);
+ sym = db_search_symbol(pc, DB_STGY_ANY, &diff);
if (sym == DB_SYM_NULL)
- break;
+ return (ENOENT);
db_symbol_values(sym, &symname, (db_expr_t *)&symval);
- if (callpc < symval) {
- db_printf("symbol botch: callpc 0x%lx < "
- "func 0x%lx (%s)\n", callpc, symval, symname);
- return;
+ if (pc < symval) {
+ db_printf("symbol botch: pc 0x%lx < "
+ "func 0x%lx (%s)\n", pc, symval, symname);
+ return (0);
}
/*
@@ -328,7 +261,7 @@
* debugger (for serious debugging).
*/
db_printf("%s() at ", symname);
- db_printsym(callpc, DB_STGY_PROC);
+ db_printsym(pc, DB_STGY_PROC);
db_printf("\n");
/*
@@ -337,7 +270,6 @@
*/
if (sym_is_trapsymbol(symval)) {
tf = (struct trapframe *)frame;
-
for (i = 0; special_symbols[i].ss_val != 0; ++i)
if (symval == special_symbols[i].ss_val)
db_printf("--- %s",
@@ -345,7 +277,7 @@
tfps = tf->tf_regs[FRAME_PS];
if (symval == (uintptr_t)&XentSys)
- decode_syscall(tf->tf_regs[FRAME_V0], p);
+ decode_syscall(tf->tf_regs[FRAME_V0], td);
if ((tfps & ALPHA_PSL_IPL_MASK) != last_ipl) {
last_ipl = tfps & ALPHA_PSL_IPL_MASK;
if (symval != (uintptr_t)&XentSys)
@@ -356,7 +288,8 @@
db_printf("--- user mode ---\n");
break; /* Terminate search. */
}
- have_trapframe = 1;
+ frame = (db_addr_t)(tf + 1);
+ pc = tf->tf_regs[FRAME_PC];
continue;
}
@@ -366,8 +299,8 @@
*
* XXX How does this interact w/ alloca()?!
*/
- if (decode_prologue(callpc, symval, &pi))
- return;
+ if (decode_prologue(pc, symval, &pi))
+ return (0);
if ((pi.pi_regmask & (1 << 26)) == 0) {
/*
* No saved RA found. We might have RA from
@@ -375,37 +308,56 @@
* in a leaf call). If not, we've found the
* root of the call graph.
*/
- if (ra_from_tf)
- callpc = tf->tf_regs[FRAME_RA];
+ if (tf)
+ pc = tf->tf_regs[FRAME_RA];
else {
db_printf("--- root of call graph ---\n");
break;
}
} else
- callpc = *(u_long *)(frame + pi.pi_reg_offset[26]);
- ra_from_tf = ra_from_pcb = FALSE;
-#if 0
- /*
- * The call was actually made at RA - 4; the PC is
- * updated before being stored in RA.
- */
- callpc -= 4;
-#endif
+ pc = *(u_long *)(frame + pi.pi_reg_offset[26]);
frame += pi.pi_frame_size;
+ tf = NULL;
+ }
+
+ return (0);
+}
+
+void
+db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count,
+ char *modif)
+{
+ struct thread *td;
+
+ td = (have_addr) ? kdb_thr_lookup(addr) : kdb_thread;
+ if (td == NULL) {
+ db_printf("Thread %d not found\n", (int)addr);
+ return;
}
+ db_trace_thread(td, count);
}
void
-db_print_backtrace(void)
+db_trace_self(void)
{
- struct trace_request tr;
+ register_t pc, sp;
__asm __volatile(
" mov $30,%0 \n"
" lda %1,1f \n"
"1:\n"
- : "=r" (tr.ksp), "=r" (tr.pc));
- db_stack_trace_cmd((db_addr_t)&tr, 1, -1, NULL);
+ : "=r" (sp), "=r" (pc));
+ db_backtrace(curthread, sp, pc, -1);
+}
+
+int
+db_trace_thread(struct thread *thr, int count)
+{
+ struct pcb *ctx;
+
+ ctx = kdb_thr_ctx(thr);
+ return (db_backtrace(thr, ctx->pcb_hw.apcb_ksp, ctx->pcb_context[7],
+ count));
}
int
==== //depot/projects/netperf_socket/sys/alpha/alpha/dec_1000a.c#2 (text+ko) ====
@@ -72,11 +72,8 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/dec_1000a.c,v 1.17 2003/08/25 03:43:07 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/dec_1000a.c,v 1.18 2004/07/10 22:29:40 marcel Exp $");
-#include "opt_ddb.h"
-#include "opt_dev_sc.h"
-
#include <sys/param.h>
#include <sys/reboot.h>
#include <sys/systm.h>
@@ -94,18 +91,6 @@
#include <dev/pci/pcivar.h>
-#ifndef NO_SIO
-#ifndef CONSPEED
-#define CONSPEED TTYDEF_SPEED
-#endif
-static int comcnrate = CONSPEED;
-extern int comconsole;
-extern int siocnattach(int, int);
-extern int siogdbattach(int, int);
-#endif
-
-extern int sccnattach(void);
-
void dec_1000a_init(int);
static void dec_1000a_cons_init(void);
@@ -185,45 +170,15 @@
apecs_init();
}
-#ifndef NO_SIO
-#ifdef DDB
- siogdbattach(0x2f8, 57600);
-#endif
-#endif
-
ctb = (struct ctb *)(((caddr_t)hwrpb) + hwrpb->rpb_ctb_off);
switch (ctb->ctb_term_type) {
case 2:
-#ifndef NO_SIO
- /* serial console ... */
- /*
- * Delay to allow PROM putchars to complete.
- * FIFO depth * character time,
- * character time = (1000000 / (defaultrate / 10)).
- */
- DELAY(160000000 / comcnrate);
-
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list