"Steven J. Hill" <sjhill@cotw.com> 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 sysdeps/mips/elf/start.S: /* 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] ... NULL 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 -- Andreas Jaeger SuSE Labs aj@suse.de private aj@arthur.inka.de http://www.suse.de/~aj