Subject: GNU Emacs 23.0.92 pretest fails to build for DJGPP target using SYSTEM_MALLOC
From: Rugxulo <[email-masked]>
To: [email-masked]
Date: Thu, 2 Apr 2009 16:09:45 -0400

Hi,
   Unlike 22.3, you apparently can't build the latest GNU Emacs
23.0.92 pretest (43 MB .tar.gz download) if defining SYSTEM_MALLOC
instead of default REL_ALLOC. This might sound a little weird / crazy,
but Windows Vista doesn't report memory correctly and doesn't resize
memory blocks like XP does. In other words, Vista is worse than XP in
the NTVDM department. And I think Windows 2003 (and later 2008) shared
the same kernels with Vista pre-SP1 and SP1, respectively. And Windows
7 will also share the same kernel. So this is a problem. With
REL_ALLOC (default), it runs out of memory even when I know for a fact
there is enough available (since other DJGPP apps can access it, yes I
use the registry hack). It just doesn't work like it does on XP (which
Eli Z. uses, so he never tests SYSTEM_MALLOC, apparently ... plus he
says REL_ALLOC is more efficient).

For 23 in CVS, Eli modified the CONFIG.BAT to support
"--with-system-malloc", but there's a build error somewhere, even in
the latest pretest download (23.0.92, I think it's called). Something
about "_ret_lim_data":

msdos.o w16select.o xmenu.o    termcap.o tparam.o lastfile.o
getloadavg.o
                    -lg             -lm
dosfns.o:dosfns.c:(.text+0x663): undefined reference to
`_ret_lim_data'
collect2: ld returned 1 exit status
make.exe[1]: *** [temacs.exe] Error 1
make.exe[1]: Leaving directory `c:/Armslurp/emacs-23.0.92/src'
make.exe: *** [src] Error 2

I have successfully built 22.3 with DJGPP (on XP, though, since Vista
is apparently buggy for building Emacs) with SYSTEM_MALLOC defined
instead of REL_ALLOC in CONFIG.H. It works / loads 100% correctly with
some "simple" test files (Matt Mahoney's enwik8 is 100 MB, I even
successfully tried that file copied onto itself twice, e.g. 200 MB).
Otherwise, it won't load the file ("Memory exhausted") even though
I've set the DPMI limit much much higher than necessary. So, as you
can see, SYSTEM_MALLOC is important to keep working (in my humble
opinion). Unfortunately, Eli doesn't have enough time to test both. So
any clues would be highly appreciated.

WHY?

The simple truth is that I don't want to babysit two different sets of
Emacs (one DOS, one Win32) when both perform similar functions. In the
"old days", you could expect the DOS app to run fine under Windows.
Now, you can't take that bet. I know it's become a very very hostile
place for DOS programmers these days, and Win32 (and Linux) take huge
precedent, but I still feel like if I can get it to work in both, I'd
rather do that. It's just simpler, more logical, easier, makes more
sense. Am I wrong? At least until AMD64 is 100% ubiquitous, we have no
reason to ignore V86 mode. (And heck, DOSEMU works in 64-bit too ...
unlike Windows' NTVDM !)

On a more practical note, I run Vista on my laptop and haven't backed
it up yet (or resized the NTFS partition, ugh, to install a dual boot
FreeDOS). I hate mess (oy)ing with installs that might break. But I
can mostly get my FreeDOS-oriented programming done on it. (FreeDOS
kernel is GPL, so no flames, please.) So it makes sense to build and
test on the same host. And I have no other choice because I don't have
any cross compilers (e.g. Cygwin to DJGPP). If you know of someone who
has one, that would be nice, esp. for the day when AMD64 takes over
the world. (I've built GCC a few times but it's always a hassle and
doesn't always work. And Cygwin is another ball of wax, so my weak
attempt didn't succeed. It seems someone should've done this already,
but I know of no public downloads of such. Surely somebody else
besides me would find it highly useful. But that's more a request for
another place, probably.)