Date: Tue, 22 Oct 2002 11:17:44 -0400 (EDT) From: Andrew Gallatin <gallatin@cs.duke.edu> To: Ruslan Ermilov <ru@FreeBSD.org> Cc: Alexander Kabaev <kan@FreeBSD.org>, "David O'Brien" <obrien@FreeBSD.org>, current@FreeBSD.org Subject: Re: Groff problems (was Re: alpha tinderbox failure) Message-ID: <15797.27672.327091.966095@grasshopper.cs.duke.edu> In-Reply-To: <20021022142929.GB48398@sunbay.com> References: <200210210942.g9L9gLpM025724@beast.freebsd.org> <15796.17145.909288.498725@grasshopper.cs.duke.edu> <20021022142929.GB48398@sunbay.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Ruslan Ermilov writes: > Well, I tried this on beast. It is easily reproduceable. > > It turned out that if you build groff with -DNO_CPU_CFLAGS > (the way it is built during the bootstrap-tools stage of > buildworld), it fails with the `out of memory' error in > contrib/groff/src/libs/libgroff/new.cc. To reproduce, it > is only necessary to build the following dirs, in order, > with -DNO_CPU_CFLAGS: > > gnu/usr.bin/groff/src/libs/libgroff > gnu/usr.bin/groff/src/roff/groff > > And then run groff from the latter as follows: > > groff -V > > More fun. Groff is built with -fno-rtti and -fno-exceptions: FWIW, the "out of memory" is because it is attempting to malloc a huge amount of ram. Apparently mistakenly: (gdb) break /usr/src/contrib/groff/src/libs/libgroff/new.cc:45 Breakpoint 1 at 0x12000c9cc: file /usr/src/contrib/groff/src/libs/libgroff/new.cc, line 45. (gdb) r Starting program: /usr/src/gnu/usr.bin/groff/src/roff/groff/groff Breakpoint 1, operator new(unsigned long) (size=4832141312) at /usr/src/contrib/groff/src/libs/libgroff/new.cc:45 45 if (p == 0) { (gdb) p/x size $1 = 0x12004a000 (gdb) Note that 0x12004a000 looks quite a bit like an address in the data segment. The stack looks like this (its happening before main is entered): (gdb) where #0 operator new(unsigned long) (size=4832141312) at /usr/src/contrib/groff/src/libs/libgroff/new.cc:45 #1 0x12000d528 in operator new[](unsigned long) () #2 0x12000c1ac in search_path (this=0x120035930, envvar=0x0, standard=0x12002b8b1 "/usr/share/groff_font", add_home=1,add_current=0) at /usr/src/contrib/groff/src/libs/libgroff/searchpath.cc:39 #3 0x12000aec4 in __static_initialization_and_destruction_0 ( __initialize_p=1, __priority=65535) at /usr/src/contrib/groff/src/libs/libgroff/fontfile.cc:34 #4 0x12000af30 in _GLOBAL__I__ZN4font3resE () at /usr/src/contrib/groff/src/libs/libgroff/fontfile.cc:34 #5 0x12002a0b8 in __do_global_ctors_aux () #6 0x120000150 in _init () #7 0x120000228 in _start () The code calling new is this bit of c++ code: (gdb) frame 2 #2 0x12000c1ac in search_path (this=0x120035930, envvar=0x0, standard=0x12002b8b1 "/usr/share/groff_font", add_home=1, add_current=0) at /usr/src/contrib/groff/src/libs/libgroff/searchpath.cc:39 39 dirs = new char[((e && *e) ? strlen(e) + 1 : 0) (gdb) l 34 if (add_home) 35 home = getenv("HOME"); 36 char *e = 0; 37 if (envvar) 38 e = getenv(envvar); 39 dirs = new char[((e && *e) ? strlen(e) + 1 : 0) 40 + (add_current ? 1 + 1 : 0) 41 + ((home && *home) ? strlen(home) + 1 : 0) 42 + ((standard && *standard) ? strlen(standard) : 0) 43 + 1]; I have no idea what 'e' is, gdb doesn't like things declared in the middle of a scope, apparently. Drew To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15797.27672.327091.966095>