From: Walfred Tedeschi Date: Tue, 2 Feb 2016 10:46:28 +0000 (+0100) Subject: Preparation for new siginfo on Linux X-Git-Tag: gdb-7.11-release~101 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=43564574f1de367f537a37bf6ec83bb4c29627c6;p=platform%2Fupstream%2Fbinutils.git Preparation for new siginfo on Linux First add new structure and function to allow architecture customization for the siginfo structure. 2016-01-15 Walfred Tedeschi gdb/ChangeLog: * linux-tdep.h (linux_siginfo_extra_field_values): New enum values. (linux_siginfo_extra_fields): New enum type. * linux-tdep.c (linux_get_siginfo_type_with_fields): New function. (linux_get_siginfo_type): Use new function. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6346ad..89526e5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2016-02-02 Walfred Tedeschi + * linux-tdep.h (linux_siginfo_extra_field_values): New enum values. + (linux_siginfo_extra_fields): New enum type. + * linux-tdep.c (linux_get_siginfo_type_with_fields): New function. + (linux_get_siginfo_type): Use new function. + +2016-02-02 Walfred Tedeschi + * nat/amd64-linux-siginfo.c: New file. * nat/amd64-linux-siginfo.h: New file. * Makefile.in (HFILES_NO_SRCDIR): Add nat/amd64-linux-siginfo.h. diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 29f5f3c..3757306 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -243,11 +243,12 @@ get_linux_inferior_data (void) return info; } -/* This function is suitable for architectures that don't - extend/override the standard siginfo structure. */ +/* This function is suitable for architectures that + extend/override the standard siginfo in a specific way. */ static struct type * -linux_get_siginfo_type (struct gdbarch *gdbarch) +linux_get_siginfo_type_with_fields (struct gdbarch *gdbarch, + linux_siginfo_extra_fields extra_fields) { struct linux_gdbarch_data *linux_gdbarch_data; struct type *int_type, *uint_type, *long_type, *void_ptr_type; @@ -364,6 +365,15 @@ linux_get_siginfo_type (struct gdbarch *gdbarch) return siginfo_type; } +/* This function is suitable for architectures that don't + extend/override the standard siginfo structure. */ + +static struct type * +linux_get_siginfo_type (struct gdbarch *gdbarch) +{ + return linux_get_siginfo_type_with_fields (gdbarch, 0); +} + /* Return true if the target is running on uClinux instead of normal Linux kernel. */ diff --git a/gdb/linux-tdep.h b/gdb/linux-tdep.h index 328c7f0..b2680f8 100644 --- a/gdb/linux-tdep.h +++ b/gdb/linux-tdep.h @@ -24,6 +24,18 @@ struct regcache; +/* Enum used to define the extra fields of the siginfo type used by an + architecture. */ +enum linux_siginfo_extra_field_values +{ + /* Add bound fields into the segmentation fault field. */ + LINUX_SIGINFO_FIELD_ADDR_BND = 1 +}; + +/* Defines a type for the values defined in linux_siginfo_extra_field_values. */ +DEF_ENUM_FLAGS_TYPE (enum linux_siginfo_extra_field_values, + linux_siginfo_extra_fields); + typedef char *(*linux_collect_thread_registers_ftype) (const struct regcache *, ptid_t, bfd *, char *, int *,