[Top] [All Lists]

Re: Linux/MIPS and ELF dynamic linker/loader questions...

Subject: Re: Linux/MIPS and ELF dynamic linker/loader questions...
From: Andreas Jaeger <>
Date: Wed, 27 Mar 2002 22:09:00 +0100
In-reply-to: <> ("Steven J. Hill"'s message of "Wed, 27 Mar 2002 15:03:50 -0600")
References: <>
User-agent: Gnus/5.090006 (Oort Gnus v0.06) XEmacs/21.4 (Artificial Intelligence, i386-suse-linux)
"Steven J. Hill" <> writes:

> Greetings.
> I am working on a MIPS dynamic linker/loader for uClibc and
> would appreciate some clarification on the finer points of
> ELF and the Linux kernel interface. Forgive the cross post.
> The first problem I have discovered is that the value of
> argc passed back to the userspace process from the Linux
> kernel is always zero. The argv, environment and auxillary
> vectors come through just fine. I have to loop through the
> stack manually to count the number of argument vectors in
> order to get argc:

In glibc I had no problems finding argc, check

/* This is the canonical entry point, usually the first thing in the text
   segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
   point runs, most registers' values are unspecified, except for:

   v0 ($2)      Contains a function pointer to be registered with `atexit'.
                This is how the dynamic linker arranges to have DT_FINI
                functions called for shared libraries that have been loaded
                before this code runs.

   sp ($29)     The stack contains the arguments and environment:
                0(%esp)                 argc
                4(%esp)                 argv[0]
                (4*argc)(%esp)          NULL
                (4*(argc+1))(%esp)      envp[0]
   ra ($31)     The return address register is set to zero so that programs
                that search backword through stack frames recognize the last
                stack frame.

 Andreas Jaeger
  SuSE Labs

<Prev in Thread] Current Thread [Next in Thread>