unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Pip Cet <pipcet@gmail.com>
To: Andrea Corallo <akrl@sdf.org>
Cc: 46824@debbugs.gnu.org, Aaron Jensen <aaronjensen@gmail.com>
Subject: bug#46824: 28.0.50; nativecomp crash with cl-block/cl-defun
Date: Mon, 1 Mar 2021 13:02:03 +0000	[thread overview]
Message-ID: <CAOqdjBer=rGzvmmb6rwsUWC2wVUZghC4mkSDVBxysDDAZVkuhQ@mail.gmail.com> (raw)
In-Reply-To: <xjf5z2bcklr.fsf@sdf.org>

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

On Mon, Mar 1, 2021 at 9:02 AM Andrea Corallo <akrl@sdf.org> wrote:
> Pip Cet <pipcet@gmail.com> writes:
> > On Sun, Feb 28, 2021 at 6:13 AM Pip Cet <pipcet@gmail.com> wrote:
> >> Andrea, is it possible to modify the code so _setjmp is called
> >> directly rather than through a function pointer?
> >
> > This patch, which I hasten to add is not for inclusion and hasn't been
> > tested against the test suite, might fix the problem (on non-Windows
> > systems. I'm afraid this problem is something that Windows actually
> > got right and Unix got wrong...) It does here, experimentally.
> >
> > I'd appreciate it if someone could test further.
>
> I haven't looked into the patch but the approach sounds like a good idea
> to me. Can we have the version of the patch you'd like to have included?

Here's the version I'd like to include. This should not cause any new
test suite failures, just the ones I've been seeing all along. Apart
from the ABI bump, it should not change anything on WINDOWSNT, which I
can't test.

Pip

[-- Attachment #2: 0001-Don-t-call-_setjmp-through-a-function-pointer-Bug-46.patch --]
[-- Type: text/x-patch, Size: 2501 bytes --]

From 4bf47460dc4df61c79737964ff11fa9f5bf1102f Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@gmail.com>
Date: Sun, 28 Feb 2021 06:31:00 +0000
Subject: [PATCH] Don't call _setjmp through a function pointer (Bug#46824)

* src/comp.c (helper_link_table): Don't include SETJMP except on Windows.
(emit_setjmp): Don't use function pointers except on Windows.
(declare_runtime_imported_funcs): Don't import SETJMP at runtime.
(ABI_VERSION): Bump.
---
 src/comp.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/comp.c b/src/comp.c
index 21d1c1a23cf0e..3b002535768b4 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -416,7 +416,7 @@ load_gccjit_if_necessary (bool mandatory)
 
 \f
 /* Increase this number to force a new Vcomp_abi_hash to be generated.  */
-#define ABI_VERSION "1"
+#define ABI_VERSION "2"
 
 /* Length of the hashes used for eln file naming.  */
 #define HASH_LENGTH 8
@@ -640,7 +640,9 @@ #define NUM_CAST_TYPES 15
     helper_PSEUDOVECTOR_TYPEP_XUNTAG,
     pure_write_error,
     push_handler,
+#ifdef WINDOWSNT
     SETJMP_NAME,
+#endif
     record_unwind_protect_excursion,
     helper_unbind_n,
     helper_save_restriction,
@@ -1929,8 +1931,20 @@ emit_setjmp (gcc_jit_rvalue *buf)
 {
 #ifndef WINDOWSNT
   gcc_jit_rvalue *args[] = {buf};
-  return emit_call (intern_c_string (STR (SETJMP_NAME)), comp.int_type, 1, args,
-                   false);
+  gcc_jit_param *params[] =
+    {
+      gcc_jit_context_new_param (comp.ctxt, NULL, comp.void_ptr_type, "buf"),
+    };
+  /* Don't call setjmp through a function pointer (Bug#46824) */
+  return gcc_jit_context_new_call (comp.ctxt,
+				   NULL,
+				   gcc_jit_context_new_function
+				   (comp.ctxt, NULL, GCC_JIT_FUNCTION_IMPORTED,
+				    comp.int_type, STR (SETJMP_NAME),
+				    ARRAYELTS (params), params,
+				    false),
+				   1,
+				   args);
 #else
   /* _setjmp (buf, __builtin_frame_address (0)) */
   gcc_jit_rvalue *args[2];
@@ -2662,10 +2676,7 @@ #define ADD_IMPORTED(f_name, ret_type, nargs, args)			       \
   args[1] = comp.int_type;
   ADD_IMPORTED (push_handler, comp.handler_ptr_type, 2, args);
 
-#ifndef WINDOWSNT
-  args[0] = gcc_jit_type_get_pointer (gcc_jit_struct_as_type (comp.jmp_buf_s));
-  ADD_IMPORTED (SETJMP_NAME, comp.int_type, 1, args);
-#else
+#ifdef WINDOWSNT
   args[0] = gcc_jit_type_get_pointer (gcc_jit_struct_as_type (comp.jmp_buf_s));
   args[1] = comp.void_ptr_type;
   ADD_IMPORTED (SETJMP_NAME, comp.int_type, 2, args);
-- 
2.30.1


  reply	other threads:[~2021-03-01 13:02 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-28  0:34 bug#46824: 28.0.50; nativecomp crash with cl-block/cl-defun Aaron Jensen
2021-02-28  6:13 ` Pip Cet
2021-02-28  6:36   ` Pip Cet
2021-02-28 23:31     ` Aaron Jensen
2021-03-01  9:02     ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-01 13:02       ` Pip Cet [this message]
2021-03-01 17:04         ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02  9:16           ` Pip Cet
2021-03-02 13:27             ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-02 13:27             ` Eli Zaretskii
2021-03-02 14:02               ` Pip Cet
2021-03-02 15:22                 ` Eli Zaretskii
2021-03-02 15:42                   ` Eli Zaretskii
2021-03-03 19:39                 ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-03-04  7:22                   ` Pip Cet
2021-03-04  7:38                     ` Andrea Corallo via Bug reports for GNU Emacs, the Swiss army knife of text editors

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAOqdjBer=rGzvmmb6rwsUWC2wVUZghC4mkSDVBxysDDAZVkuhQ@mail.gmail.com' \
    --to=pipcet@gmail.com \
    --cc=46824@debbugs.gnu.org \
    --cc=aaronjensen@gmail.com \
    --cc=akrl@sdf.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).