This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Update bits/siginfo.h with Linux hwpoison SIGBUS changes


On 05/07/2013 12:45 AM, Edjunior Barbosa Machado wrote:
> This patch adds new SIGBUS error codes for hardware poison signals, syncing
> with the current kernel headers (v3.9). It also adds si_trapno field for alpha.

Please be very very careful when doing something like this.

This is a potentially ABI changing event, adding elements to a public
structure like this requires an analysis to show the size of siginfo_t
didn't change.

You don't confirm that so I'll ask explicitly.

Did the size of siginfo_t change?


> Ok?
> --
> Edjunior
> 
> ChangeLog.alpha:
> 2013-05-07  Edjunior Machado  <emachado@linux.vnet.ibm.com>
> 
> 	* sysdeps/unix/sysv/linux/alpha/bits/siginfo.h (_sigfault): Add

There is no such thing as _sigfault. There is `struct siginfo_t' and
within that there is _sifields._sifault.

I would write this as:

	* sysdeps/unix/sysv/linux/alpha/bits/siginfo.h (_sigfault):
	Add si_trapno and si_addr_lsb to _sifields.sifault.

> 	si_trapno and si_addr_lsb.
> 	(si_trapno, si_addr_lsb): Define new macros.
> 	(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
> 
> ChangeLog.ia64:
> 2013-05-07  Edjunior Machado  <emachado@linux.vnet.ibm.com>
> 
> 	* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (_sigfault): Add

Likewise. (not repeated).

> 	si_addr_lsb.
> 	(si_addr_lsb): Define new macro.
> 	(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
> 
> ChangeLog.mips:
> 2013-05-07  Edjunior Machado  <emachado@linux.vnet.ibm.com>
> 
> 	* sysdeps/unix/sysv/linux/mips/bits/siginfo.h (_sigfault): Add
> 	si_addr_lsb.
> 	(si_addr_lsb): Define new macro.
> 	(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
> 
> ChangeLog.tile:
> 2013-05-07  Edjunior Machado  <emachado@linux.vnet.ibm.com>
> 
> 	* sysdeps/unix/sysv/linux/tile/bits/siginfo.h (_sigfault): Add
> 	si_addr_lsb.
> 	(si_addr_lsb): Define new macro.
> 	(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
> 
> ChangeLog:
> 2013-05-07  Edjunior Machado  <emachado@linux.vnet.ibm.com>
> 
> 	* sysdeps/unix/sysv/linux/bits/siginfo.h (_sigfault): Add si_addr_lsb.
> 	(si_addr_lsb): Define new macro.
> 	(BUS_MCEERR_AR, BUS_MCEERR_AO): Define new values.
> 	* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise.
> 	* sysdeps/unix/sysv/linux/x86/bits/siginfo.h: Likewise.
> 
> ---
>  ports/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h |   10 +++++++++-
>  ports/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h  |    8 +++++++-
>  ports/sysdeps/unix/sysv/linux/mips/bits/siginfo.h  |    8 +++++++-
>  ports/sysdeps/unix/sysv/linux/tile/bits/siginfo.h  |    8 +++++++-
>  sysdeps/unix/sysv/linux/bits/siginfo.h             |    8 +++++++-
>  sysdeps/unix/sysv/linux/sparc/bits/siginfo.h       |    8 +++++++-
>  sysdeps/unix/sysv/linux/x86/bits/siginfo.h         |    8 +++++++-
>  7 files changed, 51 insertions(+), 7 deletions(-)
> 
> diff --git a/ports/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h b/ports/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h
> index 1277885..71e4424 100644
> --- a/ports/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h
> +++ b/ports/sysdeps/unix/sysv/linux/alpha/bits/siginfo.h
> @@ -89,6 +89,8 @@ typedef struct
>  	struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
> +	    int si_trapno;	/* TRAP # which caused the signal */
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -121,6 +123,8 @@ typedef struct
>  # define si_int		_sifields._rt.si_sigval.sival_int
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
> +# define si_trapno	_sifields._sigfault.si_trapno
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  # define si_call_addr 	_sifields._sigsys._call_addr
> @@ -211,8 +215,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/ports/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h b/ports/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
> index 7887b45..33a41a6 100644
> --- a/ports/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
> +++ b/ports/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
> @@ -94,6 +94,7 @@ typedef struct siginfo
>  	    int _si_imm;
>  	    unsigned int _si_flags;
>  	    unsigned long int _si_isr;
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -118,6 +119,7 @@ typedef struct siginfo
>  # define si_int		_sifields._rt.si_sigval.sival_int
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
> +# define 
si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  
> @@ -233,8 +235,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/siginfo.h b/ports/sysdeps/unix/sysv/linux/mips/bits/siginfo.h
> index 56ae34c..150f2a6 100644
> --- a/ports/sysdeps/unix/sysv/linux/mips/bits/siginfo.h
> +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/siginfo.h
> @@ -98,6 +98,7 @@ typedef struct
>  	struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -122,6 +123,7 @@ typedef struct
>  # define si_int		_sifields._rt.si_sigval.sival_int
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  
> @@ -209,8 +211,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/ports/sysdeps/unix/sysv/linux/tile/bits/siginfo.h b/ports/sysdeps/unix/sysv/linux/tile/bits/siginfo.h
> index 4ad1a5d..81d9141 100644
> --- a/ports/sysdeps/unix/sysv/linux/tile/bits/siginfo.h
> +++ b/ports/sysdeps/unix/sysv/linux/tile/bits/siginfo.h
> @@ -96,6 +96,7 @@ typedef struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
>  	    int si_trapno;	/* TRAP # which caused the signal */
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -129,6 +130,7 @@ typedef struct
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
>  # define si_trapno	_sifields._sigfault.si_trapno
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  # define si_call_addr 	_sifields._sigsys._call_addr
> @@ -223,8 +225,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/sysdeps/unix/sysv/linux/bits/siginfo.h b/sysdeps/unix/sysv/linux/bits/siginfo.h
> index a67bd5c..fcd27c3 100644
> --- a/sysdeps/unix/sysv/linux/bits/siginfo.h
> +++ b/sysdeps/unix/sysv/linux/bits/siginfo.h
> @@ -95,6 +95,7 @@ typedef struct
>  	struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -127,6 +128,7 @@ typedef struct
>  # define si_int		_sifields._rt.si_sigval.sival_int
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  # define si_call_addr 	_sifields._sigsys._call_addr
> @@ -217,8 +219,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
> index 85a5462..f414aaf 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
> @@ -96,6 +96,7 @@ typedef struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
>  	    int si_trapno;
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -129,6 +130,7 @@ typedef struct
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
>  # define si_trapno	_sifields._sigfault.si_trapno
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  # define si_call_addr 	_sifields._sigsys._call_addr
> @@ -219,8 +221,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */
> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/siginfo.h b/sysdeps/unix/sysv/linux/x86/bits/siginfo.h
> index 48aef6d..044274d 100644
> --- a/sysdeps/unix/sysv/linux/x86/bits/siginfo.h
> +++ b/sysdeps/unix/sysv/linux/x86/bits/siginfo.h
> @@ -107,6 +107,7 @@ typedef struct
>  	struct
>  	  {
>  	    void *si_addr;	/* Faulting insn/memory ref.  */
> +	    short si_addr_lsb;	/* Valid LSB of the reported address */
>  	  } _sigfault;
>  
>  	/* SIGPOLL.  */
> @@ -139,6 +140,7 @@ typedef struct
>  # define si_int		_sifields._rt.si_sigval.sival_int
>  # define si_ptr		_sifields._rt.si_sigval.sival_ptr
>  # define si_addr	_sifields._sigfault.si_addr
> +# define si_addr_lsb	_sifields._sigfault.si_addr_lsb
>  # define si_band	_sifields._sigpoll.si_band
>  # define si_fd		_sifields._sigpoll.si_fd
>  # define si_call_addr 	_sifields._sigsys._call_addr
> @@ -229,8 +231,12 @@ enum
>  # define BUS_ADRALN	BUS_ADRALN
>    BUS_ADRERR,			/* Non-existant physical address.  */
>  # define BUS_ADRERR	BUS_ADRERR
> -  BUS_OBJERR			/* Object specific hardware error.  */
> +  BUS_OBJERR,			/* Object specific hardware error.  */
>  # define BUS_OBJERR	BUS_OBJERR
> +  BUS_MCEERR_AR,		/* Hardware memory error: action required */
> +# define BUS_MCEERR_AR	BUS_MCEERR_AR
> +  BUS_MCEERR_AO			/* Hardware memory error: action optional */

Andreas already pointed out it shoudl be "/* Blah blah blah.  */" (period + two spaces).

> +# define BUS_MCEERR_AO	BUS_MCEERR_AO
>  };
>  
>  /* `si_code' values for SIGTRAP signal.  */
> 

Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]