From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rabin Vincent Date: Wed, 5 Nov 2014 20:37:31 +0100 Subject: [U-Boot] [PATCH 1/6] dlmalloc: ensure gd is set for early alloc In-Reply-To: References: <1414621302-32062-1-git-send-email-rabin@rab.in> Message-ID: <20141105193731.GA28554@debian> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Sat, Nov 01, 2014 at 09:11:34AM -0600, Simon Glass wrote: > On 29 October 2014 16:21, Rabin Vincent wrote: > > Attempting to run the sandbox leads to a segfault, because some dynamic > > libraries (outside of u-boot) attempt to use malloc() to allocate memory > > before u-boot's gd variable is initialized. > > > > Check for gd not being NULL in the SYS_MALLOC_F_LEN handling, so that > > malloc() doesn't crash when called at this point. > > > > $ gdb -q --args ./u-boot > > (gdb) r > > Program received signal SIGSEGV, Segmentation fault. > > 0x0000000000412b9b in malloc (bytes=bytes at entry=37) at common/dlmalloc.c:2184 > > 2184 if (!(gd->flags & GD_FLG_RELOC)) { > > (gdb) p gd > > $1 = (gd_t *) 0x0 > > (gdb) bt > > #0 0x0000000000412b9b in malloc (bytes=bytes at entry=37) at common/dlmalloc.c:2184 > > #1 0x00007ffff75bf8e1 in set_binding_values (domainname=0x7ffff11f4f12 "libgpg-error", dirnamep=0x7fffffffe168, codesetp=0x0) > > at bindtextdom.c:228 > > #2 0x00007ffff75bfb4c in set_binding_values (codesetp=0x0, dirnamep=0x7fffffffe168, domainname=) at bindtextdom.c:350 > > #3 __bindtextdomain (domainname=, dirname=0x7ffff11f4f00 "/usr/share/locale") at bindtextdom.c:348 > > #4 0x00007ffff11eca17 in ?? () from /lib/x86_64-linux-gnu/libgpg-error.so.0 > > #5 0x00007ffff7dea9fa in call_init (l=, argc=argc at entry=1, argv=argv at entry=0x7fffffffe208, > > env=env at entry=0x7fffffffe218) at dl-init.c:78 > > #6 0x00007ffff7deaae3 in call_init (env=0x7fffffffe218, argv=0x7fffffffe208, argc=1, l=) at dl-init.c:36 > > #7 _dl_init (main_map=0x7ffff7ffe1a8, argc=1, argv=0x7fffffffe208, env=0x7fffffffe218) at dl-init.c:126 > > #8 0x00007ffff7ddd1ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2 > > How do you provoke this error? It doesn't seem to happen for me. I just run the u-boot binary, which I built with sandbox_defconfig. Perhaps you have different library versions on your system? (I see it's libgpg-error.so which is triggering the malloc() here.) I run Debian unstable.