> On 22. Dec 2023, at 17:19, Camm Maguire <c...@maguirefamily.org> wrote:
> 
> On 3), after reading up on vfork, and examining your logs, it is indeed
> deprecated.  This has been in use in 2.6 for many years -- have you been
> applying a patch there as well?

This patch was introduced by me at MacPorts when I upgraded GCL from 2.6.12 to 
2.6.14. Both 2.6.13 and 2.6.14 doesn't work without this patch.

If I recall right I've used git bisect to find when it was broken to start my 
investigation to figure out this changes.

> And the GCL code in question here is (o/unixsys.c):
> 
>  if (!(pid=pvfork())) {
>    errno=0;
>    execvp(*p1,(void *)p1);
>    _exit(128|(errno&0x7f));
>  }
> 
> I'm guessing macosx is mallocing the environment. Or perhaps it is the
> profile timer blocking.  You might want to try replacing pvfork above
> with vfork.  If this works it is a simple fix confining the signal
> handling to the parent.

I've applied the patch:

-  if (!(pid=pvfork())) {
+  if (!(pid=vfork())) {
     errno=0;
     execvp(*p1,(void *)p1);
     _exit(128|(errno&0x7f));

and it crashed as before with stack trace (I've disabled GCL's signals to get 
it):

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [93250]

VM Region Info: 0x28 is not in any region.  Bytes before following region: 
140737488199640
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX 
SHRMOD  REGION DETAIL
      UNUSED SPACE AT START
--->
      VM_ALLOCATE              7ffffffda000-7ffffffdb000 [    4K] r-x/r-x SM=ALI

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   libsystem_malloc.dylib                  0x7ff817d3772c _malloc_fork_prepare 
+ 80
1   libSystem.B.dylib                       0x7ff822d06759 
libSystem_atfork_prepare + 55
2   libsystem_c.dylib                       0x7ff817e1b8a8 vfork + 27

> On 5) if you could please do the following at the stopped part of the
> build:
> 
> cd unixport
> ./saved_pre_gcl
> (in-package :si)
> (trace dlopen dlsym)
> (mdlsym "memcmp")

Sure,

>(in-package :si)

#<"SYSTEM" package>

SYSTEM>(trace dlopen dlsym)

(DLOPEN DLSYM)

SYSTEM>(mdlsym "memcmp")

  1> (DLSYM 0 "memcmp")
  <1 (DLSYM 140703530381538)
|libsystem_platform|:|memcmp|

SYSTEM>

> 
> On 4), as I had indicated, the current bootstrap process is needlessly
> slow and is there just to check all modes of operation.  saved_pre_gcl
> operates from evaluated lisp source, saved_gcl0 from compiled at safety
> 3.  saved_gcl is fully optimized.  Until we address this at final
> release, may I suggest keeping a build around, and when testing a
> change, do
> 
> cd unixport
> ./saved_gcl
>> (time (load "boot.lisp"))
>> 
> make saved_gcl
> 
> For me this takes 240 seconds.

Let's back to it when we fix building.


--
wbr, Kirill


Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to