In the function default_print_registers_info in the file infcmd.c, there is the code /* If the register name is empty, it is undefined for this processor, so don't display anything. */ if (gdbarch_register_name (gdbarch, i) == NULL || *(gdbarch_register_name (gdbarch, i)) == '\0') continue; fputs_filtered (gdbarch_register_name (gdbarch, i), file); print_spaces_filtered (15 - strlen (gdbarch_register_name (gdbarch, i)), file); i.e. the function gdbarch_register_name may be called up to four times for each register; it would be better to replace this code with { const char* name = gdbarch_register_name (gdbarch, i); /* If the register name is empty, it is undefined for this processor, so don't display anything. */ if (name == NULL || *name == '\0') continue; fputs_filtered (name, file); print_spaces_filtered (15 - strlen (name), file); }
I just had a look at the implementation of gdbarch_register_name for some architectures, and the function is quite efficient, normaly just a few compares and an array access. Perhaps it's a bit more complex for arches which use a target description XML, I didn't look much into it. But even then it doesn't seem to me it would be a problem. Are you having actual performance issues in GDB because of this? If not, I'd like to just close this. Not that it would be difficult to apply the code snippet you mention, but I wouldn't like to start a trend of having bugzillas opened for cosmetic issues in the source code...
No, no performance issue seen, the code just struck me as inelegant: computing the same quantity four times instead of once.