|
|
c6d234 |
commit 50cbbaa935e92dc570fc899a17669cd6782b09cd
|
|
|
c6d234 |
Author: Siddhesh Poyarekar <siddhesh@redhat.com>
|
|
|
c6d234 |
Date: Mon Dec 29 17:40:47 2014 +0530
|
|
|
c6d234 |
|
|
|
c6d234 |
Use posix-conf-vars.list to generate spec array
|
|
|
c6d234 |
|
|
|
c6d234 |
This patch adds support to generate the spec array in getconf from the
|
|
|
c6d234 |
conf.list. The generated code is mostly unchanged. the only changes
|
|
|
c6d234 |
are due to the change in layout of the spec and val arrays in the ELF.
|
|
|
c6d234 |
|
|
|
c6d234 |
The val array can also be auto-generated from posix-conf-vars.list
|
|
|
c6d234 |
once the remaining macros are added to it.
|
|
|
c6d234 |
|
|
|
c6d234 |
* posix/posix-conf-vars.list (SPEC:XBS5): Add sysconf prefix.
|
|
|
c6d234 |
* posix/confstr.c: Define NEED_SPEC_ARRAY to 0.
|
|
|
c6d234 |
* posix/posix-envs.def: Likewise.
|
|
|
c6d234 |
* sysdeps/posix/sysconf.c: Likewise.
|
|
|
c6d234 |
* posix/getconf.c: Define NEED_SPEC_ARRAY to 1.
|
|
|
c6d234 |
(specs): Remove array.
|
|
|
c6d234 |
* scripts/gen-posix-conf-vars.awk: Support generation of specs
|
|
|
c6d234 |
array.
|
|
|
c6d234 |
|
|
|
c6d234 |
diff --git a/posix/confstr.c b/posix/confstr.c
|
|
|
c6d234 |
index 5b03986a3678e007..0233ea94707ee627 100644
|
|
|
c6d234 |
--- a/posix/confstr.c
|
|
|
c6d234 |
+++ b/posix/confstr.c
|
|
|
c6d234 |
@@ -21,6 +21,8 @@
|
|
|
c6d234 |
#include <string.h>
|
|
|
c6d234 |
#include <confstr.h>
|
|
|
c6d234 |
#include "../version.h"
|
|
|
c6d234 |
+
|
|
|
c6d234 |
+#define NEED_SPEC_ARRAY 0
|
|
|
c6d234 |
#include <posix-conf-vars.h>
|
|
|
c6d234 |
|
|
|
c6d234 |
/* If BUF is not NULL and LEN > 0, fill in at most LEN - 1 bytes
|
|
|
c6d234 |
diff --git a/posix/getconf.c b/posix/getconf.c
|
|
|
c6d234 |
index 9cb8f29be28466ff..bd844dead16e9400 100644
|
|
|
c6d234 |
--- a/posix/getconf.c
|
|
|
c6d234 |
+++ b/posix/getconf.c
|
|
|
c6d234 |
@@ -26,6 +26,9 @@
|
|
|
c6d234 |
#include "../version.h"
|
|
|
c6d234 |
#define PACKAGE _libc_intl_domainname
|
|
|
c6d234 |
|
|
|
c6d234 |
+#define NEED_SPEC_ARRAY 1
|
|
|
c6d234 |
+#include <posix-conf-vars.h>
|
|
|
c6d234 |
+
|
|
|
c6d234 |
struct conf
|
|
|
c6d234 |
{
|
|
|
c6d234 |
const char *name;
|
|
|
c6d234 |
@@ -1008,23 +1011,6 @@ static const struct conf vars[] =
|
|
|
c6d234 |
};
|
|
|
c6d234 |
|
|
|
c6d234 |
|
|
|
c6d234 |
-static const struct { const char *name; int num; } specs[] =
|
|
|
c6d234 |
- {
|
|
|
c6d234 |
- { "XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32 },
|
|
|
c6d234 |
- { "XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG },
|
|
|
c6d234 |
- { "XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64 },
|
|
|
c6d234 |
- { "XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG },
|
|
|
c6d234 |
- { "POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32 },
|
|
|
c6d234 |
- { "POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG },
|
|
|
c6d234 |
- { "POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64 },
|
|
|
c6d234 |
- { "POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG },
|
|
|
c6d234 |
- { "POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32 },
|
|
|
c6d234 |
- { "POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG },
|
|
|
c6d234 |
- { "POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64 },
|
|
|
c6d234 |
- { "POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG },
|
|
|
c6d234 |
- };
|
|
|
c6d234 |
-static const int nspecs = sizeof (specs) / sizeof (specs[0]);
|
|
|
c6d234 |
-
|
|
|
c6d234 |
extern const char *__progname;
|
|
|
c6d234 |
|
|
|
c6d234 |
|
|
|
c6d234 |
diff --git a/posix/posix-conf-vars.list b/posix/posix-conf-vars.list
|
|
|
c6d234 |
index 3e7e7cdaa9c46c85..601bc2fd33f72f27 100644
|
|
|
c6d234 |
--- a/posix/posix-conf-vars.list
|
|
|
c6d234 |
+++ b/posix/posix-conf-vars.list
|
|
|
c6d234 |
@@ -1,7 +1,8 @@
|
|
|
c6d234 |
# Configuration variables identified by getconf. The heading of each section
|
|
|
c6d234 |
-# is of the format TYPE PREFIX with the opening curly brace on the same line.
|
|
|
c6d234 |
-# TYPE can either be SYSCONF, PATHCONF, CONFSTR or SPEC. Variable names are
|
|
|
c6d234 |
-# put one on each line with a curly brace on its own line ending the section.
|
|
|
c6d234 |
+# is of the format TYPE PREFIX SC_PREFIX with the opening curly brace on the
|
|
|
c6d234 |
+# same line. TYPE can either be SYSCONF, PATHCONF, CONFSTR or SPEC. In the
|
|
|
c6d234 |
+# absence of SC_PREFIX, _SC is used as the SC_PREFIX. Variable names are put
|
|
|
c6d234 |
+# one on each line with a curly brace on its own line ending the section.
|
|
|
c6d234 |
|
|
|
c6d234 |
SPEC POSIX {
|
|
|
c6d234 |
V6_ILP32_OFF32
|
|
|
c6d234 |
@@ -104,7 +105,7 @@ SYSCONF POSIX {
|
|
|
c6d234 |
RAW_SOCKETS
|
|
|
c6d234 |
}
|
|
|
c6d234 |
|
|
|
c6d234 |
-SPEC XBS5 {
|
|
|
c6d234 |
+SPEC XBS5 _SC_XBS5 {
|
|
|
c6d234 |
ILP32_OFF32
|
|
|
c6d234 |
ILP32_OFFBIG
|
|
|
c6d234 |
LP64_OFF64
|
|
|
c6d234 |
diff --git a/posix/posix-envs.def b/posix/posix-envs.def
|
|
|
c6d234 |
index e820e6dbe3fa3b61..428dbc23ceb7f64c 100644
|
|
|
c6d234 |
--- a/posix/posix-envs.def
|
|
|
c6d234 |
+++ b/posix/posix-envs.def
|
|
|
c6d234 |
@@ -42,6 +42,7 @@
|
|
|
c6d234 |
defined. These are called with arguments V5, V6, V7 before and
|
|
|
c6d234 |
after the relevant groups of environments. */
|
|
|
c6d234 |
|
|
|
c6d234 |
+#define NEED_SPEC_ARRAY 0
|
|
|
c6d234 |
#include <posix-conf-vars.h>
|
|
|
c6d234 |
|
|
|
c6d234 |
START_ENV_GROUP (V7)
|
|
|
c6d234 |
diff --git a/scripts/gen-posix-conf-vars.awk b/scripts/gen-posix-conf-vars.awk
|
|
|
c6d234 |
index 16e20fc1007bd2f5..0eca55d536bd7f70 100644
|
|
|
c6d234 |
--- a/scripts/gen-posix-conf-vars.awk
|
|
|
c6d234 |
+++ b/scripts/gen-posix-conf-vars.awk
|
|
|
c6d234 |
@@ -15,12 +15,19 @@ $1 ~ /^#/ || $0 ~ /^\s*$/ {
|
|
|
c6d234 |
$NF == "{" {
|
|
|
c6d234 |
type = $1
|
|
|
c6d234 |
prefix = $2
|
|
|
c6d234 |
+
|
|
|
c6d234 |
+ if (NF == 4)
|
|
|
c6d234 |
+ sc_prefix = $3
|
|
|
c6d234 |
+ else
|
|
|
c6d234 |
+ sc_prefix = "_SC"
|
|
|
c6d234 |
+
|
|
|
c6d234 |
next
|
|
|
c6d234 |
}
|
|
|
c6d234 |
|
|
|
c6d234 |
$1 == "}" {
|
|
|
c6d234 |
prefix = ""
|
|
|
c6d234 |
type = ""
|
|
|
c6d234 |
+ sc_prefix = ""
|
|
|
c6d234 |
next
|
|
|
c6d234 |
}
|
|
|
c6d234 |
|
|
|
c6d234 |
@@ -35,6 +42,7 @@ $1 == "}" {
|
|
|
c6d234 |
# CONFSTR: A configuration string
|
|
|
c6d234 |
# SYSCONF: A numeric value
|
|
|
c6d234 |
# SPEC: A specification
|
|
|
c6d234 |
+ sc_prefixes[prefix][$1] = sc_prefix
|
|
|
c6d234 |
conf[prefix][$1] = type
|
|
|
c6d234 |
}
|
|
|
c6d234 |
|
|
|
c6d234 |
@@ -56,6 +64,26 @@ END {
|
|
|
c6d234 |
printf "# endif\n"
|
|
|
c6d234 |
}
|
|
|
c6d234 |
printf "#endif\n\n"
|
|
|
c6d234 |
+
|
|
|
c6d234 |
+ # Build a name -> sysconf number associative array to print a C array at
|
|
|
c6d234 |
+ # the end.
|
|
|
c6d234 |
+ if (conf[p][c] == "SPEC") {
|
|
|
c6d234 |
+ name = sprintf ("%s_%s", p, c)
|
|
|
c6d234 |
+ num = sprintf ("%s_%s", sc_prefixes[p][c], c)
|
|
|
c6d234 |
+ spec[name] = num
|
|
|
c6d234 |
+ }
|
|
|
c6d234 |
}
|
|
|
c6d234 |
}
|
|
|
c6d234 |
+
|
|
|
c6d234 |
+ # Print the specification array. Define the macro NEED_SPEC_ARRAY before
|
|
|
c6d234 |
+ # including posix-conf-vars.h to make it available in the compilation unit.
|
|
|
c6d234 |
+ print "#if NEED_SPEC_ARRAY"
|
|
|
c6d234 |
+ print "static const struct { const char *name; int num; } specs[] ="
|
|
|
c6d234 |
+ print " {"
|
|
|
c6d234 |
+ for (s in spec) {
|
|
|
c6d234 |
+ printf " { \"%s\", %s },\n", s, spec[s]
|
|
|
c6d234 |
+ }
|
|
|
c6d234 |
+ print " };"
|
|
|
c6d234 |
+ print "static const int nspecs = sizeof (specs) / sizeof (specs[0]);"
|
|
|
c6d234 |
+ print "#endif"
|
|
|
c6d234 |
}
|
|
|
c6d234 |
diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c
|
|
|
c6d234 |
index 1e9d4e099e94981c..88aa151422dc56f9 100644
|
|
|
c6d234 |
--- a/sysdeps/posix/sysconf.c
|
|
|
c6d234 |
+++ b/sysdeps/posix/sysconf.c
|
|
|
c6d234 |
@@ -31,9 +31,9 @@
|
|
|
c6d234 |
#include <sys/types.h>
|
|
|
c6d234 |
#include <regex.h>
|
|
|
c6d234 |
|
|
|
c6d234 |
+#define NEED_SPEC_ARRAY 0
|
|
|
c6d234 |
#include <posix-conf-vars.h>
|
|
|
c6d234 |
|
|
|
c6d234 |
-
|
|
|
c6d234 |
#define NEED_CHECK_SPEC \
|
|
|
c6d234 |
(!defined _XBS5_ILP32_OFF32 || !defined _XBS5_ILP32_OFFBIG \
|
|
|
c6d234 |
|| !defined _XBS5_LP64_OFF64 || !defined _XBS5_LPBIG_OFFBIG \
|