🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.epoch.misc
Article #2141

Re: Epoch 3.2 on the DECstation

#2141
From: Chris Weikart
Date: Thu, 28 Feb 1991 15:58
146 lines
5442 bytes
Here's a recapitulation of what's necessary for pmaxen/3maxen (DS3100/5000's,
compiling with MIPS cc under Ultrix 4.x).

(1) Besides the official "epoch-3.2-patch-1", apply the following patches.
    Note the the first is ABSOLUTELY necessary, otherwise you get data address
    faults all the time. [The last is for selections, simply makes life a
    breeze with xterm]:

-------------------------------------------------------------------------------
*** {original}/epoch-3.2/src/xresource.c	Tue Oct 16 19:45:27 1990
--- epoch-3.2/src/xresource.c	Thu Feb 21 17:13:59 1991
***************
*** 96,102 ****
      register Lisp_Object val;
      register struct Lisp_Xresource *xr;
  
!     if (xr_free_list)
  	{
  	xr = xr_free_list;
  	xr_free_list = XXRESOURCE(xr_free_list->next);
--- 96,102 ----
      register Lisp_Object val;
      register struct Lisp_Xresource *xr;
  
!     if (XUINT(xr_free_list))
  	{
  	xr = xr_free_list;
  	xr_free_list = XXRESOURCE(xr_free_list->next);
*** {original}/epoch-3.2/src/buffer.c	Thu Oct 18 17:21:22 1990
--- epoch-3.2/src/buffer.c	Tue Feb 19 10:24:56 1991
***************
*** 851,857 ****
    if (c == p)
      return;
  
!   if (w)
      swb = NULL (selected_window) ? 0 : XBUFFER (w->buffer);
  
    if (p && NULL (p->name))
--- 851,857 ----
    if (c == p)
      return;
  
!   if (selected_window)
      swb = NULL (selected_window) ? 0 : XBUFFER (w->buffer);
  
    if (p && NULL (p->name))
*** {original}/epoch-3.2/src/screen.c	Tue Oct 16 19:45:10 1990
--- epoch-3.2/src/screen.c	Wed Feb 27 22:20:19 1991
***************
*** 429,435 ****
  	XQueryColor(xs->display,cmap,&xcf);
  	xcfflag = 0;
  	}
!     if (xd.xfcursor && XParseColor(xs->display,cmap,xd.xbcursor,&xcb))
  	xcbflag = 1;
      else
  	{
--- 429,435 ----
  	XQueryColor(xs->display,cmap,&xcf);
  	xcfflag = 0;
  	}
!     if (xd.xbcursor && XParseColor(xs->display,cmap,xd.xbcursor,&xcb))
  	xcbflag = 1;
      else
  	{
*** {original}/epoch-3.2/src/x11fns.c	Tue Oct 16 19:45:23 1990
--- epoch-3.2/src/x11fns.c	Fri Feb 22 19:24:44 1991
***************
*** 93,98 ****
--- 93,99 ----
    check_xterm ();
  
    BLOCK_INPUT ();
+   XSetSelectionOwner(XD_display, XA_PRIMARY, None, CurrentTime);
    XStoreBytes (XD_display, XSTRING (string)->data,
  	       XSTRING (string)->size);
    UNBLOCK_INPUT ();
-------------------------------------------------------------------------------

(2) Here's what m-pmax.h should look like:

-------------------------------------------------------------------------------
#include "m-mips.h"
#undef LIBS_MACHINE
#undef BIG_ENDIAN

#ifdef IRIS
#undef IRIS /* Defined in m-mips.h? Don't need it. */
#endif

#ifdef DATA_START
#undef DATA_START /* Prevent cpp warnings about multiple defs. */
#endif

#ifdef DATA_SEG_BITS
#undef DATA_SEG_BITS /* Prevent cpp warnings about multiple defs. */
#endif

#ifdef LD_SWITCH_MACHINE
#undef LD_SWITCH_MACHINE
#define LD_SWITCH_MACHINE -D 10000000 /* conform to DATA_START */
#endif

#define SYSTEM_MALLOC
#define LD_SWITCH_SYSTEM

#define DATA_START 0x10000000
#define DATA_SEG_BITS 0x10000000
-------------------------------------------------------------------------------

NOTE, just FYI...

The LD_SWITCH_MACHINE redefine is essential, otherwise an incorrect value is
inherited from "m-mips.h", in which case one runs into the following. There's a
problem with the (*warnfunction) call in malloc.c:morecore() when memory's
getting tight. The warnfunction points to alloc.c:malloc_warning(). Due to the
above-described bad machine parameters, the first version I made thought there
was a memory crunch. Therefore main calls down the following tree:

main				(emacs.c)
init_alloc_once			(alloc.c)
init_strings			(alloc.c)
malloc				(malloc.c)
morecore			(malloc.c)
malloc_warning (*warnfunction)	(alloc.c)
build_string			(alloc.c)
make_string			(alloc.c)
make_uninit_string		(alloc.c)

init_strings contains the line:

  current_string_block =
	 (struct string_block *) malloc (sizeof (struct string_block));

malloc calls morecore, which calls malloc_warning through (*warnfunction)
because memory is (apparently) tight. This eventually gets us to
make_uninit_string, which contains the line:

  if (fullsize <= STRING_BLOCK_SIZE - current_string_block->pos)

which segmentation faults on current_string_block, since the higher call to
malloc has not yet returned to assign it in the first place.

-------------------------------------------------------------------------------
Chris Weikart (weikart@prl.dec.com)		  DEC Paris Research Labs (PRL)
Technical Details
Message-ID: <1991Feb28.155816.26060@prl.dec.com>
Path: arc1-ca.pugleaf.net!gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!usc!elroy.jpl.nasa.gov!decwrl!pa.dec.com!decprl!decprl!weikart
References: <9102280009.AA18268@metatron.harvard.edu>

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: fc7ee,6a864da19912131b
X-Google-Attributes: gidfc7ee,public
X-Google-ArrivalTime: 1991-02-28 10:28:44 PST
Path: arc1-ca.pugleaf.net!gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!usc!elroy.jpl.nasa.gov!decwrl!pa.dec.com!decprl!decprl!weikart
From: weikart@prl.dec.com (Chris Weikart)
Newsgroups: gnu.epoch.misc
Subject: Re: Epoch 3.2 on the DECstation
Message-ID: <1991Feb28.155816.26060@prl.dec.com>
Date: 28 Feb 91 15:58:16 GMT
References: <9102280009.AA18268@metatron.harvard.edu>
Sender: news@prl.dec.com (USENET News System)
Reply-To: weikart@prl.dec.com (Chris Weikart)
Distribution: gnu
Organization: Digital Equipment Corporation - Paris Research Laboratory
Lines: 146