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> 2015-02-10 Pedro Alves <palves@redhat.com>
* infrun.c (displaced_step_fixup): Switch to the event thread * 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 combination. gcc-4.5.x -gdwarf-4 binaries have DW_AT_accessibility
interpreted incorrectly by GDB now - GCC PR debug/48229. */ 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_gxx_lt_4_6 = major < 4 || (major == 4 && minor < 6);
cu->producer_is_gcc_lt_4_3 = major < 4 || (major == 4 && minor < 3); 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) producer_is_gcc_ge_4 (const char *producer)
{ {
int major, minor; int major, minor;
major = producer_is_gcc (producer, &minor);
if (! producer_is_gcc (producer, &major, &minor))
return -1;
if (major < 4) if (major < 4)
return -1; return -1;
if (major > 4) if (major > 4)
@ -3267,17 +3269,24 @@ producer_is_gcc_ge_4 (const char *producer)
return minor; return minor;
} }
/* Returns the major version number if the given PRODUCER string is GCC and /* Returns true if the given PRODUCER string is GCC and sets the MAJOR
sets the MINOR version. Returns -1 if the given PRODUCER is NULL or it and MINOR versions when not NULL. Returns false if the given PRODUCER
isn't GCC. */ is NULL or it isn't GCC. */
int
producer_is_gcc (const char *producer, int *minor) bool
producer_is_gcc (const char *producer, int *major, int *minor)
{ {
const char *cs; const char *cs;
int major;
if (producer != NULL && strncmp (producer, "GNU ", strlen ("GNU ")) == 0) 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". /* Skip any identifier after "GNU " - such as "C11" "C++" or "Java".
A full producer string might look like: A full producer string might look like:
"GNU C 4.7.2" "GNU C 4.7.2"
@ -3289,7 +3298,7 @@ producer_is_gcc (const char *producer, int *minor)
cs++; cs++;
if (*cs && isspace (*cs)) if (*cs && isspace (*cs))
cs++; cs++;
if (sscanf (cs, "%d.%d", &major, minor) == 2) if (sscanf (cs, "%d.%d", major, minor) == 2)
return major; return major;
} }

View File

@ -21,6 +21,8 @@
#ifndef UTILS_H #ifndef UTILS_H
#define UTILS_H #define UTILS_H
#include <stdbool.h>
#include "exceptions.h" #include "exceptions.h"
extern void initialize_utils (void); 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 #endif
extern int producer_is_gcc_ge_4 (const char *producer); 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); extern int myread (int, char *, int);