The Solution
You may recall a few weeks back that we posted a body of code from a test program used for DAT structure creation, then issued a challenge offering a new iPod for anyone who could correctly identify the bug within...Now, it's high time we posted the solution. The explanation submitted by contest winner, Jens Remus - from Böblingen, Germany - was elegant, concise and right on the money. So much so that we decided to just post his submission right here on the blog, just as he wrote it. Please read on...
------------------------------------------------------------------------------------------
The error is on line 102:
ag r14,=AD(((stTL/4096))+dt_r3) | show length |
The Table Length (TL; bits 62 and 63) is calculated incorrectly and is causing an overflow which alters the Table Type (TT; bits 60 and 61 - or DT as you call it): stTL/4096 = 4 = B'100' (overflow) DT_R3 = B'0100' (TT/DT = B'01' = region 3rd) DT_R3 + stTL/4096 = B'0100' + B'100' = B'1000'
This causes a bad TT/DT = B'10' = "region 2nd" and a bad TL = B'00' = 0 = 512 entries = 4096 bytes.
The line should be corrected to (assuming stTL is never less than 4096 bytes):
ag r14,=AD(((stTL/4096)-1)+dt_r3) | show length |
Greetings from Germany, Jens Remus
Thanks again, Jens, and thanks to all of you who participated. Hope you all had as much fun as we did!
/&
|
|
|
|





