On Thu, Mar 19, 2009 at 12:20 AM, Khem Raj <[email protected]> wrote:
> On Wednesday 18 March 2009 05:05:10 Groleo Marius wrote:
>> On Tue, Mar 17, 2009 at 11:55 AM, Groleo Marius <[email protected]> wrote:
>> > Hi list,
>> > I have a uClibc on a coldfire m547x board.
>> > The kernel boots fine but the loading process halts somewhere in ld.
>> > I've compiled uClibc with debugging so here is the output.
>> > -------------------------------------------
>> > VFS: Mounted root (nfs filesystem).
>> > ELF header=0x80004000
>> > First Dynamic section entry=0x80010340
>> > Scanning DYNAMIC section
>> > Done scanning DYNAMIC section
>> > About to do library loader relocations
>> > Done relocating ldso; we can now use globals and make function calls!
>> > Step0
>> > -------------------------------------------
>> > I added "Step0" in dl-startup.c ( see below ).
>> > Any ideas why is this happening
>> > or how can I debug this further ?
>> >
>> >
>> > ldso/ldso/dl-startup.c
>> > 309 SEND_STDERR_DEBUG("Step0\n");
>> > 310 __rtld_stack_end = (void *)(argv - 1);
>> > 311 SEND_STDERR_DEBUG("Step1\n");
>> >
>> > --
>> > Regards, Groleo!
>> >
>> It looks like the GOT table was not initialized properly.
>> I got it to pass over that assignment but it's stucked in a mmap now.
>> Anyone knows if there are any problem with coldfire mmap ?
> can you try this patch from glibc
>
>
> --
> Khem Raj
>
It doesn't compile
========================
[ERROR] libc/sysdeps/linux/m68k/mmap.S:19:20: error: sysdep.h: No
such file or directory
[ALL ] libc/sysdeps/linux/m68k/mmap.S: Assembler messages:
[ALL ] libc/sysdeps/linux/m68k/mmap.S:22: Error: Unknown operator
-- statement `entry (__mmap)' ignored
[ALL ] libc/sysdeps/linux/m68k/mmap.S:24: Error: syntax error --
statement `move.l #SYS_ify(mmap),%d0' ignored
[ALL ] libc/sysdeps/linux/m68k/mmap.S:41: Error: Unknown operator
-- statement `pseudo_end (__mmap)' ignored
[ERROR] make[1]: *** [libc/sysdeps/linux/m68k/mmap.os] Error 1
========================
OTOH i have more debug infos in the attached debug.log from ldso/ldso/dl-elf.c.
The added _dl_dprintfs are included in the patch.
Is it ok that both maxvma and minvma are zero ?
--
Regards, Groleo!
First Dynamic section entry=0x800106fc
Scanning DYNAMIC section
Done scanning DYNAMIC section
About to do library loader relocations
machine addr preloaded from outside
Done relocating ldso; we can now use globals and make function calls!
Step0
Step1
_dl_get_ready_to_run:171: Cool, ldso survived making function calls
_dl_malloc:928: mmapping more memory:rounded_size=8192 _dl_pagesize=8192
_dl_get_ready_to_run:362: Lib Loader: (0x80004000) /lib/ld-uClibc.so.0
_dl_get_ready_to_run:291: calling mprotect on the application program
_dl_get_ready_to_run:296: Protected addr:0x80002000 size:1408 PROT_FLAGS:0x7 ppnt->p_vaddr:0x800024b0
ldso/ldso/dl-elf.c:463 libaddr=status'0x80016000' =_dl_mmap((piclib'0x1' ? 0 : minvma'0x0'), maxvma'0x0' - minvma, PROT_NONE'0xe000', flags'0xe000' | MAP_ANONYMOUS, -1,0 )
ldso/ldso/dl-elf.c:478 libaddr'0x80016000' before DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:480 libaddr'0x80016000' after DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:556 tryaddr'0x80023000'= piclib'0x1'== 2 ? piclib2map'0x0': ((char*) (piclib ? libaddr'0x80016000': 0) + (ppnt->p_vaddr'0xd108' & PAGE_ALIGN))
status'0xffffffff' =_dl_mmap(tryaddr'0x80023000', size'876', LXFLAGS(ppnt->p_flags'0x6')'0x3' flags'0x12'|(piclib2map ? MAP_FIXED : 0)'0x12', p_filesz'612' p_offset'0xb000'
ldso/ldso/dl-elf.c:608 status'0xffffffff' tryaddr'0x80023000'
/sbin/init:610: can't map '/lib/libgcc_s.so.2'
ldso/ldso/dl-elf.c:463 libaddr=status'0x80016000' _dl_mmap((piclib'0x1' ? 0 : minvma'0x0'), maxvma'0x0' - minvma, PROT_NONE'0xe000', flags'0xe000' | MAP_ANONYMOUS, -1,0 )
ldso/ldso/dl-elf.c:478 libaddr'0x80016000' before DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:480 libaddr'0x80016000' after DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:556 tryaddr'0x80023000'= piclib'0x1'== 2 ? piclib2map'0x0': ((char*) (piclib ? libaddr'0x80016000': 0) + (ppnt->p_vaddr'0xd108' & PAGE_ALIGN))
status'0xffffffff' =_dl_mmap(tryaddr'0x80023000', size'876', LXFLAGS(ppnt->p_flags'0x6')'0x3' flags'0x12'|(piclib2map ? MAP_FIXED : 0)'0x12', p_filesz'612' p_offset'0xb000'
ldso/ldso/dl-elf.c:608 status'0xffffffff' tryaddr'0x80023000'
/sbin/init:610: can't map '/lib/libgcc_s.so.2'
ldso/ldso/dl-elf.c:463 libaddr=status'0x80016000' =_dl_mmap((piclib'0x1' ? 0 : minvma'0x0'), maxvma'0x0' - minvma, PROT_NONE'0xe000', flags'0xe000' | MAP_ANONYMOUS, -1,0 )
ldso/ldso/dl-elf.c:478 libaddr'0x80016000' before DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:480 libaddr'0x80016000' after DL_INIT_LOADADDR
ldso/ldso/dl-elf.c:556 tryaddr'0x80023000'= piclib'0x1'== 2 ? piclib2map'0x0': ((char*) (piclib ? libaddr'0x80016000': 0) + (ppnt->p_vaddr'0xd108' & PAGE_ALIGN))
status'0xffffffff' =_dl_mmap(tryaddr'0x80023000', size'876', LXFLAGS(ppnt->p_flags'0x6')'0x3' flags'0x12'|(piclib2map ? MAP_FIXED : 0)'0x12', p_filesz'612' p_offset'0xb000'
ldso/ldso/dl-elf.c:608 status'0xffffffff' tryaddr'0x80023000'
/sbin/init:610: can't map '/usr/lib/libgcc_s.so.2'
/sbin/init: can't load library 'libgcc_s.so.2'
Kernel panic - not syncing: Attempted to kill init!
--- dl-elf.c 2009-03-19 12:37:39.288769384 +0200
+++ dl-elf.c.orig 2008-11-18 16:01:35.000000000 +0200
@@ -460,24 +460,13 @@
return NULL;
}
libaddr = (unsigned long) status;
- _dl_dprintf(2, "%s:%i libaddr=status'%x' =_dl_mmap((piclib'%x' ? 0 : minvma'%x'), maxvma'%x' - minvma, PROT_NONE'%x', flags'%x' | MAP_ANONYMOUS, -1,0 )\n", __FILE__,__LINE__
- , libaddr
- , piclib
- , minvma
- , (piclib ? 0 : minvma)
- , maxvma
- , maxvma - minvma
- , PROT_NONE
- , flags
- );
flags |= MAP_FIXED;
}
/* Get the memory to store the library */
ppnt = (ElfW(Phdr) *)(intptr_t) & header[epnt->e_phoff];
- _dl_dprintf(2, "%s:%i libaddr'%x' before DL_INIT_LOADADDR\n", __FILE__, __LINE__, libaddr);
+
DL_INIT_LOADADDR(lib_loadaddr, libaddr, ppnt, epnt->e_phnum);
- _dl_dprintf(2, "%s:%i libaddr'%x' after DL_INIT_LOADADDR\n", __FILE__,__LINE__,libaddr);
for (i = 0; i < epnt->e_phnum; i++) {
if (DL_IS_SPECIAL_SEGMENT (epnt, ppnt)) {
@@ -553,16 +542,6 @@
size = (ppnt->p_vaddr & ADDR_ALIGN)
+ ppnt->p_filesz;
- _dl_dprintf(2, "%s:%i tryaddr'%x'= piclib'%x'== 2 ? piclib2map'%x': ((char*) (piclib ? libaddr'%x': 0) + (ppnt->p_vaddr'%x' & PAGE_ALIGN))\n"
- , __FILE__
- , __LINE__
- , tryaddr
- ,piclib
- ,piclib2map
- ,libaddr
- ,ppnt->p_vaddr,ppnt->p_paddr
- );
-
/* For !MMU, mmap to fixed address will fail.
So instead of desperately call mmap and fail,
@@ -571,22 +550,10 @@
#ifndef __ARCH_USE_MMU__
if (piclib2map == 0)
#endif
- {status = (char *) _dl_mmap
+ status = (char *) _dl_mmap
(tryaddr, size, LXFLAGS(ppnt->p_flags),
flags | (piclib2map ? MAP_FIXED : 0),
infile, ppnt->p_offset & OFFS_ALIGN);
- _dl_dprintf(2, "status'%x' =_dl_mmap(tryaddr'%x', size'%i', LXFLAGS(ppnt->p_flags'%x')'%x' flags'%x'|(piclib2map ? MAP_FIXED : 0)'%x', p_filesz'%i' p_offset'%x'\n"
- ,status
- ,tryaddr
- ,size
- ,ppnt->p_flags
- ,LXFLAGS(ppnt->p_flags)
- ,flags
- ,flags|(piclib2map ? MAP_FIXED : 0)
- ,ppnt->p_filesz
- ,ppnt->p_offset&OFFS_ALIGN
- );
- }
#ifndef __ARCH_USE_MMU__
else
status = MAP_FAILED;
@@ -597,11 +564,9 @@
ppnt->p_offset & OFFS_ALIGN)
== size))
status = tryaddr;
- _dl_dprintf(2, "%s:%i _DL_PREAD:status=tryadd=%x\n",__FILE__,__LINE__,tryaddr);
#endif
if (_dl_mmap_check_error(status)
|| (tryaddr && tryaddr != status)) {
- _dl_dprintf(2, "%s:%i status'%x' tryaddr'%x'\n", __FILE__, __LINE__, status, tryaddr);
cant_map:
_dl_dprintf(2, "%s:%i: can't map '%s'\n",
_dl_progname, __LINE__, libname);
_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc