On Monday 19 March 2007 21:13:12 Thiemo Seufer wrote: > J. Mayer wrote: > > On Mon, 2007-03-19 at 12:16 +0000, Thiemo Seufer wrote: > > > CVSROOT: /sources/qemu > > > Module name: qemu > > > Changes by: Thiemo Seufer <ths> 07/03/19 12:16:29 > > > > > > Modified files: > > > linux-user : main.c > > > > > > Log message: > > > Support -cpu selection for mips usermode emulation. Fix segfault when > > > dispaying the -cpu list help. > > > > Could you tell more about the segfault ? > > It segfaulted for me (on ppc/linux) after printing the help list. > > > exit is used at many other places without any problem and furthermore I > > did not experiment any crash while testing the PowerPC target with the > > initial patch, so ? (I'd really like to understand...) > > I didn't really debug it, but I noticed the other branch in the > conditional uses _exit() instead of exit(). With that change, the > segfault disappeared. I figure we have an atexit/on_exit call somwhere > which tries to use data which isn't initialized at that point.
Maybe that's related to the problem i've got (in http://lists.gnu.org/archive/html/qemu-devel/2007-03/msg00110.html ). There is some piece of code in main.c which mess around libc initialization & exit and were making my qemu-i386 segfault really early. It seems it was designed to avoid a bug in some versions of glibc. I attach the simple patch I've made to avoid that. It may need adjustements since I don't know enough about libc internals on initialization to be sure that's the correct fix - I would be deeply interested in some input/comments on this problem. Pierre Palatin
Index: linux-user/main.c =================================================================== --- linux-user/main.c (révision 527) +++ linux-user/main.c (copie de travail) @@ -44,7 +44,7 @@ /* for recent libc, we add these dummy symbols which are not declared when generating a linked object (bug in ld ?) */ -#if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined(CONFIG_STATIC) +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ == 3) && !defined(CONFIG_STATIC) long __preinit_array_start[0]; long __preinit_array_end[0]; long __init_array_start[0];
_______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel