[PATCH, RFC] Add support for choosing disassembler cpu in GDB for POWER.
Peter Bergner
bergner@vnet.ibm.com
Fri Oct 7 21:01:00 GMT 2016
On 10/7/16 2:21 PM, Ulrich Weigand wrote:
>> gdb/
>> * gdbarch.sh (target_disassemble_init): New.
>> * gdbarch.c: Regenerate.
>> * gdbarch.h: Likewise.
>> * disasm.c (gdb_disassemble_info): Call gdbarch_target_disassemble_init.
>> * rs6000-tdep.c: Include "opcode/ppc.h".
>> (gdb_disassembler_cpu): New static declaration.
>> (prospective_cpu): Likewise.
>> (gdb_rs6000_init_disassembly): New function.
>> (set_disassembler_cpu): Likewise.
>> (show_disassembler_cpu): Likewise.
>> (rs6000_gdbarch_init): Setup callback for gdb_rs6000_init_disassembly.
>> (_initialize_rs6000_tdep): Initialize gdb_disassembler_cpu and
>> target_init_disassembly. Setup callbacks for set_disassembler_cpu()
>> and show_disassembler_cpu().
>
> I like this a lot better than the original patch :-)
Heh, well, I'm not a gdb developer, so I don't know the gdb code that
well. I just hacked in stuff that worked with bfd. Now you guys
are forcing me to learn the code and to work hard! :-)
I agree it's looking better too.
> Still some comments:
>
>> @@ -785,6 +785,8 @@ gdb_disassemble_info (struct gdbarch *gdbarch, struct ui_file *file)
>> di.endian = gdbarch_byte_order (gdbarch);
>> di.endian_code = gdbarch_byte_order_for_code (gdbarch);
>> di.application_data = gdbarch;
>> + if (gdbarch_target_disassemble_init_p (gdbarch))
>> + gdbarch_target_disassemble_init (gdbarch, &di);
>> disassemble_init_for_target (&di);
>> return di;
>
> There's a second use of disassemble_init_for_target, which probably needs
> the same treatment. In fact, maybe the nicest way would be to call the
> callback "gdbarch_disassemble_init_for_target", with a default of simply
> disassemble_init_for_target, but which targets can override to do extra
> stuff before (or after) calling disassemble_init_for_target in there.
> GDB common code would then just call gdbarch_disassemble_init_for_target
> everywhere it currently calls disassemble_init_for_target.
Sure, I can give that a try.
>> + gdb_disassembler_cpu = strdup (PPC_DEFAULT_CPU",any");
>
> Why do we have to know about this here in GDB? Can't the GDB default just
> be the empty (or NULL) string, and then opcodes does the defaulting
> (as it does today)?
I thought it would be useful if the user does a "show powerpc disassembler"
without ever doing a "set powerpc disassembler <cpu>" to show them what
default cpu they're actually using. If you want this hunk removed, I
can spit out 'default' in the case gdb_disassembler_cpu is NULL.
Peter
More information about the Binutils
mailing list