1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Use posix-conf-vars.list to generate spec array

This patch adds support to generate the spec array in getconf from the
conf.list.  The generated code is mostly unchanged.  the only changes
are due to the change in layout of the spec and val arrays in the ELF.

The val array can also be auto-generated from posix-conf-vars.list
once the remaining macros are added to it.

	* posix/posix-conf-vars.list (SPEC:XBS5): Add sysconf prefix.
	* posix/confstr.c: Define NEED_SPEC_ARRAY to 0.
	* posix/posix-envs.def: Likewise.
	* sysdeps/posix/sysconf.c: Likewise.
	* posix/getconf.c: Define NEED_SPEC_ARRAY to 1.
	(specs): Remove array.
	* scripts/gen-posix-conf-vars.awk: Support generation of specs
	array.
This commit is contained in:
Siddhesh Poyarekar
2014-12-29 17:40:47 +05:30
parent 3b566046c3
commit 50cbbaa935
7 changed files with 49 additions and 22 deletions

View File

@ -15,12 +15,19 @@ $1 ~ /^#/ || $0 ~ /^\s*$/ {
$NF == "{" {
type = $1
prefix = $2
if (NF == 4)
sc_prefix = $3
else
sc_prefix = "_SC"
next
}
$1 == "}" {
prefix = ""
type = ""
sc_prefix = ""
next
}
@ -35,6 +42,7 @@ $1 == "}" {
# CONFSTR: A configuration string
# SYSCONF: A numeric value
# SPEC: A specification
sc_prefixes[prefix][$1] = sc_prefix
conf[prefix][$1] = type
}
@ -56,6 +64,26 @@ END {
printf "# endif\n"
}
printf "#endif\n\n"
# Build a name -> sysconf number associative array to print a C array at
# the end.
if (conf[p][c] == "SPEC") {
name = sprintf ("%s_%s", p, c)
num = sprintf ("%s_%s", sc_prefixes[p][c], c)
spec[name] = num
}
}
}
# Print the specification array. Define the macro NEED_SPEC_ARRAY before
# including posix-conf-vars.h to make it available in the compilation unit.
print "#if NEED_SPEC_ARRAY"
print "static const struct { const char *name; int num; } specs[] ="
print " {"
for (s in spec) {
printf " { \"%s\", %s },\n", s, spec[s]
}
print " };"
print "static const int nspecs = sizeof (specs) / sizeof (specs[0]);"
print "#endif"
}