298 lines
10 KiB
Plaintext
Executable File
298 lines
10 KiB
Plaintext
Executable File
#ident "@(#)README 1.6 95/06/13 SMI"
|
|
|
|
FILES
|
|
|
|
Makefile - compiles the header files and also the interpreter.
|
|
It also runs forthgen on your *.fdbg files and
|
|
creates the forthdebug file. It will also install the
|
|
forthdebug file in kernel/drv.
|
|
|
|
parser.c - source file
|
|
|
|
stabs.c - source file
|
|
|
|
stabs.h - header file
|
|
|
|
|
|
*.fdbg - a file specifying a struct you are interested in and
|
|
the necessary header files
|
|
|
|
*.fth - generated by forthgen from *.fdbg
|
|
|
|
kdbg.fth - It has the forth program.
|
|
|
|
|
|
forthgen - It is the program that generates the words in *.fth files
|
|
for the structs whose names are specified in *.fdbg files.
|
|
|
|
forthdebug - is the concatenation of kdbg.fth and and all *fth files. This file
|
|
gets installed in kernel/drv and will be read in by the
|
|
kernel during boot up (if obpdebug or fortdebug are set).
|
|
|
|
|
|
Ques: How do I create a word for a struct I am interested in?
|
|
|
|
Ans:
|
|
1) Look in fdbg/*.fdbg files to make sure that it isn't already in the
|
|
debugger.
|
|
|
|
2) If not, then edit one of the existing *.fdbg files or create a new
|
|
file called somename.fdbg - if you think the existing ones don't satisfy
|
|
your needs. Just add the names of the structs you are interested in. If
|
|
you want only certain members of the structs to be printed then add the
|
|
member names and the format wanted below the struct name. Look at the
|
|
*.fdbg files to see how this is done. Remember to check in to SCCS.
|
|
|
|
3) Add the somename file where the struct is defined to the Makefile
|
|
|
|
4) Now do a "make". Look in the file forthdebug to see if words for
|
|
your structs have been created. If not, go back to step 2.
|
|
|
|
5) Install(1) will pick up forthdebug and install in kernel/misc
|
|
|
|
Ques: How do I add forth words?
|
|
|
|
Ans: In the .fdbg file - of your choice - type in the following
|
|
|
|
|
|
forth_start
|
|
|
|
type words here
|
|
|
|
forth_end
|
|
|
|
|
|
All lines between the forth_start and forth_end will be
|
|
copied over to the forthdebug file without any modifications.
|
|
|
|
Ques: How do I run it?
|
|
|
|
Ans: Here is a sample session. Comments are in ()s.
|
|
|
|
|
|
ok kdbg-words
|
|
( enter the debugger )
|
|
ok words
|
|
( list debugging words available )
|
|
( not all these are in the gate yet, but the most-requested
|
|
( .threadlist is )
|
|
( the printing words start with '.' e.g. .thread .tte )
|
|
( I will move the non-printing words to a separate vocabulary )
|
|
( soon )
|
|
.machcpu machcpu-words .intr_vector intr_vector-words
|
|
.tte tte-words .sfmmu sfmmu-words
|
|
.sf_hment sf_hment-words .hmehash_bucket
|
|
hmehash_bucket-words .hme_blk hme_blk-words .ctx
|
|
ctx-words .threadlist .stacktrace i7 i6
|
|
i5 i4 i3 i2 i1
|
|
i0 l7 l6 l5 l4
|
|
l3 l2 l1 l0 i7x
|
|
i6x i5x i4x i3x i2x
|
|
i1x i0x l7x l6x l5x
|
|
l4x l3x l2x l1x l0x
|
|
v9bias .lwp .thread ._kthread
|
|
_kthread-words .memlistlist .memlist
|
|
memlist-words ._klwp _klwp-words .mstate
|
|
mstate-words .k_siginfo k_siginfo-words
|
|
.kmem_cache kmem_cache-words .kmem_slab
|
|
kmem_slab-words .hment hment-words .hat
|
|
hat-words .dev_info dev_info-words .cred
|
|
cred-words .cpulist .cpun .cpu
|
|
cpu-words .callout callout-words .buf
|
|
buf-words .as as-words .rwlock .label
|
|
.disp .mutex ._rwlock_impl _rwlock_impl-words
|
|
._label_t
|
|
_label_t-words .itimerval itimerval-words
|
|
.timeval timeval-words ._disp _disp-words
|
|
.adaptive_mutex adaptive_mutex-words .dev_t
|
|
c-struct bits-field array-field struct-field
|
|
ptr-field byte-field short-field long-field
|
|
ext-field voc-print name-print 0plevel -plevel
|
|
+plevel plevel sizeof index print
|
|
.str .o another? next-word
|
|
|
|
ok .threadlist
|
|
( .threadlist prints threads 1 page at a time )
|
|
( try that with kadb )
|
|
thread e0402000 pc: e0094e98 sp: e0401aa8
|
|
call e008b254 genunix:main from e00069d8 _start+108
|
|
( 0 2 3c 2 e0428290 e0411840 )
|
|
call e00531a0 krtld:exitto from e0053e84 krtld:kobj_init+128
|
|
( e00068d0 e0425400 e04604f0 e0425000 e005829c e0437800 )
|
|
|
|
thread e0891ec0 free
|
|
|
|
thread e0895ec0 free
|
|
|
|
thread e0899ec0 free
|
|
|
|
thread e089dec0 free
|
|
|
|
thread e08a1ec0 free
|
|
|
|
thread e08a5ec0 free
|
|
|
|
thread e08a9ec0 free
|
|
|
|
thread e08adec0 free
|
|
|
|
thread e08b1ec0 free
|
|
|
|
thread e08b9ec0 pc: e002ec3c sp: e08b9e00
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( e0423c00 0 e0428290 e0428290 0 e0423c48 )
|
|
???? from e002ebfc idle
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08bdec0 pc: e005dd9c sp: e08bdda0
|
|
call e005dd38 genunix:cv_wait from e006bdd4 genunix:callout_thread+1c
|
|
( e045d890 e045d890 80000000 e045da3c e045da3c e045da3c )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 0 e0428290 e0428290 e045d8a4 e045d890 )
|
|
???? from e006bdb8 genunix:callout_thread
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08c1ec0 pc: e005dd9c sp: e08c1da0
|
|
call e005dd38 genunix:cv_wait from e006bdd4 genunix:callout_thread+1c
|
|
( e045d890 e045d890 80000000 e045db68 e045db68 e045db68 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 0 e0428290 e0428290 e045d8a4 e045d890 )
|
|
???? from e006bdb8 genunix:callout_thread
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08c5ec0 free
|
|
|
|
thread e08cbec0 pc: e005dd9c sp: e08cbd90
|
|
call e005dd38 genunix:cv_wait from e00b9c24 genunix:background+158
|
|
( e046000c e046000c 0 10000 0 0 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 fffffffe 10000 fc408734 0 e046000c )
|
|
???? from e00b9acc genunix:background
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08d1ec0 pc: e005dd9c sp: e08d1d90
|
|
call e005dd38 genunix:cv_wait from e00b9d8c genunix:freebs+c8
|
|
( e045f040 e045f040 2 e044dca0 2 0 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( e044dca8 e045fd1c e0428290 e045fe04 0 e045f040 )
|
|
???? from e00b9cc4 genunix:freebs
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08d7ec0 pc: e005dd9c sp: e08d7d90
|
|
call e005dd38 genunix:cv_wait from e00bdb08 genunix:qwriter_outer_thread+c4
|
|
( e045f078 e045f078 0 e044f4b8 e00080f0 fc14b580 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( e044f4bc 0 e045c2d8 0 e045f078 0 )
|
|
???? from e00bda44 genunix:qwriter_outer_thread
|
|
( 0 0 0 0 0 0 )
|
|
|
|
thread e08dbec0 pc: e005dd9c sp: e08dbd40
|
|
call e005dd38 genunix:cv_wait from fc2620f4 ufs:ufs_thread_run+6c
|
|
( fc13ca78 fc13ca78 0 456 0 fc14b5a8 )
|
|
call fc262088 ufs:ufs_thread_run from fc262868 ufs:ufs_thread_idle+1c
|
|
( fc13ca64 fffd fc13ca78 fc13ca68 fc13ca72 fc13ca70 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 fc13ca64 fc13ca78 e0428290 0 0 )
|
|
???? from fc26284c ufs:ufs_thread_idle
|
|
( 0 0 7b60c 0 239b8 7b609 )
|
|
|
|
thread e08dfec0 pc: e005dd9c sp: e08dfd40
|
|
call e005dd38 genunix:cv_wait from fc2620f4 ufs:ufs_thread_run+6c
|
|
( fc13caf0 fc13caf0 0 1 0 ffffffd8 )
|
|
call fc262088 ufs:ufs_thread_run from fc262ccc ufs:ufs_thread_hlock+20
|
|
( fc13cadc fffd fc13caf0 fc13cae0 fc13caea fc13cae8 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 0 fc13cadc fc13caea fc13caf0 0 )
|
|
???? from fc262cac ufs:ufs_thread_hlock
|
|
( 0 0 0 32540 16a09 0 )
|
|
|
|
thread e08e3ec0 pc: e005dd9c sp: e08e3d80
|
|
call e005dd38 genunix:cv_wait from fc30236c esp:esp_callback+1e4
|
|
( fc14b66c fc14b66c 2 19 fc14b674 0 )
|
|
jmpl e00074b0 client_handler+38 from e001ef80 thread_start+4
|
|
( 0 fc14b682 0 1 0 0 )
|
|
???? from fc302188 esp:esp_callback
|
|
( fc17f008 0 78278 c3c09 0 78284 )
|
|
|
|
thread fc44b480 pc: e005e4b0 sp: e0a1b7d0
|
|
call e005e358 genunix:cv_wait_sig_swap from e00b896c genunix:strwaitq+280
|
|
( 0 fc40b6e4 fc5eb028 0 fc44ee20 fc44b480 )
|
|
call e00b86ec genunix:strwaitq from e00b36d0 genunix:strgetmsg+2a8
|
|
( fc40b698 fc408246 0 3 e0a1b9b0 fc408200 )
|
|
call e00b3428 genunix:strgetmsg from e00a6508 genunix:msgio+254
|
|
( 0 e0a1ba18 0 fc40b6a8 fc40b6e4 0 )
|
|
call e00a62b4 genunix:msgio from e00a60d8 genunix:getmsg+88
|
|
( e0a1ba90 e0a1bb10 1 e0a1baab e0a1baac fc3209dc )
|
|
jmpl 0 from e00656c8 genunix:syscall_ap+70
|
|
( fc44ee88 e0a1bb10 0 0 e043e9c4 0 )
|
|
jmpl ffbf0000 from e0025824 syscall_trap+194
|
|
( 3 0 dffffd88 dffffd68 e00a6050 fc44ee20 )
|
|
XXXXXXX from df7876a4
|
|
( 3 dffffd7c dffffd88 dffffd68 84 27b18 )
|
|
|
|
thread fc44b5c0 pc: e005e4b0 sp: e0a17980
|
|
call e005e358 genunix:cv_wait_sig_swap from e00903e8 genunix:poll+cb8
|
|
( 0 fc14a950 fc5eb698 800 fc44f008 fc44b5c0 )
|
|
( at this point I got bored )
|
|
( and printed a single thread )
|
|
ok fc44b480 .thread
|
|
t_ts = NULL
|
|
t_prioinv = NULL
|
|
t_rprof = NULL
|
|
t_mstate = 9
|
|
t_waitrq = 0
|
|
t_kpri_req = 0
|
|
t_disp_time = 14976
|
|
t_disp_cpu = e0423c00
|
|
t_oldspl = 0
|
|
t_lockp = e045a310
|
|
t_pctcpu = 10
|
|
t_lbolt = 6ef
|
|
t_cred = fc19ff90
|
|
t_pollstate = NULL
|
|
t_sysnum = 85
|
|
t_whatstop = 0
|
|
t_whystop = 0
|
|
t_trace = NULL
|
|
t_prev = e08e3ec0
|
|
t_next = fc44b5c0
|
|
t_procp = fc5eb028
|
|
t_lwp = fc44ee20
|
|
t_back = fc44b480
|
|
t_forw = fc44b480
|
|
t_sigqueue = NULL
|
|
t_itimerid = 0
|
|
t_realitimer =
|
|
it_value =
|
|
tv_usec = 0 i = 110
|
|
disp_lock = 0
|
|
cpu_prev_onln = e0423c00
|
|
cpu_next_onln = e0423c00
|
|
cpu_prev = e0423c00
|
|
cpu_next = e0423c00
|
|
cpu_fpowner = fc44fd60
|
|
cpu_callo = NULL
|
|
cpu_lwp = NULL
|
|
cpu_pause_thread = e09fbec0
|
|
cpu_idle_thread = e08b9ec0
|
|
cpu_thread = e08b9ec0
|
|
cpu_flags = 1b
|
|
cpu_seqid = 0
|
|
cpu_id = 0
|
|
( and here's the phys installed list )
|
|
ok :phys_install l@ .memlistlist
|
|
prev = NULL
|
|
next = fc004168
|
|
size = 2000000
|
|
address = 0
|
|
|
|
prev = fc004150
|
|
next = NULL
|
|
size = 2000000
|
|
address = 10000000
|
|
|
|
|
|
NOTE: note the . (period) in front of the name of the struct. You need to add
|
|
that to the name so that it does not clash with variables with same names.
|
|
|