[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CLISP on Sparc Linux



I managed to get CLISP running on Sparc Linux (clisp-1996-07-22). Kind
of.  I still have the following problem: (socket-server [port])
segfaults in io.d in line 5896:


[... start of io.d fragment ...]
	
# UP: Beendet einen Block mit erhöhtem SYS::*PRIN-LEVEL*.
# level_end(&stream);
# > stream: Stream
# < stream: Stream
# verändert STACK
  local void level_end (object* stream_);
  local void level_end(stream_)
    var object* stream_;
    { dynamic_unbind(); }   <========== HERE =================

# Length
# ------

[... End of io.d fragment ...]

Any hints? 
Thanks.


Here is a summary of changes:

put 

  #if (defined(unix) && defined(linux) && defined(sparc))
    #define SPARC
  #endif

in lispbibl.d

(src directory)


in unix/sigsegv.c
add

#if defined(linux) && defined(sparc) 
#define FAULT_HANDLER_ARGLIST  sig, code, scp, addr
#define FAULT_HANDLER_ARGDECL  int sig; int code; void* scp; char* addr;
#define FAULT_ADDRESS  addr
#define WP_SIGNAL  FAULT_HANDLER(SIGSEGV)
#define CAN_HANDLE_WP_FAULT
#endif





add -mno-app-regs to CFLAGS (important!!)




graph.d, graph.c SHOULD NOT be compiled (found no clean way to disable it)
Change the following line in src/lispbibl.d: 

# Ob Graphik-Operationen unterstützt werden.
  #if (defined(EMUNIX) && !defined(WINDOWS)) || defined(UNIX_LINUX)
    #define GRAPHICS
    #define GRAPHICS_SWITCH  # Umschalten zwischen Text-Modus und Grafik-Modus
  #endif
# Bei Erweiterung: GRAPH erweitern.


to 


# Ob Graphik-Operationen unterstützt werden.
  #if (defined(EMUNIX) && !defined(WINDOWS)) || (defined(UNIX_LINUX) && defined(i386))
    #define GRAPHICS
    #define GRAPHICS_SWITCH  # Umschalten zwischen Text-Modus und Grafik-Modus
  #endif
# Bei Erweiterung: GRAPH erweitern.


----------------------------------------------------------------------------
----------------------------------------------------------------------------
Here is an attempt of a diff:


diff -c -r clisp-sparc-linux/src/lispbibl.d clisp-1996-07-22/src/lispbibl.d
*** clisp-sparc-linux/src/lispbibl.d	Mon Feb  3 11:59:15 1997
--- clisp-1996-07-22/src/lispbibl.d	Sun Jul 21 13:17:42 1996
***************
*** 83,91 ****
    #if (defined(unix) && defined(linux) && defined(i386))
      #define PC386
    #endif
-   #if (defined(unix) && defined(linux) && defined(sparc))
-     #define SPARC
-   #endif
    #if (defined(sun) && defined(unix) && defined(mc68020))
      #define SUN3
    #endif
--- 83,88 ----
***************
*** 1616,1622 ****
  # Bei Erweiterung: REXX erweitern.
  
  # Ob Graphik-Operationen unterstützt werden.
!   #if (defined(EMUNIX) && !defined(WINDOWS)) || (defined(UNIX_LINUX) && defined(i386))
      #define GRAPHICS
      #define GRAPHICS_SWITCH  # Umschalten zwischen Text-Modus und Grafik-Modus
    #endif
--- 1613,1619 ----
  # Bei Erweiterung: REXX erweitern.
  
  # Ob Graphik-Operationen unterstützt werden.
!   #if (defined(EMUNIX) && !defined(WINDOWS)) || defined(UNIX_LINUX)
      #define GRAPHICS
      #define GRAPHICS_SWITCH  # Umschalten zwischen Text-Modus und Grafik-Modus
    #endif

diff -c -r clisp-sparc-linux/unix/sigsegv.c clisp-1996-07-22/unix/sigsegv.c
*** clisp-sparc-linux/unix/sigsegv.c	Mon Feb  3 10:56:43 1997
--- clisp-1996-07-22/unix/sigsegv.c	Sat Jan 28 07:11:00 1995
***************
*** 97,112 ****
  #define CAN_HANDLE_WP_FAULT
  #endif
  
- 
- #if defined(linux) && defined(sparc) 
- #define FAULT_HANDLER_ARGLIST  sig, code, scp, addr
- #define FAULT_HANDLER_ARGDECL  int sig; int code; void* scp; char* addr;
- #define FAULT_ADDRESS  addr
- #define WP_SIGNAL  FAULT_HANDLER(SIGSEGV)
- #define CAN_HANDLE_WP_FAULT
- #endif
- 
- 
  #if defined(sun) && defined(sparc) && 0 /* Sun4, SunOS 4.1 */
  #define FAULT_HANDLER_ARGLIST  sig, code, scp, addr
  #define FAULT_HANDLER_ARGDECL  int sig; int code; void* scp; char* addr;
--- 97,102 ----