Hello Everybody,
we are teaching a class on Operating Systems at Dartmouth and we came across a
strange
behavior we can not find an explanation to. I forward here what Sean Smith has
found so far:
When playing around in class with memory faults and dtrace, we noticed
something interesting:
the address passed to trap is similar to but not the same as the faulting
address.
E.g., if I touch illegal address 0x00113738, we get a trap on 0x001131DE.
Poking around in the
code reveals:
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/sun4u/sys/mmu.h,
58 #define MMU_TAG_ACCESS 0x30 /* tlb tag access */
123 /*
124 * MMU TAG ACCESS register Layout
125 *
126 * +-------------------------+------------------+
127 * | virtual address [63:13] | context [12:0] |
128 * +-------------------------+------------------+
129 * 63 13 12 0
130 */
131 #define TAGACC_CTX_MASK 0x1FFF
132 #define TAGACC_SHIFT 13
133 #define TAGACC_VADDR_MASK (~TAGACC_CTX_MASK)
134 #define TAGACC_CTX_LSHIFT (64 - TAGACC_SHIFT)
All well and code: the strangeness in the low-order part of the trap address
must be this
"context."
This is confirmed by seeing that sfmmu_tsbmiss_exception is getting called
before, with a
"tagaccess" arg of 0x001131DE.
However....
where's this context of "0x11DE" coming from? The ASI for this process is
0x82!
Is anybody familiar with this piece of code ?
Later,
Max & Sean
--
This message posted from opensolaris.org
_______________________________________________
dtrace-discuss mailing list
[email protected]