From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 Date: Tue, 16 Mar 2010 20:37:07 -0800 Message-ID: <13426df11003162137p2f927ea6qc8a279895d8f927a@mail.gmail.com> From: ron minnich To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/mixed; boundary=0016367d5858b669230481f7aadb Subject: [9fans] recreational programming of an evening Topicbox-Message-UUID: eb507408-ead5-11e9-9d60-3106f5b1d025 --0016367d5858b669230481f7aadb Content-Type: text/plain; charset=ISO-8859-1 I'm an admirer of acid but never found that I like the truss functions all that much. I've used acid on just enough semi-working platforms, where breakpoints don't do what is expected, that truss is not frequently operational and hence not that useful. Also, it's not that great for fork. And, I'm not that happy about the need to change the process' memory image just to do tracing. truss() just feels unfinished. I pretty much prefer strace on Unix to what acid can do on Plan 9. It follows forks nicely, and it shows what's going on. And, it works even if debugging doesn't. And, and on a lightweight node, I don't have to drag all the acid bits along. Now, on Linux, strace is a beast: 256KB binary, needs shared libraries, and so on. (come to think of it that's small for a GNU program nowadays ...) What I want is something that works like this: echo stop > proc/75/ctl while (echo startsyscall>/proc/75/ctl) { cat /proc/75/truss } (note the undocumented startsyscall verb). You need to see the source, not the man page :-) Well, turns out to be trivial to do in Plan 9. I did the work against 9vx, since it's so easy to prototype this stuff. The diff is so small I just attached it. Russ already had nice pretty-print examples for tracing system calls so I cribbed them. Here's the output: 75 [cat] Pread 0x13d7 00000000 0fffdf30 00002000 00002000h= 0x9 75 [cat] Pwrite 0x12ed 00000001 0fffdf30 00000009 00000009h= 0x9 75 [cat] Pread 0x13d7 00000000 0fffdf30 00002000 00002000h= 0xc 75 [cat] Pwrite 0x12ed 00000001 0fffdf30 0000000c 0000000ch= 0xc 75 [cat] Pread 0x13d7 00000000 0fffdf30 00002000 00002000h= 0 75 [cat] Open 0x1410 00006990 00000000 00000014 00000014h= 0x3 75 [cat] Pread 0x13d7 00000003 0fffff00 00000014 00000014h= 0xc 75 [cat] Close 0x143e 00000003 0fffff00 00000014 00000014h= 0 75 [cat] Exits 0x128b 00000000 00000000 00000000 00000000hecho: write error: process exited So, voila, we have truss, it took 15 minutes to add this in, in fact almost as long to write this message as to add it in. And a day to look at the code and ruminate in the odd free moment how to do it. But that's why I still like this kernel: I can image how much fun this would have been in just about any Unix, since I've been through a similar exercise of this sort frequently on Linux. I may extend it just a bit to dump stuff like file names, read and write data, and so on. Not that hard in my view. Anyway, I'll be doing the same thing in the 9k kernel, but the patch I just attached should give you a hint if you need this. I think it would help people trying to find problems in 9vx. And, I bet somebody out there can do a better job than I did. Obviously, you need to do a bit more work to catch fork but that's left to the student. ron --0016367d5858b669230481f7aadb Content-Type: application/octet-stream; name=x Content-Disposition: attachment; filename=x Content-Transfer-Encoding: base64 X-Attachment-Id: f_g6vmvnoi0 ZGlmZiAtciBjN2U5YjVlZGI4ZDQgc3JjLzl2eC9NYWtlZnJhZwotLS0gYS9zcmMvOXZ4L01ha2Vm cmFnCVN1biBEZWMgMjcgMDk6NDk6MjIgMjAwOSAtMDgwMAorKysgYi9zcmMvOXZ4L01ha2VmcmFn CVR1ZSBNYXIgMTYgMjE6Mjk6MjMgMjAxMCAtMDcwMApAQCAtNzQsNiArNzQsNyBAQAogCQlkZXZt bnQubyBcCiAJCWRldnByb2MubyBcCiAJCWRldnBpcGUubyBcCisJCWRldnJhbS5vIFwKIAkJZGV2 cm9vdC5vIFwKIAkJZGV2c2QubyBcCiAJCWRldnNydi5vIFwKZGlmZiAtciBjN2U5YjVlZGI4ZDQg c3JjLzl2eC9hL0FVVE9HRU4KLS0tIGEvc3JjLzl2eC9hL0FVVE9HRU4JU3VuIERlYyAyNyAwOTo0 OToyMiAyMDA5IC0wODAwCisrKyBiL3NyYy85dngvYS9BVVRPR0VOCVR1ZSBNYXIgMTYgMjE6Mjk6 MjMgMjAxMCAtMDcwMApAQCAtMzgsNiArMzgsNyBAQAogL3N5cy9zcmMvOS9wb3J0L2Rldm1udC5j CiAvc3lzL3NyYy85L3BvcnQvZGV2cGlwZS5jCiAvc3lzL3NyYy85L3BvcnQvZGV2cHJvYy5jCisv c3lzL3NyYy85L3BvcnQvZGV2cmFtLmMKIC9zeXMvc3JjLzkvcG9ydC9kZXZyb290LmMKIC9zeXMv c3JjLzkvcG9ydC9kZXZzcnYuYwogL3N5cy9zcmMvOS9wb3J0L2RldnRscy5jCmRpZmYgLXIgYzdl OWI1ZWRiOGQ0IHNyYy85dngvYS9kZXZwcm9jLmMKLS0tIGEvc3JjLzl2eC9hL2RldnByb2MuYwlT dW4gRGVjIDI3IDA5OjQ5OjIyIDIwMDkgLTA4MDAKKysrIGIvc3JjLzl2eC9hL2RldnByb2MuYwlU dWUgTWFyIDE2IDIxOjI5OjIzIDIwMTAgLTA3MDAKQEAgLTMxLDYgKzMxLDcgQEAKIAlRdGV4dCwK IAlRd2FpdCwKIAlRcHJvZmlsZSwKKwlRdHJ1c3MsCiB9OwogCiBlbnVtCkBAIC04NCw2ICs4NSw3 IEBACiAJInRleHQiLAkJe1F0ZXh0fSwJMCwJCQkwMDAwLAogCSJ3YWl0IiwJCXtRd2FpdH0sCTAs CQkJMDQwMCwKIAkicHJvZmlsZSIsCXtRcHJvZmlsZX0sCTAsCQkJMDQwMCwKKwkidHJ1c3MiLAl7 UXRydXNzfSwJMCwJCQkwNDAwLAogfTsKIAogc3RhdGljCkBAIC0zOTcsNiArMzk5LDcgQEAKIAlj YXNlIFF3YWl0OgogCWNhc2UgUXJlZ3M6CiAJY2FzZSBRZnByZWdzOgorCWNhc2UgUXRydXNzOgog CQlub25vbmUocCk7CiAJCWJyZWFrOwogCkBAIC03MDYsNiArNzA5LDEyIEBACiAJCW1lbW1vdmUo YSwgJnVwLT5nZW5idWZbb2Zmc2V0XSwgbik7CiAJCXJldHVybiBuOwogCisJY2FzZSBRdHJ1c3M6 CisJCWlmICghIHAtPnN5c2NhbGx0cmFjZSkKKwkJCXJldHVybiAwOworCQluID0gcmVhZHN0cihv ZmZzZXQsIGEsIG4sIHAtPnN5c2NhbGx0cmFjZSk7CisJCXJldHVybiBuOworCiAJY2FzZSBRbWVt OgogCQlpZihvZmZzZXQgPCBVU1RLVE9QKQogCQkJcmV0dXJuIHByb2NjdGxtZW1pbyhwLCBvZmZz ZXQsIG4sIHZhLCAxKTsKZGlmZiAtciBjN2U5YjVlZGI4ZDQgc3JjLzl2eC9hL3BvcnRkYXQuaAot LS0gYS9zcmMvOXZ4L2EvcG9ydGRhdC5oCVN1biBEZWMgMjcgMDk6NDk6MjIgMjAwOSAtMDgwMAor KysgYi9zcmMvOXZ4L2EvcG9ydGRhdC5oCVR1ZSBNYXIgMTYgMjE6Mjk6MjMgMjAxMCAtMDcwMApA QCAtNzUyLDYgKzc1Miw5IEBACiAJICogIG1hY2hpbmUgc3BlY2lmaWMgTU1VCiAJICovCiAJUE1N VSBwbW11OworCS8qIHN5c2NhbGwgdHJhY2UgKi8KKwljaGFyICpzeXNjYWxsdHJhY2U7CisJCiB9 OwogCiBlbnVtCmRpZmYgLXIgYzdlOWI1ZWRiOGQ0IHNyYy85dngvZGV2dGFiLmMKLS0tIGEvc3Jj Lzl2eC9kZXZ0YWIuYwlTdW4gRGVjIDI3IDA5OjQ5OjIyIDIwMDkgLTA4MDAKKysrIGIvc3JjLzl2 eC9kZXZ0YWIuYwlUdWUgTWFyIDE2IDIxOjI5OjIzIDIwMTAgLTA3MDAKQEAgLTgsNiArOCw3IEBA CiBleHRlcm4gRGV2IGNvbnNkZXZ0YWI7CiBleHRlcm4gRGV2IHJvb3RkZXZ0YWI7CiBleHRlcm4g RGV2IHBpcGVkZXZ0YWI7CitleHRlcm4gRGV2IHJhbWRldnRhYjsKIGV4dGVybiBEZXYgc3NsZGV2 dGFiOwogZXh0ZXJuIERldiB0bHNkZXZ0YWI7CiBleHRlcm4gRGV2IG1vdXNlZGV2dGFiOwpAQCAt MzgsNiArMzksNyBAQAogCSZtb3VzZWRldnRhYiwKIAkmcGlwZWRldnRhYiwKIAkmcHJvY2RldnRh YiwKKwkmcmFtZGV2dGFiLAogCSZzcnZkZXZ0YWIsCiAJJnNzbGRldnRhYiwKIAkmdGxzZGV2dGFi LApkaWZmIC1yIGM3ZTliNWVkYjhkNCBzcmMvOXZ4L3RyYXAuYwotLS0gYS9zcmMvOXZ4L3RyYXAu YwlTdW4gRGVjIDI3IDA5OjQ5OjIyIDIwMDkgLTA4MDAKKysrIGIvc3JjLzl2eC90cmFwLmMJVHVl IE1hciAxNiAyMToyOToyMyAyMDEwIC0wNzAwCkBAIC0xOTgsOCArMTk4LDE4IEBACiAJdXAtPmRi Z3JlZyA9IHVyZWc7CiAKIAlpZih1cC0+cHJvY2N0bCA9PSBQcm9jX3RyYWNlc3lzY2FsbCl7CisJ CXVpbnQzMiAqc3AgPSAodWludDMyKikodXAtPnBtbXUudXplcm8gKyB1cmVnLT51c3ApOwogCQl1 cC0+cHJvY2N0bCA9IFByb2Nfc3RvcG1lOworCQlpZiAodXAtPnN5c2NhbGx0cmFjZSkKKwkJCWZy ZWUodXAtPnN5c2NhbGx0cmFjZSk7CisJCXVwLT5zeXNjYWxsdHJhY2UgPSBzbXByaW50KCIlZCBb JXNdICVzICUjdXggJTA4dXggJTA4dXggJTA4dXggJTA4dXhoIiwKKwkJCQl1cC0+cGlkLCB1cC0+ dGV4dCwKKwkJCQlzeXNjdGFiW3VyZWctPmF4XSwgc3BbMF0sIHNwWzFdLCBzcFsyXSwgc3BbM10p OwogCQlwcm9jY3RsKHVwKTsKKwkJLyogeW91IG11c3QgaGF2ZSByZWFkIHRoZSBzdHJpbmcgYnkg bm93LiBUaGUgZnJlZSBhYm92ZSBpcyByZWFsbHkgbm90IG5lZWRlZCAqLworCQlpZiAodXAtPnN5 c2NhbGx0cmFjZSkKKwkJCWZyZWUodXAtPnN5c2NhbGx0cmFjZSk7CisJCXVwLT5zeXNjYWxsdHJh Y2UgPSBOVUxMOwogCX0KIAogCXNjYWxsbnIgPSB1cmVnLT5heDsKQEAgLTI2MCw5ICsyNzAsMTkg QEAKIAogCWlmKHVwLT5wcm9jY3RsID09IFByb2NfdHJhY2VzeXNjYWxsKXsKIAkJdXAtPnByb2Nj dGwgPSBQcm9jX3N0b3BtZTsKKwkJaWYgKHVwLT5zeXNjYWxsdHJhY2UpCisJCQlmcmVlKHVwLT5z eXNjYWxsdHJhY2UpOworCQlpZih1cmVnLT5heCA9PSAtMSkKKwkJCXVwLT5zeXNjYWxsdHJhY2Ug PSBzbXByaW50KCI9ICVzXG4iLCB1cC0+c3lzZXJyc3RyKTsKKwkJZWxzZQorCQkJdXAtPnN5c2Nh bGx0cmFjZSA9IHNtcHJpbnQoIj0gJSN1eFxuIiwgdXJlZy0+YXgpOwogCQlzID0gc3BsaGkoKTsK IAkJcHJvY2N0bCh1cCk7CiAJCXNwbHgocyk7CisJCS8qIHlvdSBtdXN0IGhhdmUgcmVhZCB0aGUg c3RyaW5nIGJ5IG5vdy4gVGhlIGZyZWUgYWJvdmUgaXMgcmVhbGx5IG5vdCBuZWVkZWQgKi8KKwkJ aWYgKHVwLT5zeXNjYWxsdHJhY2UpCisJCQlmcmVlKHVwLT5zeXNjYWxsdHJhY2UpOworCQl1cC0+ c3lzY2FsbHRyYWNlID0gTlVMTDsKIAl9CiAKIAl1cC0+aW5zeXNjYWxsID0gMDsK --0016367d5858b669230481f7aadb--