Change producer_is_gcc function return type to bool.

gdb/ChangeLog:

        * utils.h (producer_is_gcc): Change return type to bool. Add major
        argument.
        * utils.c (producer_is_gcc): Likewise.
        (producer_is_gcc_ge_4): Adjust producer_is_gcc call.
        * dwarf2read.c (check_producer): Likewise.
This commit is contained in:
Mark Wielaard 2015-02-04 18:14:33 +01:00
parent 01b088bc51
commit b1ffba5a7f
4 changed files with 29 additions and 10 deletions

View File

@ -1,3 +1,11 @@
2015-02-04 Mark Wielaard <mjw@redhat.com>
* utils.h (producer_is_gcc): Change return type to bool. Add major
argument.
* utils.c (producer_is_gcc): Likewise.
(producer_is_gcc_ge_4): Adjust producer_is_gcc call.
* dwarf2read.c (check_producer): Likewise.
2015-02-10 Pedro Alves <palves@redhat.com>
* infrun.c (displaced_step_fixup): Switch to the event thread

View File

@ -12293,7 +12293,7 @@ check_producer (struct dwarf2_cu *cu)
combination. gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility
interpreted incorrectly by GDB now - GCC PR debug/48229. */
}
else if ((major = producer_is_gcc (cu->producer, &minor)) > 0)
else if (producer_is_gcc (cu->producer, &major, &minor))
{
cu->producer_is_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3);

View File

@ -3259,7 +3259,9 @@ int
producer_is_gcc_ge_4 (const char *producer)
{
int major, minor;
major = producer_is_gcc (producer, &minor);
if (! producer_is_gcc (producer, &major, &minor))
return -1;
if (major < 4)
return -1;
if (major > 4)
@ -3267,17 +3269,24 @@ producer_is_gcc_ge_4 (const char *producer)
return minor;
}
/* Returns the major version number if the given PRODUCER string is GCC and
sets the MINOR version. Returns -1 if the given PRODUCER is NULL or it
isn't GCC. */
int
producer_is_gcc (const char *producer, int *minor)
/* Returns true if the given PRODUCER string is GCC and sets the MAJOR
and MINOR versions when not NULL. Returns false if the given PRODUCER
is NULL or it isn't GCC. */
bool
producer_is_gcc (const char *producer, int *major, int *minor)
{
const char *cs;
int major;
if (producer != NULL && strncmp (producer, "GNU ", strlen ("GNU ")) == 0)
{
int maj, min;
if (major == NULL)
major = &maj;
if (minor == NULL)
minor = &min;
/* Skip any identifier after "GNU " - such as "C11" "C++" or "Java".
A full producer string might look like:
"GNU C 4.7.2"
@ -3289,7 +3298,7 @@ producer_is_gcc (const char *producer, int *minor)
cs++;
if (*cs && isspace (*cs))
cs++;
if (sscanf (cs, "%d.%d", &major, minor) == 2)
if (sscanf (cs, "%d.%d", major, minor) == 2)
return major;
}

View File

@ -21,6 +21,8 @@
#ifndef UTILS_H
#define UTILS_H
#include <stdbool.h>
#include "exceptions.h"
extern void initialize_utils (void);
@ -302,7 +304,7 @@ extern pid_t wait_to_die_with_timeout (pid_t pid, int *status, int timeout);
#endif
extern int producer_is_gcc_ge_4 (const char *producer);
extern int producer_is_gcc (const char *producer, int *minor);
extern bool producer_is_gcc (const char *producer, int *major, int *minor);
extern int myread (int, char *, int);