diff options
Diffstat (limited to 'textproc/coco/files')
| -rw-r--r-- | textproc/coco/files/patch-aa | 228 | ||||
| -rw-r--r-- | textproc/coco/files/patch-ac | 73 | ||||
| -rw-r--r-- | textproc/coco/files/patch-ae | 23 | ||||
| -rw-r--r-- | textproc/coco/files/patch-etl | 73 | ||||
| -rw-r--r-- | textproc/coco/files/patch-mc | 11 | ||||
| -rw-r--r-- | textproc/coco/files/patch-md | 89 | ||||
| -rw-r--r-- | textproc/coco/files/patch-mf | 60 | ||||
| -rw-r--r-- | textproc/coco/files/patch-mk | 45 | ||||
| -rw-r--r-- | textproc/coco/files/patch-ml | 5 | ||||
| -rw-r--r-- | textproc/coco/files/patch-mm | 16 | ||||
| -rw-r--r-- | textproc/coco/files/site-start.el.tmpl | 4 | ||||
| -rw-r--r-- | textproc/coco/files/unexfreebsd.c | 692 |
12 files changed, 1226 insertions, 93 deletions
diff --git a/textproc/coco/files/patch-aa b/textproc/coco/files/patch-aa index 3a3d1db4a9cc..f536f9e09936 100644 --- a/textproc/coco/files/patch-aa +++ b/textproc/coco/files/patch-aa @@ -1,25 +1,6 @@ ---- ./man/Makefile.org Sat Jul 2 14:35:17 1994 -+++ ./man/Makefile Tue May 20 22:28:50 1997 -@@ -4,7 +4,7 @@ - MAKEINFO = makeinfo - TEXINDEX_OBJS = texindex.o getopt.o - INFO_TARGETS = ../info/emacs ../info/cl ../info/forms ../info/vip \ -- ../info/gnus ../info/sc ../info/info ../info/dired-x -+ ../info/gnus ../info/sc ../info/dired-x - DVI_TARGETS = emacs.dvi cl.dvi forms.dvi vip.dvi gnus.dvi sc.dvi dired-x.dvi - INFOSOURCES = info.texi info-stnd.texi - -@@ -54,6 +54,7 @@ - gnu1.texi \ - glossary.texi - -+all: info - info: $(INFO_TARGETS) - - dvi: $(DVI_TARGETS) ---- ./man/vip.texi.org Tue May 20 22:29:04 1997 -+++ ./man/vip.texi Tue May 20 22:30:32 1997 -@@ -24,6 +24,10 @@ +--- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 ++++ ./man/vip.texi Tue May 20 01:28:33 1997 +@@ -2,6 +2,10 @@ @setfilename ../info/vip @settitle VIP @@ -30,8 +11,8 @@ @iftex @finalout ---- ./man/emacs.texi.org Fri Nov 4 03:08:52 1994 -+++ ./man/emacs.texi Tue May 20 22:30:32 1997 +--- ./man/emacs.texi.org Mon Aug 19 21:15:12 1996 ++++ ./man/emacs.texi Tue May 20 01:20:11 1997 @@ -49,6 +49,11 @@ @settitle GNU Emacs Manual @setfilename ../info/emacs @@ -44,8 +25,21 @@ @c @c in general, keep the following line commented out, unless doing a @c copy of this manual that will be published. the manual should go ---- ./man/forms.texi.org Thu Jul 28 13:46:45 1994 -+++ ./man/forms.texi Tue May 20 22:30:32 1997 +--- ./man/viper.texi.org Wed Aug 7 10:59:45 1996 ++++ ./man/viper.texi Tue May 20 01:29:17 1997 +@@ -4,6 +4,10 @@ + \input texinfo + + @setfilename ../info/viper ++@dircategory The Emacs editor and associated tools ++@direntry ++* VIPER: (viper). The new VI-emulation mode in Emacs-19.29. ++@end direntry + + @iftex + @finalout +--- ./man/forms.texi.org Sat Mar 23 06:42:27 1996 ++++ ./man/forms.texi Tue May 20 01:22:37 1997 @@ -9,6 +9,11 @@ @syncodeindex vr cp @syncodeindex fn cp @@ -58,8 +52,35 @@ @iftex @finalout @setchapternewpage odd ---- ./man/cl.texi.org Sat Jan 8 00:42:47 1994 -+++ ./man/cl.texi Tue May 20 22:30:32 1997 +--- ./man/gnus.texi.org Wed Jun 26 14:49:29 1996 ++++ ./man/gnus.texi Tue May 20 01:23:15 1997 +@@ -5,6 +5,11 @@ + @synindex fn cp + @synindex vr cp + @synindex pg cp ++@dircategory The Emacs editor and associated tools ++@direntry ++* GNUS: (gnus). The news reader GNUS. ++@end direntry ++ + @iftex + @finalout + @end iftex +--- ./man/mh-e.texi.org Sun Aug 4 00:00:29 1996 ++++ ./man/mh-e.texi Tue May 20 01:23:49 1997 +@@ -4,6 +4,10 @@ + @setfilename ../info/mh-e + @settitle mh-e + @c %**end of header ++@dircategory The Emacs editor and associated tools ++@direntry ++* MH-E: (mh-e). Emacs interface to the MH mail system. ++@end direntry + + @setchapternewpage odd + +--- ./man/cl.texi.org Mon Apr 15 21:36:53 1996 ++++ ./man/cl.texi Tue May 20 01:24:18 1997 @@ -2,6 +2,12 @@ @setfilename ../info/cl @settitle Common Lisp Extensions @@ -73,8 +94,8 @@ @iftex @finalout @end iftex ---- ./man/sc.texi.org Sat Jan 8 00:41:40 1994 -+++ ./man/sc.texi Tue May 20 22:30:32 1997 +--- ./man/sc.texi.org Thu Jan 4 12:55:23 1996 ++++ ./man/sc.texi Tue May 20 01:25:13 1997 @@ -3,6 +3,12 @@ @comment %**start of header (This is for running Texinfo on a region.) @setfilename ../info/sc @@ -88,8 +109,8 @@ @iftex @finalout @end iftex ---- ./man/dired-x.texi.org Sat Aug 13 09:58:50 1994 -+++ ./man/dired-x.texi Tue May 20 22:48:19 1997 +--- ./man/dired-x.texi.org Thu Jan 4 12:54:19 1996 ++++ ./man/dired-x.texi Tue May 20 01:25:55 1997 @@ -18,6 +18,11 @@ @setfilename ../info/dired-x @c dired-x.el REVISION NUMBER @@ -102,57 +123,106 @@ @iftex @finalout @end iftex -@@ -196,32 +201,32 @@ - @enumerate - @item - Omitting of uninteresting files from dired listing. --@itemize -+@itemize @bullet - @xref{Omitting Files in Dired} - @end itemize - @item - Local variables for dired directories. --@itemize -+@itemize @bullet - @xref{Local Variables} - @end itemize - @item - Guessing shell commands in dired buffers. --@itemize -+@itemize @bullet - @xref{Shell Command Guessing} - @end itemize - @item - Running dired command in non-dired buffers. --@itemize -+@itemize @bullet - @xref{Virtual Dired} - @end itemize - @item - Finding a file mentioned in a buffer --@itemize -+@itemize @bullet - @xref{Find File At Point} - @end itemize - @item - Commands using file marking. --@itemize -+@itemize @bullet - @xref{Advanced Mark Commands} - @end itemize - @end enumerate ---- ./man/gnus.texi.org Sun Sep 11 11:52:45 1994 -+++ ./man/gnus.texi Tue May 20 23:23:03 1997 -@@ -3,6 +3,12 @@ - @comment %**start of header (This is for running Texinfo on a region.) - @setfilename ../info/gnus - @settitle GNUS 3.15 Manual -+ +--- ./man/ediff.texi.org Fri Jun 21 20:00:04 1996 ++++ ./man/ediff.texi Tue May 20 01:26:29 1997 +@@ -10,6 +10,11 @@ + @synindex vr cp + @synindex fn cp + @synindex pg cp +@dircategory The Emacs editor and associated tools +@direntry -+* GNUS: (gnus). The news reader GNUS. ++* Ediff: (ediff). A comprehensive visual interface to diff ++ and patch. ++@end direntry + @iftex + @finalout + @end iftex +--- ./man/cc-mode.texi.org Sun Aug 4 21:56:21 1996 ++++ ./man/cc-mode.texi Tue May 20 01:27:18 1997 +@@ -9,6 +9,12 @@ + @settitle CC-MODE Version 4 Documentation + @footnotestyle end + ++@dircategory The Emacs editor and associated tools ++@direntry ++* CC mode: (ccmode). The GNU Emacs mode for editing C, C++, ++ Objective-C and Java code. +@end direntry + + @comment !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + @comment @setchapternewpage odd !! we don't want blank pages !! + @comment %**end of header (This is for running Texinfo on a region) +--- ./man/message.texi.org Wed Jun 26 14:49:43 1996 ++++ ./man/message.texi Sat Dec 13 17:46:31 1997 +@@ -5,6 +5,10 @@ + @synindex fn cp + @synindex vr cp + @synindex pg cp ++@dircategory The Emacs editor and associated tools ++@direntry ++* Message: (message). Editing mail and news messages. ++@end direntry @iftex @finalout @end iftex +--- Makefile.in.~1~ Sat Jul 11 17:57:16 1998 ++++ Makefile.in Sat Jul 11 17:58:45 1998 +@@ -191,7 +191,7 @@ + # Subdirectories to make recursively. `lisp' is not included + # because the compiled lisp files are part of the distribution + # and you cannot remake them without installing Emacs first. +-SUBDIR = lib-src src ++SUBDIR = lib-src src man + + # The makefiles of the directories in $SUBDIR. + SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile +--- Makefile.in.~1~ Fri Jul 10 00:00:50 1998 ++++ Makefile.in Fri Jul 10 00:10:50 1998 +@@ -375,14 +375,9 @@ + if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ + then \ + (cd ${infodir}; \ +- if [ -f dir ]; then \ +- if [ ! -f dir.old ]; then mv -f dir dir.old; \ +- else mv -f dir dir.bak; fi; \ +- fi; \ + cd ${srcdir}/info ; \ +- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); \ + (cd $${thisdir}; chmod a+r ${infodir}/dir); \ +- for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip* \ ++ for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* message* mh-e* sc* vip* \ + antenews* canna* egg* languages* m2ps* mule* kbd-trans* \ + quail* terminology* CCL* ISO2022* R2L* XFONT*; do \ + (cd $${thisdir}; \ +--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 ++++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 +@@ -13,7 +13,7 @@ + # The makeinfo program is part of the Texinfo distribution. + MAKEINFO = makeinfo + INFO_TARGETS = ../info/emacs ../info/ccmode ../info/cl ../info/dired-x \ +- ../info/ediff ../info/forms ../info/gnus ../info/info \ ++ ../info/ediff ../info/forms ../info/gnus \ + ../info/mh-e ../info/sc ../info/vip ../info/viper \ + ../info/message + DVI_TARGETS = emacs.dvi cc-mode.dvi cl.dvi dired-x.dvi ediff.dvi forms.dvi \ +@@ -66,6 +66,7 @@ + ${srcdir}/gnu1.texi \ + ${srcdir}/glossary.texi + ++all: info + info: $(INFO_TARGETS) + + dvi: $(DVI_TARGETS) +@@ -74,12 +75,6 @@ + # in srcdir. There is no provision for Info files + # to exist in the build directory. + # In a distribution of Emacs, the Info files should be up to date. +- +-../info/info: ${INFOSOURCES} +- cd $(srcdir); $(MAKEINFO) --no-split info.texi +- +-info.dvi: ${INFOSOURCES} +- TEXINPUTS="$(srcdir) $(TEXINPUTS)"; $(TEXI2DVI) ${srcdir}/info.texi + + ../info/emacs: ${EMACSSOURCES} + cd $(srcdir); $(MAKEINFO) emacs.texi diff --git a/textproc/coco/files/patch-ac b/textproc/coco/files/patch-ac index b302648cb3ff..32937f709d3f 100644 --- a/textproc/coco/files/patch-ac +++ b/textproc/coco/files/patch-ac @@ -1,25 +1,74 @@ ---- ../mule-2.3.org/src/s/freebsd.h.org Fri Nov 4 03:11:17 1994 -+++ ./src/s/freebsd.h Mon Feb 16 17:29:31 1998 -@@ -31,10 +31,10 @@ +--- orig/s/freebsd.h Mon Jun 10 05:14:32 1996 ++++ src/s/freebsd.h Tue Sep 29 11:35:32 1998 +@@ -1,5 +1,15 @@ + /* s/ file for freebsd system. */ - #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) - --#define LIBS_DEBUG -+#define LIBS_DEBUG -lcrypt ++/* Get the correct __FreeBSD_version, even if this is before that was ++ defined. */ ++#ifndef __FreeBSD__ ++#define __FreeBSD_version 199401 ++#elif __FreeBSD__ == 1 ++#define __FreeBSD_version 199405 ++#else ++#include <osreldate.h> ++#endif ++ + /* '__FreeBSD__' is defined by the preprocessor on FreeBSD-1.1 and up. + Earlier versions do not have shared libraries, so inhibit them. + You can inhibit them on newer systems if you wish +@@ -34,7 +44,6 @@ + #define LIBS_DEBUG #define LIBS_SYSTEM -lutil #define LIBS_TERMCAP -ltermcap -#define LIB_GCC -lgcc -+#define LIB_GCC /usr/lib/libgcc.a - /* Reread the time zone on startup. */ - #define LOCALTIME_CACHE -@@ -81,6 +81,9 @@ + #define SYSV_SYSTEM_DIR + +@@ -42,12 +51,28 @@ + #undef BSD_PGRPS + #define GETPGRP_NO_ARG + ++#ifdef __ELF__ ++ ++#define LD_SWITCH_SYSTEM ++#define START_FILES pre-crt0.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o ++#define UNEXEC unexelf.o ++#define LIB_STANDARD -lgcc -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o ++#undef LIB_GCC ++#define LIB_GCC ++ ++#else /* not __ELF__ */ ++ + #ifndef NO_SHARED_LIBS + #define LD_SWITCH_SYSTEM -e start -dc -dp + #define HAVE_TEXT_START /* No need to define `start_of_text'. */ ++#if __FreeBSD_version >= 300002 ++#define START_FILES pre-crt0.o /usr/lib/aout/crt0.o ++#else /* __FreeBSD_version < 300002 */ + #define START_FILES pre-crt0.o /usr/lib/crt0.o +-#define UNEXEC unexsunos4.o ++#endif /* __FreeBSD_version < 300002 */ ++#define UNEXEC unexfreebsd.o + #define RUN_TIME_REMAP ++#define LIB_GCC -lgcc + + #ifndef N_TRELOFF + #define N_PAGSIZ(x) __LDPGSZ +@@ -63,6 +88,8 @@ + #endif /* __FreeBSD__ */ + #endif /* NO_SHARED_LIBS */ + ++#endif /* not __ELF__ */ ++ + #define HAVE_WAIT_HEADER + #define HAVE_GETLOADAVG + /*#define HAVE_GETPAGESIZE /* configure now puts this in config.h */ +@@ -80,6 +107,8 @@ #define BSD 199103 #elif __FreeBSD__ == 2 #define BSD 199306 +#elif __FreeBSD__ == 3 +#define BSD 199506 -+#define FREEBSD_NEW_LDSO #endif #define WAITTYPE int diff --git a/textproc/coco/files/patch-ae b/textproc/coco/files/patch-ae new file mode 100644 index 000000000000..1728255a75cd --- /dev/null +++ b/textproc/coco/files/patch-ae @@ -0,0 +1,23 @@ +--- src/unexelf.c.orig Fri Oct 2 12:55:43 1998 ++++ src/unexelf.c Fri Oct 2 13:02:05 1998 +@@ -678,7 +678,8 @@ + if (n < 0) + fatal ("Couldn't find segment next to .bss in %s\n", old_name, 0); + +- NEW_PROGRAM_H (n).p_filesz += new_data2_size; ++/* NEW_PROGRAM_H (n).p_filesz += new_data2_size; */ ++ NEW_PROGRAM_H (n).p_filesz = new_bss_addr - NEW_PROGRAM_H (n).p_vaddr; /* From emacs 20.3 */ + NEW_PROGRAM_H (n).p_memsz = NEW_PROGRAM_H (n).p_filesz; + + #if 0 /* Maybe allow section after data2 - does this ever happen? */ +@@ -845,7 +846,9 @@ + + for (; symp < symendp; symp ++) + if (strcmp ((char *) (symnames + symp->st_name), "_end") == 0 +- || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0) ++ || strcmp ((char *) (symnames + symp->st_name), "end") == 0 ++ || strcmp ((char *) (symnames + symp->st_name), "_edata") == 0 ++ || strcmp ((char *) (symnames + symp->st_name), "edata") == 0) + memcpy (&symp->st_value, &new_bss_addr, sizeof (new_bss_addr)); + } + diff --git a/textproc/coco/files/patch-etl b/textproc/coco/files/patch-etl new file mode 100644 index 000000000000..d65fea4a6ac7 --- /dev/null +++ b/textproc/coco/files/patch-etl @@ -0,0 +1,73 @@ +From ftp://ftp.etl.go.jp/pub/mule/BUG-INFO + +6) This fix a bug of displaying multilingual text in mode lines. + +--- /usr/dist/mule/mule-2.3/src/xdisp.c Fri Jun 9 17:37:14 1995 ++++ ./src/xdisp.c Wed Mar 6 17:08:03 1996 +@@ -3973,8 +3973,9 @@ + + /* 91.10.21 by K.Handa, 92.4.30 by Y.Niibe */ + int mc_flag = !NILP(XBUFFER (w->buffer)->mc_flag); +- /* 92.3.21, 92.9.7 by K.Handa */ +- register unsigned char *endp = string + strlen(string); ++ /* 92.3.21, 92.9.7, 95.8.31 by K.Handa */ ++ register unsigned char *endp ++ = string + (length < 0 ? strlen(string) : length); + char *hexa = "0123456789ABCDEF"; /* 92.4.9 by K.Handa */ + /* 92.4.9 by K.Handa, 92.4.30 by Y.Niibe */ + int ctl_hexa = !NILP (XBUFFER (w->buffer)->ctl_hexa); + +8) Another fix for a severe bug for writing *viscii* file. + +--- mule/lisp/mule-init.el.old Wed May 8 13:05:30 1996 ++++ ./lisp/mule-init.el Wed May 8 13:04:06 1996 +@@ -638,7 +638,7 @@ + (r0 -= 160) + (write-read-repeat + r0 +- [ 0 129 130 131 132 165 134 135 136 137 138 139 140 141 142 143 ++ [ 0 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 + 144 145 146 0 0 147 150 151 152 0 0 0 0 180 149 0 + 0 0 0 0 0 0 2 5 0 0 0 0 0 0 0 159 + 0 186 0 0 0 128 20 187 188 0 0 25 30 0 179 191 + + +11) This patch fixes Single Shift 3 handling. + +--- /usr/dist/mule/mule-2.3/src/coding.c Wed Nov 30 16:45:02 1994 ++++ ./src/coding.c Sat Sep 28 09:41:51 1996 +@@ -1044,7 +1044,7 @@ + { \ + if (lc != lcg) dp = designate(dp, lcg, lc, 3, form), lcg = lc; \ + if (form & CODE_SEVEN) \ +- *dp++ = ESC, *dp++ = 'N'; \ ++ *dp++ = ESC, *dp++ = 'O'; \ + else \ + *dp++ = SS3; \ + cntl = (cntl & ~CC_GRAPHIC_MASK) | CC_IN_G3; \ + +12) This patch fixes wrong handling of *iso-2022-lock* by coco. +--- /usr/dist/mule/mule-2.3/lib-src/mulelib.c Mon Jul 17 15:03:43 1995 ++++ ./lib-src/mulelib.c Fri Oct 4 21:28:48 1996 +@@ -287,13 +287,18 @@ + p0 = p1 + 1; + if (CODE_TYPE (cs) == ISO2022) { + long flags[12]; +- for (i = 0; i < 11; i++) { +- if (!(flags[i] = atoi(p0))) flags[i] = Qnil; ++ for (i = 0; i < 4; i++) { ++ if ((flags[i] = atoi(p0)) == -1) flags[i] = LCASCII; + PROCEED_CHAR(','); + p0 = p1 + 1; + } +- flags[i] = atoi(p0); + CODE_LC_SET(cs, flags[0], flags[1], flags[2], flags[3]); ++ for (; i < 11; i++) { ++ if (!(flags[i] = atoi(p0))) flags[i] = Qnil; ++ PROCEED_CHAR(','); ++ p0 = p1 + 1; ++ } ++ if (!(flags[i] = atoi(p0))) flags[i] = Qnil; + CODE_FORM_SET(cs, (Lisp_Object)flags[4], (Lisp_Object)flags[5], + (Lisp_Object)flags[6], (Lisp_Object)flags[7], + (Lisp_Object)flags[8], (Lisp_Object)flags[9], diff --git a/textproc/coco/files/patch-mc b/textproc/coco/files/patch-mc new file mode 100644 index 000000000000..947c2fb5e96c --- /dev/null +++ b/textproc/coco/files/patch-mc @@ -0,0 +1,11 @@ +--- src/s.emacs/freebsd.h Tue Sep 29 11:35:32 1998 ++++ src/s/freebsd.h Tue Sep 29 11:42:53 1998 +@@ -42,7 +42,7 @@ + #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_p - (FILE)->_bf._base) + + #define LIBS_DEBUG +-#define LIBS_SYSTEM -lutil ++#define LIBS_SYSTEM -lutil -lcrypt -lxpg4 + #define LIBS_TERMCAP -ltermcap + + #define SYSV_SYSTEM_DIR diff --git a/textproc/coco/files/patch-md b/textproc/coco/files/patch-md new file mode 100644 index 000000000000..99ab69813330 --- /dev/null +++ b/textproc/coco/files/patch-md @@ -0,0 +1,89 @@ +diff -arcN ../mule-2.3.org/etc/FAQ-Mule.jp ./etc/FAQ-Mule.jp +*** ../mule-2.3.org/etc/FAQ-Mule.jp Fri Jul 21 20:40:06 1995 +--- ./etc/FAQ-Mule.jp Wed Aug 21 11:33:22 1996 +*************** +*** 1867,1872 **** +--- 1867,1874 ---- + + $B$H=q$/J}K!$b$"$j$^$9!#(B + ++ ($BCm5-(B : FreeBSD$B$G$O!"B>$H6%9g$9$k$?$a%]!<%HHV9f$O(B3086$B$K$7$F$"$j$^$9!#(B) ++ + Emacs lisp $B%W%m%0%i%_%s%0(B + ========================= + +diff -arcN ../mule-2.3.org/lisp/eggrc-sj3 ./lisp/eggrc-sj3 +*** ../mule-2.3.org/lisp/eggrc-sj3 Fri Oct 21 13:18:21 1994 +--- ./lisp/eggrc-sj3 Wed Aug 21 13:05:24 1996 +*************** +*** 3,11 **** + ;;; Version 1.0 + ;;; Copyright 1990 Kiyoji Ishii + ;;; + +! (set-default-sys-dic-directory "/usr/sony/dict/sj3") +! (set-default-usr-dic-directory "/usr/sony/dict/sj3/user/$USER") + + ;;; + ;;; System Dictionary +--- 3,17 ---- + ;;; Version 1.0 + ;;; Copyright 1990 Kiyoji Ishii + ;;; ++ ;;; ++ ;;; Change dictionary paths. ++ ;;; Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 ++ ;;; Remove $USER variable. Use (user-login-name). ++ ;;; Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/20 ++ ;;; + +! (set-default-sys-dic-directory "/usr/local/lib/sj3/dict") +! (set-default-usr-dic-directory (concat "/usr/local/lib/sj3/dict/user/" (user-login-name))) + + ;;; + ;;; System Dictionary +diff -arcN ../mule-2.3.org/lisp/sj3-egg.el ./lisp/sj3-egg.el +*** ../mule-2.3.org/lisp/sj3-egg.el Fri Feb 17 17:23:31 1995 +--- ./lisp/sj3-egg.el Wed Aug 21 13:32:36 1996 +*************** +*** 294,301 **** + ;;; + ;;; Entry functions for egg-startup-file + ;;; + +! (defvar *default-sys-dic-directory* "/usr/sony/dict/sj3") + + (defun set-default-sys-dic-directory (pathname) + "$B%7%9%F%`<-=q$NI8=`(Bdirectory PATHNAME$B$r;XDj$9$k!#(B +--- 294,307 ---- + ;;; + ;;; Entry functions for egg-startup-file + ;;; ++ ;;; ++ ;;; Change dictionary paths. ++ ;;; Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 ++ ;;; Remove $USER variable. Use (user-login-name). ++ ;;; Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/20 ++ ;;; + +! (defvar *default-sys-dic-directory* "/usr/local/lib/sj3/dict") + + (defun set-default-sys-dic-directory (pathname) + "$B%7%9%F%`<-=q$NI8=`(Bdirectory PATHNAME$B$r;XDj$9$k!#(B +*************** +*** 310,316 **** + (format "System Default directory(%s) $B$,$"$j$^$;$s!#(B" pathname)) + (setq *default-sys-dic-directory* (file-name-as-directory pathname))))) + +! (defvar *default-usr-dic-directory* "/usr/sony/dict/sj3/user/$USER") + + (defun set-default-usr-dic-directory (pathname) + "$BMxMQ<T<-=q$NI8=`(Bdirectory PATHNAME$B$r;XDj$9$k!#(B +--- 316,322 ---- + (format "System Default directory(%s) $B$,$"$j$^$;$s!#(B" pathname)) + (setq *default-sys-dic-directory* (file-name-as-directory pathname))))) + +! (defvar *default-usr-dic-directory* (concat "/usr/local/lib/sj3/dict/user/" (user-login-name))) + + (defun set-default-usr-dic-directory (pathname) + "$BMxMQ<T<-=q$NI8=`(Bdirectory PATHNAME$B$r;XDj$9$k!#(B diff --git a/textproc/coco/files/patch-mf b/textproc/coco/files/patch-mf new file mode 100644 index 000000000000..b6f10dd53c8c --- /dev/null +++ b/textproc/coco/files/patch-mf @@ -0,0 +1,60 @@ +--- ../mule.org/lisp/eggrc-wnn Fri Jul 28 20:12:41 1995 ++++ ./lisp/eggrc-wnn Wed Oct 29 12:13:50 1997 +@@ -24,7 +24,7 @@ + ;;; + ;;; modified for Wnn V4 - Use compatible library of Wnn v3 + ;;; Copyright 1989 OMRON Tateisi Electronics, Co. +-;;; 1989 7/12 by H.Kuribayashi kuri@frf.oron.junet ++;;; 1989 7/12 by H.Kuribayashi kuri@frf.omron.junet + + ;;; 92.5.19 modified for Wnn V4 by T.Shingu <shingu@cpr.canon.co.jp> + ;;; Use non compatible library. +@@ -50,14 +50,16 @@ + (concat wnn-usr-dic-dir "/symbol.h") 1 nil t) + (add-wnn-dict "iwanami/tankan.dic" "" 1 nil nil) + (add-wnn-dict "iwanami/tankan2.dic" "" 1 nil nil) +- (add-wnn-dict "iwanami/tel.dic" "" 1 nil nil) +- (add-wnn-dict "iwanami/zip.dic" "" 1 nil nil) ++ (add-wnn-dict "iwanami/tel.dic" ++ (concat wnn-usr-dic-dir "/tel.h") 1 nil t) ++ (add-wnn-dict "iwanami/zip.dic" ++ (concat wnn-usr-dic-dir "/zip.h") 1 nil t) + (add-wnn-dict (concat wnn-usr-dic-dir "/ud") "" 15 t t) + ; (add-wnn-dict "wnncons/tankan2.dic" "" 1 nil nil) + ; (add-wnn-dict "wnncons/tankan3.dic" "" 1 nil nil) + (set-wnn-param 5 10 2 45 0 80 5 1 20 0 400 -100 400 80 200 2 200) + +- (add-wnn-notrans-dict (concat wnn-usr-dic-dir "/katakana") 15 t) ++ (add-wnn-notrans-dict (concat wnn-usr-dic-dir "/muhenkan") 15 t) + (add-wnn-bmodify-dict (concat wnn-usr-dic-dir "/bunsetsu") 15 t) + + (set-last-is-first-mode t) +@@ -101,7 +103,9 @@ + (add-wnn-dict (concat wnn-usr-dic-dir "/ud") "" 5 t t) + ; (add-wnn-dict "wnncons/tankan2.dic" "" 1 nil nil) + ; (add-wnn-dict "wnncons/tankan3.dic" "" 1 nil nil) +- (set-wnn-param 2 10 2 45 5 80 5 1 40 0 400 -100 400 80 200 2 200) ++; (set-wnn-param 2 10 2 45 5 80 5 1 40 0 400 -100 400 80 200 2 200) ++; New Parameter ++ (set-wnn-param 2 10 2 45 100 200 5 1 40 -100 200 -100 200 80 200 200 200) + (set-wnn-reverse t) + (set-wnn-fuzokugo "pubdic/full.fzk") + (add-wnn-dict "pubdic/kihon.dic" (concat wnn-usr-dic-dir "/kihon.h") 5 nil t) +@@ -158,7 +162,7 @@ + ((eq wnn-server-type 'kserver) + (set-wnn-reverse nil) + (set-wnn-fuzokugo "sys/full.fzk") +- ; (add-wnn-dict "sys/hword.dic" (concat wnn-usr-dic-dir "/hword.h") 4 nil t) ++ (add-wnn-dict "sys/hword.dic" (concat wnn-usr-dic-dir "/hword.h") 4 nil t) + (add-wnn-dict "sys/single.dic" (concat wnn-usr-dic-dir "/single.h") 1 nil t) + (add-wnn-dict (concat wnn-usr-dic-dir "/ud") "" 5 t t) + ; (add-wnn-dict (concat wnn-usr-dic-dir "/hangul") "" 5 t t) +@@ -166,7 +170,7 @@ + (set-wnn-param 1 5 2 750 10 80 10 5 1000 50 0 -200 0 0 0 16 0) + (set-wnn-reverse t) + (set-wnn-fuzokugo "sys/full.fzk") +- ; (add-wnn-dict "sys/hword.dic" (concat wnn-usr-dic-dir "/hword.h") 4 nil t) ++ (add-wnn-dict "sys/hword.dic" (concat wnn-usr-dic-dir "/hword.h") 4 nil t) + (add-wnn-dict "sys/single.dic" (concat wnn-usr-dic-dir "/single.h") 1 nil t) + (add-wnn-dict (concat wnn-usr-dic-dir "/ud") "" 5 t t) + ; (add-wnn-dict (concat wnn-usr-dic-dir "/hangul") "" 5 t t) diff --git a/textproc/coco/files/patch-mk b/textproc/coco/files/patch-mk new file mode 100644 index 000000000000..55c3795a558c --- /dev/null +++ b/textproc/coco/files/patch-mk @@ -0,0 +1,45 @@ +--- Makefile.in.orig Fri Jul 10 11:22:07 1998 ++++ Makefile.in Fri Jul 10 11:27:03 1998 +@@ -310,14 +310,14 @@ + ### It would be nice to do something for a parallel make + ### to ensure that install-arch-indep finishes before this starts. + install-arch-dep: mkdir +- (cd lib-src; \ +- $(MAKE) install $(MFLAGS) prefix=${prefix} \ +- exec_prefix=${exec_prefix} bindir=${bindir} \ +- libexecdir=${libexecdir} archlibdir=${archlibdir}) + ${INSTALL_PROGRAM} src/emacs ${bindir}/${executable}-${version} + -chmod 1755 ${bindir}/${executable}-${version} + rm -f ${bindir}/$(EMACS) + -ln ${bindir}/${executable}-${version} ${bindir}/$(EMACS) ++ echo "Copying etc/DOC-* to ${docdir} ..." ; \ ++ (cd ./etc; tar -cf - DOC*)|(cd ${docdir}; umask 0; tar -xvf - ); \ ++ (cd $(docdir); chmod a+r DOC*; rm DOC) \ ++ + + ### Install the files that are machine-independent. + ### Most of them come straight from the distribution; +@@ -327,6 +327,10 @@ + ### Note that we copy DOC* and then delete DOC + ### as a workaround for a bug in tar on Ultrix 4.2. + install-arch-indep: mkdir ++ (cd lib-src; \ ++ $(MAKE) install $(MFLAGS) prefix=${prefix} \ ++ exec_prefix=${exec_prefix} bindir=${bindir} \ ++ libexecdir=${libexecdir} archlibdir=${archlibdir}) + -set ${COPYDESTS} ; \ + for dir in ${COPYDIR} ; do \ + if [ `(cd $$1 && /bin/pwd)` != `(cd $${dir} && /bin/pwd)` ] ; then \ +@@ -360,9 +364,9 @@ + -chmod -R a+r ${COPYDESTS} + if [ `(cd ./etc; /bin/pwd)` != `(cd ${docdir}; /bin/pwd)` ]; \ + then \ +- echo "Copying etc/DOC-*, etc/CHARSETS, and etc/CODINGS to ${docdir} ..." ; \ +- (cd ./etc; tar -cf - DOC* CHARSETS CODINGS)|(cd ${docdir}; umask 0; tar -xvf - ); \ +- (cd $(docdir); chmod a+r DOC* CHARSETS CODINGS; rm DOC) \ ++ echo "Copying etc/CHARSETS, and etc/CODINGS to ${docdir} ..." ; \ ++ (cd ./etc; tar -cf - CHARSETS CODINGS)|(cd ${docdir}; umask 0; tar -xvf - ); \ ++ (cd $(docdir); chmod a+r CHARSETS CODINGS) \ + else true; fi + if [ -r ./lisp ] \ + && [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \ diff --git a/textproc/coco/files/patch-ml b/textproc/coco/files/patch-ml new file mode 100644 index 000000000000..bf5a5c1c7b13 --- /dev/null +++ b/textproc/coco/files/patch-ml @@ -0,0 +1,5 @@ +--- lisp/its/han-kata.el~ Thu Aug 6 19:55:01 1998 ++++ lisp/its/han-kata.el Mon Aug 10 13:24:50 1998 +@@ -45 +45 @@ +-(defvar enable-double-n-syntax nil "*Enable ""nn"" input for ""(I](B"" ") ++(defvar enable-double-n-syntax nil "*Enable \"nn\" input for \"(I](B\" ") diff --git a/textproc/coco/files/patch-mm b/textproc/coco/files/patch-mm new file mode 100644 index 000000000000..2adc98e6b2a5 --- /dev/null +++ b/textproc/coco/files/patch-mm @@ -0,0 +1,16 @@ +--- configure.orig Sat Sep 19 23:06:14 1998 ++++ configure Sat Sep 19 23:14:44 1998 +@@ -564,11 +564,11 @@ + emacs_prefix=emacs + lispdir='${datadir}/${emacs_prefix}/${version}/lisp' + locallisppath='${datadir}/${emacs_prefix}/${version}/site-lisp:'\ +-'${datadir}/${emacs_prefix}/site-lisp' ++'${datadir}/${emacs_prefix}/site-lisp:${datadir}/emacs/site-lisp' + lisppath='${locallisppath}:${lispdir}' + etcdir='${datadir}/${emacs_prefix}/${version}/etc' + # share lockdir with emacs and mule. +-lockdir='${sharedstatedir}/emacs/lock' ++lockdir='/var/run/emacs/lock' + archlibdir='${libexecdir}/${emacs_prefix}/${version}/${configuration}' + docdir='${datadir}/${emacs_prefix}/${version}/etc' + diff --git a/textproc/coco/files/site-start.el.tmpl b/textproc/coco/files/site-start.el.tmpl index 621eb74cd85c..3841abb13066 100644 --- a/textproc/coco/files/site-start.el.tmpl +++ b/textproc/coco/files/site-start.el.tmpl @@ -32,11 +32,11 @@ (setq-default quail-current-package (assoc "hangul" quail-package-alist)) ) -;; Add System Info path '/usr/share/info' into Info-default-directory-list (setq Info-default-directory-list (append (list + "%%LOCALBASE%%/share/mule/19.34/info" + "%%X11BASE%%/info" "/usr/share/info" - "/usr/X11R6/info" ) Info-default-directory-list)) ;; END mule-family diff --git a/textproc/coco/files/unexfreebsd.c b/textproc/coco/files/unexfreebsd.c new file mode 100644 index 000000000000..142feafd3c5e --- /dev/null +++ b/textproc/coco/files/unexfreebsd.c @@ -0,0 +1,692 @@ +/* Code to do an unexec for FreeBSD for a temacs linked -Bdynamic. + Derived from unexnetbsd.c, which was derived from unexsunos4.c + Copyright (C) 1992, 1993 Free Software Foundation, Inc. + +This file is part of XEmacs. + +XEmacs is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +XEmacs is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF? */ + +/* +Created 29-Oct-92 by Harlan Sexton +Tweaked 06-Aug-93 by Dean Michaels to work with sun3. +Converted 01-Dec-93 by Paul Mackerras to work with NetBSD shared libraries. +Tweaked 26-Feb-94 by Shawn Carey for use with FreeBSD-1.1 shared libraries. +*/ + +/********************** Included .h Files **************************/ + +#include <config.h> + +#include <stdarg.h> +#include <sys/param.h> +#include <sys/mman.h> +#include <sys/file.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <string.h> +#include <stdio.h> +#include <a.out.h> +#include <unistd.h> +#include <ctype.h> +#include <stab.h> +#include <dirent.h> +#include <link.h> + +/********************** Macros *************************************/ + +#define SYS_ERR strerror(errno) + +#define MASK_UP(x,p_of_two) \ + ((((unsigned long) (x)) + ((p_of_two) - 1)) & (~((p_of_two) - 1))) + +#define MASK_DOWN(x,p_of_two) (((unsigned long) (x)) & (~((p_of_two) - 1))) + +/********************** Typedefs and Structs ***********************/ + +struct translation_struct +{ + long txtaddr; + long txtoff; + long dataddr; + long datoff; + long bssaddr; + long endaddr; +}; + +/********************** Function Prototypes/Declarations ***********/ + +static void unexec_error (const char *m, int use_errno, ...); +static int unexec_open (char *filename, int flag, int mode); +static caddr_t unexec_mmap (int fd, size_t len, int prot, int flags); +static long unexec_seek (int fd, long position); +static void unexec_read (int fd, long position, char *buf, int bytes); +static void unexec_write (int fd, long position, char *buf, int bytes); +static void unexec_pad (int fd, int bytes); +static void unexec_fstat (int fd, struct stat *statptr); +static void unexec_fchmod (int fd, int mode); +static long unexec_addr_to_offset (long addr, struct translation_struct *ts); +static void copy_relocation_site (struct relocation_info *ri, + caddr_t from_base_addr, + caddr_t to_base_addr, + struct translation_struct *ts); +static void reset_symtab (struct nlist *start, struct nlist *end, + char *strtab, long edata_value, long end_value, + int shlib_image); +static void reset_ldso_symtab (struct nzlist *start, struct nzlist *end, + char *strtab, long edata_value, long end_value, + int shlib_image); +int run_time_remap (char *dummy); + +/********************** Variables **********************************/ + +/* for reporting error messages from system calls */ +extern int errno; +extern int _DYNAMIC; +extern char **environ; + +static unsigned long sbrk_of_0_at_unexec; + +/*******************************************************************/ + +static void +unexec_error (const char *fmt, int use_errno, ...) +{ + const char *err_msg = SYS_ERR; + va_list args; + + fprintf (stderr, "unexec - "); + va_start (args, use_errno); + vfprintf (stderr, fmt, args); + va_end (args); + + if (use_errno) + fprintf (stderr, ": %s", err_msg); + fprintf (stderr, "\n"); + exit (1); + return; +} + +static int +unexec_open (char *filename, int flag, int mode) +{ + int fd; + + errno = 0; + + fd = open (filename, flag, mode); + + if (fd < 0) + unexec_error ("Failure opening file %s", 1, filename); + return fd; +} + +static caddr_t +unexec_mmap (int fd, size_t len, int prot, int flags) +{ + caddr_t return_val; + + unexec_seek (fd, 0); + errno = 0; + return_val = mmap (0, len, prot, flags, fd, 0); + + if (return_val == (caddr_t) -1) + unexec_error ("Failure mmap'ing file", 1); + return return_val; +} + + +static long +unexec_seek (int fd, long position) +{ + long seek_value; + + if (fd <= 0) + unexec_error ("No file open in which to seek", 0); + + errno = 0; + + if (position < 0) + seek_value = (long) lseek (fd, 0, L_INCR); + else + seek_value = (long) lseek (fd, position, L_SET); + + if (seek_value < 0) + unexec_error ("Failed to do a seek to 0x%x in %s", 1, + position, "unexec() output file"); + + return seek_value; +} + +static void +unexec_read (int fd, long position, char *buf, int bytes) +{ + int n_read; + int remains = bytes; + position = unexec_seek (fd, position); + + if (bytes < 0) + unexec_error ("Attempted read of %d bytes", 0, bytes); + + errno = 0; + + while (remains > 0) + { + n_read = read (fd, buf, remains); + if (n_read <= 0) + unexec_error ("Read failed for 0x%x bytes at offset 0x%x in %s", + 1, bytes, position, "unexec() output file"); + buf += n_read; + remains -= n_read; + } + + return; +} + +static void +unexec_write (int fd, long position, char *buf, int bytes) +{ + int n_written; + int remains = bytes; + position = unexec_seek (fd, position); + + if (bytes < 0) + unexec_error ("Attempted write of %d bytes in %s", + 0, bytes, "unexec() output file"); + + errno = 0; + + while (remains > 0) + { + n_written = write (fd, buf, remains); + if (n_written <= 0) + unexec_error ("Write failed for 0x%x bytes at offset 0x%x in %s", + 1, bytes, position, "unexec() output file"); + buf += n_written; + remains -= n_written; + } + + return; +} + +static void +unexec_pad (int fd, int bytes) +{ + if (bytes > 0) + { + char buf[1024]; + int remaining = bytes; + + memset (buf, 0, sizeof (buf)); + + while (remaining > 0) + { + int this_write = (remaining > sizeof(buf))?sizeof(buf):remaining; + unexec_write (fd, -1, buf, this_write); + remaining -= this_write; + } + } +} + +static void +unexec_fstat (int fd, struct stat *statptr) +{ + errno = 0; + if (-1 == fstat (fd, statptr)) + unexec_error ("fstat() failed for descriptor %d", 1, fd); + return; +} + +static void +unexec_fchmod (int fd, int mode) +{ + errno = 0; + if (-1 == fchmod (fd, mode)) + unexec_error ("fchmod() failed for descriptor %d", 1, fd); + return; +} + +static long +unexec_addr_to_offset (long addr, struct translation_struct *ts) + +{ + if ((addr < ts->txtaddr) || (addr >= ts->bssaddr)) + return -1; + else if (addr >= ts->dataddr) + return ((long) ((addr - ts->dataddr) + ts->datoff)); + else + return ((long) ((addr - ts->txtaddr) + ts->txtoff)); +} + + +/* + * "LD.SO" DATA AND SYMBOL TABLE OPERATIONS + */ + +static void +copy_relocation_site (struct relocation_info *ri, + caddr_t from_base_addr, + caddr_t to_base_addr, + struct translation_struct *ts) +{ + long offset; + caddr_t from, to; + + /* We can get relocation sites in the bss region, for objects whose + contents are copied from a shared library. We don't need or want + to restore these at present. */ +#ifndef sparc + if (ri->r_copy) + return; +#else + /* Struct relocation_info_sparc doesn't have member r_copy. + Instead, we use the address to check if this is run-time-copied. */ + if (ri->r_address >= ts->bssaddr && ri->r_address < ts->endaddr) + return; +#endif + + offset = unexec_addr_to_offset (ri->r_address, ts); + if (offset == -1) + unexec_error ("bad relocation address 0x%x (0x%x)", 0, ri->r_address, + ((long *)ri)[1]); + + from = from_base_addr + offset; + to = to_base_addr + offset; + /* This stuff should be in a md_ file somewhere... */ +#ifndef sparc + switch (ri->r_length) + { + case 0: + *((char *) to) = *((char *) from); + break; + case 1: + *((short *) to) = *((short *) from); + break; + case 2: + *((long *) to) = *((long *) from); + break; + default: + unexec_error ("unknown reloc length %d seen during unexec()", + 0, ri->r_length); + break; + } +#else /* sparc */ + switch (ri->r_type) + { + case RELOC_8: + case RELOC_DISP8: + *((char *) to) = *((char *) from); + break; + case RELOC_16: + case RELOC_DISP16: + *((short *) to) = *((short *) from); + break; + case RELOC_LO10: + case RELOC_13: + case RELOC_22: + case RELOC_HI22: + case RELOC_WDISP22: + case RELOC_WDISP30: + case RELOC_32: + case RELOC_DISP32: + case RELOC_GLOB_DAT: + *((long *) to) = *((long *) from); + break; + case RELOC_JMP_SLOT: + { + long *target = (long *) to; + long *source = (long *) from; + *target = *source; + target++; + source++; + *target = *source; + target++; + source++; + *target = *source; + } + break; + default: + unexec_error ("unknown reloc type %d seen during unexec()", + 0, ri->r_type); + break; + } +#endif /* sparc */ +} + +static void +reset_symtab (struct nlist *start, struct nlist *end, char *strtab, + long edata_value, long end_value, int shlib_image) +{ + struct nlist *tmp = start; + int found_edata = 0; + int found_end = 0; + + while (tmp < end) + { + int type = tmp->n_type; + + if ((type == (N_UNDF | N_EXT)) && + (tmp->n_value != 0)) + unexec_error ("unexec'ing image has COMMON symbols in it -- we quit!", + 0); + + if (!(type & N_STAB)) + { + if (!found_edata && + (type == (N_EXT | N_DATA)) && + tmp->n_un.n_strx && + !strcmp ("_edata", strtab + tmp->n_un.n_strx)) + { + tmp->n_value = edata_value; + found_edata = 1; + } + + + if ((type & N_TYPE) == N_BSS) + { + if (!found_end && + (type == (N_EXT | N_BSS)) && + tmp->n_un.n_strx && + !strcmp ("_end", strtab + tmp->n_un.n_strx)) + { + tmp->n_value = end_value; + found_end = 1; + } + else if (type & N_EXT) + tmp->n_type = N_DATA | N_EXT; + else + tmp->n_type = N_DATA; + } + + /* the way things are being handled here, having sbrk() in the + image is fatal for an image linked with shared lib's (although + the code could be modified to support it), but this should + never happen anyway */ + if (shlib_image && + (type == (N_EXT | N_TEXT)) && + tmp->n_un.n_strx && + !strcmp ("_sbrk", strtab + tmp->n_un.n_strx)) + unexec_error ("unexec'd shlib image has sbrk() in it -- we quit!", + 0); + } + + tmp++; + } +} + +static void +reset_ldso_symtab (struct nzlist *start, struct nzlist *end, char *strtab, + long edata_value, long end_value, int shlib_image) +{ + struct nzlist *tmp = start; + int found_edata = 0; + int found_end = 0; + + while (tmp < end) { + int type = tmp->nz_type; +/* + * the following code breaks under FreeBSD-1.1-BETA, but everything + * seems to work perfectly if it's commented out. This did not break + * anything until the changes to ld.so were made. + */ +/* + if ((type == (N_UNDF | N_EXT)) && (tmp->nz_value != 0)) + unexec_error("unexec'ing image has COMMON symbols in rel -- we quit!",0); +*/ + if (!(type & N_STAB)) { + if (!found_edata && + (type == (N_EXT | N_DATA)) && + !strcmp ("_edata", strtab + tmp->nz_strx)) { + tmp->nz_value = edata_value; + found_edata = 1; + } + + if ((type & N_TYPE) == N_BSS) { + if (!found_end && + (type == (N_EXT | N_BSS)) && + !strcmp ("_end", strtab + tmp->nz_strx)) { + tmp->nz_value = end_value; + found_end = 1; + } else if (type & N_EXT) + tmp->nz_type = N_DATA | N_EXT; + else + tmp->nz_type = N_DATA; + } + + /* the way things are being handled here, having sbrk() in the + image is fatal for an image linked with shared lib's (although + the code could be modified to support it), but this should + never happen anyway */ + if (shlib_image && + (type == (N_EXT | N_TEXT)) && + !strcmp ("_sbrk", strtab + tmp->nz_strx)) + unexec_error("unexec'd shlib image has sbrk() ref -- we quit!", 0); + } + tmp++; + } +} + +extern int getpagesize (void); + +/* + * EXPORTED FUNCTIONS + */ + +/* this has to be a global variable to prevent the optimizers from + * assuming that it can not be 0. +*/ +static void *dynamic_addr = (void *) &_DYNAMIC; + +int +unexec (char *new_name, char *old_name, + unsigned int emacs_edata, unsigned int dummy1, unsigned int dummy2) +{ + /* ld.so data */ + struct _dynamic *ld = 0; + struct section_dispatch_table *ld2 = 0; + /* old and new state */ + int old_fd; + int new_fd; + caddr_t old_base_addr; + caddr_t new_base_addr; + struct exec old_hdr; + struct exec new_hdr; + struct stat old_buf; + struct stat new_buf; + /* some process specific "constants" */ + unsigned long n_pagsiz, new_edata; + long page_size = getpagesize (); + caddr_t plt_end; + caddr_t current_break = (caddr_t) sbrk (0); + + if (!page_size) + unexec_error ("unexec() failed because we can't get the size of a page!", + 0); + + /* see if this is a -Bdynamic image -- if so, find ld.so structures */ + if (dynamic_addr) + { + ld = (struct _dynamic *) dynamic_addr; + ld2 = ld->d_un.d_sdt; + if (ld->d_version < LD_VERSION_BSD) + unexec_error ("%s linked with obsolete version of ld -- we quit!", + 0, old_name); + } + + /* open the old and new files, figuring out how big the old one is + so that we can map it in */ + old_fd = unexec_open (old_name, O_RDONLY, 0); + new_fd = unexec_open (new_name, O_RDWR | O_CREAT | O_TRUNC, 0666); + + /* setup the header and the statbuf for old_fd */ + unexec_read (old_fd, 0, (char *) &old_hdr, sizeof (old_hdr)); + unexec_fstat (old_fd, &old_buf); + + + /* set up some important constants */ + n_pagsiz = __LDPGSZ; + if (dynamic_addr) + plt_end = (caddr_t) MASK_UP (ld2->sdt_plt + ld2->sdt_plt_sz, sizeof (double)); + else + plt_end = (caddr_t) N_DATADDR (old_hdr); + +#if 0 + /* never write protect the variable "environ", defined in /lib/crt0.o, and + set in process.c and callproc.c */ + mprotect_bottom_addr = ((unsigned long) &environ) + sizeof (char **); + /* never protect ABOVE the end of data emacs_edata specified */ + mprotect_top_addr = MIN (emacs_edata, N_DATADDR (old_hdr) + old_hdr.a_data); +#endif + + /* Set up the image of the old file */ + old_base_addr = unexec_mmap (old_fd, old_buf.st_size, PROT_READ, + MAP_FILE | MAP_PRIVATE); + close (old_fd); + + /* set up the new exec */ + new_hdr = old_hdr; + new_edata = (unsigned long) MASK_UP (current_break, n_pagsiz); + new_hdr.a_data = new_edata - ((unsigned long) N_DATADDR (old_hdr)); + new_hdr.a_bss = 0; + + /* set up this variable, in case we want to reset "the break" + when restarting */ + sbrk_of_0_at_unexec = ((unsigned long) MASK_UP (current_break, n_pagsiz)); + + /* Write out the first approximation to the new file. The sizes of + each section will be correct, but there will be a number of + corrections that will need to be made. */ + { + long old_datoff = N_DATOFF (old_hdr); + long old_dataddr = N_DATADDR (old_hdr); + long new_treloff = N_RELOFF (new_hdr); + long old_treloff = N_RELOFF (old_hdr); + long ld_so_size = ((unsigned long) plt_end) - old_dataddr; + long real_data_size = current_break - plt_end; + long pad_size = + MASK_UP (current_break, n_pagsiz) - ((unsigned long) current_break); + + + /* First, write the text segment with new header -- copy everything until + the start of the data segment from the old file, and then go back and + write the new header. */ + unexec_write (new_fd, 0, old_base_addr, old_datoff + ld_so_size); + unexec_write (new_fd, 0, (char *) &new_hdr, sizeof (new_hdr)); + + /* Copy the rest of the data segment from the running image. */ + unexec_write (new_fd, old_datoff + ld_so_size, + plt_end, real_data_size); + + /* pad out the data segment */ + unexec_pad (new_fd, pad_size); + + /* Finally, copy the symbol table information from the old file. */ + unexec_write (new_fd, new_treloff, + old_base_addr + old_treloff, + old_buf.st_size - old_treloff); + } + + + /* Next, map in the output file so that we can jump around fixing it + up. We retain the old file so that we can refer to it. */ + unexec_fstat (new_fd, &new_buf); + new_base_addr = unexec_mmap (new_fd, + MASK_UP (new_buf.st_size, page_size), + PROT_READ | PROT_WRITE, + MAP_FILE | MAP_SHARED); + + + + /* We need to do 2 things. First, make sure that _edata and _end (and + hence, curbrk) are set to the correct values. At the same time, for + neatness and to help with debugging, mark all the types of all ld.so + and nm BSS symbols in the new file to be DATA, and make sure that + there are no COMMON symbols in the output file, as any references to + these can lose really big. Second, reset all of the ld.so "relocation + sites" in the new file to have the values that appear in the old file + -- the failure to do this was the biggest loser in the old version of + this code. */ + + /* STEP 1 */ + /* Reset the regular symbol table first. */ + reset_symtab ((struct nlist *) (new_base_addr + N_SYMOFF(new_hdr)), + (struct nlist *) (new_base_addr + N_SYMOFF(new_hdr) + + new_hdr.a_syms), + (char *) (new_base_addr + N_STROFF(new_hdr)), + new_edata, new_edata, + !!dynamic_addr); + + /* Now reset the ld.so symbol table. */ + if (dynamic_addr) + { + struct translation_struct ts; + struct relocation_info *tmp, *end; + caddr_t syms, strings; + + /* set up the structure that we use to translate addresses in the + old file into file offsets */ + ts.txtaddr = N_TXTADDR (old_hdr); + ts.txtoff = N_TXTOFF (old_hdr); + ts.dataddr = N_DATADDR (old_hdr); + ts.datoff = N_DATOFF (old_hdr); + ts.bssaddr = N_DATADDR (old_hdr) + old_hdr.a_data; + ts.endaddr = ts.bssaddr + old_hdr.a_bss; + + syms = new_base_addr + unexec_addr_to_offset(ld2->sdt_nzlist, &ts); + strings = new_base_addr + unexec_addr_to_offset(ld2->sdt_strings, &ts); + reset_ldso_symtab ((struct nzlist *) syms, (struct nzlist *) strings, + (char *) strings, + new_edata, new_edata, + !!dynamic_addr); + + /* STEP 2 */ + tmp = (struct relocation_info *) + (old_base_addr + unexec_addr_to_offset(ld2->sdt_rel, &ts)); + end = (struct relocation_info *) + (old_base_addr + unexec_addr_to_offset(ld2->sdt_hash, &ts)); + while (tmp < end) + { + copy_relocation_site (tmp, old_base_addr, new_base_addr, &ts); + tmp++; + } + } + + /* get rid of the mmap-ed file space and make the output file + executable -- then quit */ + munmap (new_base_addr, MASK_UP (new_buf.st_size, page_size)); + munmap (old_base_addr, MASK_UP (old_buf.st_size, page_size)); + unexec_fchmod (new_fd, 0755); + close (new_fd); + return 0; +} + + +int +run_time_remap (char *dummy) +{ + unsigned long current_sbrk = (unsigned long) sbrk (0); + + if (sbrk_of_0_at_unexec > current_sbrk) + { + errno = 0; + if (brk ((caddr_t) sbrk_of_0_at_unexec)) + fprintf (stderr, "failed to change brk addr to 0x%lx: %s\n", + sbrk_of_0_at_unexec, SYS_ERR); + } + + return 0; +} |
