RFC: Keep 5 yr. old hack for MIPS16 on disassembler code

Michael Snyder msnyder@redhat.com
Tue Oct 1 15:27:00 GMT 2002


Fernando Nasser wrote:
> 
> This hack was added 5+yrs ago to fix disassembler printing for MIPS16.  The
> instruction disassembler code itself is unaware of that -- the hack is only for
> the address that is printed in front of the instructions.
> 
> This horrible macro is only defined for these MIPS16 machines, it is not a
> general architecture macro (which would be transformed into a multiarch
> function), so the ifdef.
> 
> I have filled the bug  gdb/773 asking for these macros to be replaced by
> something cleaner.  But I don't know enough about mips16 to do anything about it
> and if I leave this out of the code I will break that target.  So I will have to
>   add it to the new disassembler code in disasm.c (this hack was on the old code
> on printcmd.c) -- see attached patch.
> 
> I will check it in soon (unless someone fixes 773 first).

Minor, but you could make it less unsightly if you simply
provided a default def'n of the macro:

#ifndef GDB_TARGET_MASK_DISAS_PC
#define GDB_TARGET_MASK_DISAS_PC(ADDR) ADDR
#endif


> 
> --
> Fernando Nasser
> Red Hat - Toronto                       E-Mail:  fnasser@redhat.com
> 2323 Yonge Street, Suite #300
> Toronto, Ontario   M4P 2C9
> 
>   -------------------------------------------------------------------------------
> Index: disasm.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/disasm.c,v
> retrieving revision 1.1
> diff -c -p -r1.1 disasm.c
> *** disasm.c    30 Sep 2002 15:57:25 -0000      1.1
> --- disasm.c    30 Sep 2002 20:45:49 -0000
> *************** dump_insns (struct ui_out *uiout, disass
> *** 88,94 ****
>             int how_many, struct ui_stream *stb)
>   {
>     int num_displayed = 0;
> !   CORE_ADDR pc;
> 
>     /* parts of the symbolic representation of the address */
>     int unmapped;
> --- 88,94 ----
>             int how_many, struct ui_stream *stb)
>   {
>     int num_displayed = 0;
> !   CORE_ADDR pc, pc_masked;
> 
>     /* parts of the symbolic representation of the address */
>     int unmapped;
> *************** dump_insns (struct ui_out *uiout, disass
> *** 97,103 ****
>     int offset;
>     int line;
> 
> !   for (pc = low; pc < high;)
>       {
>         QUIT;
>         if (how_many >= 0)
> --- 97,113 ----
>     int offset;
>     int line;
> 
> !
> !   /* Dump the specified range.  */
> !   pc = low;
> !
> ! #ifdef GDB_TARGET_MASK_DISAS_PC
> !   pc_masked = GDB_TARGET_MASK_DISAS_PC (pc);
> ! #else
> !   pc_masked = pc;
> ! #endif
> !
> !   for (pc_masked; pc_masked < high;)
>       {
>         QUIT;
>         if (how_many >= 0)
> *************** dump_insns (struct ui_out *uiout, disass
> *** 108,114 ****
>             num_displayed++;
>         }
>         ui_out_tuple_begin (uiout, NULL);
> !       ui_out_field_core_addr (uiout, "address", pc);
> 
>         if (!build_address_symbolic (pc, 0, &name, &offset, &filename,
>                                    &line, &unmapped))
> --- 118,124 ----
>             num_displayed++;
>         }
>         ui_out_tuple_begin (uiout, NULL);
> !       ui_out_field_core_addr (uiout, "address", pc_masked);
> 
>         if (!build_address_symbolic (pc, 0, &name, &offset, &filename,
>                                    &line, &unmapped))
> *************** dump_insns (struct ui_out *uiout, disass
> *** 128,133 ****
> --- 138,148 ----
> 
>         ui_file_rewind (stb->stream);
>         pc += TARGET_PRINT_INSN (pc, di);
> + #ifdef GDB_TARGET_MASK_DISAS_PC
> +       pc_masked = GDB_TARGET_MASK_DISAS_PC (pc);
> + #else
> +       pc_masked = pc;
> + #endif
>         ui_out_field_stream (uiout, "inst", stb);
>         ui_file_rewind (stb->stream);
>         ui_out_tuple_end (uiout);



More information about the Gdb-patches mailing list