2001-12-21 Michael Snyder <msnyder@redhat.com>

* maint.c (match_substring): New function.  Tokenizer for
        'maintenance info sections' command arguments.
        (match_bfd_flag): Use match_substring.
        (print_bfd_section_info): Use match_substring.
        (print_objfile_section_info): Use match_substring.
        (maintenance_info_sections): Use match_substring.
This commit is contained in:
Michael Snyder 2001-12-21 17:30:02 +00:00
parent 1b074332f2
commit a532ca6282
2 changed files with 54 additions and 15 deletions

View File

@ -1,3 +1,12 @@
2001-12-21 Michael Snyder <msnyder@redhat.com>
* maint.c (match_substring): New function. Tokenizer for
maint info sections command arguments.
(match_bfd_flag): Use match_substring.
(print_bfd_section_info): Use match_substring.
(print_objfile_section_info): Use match_substring.
(maintenance_info_sections): Use match_substring.
2001-12-21 Orjan Friberg <orjanf@axis.com>
* configure.tgt: Delete CRIS from multi-arch targets.

View File

@ -186,44 +186,74 @@ maintenance_info_command (char *arg, int from_tty)
help_list (maintenanceinfolist, "maintenance info ", -1, gdb_stdout);
}
/* Mini tokenizing lexer for 'maint info sections' command. */
static int
match_substring (char *string, char *substr)
{
int substr_len = strlen(substr);
char *tok;
while ((tok = strstr (string, substr)) != NULL)
{
/* Got a partial match. Is it a whole word? */
if (tok == string ||
tok[-1] == ' ' ||
tok[-1] == '\t')
{
/* Token is delimited at the front... */
if (tok[substr_len] == ' ' ||
tok[substr_len] == '\t' ||
tok[substr_len] == '\0')
{
/* Token is delimited at the rear. Got a whole-word match. */
return 1;
}
}
/* Token didn't match as a whole word. Advance and try again. */
string = tok + 1;
}
return 0;
}
static int
match_bfd_flags (char *string, flagword flags)
{
if (flags & SEC_ALLOC)
if (strstr (string, "ALLOC"))
if (match_substring (string, "ALLOC"))
return 1;
if (flags & SEC_LOAD)
if (strstr (string, "LOAD"))
if (match_substring (string, "LOAD"))
return 1;
if (flags & SEC_RELOC)
if (strstr (string, "RELOC"))
if (match_substring (string, "RELOC"))
return 1;
if (flags & SEC_READONLY)
if (strstr (string, "READONLY"))
if (match_substring (string, "READONLY"))
return 1;
if (flags & SEC_CODE)
if (strstr (string, "CODE"))
if (match_substring (string, "CODE"))
return 1;
if (flags & SEC_DATA)
if (strstr (string, "DATA"))
if (match_substring (string, "DATA"))
return 1;
if (flags & SEC_ROM)
if (strstr (string, "ROM"))
if (match_substring (string, "ROM"))
return 1;
if (flags & SEC_CONSTRUCTOR)
if (strstr (string, "CONSTRUCTOR"))
if (match_substring (string, "CONSTRUCTOR"))
return 1;
if (flags & SEC_HAS_CONTENTS)
if (strstr (string, "HAS_CONTENTS"))
if (match_substring (string, "HAS_CONTENTS"))
return 1;
if (flags & SEC_NEVER_LOAD)
if (strstr (string, "NEVER_LOAD"))
if (match_substring (string, "NEVER_LOAD"))
return 1;
if (flags & SEC_COFF_SHARED_LIBRARY)
if (strstr (string, "COFF_SHARED_LIBRARY"))
if (match_substring (string, "COFF_SHARED_LIBRARY"))
return 1;
if (flags & SEC_IS_COMMON)
if (strstr (string, "IS_COMMON"))
if (match_substring (string, "IS_COMMON"))
return 1;
return 0;
@ -282,7 +312,7 @@ print_bfd_section_info (bfd *abfd,
const char *name = bfd_section_name (abfd, asect);
if (arg == NULL || *((char *) arg) == '\0' ||
strstr ((char *) arg, name) ||
match_substring ((char *) arg, name) ||
match_bfd_flags ((char *) arg, flags))
{
CORE_ADDR addr, endaddr;
@ -302,7 +332,7 @@ print_objfile_section_info (bfd *abfd,
const char *name = bfd_section_name (abfd, asect->the_bfd_section);
if (string == NULL || *string == '\0' ||
strstr (string, name) ||
match_substring (string, name) ||
match_bfd_flags (string, flags))
{
print_section_info (name, flags, asect->addr, asect->endaddr,
@ -320,7 +350,7 @@ maintenance_info_sections (char *arg, int from_tty)
printf_filtered (" `%s', ", bfd_get_filename (exec_bfd));
wrap_here (" ");
printf_filtered ("file type %s.\n", bfd_get_target (exec_bfd));
if (arg && *arg && strstr (arg, "ALLOBJ"))
if (arg && *arg && match_substring (arg, "ALLOBJ"))
{
struct objfile *ofile;
struct obj_section *osect;