Why does `disassemble` behave differently on Linux and Mac?

Simon Marchi simon.marchi@polymtl.ca
Sun Jan 24 15:31:28 GMT 2021



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


More information about the Gdb mailing list