This is the mail archive of the cygwin-developers@sourceware.cygnus.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: efence problems - answered


Linking in an "alien" malloc into cygwin is going to be very tough.
I've got cygwin linked with a debugging malloc now and seem to have
located my problems.  Now I'm suffering from gcc problems.  I can't
even build cygwin right now.  Sigh.

-chris

On Sat, Jun 26, 1999 at 11:04:52PM -0400, John Fortin wrote:
>	I was messing around with efence because of the discussions in the
>developers list.  Here is what I have discovered...  All the following
>occurs during cygwin1.dll startup.  The program was a simple hello world
>program with a malloc(1000) thrown in.
>
>1) during DLL initialization, a call to malloc is made.  Since I am
>linked with efence, the efence malloc gets called.  In
>efence.c:initialize() a call to getenv() is made to find is there is an
>environment variable EF_ALIGNMENT.  
>
>Program received signal SIGSEGV, Segmentation fault.
>0x61006f92 in _findenv (name=0x401663 "EF_ALIGNMENT", offset=0x258fd70)
>    at /d/src/winsup/environ.cc:147
>147       return NULL;
>(gdb) where
>#0  0x61006f92 in _findenv (name=0x401663 "EF_ALIGNMENT",
>offset=0x258fd70)
>    at /d/src/winsup/environ.cc:147
>#1  0x61006fb7 in getenv (name=0x401663 "EF_ALIGNMENT")
>    at /d/src/winsup/environ.cc:161
>#2  0x4016e0 in initialize () at efence.c:326
>#3  0x402435 in malloc (size=16) at efence.c:892
>#4  0x6101da9e in malloc (size=16) at /d/src/winsup/malloc.cc:42
>#5  0x6101ddff in malloc_init () at /d/src/winsup/malloc.cc:156
>#6  0x6101bf9a in heap_init () at /d/src/winsup/heap.cc:46
>#7  0x610041d3 in dll_crt0_1 () at /d/src/winsup/dcrt0.cc:616
>#8  0x610045d7 in dll_crt0 (uptr=0x4040e0) at /d/src/winsup/dcrt0.cc:770
>#9  0x402b6a in cygwin_crt0 (f=0x40152c <main>) at
>/d/src/winsup/libccrt0.cc:82
>(gdb)
>
>However, It looks like the 'environ' variable which holds the
>environment is not inited yet.  Hence, a seg-fault.
>(The following is in environ.cc)
>
>(gdb) n
>137           len++;
>(gdb) n
>140       for (p = environ; *p; ++p)
>(gdb) p environ
>$1 = (char **) 0x0
>(gdb) p *p
>$2 = 0x258fe0c "\034_X\002j+@"
>(gdb) whatis p
>type = char **
>(gdb) whatis *p
>type = char *
>(gdb) p (short)(char *)p
>$3 = 16608
>(gdb) whatis p
>type = char **
>(gdb) n
>
>Program received signal SIGSEGV, Segmentation fault.
>0x61006f92 in _findenv (name=0x401663 "EF_ALIGNMENT", offset=0x258fd70)
>    at /d/src/winsup/environ.cc:147
>147       return NULL;
>
>I modified efence not to use the environment variables, and this
>behavior stopped.  Then the following occurred...
>
>
>2)  in efence.c:initialize() it calls page.c:Page_Create(). 
>Page_Create() calls mmap().
>
>(mmap.cc:175)   mmapped_areas = new map;
>     	 	if (mmapped_areas == 0)
>        	{
>        	  	set_errno (ENOMEM);
>          		syscall_printf ("-1 = mmap(): ENOMEM");
>          		return (caddr_t) -1;
>        	}
>    		
>
>mmap() uses the C++ new method for allocating memory.  However, when we
>look at the stack trace we see that 
>'new' eventually uses malloc(), which call efence.c:malloc which calls
>efence.c:initialize() which calls page.c:Page_Create() which calls
>mmap().........  This continues until a seg-fault occurs.  I don't know
>a solution for this one.
>
>Thanks,
>John Fortin
>
>(gdb) run
>The program being debugged has been started already.
>Start it from the beginning? (y or n) y
>Starting program: /e/efence/hello.exe
>GDI32.DLL (symbols previously loaded)
>USER32.DLL (symbols previously loaded)
>KERNEL32.DLL (symbols previously loaded)
>ADVAPI32.DLL (symbols previously loaded)
>CYGWIN1.DLL (symbols previously loaded)
>
>Program received signal SIGSEGV, Segmentation fault.
>write (fd=4198520, buf=0x59205c, cnt=0)
>    at /d/src/newlib/libc/syscalls/syswrite.c:11
>11      {
>(gdb) where
>#0  write (fd=4198520, buf=0x59205c, cnt=0)
>    at /d/src/newlib/libc/syscalls/syswrite.c:11
>#1  0x402465 in EF_Print (
>    pattern=0x401078 "\n  Electric Fence 2.2.0 Copyright (C) 1987-1999
>Bruce Per
>ens <bruce@perens.com>\n") at print.c:182
>#2  0x40113d in initialize () at efence.c:297
>#3  0x401ead in malloc (size=12) at efence.c:892
>#4  0x6101da9e in malloc (size=12) at /d/src/winsup/malloc.cc:42
>#5  0x6105ffbb in new_eh_context ()
>#6  0x6106003d in eh_context_static ()
>#7  0x6105fffa in __get_eh_context ()
>#8  0x61060eb9 in __builtin_new (sz=12)
>#9  0x6101e324 in mmap (addr=0x0, len=1048576, prot=3, flags=34, fd=-1,
>off=0)
>    at /d/src/winsup/mmap.cc:175
>#10 0x401f8d in Page_Create (size=1048576) at page.c:71
>#11 0x40139c in initialize () at efence.c:395
>#12 0x401ead in malloc (size=12) at efence.c:892
>#13 0x6101da9e in malloc (size=12) at /d/src/winsup/malloc.cc:42
>#14 0x6105ffbb in new_eh_context ()
>#15 0x6106003d in eh_context_static ()
>#16 0x6105fffa in __get_eh_context ()
>#17 0x61060eb9 in __builtin_new (sz=12)
>#18 0x6101e324 in mmap (addr=0x0, len=1048576, prot=3, flags=34, fd=-1,
>off=0)
>    at /d/src/winsup/mmap.cc:175
>#19 0x401f8d in Page_Create (size=1048576) at page.c:71
>#20 0x40139c in initialize () at efence.c:395
>#21 0x401ead in malloc (size=12) at efence.c:892
>#22 0x6101da9e in malloc (size=12) at /d/src/winsup/malloc.cc:42
>#23 0x6105ffbb in new_eh_context ()
>#24 0x6106003d in eh_context_static ()
>#25 0x6105fffa in __get_eh_context ()
>#26 0x61060eb9 in __builtin_new (sz=12)
>#27 0x6101e324 in mmap (addr=0x0, len=1048576, prot=3, flags=34, fd=-1,
>off=0)
>    at /d/src/winsup/mmap.cc:175
>#28 0x401f8d in Page_Create (size=1048576) at page.c:71
>#29 0x40139c in initialize () at efence.c:395
>#30 0x401ead in malloc (size=12) at efence.c:892
>#31 0x6101da9e in malloc (size=12) at /d/src/winsup/malloc.cc:42
>#32 0x6105ffbb in new_eh_context ()
>#33 0x6106003d in eh_context_static ()
>#34 0x6105fffa in __get_eh_context ()
>#35 0x61060eb9 in __builtin_new (sz=12)
>#36 0x6101e324 in mmap (addr=0x0, len=1048576, prot=3, flags=34, fd=-1,
>off=0)
>    at /d/src/winsup/mmap.cc:175
>#37 0x401f8d in Page_Create (size=1048576) at page.c:71

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]