From: Simon Marchi via Gdb <gdb@sourceware.org>
To: Peng Yu <pengyu.ut@gmail.com>, gdb@sourceware.org
Subject: Re: Why does `disassemble` behave differently on Linux and Mac?
Date: Sun, 24 Jan 2021 10:31:28 -0500 [thread overview]
Message-ID: <fc573a88-a00b-c193-9c32-2498d8476c5c@polymtl.ca> (raw)
In-Reply-To: <CABrM6wnr7vSR-HFxUGU+6wF9x-vBMNzOYhQi5EUHRpkGj_MBmA@mail.gmail.com>
On 2021-01-24 10:06 a.m., Peng Yu via Gdb wrote:
> Hi,
>
> https://visualgdb.com/gdbreference/commands/set_disassembly-flavor
>
> I am trying to follow the above example, but it does behave the same
> on Linux and Mac. Does anybody know how to make it work on Mac?
> Thanks.
>
> On Linux:
>
> $ uname Linux $ cat func.c int func(int a, int b) { return a + b; } $
> gcc -c func.c $ gdb -q func.o Reading symbols from func.o... (No
> debugging symbols found in func.o) (gdb) show disassembly-flavor The
> disassembly flavor is "att". (gdb) disassemble func Dump of assembler
> code for function func: 0x0000000000000000 <+0>: push %rbp
> 0x0000000000000001 <+1>: mov %rsp,%rbp 0x0000000000000004
> <+4>: mov %edi,-0x4(%rbp) 0x0000000000000007 <+7>: mov
> %esi,-0x8(%rbp) 0x000000000000000a <+10>: mov -0x4(%rbp),%edx
> 0x000000000000000d <+13>: mov -0x8(%rbp),%eax
> 0x0000000000000010 <+16>: add %edx,%eax 0x0000000000000012
> <+18>: pop %rbp 0x0000000000000013 <+19>: ret End of
> assembler dump.
>
> On Mac:
>
> $ uname Darwin $ cat func.c int func(int a, int b) { return a + b; } $
> gcc -c func.c $ gdb -q func.o Reading symbols from func.o... (No
> debugging symbols found in func.o) (gdb) show disassembly-flavor The
> disassembly flavor is "att". (gdb) disassemble func No symbol table
> is loaded. Use the "file" command.
>
It's probably not really the disassemble command that is different, it
looks like the Mac version did not read the minimal symbols properly.
You would have to debug GDB to understand why. On Linux the minimal
symbols are read from the ELF executable, whereas on Mac it is from the
Mach-O executable. Presumably, that happens in macho_symfile_read, in
machoread.c. It looks like you can do "set debug mach-o 1" to enable
some debug prints about reading Mach-O executables, I don't know if that
will help or not.
You could also try building with debug symbols, but passing -g to the
compiled.
Simon
next prev parent reply other threads:[~2021-01-24 15:31 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-24 15:06 Peng Yu via Gdb
2021-01-24 15:31 ` Simon Marchi via Gdb [this message]
2021-01-24 15:35 ` Eli Zaretskii via Gdb
2021-01-24 16:01 ` Peng Yu via Gdb
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=fc573a88-a00b-c193-9c32-2498d8476c5c@polymtl.ca \
--to=gdb@sourceware.org \
--cc=pengyu.ut@gmail.com \
--cc=simon.marchi@polymtl.ca \
/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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox