Hello, For me the problem was introduced in
package libc6_2.3.6.ds1-6_i386.deb by linux-kernel-header-2.6.18-1. Building libc6 with
linux-kernel-headers_2.6.17.10-3 work fine for me. And the difference that cause freeze
between lkh 2.6.17.10-3 and 2.6.18-1 is in linux/compiler.h. The ___KERNEL___ directive have moved
and some declarations are not in userspace. In our case, this is noinline
define that cause problem. Before lkh 2.6.18-1 noinline was undefined
in userspace, so declaration like “__attribute ((noinline))__” was equal
to “__attribute (())__”. When print_statistics function code in elf/rtld.c
is noinlined by gcc, VIA C7 freeze. And in print_statistics that is _dl_debug_printf
call that fail by heavy realloc. More precisely, unsigned long int num_relative_relocations
seems to be the source. Deleting that printf var is an issue. I would like to debug more and more, but I have
no time to do that. Any investigation and tech used for debugging interests me. I don’t know how to disassembly inlined
function to compare it to noinlined function. I have build a libc6 debian package with
fix from official debian subversion for my production, if you need it I can
share it. But I think we are very nearly to find the real bug. And maybe all no
intel x86 are concerned… NOTE : We talk about freeze, freeze,…
I don’t think that is a freeze, kernel seems to switch in infinite loop. Best regards, Julien Durand. |