Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] Support for the $_siginfo convenience var in sparc64
@ 2013-10-22 13:09 Jose E. Marchesi
  2013-10-22 13:21 ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Jose E. Marchesi @ 2013-10-22 13:09 UTC (permalink / raw)
  To: gdb-patches


Hi.

The following patch adds support for the $_siginfo convenience variable
to sparc64-*-linux-gnu targets.

It also makes the tests gdb.base/siginfo-thread.exp and
gdb.base/siginfo-obj.exp to run (and pass) on these targets.

Tested on sparc64-unknown-linux-gnu.  No visible regressions after
running the testsuite.

2013-10-22  Jose E. Marchesi  <jose.marchesi@oracle.com>
 
	* sparc64-linux-tdep.c (sparc64_linux_get_siginfo_type): New function.
        (sparc64_linux_init_abi): Hook sparc_linux_get_siginfo_type to provide
        gdbarch_get_siginfo_type.

2013-10-22  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* gdb.base/siginfo-obj.exp: Extended signal info is now supported
	in sparc64, so run the test in these targets.
	* gdb.base/siginfo-thread.exp: Likewise.

diff --git a/gdb/sparc64-linux-tdep.c b/gdb/sparc64-linux-tdep.c
index 3f53f6c..1c4f647 100644
--- a/gdb/sparc64-linux-tdep.c
+++ b/gdb/sparc64-linux-tdep.c
@@ -232,6 +232,121 @@ sparc64_linux_get_syscall_number (struct gdbarch *gdbarch,
   return ret;
 }
 
+/* Implementation of gdbarch_get_siginfo_type as documented in
+   gdbarch.h  */
+
+static struct type *
+sparc64_linux_get_siginfo_type (struct gdbarch *gdbarch)
+{
+  struct type *int_type, *uint_type, *long_type, *void_ptr_type;
+  struct type *uid_type, *pid_type;
+  struct type *sigval_type, *clock_type;
+  struct type *siginfo_type, *sifields_type;
+  struct type *type;
+
+  int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
+			 	0, "int");
+  uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
+				 1, "unsigned int");
+  long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
+				 0, "long");
+  void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
+
+  /* sival_t */
+  sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
+  TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
+  append_composite_type_field (sigval_type, "sival_int", int_type);
+  append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
+
+  /* __pid_t */
+  pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
+			TYPE_LENGTH (int_type), "__pid_t");
+  TYPE_TARGET_TYPE (pid_type) = int_type;
+  TYPE_TARGET_STUB (pid_type) = 1;
+
+  /* __uid_t */
+  uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
+			TYPE_LENGTH (uint_type), "__uid_t");
+  TYPE_TARGET_TYPE (uid_type) = uint_type;
+  TYPE_TARGET_STUB (uid_type) = 1;
+
+  /* __clock_t */
+  clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
+			  TYPE_LENGTH (long_type), "__clock_t");
+  TYPE_TARGET_TYPE (clock_type) = long_type;
+  TYPE_TARGET_STUB (clock_type) = 1;
+
+  /* _sifields */
+  sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
+
+  {
+    const int si_max_size = 128;
+    int si_pad_size;
+    int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
+
+    /* _pad */
+    if (gdbarch_ptr_bit (gdbarch) == 64)
+      si_pad_size = (si_max_size / size_of_int) - 4;
+    else
+      si_pad_size = (si_max_size / size_of_int) - 3;
+    append_composite_type_field (sifields_type, "_pad",
+				 init_vector_type (int_type, si_pad_size));
+  }
+
+  /* _kill */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_pid", pid_type);
+  append_composite_type_field (type, "si_uid", uid_type);
+  append_composite_type_field (sifields_type, "_kill", type);
+
+  /* _timer */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_tid", int_type);
+  append_composite_type_field (type, "si_overrun", int_type);
+  append_composite_type_field (type, "si_sigval", sigval_type);
+  append_composite_type_field (sifields_type, "_timer", type);
+
+  /* _rt */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_pid", pid_type);
+  append_composite_type_field (type, "si_uid", uid_type);
+  append_composite_type_field (type, "si_sigval", sigval_type);
+  append_composite_type_field (sifields_type, "_rt", type);
+
+  /* _sigchld */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_pid", pid_type);
+  append_composite_type_field (type, "si_uid", uid_type);
+  append_composite_type_field (type, "si_status", int_type);
+  append_composite_type_field (type, "si_utime", clock_type);
+  append_composite_type_field (type, "si_stime", clock_type);
+  append_composite_type_field (sifields_type, "_sigchld", type);
+
+  /* _sigfault */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_addr", void_ptr_type);
+  append_composite_type_field (type, "si_trapno", int_type);
+  append_composite_type_field (sifields_type, "_sigfault", type);
+
+  /* _sigpoll */
+  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  append_composite_type_field (type, "si_band", int_type);
+  append_composite_type_field (type, "si_fd", int_type);
+  append_composite_type_field (sifields_type, "_sigpoll", type);
+
+  /* struct siginfo */
+  siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
+  TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
+  append_composite_type_field (siginfo_type, "si_signo", int_type);
+  append_composite_type_field (siginfo_type, "si_errno", int_type);
+  append_composite_type_field (siginfo_type, "si_code", int_type);
+  append_composite_type_field_aligned (siginfo_type,
+				       "_sifields", sifields_type,
+				       TYPE_LENGTH (long_type));
+
+  return siginfo_type;
+}
+
 \f
 
 static void
@@ -278,6 +393,9 @@ sparc64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   set_xml_syscall_file_name (XML_SYSCALL_FILENAME_SPARC64);
   set_gdbarch_get_syscall_number (gdbarch,
                                   sparc64_linux_get_syscall_number);
+
+  set_gdbarch_get_siginfo_type (gdbarch,
+				sparc64_linux_get_siginfo_type);
 }
 \f
 
diff --git a/gdb/testsuite/gdb.base/siginfo-obj.exp b/gdb/testsuite/gdb.base/siginfo-obj.exp
index 6cee02e..5046892 100644
--- a/gdb/testsuite/gdb.base/siginfo-obj.exp
+++ b/gdb/testsuite/gdb.base/siginfo-obj.exp
@@ -28,7 +28,8 @@ if [target_info exists gdb,nosignals] {
 
 if { ! [istarget "i?86-*-linux*"]
      && ! [istarget "x86_64-*-linux*"]
-     && ! [istarget "arm*-*-linux*"] } {
+     && ! [istarget "arm*-*-linux*"]
+     && ! [istarget "sparc64-*-linux*"] } {
     verbose "Skipping siginfo-obj.exp because of lack of support."
     return
 }
diff --git a/gdb/testsuite/gdb.base/siginfo-thread.exp b/gdb/testsuite/gdb.base/siginfo-thread.exp
index a351802..541594b 100644
--- a/gdb/testsuite/gdb.base/siginfo-thread.exp
+++ b/gdb/testsuite/gdb.base/siginfo-thread.exp
@@ -23,7 +23,8 @@ if [target_info exists gdb,nosignals] {
 
 if { ! [istarget "i?86-*-linux*"]
      && ! [istarget "x86_64-*-linux*"]
-     && ! [istarget "arm*-*-linux*"] } {
+     && ! [istarget "arm*-*-linux*"]
+     && ! [istarget "sparc64-*-linux*"] } {
     verbose "Skipping siginfo-thread.exp because of lack of support."
     return
 }


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Support for the $_siginfo convenience var in sparc64
  2013-10-22 13:09 [PATCH] Support for the $_siginfo convenience var in sparc64 Jose E. Marchesi
@ 2013-10-22 13:21 ` Pedro Alves
  2013-10-22 13:36   ` Jose E. Marchesi
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2013-10-22 13:21 UTC (permalink / raw)
  To: Jose E. Marchesi; +Cc: gdb-patches

On 10/22/2013 02:11 PM, Jose E. Marchesi wrote:
> 
> Hi.
> 
> The following patch adds support for the $_siginfo convenience variable
> to sparc64-*-linux-gnu targets.

I take it from the patch that linux-tdep.c:linux_get_siginfo_type wouldn't
work for sparc64?  Why is that?  What's different?

> It also makes the tests gdb.base/siginfo-thread.exp and
> gdb.base/siginfo-obj.exp to run (and pass) on these targets.
> 
> Tested on sparc64-unknown-linux-gnu.  No visible regressions after
> running the testsuite.
> 
> 2013-10-22  Jose E. Marchesi  <jose.marchesi@oracle.com>
>  
> 	* sparc64-linux-tdep.c (sparc64_linux_get_siginfo_type): New function.
>         (sparc64_linux_init_abi): Hook sparc_linux_get_siginfo_type to provide
>         gdbarch_get_siginfo_type.



> 
> 2013-10-22  Jose E. Marchesi  <jose.marchesi@oracle.com>
> 
> 	* gdb.base/siginfo-obj.exp: Extended signal info is now supported
> 	in sparc64, so run the test in these targets.
> 	* gdb.base/siginfo-thread.exp: Likewise.
> 
> diff --git a/gdb/sparc64-linux-tdep.c b/gdb/sparc64-linux-tdep.c
> index 3f53f6c..1c4f647 100644
> --- a/gdb/sparc64-linux-tdep.c
> +++ b/gdb/sparc64-linux-tdep.c
> @@ -232,6 +232,121 @@ sparc64_linux_get_syscall_number (struct gdbarch *gdbarch,
>    return ret;
>  }
>  
> +/* Implementation of gdbarch_get_siginfo_type as documented in
> +   gdbarch.h  */
> +
> +static struct type *
> +sparc64_linux_get_siginfo_type (struct gdbarch *gdbarch)
> +{
> +  struct type *int_type, *uint_type, *long_type, *void_ptr_type;
> +  struct type *uid_type, *pid_type;
> +  struct type *sigval_type, *clock_type;
> +  struct type *siginfo_type, *sifields_type;
> +  struct type *type;
> +
> +  int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
> +			 	0, "int");
> +  uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
> +				 1, "unsigned int");
> +  long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
> +				 0, "long");
> +  void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
> +
> +  /* sival_t */
> +  sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
> +  TYPE_NAME (sigval_type) = xstrdup ("sigval_t");
> +  append_composite_type_field (sigval_type, "sival_int", int_type);
> +  append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
> +
> +  /* __pid_t */
> +  pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
> +			TYPE_LENGTH (int_type), "__pid_t");
> +  TYPE_TARGET_TYPE (pid_type) = int_type;
> +  TYPE_TARGET_STUB (pid_type) = 1;
> +
> +  /* __uid_t */
> +  uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
> +			TYPE_LENGTH (uint_type), "__uid_t");
> +  TYPE_TARGET_TYPE (uid_type) = uint_type;
> +  TYPE_TARGET_STUB (uid_type) = 1;
> +
> +  /* __clock_t */
> +  clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
> +			  TYPE_LENGTH (long_type), "__clock_t");
> +  TYPE_TARGET_TYPE (clock_type) = long_type;
> +  TYPE_TARGET_STUB (clock_type) = 1;
> +
> +  /* _sifields */
> +  sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
> +
> +  {
> +    const int si_max_size = 128;
> +    int si_pad_size;
> +    int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
> +
> +    /* _pad */
> +    if (gdbarch_ptr_bit (gdbarch) == 64)
> +      si_pad_size = (si_max_size / size_of_int) - 4;
> +    else
> +      si_pad_size = (si_max_size / size_of_int) - 3;
> +    append_composite_type_field (sifields_type, "_pad",
> +				 init_vector_type (int_type, si_pad_size));
> +  }
> +
> +  /* _kill */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_pid", pid_type);
> +  append_composite_type_field (type, "si_uid", uid_type);
> +  append_composite_type_field (sifields_type, "_kill", type);
> +
> +  /* _timer */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_tid", int_type);
> +  append_composite_type_field (type, "si_overrun", int_type);
> +  append_composite_type_field (type, "si_sigval", sigval_type);
> +  append_composite_type_field (sifields_type, "_timer", type);
> +
> +  /* _rt */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_pid", pid_type);
> +  append_composite_type_field (type, "si_uid", uid_type);
> +  append_composite_type_field (type, "si_sigval", sigval_type);
> +  append_composite_type_field (sifields_type, "_rt", type);
> +
> +  /* _sigchld */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_pid", pid_type);
> +  append_composite_type_field (type, "si_uid", uid_type);
> +  append_composite_type_field (type, "si_status", int_type);
> +  append_composite_type_field (type, "si_utime", clock_type);
> +  append_composite_type_field (type, "si_stime", clock_type);
> +  append_composite_type_field (sifields_type, "_sigchld", type);
> +
> +  /* _sigfault */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_addr", void_ptr_type);
> +  append_composite_type_field (type, "si_trapno", int_type);
> +  append_composite_type_field (sifields_type, "_sigfault", type);
> +
> +  /* _sigpoll */
> +  type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  append_composite_type_field (type, "si_band", int_type);
> +  append_composite_type_field (type, "si_fd", int_type);
> +  append_composite_type_field (sifields_type, "_sigpoll", type);
> +
> +  /* struct siginfo */
> +  siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
> +  TYPE_NAME (siginfo_type) = xstrdup ("siginfo");
> +  append_composite_type_field (siginfo_type, "si_signo", int_type);
> +  append_composite_type_field (siginfo_type, "si_errno", int_type);
> +  append_composite_type_field (siginfo_type, "si_code", int_type);
> +  append_composite_type_field_aligned (siginfo_type,
> +				       "_sifields", sifields_type,
> +				       TYPE_LENGTH (long_type));
> +
> +  return siginfo_type;
> +}
> +
>  \f
>  
>  static void
> @@ -278,6 +393,9 @@ sparc64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
>    set_xml_syscall_file_name (XML_SYSCALL_FILENAME_SPARC64);
>    set_gdbarch_get_syscall_number (gdbarch,
>                                    sparc64_linux_get_syscall_number);
> +
> +  set_gdbarch_get_siginfo_type (gdbarch,
> +				sparc64_linux_get_siginfo_type);
>  }
>  \f
>  
> diff --git a/gdb/testsuite/gdb.base/siginfo-obj.exp b/gdb/testsuite/gdb.base/siginfo-obj.exp
> index 6cee02e..5046892 100644
> --- a/gdb/testsuite/gdb.base/siginfo-obj.exp
> +++ b/gdb/testsuite/gdb.base/siginfo-obj.exp
> @@ -28,7 +28,8 @@ if [target_info exists gdb,nosignals] {
>  
>  if { ! [istarget "i?86-*-linux*"]
>       && ! [istarget "x86_64-*-linux*"]
> -     && ! [istarget "arm*-*-linux*"] } {
> +     && ! [istarget "arm*-*-linux*"]
> +     && ! [istarget "sparc64-*-linux*"] } {
>      verbose "Skipping siginfo-obj.exp because of lack of support."
>      return
>  }
> diff --git a/gdb/testsuite/gdb.base/siginfo-thread.exp b/gdb/testsuite/gdb.base/siginfo-thread.exp
> index a351802..541594b 100644
> --- a/gdb/testsuite/gdb.base/siginfo-thread.exp
> +++ b/gdb/testsuite/gdb.base/siginfo-thread.exp
> @@ -23,7 +23,8 @@ if [target_info exists gdb,nosignals] {
>  
>  if { ! [istarget "i?86-*-linux*"]
>       && ! [istarget "x86_64-*-linux*"]
> -     && ! [istarget "arm*-*-linux*"] } {
> +     && ! [istarget "arm*-*-linux*"]
> +     && ! [istarget "sparc64-*-linux*"] } {
>      verbose "Skipping siginfo-thread.exp because of lack of support."
>      return
>  }
> 


-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Support for the $_siginfo convenience var in sparc64
  2013-10-22 13:21 ` Pedro Alves
@ 2013-10-22 13:36   ` Jose E. Marchesi
  2013-12-03 11:59     ` Jose E. Marchesi
  0 siblings, 1 reply; 5+ messages in thread
From: Jose E. Marchesi @ 2013-10-22 13:36 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches


    > The following patch adds support for the $_siginfo convenience variable
    > to sparc64-*-linux-gnu targets.
    
    I take it from the patch that linux-tdep.c:linux_get_siginfo_type wouldn't
    work for sparc64?  Why is that?  What's different?

These are the differences of glibc's bits/siginfo.h in sparc with
respect to bits/siginfo.h in x86:

- The _sigfault struct has an additional field `int si_trapno'.
- The `si_band' field in the `_sigpoll' struct is of type `int' instead
  of `long int'.

It would be nice to avoid all that code repetition, but since glibc
maintains per-target bits/signinfo.h files more differences could be
introduced in the future...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Support for the $_siginfo convenience var in sparc64
  2013-10-22 13:36   ` Jose E. Marchesi
@ 2013-12-03 11:59     ` Jose E. Marchesi
  2013-12-03 17:06       ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Jose E. Marchesi @ 2013-12-03 11:59 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches


ping

        > The following patch adds support for the $_siginfo convenience variable
        > to sparc64-*-linux-gnu targets.
        
        I take it from the patch that linux-tdep.c:linux_get_siginfo_type wouldn't
        work for sparc64?  Why is that?  What's different?
    
    These are the differences of glibc's bits/siginfo.h in sparc with
    respect to bits/siginfo.h in x86:
    
    - The _sigfault struct has an additional field `int si_trapno'.
    - The `si_band' field in the `_sigpoll' struct is of type `int' instead
      of `long int'.
    
    It would be nice to avoid all that code repetition, but since glibc
    maintains per-target bits/signinfo.h files more differences could be
    introduced in the future...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Support for the $_siginfo convenience var in sparc64
  2013-12-03 11:59     ` Jose E. Marchesi
@ 2013-12-03 17:06       ` Pedro Alves
  0 siblings, 0 replies; 5+ messages in thread
From: Pedro Alves @ 2013-12-03 17:06 UTC (permalink / raw)
  To: Jose E. Marchesi; +Cc: gdb-patches

On 12/03/2013 11:59 AM, Jose E. Marchesi wrote:
> 
> ping
> 
>         > The following patch adds support for the $_siginfo convenience variable
>         > to sparc64-*-linux-gnu targets.
>         
>         I take it from the patch that linux-tdep.c:linux_get_siginfo_type wouldn't
>         work for sparc64?  Why is that?  What's different?
>     
>     These are the differences of glibc's bits/siginfo.h in sparc with
>     respect to bits/siginfo.h in x86:
>     
>     - The _sigfault struct has an additional field `int si_trapno'.
>     - The `si_band' field in the `_sigpoll' struct is of type `int' instead
>       of `long int'.
>     
>     It would be nice to avoid all that code repetition, but since glibc
>     maintains per-target bits/signinfo.h files more differences could be
>     introduced in the future...

It just looks like the glibc code is waiting to be cleaned up:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$ diff -up ./sysdeps/unix/sysv/linux/bits/siginfo.h ./sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
-/* siginfo_t, sigevent and constants.  Linux version.
+/* siginfo_t, sigevent and constants.  Linux/SPARC version.
    Copyright (C) 1997-2013 Free Software Foundation, Inc.
    This file is part of the GNU C Library.

@@ -95,13 +95,14 @@ typedef struct
        struct
          {
            void *si_addr;      /* Faulting insn/memory ref.  */
+           int si_trapno;
            short int si_addr_lsb;      /* Valid LSB of the reported address.  */
          } _sigfault;

        /* SIGPOLL.  */
        struct
          {
-           long int si_band;   /* Band event for SIGPOLL.  */
+           int si_band;        /* Band event for SIGPOLL.  */
            int si_fd;
          } _sigpoll;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

On the kernel side, archs just define a couple macros for those minor
differences, sharing most of the definitions:

http://lxr.free-electrons.com/source/include/uapi/asm-generic/siginfo.h

 28
 29 /*
 30  * The default "si_band" type is "long", as specified by POSIX.
 31  * However, some architectures want to override this to "int"
 32  * for historical compatibility reasons, so we allow that.
 33  */
 34 #ifndef __ARCH_SI_BAND_T
 35 #define __ARCH_SI_BAND_T long
 36 #endif
...
 87                 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
 88                 struct {
 89                         void __user *_addr; /* faulting insn/memory ref. */
 90 #ifdef __ARCH_SI_TRAPNO
 91                         int _trapno;    /* TRAP # which caused the signal */
 92 #endif


Seems like we should be able to share similarly (though with runtime
switches, of course).

-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-12-03 17:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-22 13:09 [PATCH] Support for the $_siginfo convenience var in sparc64 Jose E. Marchesi
2013-10-22 13:21 ` Pedro Alves
2013-10-22 13:36   ` Jose E. Marchesi
2013-12-03 11:59     ` Jose E. Marchesi
2013-12-03 17:06       ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox