From 43564574f1de367f537a37bf6ec83bb4c29627c6 Mon Sep 17 00:00:00 2001 From: Walfred Tedeschi Date: Tue, 2 Feb 2016 11:46:28 +0100 Subject: [PATCH] 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. --- gdb/ChangeLog | 7 +++++++ gdb/linux-tdep.c | 16 +++++++++++++--- gdb/linux-tdep.h | 12 ++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6346ad4d32..89526e5e8a8 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 29f5f3c003e..375730611dd 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 328c7f09b04..b2680f83f9c 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 *, -- 2.30.2