This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Unify some sys/procfs.h headers
On 14/09/2018 17:26, Joseph Myers wrote:
> As per recent discussions, this patch unifies some of the sys/procfs.h
> headers for architectures using the Linux kernel, producing a generic
> version that can hopefully be used by all new architectures as well.
>
> The new generic version is based on the AArch64 one. The register
> definitions, the only part that generally needs to vary by
> architecture, go in a new bits/procfs.h header (which each
> architecture using the generic version needs to provide); that header
> also has any #includes that were in the architecture-specific
> sys/procfs.h, where those includes went beyond the generic set.
>
> The generic version is used for eight architectures where the generic
> definitions were the same as the architecture-specific ones. (Some of
> those architectures had #if 0 fields, now removed; some defined types
> or fields using different type names which were typedefs for the same
> underlying types.)
>
> Six of the remaining architectures with their own sys/procfs.h use
> unsigned short for pr_uid / pr_gid in some cases; moving those to the
> generic header will require a bits/ header to define a typedef for the
> type of those fields. In the case of alpha, the generic sys/procfs.h
> uses elf_gregset_t (= unsigned long int[33]) to define prgregset_t and
> elf_fpregset_t (= double[32]) to define prfpregset_t, but the alpha
> version uses gregset_t (= long int[33]) and fpregset_t (= long
> int[32]), so avoiding unnecessarily changing the underlying types (and
> thus C++ name mangling) again means a bits/ header will need to be
> able to define a different choice for those typedefs.
>
> bits/procfs.h is included outside the __BEGIN_DECLS / __END_DECLS pair
> (whereas the definitions it contains were previously inside that pair
> in various sys/procfs.h headers), because it sometimes includes other
> headers and putting those other #includes inside that pair seems
> risky. Because none of the declarations in bits/procfs.h are of
> functions or variables or involve function types, I don't think it
> makes any difference whether they are inside or outside an extern "C"
> context.
>
> Tested with build-many-glibcs.py (again, that does not provide much
> validation for the correctness of this patch).
One option to add a bit of more coverage would be to add an option to
rebuild binutils with gdb enabled after the toolchain completion.
>
> 2018-09-14 Joseph Myers <joseph@codesourcery.com>
>
> * sysdeps/unix/sysv/linux/sys/procfs.h: Replace with file based on
> AArch64 version. Include <bits/procfs.h>.
> * sysdeps/unix/sysv/linux/Makefile [$(subdir) = misc]
> (sysdep_headers): Add bits/procfs.h.
> * sysdeps/unix/sysv/linux/bits/procfs.h: New file.
> * sysdeps/unix/sysv/linux/aarch64/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/hppa/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/ia64/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/microblaze/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/mips/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/nios2/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/powerpc/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/riscv/bits/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/aarch64/sys/procfs.h: Remove file.
> * sysdeps/unix/sysv/linux/hppa/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/ia64/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/microblaze/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/nios2/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/powerpc/sys/procfs.h: Likewise.
> * sysdeps/unix/sysv/linux/riscv/sys/procfs.h: Likewise.
LGTM, thanks.