于 2013/1/18 21:50, Joel Brobecker 写道: >> tilegx has 64 registers, to show them in row will be not very >> convinent to explore, >> so we improve this by showing them in columns. >> >> (gdb) info registers >> r0 0x0000000000000001 r19 0x0000000000000000 r38 0x0000000000000040 >> r1 0x000001ffffc7f458 r20 0x000001ffffc7f278 r39 >> 0x0000000000000000 >> r2 0x000001ffffc7f468 r21 0x000001ffffc7f298 r40 >> 0x000000000015b3e8 >> r3 0x0000000000010720 r22 0x000001ffffc7f280 r41 >> 0x000000000015882c > Forgive me, but the above doesn't look easier to read... Was it > because of wrap-around by your mailer or your MTA? yes, I think it's caused by my mailer. please see attachment for the comparision > >> gdb/ChangeLog: >> >> * tilegx-tdep.c (tilegx_print_registers_info): New function. >> show registers in columns. > I am not a big specialist of formatting this type of information. > To me the first 2 obvious remarks is that: > > - The number of columns should be dynamic, depending on the width > of the terminal; and if the width is unset, then default to > 80 characters. We may also have to make a decision if the width > is unlimited. > > - This will need confirmation from the other Global Maintainers > but I think it would be better if you used the ui-out routines > to print the registers. > > One additional remark is that, with 64 registers, it might be good > enough to print them in two columns always, and not deal with > complexity of the terminal width. It even looks like you might be > able to fit in 3 columns within 80 chars, if you prefer... thanks for your good suggestion. yes, 3 columns still be within 80 chars. and by display in 3 columns, it is with larger probability that the user do not need to scroll down and up his mouse to view the results. by 2 columns, the list is still a bit long, and the information is not that centered. So, is this patch OK? > > >> please review. >> >> --- >> Regards, >> Jiong >> Tilera Corporation. >> >> --- >> gdb/tilegx-tdep.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 files changed, 63 insertions(+) >> >> diff --git a/gdb/tilegx-tdep.c b/gdb/tilegx-tdep.c >> index 7f36bed..c19bdf9 100644 >> --- a/gdb/tilegx-tdep.c >> +++ b/gdb/tilegx-tdep.c >> @@ -940,6 +940,66 @@ tilegx_cannot_reference_register (struct gdbarch *gdbarch, int regno) >> return 1; >> } >> >> + >> +/* Tilera private register printer. */ >> +#define MAX_COLUMNS 3 >> +static void >> +tilegx_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, >> + struct frame_info *frame, >> + int regnum, int print_all) >> +{ >> + int i; >> + int j; >> + int k; >> + gdb_byte buffer[MAX_REGISTER_SIZE]; >> + >> + if (regnum != -1) >> + { >> + default_print_registers_info (gdbarch, file, frame, regnum, print_all); >> + return; >> + } >> + >> + for (i = 0; i < TILEGX_NUM_EASY_REGS / MAX_COLUMNS + 1; ++i) >> + { >> + for (j = i; >> + j < TILEGX_NUM_EASY_REGS + 1; >> + j += TILEGX_NUM_EASY_REGS / MAX_COLUMNS + 1) >> + { >> + /* Some registers are never available. Skip them and print PC. */ >> + if (j > TILEGX_LR_REGNUM) >> + j = TILEGX_PC_REGNUM; >> + >> + if (j > i) >> + fprintf_filtered (file, " "); >> + >> + fputs_filtered (gdbarch_register_name (gdbarch, j), file); >> + print_spaces_filtered (5 - strlen (gdbarch_register_name >> + (gdbarch, j)), file); >> + >> + /* Get the data in raw format. */ >> + if (! deprecated_frame_register_read (frame, j, buffer)) >> + { >> + fprintf_filtered (file, " *** no value *** "); >> + } >> + else >> + { >> + fprintf_filtered (file, "0x"); >> + for (k = 0; k < tilegx_reg_size; k++) >> + { >> + int idx; >> + if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) >> + idx = k; >> + else >> + idx = tilegx_reg_size - 1 - k; >> + fprintf_filtered (file, "%02x", (unsigned char) buffer[idx]); >> + } >> + } >> + } >> + >> + fprintf_filtered (file, "\n"); >> + } >> +} >> + >> static struct gdbarch * >> tilegx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) >> { >> @@ -1000,6 +1060,9 @@ tilegx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) >> /* Stack grows down. */ >> set_gdbarch_inner_than (gdbarch, core_addr_lessthan); >> >> + /* Tilera private register printer */ >> + set_gdbarch_print_registers_info (gdbarch, tilegx_print_registers_info); >> + >> /* Frame Info. */ >> set_gdbarch_unwind_sp (gdbarch, tilegx_unwind_sp); >> set_gdbarch_unwind_pc (gdbarch, tilegx_unwind_pc); >> -- >> 1.7.10.3 >> >> >