[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [microblaze-uclinux] microblaze-uclinux-elf2flt mistranslation
Hi Steve,
I ran into the same problem a year or so ago. I posted this issue to
the group in June of 2008:
http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/archive/2008/06/msg00108.html
I came to the same conclusions that you did. Instead of spending a lot
of time trying to fix elf2flt, I developed a work-around:
* Take the same elf file that was used by elf2flt to generate the flat
executable and create a binary file with mb-objcopy.
* Replace the .data section of the flat executable with the binary
file's version.
I created a utility to do compare the 2 data sections and do the
replacement. I often see a couple mismatches between the binary file's
data section and the flat file's. I have this as part of every
microblaze compile.
Here is a run of tail end of my compile script:
mb-flthdr -p la5600
la5600
Magic: bFLT
Rev: 4
Build Date: Tue May 26 18:07:37 2009
Entry: 0x50
Data Start: 0x2eb40
Data End: 0x41ec0
BSS End: 0x55dc0
Stack Size: 0x8000
Reloc Start: 0x41ec0
Reloc Count: 0x12e7
Flags: 0x1 ( Load-to-Ram )
==============================================================
* Compare flat file Data Sect with bin file & fix flat file *
==============================================================
mb-objcopy -O binary la5600.gdb la5600.bin
./la_fltfix -v -f la5600 -b la5600.bin -o la5600
./la_fltfix INFO: Flat File Flags=0x00000001
./la_fltfix INFO: DataSect Len=0x13380,78720 Ofst:Flt=0x2eb40 Bin=0x2eb00
./la_fltfix INFO: DIFF @DataSect+0xf29e Flt=0xec Bin=0xed
./la_fltfix INFO: DIFF @DataSect+0xf29f Flt=0x6c Bin=0xd8
./la_fltfix INFO: DIFF @DataSect+0xf31e Flt=0xec Bin=0xed
./la_fltfix INFO: DIFF @DataSect+0xf31f Flt=0x6c Bin=0xd8
./la_fltfix INFO: 4 DIFFs found
./la_fltfix INFO: Created Output flat file "la5600"
./la_fltfix INFO: Return code=0
I hope this helps.
Rod Campbell
Steven J. Magnani wrote:
Hi,
Has anyone run into problems with microblaze-uclinux-elf2flt?
We have a program that contains a constant global array something like
this:
const struct
{
const char* source;
const char* target;
unsigned long flags;
const char* options;
unsigned int channel;
unsigned long devnum;
} myGlobalStruct[9] = { blah blah blah };
What we are seeing is for certain sequences of executable code, one of
the .target fields in the array gets mis-translated, so instead of
pointing to the constant string associated with array element [3], it
points to the constant string associated with array element [0]. It's
definitely a translation problem because I can use
microblaze-uclinux-objcopy to extract the .data segment from the .gdb
file and the structure is correct there.
Depending on how we change the program flow, the problem can come and
go. If we add a printf to one module the problem goes away.
Any suggestions? Is there a more recent version of microblaze-uclinux
tools available anywhere, or in the works? Tool problems like this make
us very nervous because there's no telling what else is being corrupted.
Thanks.
------------------------------------------------------------------------
Steven J. Magnani "I claim this network for MARS!
www.digidescorp.com Earthling, return my space modulator!"
#include <standard.disclaimer>
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/
--
Rod Campbell
Senior Software Engineer
Linear Acoustic, Inc.
___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/