<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Nick Couchman wrote:
<blockquote cite="mid:4B1EADAB0200009900078A54@collaborate.seakr.com"
 type="cite">
  <blockquote type="cite">
    <pre wrap="">Incidentally I notice that the latest Solaris code doesn't seem to use 
alarm anymore; Nick - does your Nevada boot get any further with current 
OpenBIOS SVN?
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Nevada doesn't get any further, and I get the same error trying to boot the Milax 0.3.2 SPARC ISO.  Trying to dig up some debugging information right now, but I'm running into any issue with none of the words being available for debugging until after the boot command has been issues, which of course then causes the unhandled exception...
  </pre>
</blockquote>
<br>
Right. If you're doing Nevada, the booter should respond to a "-H"
(capital H) switch to abort the boot after defining the words.<br>
The boot command does essentially:<br>
<br>
&nbsp;&nbsp;&nbsp; open boot device<br>
&nbsp;&nbsp;&nbsp; read blocks 1-15<br>
&nbsp;&nbsp;&nbsp; byte-load the boot blocks just read in<br>
<br>
The boot blocks themselves create a bunch of forth code, mostly in
/packages/ufs-file-system (or hsfs-file-system), and at the very end,
invokes the method "do-boot" that it just defined. This method checks
the boot arguments for "-H", and aborts. If you can get that to happen,
you can then set breakpoints, clear the boot arguments, clear the
"halt?" flag, and re-invoke "do-boot".<br>
<br>
Lessee... An email I sent internally on debugging the boot blocks is
below. The details of the problems in the UFS code are probably
uninteresting, but the techniques may be helpful:<br>
<br>
---------------------------------------------------------------------<br>
<br>
For what it's worth - some debugging technique I figure is worth
writing down, particularly for our more recent engineers.<br>
<br>
I spent the last week debugging the bootblocks (ufs-file-system, lives
on blocks 1-15 of the root partition), and the experience of figuring
out how to debug this was painful. We are probably going to do a bunch
more debugging in this area as we make changes for extra-huge disks,
EFI labels, and potentially even vxfs filesystem support. This may help
the next victim down the road figure out how to debug this code -
perhaps even me, given these details are all going to fall out of my
brain next week.<br>
<br>
The ufsboot code in question lives in
/ws/onnv-clone/usr/src/psm/stand/bootblks/ufs/common/ufs.fth (plus
various files in the immediate vicinity). Being that it's code that
gets loaded from the disk, and I didn't want to try replacing it on the
disk (the problem seemed to be very hard to get a reproducible case), I
ended up figuring out how to debug it in situ.<br>
<br>
First, it turns out that the bootblocks recognize "-H" as an indication
that they should go back to the OK prompt after reading themselves in.
So you can give the normal boot command with -H, and then fix things up
after getting back to the ok prompt, and give the command "do-boot" to
continue as if you hadn't said "-H".<br>
<br>
In my case, I needed to patch a bunch of debug stuff into the ufs-block
walking code, and the easiest way was to put stuff in nvramrc to patch
it in. So we see in my nvramrc:<br>
<br>
<tt>{0} ok printenv nvramrc<br>
nvramrc =&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; devalias bnet
/pci@500/pci@0/pci@8/network@0:iscsi-target-ip=129.148.67.188,host-ip=129.148.67.111,iscsi-target-name=iqn.1986-03.com.sun:02:43644186-e5bb-41f2-8b8e-f34be1afaebc<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : .xxx0 ."&nbsp; idir0 " ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : .xxx1 ."&nbsp; idir1&nbsp; " ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : .inod ."&nbsp; inode " ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : fixup<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " /ufs-file-system" find-device<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : idir0 dup . .xxx0 get-indir0 indir0-adr 40
dump cr ; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : idir1 dup . .xxx1 get-indir1 indir1-adr 40
dump cr ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : dir-dump inode /inode dump cr dup ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : .itod dup . itod .inod dup . cr ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " eval<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; patch idir0 get-indir0 (bmap)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; patch idir0 get-indir0 (bmap)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; patch idir1 get-indir1 (bmap)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; patch dir-dump dup (bmap)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; patch .itod itod iget<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " eval<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " /chosen" find-device<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " bootargs" delete-property<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 0 " bootargs" property&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " false to halt?" eval<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;</tt><br>
<br>
I define a method "fixup" which I will invoke after boot -H exits to
the ok prompt. This will add all my patches and clean up. The last four
lines of fixup are to clear up the -H - I delete the existing bootargs
property (which contains -H), create an empty property, and clear the
ufsboot internal flag "halt?".<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<tt>&nbsp;&nbsp;&nbsp;&nbsp; <br>
{0} ok <font color="#33ff33">boot bnet -H</font><br>
Boot device:
/pci@500/pci@0/pci@8/network@0:iscsi-target-ip=129.148.67.188,host-ip=129.148.67.111,iscsi-target-name=iqn.1986-03.com.sun:02:43644186-e5bb-41f2-8b8e-f34be1afaebc&nbsp;
File and args: -H<br>
/pci@500/pci@0/pci@8/network@0: 1000 Mbps full duplex link up<br>
ufs-file-system <br>
Halted with -H flag. <br>
The file just loaded does not appear to be executable.<br>
{0} ok <font color="#33ff33">fixup</font><br>
{0} ok <font color="#33ff33">do-boot</font><br>
/pci@500/pci@0/pci@8/network@0: 1000 Mbps full duplex link up<br>
[...]<br>
<br>
</tt>I've highlighted in green the commands involved in each debug
session. Since I ended up going through this sequence around 100 times
(with different debug code patched into nvramrc as understanding
progressed), having it be relatively easy to type was crucial. I ended
up not putting the call to "do-boot" inside fixup because I often
tended to set breakpoints after invoking fixup.<br>
<br>
What I ended up finding meant walking through UFS data structures, so I
might as well walk through these as well. I ended up dumping inodes
(file system nodes describing individual directory entries) and
indirect blocks (which tell us where the disk blocks with content are).
The first several of these are uninteresting, I'll start commenting
where the interesting stuff occurs.<br>
<tt><br>
</tt><tt>{0} ok <font color="#33ff33">do-boot</font><br>
/pci@500/pci@0/pci@8/network@0: 1000 Mbps full duplex link up</tt><br>
<tt>2&nbsp; inode 20 </tt><br>
<tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 15 00 00 00 00&nbsp; 00 00 00 00 00 00 02 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 7a 6b 00 02 13 c4&nbsp; 4a 8c 85 6b 00 09 fd 89&nbsp;
J.zk...DJ..k..}.<br>
fd87e220&nbsp; 4a 8c 85 6b 00 09 fd 89&nbsp; 00 00 03 08 00 00 00 00&nbsp;
J..k..}.........<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 2c d1 76 e8&nbsp;
............,Qvh<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
b49&nbsp; inode 188 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 06 00 00 00 03&nbsp; 00 00 00 00 00 00 04 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 85 6d 00 0e 97 38&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp;
J..m...8J..s...&amp;<br>
fd87e220&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp; 00 00 7f ee 00 00 00 00&nbsp;
J..s...&amp;...n....<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 52 1c 08 5d&nbsp;
............R..]<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 03 00 00 00 00&nbsp;
................<br>
bfd&nbsp; inode 198 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; a1 ff 00 01 00 00 00 00&nbsp; 00 00 00 00 00 00 00 05&nbsp;
!...............<br>
fd87e210&nbsp; 4a 8c 85 8b 00 08 c8 e3&nbsp; 4a 8c 7a 39 00 09 4f df&nbsp;
J.....HcJ.z9..O_<br>
fd87e220&nbsp; 4a 8c 7a 39 00 09 52 cd&nbsp; 00 00 82 0a 00 00 00 00&nbsp;
J.z9..RM........<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 3f 4a 14 08&nbsp;
............?J..<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
b49&nbsp; inode 188 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 06 00 00 00 03&nbsp; 00 00 00 00 00 00 04 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 85 6d 00 0e 97 38&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp;
J..m...8J..s...&amp;<br>
fd87e220&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp; 00 00 7f ee 00 00 00 00&nbsp;
J..s...&amp;...n....<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 52 1c 08 5d&nbsp;
............R..]<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 03 00 00 00 00&nbsp;
................<br>
b4a&nbsp; inode 188 <br>
Loading: /platform/SUNW,T5240/boot_archive<br>
</tt><br>
This was the file, boot_archive, that was getting clobbered - rather,
read incorrectly. It turns out the inode for it is "c", down below.<br>
<tt><br>
2&nbsp; inode 20 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 15 00 00 00 00&nbsp; 00 00 00 00 00 00 02 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 7a 6b 00 02 13 c4&nbsp; 4a 8c 85 6b 00 09 fd 89&nbsp;
J.zk...DJ..k..}.<br>
fd87e220&nbsp; 4a 8c 85 6b 00 09 fd 89&nbsp; 00 00 03 08 00 00 00 00&nbsp;
J..k..}.........<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 2c d1 76 e8&nbsp;
............,Qvh<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
b49&nbsp; inode 188 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 06 00 00 00 03&nbsp; 00 00 00 00 00 00 04 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 85 6d 00 0e 97 38&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp;
J..m...8J..s...&amp;<br>
fd87e220&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp; 00 00 7f ee 00 00 00 00&nbsp;
J..s...&amp;...n....<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 52 1c 08 5d&nbsp;
............R..]<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 03 00 00 00 00&nbsp;
................<br>
bfd&nbsp; inode 198 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; a1 ff 00 01 00 00 00 00&nbsp; 00 00 00 00 00 00 00 05&nbsp;
!...............<br>
fd87e210&nbsp; 4a 8c 85 8b 00 08 c8 e3&nbsp; 4a 8c 7a 39 00 09 4f df&nbsp;
J.....HcJ.z9..O_<br>
fd87e220&nbsp; 4a 8c 7a 39 00 09 52 cd&nbsp; 00 00 82 0a 00 00 00 00&nbsp;
J.z9..RM........<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 3f 4a 14 08&nbsp;
............?J..<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
b49&nbsp; inode 188 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 06 00 00 00 03&nbsp; 00 00 00 00 00 00 04 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 85 6d 00 0e 97 38&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp;
J..m...8J..s...&amp;<br>
fd87e220&nbsp; 4a 8c 80 f3 00 0c 98 26&nbsp; 00 00 7f ee 00 00 00 00&nbsp;
J..s...&amp;...n....<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 52 1c 08 5d&nbsp;
............R..]<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 03 00 00 00 00&nbsp;
................<br>
b4a&nbsp; inode 188 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 41 ed 00 04 00 00 00 03&nbsp; 00 00 00 00 00 00 02 00&nbsp;
Am..............<br>
fd87e210&nbsp; 4a 8c 7a 38 00 0d a6 cf&nbsp; 4a 8c 85 a1 00 00 53 48&nbsp;
J.z8..&amp;OJ..!..SH<br>
fd87e220&nbsp; 4a 8c 85 a1 00 00 53 48&nbsp; 00 00 7f ef 00 00 00 00&nbsp;
J..!..SH...o....<br>
fd87e230&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e240&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e250&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 02 42 eb a7 4d&nbsp;
............Bk'M<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 03 00 00 00 00&nbsp;
................<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>
c&nbsp; inode 20 <br>
|<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 81 a4 00 01 00 00 00 00&nbsp; 00 00 00 00 11 b3 e8 00&nbsp;
.$...........3h.<br>
fd87e210&nbsp; 4a 8c 85 8c 00 03 24 91&nbsp; 4a 8c 85 a0 00 06 11 f6&nbsp; J.....$.J..
...v<br>
fd87e220&nbsp; 4a 8c 85 a1 00 00 53 49&nbsp; <font color="#cc33cc">00 00 03 88
00 00 03 90&nbsp; J..!..SI........<br>
fd87e230&nbsp; 00 00 03 98 00 00 03 a0&nbsp; 00 00 03 a8 00 00 03 b0&nbsp; .......
...(...0<br>
fd87e240&nbsp; 00 00 03 b8 00 00 03 c0&nbsp; 00 00 03 c8 00 00 03 d0&nbsp;
...8...@...H...P<br>
fd87e250&nbsp; 00 00 03 d8 00 00 03 e0</font>&nbsp; <font color="#996633">00 52
ee 00</font> <font color="#009900">00 6a 2d 98</font>&nbsp; ...X...`.Rn..j-.<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 08 db 30 38 24 ea 64&nbsp;
..........[08$jd<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
<br>
</tt>This was the inode describing the file that had a problem. One of
the things I learned in this process is that the inode contains 12
direct data block pointers (colored <font color="#cc33cc">purple</font>
above), which are actually cluster-block numbers. You take the number
presented, shift by the contents of superblock offset 0x64, and that
gives you the relative block number in the partition. On the above
disk, the partition was set up for two-block clusters, giving us 0x400
bytes per pointer, or 12kiB of data before we had to go to the next
larger chunk of data.<br>
<tt><br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 81 a4 00 01 00 00 00 00&nbsp; 00 00 00 00 11 b3 e8 00&nbsp;
.$...........3h.<br>
fd87e210&nbsp; 4a 8c 85 8c 00 03 24 91&nbsp; 4a 8c 85 a0 00 06 11 f6&nbsp; J.....$.J..
...v<br>
fd87e220&nbsp; 4a 8c 85 a1 00 00 53 49&nbsp; 00 00 03 88 00 00 03 90&nbsp;
J..!..SI........<br>
fd87e230&nbsp; 00 00 03 98 00 00 03 a0&nbsp; 00 00 03 a8 00 00 03 b0&nbsp; .......
...(...0<br>
fd87e240&nbsp; 00 00 03 b8 00 00 03 c0&nbsp; 00 00 03 c8 00 00 03 d0&nbsp;
...8...@...H...P<br>
fd87e250&nbsp; 00 00 03 d8 00 00 03 e0&nbsp; <font color="#996633">00 52 ee 00</font>
00 6a 2d 98&nbsp; ...X...`.Rn..j-.<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 08 db 30 38 24 ea 64&nbsp;
..........[08$jd<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
<font color="#996633">52ee00</font>&nbsp; idir0 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87a000&nbsp; 00 52 ee 08 00 52 ee 10&nbsp; 00 52 ee 18 00 52 ee 20&nbsp;
.Rn..Rn..Rn..Rn <br>
fd87a010&nbsp; 00 52 ee 28 00 52 ee 30&nbsp; 00 52 ee 38 00 52 ee 40&nbsp;
.Rn(.Rn0.Rn8.Rn@<br>
fd87a020&nbsp; 00 52 ee 48 00 52 ee 50&nbsp; 00 52 ee 58 00 52 ee 60&nbsp;
.RnH.RnP.RnX.Rn`<br>
fd87a030&nbsp; 00 52 ee 68 00 52 ee 70&nbsp; 00 52 ee 78 00 52 ee 80&nbsp;
.Rnh.Rnp.Rnx.Rn.<br>
<br>
</tt><br>
After the twelve direct pointers, there is an indirect pointer (colored
<font color="#996633">brown</font>
above), which points to an entire block of data pointers. That gives us
several hundred KiB before we have to go to the next level of
indirection. The start of the block it points to (number 52ee00) is
dumped out immediately the inode, and you see the start of an array of
pointers. Reading that takes a while.<br>
<tt><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 81 a4 00 01 00 00 00 00&nbsp; 00 00 00 00 11 b3 e8 00&nbsp;
.$...........3h.<br>
fd87e210&nbsp; 4a 8c 85 8c 00 03 24 91&nbsp; 4a 8c 85 a0 00 06 11 f6&nbsp; J.....$.J..
...v<br>
fd87e220&nbsp; 4a 8c 85 a1 00 00 53 49&nbsp; 00 00 03 88 00 00 03 90&nbsp;
J..!..SI........<br>
fd87e230&nbsp; 00 00 03 98 00 00 03 a0&nbsp; 00 00 03 a8 00 00 03 b0&nbsp; .......
...(...0<br>
fd87e240&nbsp; 00 00 03 b8 00 00 03 c0&nbsp; 00 00 03 c8 00 00 03 d0&nbsp;
...8...@...H...P<br>
fd87e250&nbsp; 00 00 03 d8 00 00 03 e0&nbsp; 00 52 ee 00 <font color="#009900">00
6a 2d 98</font>&nbsp; ...X...`.Rn..j-.<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 08 db 30 38 24 ea 64&nbsp;
..........[08$jd<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
<font color="#009900">6a2d98</font>&nbsp; idir0 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87a000&nbsp; <font color="#3333ff">00 6a 2d a0</font> 00 7f c4 e8&nbsp; 00 7f
c5 d8 00 80 46 08&nbsp; .j- ..Dh..EX..F.<br>
fd87a010&nbsp; 00 80 88 c8 00 81 00 08&nbsp; 00 81 42 f0 00 81 82 f8&nbsp;
...H......Bp...x<br>
fd87a020&nbsp; 00 80 c8 d0 00 63 89 00&nbsp; 00 81 ce c0 00 82 0e c8&nbsp;
..HP.c....N@...H<br>
fd87a030&nbsp; 00 82 80 08 00 82 c2 f0&nbsp; 00 83 02 f8 00 83 43 08&nbsp;
......Bp...x..C.<br>
<font color="#3333ff">6a2da0&nbsp;</font> idir1 &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87c000&nbsp; 00 6a 2d a8 00 6a 2d b0&nbsp; 00 6a 2d b8 00 6a 2d c0&nbsp;
.j-(.j-0.j-8.j-@<br>
fd87c010&nbsp; 00 6a 2d c8 00 6a 2d d0&nbsp; 00 6a 2d d8 00 6a 2d e0&nbsp;
.j-H.j-P.j-X.j-`<br>
fd87c020&nbsp; 00 6a 2d e8 00 6a 2d f0&nbsp; 00 6a 2d f8 00 6a 2e 00&nbsp;
.j-h.j-p.j-x.j..<br>
fd87c030&nbsp; 00 6a 2e 08 00 6a 2e 10&nbsp; 00 6a 2e 18 00 6a 2e 20&nbsp;
.j...j...j...j. <br>
</tt><br>
The next pointer (colored <font color="#009900">green</font> above),
is
a pointer to an entire block of pointers to indirect blocks. That gives
us several hundred megabytes before we need to go to the next level. In
this case, we follow the first indirect pointer (colored <font
 color="#3333ff">blue</font> here) to the second-level list of blocks.
This one worked without any trouble and spent some time reading, so we
went to the next indirect pointer:<br>
<tt>|<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87e200&nbsp; 81 a4 00 01 00 00 00 00&nbsp; 00 00 00 00 11 b3 e8 00&nbsp;
.$...........3h.<br>
fd87e210&nbsp; 4a 8c 85 8c 00 03 24 91&nbsp; 4a 8c 85 a0 00 06 11 f6&nbsp; J.....$.J..
...v<br>
fd87e220&nbsp; 4a 8c 85 a1 00 00 53 49&nbsp; 00 00 03 88 00 00 03 90&nbsp;
J..!..SI........<br>
fd87e230&nbsp; 00 00 03 98 00 00 03 a0&nbsp; 00 00 03 a8 00 00 03 b0&nbsp; .......
...(...0<br>
fd87e240&nbsp; 00 00 03 b8 00 00 03 c0&nbsp; 00 00 03 c8 00 00 03 d0&nbsp;
...8...@...H...P<br>
fd87e250&nbsp; 00 00 03 d8 00 00 03 e0&nbsp; 00 52 ee 00 00 <font color="#009900">6a
2d 98</font>&nbsp; ...X...`.Rn..j-.<br>
fd87e260&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 08 db 30 38 24 ea 64&nbsp;
..........[08$jd<br>
fd87e270&nbsp; 00 00 00 00 00 00 00 00&nbsp; 00 00 00 00 00 00 00 00&nbsp;
................<br>
<font color="#009900">6a2d98</font>&nbsp; idir0 <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87a000&nbsp; 00 6a 2d a0 <font color="#ff0000">00 7f c4 e8</font>&nbsp; 00 7f
c5 d8 00 80 46 08&nbsp; .j- ..Dh..EX..F.<br>
fd87a010&nbsp; 00 80 88 c8 00 81 00 08&nbsp; 00 81 42 f0 00 81 82 f8&nbsp;
...H......Bp...x<br>
fd87a020&nbsp; 00 80 c8 d0 00 63 89 00&nbsp; 00 81 ce c0 00 82 0e c8&nbsp;
..HP.c....N@...H<br>
fd87a030&nbsp; 00 82 80 08 00 82 c2 f0&nbsp; 00 83 02 f8 00 83 43 08&nbsp;
......Bp...x..C.<br>
<font color="#ff0000">7fc4e8&nbsp;</font> idir1 &nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; 8&nbsp; 9&nbsp; a&nbsp; b&nbsp; c&nbsp; d&nbsp; e&nbsp; f&nbsp;
v123456789abcdef<br>
fd87c000&nbsp; 28 6e 6f 75 6e 29 7c 63&nbsp; 6f 6e 67 6f 20 73 6e 61&nbsp;
(noun)|congo sna<br>
fd87c010&nbsp; 6b 65 7c 63 6f 6e 67 6f&nbsp; 20 65 65 6c 7c 62 6c 69&nbsp; ke|congo
eel|bli<br>
fd87c020&nbsp; 6e 64 20 65 65 6c 7c 73&nbsp; 61 6c 61 6d 61 6e 64 65&nbsp; nd
eel|salamande<br>
fd87c030&nbsp; 72 20 28 67 65 6e 65 72&nbsp; 69 63 20 74 65 72 6d 29&nbsp; r (generic
term)<br>
<br>
seek failed<br>
ok<br>
<br>
</tt>The above was the failure scenario. We followed the same indirect
pointer <font color="#009900">(green)</font> to the second indirect
pointer (listed in <font color="#ff0000">red</font> here), and that
got us garbage. Running fsck didn't seem to find any errors, so I
replicated the above process under Solaris to see where I'm getting
different data than it is. It turned out to be a truncation error due
to 32/64 issues:<br>
<tt><br>
</tt>Pointer 7fc4e8 is in 0x400-byte blocks (due to fsbtodbc containing
1), so this translates to byte address 1.ff13a.000 on partition 0.<br>
<br>
<pre><tt># /home/tarl/tools/bin.sparc/dump /dev/rdsk/c2t600144F0800A890000004A7378820001d0s0 1ff13a000 10</tt></pre>
<tt>&nbsp;1FF13A000&nbsp; 007f c4f0 007f c5f8 007f c600 007f c608&nbsp;
................<br>
&nbsp;1FF13A010&nbsp; 007f c610 007f c618 007f c620 007f c628&nbsp; ........... ...(<br>
&nbsp;1FF13A020&nbsp; 007f c630 007f c638 007f c640 007f c648&nbsp; ...0...8...@...H<br>
&nbsp;1FF13A030&nbsp; 007f c650 007f c658 007f c660 007f c668&nbsp; ...P...X...`...h<br>
&nbsp;1FF13A040&nbsp; 007f c670 007f c678 007f c680 007f c688&nbsp; ...p...x........<br>
&nbsp;1FF13A050&nbsp; 007f c690 007f c698 007f c6a0 007f c6a8&nbsp; ................<br>
&nbsp;1FF13A060&nbsp; 007f c6b0 007f c6b8 007f c6c0 007f c6c8&nbsp; ................<br>
&nbsp;1FF13A070&nbsp; 007f c6d0 007f c6d8 007f c6e0 007f c6e8&nbsp; ................<br>
&nbsp;1FF13A080&nbsp; 007f c6f0 007f c6f8 007f c700 007f c708&nbsp; ................<br>
&nbsp;1FF13A090&nbsp; 007f c710 007f c718 007f c720 007f c728&nbsp; ........... ...(<br>
&nbsp;1FF13A0A0&nbsp; 007f c730 007f c738 007f c740 007f c748&nbsp; ...0...8...@...H<br>
&nbsp;1FF13A0B0&nbsp; 007f c750 007f c758 007f c760 007f c768&nbsp; ...P...X...`...h<br>
&nbsp;1FF13A0C0&nbsp; 007f c770 007f c778 007f c780 007f c788&nbsp; ...p...x........<br>
&nbsp;1FF13A0D0&nbsp; 007f c790 007f c798 007f c7a0 007f c7a8&nbsp; ................<br>
&nbsp;1FF13A0E0&nbsp; 007f c7b0 007f c7b8 007f c7c0 007f c7c8&nbsp; ................<br>
&nbsp;1FF13A0F0&nbsp; 007f c7d0 007f c7d8 007f c7e0 007f c7e8&nbsp; ................<br>
<br>
</tt>Hmm. That's not the data I got above. After some serendipity (I
was using a firmworks forth simulator for arithmetic and it
accidentally truncated a value on me), I found:<br>
<pre><tt># /home/tarl/tools/bin.sparc/dump /dev/rdsk/c2t600144F0800A890000004A7378820001d0s0 ff13a000 10</tt></pre>
<tt>&nbsp; FF13A000&nbsp; 286e 6f75 6e29 7c63 6f6e 676f 2073 6e61&nbsp; (noun)|congo
sna<br>
&nbsp; FF13A010&nbsp; 6b65 7c63 6f6e 676f 2065 656c 7c62 6c69&nbsp; ke|congo eel|bli<br>
&nbsp; FF13A020&nbsp; 6e64 2065 656c 7c73 616c 616d 616e 6465&nbsp; nd eel|salamande<br>
&nbsp; FF13A030&nbsp; 7220 2867 656e 6572 6963 2074 6572 6d29&nbsp; r (generic term)<br>
&nbsp; FF13A040&nbsp; 0a61 6d70 6869 756d 6964 6165 7c31 0a28&nbsp; .amphiumidae|1.(<br>
&nbsp; FF13A050&nbsp; 6e6f 756e 297c 416d 7068 6975 6d69 6461&nbsp; noun)|Amphiumida<br>
&nbsp; FF13A060&nbsp; 657c 6661 6d69 6c79 2041 6d70 6869 756d&nbsp; e|family Amphium<br>
&nbsp; FF13A070&nbsp; 6964 6165 7c61 6d70 6869 6269 616e 2066&nbsp; idae|amphibian f<br>
&nbsp; FF13A080&nbsp; 616d 696c 7920 2867 656e 6572 6963 2074&nbsp; amily (generic t<br>
&nbsp; FF13A090&nbsp; 6572 6d29 0a61 6d70 686f 7261 7c31 0a28&nbsp; erm).amphora|1.(<br>
&nbsp; FF13A0A0&nbsp; 6e6f 756e 297c 6a61 7220 2867 656e 6572&nbsp; noun)|jar (gener<br>
&nbsp; FF13A0B0&nbsp; 6963 2074 6572 6d29 0a61 6d70 686f 7269&nbsp; ic term).amphori<br>
&nbsp; FF13A0C0&nbsp; 637c 310a 2861 646a 297c 6c69 7374 656e&nbsp; c|1.(adj)|listen<br>
&nbsp; FF13A0D0&nbsp; 696e 677c 6865 6172 696e 677c 6469 6167&nbsp; ing|hearing|diag<br>
&nbsp; FF13A0E0&nbsp; 6e6f 7374 6963 2070 726f 6365 6475 7265&nbsp; nostic procedure<br>
&nbsp; FF13A0F0&nbsp; 7c64 6961 676e 6f73 7469 6320 7465 6368&nbsp; |diagnostic tech<br>
</tt><br>
Yup. That's the garbage I was getting. So we somehow lost a high-order
bit between UFS and iSCSI CDB generation. It turns out to have been a
"d+" in 64-bit mode rather than 32-bit mode, so carries weren't being
moved along. But I rather suspect this won't be the last problem we
trip over in the boot blocks.<br>
<br>
</body>
</html>