Thanks Chad, but I don't think that this is the problem. The this->rAcqArr points to the beginning of an array in the traced process. I initialize it in a previous clause that has exactly the same probe:
pid$target::ReportTx:entry /arg1 != 0 / { this->dataP = (ProfData*)copyin(arg2, sizeof(ProfData)); this->numEntries = this->dataP->numRAcqEntries; this->rAcqArr = this->dataP->racqInfoArr; } So the value of this->rAcqArr should be live until all clauses with the same probe are done executing. Moreover, I know that the value that I'm getting is valid, because I had the following printf statement: pid$target::ReportTx:entry /arg1 != 0 && this->numEntries != 0/ { printf("NumEntries: %lld\n", (long long)this->numEntries); this->entry = (ReadAcqEntry*)copyin((uintptr_t)&(this->rAcqArr[this->numEntries-1]), sizeof(ReadAcqEntry)); this->pcInt = (uintptr_t)(this->entry->pc); /* this->instr = stringof(this->pcInt);*/ printf("%p\t%d\t%d\t%d\n", this->entry->pc, this->entry->acqNum, this->entry->upgradeNum + this->entry->contUpgradeNum, this->entry->contUpgradeNum); this->numEntries--; } and the results look fine. The only problem is when I un-comment the stringof statement. I even tried using this->entry->pc as a key to an aggregation, with no problems. I only encountered the problem when I tried to convert it to a string. So, I can printf this->entry->pc (with %p flag), I can use it as a key to an aggregation, but I cannot convert it to a string --- any idea why? As an aside, I noticed that the invalid address specified in the error message is different that the value of this->entry->pc. Thanks again, Yossi -- This message posted from opensolaris.org _______________________________________________ dtrace-discuss mailing list dtrace-discuss@opensolaris.org