[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [microblaze-uclinux] Building microblaze toolchain



Hi Scott,

OK I think I've tracked down what's happening, but not quite sure why - 
that'll be your job! :)

First of all, I took your .elf file, converted it with my linux-based 
mb-elf2flt, and it runs fine.  Also, running your flat file, and I got 
the same error.

So, at least we know the problem is with your windows elf2flt build.

I suggest you run your linux-based elf2flt over hello.elf (call that 
lin-hello), so you can do the comparison I'm talking about below:

dump the good flat file:

$ hexdump -C lin-hello

 From offset 0xfc0:

00000fc0  80 00 00 18 00 00 00 84  80 00 00 68 80 00 00 70
00000fd0  80 00 00 8c 80 00 00 a0  80 00 00 a8 80 00 00 f8

This is the relocation table.  If you cross-check with the output of 
elf2flt -v, you can see reloc[1] is 0x18, reloc[2] is 0x84, and so on. 
The 0x80 in the MSB is a flag that is used to signal a special case of 
relocation.

Anyway, repeat the same on the bad hello flat:

$ hexdump -C hello

Again, from offset 0xfc0:

00000fc0  00 00 80 00 00 18 00 00  00 84 80 00 00 68 80 00
00000fd0  00 70 80 00 00 8c 80 00  00 a0 80 00 00 a8 80 00

See what's happened?  You've got a two-byte shift - the relocation table 
is not where it should be, and you can see now why the flat loader is 
picking up a bogus relocation of 0x8000...

Now, I'm not sure why you are getting this two byte shift - that will be 
for you to debug.  I suggest even parallel gdb sessions stepping through 
elf2flt on windows and linuxc, to see what's going on.

Hope this is useful,

John
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@itee.uq.edu.au
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/