Skip to content

[AIX] Use sa_sigaction instead of sa_union.__su_sigaction #4249

Closed
@xingxue-ibm

Description

@xingxue-ibm

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions