emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How does nativecomp compile circular lists?


From: Jimmy Yuen Ho Wong
Subject: Re: How does nativecomp compile circular lists?
Date: Wed, 28 Jul 2021 03:09:24 +0100

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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]