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
next prev 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).