unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Andrea Corallo via "Emacs development discussions." <emacs-devel@gnu.org>
To: Jimmy Yuen Ho Wong <wyuenho@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: How does nativecomp compile circular lists?
Date: Wed, 28 Jul 2021 07:20:09 +0000	[thread overview]
Message-ID: <xjf1r7igb12.fsf@sdf.org> (raw)
In-Reply-To: <6247f78b-282f-27e7-e0cf-6bc3b1cdee26@gmail.com> (Jimmy Yuen Ho Wong's message of "Wed, 28 Jul 2021 03:58:13 +0100")

Jimmy Yuen Ho Wong <wyuenho@gmail.com> writes:

> On 28/07/2021 3:09 AM, Jimmy Yuen Ho Wong wrote:
>
>  I think I've found out what that stacktrace means. The regular expression in disassemble-internal hasn't taken into
>  account LLVM's objdump output format for mach-o objects. The first couple of lines of the *Disassemble* buffer looks
>  like this on macOS:
>
>  /Users/wyuenho/.emacs.d/eln-cache/28_0_50-83d1a9b9/markdown-mode-4888e153-14d4f01e.eln: file format mach-o 64-bit
>  x86-64
>
>  Disassembly of section __TEXT,__text:
>
>  0000000000002fa0 <_maybe_gc_quit>:
>  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: warning:
>  '/Users/wyuenho/.emacs.d/eln-cache/28_0_50-83d1a9b9/markdown-mode-4888e153-14d4f01e.eln': failed to parse debug
>  information for /Users/wyuenho/.emacs.d/eln-cache/28_0_50-83d1a9b9/markdown-mode-4888e153-14d4f01e.eln
>      2fa0: 8b 05 86 9f 08 00             movl 565126(%rip), %eax  # 8cf2c <_quitcounter>
>      2fa6: 83 c0 01                     addl $1, %eax
>
>  Jimmy
>
>  On Tue, Jul 27, 2021 at 10:28 AM Andrea Corallo <akrl@sdf.org> wrote:
>
>  Jimmy Yuen Ho Wong <wyuenho@gmail.com> writes:
>
>  > I'm not exactly sure how to even ask this question, as I've seen various packages fail to natively compile
>  circular lists
>  > or optimize it wrongly. So I've come up with a simple test case for me to be able to disassemble the bytecode
>  and the
>  > native code, and see if I could spot the problem, but disassembling natively compiled code doesn't seem to
>  work.
>  >
>  > Test case:
>  >
>  > (defun test-circular-list ()
>  >   (let ((l (list 1 2 3)))
>  >     (setcdr (last l) l)
>  >     l))
>  >
>  > (print (test-circular-list))
>  >
>  > (provide 'test-circular-list)
>  >
>  > M-x emacs-lisp-byte-compile-and-load
>  > M-x disassemble RET test-circular-list (works)
>  >
>  > M-x emacs-lisp-native-compile-and-load
>  > M-x disassemble RET test-circular-list (doesn't work)
>  >
>  > Debugger entered--Lisp error: (search-failed "^.*<F746573742d63697263756c61722d6c697374_test_cir...")
>  >   re-search-forward("^.*<F746573742d63697263756c61722d6c697374_test_cir...")
>  >   disassemble-internal(test-circular-list 0 nil)
>  >   disassemble(test-circular-list nil 0 t)
>  >   funcall-interactively(disassemble test-circular-list nil 0 t)
>  >   command-execute(disassemble record)
>  >   execute-extended-command(nil "disassemble" nil)
>  >   funcall-interactively(execute-extended-command nil "disassemble" nil)
>  >   command-execute(execute-extended-command)
>  >
>  > Furthermore, this test case, though superficially similar, doesn't seem to be able to reproduce the same
>  failure to
>  > natively compile issue as seen in powerline.
>  >
>  > There seems to be more than one thing wrong with this journey into my deep dive into how native compiling
>  circular lists
>  > work.
>  >
>  > Jimmy Yuen Ho Wong
>  >
>
>  Hi Jimmy,
>
>  I'm failing to reproduce this issue.
>
>  Disassembling following your instructions works here. Also the compiled
>  `test-circular-list' function as expected here.
>
>  Am I missing something?
>
>  Best Regards
>
>    Andrea
>
> Sorry wrong patch from the last email. This is the correct one.

[re-adding the list]

Hi Jimmy,

thanks for the patch.

So I guess is clear this is unrelated to circular lists and probably
disassemble is just broken for every native compiled function in this
configuration.

We might have other architecture+OS where function labels start with '_'
but so far the patch LGTM, I just suggest a small nit.

> diff --git a/lisp/emacs-lisp/disass.el b/lisp/emacs-lisp/disass.el
> index 6ac76f1c19..d0e3bf7bf4 100644
> --- a/lisp/emacs-lisp/disass.el
> +++ b/lisp/emacs-lisp/disass.el
> @@ -95,6 +95,7 @@ disassemble-internal
>                (re-search-forward (concat "^.*"
>                                           (regexp-quote
>                                            (concat "<"
> +                                                  (if (eq system-type 'darwin) "_")
                                                     ^^^
                                                     I'd use `when' here.
>                                                    (comp-c-func-name
>                                                     (subr-name obj) "F" t)
>                                                    ">:"))))

Do you aready have copyright assignment?

Best Regards

  Andrea



  parent reply	other threads:[~2021-07-28  7:20 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-27  7:21 How does nativecomp compile circular lists? Jimmy Yuen Ho Wong
2021-07-27  9:28 ` Andrea Corallo via Emacs development discussions.
2021-07-28  2:09   ` Jimmy Yuen Ho Wong
     [not found]     ` <6247f78b-282f-27e7-e0cf-6bc3b1cdee26@gmail.com>
2021-07-28  7:20       ` Andrea Corallo via Emacs development discussions. [this message]
2021-07-28 13:49         ` Jimmy Yuen Ho Wong
2021-07-28 15:11           ` Andrea Corallo via Emacs development discussions.
2021-07-29 10:43             ` Jimmy Yuen Ho Wong
2021-07-30  8:20               ` Andrea Corallo via Emacs development discussions.
2021-08-03  7:23                 ` Jimmy Yuen Ho Wong
2021-08-03  8:28                   ` Andrea Corallo via Emacs development discussions.
2021-07-28  1:15 ` Michael Heerdegen
2021-07-28  2:18   ` Jimmy Yuen Ho Wong

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=xjf1r7igb12.fsf@sdf.org \
    --to=emacs-devel@gnu.org \
    --cc=akrl@sdf.org \
    --cc=wyuenho@gmail.com \
    /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).