Hi All,<br>
I have written one sample assmebly and c code which reads command line args and displays .<br>
<br>
find the source files as attachments.<br>
<br>
expected output is ,<br>
        $ ./a.out<br>
           Inside __linker_init argc = 1<br>
           Inside __linker_init argv[0] = ./a.out<br>
           Segmentation fault [Seg fault Never mind]<br>

<br>
if i statically link startx86.S  & linker.c  on x86 AND
statrt_ppc.S & linker.c on PS3,i'll get SEGV fault on both system.
But on PS3, inside '_start' function if i verify the contents of
'r1[stack pointer]' and '(Char *) *(r1 + 4)'  in GDB i get '1' and
'~/a.out' respectively .But once 'r1' moved to r3[holds the 1st arg of
the function] & passed as argument to __linker_init ,inside the
function '*elfdata' points '1' but (char *) *(elfdata + 1) points to
some junk string. some thing like this "|c\033x|i\003�N\200\004
\224!��|\b\002�\220\001".<br>

find the GDB log file of PS3.<br>
<br>
if i link them without statically,i'll get the correct output on x86 .i.e<br>
<br>
        $ ./a.out<br>
           Inside __linker_init argc = 1<br>
           Inside __linker_init argv[0] = ./a.out<br>

           Segmentation fault [Seg fault Never mind]<br>
<br>
but  on ps3 i get this,<br>
        $ ./a.out<br>
           Inside __linker_init argc = 0<br>
           Inside __linker_init argv[0] = |c|i�N� �!����<br>
           Segmentation fault<br>

Why am i getting strange characters instead of './a.out' and y 'argc' having 'zero'  ?<br>
<br>
Why is this two different outputs for static linking and dynamic linking ?<br>
<br>
-Anand<br>
<br>