From: Kevin K. <kev...@ch...> - 2005-05-04 01:31:57
|
While debugging the AMS 2.09 issue, I found this bug: Try this: * at the home screen (TI-89 AMS 2.09), look at 0x4064. It contains 0x41. * set a breakpoint at 0x250076 * set a write breakpoint on the range 0x4064-0x4065 (because range breakpoints on a single byte aren't accepted, I fixed that in the SVN) You'll end up at 0x250076 with 0x4064 suddenly containing 0x7c, though the range breakpoint never triggered. Repeat this exercise replacing the range breakpoint with write breakpoints on: * the byte at 0x4064 * the word at 0x4064 * the long at 0x4064 * the long at 0x4062 and suddenly it _will_ catch a movem.l %a2-%a3,-8(%fp) at 0x22e196. The problem is that: if ((adr >= r->val1) && ((adr+3) <= r->val2)) isn't correct. You need to check the ranges for overlap, the proper test for which is (End1 >= Start2) && (End2 >= Start1), i.e.: if (((adr+3) >= r->val1) && (adr <= r->val2)) The same goes for all the other checks of that type. Kevin Kofler |