/* this function is incomplete and out of date. it should be updated and integrated with the sctl library. */ @defloc fmtsctlmsg(msg, sz) { @local s, q, tn, td, nsid, id, n, a, sym; if(!verbose) return; msg = buf2msg(msg); s = sprintfa("%e %d (%d bytes)", (enum sctl`Mkind)msg->op, msg->tag, sz); switch((enum sctl`Mkind)msg->op){ case sctl`Aevent: case sctl`Tps: case sctl`Rps: case sctl`Tlaunch: case sctl`Rlaunch: case sctl`Tcont: case sctl`Rcont: case sctl`Tstop: case sctl`Rstop: case sctl`Tkill: case sctl`Rkill: case sctl`Tdetach: case sctl`Rdetach: case sctl`Tsettrap: case sctl`Rsettrap: case sctl`Tclrtrap: case sctl`Rclrtrap: case sctl`Tread: case sctl`Rread: case sctl`Tsnap: case sctl`Rsnap: case sctl`Twrite: case sctl`Rwrite: case sctl`Tgetctx: case sctl`Rgetctx: case sctl`Tsetctx: case sctl`Rsetctx: case sctl`Tattach: case sctl`Rattach: case sctl`Tstep: case sctl`Rstep: case sctl`Ttrace: case sctl`Rtrace: case sctl`Tstat: case sctl`Rstat: case sctl`Tping: case sctl`Rping: break; case sctl`Rerror: s += sprintfa(" %s", getbytes(msg+1, sz-sizeof(sctl`Rerror))); break; case sctl`Tversion: s += sprintfa(" %s", getbytes(msg+1, sz-sizeof(sctl`Tversion))); break; case sctl`Rversion: s += sprintfa(" %s", getbytes(msg+1, sz-sizeof(sctl`Rversion))); break; case sctl`Tlooksym: q = msg+1; q = (uint64*)q; nsid = *q++; [id, q] = decodes(q); s += sprintfa(" nsid=%u sym=%s", nsid, id); break; case sctl`Rlooksym: q = msg+1; [sym, q] = decodesym(q); s += sprintfa(" id=%s flags=%x val=%x sz=%x tname=%t", sym.id, sym.flags, sym.val, sym.sz, sym.type); break; case sctl`Renumsym: q = msg+1; q = (uint64*)q; n = *q++; s += sprintfa(" ns=%u syms=...", n); break; case sctl`Tenumsym: case sctl`Tenumtype: q = msg+1; q = (uint64*)q; id = *q++; s += sprintfa(" nsid=%u", id); break; case sctl`Renumtype: q = msg+1; q = (uint64*)q; n = *q++; s += sprintfa(" nt=%u tdefs=...", n); break; case sctl`Tunwind1: case sctl`Runwind1: case sctl`Tlooksrc: case sctl`Rlooksrc: case sctl`Tlookpc: case sctl`Rlookpc: break; case sctl`Tnames: q = msg+1; [id, q] = decodes(q); s += sprintfa(" path=%s", id); break; case sctl`Rnames: s += sprintfa(" nsid=%u", msg->id); break; case sctl`Tlooktype: q = msg+1; q = (uint64*)q; id = *q++; [tn, q] = decodetname(q); s += sprintfa(" nsid=%u tname=%t", id, tn); break; case sctl`Rlooktype: q = msg+1; /* pass arbitrary name space to allow decode to occur */ [td, q] = decodetdef(clp64le, q); s += sprintfa(" tdef=%t", td); break; case sctl`Tlookaddr: q = msg+1; q = (uint64*)q; id = *q++; a = *q++; s += sprintfa(" nsid=%u addr=%x", id, a); break; case sctl`Rlookaddr: case sctl`Tenumloc: case sctl`Renumloc: case sctl`Tenumseg: case sctl`Renumseg: break; default: error("unknown op %e", (enum sctl`Mkind)msg->op); } return s; }