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: Andrea Corallo
Subject: Re: How does nativecomp compile circular lists?
Date: Wed, 28 Jul 2021 07:20:09 +0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

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



reply via email to

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