Dan Sugalski wrote:
At 7:35 AM -0500 12/31/02, Jim Cromie wrote:pardon the lack of clue I reveal here, but..
on 32 bit box, a void* has 3 values which are illegal/unaligned;
void* ptr;
if (ptr & 0x00) {
/* ok */
} else {
/* some exceptional situation */
}
is there any concievable use of this which doesnt interfere with legitimate bus-errors (ie existing unaligned pointer handling) ?
You're looking to encode data in the low X bits (where X is 2 or 4 for 32 or 64 bit machines), right?
yes- precisely!
It's a clever thing to do, but one I admit I mistrust. Either it means we have to check every pointer that might be encoded before we use it or wedge into the system SIGBUS handler, which is non-trivial in many places. It's also rather a portability problem. (And potential security problem, alas)thats what I thought - but had to ask on the off-chance it could benefit.
A cool idea, but I don't think we can do it.
IIRC - I saw it once as a feature of some old Motorola ?? DMA controller - I think it was used to signal some scatter/gather ops