[ELDK] string comparison Problem - ELDK version differences
Thirumalai Adhi
thirumalai.rtos at gmail.com
Sat Apr 3 11:36:17 CEST 2010
Dear Wolfgang Denk,
The problem is getting solved by clearing powerpc condition
register once I am returning from strcmp function.
I started to disassemble both u-boot.elf [ELDK4.0 generated and ELDK-4.2
generated] file and compared both strcmp and printf function. There we found
one difference that on printf function of ELDK-4.2 generated elf is having
an extra statement to clear the condition register.
So as a first step we included one clear statement in the code.
Then there was no exception. I don't know exactly what it means.
Kindly let me know the changes.
For your reference,
Sample program:
=============
#include <common.h>
#include <exports.h>
int hello_world (int argc, char *argv[])
{
int i;
/* Print the ABI version */
app_startup(argv);
printf ("Example expects ABI version %d\n", XF_VERSION);
printf ("Actual U-Boot ABI version %d\n", (int)get_version());
printf ("Hello World\n");
/*added for Testing */
if(strcmp("HelloWorld","HelloWorld")==0)
{
printf("Both strings are same");
}
printf ("argc = %d\n", argc);
for (i=0; i<=argc; ++i) {
printf ("argv[%d] = \"%s\"\n",
i,
argv[i] ? argv[i] : "<NULL>");
}
printf ("Hit any key to exit ... ");
while (!tstc())
;
/* consume input */
(void) getc();
printf ("\n\n");
return (0);
}
Exception:
===========
DP-0405> tftp 0x40000 hello_world.bin
Using i82559#0 device
TFTP from server 10.5.18.1; our IP address is 10.5.18.201
Filename 'hello_world.bin'.
Load address: 0x40000
Loading: #####
done
Bytes transferred = 66532 (103e4 hex)
DP-0405> go 0x40004
## Starting application at 0x00040004 ...
Example expects ABI version 9
Actual U-Boot ABI version 9
Hello World
Bad trap at PC: ff70198, SR: 8000, vector=800
NIP: 0FF70198 XER: 20000000 LR: 0004007C REGS: 0fd3d778 TRAP: 0800 DAR:
00000000
MSR: 00008000 EE: 1 PR: 0 FP: 0 ME: 0 IR/DR: 00
GPR00: 00040354 0FD3D868 00FD7F80 0FD3D8E4 00040354 0FD3D8D8 00000000
00000000
GPR08: FFFFFFFC 00000020 00000000 0FF70154 90000000 40000000 0FFA3000
00000000
GPR16: 0FF90620 00000000 00000000 00000000 00000000 00000000 00000000
00000000
GPR24: 00000000 0FD422B0 00000000 00000000 0FD42364 00000001 000583B4
0FD3D8E4
Call backtrace:
Exception in kernel pc ff70198 signal 0
Regards,
Thiru
On Thu, Apr 1, 2010 at 1:57 AM, Wolfgang Denk <wd at denx.de> wrote:
> Dear Thirumalai Adhi,
>
> In message <t2wae0f6fbd1003311044x36a87314s70bfbb456cb3c7c7 at mail.gmail.com>
> you wrote:
> >
> > I am using u-boot-1.3.4 on my MPC7410 based target. I am facing one
> > problem on using different ELDK version. On my custom application i just
> > want compare two strings, based upon that i need to print some string.
>
> First I want to point out that U-Boot 1.3.4 is very old; I strongly
> recommend you to update your code and use a recent version instead.
>
> > The problem is when i print the string directly using printf statement
> the
> > processor is raising FPU unavailable exception. But the same thing is
> > working fine with puts function.
> >
> > Another observation is So when i use ELDK-4.2 there is not problem for me
> > but in case of using
> >
> > ELDK-4.0 FPU unavailable exception is coming.
>
> We never have seen any such problems in any project. I think ther
> emust be some problem with your code. Can you try and prepare a small
> example (say, 10...15 lines of C code) that shows the behaviour you
> claim here?
>
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> How long does it take a DEC field service engineer to change a
> lightbulb? It depends on how many bad ones he brought with him.
>
More information about the eldk
mailing list