The current libc crate implementation for AIX defines the struct sigaction as containing a union sa_union with two members: __su_handler and __su_sigaction. This mirrors the struct sigaction definition in the AIX system header. Consequently, any reference to sa_sigaction in Rust code, whether in shipped crates or user code, must be replaced with sa_union.__su_sigaction for AIX. Additionally, the types of these two union members are declared as function pointers rather than sighandler_t (i.e., usize), as is the case on other platforms. This discrepancy causes compiler errors when sighandler_t is used as the type for signal handlers.
The POSIX standard defines struct sigaction as containing sa_handler and sa_sigaction members, with their storage allowed to overlap. Other operating systems, such as Linux, also define a union for sa_handler and sa_sigaction. However, the libc crate implementations on these platforms define sa_sigaction directly as a member of struct sigaction rather than as part of a union. This is because the storage of sa_handler and sa_sigaction overlaps, and only sa_sigaction is typically referenced in Rust.
We propose modifying the libc crate implementation for AIX to define sa_sigaction as a direct member of struct sigaction, aligning it with implementations for other platforms. We will also update affected crates and test cases to reflect this change.
target=powerpc64-ibm-aix
The current
libccrate implementation for AIX defines thestruct sigactionas containing a unionsa_unionwith two members:__su_handlerand__su_sigaction. This mirrors thestruct sigactiondefinition in the AIX system header. Consequently, any reference tosa_sigactionin Rust code, whether in shipped crates or user code, must be replaced withsa_union.__su_sigactionfor AIX. Additionally, the types of these two union members are declared as function pointers rather thansighandler_t(i.e.,usize), as is the case on other platforms. This discrepancy causes compiler errors whensighandler_tis used as the type for signal handlers.The POSIX standard defines
struct sigactionas containingsa_handlerandsa_sigactionmembers, with their storage allowed to overlap. Other operating systems, such as Linux, also define a union forsa_handlerandsa_sigaction. However, thelibccrate implementations on these platforms definesa_sigactiondirectly as a member ofstruct sigactionrather than as part of a union. This is because the storage ofsa_handlerandsa_sigactionoverlaps, and onlysa_sigactionis typically referenced in Rust.We propose modifying the
libccrate implementation for AIX to definesa_sigactionas a direct member ofstruct sigaction, aligning it with implementations for other platforms. We will also update affected crates and test cases to reflect this change.target=powerpc64-ibm-aix