I've used f123e3d0df9201082c9168671e103dd8835cb81f as local root.

1. ./configure still doesn't work well with readline and failed like this:

checking for rl_completion_matches in -lreadline... yes
checking RL_COMPLETION_ENTRY_FUNCTION_TYPE_FUNCTION... no
checking RL_COMPLETION_ENTRY_FUNCTION_TYPE_RL_COMPENTRY_FUNC_T... no
configure: error: Unknown rl_completion_entry_function return type

I've attached a patch which I've used to bypass it.

2. anyway, gprof aren't disabled completley; build failed with error:

error: /Library/Developer/CommandLineTools/usr/bin/libtool: file: ../o/gprof.o is not an object file (not allowed in a library)
make[1]: *** [libpre_gcl.a] Error 1

and here the second patch attached.

3. after that build failed like this:

>;; Loading "boot.lisp"
;; Compiling /opt/local/var/macports/build/_Users_catap_src_macports-ports_lang_gcl/gcl-devel/work/.tmp/gazonk_9510_0.lsp.
;; End of Pass 1.  
;; End of Pass 2.  

Error: ERROR "Caught fatal error [memory may be damaged]: Segmentation violation."
Signalled by MULTIPLE-VALUE-BIND.
Segmentation violation: c stack ok:signalling errorERROR "Caught fatal error [memory may be damaged]: Segmentation violation."

Broken at LET*.  Type :H for Help.
    1  Return to top level. 
COMPILER>>make: *** [unixport/saved_gcl0] Error 255


The build was for about two hours with output like:

OPTIMIZE levels: Safety=3, Space=0, Speed=3
;; Finished compiling /opt/local/var/macports/build/_Users_catap_src_macports-ports_lang_gcl/gcl-devel/work/f123e3d0df9201082c9168671e103dd8835cb81f/gcl/lsp/gcl_c.o.
real time       :     35.360 secs
run-gbc time    :     27.820 secs
child run time  :      0.200 secs
gbc time        :      0.000 secs
;; Compiling ../lsp/gcl_listlib.lsp.
[GC for 85 STRUCTURE pages..(T=304).GC finished]
[GC for 4171976 CONS pages..(T=273).GC finished]
[GC for 85 STRUCTURE pages..(T=338).GC finished]
[GC for 86 STRUCTURE pages..(T=241).GC finished]
[GC for 97 STRUCTURE pages..(T=257).GC finished]
[GC for 1653 RELOCATABLE-BLOCKS pages..(T=227).GC finished]
[GC for 119 STRUCTURE pages..(T=223).GC finished]
[GC for 130 STRUCTURE pages..(T=244).GC finished]
[GC for 143 STRUCTURE pages..(T=327).GC finished]
[GC for 154 STRUCTURE pages..(T=299).GC finished]
[GC for 164 STRUCTURE pages..(T=265).GC finished]
[GC for 173 STRUCTURE pages..(T=258).GC finished]
;; End of Pass 1.  
[GC for 4171976 CONS pages..(T=241).GC finished]
[GC for 1653 RELOCATABLE-BLOCKS pages..(T=244).GC finished]
[GC for 4171976 CONS pages..(T=383).GC finished]
[GC for 4171976 SPICE pages..(T=268).GC finished]
[GC for 4171976 CONS pages..(T=237).GC finished]
;; End of Pass 2.  
OPTIMIZE levels: Safety=3, Space=0, Speed=3
;; Finished compiling /opt/local/var/macports/build/_Users_catap_src_macports-ports_lang_gcl/gcl-devel/work/f123e3d0df9201082c9168671e103dd8835cb81f/gcl/lsp/gcl_listlib.o.
real time       :   1256.190 secs
run-gbc time    :    921.810 secs
child run time  :      2.860 secs
gbc time        :     46.290 secs
;; Compiling ../lsp/gcl_predlib.lsp.

I think that increase memory usage may speed up build, am I wrong?

Anyway, the build failed with error:

real time       :      4.590 secs
run-gbc time    :      3.200 secs
child run time  :      1.100 secs
gbc time        :      0.000 secs
;; Compiling ../lsp/gcl_mnum.lsp.

Error: ERROR "There is no package with the name \"libc\"."
Fast links are on: do (si::use-fast-links nil) for debugging
Signalled by MULTIPLE-VALUE-CALL.
ERROR "There is no package with the name \"libc\"."

Broken at FUNCALL.  Type :H for Help.
    1  Return to top level. 
SYSTEM>>make: *** [unixport/saved_gcl0] Error 255

Thus, the patch about memory corruption contains two hunk. Without the second one build failed as (3), and I've just tested it

>;; Loading "boot.lisp"
;; Compiling /opt/local/var/macports/build/_Users_catap_src_macports-ports_lang_gcl/gcl-devel/work/.tmp/gazonk_25122_0.lsp.
;; End of Pass 1.  
;; End of Pass 2.  

Error: ERROR "Caught fatal error [memory may be damaged]: Segmentation violation."
Signalled by MULTIPLE-VALUE-BIND.
Segmentation violation: c stack ok:signalling errorERROR "Caught fatal error [memory may be damaged]: Segmentation violation."

Broken at LET*.  Type :H for Help.
    1  Return to top level. 
COMPILER>>make: *** [unixport/saved_gcl0] Error 255
rm h/mcompdefs.h

and without the first one, if I recall right, it's failed near the similar way but at the end, when it saves the image.

-- 
wbr, Kirill

Attachment: 0001-macOS-friendly-check-for-readline.patch
Description: Binary data

Attachment: 0002-Completley-disable-gprof.patch
Description: Binary data


On 22. Dec 2023, at 00:25, Camm Maguire <[email protected]> wrote:

Greetings, and thanks so much!  I think master should now address these
issues.  Please keep me informed.

Take care,

"Kirill A. Korinsky" <[email protected]> writes:

With a few hacks (see attached patches) I was able to build it on macOS 12.

Anyway, it failed on start as:

cp init_raw.lsp foo
echo "(unless si::*quit-tags* (in-package \"USER\")(system:save-system \"saved_pre_gcl\"))" >>foo
ar x libpre_gcl.a $(ar t libpre_gcl.a |grep ^gcl_)
/Users/catap/src/gcl/gcl/unixport/raw_pre_gcl /Users/catap/src/gcl/gcl/unixport/ -libdir /Users/catap/src/gcl/gcl/ < foo
GCL (GNU Common Lisp)  April 1994  9465290 pages
Building symbol table for /Users/catap/src/gcl/gcl/unixport/raw_pre_gcl ..
loading /Users/catap/src/gcl/gcl/unixport/../lsp/gcl_export.lsp
loading /Users/catap/src/gcl/gcl/unixport/../lsp/gcl_defmacro.lsp
loading /Users/catap/src/gcl/gcl/unixport/../lsp/gcl_evalmacros.lsp
loading /Users/catap/src/gcl/gcl/unixport/../lsp/gcl_top.lsp
UNDEFINED-FUNCTION NIL SETQ   NAME KCL-SELF
Lisp initialization failed.
[ "" = "" ] || \
! [ -x /usr/bin/objdump ] || \
! /usr/bin/objdump -f saved_pre_gcl | grep "file format" | grep "elf" || \
! /usr/bin/objdump -R saved_pre_gcl |grep R_.*_COPY || \
! echo "saved_pre_gcl cannot be prelinked"
rm raw_pre_gcl
cd unixport && echo '(time (let ((*features* (cons :pre-gcl *features*)))(load "boot.lisp")(si::save-system "saved_pre_gcl_temp")))' | ./saved_pre_gcl
/bin/sh: ./saved_pre_gcl: No such file or directory

--
wbr, Kirill

From e2bd77215300986fcf46f5202abe08833bcf6b4d Mon Sep 17 00:00:00 2001
From: "Kirill A. Korinsky" <[email protected]>
Date: Thu, 21 Dec 2023 17:01:47 +0100
Subject: [PATCH 1/5] Disable gprof on macOS by default

---
gcl/configure    | 1 +
gcl/configure.in | 1 +
2 files changed, 2 insertions(+)

diff --git a/gcl/configure b/gcl/configure
index 74100ec18..15573a0c6 100755
--- a/gcl/configure
+++ b/gcl/configure
@@ -5742,6 +5742,7 @@ if test "$GPROF" != "" ; then
printf %s "checking working gprof... " >&6; }
   case $use in
       powerpc*) if test "$host_cpu" = "powerpc64le" ; then GPROF=""; fi;;
+       *macos*) GPROF="";;#macOS uses clang by default which doesn't support gprof for years
       s390*) GPROF="";;#mcount smashes float args in make_shortfloat 20180313
       sh4*)  GPROF="";;
       m68k*) GPROF="";;
diff --git a/gcl/configure.in b/gcl/configure.in
index 3cc62a06c..eabf55659 100644
--- a/gcl/configure.in
+++ b/gcl/configure.in
@@ -391,6 +391,7 @@ if test "$GPROF" != "" ; then
   AC_MSG_CHECKING([working gprof])
   case $use in
       powerpc*) if test "$host_cpu" = "powerpc64le" ; then GPROF=""; fi;;
+       *macos*) GPROF="";;#macOS uses clang by default which doesn't support gprof for years
       s390*) GPROF="";;#mcount smashes float args in make_shortfloat 20180313
       sh4*)  GPROF="";;
       m68k*) GPROF="";;
--
2.43.0


From 577fd4a6b3c7cd36f8d3d5fced25c0780ceb2f24 Mon Sep 17 00:00:00 2001
From: "Kirill A. Korinsky" <[email protected]>
Date: Thu, 21 Dec 2023 18:01:59 +0100
Subject: [PATCH 2/5] macOS-friendly check for readline

---
gcl/configure    | 4 ++++
gcl/configure.in | 4 ++++
2 files changed, 8 insertions(+)

diff --git a/gcl/configure b/gcl/configure
index 15573a0c6..fabaad897 100755
--- a/gcl/configure
+++ b/gcl/configure
@@ -9836,6 +9836,7 @@ printf %s "checking RL_COMPLETION_ENTRY_FUNCTION_TYPE_FUNCTION... " >&6; }
                                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

+                                                  #include <stdio.h>
                                                  #include <readline/readline.h>
 extern Function *rl_completion_entry_function __attribute__((weak));

@@ -9862,6 +9863,7 @@ printf %s "checking RL_COMPLETION_ENTRY_FUNCTION_TYPE_RL_COMPENTRY_FUNC_T... " >
                                         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

+                                          #include <stdio.h>
                                         #include <readline/readline.h>
 extern rl_compentry_func_t *rl_completion_entry_function __attribute__((weak));

@@ -9894,6 +9896,7 @@ printf %s "checking RL_READLINE_NAME_TYPE_CHAR... " >&6; }
                                 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

+                                  #include <stdio.h>
                                 #include <readline/readline.h>
                                 extern char *rl_readline_name __attribute__((weak));

@@ -9920,6 +9923,7 @@ printf %s "checking RL_READLINE_NAME_TYPE_CONST_CHAR... " >&6; }
                                         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

+                                          #include <stdio.h>
                                         #include <readline/readline.h>
                                         extern const char *rl_readline_name __attribute__((weak));

diff --git a/gcl/configure.in b/gcl/configure.in
index eabf55659..15a637f90 100644
--- a/gcl/configure.in
+++ b/gcl/configure.in
@@ -1892,6 +1892,7 @@ if test "$enable_readline" != "no" ; then
                                 AC_COMPILE_IFELSE(
                                        [AC_LANG_PROGRAM(
                                      [[
+                                                  #include <stdio.h>
                                                  #include <readline/readline.h>
 extern Function *rl_completion_entry_function __attribute__((weak));
          ]],
@@ -1903,6 +1904,7 @@ if test "$enable_readline" != "no" ; then
                                         AC_COMPILE_IFELSE(
                                                [AC_LANG_PROGRAM(
                                              [[
+                                          #include <stdio.h>
                                         #include <readline/readline.h>
 extern rl_compentry_func_t *rl_completion_entry_function __attribute__((weak));
                                              ]],
@@ -1916,6 +1918,7 @@ if test "$enable_readline" != "no" ; then
                                 AC_COMPILE_IFELSE(
                                        [AC_LANG_PROGRAM(
                                      [[
+                                  #include <stdio.h>
                                 #include <readline/readline.h>
                                 extern char *rl_readline_name __attribute__((weak));
                                      ]],
@@ -1927,6 +1930,7 @@ if test "$enable_readline" != "no" ; then
                                         AC_COMPILE_IFELSE(
                                                [AC_LANG_PROGRAM(
                                              [[
+                                          #include <stdio.h>
                                         #include <readline/readline.h>
                                         extern const char *rl_readline_name __attribute__((weak));
                                              ]],
--
2.43.0


From b8876a37dc07fcebc9e7b179168db86a33f27a91 Mon Sep 17 00:00:00 2001
From: "Kirill A. Korinsky" <[email protected]>
Date: Thu, 21 Dec 2023 18:12:53 +0100
Subject: [PATCH 3/5] make moder clang happy

---
gcl/o/print.d | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/gcl/o/print.d b/gcl/o/print.d
index 569d07eb5..1d944b746 100644
--- a/gcl/o/print.d
+++ b/gcl/o/print.d
@@ -579,6 +579,7 @@ flush_queue(int force,struct printContext *p) {
      if (flush_queue_indent(force,p)) return;
      break;
    case CURRENT: case BLOCK:
+    {
      short sh=p->b.p_queue[mod(p->b.p_qh+1)];
      if (p->b.p_qc<2) return;
      sh<<=1;sh>>=1;
@@ -587,6 +588,7 @@ flush_queue(int force,struct printContext *p) {
      p->b.p_indent_stack[p->b.p_isp] = sh;
      flush_queue_flush(force,2,p);
      break;
+    }
    case LINE:case SECTION:case LINE_RELATIVE:case SECTION_RELATIVE:
      if (p->b.p_qc<3) return;
      flush_queue_flush(force,3,p);
@@ -1680,6 +1682,7 @@ write_object(object x,int level) {
break;

case t_structure:
+  {
 object y=structure_to_list(x);
 if (PRINTcircle)
   if (write_sharp_eq(x,FALSE)==DONE) return;
@@ -1707,6 +1710,7 @@ write_object(object x,int level) {
   break;
 }
 break;
+  }

case t_readtable:
       write_unreadable_str(x,"#<readtable ");
--
2.43.0


From a5845d09971d0e9ee121424a8579e022a806bd86 Mon Sep 17 00:00:00 2001
From: "Kirill A. Korinsky" <[email protected]>
Date: Thu, 21 Dec 2023 18:16:59 +0100
Subject: [PATCH 4/5] Use FPE_SET_CTXT_ADDR and FPE_CLR_CTXT_CWD only when
defined

---
gcl/o/usig.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/gcl/o/usig.c b/gcl/o/usig.c
index 66810c28f..3a83f2107 100644
--- a/gcl/o/usig.c
+++ b/gcl/o/usig.c
@@ -232,8 +232,12 @@ sigfpe3(int sig,siginfo_t *i,void *v) {
#endif
  ifuncall3(sSfloating_point_error,FPE_CODE(i,v),FPE_ADDR(i,v),FPE_CTXT(v));

+#ifdef FPE_SET_CTXT_ADDR
  FPE_SET_CTXT_ADDR(v,FPE_ADDR(i,v));
+#endif
+#ifdef FPE_CLR_CTXT_CWD
  FPE_CLR_CTXT_CWD(v);
+#endif

}

--
2.43.0


From 2c5c2c7362a6bd913fed16f8e250eae01d2ac241 Mon Sep 17 00:00:00 2001
From: "Kirill A. Korinsky" <[email protected]>
Date: Thu, 21 Dec 2023 18:53:54 +0100
Subject: [PATCH 5/5] Reallu disable gprof

---
gcl/configure.in | 3 ++-
gcl/o/main.c     | 4 ++++
gcl/o/makefile   | 4 ++--
3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcl/configure.in b/gcl/configure.in
index 15a637f90..3a2a9ac10 100644
--- a/gcl/configure.in
+++ b/gcl/configure.in
@@ -383,7 +383,7 @@ fi
AC_SUBST(GCL_CC)


-GPROF="gprof_objs"
+GPROF="gprof"
AC_ARG_ENABLE([gprof],[  --enable-gprof builds gcl with -pg in CFLAGS to enable profiling with gprof],
     [if test "$enableval" != "yes" ; then GPROF=""; fi])

@@ -408,6 +408,7 @@ if test "$GPROF" != "" ; then
       OLD_CFLAGS=$CFLAGS  # Do not run configure tests with -pg
       assert_arg_to_cflags -pg
       CFLAGS=$OLD_CFLAGS
+       AC_DEFINE(USE_GPROF,1,[use gprof])
   fi
fi
AC_SUBST(GPROF)
diff --git a/gcl/o/main.c b/gcl/o/main.c
index ae93a228f..ba945bee0 100644
--- a/gcl/o/main.c
+++ b/gcl/o/main.c
@@ -370,7 +370,9 @@ minimize_image(void) {
  nrbpage=0;
  resize_hole(0,t_relocatable,0);

+#ifdef USE_GPROF
  gprof_cleanup();
+#endif

#if defined(BSD) || defined(ATT)  
  mbrk(core_end=heap_end);
@@ -470,7 +472,9 @@ gcl_cleanup(int gc) {
  {extern void _cleanup(void);_cleanup();}
#endif

+#ifdef USE_GPROF
  gprof_cleanup();
+#endif

  if (gc) {

diff --git a/gcl/o/makefile b/gcl/o/makefile
index 349d84d7a..5b1c7d56b 100644
--- a/gcl/o/makefile
+++ b/gcl/o/makefile
@@ -22,7 +22,7 @@ OBJS:=$(addsuffix .o,typespec alloc gbc bitop boot main eval macros lex bds fram
hash array string regexpr structure toplevel file read backq print format\
pathname unixfsys unixfasl error unixtime unixsys unixsave funlink  fat_string\
run_process nfunlink usig usig2 utils makefun sockets gmp_wrappers clxsocket\
- init_pari nsocket new_init prelink sfasl gprof $(RL_OBJS))
+ init_pari nsocket new_init prelink sfasl $(RL_OBJS))
OBJS:=$(OBJS) $(EXTRAS)

INI_FILES=$(patsubst %.o,%.ini,${OBJS})
@@ -30,7 +30,7 @@ INI_FILES:=$(filter-out new_init.ini,$(filter-out boot.ini,$(INI_FILES)))

OBJECTS:=$(OBJS) $(LIBFILES) new_init.o  $(GCLIB) $(LAST_FILE)  $(FIRST_FILE)

-all:  $(OBJECTS) #$(GPROF)
+all:  $(OBJECTS) $(GPROF)

gprof_objs: $(addprefix ../gprof/,$(OBJECTS))

--
Camm Maguire         [email protected]
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to