unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#58509: 29.0.50; Synchronous nativecomp
@ 2022-10-14 10:38 Lars Ingebrigtsen
  2022-10-14 10:53 ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 10:38 UTC (permalink / raw)
  To: 58509; +Cc: Andrea Corallo


I thought I'd open a bug report for something I mentioned elsewhere: It
should be possible for --batch Emacsen to do native compilation.

I've got a bunch of Elisp scripts, and some of them do a lot of stuff,
and it'd be nice if they were native-compiled.  This will happen if I
also use the same packages interactively, but that often doesn't happen.
(And besides, since there's a bunch of different Emacs versions, they
won't use the same eln cache anyway.)

So I'd like to be able to say "emacs --batch --native-compile -l ..." or
something along those lines.

However, this also almost requires that we allow the nativecomp to
happen synchronously -- the batch job may end before nativecomp finished
otherwise, leading to cleanup problems and loss of efficiency.  So in
this mode, loading an .elc file (with missing .eln file) should instead
just trigger .eln generation, and then we load the .eln file.

And then perhaps we don't actually have to fork an Emacs to do the .eln
generation?  We can just do it in the currently running one, leading to
further efficiency gains.

This is also useful as a general tool for debugging: Today, things
aren't really reproducible, because things happen asynchronously and
unpredictably.  So if we have this, we can also use it as a debugging
tool in general, and not just in --batch.



In GNU Emacs 29.0.50 (build 144, x86_64-pc-linux-gnu, GTK+ Version
 3.24.33, cairo version 1.16.0) of 2022-10-13 built on downe
Repository revision: cbd04ad3d572850775f18bde868c71abcde733ed
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101003
System Description: Ubuntu 22.04.1 LTS






^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 10:38 bug#58509: 29.0.50; Synchronous nativecomp Lars Ingebrigtsen
@ 2022-10-14 10:53 ` Eli Zaretskii
  2022-10-14 10:56   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 10:53 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> Cc: Andrea Corallo <akrl@sdf.org>
> From: Lars Ingebrigtsen <larsi@gnus.org>
> Date: Fri, 14 Oct 2022 12:38:30 +0200
> 
> 
> I thought I'd open a bug report for something I mentioned elsewhere: It
> should be possible for --batch Emacsen to do native compilation.

We already have that, and we use it when users build a release
tarball.  Here's the lisp/Makefile snippet which  does it:

  ifeq ($(HAVE_NATIVE_COMP),yes)
  .PHONY: $(THEFILE)n
  $(THEFILE)n:
	  $(AM_V_ELN)$(emacs) $(BYTE_COMPILE_FLAGS) \
		  -l comp -f byte-compile-refresh-preloaded \
		  --eval '(batch-native-compile t)' $(THEFILE)

We also have the batch-native-compile function, which is probably a
better match for what you want to do in your case (compile a bunch of
your own Lisp files, AFAIU).

> However, this also almost requires that we allow the nativecomp to
> happen synchronously -- the batch job may end before nativecomp finished
> otherwise, leading to cleanup problems and loss of efficiency.

The above-mentioned functions do work synchronously.

So what is actually missing?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 10:53 ` Eli Zaretskii
@ 2022-10-14 10:56   ` Lars Ingebrigtsen
  2022-10-14 11:04     ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 10:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> However, this also almost requires that we allow the nativecomp to
>> happen synchronously -- the batch job may end before nativecomp finished
>> otherwise, leading to cleanup problems and loss of efficiency.
>
> The above-mentioned functions do work synchronously.

`batch-native-compile' just calls `byte-compile-file' on the command
line arguments.  That's not what's needed here at all.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 10:56   ` Lars Ingebrigtsen
@ 2022-10-14 11:04     ` Eli Zaretskii
  2022-10-14 11:13       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 11:04 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 12:56:07 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> However, this also almost requires that we allow the nativecomp to
> >> happen synchronously -- the batch job may end before nativecomp finished
> >> otherwise, leading to cleanup problems and loss of efficiency.
> >
> > The above-mentioned functions do work synchronously.
> 
> `batch-native-compile' just calls `byte-compile-file' on the command
> line arguments.

It does?  I see this:

    (cl-loop for file in command-line-args-left
             if (or (null byte+native-compile)
                    (cl-notany (lambda (re) (string-match re file))
                               native-comp-bootstrap-deny-list))
             collect (comp--native-compile file)  <<<<<<<<<<<<<<<<<<<<<<
             else
             collect (byte-compile-file file))))

What did I miss?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:04     ` Eli Zaretskii
@ 2022-10-14 11:13       ` Lars Ingebrigtsen
  2022-10-14 11:49         ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 11:13 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> `batch-native-compile' just calls `byte-compile-file' on the command
>> line arguments.
>
> It does?  I see this:
>
>     (cl-loop for file in command-line-args-left
>              if (or (null byte+native-compile)
>                     (cl-notany (lambda (re) (string-match re file))
>                                native-comp-bootstrap-deny-list))
>              collect (comp--native-compile file)  <<<<<<<<<<<<<<<<<<<<<<
>              else
>              collect (byte-compile-file file))))
>
> What did I miss?

Sorry, I meant "it just calls comp--native-compile on the command line
arguments".  Which is irrelevant for the proposed use case, which is
enabling normal opportunistic .eln generation, but synchronously.

I.e., if you say

emacs --batch --native-comp -l foo

and foo requires bar, then bar should be native-compiled before being
used.

So I'm not sure why you're bringing up batch-native-compile at all -- it
seems irrelevant, but perhaps I'm missing something?






^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:13       ` Lars Ingebrigtsen
@ 2022-10-14 11:49         ` Eli Zaretskii
  2022-10-14 11:51           ` Lars Ingebrigtsen
  2022-10-14 21:40           ` Andrea Corallo
  0 siblings, 2 replies; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 11:49 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 13:13:40 +0200
> 
> So I'm not sure why you're bringing up batch-native-compile at all -- it
> seems irrelevant, but perhaps I'm missing something?

It is documented as "Native compilation equivalent of
`batch-byte-compile'", so if it doesn't do what it's advertised to do,
it should be fixed to do it.

Let's wait for Andrea to chime in.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:49         ` Eli Zaretskii
@ 2022-10-14 11:51           ` Lars Ingebrigtsen
  2022-10-14 11:53             ` Eli Zaretskii
  2022-10-14 21:40           ` Andrea Corallo
  1 sibling, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 11:51 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

> It is documented as "Native compilation equivalent of
> `batch-byte-compile'", so if it doesn't do what it's advertised to do,
> it should be fixed to do it.

It is, but it seems fully irrelevant for the use case described in this
bug report, unless I'm missing something?






^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:51           ` Lars Ingebrigtsen
@ 2022-10-14 11:53             ` Eli Zaretskii
  2022-10-14 11:59               ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 11:53 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 13:51:27 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > It is documented as "Native compilation equivalent of
> > `batch-byte-compile'", so if it doesn't do what it's advertised to do,
> > it should be fixed to do it.
> 
> It is, but it seems fully irrelevant for the use case described in this
> bug report, unless I'm missing something?

Then maybe I'm misunderstanding the use case?  Didn't you say you
wanted to compile a bunch of Lisp files natively?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:53             ` Eli Zaretskii
@ 2022-10-14 11:59               ` Lars Ingebrigtsen
  2022-10-14 12:11                 ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 11:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

> Then maybe I'm misunderstanding the use case?  Didn't you say you
> wanted to compile a bunch of Lisp files natively?

I said I wanted Emacs to native-compile stuff (almost as normal) when
using --batch.

But perhaps it'd be helpful if you read the original report; I don't
really have much to add to it, and I've just been repeating things
already in it in these responses.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:59               ` Lars Ingebrigtsen
@ 2022-10-14 12:11                 ` Eli Zaretskii
  2022-10-14 12:20                   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 12:11 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 13:59:47 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Then maybe I'm misunderstanding the use case?  Didn't you say you
> > wanted to compile a bunch of Lisp files natively?
> 
> I said I wanted Emacs to native-compile stuff (almost as normal) when
> using --batch.
> 
> But perhaps it'd be helpful if you read the original report; I don't
> really have much to add to it, and I've just been repeating things
> already in it in these responses.

The original report said:

> I thought I'd open a bug report for something I mentioned elsewhere: It
> should be possible for --batch Emacsen to do native compilation.
[...]
> So I'd like to be able to say "emacs --batch --native-compile -l ..." or
> something along those lines.

So it seemed to me like being able to say

  emacs --batch -f batch-native-compile FILE...

is what you want?  If not, please tell what I missed in the original
report.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 12:11                 ` Eli Zaretskii
@ 2022-10-14 12:20                   ` Lars Ingebrigtsen
  2022-10-14 12:54                     ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 12:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

> The original report said:
>
>> I thought I'd open a bug report for something I mentioned elsewhere: It
>> should be possible for --batch Emacsen to do native compilation.
> [...]
>> So I'd like to be able to say "emacs --batch --native-compile -l ..." or
>> something along those lines.
>
> So it seemed to me like being able to say
>
>   emacs --batch -f batch-native-compile FILE...
>
> is what you want?  If not, please tell what I missed in the original
> report.

You missed that the --native-compile there is in no way related to the
-l that follows.  I.e., for instance:

emacs --batch --native-compile --eval '(gnus)'

should native-compile all parts of running Gnus.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 12:20                   ` Lars Ingebrigtsen
@ 2022-10-14 12:54                     ` Eli Zaretskii
  2022-10-14 12:59                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 12:54 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 14:20:24 +0200
> 
> You missed that the --native-compile there is in no way related to the
> -l that follows.  I.e., for instance:
> 
> emacs --batch --native-compile --eval '(gnus)'

(There was no "--eval '(gnus)" in the original report.)

> should native-compile all parts of running Gnus.

Gnus is an interactive program, and I'm quite sure what exactly is
loaded as side effect of "M-x gnus RET" depends on what you do next,
after Gnus starts up.  So the above could perhaps compile everything
that just starting Gnus loads, but it cannot compile anything else.

Besides, what is the semantics of

  emacs --batch --eval '(gnus)

?  IOW, what does it mean to run Gnus in batch mode?

So I still don't understand the request and its semantics.  I also
don't understand how it differs from just starting Gnus interactively
and having whatever is needed compiled asynchronously.  But since my
questions seem to annoy you, I will stop asking them; I'm sorry I
started.  Just one last thing: if the intent is to tell Emacs "compile
natively, but do that in the same Emacs session instead of in
subprocesses", then how is this different from

  emacs --batch --batch-native-compile lisp/gnus/gnus*.el --eval '(gnus)

which is what I had in mind?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 12:54                     ` Eli Zaretskii
@ 2022-10-14 12:59                       ` Lars Ingebrigtsen
  2022-10-14 13:05                         ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 12:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> You missed that the --native-compile there is in no way related to the
>> -l that follows.  I.e., for instance:
>> 
>> emacs --batch --native-compile --eval '(gnus)'
>
> (There was no "--eval '(gnus)" in the original report.)

It's just an example.  Substitute with
`(calculate-the-535325th-prime-number)' or whatever.

> Just one last thing: if the intent is to tell Emacs "compile
> natively, but do that in the same Emacs session instead of in
> subprocesses", then how is this different from
> 
>   emacs --batch --batch-native-compile lisp/gnus/gnus*.el --eval '(gnus)
> 
> which is what I had in mind?

You're suggesting that users should compute with files a command will
load, then compile those, and then start the command?  That doesn't
sound like a good interface, and fortunately that's not how Emacs works
interactively.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 12:59                       ` Lars Ingebrigtsen
@ 2022-10-14 13:05                         ` Eli Zaretskii
  2022-10-14 13:15                           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-14 13:05 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: 58509@debbugs.gnu.org,  akrl@sdf.org
> Date: Fri, 14 Oct 2022 14:59:32 +0200
> 
> >   emacs --batch --batch-native-compile lisp/gnus/gnus*.el --eval '(gnus)
> > 
> > which is what I had in mind?
> 
> You're suggesting that users should compute with files a command will
> load, then compile those, and then start the command?

What else is possible in --batch?

> That doesn't sound like a good interface, and fortunately that's not
> how Emacs works interactively.

Interactively, async compilation is triggered by actually _loading_
stuff.  You cannot have Emacs load everything that is need for some
function call, unless you let the code of that function actually run,
because only running it will reveal all that's needed to be loaded.
Think about autoloads, eval-after-load, etc.  How can Emacs know what
files to compile ahead of running the code you are asking it to run?
Or what am I missing?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 13:05                         ` Eli Zaretskii
@ 2022-10-14 13:15                           ` Lars Ingebrigtsen
  0 siblings, 0 replies; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-14 13:15 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> That doesn't sound like a good interface, and fortunately that's not
>> how Emacs works interactively.
>
> Interactively, async compilation is triggered by actually _loading_
> stuff.  You cannot have Emacs load everything that is need for some
> function call, unless you let the code of that function actually run,
> because only running it will reveal all that's needed to be loaded.
> Think about autoloads, eval-after-load, etc.  How can Emacs know what
> files to compile ahead of running the code you are asking it to run?
> Or what am I missing?

It really sounds like you're not familiar with how the nativecomp
machinery works?

When Emacs is asked to load a file, no matter how it is asked to do so,
it (eventually) looks at the .elc file (if any).  This makes the
native-comp machinery kick in, and at present (like I said in the
original description here) it adds the .el file to a list of files that
will be native-compiled in the background, and then loads the .eln file
later.

And like I said, at that point, we could instead just go ahead and
native-compile the .el file, and then load the .eln file instead of
loading the .elc file, synchronously.

Nothing needs to be known in advance, because the nativecomp machinery
already has all this under control.

And, yes, this thread has been really annoying, because I explained all
this in the first message already.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 11:49         ` Eli Zaretskii
  2022-10-14 11:51           ` Lars Ingebrigtsen
@ 2022-10-14 21:40           ` Andrea Corallo
  2022-10-15  6:45             ` Eli Zaretskii
  2022-10-15  9:22             ` Lars Ingebrigtsen
  1 sibling, 2 replies; 46+ messages in thread
From: Andrea Corallo @ 2022-10-14 21:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Lars Ingebrigtsen, 58509

Eli Zaretskii <eliz@gnu.org> writes:

[...]

> Let's wait for Andrea to chime in.

Hi Eli,

to get practical I think what Lars'd like to have is: at the end of
'maybe_swap_for_eln', in case the .eln is not found, a syncronous
invocation of the native compiler to produce and use the .eln file
(indeed only when this flag is used).

In principal as decribed it should be relatively easy, the only
technical caveat I can think of now are potential circular dependecies
generated by loading comp.el.

The comment I have is that we could have this mode capable of being used
also in interactive sessions, in case I think we should really think of
a better name for the flag, something like --native-compile-sync?  Or
anyway something that highlights the "synchronousness" of the enabled
mechanism.

Best Regards

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 21:40           ` Andrea Corallo
@ 2022-10-15  6:45             ` Eli Zaretskii
  2022-10-15  9:22             ` Lars Ingebrigtsen
  1 sibling, 0 replies; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-15  6:45 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: Lars Ingebrigtsen <larsi@gnus.org>, 58509@debbugs.gnu.org
> Date: Fri, 14 Oct 2022 21:40:06 +0000
> 
> to get practical I think what Lars'd like to have is: at the end of
> 'maybe_swap_for_eln', in case the .eln is not found, a syncronous
> invocation of the native compiler to produce and use the .eln file
> (indeed only when this flag is used).
> 
> In principal as decribed it should be relatively easy, the only
> technical caveat I can think of now are potential circular dependecies
> generated by loading comp.el.

Exactly.  Couldn't this cause an infinite recursion, if compiling a
file needs to load some other file that also needs to be compiled,
etc. etc.?  For example, if some primitive is advised, we'd need to
compile the same trampoline, recursively, no?  How do we break such
vicious circles?

> The comment I have is that we could have this mode capable of being used
> also in interactive sessions, in case I think we should really think of
> a better name for the flag, something like --native-compile-sync?  Or
> anyway something that highlights the "synchronousness" of the enabled
> mechanism.

I don't think the synchronous part is important here.  What is
important is that the Lisp code is natively-compiled before it is
loaded into Emacs.  So something like native-compile-before-load,
perhaps?

Which also suggests a way out of the circular dependency thing: we
could start the compilation in a subprocess and wait for it to finish.
Then any circular dependencies would be solved in the subprocess --
which will run with --batch, so it will simply use byte-compiled Lisp
for its compilation when the corresponding .eln files aren't
available.  Of course, this means when the "main" Emacs loads the
just-produced .eln file, it will find that dependency .el files were
not yet compiled, and will have to stop and wait for their
compilation.  But that is inevitable, I think, and will simply mean we
are serializing the recursion in a brute-force manner.

Does this make sense?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-14 21:40           ` Andrea Corallo
  2022-10-15  6:45             ` Eli Zaretskii
@ 2022-10-15  9:22             ` Lars Ingebrigtsen
  2022-10-15 16:29               ` Andrea Corallo
  1 sibling, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-15  9:22 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, 58509

Andrea Corallo <akrl@sdf.org> writes:

> to get practical I think what Lars'd like to have is: at the end of
> 'maybe_swap_for_eln', in case the .eln is not found, a syncronous
> invocation of the native compiler to produce and use the .eln file
> (indeed only when this flag is used).
>
> In principal as decribed it should be relatively easy, the only
> technical caveat I can think of now are potential circular dependecies
> generated by loading comp.el.

It's kinda the same problem as with the infinite recursion problem with
the trampolines, so perhaps this could have the same solution?  I.e., in
the Emacs that we fork to do the nativecomp, we should switch off both
JIT and trampoline generation?  (We'd need to add such a mechanism, of
course.)

> The comment I have is that we could have this mode capable of being used
> also in interactive sessions, in case I think we should really think of
> a better name for the flag, something like --native-compile-sync?  Or
> anyway something that highlights the "synchronousness" of the enabled
> mechanism.

Yes, that's a better name for the switch.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-15  9:22             ` Lars Ingebrigtsen
@ 2022-10-15 16:29               ` Andrea Corallo
  2022-10-16  8:50                 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-15 16:29 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, 58509

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Andrea Corallo <akrl@sdf.org> writes:
>
>> to get practical I think what Lars'd like to have is: at the end of
>> 'maybe_swap_for_eln', in case the .eln is not found, a syncronous
>> invocation of the native compiler to produce and use the .eln file
>> (indeed only when this flag is used).
>>
>> In principal as decribed it should be relatively easy, the only
>> technical caveat I can think of now are potential circular dependecies
>> generated by loading comp.el.
>
> It's kinda the same problem as with the infinite recursion problem with
> the trampolines, so perhaps this could have the same solution?  I.e., in
> the Emacs that we fork to do the nativecomp, we should switch off both
> JIT and trampoline generation?  (We'd need to add such a mechanism, of
> course.)

Yes, ATM we break circularity as in noninteractive sessions we disable
native compilation, if we allow for it we just have to handle the case.
The mechanism discussed for trampolines on emacs-devel should be
extended for lisp code as well and should do the job.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-15 16:29               ` Andrea Corallo
@ 2022-10-16  8:50                 ` Lars Ingebrigtsen
  2022-10-17  7:52                   ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-16  8:50 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, 58509

Andrea Corallo <akrl@sdf.org> writes:

> Yes, ATM we break circularity as in noninteractive sessions we disable
> native compilation, if we allow for it we just have to handle the case.
> The mechanism discussed for trampolines on emacs-devel should be
> extended for lisp code as well and should do the job.

Yup.  Perhaps we could just have a special value for
`inhibit-automatic-native-compilation' to also skip trampoline
generation totally?






^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-16  8:50                 ` Lars Ingebrigtsen
@ 2022-10-17  7:52                   ` Andrea Corallo
  2022-10-17 11:20                     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-17  7:52 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, 58509

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Andrea Corallo <akrl@sdf.org> writes:
>
>> Yes, ATM we break circularity as in noninteractive sessions we disable
>> native compilation, if we allow for it we just have to handle the case.
>> The mechanism discussed for trampolines on emacs-devel should be
>> extended for lisp code as well and should do the job.
>
> Yup.  Perhaps we could just have a special value for
> `inhibit-automatic-native-compilation' to also skip trampoline
> generation totally?

I think `inhibit-automatic-native-compilation' does already too many
things (with an abstraction I find definitely too weak), that's the
reason I'm against it.  I don't think I want it to do even more.

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-17  7:52                   ` Andrea Corallo
@ 2022-10-17 11:20                     ` Lars Ingebrigtsen
  2022-10-17 11:57                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-17 11:20 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, 58509

Andrea Corallo <akrl@sdf.org> writes:

> I think `inhibit-automatic-native-compilation' does already too many
> things (with an abstraction I find definitely too weak), that's the
> reason I'm against it.  I don't think I want it to do even more.

Well, the "more" here is very small.  A new value like `full' or `total'
to `inhibit-automatic-native-compilation' would solve the fork bomb subr
problem.

I.e., EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION=full when forking the
compiling Emacs would do the trick without introducing yet another
twiddle here.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-17 11:20                     ` Lars Ingebrigtsen
@ 2022-10-17 11:57                       ` Lars Ingebrigtsen
  2022-10-17 13:41                         ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-17 11:57 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, 58509

Lars Ingebrigtsen <larsi@gnus.org> writes:

> I.e., EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION=full when forking the
> compiling Emacs would do the trick without introducing yet another
> twiddle here.

Something like the following simple patch.

I think this should fix the fork bomb problem, and it doesn't seem to
introduce any other problems, but I've only tested it for a couple
minutes.

diff --git a/doc/lispref/compile.texi b/doc/lispref/compile.texi
index 6f8431c55c..3ac4e90c2a 100644
--- a/doc/lispref/compile.texi
+++ b/doc/lispref/compile.texi
@@ -993,10 +993,14 @@ Native-Compilation Variables
 While setting this variable disables automatic compilation of Lisp
 files, the compiler may still be invoked to install @dfn{trampolines}
 if any built-in functions are redefined.  However, these trampolines
-will not get written to your cache directory.
+will not get written to your cache directory.  If this variable has
+the special value @code{full}, even trampoline installation is
+inhibited, which means that redefinition of built-in functions isn't
+possible.
 
 You can also use the @samp{EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION}
-environment variable to disable native compilation.
+environment variable to disable automatic native compilation.  If it's
+@samp{"full"}, trampoline generation is also inhibited.
 @end defvar
 
 @defopt native-comp-speed
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index c300c44a8d..91851ad0f4 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -693,6 +693,7 @@ 'native-compiler-error-empty-byte
 (defun comp-subr-trampoline-install (subr-name)
   "Make SUBR-NAME effectively advice-able when called from native code."
   (unless (or (null comp-enable-subr-trampolines)
+              (eq inhibit-automatic-native-compilation 'full)
               (memq subr-name native-comp-never-optimize-functions)
               (gethash subr-name comp-installed-trampolines-h))
     (cl-assert (subr-primitive-p (symbol-function subr-name)))
@@ -3713,9 +3714,13 @@ comp-final
 	(with-temp-buffer
           (unwind-protect
               (if (zerop
-                   (call-process (expand-file-name invocation-name
-                                                   invocation-directory)
-				 nil t t "--batch" "-l" temp-file))
+                   (let ((process-environment
+                          (cons
+                           "EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION=full"
+                           process-environment)))
+                     (call-process (expand-file-name invocation-name
+                                                     invocation-directory)
+				   nil t t "--batch" "-l" temp-file)))
                   (progn
                     (delete-file temp-file)
                     output)
diff --git a/lisp/startup.el b/lisp/startup.el
index 725984b815..7238bcc1cf 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -580,8 +580,12 @@ normal-top-level
 reads the initialization files, etc.
 It is the default value of the variable `top-level'."
   ;; Allow disabling automatic .elc->.eln processing.
-  (setq inhibit-automatic-native-compilation
-        (getenv "EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION"))
+  (let ((inhibit (getenv "EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION")))
+    (when inhibit
+      (setq inhibit-automatic-native-compilation
+            (if (equal inhibit "full")
+                'full
+              t))))
 
   (if command-line-processed
       (message internal--top-level-message)
diff --git a/src/comp.c b/src/comp.c
index 14012634cc..946816e069 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -5682,6 +5682,12 @@ syms_of_comp (void)
 	       Vinhibit_automatic_native_compilation,
 	       doc: /* If non-nil, inhibit automatic native compilation of loaded .elc files.
 
+If `full', also inhibit trampoline generation.  Any other non-nil
+value will inhibit automatic native compilation of loaded .elc files,
+but will still generate trampolines (without writing them to the eln
+cache).  If `full', it's no longer possible to reliably redefine
+built-in functions.
+
 After compilation, each function definition is updated to the native
 compiled one.  */);
   Vinhibit_automatic_native_compilation = Qnil;





^ permalink raw reply related	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-17 11:57                       ` Lars Ingebrigtsen
@ 2022-10-17 13:41                         ` Eli Zaretskii
  2022-10-17 19:30                           ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-17 13:41 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: Eli Zaretskii <eliz@gnu.org>,  58509@debbugs.gnu.org
> Date: Mon, 17 Oct 2022 13:57:21 +0200
> 
> Lars Ingebrigtsen <larsi@gnus.org> writes:
> 
> > I.e., EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION=full when forking the
> > compiling Emacs would do the trick without introducing yet another
> > twiddle here.
> 
> Something like the following simple patch.

Thanks, but passing information via environment variable is not a good
idea, IME.  It is much better to pass that via command-line arguments.
We've been moving away of the environment variables, albeit slowly, so
adding a new one would be a step back.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-17 13:41                         ` Eli Zaretskii
@ 2022-10-17 19:30                           ` Lars Ingebrigtsen
  2022-10-18 13:43                             ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-17 19:30 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

> Thanks, but passing information via environment variable is not a good
> idea, IME.  It is much better to pass that via command-line arguments.
> We've been moving away of the environment variables, albeit slowly, so
> adding a new one would be a step back.

Sure, we can do it via a command-line argument instead.  Perhaps this
fits well with the proposed --native-compile-sync switch, even.

That is, instead of that, we could have a --native-compile-mode command
line switch with the values --native-compile-mode=none,
--native-compile-mode=sync and --native-compile-mode=normal?

Or a better name for the switch, if anybody has an idea -- I don't much
like "mode" here, since that can be confused with Emacs modes...






^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-17 19:30                           ` Lars Ingebrigtsen
@ 2022-10-18 13:43                             ` Eli Zaretskii
  2022-10-18 13:55                               ` Andrea Corallo
  2022-10-18 18:14                               ` Lars Ingebrigtsen
  0 siblings, 2 replies; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-18 13:43 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: akrl@sdf.org,  58509@debbugs.gnu.org
> Date: Mon, 17 Oct 2022 21:30:24 +0200
> 
> Sure, we can do it via a command-line argument instead.  Perhaps this
> fits well with the proposed --native-compile-sync switch, even.
> 
> That is, instead of that, we could have a --native-compile-mode command
> line switch with the values --native-compile-mode=none,
> --native-compile-mode=sync and --native-compile-mode=normal?

I doubt we really need to have an option with 3 values.  The default
already does TRT in almost all cases, so all we need is to suppress
async compilation of trampolines, because that could cause trouble.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 13:43                             ` Eli Zaretskii
@ 2022-10-18 13:55                               ` Andrea Corallo
  2022-10-18 18:15                                 ` Lars Ingebrigtsen
  2022-10-18 18:45                                 ` Eli Zaretskii
  2022-10-18 18:14                               ` Lars Ingebrigtsen
  1 sibling, 2 replies; 46+ messages in thread
From: Andrea Corallo @ 2022-10-18 13:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Lars Ingebrigtsen, 58509

[-- Attachment #1: Type: text/plain, Size: 1012 bytes --]

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Lars Ingebrigtsen <larsi@gnus.org>
>> Cc: akrl@sdf.org,  58509@debbugs.gnu.org
>> Date: Mon, 17 Oct 2022 21:30:24 +0200
>> 
>> Sure, we can do it via a command-line argument instead.  Perhaps this
>> fits well with the proposed --native-compile-sync switch, even.
>> 
>> That is, instead of that, we could have a --native-compile-mode command
>> line switch with the values --native-compile-mode=none,
>> --native-compile-mode=sync and --native-compile-mode=normal?
>
> I doubt we really need to have an option with 3 values.  The default
> already does TRT in almost all cases, so all we need is to suppress
> async compilation of trampolines, because that could cause trouble.

The attached works for me for fixing the trampoline issue (unless I did
something wrong reproducing).

I named the flag -no-comp-spawn from the variable it controls.  Happy to
rename it if we have something better, but being for internal use only
maybe is already okay?

BR

  Andrea


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Set-comp-no-spawn-earlier-using-no-comp-spawn.patch --]
[-- Type: text/x-diff, Size: 4183 bytes --]

From 01e8bc45a34f754af13e6ff05de71b320a15ffc0 Mon Sep 17 00:00:00 2001
From: Andrea Corallo <andrea.corallo@arm.com>
Date: Tue, 18 Oct 2022 15:14:32 +0200
Subject: [PATCH] Set `comp-no-spawn' earlier using -no-comp-spawn

* src/emacs.c (standard_args): Add '-no-comp-spawn' cmd line option.
* lisp/startup.el (command-line): Parse '-no-comp-spawn' cmd line
option.
* lisp/emacs-lisp/comp.el (comp-run-async-workers, comp-final):
Use '-no-comp-spawn'.
---
 lisp/emacs-lisp/comp.el | 10 +++++-----
 lisp/startup.el         |  5 ++++-
 src/emacs.c             |  1 +
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 2c9b79334b..ddfdbf286a 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -3689,8 +3689,7 @@ comp-final
              (print-circle t)
              (print-escape-multibyte t)
              (expr `((require 'comp)
-                     (setf comp-no-spawn t
-                           native-comp-verbose ,native-comp-verbose
+                     (setf native-comp-verbose ,native-comp-verbose
                            comp-libgccjit-reproducer ,comp-libgccjit-reproducer
                            comp-ctxt ,comp-ctxt
                            native-comp-eln-load-path ',native-comp-eln-load-path
@@ -3716,7 +3715,8 @@ comp-final
               (if (zerop
                    (call-process (expand-file-name invocation-name
                                                    invocation-directory)
-				 nil t t "--batch" "-l" temp-file))
+				 nil t t "-no-comp-spawn" "--batch" "-l"
+                                 temp-file))
                   (progn
                     (delete-file temp-file)
                     output)
@@ -3947,7 +3947,6 @@ comp-run-async-workers
                      source-file (comp-el-to-eln-filename source-file))))
          do (let* ((expr `((require 'comp)
                            (setq comp-async-compilation t
-                                 comp-no-spawn t
                                  warning-fill-column most-positive-fixnum)
                            ,(let ((set (list 'setq)))
                               (dolist (var '(comp-file-preloaded-p
@@ -4004,7 +4003,8 @@ comp-run-async-workers
                              :command (list
                                        (expand-file-name invocation-name
                                                          invocation-directory)
-                                       "--batch" "-l" temp-file)
+                                       "-no-comp-spawn" "--batch" "-l"
+                                       temp-file)
                              :sentinel
                              (lambda (process _event)
                                (run-hook-with-args
diff --git a/lisp/startup.el b/lisp/startup.el
index 725984b815..70267fc857 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1198,7 +1198,7 @@ command-line
                          ("--user") ("--iconic") ("--icon-type") ("--quick")
 			 ("--no-blinking-cursor") ("--basic-display")
                          ("--dump-file") ("--temacs") ("--seccomp")
-                         ("--init-directory")))
+                         ("--init-directory" "--no-comp-spawn")))
              (argi (pop args))
              (orig-argi argi)
              argval)
@@ -1255,6 +1255,9 @@ command-line
 	 ((equal argi "-no-site-file")
 	  (setq site-run-file nil)
 	  (put 'site-run-file 'standard-value '(nil)))
+         ((equal argi "-no-comp-spawn")
+          (defvar comp-no-spawn)
+          (setq comp-no-spawn t))
 	 ((equal argi "-debug-init")
 	  (setq init-file-debug t))
 	 ((equal argi "-iconic")
diff --git a/src/emacs.c b/src/emacs.c
index 43e81b912c..8ad70fecd4 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -2564,6 +2564,7 @@ main (int argc, char **argv)
   { "-init-directory", "--init-directory", 30, 1 },
   { "-no-x-resources", "--no-x-resources", 40, 0 },
   { "-no-site-file", "--no-site-file", 40, 0 },
+  { "-no-comp-spawn", "--no-comp-spawn", 60, 0 },
   { "-u", "--user", 30, 1 },
   { "-user", 0, 30, 1 },
   { "-debug-init", "--debug-init", 20, 0 },
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 13:43                             ` Eli Zaretskii
  2022-10-18 13:55                               ` Andrea Corallo
@ 2022-10-18 18:14                               ` Lars Ingebrigtsen
  2022-10-18 18:32                                 ` Eli Zaretskii
  1 sibling, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-18 18:14 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> That is, instead of that, we could have a --native-compile-mode command
>> line switch with the values --native-compile-mode=none,
>> --native-compile-mode=sync and --native-compile-mode=normal?
>
> I doubt we really need to have an option with 3 values.  The default
> already does TRT in almost all cases, so all we need is to suppress
> async compilation of trampolines, because that could cause trouble.

For bug bug#58509 we need the sync case; for the trampoline fork bomb we
need the don't-do-anything case -- that's two cases, right?

Then the default, normal, NO-OP case is the third, which is pretty
normal practice when doing command line switches like this, so that you
don't have to mogrify the command line arguments when exec-ing and
choosing between the three cases.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 13:55                               ` Andrea Corallo
@ 2022-10-18 18:15                                 ` Lars Ingebrigtsen
  2022-10-19 19:06                                   ` Andrea Corallo
  2022-10-18 18:45                                 ` Eli Zaretskii
  1 sibling, 1 reply; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-18 18:15 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Eli Zaretskii, 58509

Andrea Corallo <akrl@sdf.org> writes:

[...]

>  	  (put 'site-run-file 'standard-value '(nil)))
> +         ((equal argi "-no-comp-spawn")

That is not a good command line argument name, and you haven't said why
you want to introduce yet another command line argument to tweak
behaviour in this area when we've already discussed adding the
--native-compile-sync command line argument.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 18:14                               ` Lars Ingebrigtsen
@ 2022-10-18 18:32                                 ` Eli Zaretskii
  2022-10-18 18:39                                   ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-18 18:32 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 58509, akrl

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: akrl@sdf.org,  58509@debbugs.gnu.org
> Date: Tue, 18 Oct 2022 20:14:15 +0200
> 
> > I doubt we really need to have an option with 3 values.  The default
> > already does TRT in almost all cases, so all we need is to suppress
> > async compilation of trampolines, because that could cause trouble.
> 
> For bug bug#58509 we need the sync case; for the trampoline fork bomb we
> need the don't-do-anything case -- that's two cases, right?

The sync case doesn't need a command-line switch, though?  You can do
it with --eval.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 18:32                                 ` Eli Zaretskii
@ 2022-10-18 18:39                                   ` Eli Zaretskii
  2022-10-19  9:06                                     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-18 18:39 UTC (permalink / raw)
  To: larsi; +Cc: 58509, akrl

> Cc: 58509@debbugs.gnu.org, akrl@sdf.org
> Date: Tue, 18 Oct 2022 21:32:57 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> 
> > From: Lars Ingebrigtsen <larsi@gnus.org>
> > Cc: akrl@sdf.org,  58509@debbugs.gnu.org
> > Date: Tue, 18 Oct 2022 20:14:15 +0200
> > 
> > > I doubt we really need to have an option with 3 values.  The default
> > > already does TRT in almost all cases, so all we need is to suppress
> > > async compilation of trampolines, because that could cause trouble.
> > 
> > For bug bug#58509 we need the sync case; for the trampoline fork bomb we
> > need the don't-do-anything case -- that's two cases, right?
> 
> The sync case doesn't need a command-line switch, though?  You can do
> it with --eval.

Or with -f.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 13:55                               ` Andrea Corallo
  2022-10-18 18:15                                 ` Lars Ingebrigtsen
@ 2022-10-18 18:45                                 ` Eli Zaretskii
  2022-10-19 19:02                                   ` Andrea Corallo
  1 sibling, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-18 18:45 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: Lars Ingebrigtsen <larsi@gnus.org>, 58509@debbugs.gnu.org
> Date: Tue, 18 Oct 2022 13:55:18 +0000
> 
> The attached works for me for fixing the trampoline issue (unless I did
> something wrong reproducing).
> 
> I named the flag -no-comp-spawn from the variable it controls.  Happy to
> rename it if we have something better, but being for internal use only
> maybe is already okay?

On second thought: why do we need a special knob for that?  Could we
instead _always_ compile trampolines "without spawning" in a --batch
session?  IOW, when do we need --batch to compile trampolines
asynchronously?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 18:39                                   ` Eli Zaretskii
@ 2022-10-19  9:06                                     ` Lars Ingebrigtsen
  0 siblings, 0 replies; 46+ messages in thread
From: Lars Ingebrigtsen @ 2022-10-19  9:06 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 58509, akrl

Eli Zaretskii <eliz@gnu.org> writes:

>> The sync case doesn't need a command-line switch, though?  You can do
>> it with --eval.
>
> Or with -f.

OK, I'm done.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 18:45                                 ` Eli Zaretskii
@ 2022-10-19 19:02                                   ` Andrea Corallo
  2022-10-19 19:11                                     ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-19 19:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: Lars Ingebrigtsen <larsi@gnus.org>, 58509@debbugs.gnu.org
>> Date: Tue, 18 Oct 2022 13:55:18 +0000
>> 
>> The attached works for me for fixing the trampoline issue (unless I did
>> something wrong reproducing).
>> 
>> I named the flag -no-comp-spawn from the variable it controls.  Happy to
>> rename it if we have something better, but being for internal use only
>> maybe is already okay?
>
> On second thought: why do we need a special knob for that?  Could we
> instead _always_ compile trampolines "without spawning" in a --batch
> session?

Hi Eli,

unfortunately we cannot as libgccjit leaks memory :/

BR

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-18 18:15                                 ` Lars Ingebrigtsen
@ 2022-10-19 19:06                                   ` Andrea Corallo
  0 siblings, 0 replies; 46+ messages in thread
From: Andrea Corallo @ 2022-10-19 19:06 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: Eli Zaretskii, 58509

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Andrea Corallo <akrl@sdf.org> writes:
>
> [...]
>
>>  	  (put 'site-run-file 'standard-value '(nil)))
>> +         ((equal argi "-no-comp-spawn")
>
> That is not a good command line argument name,

As I mentioned it would be for internal use only, but feel free to offer
a better one.

> and you haven't said why
> you want to introduce yet another command line argument to tweak
> behaviour in this area when we've already discussed adding the
> --native-compile-sync command line argument.

IIUC --native-compile-sync has a different semantic (and it might go in
at a different time as well), this patch is avoid compilation recursion.
I posted it in this bug as (as you mentioned) there was some related
discussion.

Best Regards

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-19 19:02                                   ` Andrea Corallo
@ 2022-10-19 19:11                                     ` Eli Zaretskii
  2022-10-19 19:31                                       ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-19 19:11 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> Date: Wed, 19 Oct 2022 19:02:59 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Andrea Corallo <akrl@sdf.org>
> >> Cc: Lars Ingebrigtsen <larsi@gnus.org>, 58509@debbugs.gnu.org
> >> Date: Tue, 18 Oct 2022 13:55:18 +0000
> >> 
> >> The attached works for me for fixing the trampoline issue (unless I did
> >> something wrong reproducing).
> >> 
> >> I named the flag -no-comp-spawn from the variable it controls.  Happy to
> >> rename it if we have something better, but being for internal use only
> >> maybe is already okay?
> >
> > On second thought: why do we need a special knob for that?  Could we
> > instead _always_ compile trampolines "without spawning" in a --batch
> > session?
> 
> Hi Eli,
> 
> unfortunately we cannot as libgccjit leaks memory :/

I think there could be a misunderstanding here.  What I meant is to do
whatever we do under -no-comp-spawn, but do it always for trampolines
in the --batch invocations, without the need to see -no-comp-spawn on
the command line.

Or maybe I misunderstand what -no-comp-spawn does, in which case can
you tell me what I missed?

Thanks.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-19 19:11                                     ` Eli Zaretskii
@ 2022-10-19 19:31                                       ` Andrea Corallo
  2022-10-20  6:43                                         ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-19 19:31 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> Date: Wed, 19 Oct 2022 19:02:59 +0000
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> >> From: Andrea Corallo <akrl@sdf.org>
>> >> Cc: Lars Ingebrigtsen <larsi@gnus.org>, 58509@debbugs.gnu.org
>> >> Date: Tue, 18 Oct 2022 13:55:18 +0000
>> >> 
>> >> The attached works for me for fixing the trampoline issue (unless I did
>> >> something wrong reproducing).
>> >> 
>> >> I named the flag -no-comp-spawn from the variable it controls.  Happy to
>> >> rename it if we have something better, but being for internal use only
>> >> maybe is already okay?
>> >
>> > On second thought: why do we need a special knob for that?  Could we
>> > instead _always_ compile trampolines "without spawning" in a --batch
>> > session?
>> 
>> Hi Eli,
>> 
>> unfortunately we cannot as libgccjit leaks memory :/
>
> I think there could be a misunderstanding here.  What I meant is to do
> whatever we do under -no-comp-spawn, but do it always for trampolines
> in the --batch invocations, without the need to see -no-comp-spawn on
> the command line.

> "do it always for trampolines in the --batch invocations"

So you mean identifying that we are doing a trampoline compilation and
disable the native compiler without a specific flag?

But I'm not sure I understand 100%, hope the explaination that follows
helps clarifying.

> Or maybe I misunderstand what -no-comp-spawn does, in which case can
> you tell me what I missed?

-no-comp-spawn makes sure that in the spawend compilation processes, no
 matter what, we never spawn again other compilation processes.

We have two invocations for spawning processes, one for sync
compilations and one of async (none of the invocation is specific to
trampolines).  This patch is using -no-comp-spawn for both.

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-19 19:31                                       ` Andrea Corallo
@ 2022-10-20  6:43                                         ` Eli Zaretskii
  2022-10-20  7:23                                           ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-20  6:43 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> Date: Wed, 19 Oct 2022 19:31:05 +0000
> 
> > "do it always for trampolines in the --batch invocations"
> 
> So you mean identifying that we are doing a trampoline compilation and
> disable the native compiler without a specific flag?

Yes, but only in -batch sessions.

I believe this is our logic now: if we are going to compile a
trampoline, we invoke an async subprocess with both -batch and
the -no-comp-spawn options.  But if the --batch session can figure
out that it's compiling a trampoline, it can automatically behave as
if -no-comp-spawn was passed on the command line, no?

> -no-comp-spawn makes sure that in the spawend compilation processes, no
>  matter what, we never spawn again other compilation processes.
> 
> We have two invocations for spawning processes, one for sync
> compilations and one of async (none of the invocation is specific to
> trampolines).  This patch is using -no-comp-spawn for both.

I'm asking why compilation of trampolines could behave like that
automatically, when the compilation is done in a -batch invocation.

Thanks.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-20  6:43                                         ` Eli Zaretskii
@ 2022-10-20  7:23                                           ` Andrea Corallo
  2022-10-20  8:06                                             ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-20  7:23 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> Date: Wed, 19 Oct 2022 19:31:05 +0000
>> 
>> > "do it always for trampolines in the --batch invocations"
>> 
>> So you mean identifying that we are doing a trampoline compilation and
>> disable the native compiler without a specific flag?
>
> Yes, but only in -batch sessions.
>
> I believe this is our logic now: if we are going to compile a
> trampoline, we invoke an async subprocess

We invoke a sync compilation for trampolines (but I think it's not
relevant here)

> with both -batch and
> the -no-comp-spawn options.  But if the --batch session can figure
> out that it's compiling a trampoline, it can automatically behave as
> if -no-comp-spawn was passed on the command line, no?

Okay so IIUC your suggestion would be to: when we identify '--batch' we
search for a signature in the commandline to identify the trampoline
compilation and set in case `comp-no-spawn'?

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-20  7:23                                           ` Andrea Corallo
@ 2022-10-20  8:06                                             ` Eli Zaretskii
  2022-10-23 10:51                                               ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-20  8:06 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> Date: Thu, 20 Oct 2022 07:23:55 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Andrea Corallo <akrl@sdf.org>
> >> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> >> Date: Wed, 19 Oct 2022 19:31:05 +0000
> >> 
> >> > "do it always for trampolines in the --batch invocations"
> >> 
> >> So you mean identifying that we are doing a trampoline compilation and
> >> disable the native compiler without a specific flag?
> >
> > Yes, but only in -batch sessions.
> >
> > I believe this is our logic now: if we are going to compile a
> > trampoline, we invoke an async subprocess
> 
> We invoke a sync compilation for trampolines (but I think it's not
> relevant here)
> 
> > with both -batch and
> > the -no-comp-spawn options.  But if the --batch session can figure
> > out that it's compiling a trampoline, it can automatically behave as
> > if -no-comp-spawn was passed on the command line, no?
> 
> Okay so IIUC your suggestion would be to: when we identify '--batch' we
> search for a signature in the commandline to identify the trampoline
> compilation and set in case `comp-no-spawn'?

Yes.  And if that works, my next question is: can we then remove the
new -no-comp-spawn command-line option, or do we need it for some
other cases?





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-20  8:06                                             ` Eli Zaretskii
@ 2022-10-23 10:51                                               ` Andrea Corallo
  2022-10-23 11:43                                                 ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-23 10:51 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> Date: Thu, 20 Oct 2022 07:23:55 +0000
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> >> From: Andrea Corallo <akrl@sdf.org>
>> >> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> >> Date: Wed, 19 Oct 2022 19:31:05 +0000
>> >> 
>> >> > "do it always for trampolines in the --batch invocations"
>> >> 
>> >> So you mean identifying that we are doing a trampoline compilation and
>> >> disable the native compiler without a specific flag?
>> >
>> > Yes, but only in -batch sessions.
>> >
>> > I believe this is our logic now: if we are going to compile a
>> > trampoline, we invoke an async subprocess
>> 
>> We invoke a sync compilation for trampolines (but I think it's not
>> relevant here)
>> 
>> > with both -batch and
>> > the -no-comp-spawn options.  But if the --batch session can figure
>> > out that it's compiling a trampoline, it can automatically behave as
>> > if -no-comp-spawn was passed on the command line, no?
>> 
>> Okay so IIUC your suggestion would be to: when we identify '--batch' we
>> search for a signature in the commandline to identify the trampoline
>> compilation and set in case `comp-no-spawn'?
>
> Yes.  And if that works, my next question is: can we then remove the
> new -no-comp-spawn command-line option, or do we need it for some
> other cases?

If it works I think it should be equivalent at that point.  But at the
moment is not so trivial to identify this condition as we have no clear
marker of it.

The current invocation for compilations is just like:

emacs --batch -l sometmpfile.el

I don't know if we have some other option for adding a marker other than
the most obvious (the dedicated flag).

Best Regards

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-23 10:51                                               ` Andrea Corallo
@ 2022-10-23 11:43                                                 ` Eli Zaretskii
  2022-10-23 12:10                                                   ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-23 11:43 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> Date: Sun, 23 Oct 2022 10:51:14 +0000
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> Okay so IIUC your suggestion would be to: when we identify '--batch' we
> >> search for a signature in the commandline to identify the trampoline
> >> compilation and set in case `comp-no-spawn'?
> >
> > Yes.  And if that works, my next question is: can we then remove the
> > new -no-comp-spawn command-line option, or do we need it for some
> > other cases?
> 
> If it works I think it should be equivalent at that point.  But at the
> moment is not so trivial to identify this condition as we have no clear
> marker of it.
> 
> The current invocation for compilations is just like:
> 
> emacs --batch -l sometmpfile.el
> 
> I don't know if we have some other option for adding a marker other than
> the most obvious (the dedicated flag).

At some point during compilation, we surely know that we are compiling
a trampoline, right?  So I thought to avoid forking at that point, so
that we don't need yet another command-line option for internal
purposes.

But if this is too complicated and cumbersome, I'm okay with a
command-line switch.

Thanks.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-23 11:43                                                 ` Eli Zaretskii
@ 2022-10-23 12:10                                                   ` Andrea Corallo
  2022-10-25 19:54                                                     ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-23 12:10 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> Date: Sun, 23 Oct 2022 10:51:14 +0000
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> >> Okay so IIUC your suggestion would be to: when we identify '--batch' we
>> >> search for a signature in the commandline to identify the trampoline
>> >> compilation and set in case `comp-no-spawn'?
>> >
>> > Yes.  And if that works, my next question is: can we then remove the
>> > new -no-comp-spawn command-line option, or do we need it for some
>> > other cases?
>> 
>> If it works I think it should be equivalent at that point.  But at the
>> moment is not so trivial to identify this condition as we have no clear
>> marker of it.
>> 
>> The current invocation for compilations is just like:
>> 
>> emacs --batch -l sometmpfile.el
>> 
>> I don't know if we have some other option for adding a marker other than
>> the most obvious (the dedicated flag).
>
> At some point during compilation, we surely know that we are compiling
> a trampoline, right?  So I thought to avoid forking at that point, so
> that we don't need yet another command-line option for internal
> purposes.

That's correct, but I believe the issue is that when we realize we are
compiling a trampoline it's too late, and we might have been decided
already a new trampoline needs to be compiled and installed.  The
parsing of the command line args happens way earlier and that's why this
technique works at solving this issue.

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-23 12:10                                                   ` Andrea Corallo
@ 2022-10-25 19:54                                                     ` Andrea Corallo
  2022-10-26  2:30                                                       ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Andrea Corallo @ 2022-10-25 19:54 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Andrea Corallo <akrl@sdf.org> writes:

> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Andrea Corallo <akrl@sdf.org>
>>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>>> Date: Sun, 23 Oct 2022 10:51:14 +0000
>>> 
>>> Eli Zaretskii <eliz@gnu.org> writes:
>>> 
>>> >> Okay so IIUC your suggestion would be to: when we identify '--batch' we
>>> >> search for a signature in the commandline to identify the trampoline
>>> >> compilation and set in case `comp-no-spawn'?
>>> >
>>> > Yes.  And if that works, my next question is: can we then remove the
>>> > new -no-comp-spawn command-line option, or do we need it for some
>>> > other cases?
>>> 
>>> If it works I think it should be equivalent at that point.  But at the
>>> moment is not so trivial to identify this condition as we have no clear
>>> marker of it.
>>> 
>>> The current invocation for compilations is just like:
>>> 
>>> emacs --batch -l sometmpfile.el
>>> 
>>> I don't know if we have some other option for adding a marker other than
>>> the most obvious (the dedicated flag).
>>
>> At some point during compilation, we surely know that we are compiling
>> a trampoline, right?  So I thought to avoid forking at that point, so
>> that we don't need yet another command-line option for internal
>> purposes.
>
> That's correct, but I believe the issue is that when we realize we are
> compiling a trampoline it's too late, and we might have been decided
> already a new trampoline needs to be compiled and installed.  The
> parsing of the command line args happens way earlier and that's why this
> technique works at solving this issue.
>
>   Andrea

What do we want to do?  Shall I push my patch that fixes the trampoline
bomb with the use of -no-comp-spawn?

Best Regards

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-25 19:54                                                     ` Andrea Corallo
@ 2022-10-26  2:30                                                       ` Eli Zaretskii
  2022-10-26  6:40                                                         ` Andrea Corallo
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2022-10-26  2:30 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: larsi, 58509

> From: Andrea Corallo <akrl@sdf.org>
> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
> Date: Tue, 25 Oct 2022 19:54:27 +0000
> 
> >>> The current invocation for compilations is just like:
> >>> 
> >>> emacs --batch -l sometmpfile.el
> >>> 
> >>> I don't know if we have some other option for adding a marker other than
> >>> the most obvious (the dedicated flag).
> >>
> >> At some point during compilation, we surely know that we are compiling
> >> a trampoline, right?  So I thought to avoid forking at that point, so
> >> that we don't need yet another command-line option for internal
> >> purposes.
> >
> > That's correct, but I believe the issue is that when we realize we are
> > compiling a trampoline it's too late, and we might have been decided
> > already a new trampoline needs to be compiled and installed.  The
> > parsing of the command line args happens way earlier and that's why this
> > technique works at solving this issue.
> >
> >   Andrea
> 
> What do we want to do?  Shall I push my patch that fixes the trampoline
> bomb with the use of -no-comp-spawn?

Oh, I thought you already did?

Yes, please install that.  AFAIU, the simplification I had in mind
doesn't really simplify things, so your proposal seems to be the best
we have on the table.

Thanks.





^ permalink raw reply	[flat|nested] 46+ messages in thread

* bug#58509: 29.0.50; Synchronous nativecomp
  2022-10-26  2:30                                                       ` Eli Zaretskii
@ 2022-10-26  6:40                                                         ` Andrea Corallo
  0 siblings, 0 replies; 46+ messages in thread
From: Andrea Corallo @ 2022-10-26  6:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: larsi, 58509

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Andrea Corallo <akrl@sdf.org>
>> Cc: larsi@gnus.org, 58509@debbugs.gnu.org
>> Date: Tue, 25 Oct 2022 19:54:27 +0000
>> 
>> >>> The current invocation for compilations is just like:
>> >>> 
>> >>> emacs --batch -l sometmpfile.el
>> >>> 
>> >>> I don't know if we have some other option for adding a marker other than
>> >>> the most obvious (the dedicated flag).
>> >>
>> >> At some point during compilation, we surely know that we are compiling
>> >> a trampoline, right?  So I thought to avoid forking at that point, so
>> >> that we don't need yet another command-line option for internal
>> >> purposes.
>> >
>> > That's correct, but I believe the issue is that when we realize we are
>> > compiling a trampoline it's too late, and we might have been decided
>> > already a new trampoline needs to be compiled and installed.  The
>> > parsing of the command line args happens way earlier and that's why this
>> > technique works at solving this issue.
>> >
>> >   Andrea
>> 
>> What do we want to do?  Shall I push my patch that fixes the trampoline
>> bomb with the use of -no-comp-spawn?
>
> Oh, I thought you already did?
>
> Yes, please install that.

Done, into trunk as 5ad5b797f7.

Thanks

  Andrea





^ permalink raw reply	[flat|nested] 46+ messages in thread

end of thread, other threads:[~2022-10-26  6:40 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-14 10:38 bug#58509: 29.0.50; Synchronous nativecomp Lars Ingebrigtsen
2022-10-14 10:53 ` Eli Zaretskii
2022-10-14 10:56   ` Lars Ingebrigtsen
2022-10-14 11:04     ` Eli Zaretskii
2022-10-14 11:13       ` Lars Ingebrigtsen
2022-10-14 11:49         ` Eli Zaretskii
2022-10-14 11:51           ` Lars Ingebrigtsen
2022-10-14 11:53             ` Eli Zaretskii
2022-10-14 11:59               ` Lars Ingebrigtsen
2022-10-14 12:11                 ` Eli Zaretskii
2022-10-14 12:20                   ` Lars Ingebrigtsen
2022-10-14 12:54                     ` Eli Zaretskii
2022-10-14 12:59                       ` Lars Ingebrigtsen
2022-10-14 13:05                         ` Eli Zaretskii
2022-10-14 13:15                           ` Lars Ingebrigtsen
2022-10-14 21:40           ` Andrea Corallo
2022-10-15  6:45             ` Eli Zaretskii
2022-10-15  9:22             ` Lars Ingebrigtsen
2022-10-15 16:29               ` Andrea Corallo
2022-10-16  8:50                 ` Lars Ingebrigtsen
2022-10-17  7:52                   ` Andrea Corallo
2022-10-17 11:20                     ` Lars Ingebrigtsen
2022-10-17 11:57                       ` Lars Ingebrigtsen
2022-10-17 13:41                         ` Eli Zaretskii
2022-10-17 19:30                           ` Lars Ingebrigtsen
2022-10-18 13:43                             ` Eli Zaretskii
2022-10-18 13:55                               ` Andrea Corallo
2022-10-18 18:15                                 ` Lars Ingebrigtsen
2022-10-19 19:06                                   ` Andrea Corallo
2022-10-18 18:45                                 ` Eli Zaretskii
2022-10-19 19:02                                   ` Andrea Corallo
2022-10-19 19:11                                     ` Eli Zaretskii
2022-10-19 19:31                                       ` Andrea Corallo
2022-10-20  6:43                                         ` Eli Zaretskii
2022-10-20  7:23                                           ` Andrea Corallo
2022-10-20  8:06                                             ` Eli Zaretskii
2022-10-23 10:51                                               ` Andrea Corallo
2022-10-23 11:43                                                 ` Eli Zaretskii
2022-10-23 12:10                                                   ` Andrea Corallo
2022-10-25 19:54                                                     ` Andrea Corallo
2022-10-26  2:30                                                       ` Eli Zaretskii
2022-10-26  6:40                                                         ` Andrea Corallo
2022-10-18 18:14                               ` Lars Ingebrigtsen
2022-10-18 18:32                                 ` Eli Zaretskii
2022-10-18 18:39                                   ` Eli Zaretskii
2022-10-19  9:06                                     ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).