Hi folks,

I don't understand what's wrong:

When I look at Linux code where it prepares to jump into user application, I 
see it putting argc into r0 (include/asm-arm/processor.h macro start_thread 
line 78):


        regs->ARM_pc = pc & ~1;         /* pc */                        \
        regs->ARM_sp = sp;              /* sp */                        \
        regs->ARM_r2 = stack[2];        /* r2 (envp) */                 \
        regs->ARM_r1 = stack[1];        /* r1 (argv) */                 \
==>     regs->ARM_r0 = stack[0];        /* r0 (argc) */                 \
        nommu_start_thread(regs);                                       \

Then uClibc seems to use the r0 as a pointer into some cleanup function 
(libc/sysdeps/linux/arm/crt1.S _start line 200):


    /* Push stack limit */
    str a3, [sp, #-4]!

    /* Push rtld_fini */
=>  str a1, [sp, #-4]!

#ifdef __PIC__
    ldr sl, .L_GOT


In my system I see the behaviour one might expect from that: When my 
application does an exit, it crashes by jumping to address 1 (no arguments so 
argc is 1). If I understand correctly, the uClibc code expects shared linker in 
between Linux and uClibc application. But there never is one, when the 
application is bFLT format, right? Is it there even if the application is ELF 
but static? Am I missing something? Do I need to upgrade my head?

--

Timo


      
_______________________________________________
uClibc mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Reply via email to