Emacs 18.55 -rw-rw-r-- 1 gray 1416303 Sep 25 15:15 ++jrb_emacs_src.zoo -rw-rw-r-- 1 gray 142836 Jul 14 1990 temacs.lzh -rw-rw-r-- 1 gray 249642 Jul 14 1990 xemacs.lzh ******** ./lisp/README ******** if you are going to use Gulam as your callout shell, use gshell.el instead of shell.el ******** ./README ******** Emacs 18.55 tos version to re-compile: make library: in lib/ adjust VPATH to point to the gcc-lib-sources then hit make. this will pick up files it does'nt find from that library. Make sure to also adjust the include paths "-I" correctly, so that files in h/ are found before files in the gcc-tos-lib-include directory. (in lib i have provided gnu.olb and crt0.o, so you can avoid this step and just use those). make emacs: adjust paths in xmakefile so that include files are first found in h/ and then the gcc-lib-include-files. also the library you created above should be linked, and not the standard tos-gcc-libs. hit make -f xmakefile and it will create `temacs'. READ the file read_me before proceeding. set up your environment. test: test out temacs by temacs -l loadup.el dumping: see the file lisp/dumping.txt if you are using gulam: temacs -batch -l loadup.el -dump mv xemacs xemacs.1 then start a subshell by executing another copy of gulam within gulam. before you make the second dump issue unsetenv ARGV temacs -batch -l loadup.el -dump mv xeacs xemacs.2 now exit the sub-shell (logout will do it) dumpfix xemacs.2 xemacs.1 xemacs > answer any questions here this will result in the undumped emacs called xemacs i usually use the following alias to run it: alias emacs 'g:\usr\lib\gnuemacs\bin\xemacs -q -l /dev/G/emacs.rc' as for some strange reason it does'nt find the init file even if setenv HOME /dev/G (oh, and i usually keep emacs.rc byte-compiled, so it load faster). if you are using gulam as a shell for (M-x shell), then use gshell.el instead of shell.el in the lisp directory (you may want to fixup your loadup.el to make this adjustment) enjoy, -- bang: {any internet host}!dsrgsun.ces.CWRU.edu!bammi jwahar r. bammi domain: bammi@dsrgsun.ces.CWRU.edu GEnie: J.Bammi -- dumping guidelines: Some notes on dumpfix: First some theory. When i core dump two emacs versions started at different points in memory, they should be identical in all places except the absolute pointers. These pointers should have the same difference for any corresponding locations (the difference of the two basepage addresses). To relocate these pointers i need the addresses of the basepages. In an emacs dump file i include these addresses in an unused field of the file header. Now i can scan the two files to find all longs with difference = basediff (= basepage1 - basepage2). To relocate them i subtract the basepage address of the file, write the value back and note the byte for the reloc info. Other differences than the basediff can occur when we have eg. time-values at the actual position or if we are looking at the long two bytes before a value to be relocated. Here is a picture to illustrate this: +--+--+ +--+--+ +--+--+ +--+--+ | a | | b | | c | | d | +--+--+ +--+--+ +--+--+ +--+--+ If the variable to relocate is the long consisting of word b & c, the difference of longs a & b and c & d in the two files will have a wrong value. Now practical: the occuring differences in emacs have not only the exact value basediff, but also basediff +- some offset (maybe caused by rounding effects). Also there are values which i can't (yet) explain. In all these cases the dumpfix program says "unexpected difference ...". If i relocate only the places where the difference has exactly the value basediff, then emacs will crash. So i introduced the FUZZY-factor. If the offset is not more than FUZZY bytes, i am relocating the location too. This gives fewer problems, but we still have unexpected values. What i am doing now is to look wether these values may be pointers to be relocated. They have to meet several constraints: - the value must be even - the tag byte (the highest byte of the long is used as a flag in emacs) has to be between 0 and 21 (the biggest flag used by emacs) - the value resulting from stripping the tag-byte should point into the programs text or data or bss (including malloced part) section If i have these three cases together then the user is asked (it may still be an ascii string). - Edgar