Mail Archives: cygwin-developers/1999/06/26/22:59:57
Hi Chris,
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 AT perens DOT 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
#38 0x40139c in initialize () at efence.c:395
- Raw text -