]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Complete sys/procfs.h unification.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 25 Sep 2018 16:50:30 +0000 (16:50 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 25 Sep 2018 16:50:30 +0000 (16:50 +0000)
This patch completes the process of unifying sys/procfs.h headers for
architectures using the Linux kernel by making alpha use the generic
version.

That was previously deferred because alpha has different definitions
of prgregset_t and prfpregset_t from other architectures, so changing
to the common definitions would change C++ name mangling.  To avoid
such a change, a header bits/procfs-prregset.h is added, and alpha
gets its own version of that header.

Tested for x86_64 and x86, and with build-many-glibcs.py.

* sysdeps/unix/sysv/linux/sys/procfs.h: Include
<bits/procfs-prregset.h>.
(prgregset_t): Define using __prgregset_t.
(prfpregset_t): Define using __prfpregset_t.
* sysdeps/unix/sysv/linux/Makefile [$(subdir) = misc]
(sysdep_headers): Add bits/procfs-prregset.h.
* sysdeps/unix/sysv/linux/bits/procfs-prregset.h: New file.
* sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/procfs.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/procfs.h: Remove file.

ChangeLog
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/bits/procfs.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/sys/procfs.h [deleted file]
sysdeps/unix/sysv/linux/bits/procfs-prregset.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sys/procfs.h

index b84f3b4f381659495ec2e18bbdded46314f385cd..bd08c4bf4560f7289063c1d508210c8bd629bdbe 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2018-09-25  Joseph Myers  <joseph@codesourcery.com>
 
+       * sysdeps/unix/sysv/linux/sys/procfs.h: Include
+       <bits/procfs-prregset.h>.
+       (prgregset_t): Define using __prgregset_t.
+       (prfpregset_t): Define using __prfpregset_t.
+       * sysdeps/unix/sysv/linux/Makefile [$(subdir) = misc]
+       (sysdep_headers): Add bits/procfs-prregset.h.
+       * sysdeps/unix/sysv/linux/bits/procfs-prregset.h: New file.
+       * sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h: Likewise.
+       * sysdeps/unix/sysv/linux/alpha/bits/procfs.h: Likewise.
+       * sysdeps/unix/sysv/linux/alpha/sys/procfs.h: Remove file.
+
        * sysdeps/unix/sysv/linux/sys/procfs.h: Include
        <bits/procfs-id.h> and <bits/procfs-extra.h>.
        (struct elf_prpsinfo): Use __pr_uid_t and __pr_gid_t as types of
index db5b17fcb720db6a6e0b4df88a4d3b69314c685b..99d71ea29670f25e9e64bb0d654b43058638d6c8 100644 (file)
@@ -41,7 +41,8 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
                  bits/socket_type.h bits/syscall.h bits/sysctl.h \
                  bits/mman-linux.h bits/mman-shared.h bits/ptrace-shared.h \
                  bits/siginfo-arch.h bits/siginfo-consts-arch.h \
-                 bits/procfs.h bits/procfs-id.h bits/procfs-extra.h
+                 bits/procfs.h bits/procfs-id.h bits/procfs-extra.h \
+                 bits/procfs-prregset.h
 
 tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
         tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h b/sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h
new file mode 100644 (file)
index 0000000..2f17e62
--- /dev/null
@@ -0,0 +1,25 @@
+/* Types of prgregset_t and prfpregset_t.  Alpha version.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+# error "Never include <bits/procfs-prregset.h> directly; use <sys/procfs.h> instead."
+#endif
+
+typedef gregset_t __prgregset_t;
+typedef fpregset_t __prfpregset_t;
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/procfs.h b/sysdeps/unix/sysv/linux/alpha/bits/procfs.h
new file mode 100644 (file)
index 0000000..4e7790b
--- /dev/null
@@ -0,0 +1,38 @@
+/* Types for registers for sys/procfs.h.  Alpha version.
+   Copyright (C) 1996-2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
+#endif
+
+#include <signal.h>
+#include <sys/ucontext.h>
+
+/*
+ * The OSF/1 version of <sys/procfs.h> makes gregset_t 46 entries long.
+ * I have no idea why that is so.  For now, we just leave it at 33
+ * (32 general regs + processor status word).
+ */
+#define ELF_NGREG       33
+#define ELF_NFPREG      32
+
+typedef unsigned long elf_greg_t;
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+typedef double elf_fpreg_t;
+typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
diff --git a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h
deleted file mode 100644 (file)
index a6cbb02..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Copyright (C) 1996-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _SYS_PROCFS_H
-#define _SYS_PROCFS_H  1
-
-/* This is somehow modelled after the file of the same name on SysVr4
-   systems.  It provides a definition of the core file format for ELF
-   used on Linux.  */
-
-#include <features.h>
-#include <signal.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/ucontext.h>
-#include <sys/user.h>
-
-__BEGIN_DECLS
-
-/*
- * The OSF/1 version of <sys/procfs.h> makes gregset_t 46 entries long.
- * I have no idea why that is so.  For now, we just leave it at 33
- * (32 general regs + processor status word).
- */
-#define ELF_NGREG       33
-#define ELF_NFPREG      32
-
-typedef unsigned long elf_greg_t;
-typedef elf_greg_t elf_gregset_t[ELF_NGREG];
-
-typedef double elf_fpreg_t;
-typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
-
-struct elf_siginfo
-  {
-    int si_signo;                      /* Signal number.  */
-    int si_code;                       /* Extra code.  */
-    int si_errno;                      /* Errno.  */
-  };
-
-/* Definitions to generate Intel SVR4-like core files.  These mostly
-   have the same names as the SVR4 types with "elf_" tacked on the
-   front to prevent clashes with linux definitions, and the typedef
-   forms have been avoided.  This is mostly like the SVR4 structure,
-   but more Linuxy, with things that Linux does not support and which
-   gdb doesn't really use excluded.  Fields present but not used are
-   marked with "XXX".  */
-struct elf_prstatus
-  {
-#if 0
-    long int pr_flags;                 /* XXX Process flags.  */
-    short int pr_why;                  /* XXX Reason for process halt.  */
-    short int pr_what;                 /* XXX More detailed reason.  */
-#endif
-    struct elf_siginfo pr_info;                /* Info associated with signal.  */
-    short int pr_cursig;               /* Current signal.  */
-    unsigned long int pr_sigpend;      /* Set of pending signals.  */
-    unsigned long int pr_sighold;      /* Set of held signals.  */
-#if 0
-    stack_t pr_altstack;               /* Alternate stack info.  */
-    struct sigaction pr_action;                /* Signal action for current sig.  */
-#endif
-    __pid_t pr_pid;
-    __pid_t pr_ppid;
-    __pid_t pr_pgrp;
-    __pid_t pr_sid;
-    struct timeval pr_utime;           /* User time.  */
-    struct timeval pr_stime;           /* System time.  */
-    struct timeval pr_cutime;          /* Cumulative user time.  */
-    struct timeval pr_cstime;          /* Cumulative system time.  */
-#if 0
-    long int pr_instr;                 /* Current instruction.  */
-#endif
-    elf_gregset_t pr_reg;              /* GP registers.  */
-    int pr_fpvalid;                    /* True if math copro being used.  */
-  };
-
-
-#define ELF_PRARGSZ     (80)    /* Number of chars for args */
-
-struct elf_prpsinfo
-  {
-    char pr_state;                     /* Numeric process state.  */
-    char pr_sname;                     /* Char for pr_state.  */
-    char pr_zomb;                      /* Zombie.  */
-    char pr_nice;                      /* Nice val.  */
-    unsigned long int pr_flag;         /* Flags.  */
-    unsigned int pr_uid;
-    unsigned int pr_gid;
-    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
-    /* Lots missing */
-    char pr_fname[16];                 /* Filename of executable.  */
-    char pr_psargs[ELF_PRARGSZ];       /* Initial part of arg list.  */
-  };
-
-/* Addresses.  */
-typedef void *psaddr_t;
-
-/* Register sets.  Linux has different names.  */
-typedef gregset_t prgregset_t;
-typedef fpregset_t prfpregset_t;
-
-/* We don't have any differences between processes and threads,
-   therefore habe only ine PID type.  */
-typedef __pid_t lwpid_t;
-
-
-typedef struct elf_prstatus prstatus_t;
-typedef struct elf_prpsinfo prpsinfo_t;
-
-__END_DECLS
-
-#endif /* sys/procfs.h */
diff --git a/sysdeps/unix/sysv/linux/bits/procfs-prregset.h b/sysdeps/unix/sysv/linux/bits/procfs-prregset.h
new file mode 100644 (file)
index 0000000..0129340
--- /dev/null
@@ -0,0 +1,25 @@
+/* Types of prgregset_t and prfpregset_t.  Generic Linux version.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+# error "Never include <bits/procfs-prregset.h> directly; use <sys/procfs.h> instead."
+#endif
+
+typedef elf_gregset_t __prgregset_t;
+typedef elf_fpregset_t __prfpregset_t;
index 6ef577e291c0f2b90a0a3f16a3044eef58038d4d..b8fe489720682d958e871bb02743eb4eb00d62ab 100644 (file)
@@ -103,9 +103,11 @@ struct elf_prpsinfo
 /* Addresses.  */
 typedef void *psaddr_t;
 
+#include <bits/procfs-prregset.h>
+
 /* Register sets.  Linux has different names.  */
-typedef elf_gregset_t prgregset_t;
-typedef elf_fpregset_t prfpregset_t;
+typedef __prgregset_t prgregset_t;
+typedef __prfpregset_t prfpregset_t;
 
 /* We don't have any differences between processes and threads,
    therefore have only one PID type.  */