This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tdep/8282] MIPS port needs `set disassembler-options'


https://sourceware.org/bugzilla/show_bug.cgi?id=8282

--- Comment #4 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Maciej W. Rozycki <macro@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=471b9d15076fffb738f1bc6fcea41d0dcb59c947

commit 471b9d15076fffb738f1bc6fcea41d0dcb59c947
Author: Maciej W. Rozycki <macro@mips.com>
Date:   Mon Jul 2 23:57:21 2018 +0100

    GDB PR tdep/8282: MIPS: Wire in `set disassembler-options'

    Implement MIPS target support for passing options to the disassembler,
    complementing commit 65b48a81404c ("GDB: Add support for the new
    set/show disassembler-options commands.").

    This includes options that expect an argument, so adjust the generic
    code and data structures used so as to handle such options.  So as to
    give backends syntax flexibility no specific delimiter has been defined
    to separate options from their respective arguments, so it has to be
    included as the last character of the option name.  Completion code
    however has not been adjusted and consequently option arguments cannot
    be completed at this time.

    Also the MIPS target has non-empty defaults for the options, so that ABI
    names for the general-purpose registers respect our `set mips abi ...'
    setting rather than always being determined from the ELF headers of the
    binary file selected.  Handle these defaults as implicit options, never
    shown to the user and always prepended to the user-specified options, so
    that the latters can override the defaults.

    The resulting output for the MIPS target is as follows:

    (gdb) show disassembler-options
    The current disassembler options are ''

    The following disassembler options are supported for use with the
    'set disassembler-options <option>[,<option>...]' command:

      no-aliases      Use canonical instruction forms.

      msa             Recognize MSA instructions.

      virt            Recognize the virtualization ASE instructions.

      xpa             Recognize the eXtended Physical Address (XPA) ASE
                      instructions.

      ginv            Recognize the Global INValidate (GINV) ASE instructions.

      gpr-names=ABI   Print GPR names according to specified ABI.
                      Default: based on binary being disassembled.

      fpr-names=ABI   Print FPR names according to specified ABI.
                      Default: numeric.

      cp0-names=ARCH  Print CP0 register names according to specified
architecture.
                      Default: based on binary being disassembled.

      hwr-names=ARCH  Print HWR names according to specified architecture.
                      Default: based on binary being disassembled.

      reg-names=ABI   Print GPR and FPR names according to specified ABI.

      reg-names=ARCH  Print CP0 register and HWR names according to specified
                      architecture.

      For the options above, the following values are supported for "ABI":
        numeric 32 n32 64

      For the options above, the following values are supported for "ARCH":
        numeric r3000 r3900 r4000 r4010 vr4100 vr4111 vr4120 r4300 r4400 r4600
        r4650 r5000 vr5400 vr5500 r5900 r6000 rm7000 rm9000 r8000 r10000 r12000
        r14000 r16000 mips5 mips32 mips32r2 mips32r3 mips32r5 mips32r6 mips64
        mips64r2 mips64r3 mips64r5 mips64r6 interaptiv-mr2 sb1 loongson2e
        loongson2f loongson3a octeon octeon+ octeon2 octeon3 xlr xlp
    (gdb)

    which corresponds to what `objdump --help' used to print for the MIPS
    target, with minor formatting changes, most notably option argument
    lists being wrapped, but also the amount of white space separating
    options from the respective descriptions.  The relevant part the new
    code is now also used by `objdump --help', which means these formatting
    changes apply to both outputs, except for argument list wrapping, which
    is GDB-specific.

    This also adds a separating new line between the heading and option
    lists where descriptions are provided, hence:

    (gdb) set architecture s390:31-bit
    (gdb) show disassembler-options
    The current disassembler options are ''

    The following disassembler options are supported for use with the
    'set disassembler-options <option>[,<option>...]' command:

      esa         Disassemble in ESA architecture mode
      zarch       Disassemble in z/Architecture mode
      insnlength  Print unknown instructions according to length from first two
bits
    (gdb)

    but:

    (gdb) set architecture powerpc:common
    (gdb) show disassembler-options
    The current disassembler options are ''

    The following disassembler options are supported for use with the
    'set disassembler-options <option>[,<option>...]' command:
      403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455,
750cl,
      821, 850, 860, a2, altivec, any, booke, booke32, cell, com, e200z4, e300,
      e500, e500mc, e500mc64, e5500, e6500, e500x2, efs, efs2, power4, power5,
      power6, power7, power8, power9, ppc, ppc32, 32, ppc64, 64, ppc64bridge,
      ppcps, pwr, pwr2, pwr4, pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwrx, raw,
spe,
      spe2, titan, vle, vsx
    (gdb)

    Existing affected target backends have been adjusted accordingly.

    This has been verified manually with:

    (gdb) set architecture arm
    (gdb) set architecture powerpc:common
    (gdb) set architecture s390:31-bit

    to cause no issues with the `show disassembler-options' and `set
    disassembler-options' commands.  A test case for the MIPS target has
    also been provided, covering the default settings with ABI overrides as
    well as disassembler option overrides.

    2018-07-02  Maciej W. Rozycki  <macro@mips.com>
                Simon Marchi  <simon.marchi@polymtl.ca>

        include/
        PR tdep/8282
        * dis-asm.h (disasm_option_arg_t): New typedef.
        (disasm_options_and_args_t): Likewise.
        (disasm_options_t): Add `arg' member, document members.
        (disassembler_options_mips): New prototype.
        (disassembler_options_arm, disassembler_options_powerpc)
        (disassembler_options_s390): Update prototypes.

        opcodes/
        PR tdep/8282
        * mips-dis.c (mips_option_arg_t): New enumeration.
        (mips_options): New variable.
        (disassembler_options_mips): New function.
        (print_mips_disassembler_options): Reimplement in terms of
        `disassembler_options_mips'.
        * arm-dis.c (disassembler_options_arm): Adapt to using the
        `disasm_options_and_args_t' structure.
        * ppc-dis.c (disassembler_options_powerpc): Likewise.
        * s390-dis.c (disassembler_options_s390): Likewise.

        gdb/
        PR tdep/8282
        * disasm.h (gdb_disassembler): Add
        `m_disassembler_options_holder'. member
        * disasm.c (get_all_disassembler_options): New function.
        (gdb_disassembler::gdb_disassembler): Use it.
        (gdb_buffered_insn_length_init_dis): Likewise.
        (gdb_buffered_insn_length): Adjust accordingly.
        (set_disassembler_options): Handle options with arguments.
        (show_disassembler_options_sfunc): Likewise.  Add a leading new
        line if showing options with descriptions.
        (disassembler_options_completer): Adapt to using the
        `disasm_options_and_args_t' structure.
        * mips-tdep.c (mips_disassembler_options): New variable.
        (mips_disassembler_options_o32): Likewise.
        (mips_disassembler_options_n32): Likewise.
        (mips_disassembler_options_n64): Likewise.
        (gdb_print_insn_mips): Don't set `disassembler_options'.
        (gdb_print_insn_mips_n32, gdb_print_insn_mips_n64): Remove
        functions.
        (mips_gdbarch_init): Always set `gdbarch_print_insn' to
        `gdb_print_insn_mips'.  Set `gdbarch_disassembler_options',
        `gdbarch_disassembler_options_implicit' and
        `gdbarch_valid_disassembler_options'.
        * arm-tdep.c (_initialize_arm_tdep): Adapt to using the
        `disasm_options_and_args_t' structure.
        * gdbarch.sh (disassembler_options_implicit): New `gdbarch'
        method.
        (valid_disassembler_options): Switch from `disasm_options_t' to
        the `disasm_options_and_args_t' structure.
        * NEWS: Document `set disassembler-options' support for the MIPS
        target.
        * gdbarch.h: Regenerate.
        * gdbarch.c: Regenerate.

        gdb/doc/
        PR tdep/8282
        * gdb.texinfo (Source and Machine Code): Document `set
        disassembler-options' support for the MIPS target.

        gdb/testsuite/
        PR tdep/8282
        * gdb.arch/mips-disassembler-options.exp: New test.
        * gdb.arch/mips-disassembler-options.s: New test source.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]