From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?utf-8?Q?Gerd_M=C3=B6llmann?= Newsgroups: gmane.emacs.devel Subject: Re: MPS: Please check if scratch/igc builds with native compilation Date: Fri, 24 May 2024 15:01:31 +0200 Message-ID: References: <87le425p8i.fsf@gmail.com> <87ed9u5lbi.fsf@gmail.com> <87ikz56j66.fsf@gmail.com> <87cypc7v8y.fsf@gmail.com> <878r007tpf.fsf@gmail.com> <87y18060y5.fsf@gmail.com> <87r0ds5qrp.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="32099"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Andrea Corallo , Emacs Devel , Eli Zaretskii To: Helmut Eller Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Fri May 24 15:02:53 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sAUZQ-0008Bm-Ha for ged-emacs-devel@m.gmane-mx.org; Fri, 24 May 2024 15:02:52 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sAUYQ-0000HC-1Z; Fri, 24 May 2024 09:01:50 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sAUYK-0000FW-3I for emacs-devel@gnu.org; Fri, 24 May 2024 09:01:48 -0400 Original-Received: from mail-ed1-x531.google.com ([2a00:1450:4864:20::531]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sAUYG-00027k-OF; Fri, 24 May 2024 09:01:42 -0400 Original-Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-57857e0f464so682971a12.0; Fri, 24 May 2024 06:01:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716555694; x=1717160494; darn=gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=qm3Exp9a7gRinsyTvxzonYhLUavq0ahC6ejriLVG958=; b=H/FcTQyV+xJseeSHyrgxtupwF1j59+9URqZ63ksuqneK47CWD/X/dIG9yQZYx0dFFw xNLl0gQyKANUYXoAlURC1p9Te70SdeoCSJqLlcNsS6AWFWfYBRWTI5dkWQPrTY7uiGCT Y8gNgZYG4rx1mQA6fbwYJGe81RuX7auBgj3U5nceTPlcTgCLpBEha8YzVDdpcNKYz/kp 6QjSRkF7pk8dVBUCaboO9WYS0PYkFpSaCl1MsPKt2nIMeOomlZKULUX+CeB1tuvY/Jjw e9RF1pySML65MVVS1g3W2+BYI1o38xQpepG2kG1+tTsFH8fyV1lg304WEomKpFruyjr0 y1Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716555694; x=1717160494; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qm3Exp9a7gRinsyTvxzonYhLUavq0ahC6ejriLVG958=; b=Wh/ja3t0x1ZxmFiyk4cNJTPaZbRk/X8NkpuM32TneB02M4B0mXs31g4s6WjNyl3MOe cgFmVJpDYw/xFaQDc/z9H17m08T6sDlt9bP5h/TqZihYcaw7A/b1JpW9AcSfAA1yKcI2 O5siRFsZVQ1SUFOoXdynMKnc87I/zlrlLEzJXyQd3/pXiNw5K84ntKojhsVyYvY07Cii wR/ODyG9p5q38e+cR8B+aUdMLEI9rxC0yQVHmDgsRaeWt3h/B5MRLFlNQ0QTCmfAWqBI KRZqebp5+uc24kZK8tn6sdUaYUqfQPIYmFjeEz7mgip1zm6JJGhUDh+Gm21uHzG8dgyW 78AQ== X-Forwarded-Encrypted: i=1; AJvYcCUDZ5RQoWvxpE4DnzBvck5/iIW2JGVFxfA68n+24/eeALTUvzST6fFht7Cw8t9Qpu9RO7MB0/kDrDFc6Xn1XGpq5A8P4H8Oax3TzczULJSvmzs= X-Gm-Message-State: AOJu0Yy1MRpVGWw1DkmlcDOEUieEM6zOWuCDtRFRVAx2wwVxBTSQ8q7W T3KArFAKJjeBEWaabIzCJ661BF2xtNmrJ5csF4QUQ/96S0Z6Ziq8IXZfWg== X-Google-Smtp-Source: AGHT+IHH7h5Zrtcbx1l8/HiApUNzyzgymdAR8uEvEa61qqTw8Gzugj2kVqkyQzK0OBhyCgZ6aXe+5A== X-Received: by 2002:a50:aacf:0:b0:572:9fe9:1d7f with SMTP id 4fb4d7f45d1cf-5785196d52dmr1435688a12.18.1716555693845; Fri, 24 May 2024 06:01:33 -0700 (PDT) Original-Received: from pro2.fritz.box (p4fe3a529.dip0.t-ipconnect.de. [79.227.165.41]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-57852495dafsm1697331a12.72.2024.05.24.06.01.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 May 2024 06:01:32 -0700 (PDT) In-Reply-To: ("Gerd =?utf-8?Q?M=C3=B6llman?= =?utf-8?Q?n=22's?= message of "Fri, 24 May 2024 05:10:46 +0200") Received-SPF: pass client-ip=2a00:1450:4864:20::531; envelope-from=gerd.moellmann@gmail.com; helo=mail-ed1-x531.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:319542 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Gerd M=C3=B6llmann writes: > Helmut Eller writes: > >> On Thu, May 23 2024, Gerd M=C3=B6llmann wrote: >> >>> Thanks, but it didn't help, I'm afraid. >> >> There's some checking code in comp.c. Maybe you could add this >> >> void >> check_all_comp_units (void) >> { >> igc_collect (); >> struct Lisp_Hash_Table *h =3D XHASH_TABLE (Vcomp_loaded_comp_units_h= ); >> DOHASH (h, k, cu) >> { >> eassert (NATIVE_COMP_UNITP (cu)); >> fprintf (stderr, "key: %s\n", SSDATA (k)); >> check_comp_unit_relocs (XNATIVE_COMP_UNIT (cu)); >> } >> } >>=20=20=20 >> and call it from the debugger. If this check passes then I think the >> relocs are in pretty good shape. > > Thanks for helping me! > > Since I'm not sure if relocs are the culprit this time around, I'll also > add the roots for a dylib very early, so that there is no "reasonable" > doubt they exist. I'll use this fact: > > .../igc/native-lisp/30_0_50-5cce80dd % nm -g -s __DATA __common radix-t= ree-669a468d-316fbcdc.eln=20=20=20 > 00000000000050e0 S _comp_unit > 00000000000050e8 S _current_thread_reloc > 00000000000050f0 S _d_reloc > 0000000000005220 S _d_reloc_eph > 00000000000053d8 S _d_reloc_imp > 0000000000005438 S _f_symbols_with_pos_enabled_reloc > 0000000000005440 S _freloc_link_table > 0000000000005448 S _pure_reloc > > IOW, I can compute the sizes of the reloc arrays from symbol addresses. > (On macOS, the format is Mach-O, the segment/section names are probably > different in ELF). > > Let's see. But I need to collect enough energy for doing this first ;-). Given the choice of either ironing or trying what I described above, I evaded ironing. Diff at the end. Effect none. Which lets me update my beliefs so that relocs are unlikely to be the cause this time. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=staged.diff Content-Description: roots Unstaged modified lisp/emacs-lisp/comp.el @@ -68,7 +68,7 @@ native-comp-speed :safe #'integerp :version "28.1") -(defcustom native-comp-debug 0 +(defcustom native-comp-debug 2 "Debug level for native compilation, a number between 0 and 3. This is intended for debugging the compiler itself. 0 no debug output. modified src/comp.c @@ -5322,6 +5322,32 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump, Lisp_Object comp_u_lisp_obj; XSETNATIVE_COMP_UNIT (comp_u_lisp_obj, comp_u); +# ifdef HAVE_MPS + { + comp_u->comp_unit = dynlib_sym (handle, COMP_UNIT_SYM); + comp_u->data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); + comp_u->data_imp_relocs = dynlib_sym (handle, DATA_RELOC_IMPURE_SYM); + comp_u->data_eph_relocs = dynlib_sym (handle, DATA_RELOC_EPHEMERAL_SYM); + Lisp_Object *f_symbols_with_pos_enabled_reloc + = dynlib_sym (handle, F_SYMBOLS_WITH_POS_ENABLED_RELOC_SYM); + + comp_u->n_data_relocs = comp_u->data_eph_relocs - comp_u->data_relocs; + comp_u->n_data_eph_relocs = comp_u->data_imp_relocs - comp_u->data_eph_relocs; + comp_u->n_data_imp_relocs = f_symbols_with_pos_enabled_reloc - comp_u->data_imp_relocs; + + comp_u->comp_unit_root = igc_root_create_n (comp_u->comp_unit, 1); + if (comp_u->n_data_relocs) + comp_u->data_relocs_root + = igc_root_create_n (comp_u->data_relocs, comp_u->n_data_relocs); + if (comp_u->n_data_eph_relocs) + comp_u->data_eph_relocs_root + = igc_root_create_n (comp_u->data_eph_relocs, comp_u->n_data_eph_relocs); + if (comp_u->n_data_imp_relocs) + comp_u->data_imp_relocs_root + = igc_root_create_n (comp_u->data_imp_relocs, comp_u->n_data_imp_relocs); + } +#endif + Lisp_Object *saved_cu = dynlib_sym (handle, COMP_UNIT_SYM); if (!saved_cu) xsignal1 (Qnative_lisp_file_inconsistent, comp_u->file); @@ -5366,11 +5392,6 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump, /* Always set data_imp_relocs pointer in the compilation unit (in can be used in 'dump_do_dump_relocation'). */ comp_u->data_imp_relocs = dynlib_sym (handle, DATA_RELOC_IMPURE_SYM); -#ifdef HAVE_MPS - comp_u->data_relocs = dynlib_sym (handle, DATA_RELOC_SYM); - comp_u->comp_unit = dynlib_sym (handle, COMP_UNIT_SYM); - comp_u->comp_unit_root = igc_root_create_n (saved_cu, 1); -#endif if (!comp_u->loaded_once) { @@ -5418,19 +5439,14 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump, EMACS_INT d_vec_len = XFIXNUM (Flength (comp_u->data_vec)); #ifdef HAVE_MPS - comp_u->n_data_relocs = d_vec_len; - if (d_vec_len > 0) - comp_u->data_relocs_root = igc_root_create_n (data_relocs, d_vec_len); + eassert (comp_u->n_data_relocs == d_vec_len); #endif for (EMACS_INT i = 0; i < d_vec_len; i++) data_relocs[i] = AREF (comp_u->data_vec, i); d_vec_len = XFIXNUM (Flength (comp_u->data_impure_vec)); #ifdef HAVE_MPS - comp_u->n_data_imp_relocs = d_vec_len; - if (d_vec_len > 0) - comp_u->data_imp_relocs_root - = igc_root_create_n (data_imp_relocs, d_vec_len); + eassert (comp_u->n_data_imp_relocs == d_vec_len); #endif for (EMACS_INT i = 0; i < d_vec_len; i++) data_imp_relocs[i] = AREF (comp_u->data_impure_vec, i); @@ -5461,11 +5477,7 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump, # ifdef HAVE_MPS /* FIXME: If we want to get rid of these objects, stop tracing these references at some point. */ - comp_u->data_eph_relocs = data_eph_relocs; - comp_u->n_data_eph_relocs = d_vec_len; - if (d_vec_len > 0) - comp_u->data_eph_relocs_root - = igc_root_create_n (data_eph_relocs, d_vec_len); + eassert (comp_u->n_data_eph_relocs = d_vec_len); # endif for (EMACS_INT i = 0; i < d_vec_len; i++) data_eph_relocs[i] = AREF (data_ephemeral_vec, i); --=-=-=--