diff options
author | Walfred Tedeschi <walfred.tedeschi@intel.com> | 2016-02-02 11:50:17 +0100 |
---|---|---|
committer | Walfred Tedeschi <walfred.tedeschi@intel.com> | 2016-02-02 11:50:17 +0100 |
commit | 190b495d472576db66a8727d5872fcca3d5519c6 (patch) | |
tree | 2cfb5e666e9fe74b49002b0263803c569c0105b3 | |
parent | 43564574f1de367f537a37bf6ec83bb4c29627c6 (diff) | |
download | gdb-190b495d472576db66a8727d5872fcca3d5519c6.zip gdb-190b495d472576db66a8727d5872fcca3d5519c6.tar.gz gdb-190b495d472576db66a8727d5872fcca3d5519c6.tar.bz2 |
Use linux_get_siginfo_type_with_fields for x86
Use linux_get_siginfo_type_with_fields for adding bound fields on
segmentation fault for i386/amd64 siginfo.
2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com>
gdb/ChangeLog:
* linux-tdep.h (linux_get_siginfo_type_with_fields): Make extern.
* linux-tdep.c (linux_get_siginfo_type_with_fields): Make extern.
* i386-linux-tdep.h (x86_linux_get_siginfo_type): New
function.
* amd64-linux-tdep.c (amd64_linux_init_abi_common): Add
x86_linux_get_siginfo_type for the amd64 abi.
* i386-linux-tdep.c (x86_linux_get_siginfo_type): New
function.
(i386_linux_init_abi): Add new function at the i386 ABI
initialization.
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/amd64-linux-tdep.c | 2 | ||||
-rw-r--r-- | gdb/i386-linux-tdep.c | 8 | ||||
-rw-r--r-- | gdb/i386-linux-tdep.h | 3 | ||||
-rw-r--r-- | gdb/linux-tdep.c | 5 | ||||
-rw-r--r-- | gdb/linux-tdep.h | 5 |
6 files changed, 34 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 89526e5..25f7f16 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,19 @@ 2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com> + * linux-tdep.h (linux_get_siginfo_type_with_fields): Make extern. + * linux-tdep.c (linux_get_siginfo_type_with_fields): Make extern. + * i386-linux-tdep.h (x86_linux_get_siginfo_type): New + function. + * amd64-linux-tdep.c (amd64_linux_init_abi_common): Add + x86_linux_get_siginfo_type for the amd64 abi. + * i386-linux-tdep.c (x86_linux_get_siginfo_type): New + function. + (i386_linux_init_abi): Add new function at the i386 ABI + initialization. + + +2016-02-02 Walfred Tedeschi <walfred.tedeschi@intel.com> + * 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. diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index b948ea7..21bcd99 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -1838,6 +1838,8 @@ amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_process_record (gdbarch, i386_process_record); set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal); + + set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type); } static void diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c index 1e491e7..af39e78 100644 --- a/gdb/i386-linux-tdep.c +++ b/gdb/i386-linux-tdep.c @@ -656,6 +656,12 @@ i386_linux_supply_xstateregset (const struct regset *regset, i387_supply_xsave (regcache, regnum, xstateregs); } +struct type * +x86_linux_get_siginfo_type (struct gdbarch *gdbarch) +{ + return linux_get_siginfo_type_with_fields (gdbarch, LINUX_SIGINFO_FIELD_ADDR_BND); +} + /* Similar to i386_collect_fpregset, but use XSAVE extended state. */ static void @@ -994,6 +1000,8 @@ i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_xml_syscall_file_name (gdbarch, XML_SYSCALL_FILENAME_I386); set_gdbarch_get_syscall_number (gdbarch, i386_linux_get_syscall_number); + + set_gdbarch_get_siginfo_type (gdbarch, x86_linux_get_siginfo_type); } /* Provide a prototype to silence -Wmissing-prototypes. */ diff --git a/gdb/i386-linux-tdep.h b/gdb/i386-linux-tdep.h index ee6abff..ecc9e31 100644 --- a/gdb/i386-linux-tdep.h +++ b/gdb/i386-linux-tdep.h @@ -72,4 +72,7 @@ extern struct target_desc *tdesc_i386_avx512_linux; extern int i386_linux_gregset_reg_offset[]; +/* Return x86 siginfo type. */ +extern struct type *x86_linux_get_siginfo_type (struct gdbarch *gdbarch); + #endif /* i386-linux-tdep.h */ diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 3757306..cfbec40 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -243,10 +243,9 @@ get_linux_inferior_data (void) return info; } -/* This function is suitable for architectures that - extend/override the standard siginfo in a specific way. */ +/* See linux-tdep.h. */ -static struct type * +struct type * linux_get_siginfo_type_with_fields (struct gdbarch *gdbarch, linux_siginfo_extra_fields extra_fields) { diff --git a/gdb/linux-tdep.h b/gdb/linux-tdep.h index b2680f8..2da7de4 100644 --- a/gdb/linux-tdep.h +++ b/gdb/linux-tdep.h @@ -36,6 +36,11 @@ enum linux_siginfo_extra_field_values DEF_ENUM_FLAGS_TYPE (enum linux_siginfo_extra_field_values, linux_siginfo_extra_fields); +/* This function is suitable for architectures that + extend/override the standard siginfo in a specific way. */ +struct type *linux_get_siginfo_type_with_fields (struct gdbarch *gdbarch, + linux_siginfo_extra_fields); + typedef char *(*linux_collect_thread_registers_ftype) (const struct regcache *, ptid_t, bfd *, char *, int *, |