glibc: accept yacc and portable awk/sed
This commit is contained in:
@@ -0,0 +1,510 @@
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -575,12 +575,14 @@
|
||||
[GNU sed[^0-9]* \([0-9]*\.[0-9.]*\)],
|
||||
[3.0[2-9]*|3.[1-9]*|[4-9]*],
|
||||
SED=: aux_missing="$aux_missing sed")
|
||||
-AC_CHECK_PROG_VER(AWK, gawk, --version,
|
||||
- [GNU Awk[^0-9]*\([0-9][0-9.]*\)],
|
||||
- [3.1.[2-9]*|3.[2-9]*|[4-9]*], critic_missing="$critic_missing gawk")
|
||||
-AC_CHECK_PROG_VER(BISON, bison, --version,
|
||||
- [bison (GNU Bison) \([0-9]*\.[0-9.]*\)],
|
||||
- [2.7*|[3-9].*|[1-9][0-9]*], critic_missing="$critic_missing bison")
|
||||
+AC_CHECK_PROGS(AWK, awk gawk)
|
||||
+if test -z "$AWK"; then
|
||||
+ critic_missing="$critic_missing awk"
|
||||
+fi
|
||||
+AC_CHECK_PROGS(BISON, bison yacc)
|
||||
+if test -z "$BISON"; then
|
||||
+ critic_missing="$critic_missing yacc"
|
||||
+fi
|
||||
|
||||
# Require GCC 12.1 to build.
|
||||
AC_CACHE_CHECK([if $CC is sufficient to build libc], libc_cv_compiler_ok, [
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -5645,7 +5645,7 @@
|
||||
SED=: aux_missing="$aux_missing sed"
|
||||
fi
|
||||
|
||||
-for ac_prog in gawk
|
||||
+for ac_prog in awk gawk
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
@@ -5694,27 +5694,10 @@
|
||||
done
|
||||
|
||||
if test -z "$AWK"; then
|
||||
- ac_verc_fail=yes
|
||||
-else
|
||||
- # Found it, now check the version.
|
||||
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of $AWK" >&5
|
||||
-printf %s "checking version of $AWK... " >&6; }
|
||||
- ac_prog_version=`$AWK --version 2>&1 | sed -n 's/^.*GNU Awk[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
|
||||
- case $ac_prog_version in
|
||||
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
- 3.1.[2-9]*|3.[2-9]*|[4-9]*)
|
||||
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
||||
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
||||
-
|
||||
- esac
|
||||
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
|
||||
-printf "%s\n" "$ac_prog_version" >&6; }
|
||||
-fi
|
||||
-if test $ac_verc_fail = yes; then
|
||||
- critic_missing="$critic_missing gawk"
|
||||
+ critic_missing="$critic_missing awk"
|
||||
fi
|
||||
|
||||
-for ac_prog in bison
|
||||
+for ac_prog in bison yacc
|
||||
do
|
||||
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||
set dummy $ac_prog; ac_word=$2
|
||||
@@ -5763,24 +5746,7 @@
|
||||
done
|
||||
|
||||
if test -z "$BISON"; then
|
||||
- ac_verc_fail=yes
|
||||
-else
|
||||
- # Found it, now check the version.
|
||||
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of $BISON" >&5
|
||||
-printf %s "checking version of $BISON... " >&6; }
|
||||
- ac_prog_version=`$BISON --version 2>&1 | sed -n 's/^.*bison (GNU Bison) \([0-9]*\.[0-9.]*\).*$/\1/p'`
|
||||
- case $ac_prog_version in
|
||||
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
|
||||
- 2.7*|[3-9].*|[1-9][0-9]*)
|
||||
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
|
||||
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
|
||||
-
|
||||
- esac
|
||||
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
|
||||
-printf "%s\n" "$ac_prog_version" >&6; }
|
||||
-fi
|
||||
-if test $ac_verc_fail = yes; then
|
||||
- critic_missing="$critic_missing bison"
|
||||
+ critic_missing="$critic_missing yacc"
|
||||
fi
|
||||
|
||||
|
||||
@@ -11003,4 +10969,3 @@
|
||||
printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
|
||||
fi
|
||||
|
||||
-
|
||||
--- a/Makerules
|
||||
+++ b/Makerules
|
||||
@@ -1000,7 +1000,7 @@
|
||||
$(common-objpfx)config.h $(..)Makerules
|
||||
$(LINK.o) -shared -nostdlib -nostartfiles \
|
||||
-x assembler /dev/null -o $@.so
|
||||
- $(OBJDUMP) -f $@.so | sed -n 's/.*file format \(.*\)/OUTPUT_FORMAT(\1)/;T;p' > $@
|
||||
+ $(OBJDUMP) -f $@.so | sed -n 's/.*file format \(.*\)/OUTPUT_FORMAT(\1)/p' > $@
|
||||
rm -f $@.so
|
||||
common-generated += format.lds
|
||||
|
||||
--- a/scripts/gen-sorted.awk
|
||||
+++ b/scripts/gen-sorted.awk
|
||||
@@ -15,7 +15,7 @@
|
||||
{
|
||||
subdir = type = FILENAME;
|
||||
sub(/^.*\//, "", type);
|
||||
- sub(/\/[^/]+$/, "", subdir);
|
||||
+ sub("/[^/]+$", "", subdir);
|
||||
sub(/^.*\//, "", subdir);
|
||||
thisdir = "";
|
||||
}
|
||||
--- a/scripts/gen-tunables.awk
|
||||
+++ b/scripts/gen-tunables.awk
|
||||
@@ -16,6 +16,25 @@
|
||||
max_alias_len=0
|
||||
}
|
||||
|
||||
+function trim(s) {
|
||||
+ sub(/^[ \t]+/, "", s)
|
||||
+ sub(/[ \t]+$/, "", s)
|
||||
+ return s
|
||||
+}
|
||||
+
|
||||
+function sort_indices(src, dst, n, i, key) {
|
||||
+ n = 0
|
||||
+ for (key in src) {
|
||||
+ i = ++n
|
||||
+ while (i > 1 && dst[i - 1] > key) {
|
||||
+ dst[i] = dst[i - 1]
|
||||
+ --i
|
||||
+ }
|
||||
+ dst[i] = key
|
||||
+ }
|
||||
+ return n
|
||||
+}
|
||||
+
|
||||
# Skip over blank lines and comments.
|
||||
/^#/ {
|
||||
next
|
||||
@@ -97,8 +116,8 @@
|
||||
|
||||
# Otherwise, we have encountered a tunable attribute.
|
||||
split($0, arr, ":")
|
||||
- attr = gensub(/^[ \t]+|[ \t]+$/, "", "g", arr[1])
|
||||
- val = gensub(/^[ \t]+|[ \t]+$/, "", "g", arr[2])
|
||||
+ attr = trim(arr[1])
|
||||
+ val = trim(arr[2])
|
||||
|
||||
if (attr == "type") {
|
||||
types[top_ns,ns,tunable] = val
|
||||
@@ -134,7 +153,7 @@
|
||||
# TYPES is an associative array where the index is the data
|
||||
# TYPESA is an indexed array where the value is the data
|
||||
# We sort TYPESA
|
||||
- typecount = asorti (types, typesa)
|
||||
+ typecount = sort_indices(types, typesa)
|
||||
|
||||
print "/* AUTOGENERATED by gen-tunables.awk. */"
|
||||
print "#ifndef _TUNABLES_H_"
|
||||
--- a/scripts/sysd-rules.awk
|
||||
+++ b/scripts/sysd-rules.awk
|
||||
@@ -1,4 +1,4 @@
|
||||
-# This is a GAWK script to generate the sysd-rules file.
|
||||
+# This is an awk script to generate the sysd-rules file.
|
||||
# It does not read any input, but it requires that several variables
|
||||
# be set on its command line (using -v) to their makefile counterparts:
|
||||
# all_object_suffixes $(all-object-suffixes)
|
||||
@@ -28,8 +28,8 @@
|
||||
dep_order = sprintf("%09d", npatterns - length(td[2]));
|
||||
sort_patterns[target_order SUBSEP dep_order] = patterns[i];
|
||||
}
|
||||
- asorti(sort_patterns, map_patterns);
|
||||
- for (i in map_patterns) {
|
||||
+ nsorted_patterns = sort_indices(sort_patterns, map_patterns);
|
||||
+ for (i = 1; i <= nsorted_patterns; ++i) {
|
||||
patterns[i] = sort_patterns[map_patterns[i]];
|
||||
}
|
||||
|
||||
@@ -57,7 +57,8 @@
|
||||
if (target_pattern == "%") {
|
||||
command_suffix = "";
|
||||
} else {
|
||||
- prefix = gensub(/%/, "", 1, target_pattern);
|
||||
+ prefix = target_pattern;
|
||||
+ sub(/%/, "", prefix);
|
||||
command_suffix = " $(" prefix "CPPFLAGS)" " $(" prefix "CFLAGS)";
|
||||
}
|
||||
target = "$(objpfx)" target_pattern o ":";
|
||||
@@ -78,3 +79,16 @@
|
||||
print "sysd-rules-done := t";
|
||||
exit 0;
|
||||
}
|
||||
+
|
||||
+function sort_indices(src, dst, n, i, key) {
|
||||
+ n = 0;
|
||||
+ for (key in src) {
|
||||
+ i = ++n;
|
||||
+ while (i > 1 && dst[i - 1] > key) {
|
||||
+ dst[i] = dst[i - 1];
|
||||
+ --i;
|
||||
+ }
|
||||
+ dst[i] = key;
|
||||
+ }
|
||||
+ return n;
|
||||
+}
|
||||
--- a/scripts/versionlist.awk
|
||||
+++ b/scripts/versionlist.awk
|
||||
@@ -3,6 +3,19 @@
|
||||
|
||||
BEGIN { in_lib = ""; in_version = 0 }
|
||||
|
||||
+function sort_indices(src, dst, n, i, key) {
|
||||
+ n = 0;
|
||||
+ for (key in src) {
|
||||
+ i = ++n;
|
||||
+ while (i > 1 && dst[i - 1] > key) {
|
||||
+ dst[i] = dst[i - 1];
|
||||
+ --i;
|
||||
+ }
|
||||
+ dst[i] = key;
|
||||
+ }
|
||||
+ return n;
|
||||
+}
|
||||
+
|
||||
!in_lib && NF == 2 && $2 == "{" {
|
||||
in_lib = $1;
|
||||
all_libs[in_lib] = 1;
|
||||
@@ -31,7 +44,7 @@
|
||||
$1 == "}" { in_lib = ""; next }
|
||||
|
||||
END {
|
||||
- nlibs = asorti(all_libs, libs_order);
|
||||
+ nlibs = sort_indices(all_libs, libs_order);
|
||||
for (i = 1; i <= nlibs; ++i) {
|
||||
lib = libs_order[i];
|
||||
|
||||
--- a/scripts/versions.awk
|
||||
+++ b/scripts/versions.awk
|
||||
@@ -104,12 +104,10 @@
|
||||
# if symbols are moved into libc. The abilist files and the other
|
||||
# targets (with a real GLIBC_2.0 baseline) provide testing
|
||||
# coverage.
|
||||
- printf("\
|
||||
-GLIBC_2.0 {\n\
|
||||
-};\n\
|
||||
-GLIBC_2.1 {\n\
|
||||
-} GLIBC_2.0;\n\
|
||||
-") > outfile;
|
||||
+ print "GLIBC_2.0 {" > outfile;
|
||||
+ print "};" > outfile;
|
||||
+ print "GLIBC_2.1 {" > outfile;
|
||||
+ print "} GLIBC_2.0;" > outfile;
|
||||
return "GLIBC_2.1";
|
||||
}
|
||||
|
||||
@@ -130,12 +128,28 @@
|
||||
}
|
||||
|
||||
# ELF hash, for use with symbol versions.
|
||||
+function bit_xor(a, b, res, bit, abit, bbit) {
|
||||
+ res = 0;
|
||||
+ bit = 1;
|
||||
+ while (a > 0 || b > 0) {
|
||||
+ abit = a % 2;
|
||||
+ bbit = b % 2;
|
||||
+ if ((abit && !bbit) || (!abit && bbit))
|
||||
+ res += bit;
|
||||
+ a = int(a / 2);
|
||||
+ b = int(b / 2);
|
||||
+ bit *= 2;
|
||||
+ }
|
||||
+ return res;
|
||||
+}
|
||||
+
|
||||
function elf_hash(s, i, acc) {
|
||||
acc = 0;
|
||||
for (i = 1; i <= length(s); ++i) {
|
||||
- acc = and(lshift(acc, 4) + ord(substr(s, i, 1)), 0xffffffff);
|
||||
- top = and(acc, 0xf0000000);
|
||||
- acc = and(xor(acc, rshift(top, 24)), compl(top));
|
||||
+ acc = (acc * 16 + ord(substr(s, i, 1))) % 4294967296;
|
||||
+ top = int(acc / 268435456) * 268435456;
|
||||
+ acc = bit_xor(acc, int(top / 16777216));
|
||||
+ acc -= top;
|
||||
}
|
||||
return acc;
|
||||
}
|
||||
--- a/scripts/localplt.awk
|
||||
+++ b/scripts/localplt.awk
|
||||
@@ -9,6 +9,42 @@
|
||||
pltrelsize = -1;
|
||||
}
|
||||
|
||||
+function hexval(c) {
|
||||
+ if (c >= "0" && c <= "9")
|
||||
+ return c + 0;
|
||||
+ if (c >= "a" && c <= "f")
|
||||
+ return 10 + index("abcdef", c) - 1;
|
||||
+ if (c >= "A" && c <= "F")
|
||||
+ return 10 + index("ABCDEF", c) - 1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+function number(s, i, n) {
|
||||
+ if (s ~ /^0[xX]/) {
|
||||
+ n = 0;
|
||||
+ for (i = 3; i <= length(s); ++i)
|
||||
+ n = n * 16 + hexval(substr(s, i, 1));
|
||||
+ return n;
|
||||
+ }
|
||||
+ return s + 0;
|
||||
+}
|
||||
+
|
||||
+function unversioned(s) {
|
||||
+ sub(/@.*/, "", s);
|
||||
+ return s;
|
||||
+}
|
||||
+
|
||||
+function jmprel_file_name(s) {
|
||||
+ sub(/^.*\//, "", s);
|
||||
+ sub(/\.jmprel$/, ":", s);
|
||||
+ return s;
|
||||
+}
|
||||
+
|
||||
+function clear_array(a, k) {
|
||||
+ for (k in a)
|
||||
+ delete a[k];
|
||||
+}
|
||||
+
|
||||
FILENAME != lastfile {
|
||||
if (lastfile && jmprel_offset == 0 && rela_offset == 0 && rel_offset == 0 \
|
||||
&& relr_offset == 0) {
|
||||
@@ -25,7 +61,7 @@
|
||||
rel_offset = 0;
|
||||
relr_offset = 0;
|
||||
pltrelsz = -1;
|
||||
- delete section_offset_by_address;
|
||||
+ clear_array(section_offset_by_address);
|
||||
}
|
||||
|
||||
/^Section Headers:/ { in_shdrs = 1; next }
|
||||
@@ -33,8 +69,8 @@
|
||||
|
||||
in_shdrs && /^ +\[/ { sub(/\[ +/, "[") }
|
||||
in_shdrs {
|
||||
- address = strtonum("0x" $4);
|
||||
- offset = strtonum("0x" $5);
|
||||
+ address = number("0x" $4);
|
||||
+ offset = number("0x" $5);
|
||||
section_offset_by_address[address] = offset;
|
||||
}
|
||||
|
||||
@@ -47,11 +83,11 @@
|
||||
# Relocations against GNU_IFUNC symbols are not shown as an hexadecimal
|
||||
# value, but rather as the resolver symbol followed by ().
|
||||
if ($4 ~ /\(\)/) {
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5)
|
||||
+ print whatfile, unversioned($5)
|
||||
} else {
|
||||
- symval = strtonum("0x" $4);
|
||||
+ symval = number("0x" $4);
|
||||
if (symval != 0)
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5)
|
||||
+ print whatfile, unversioned($5)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,11 +95,11 @@
|
||||
# Relocations against GNU_IFUNC symbols are not shown as an hexadecimal
|
||||
# value, but rather as the resolver symbol followed by ().
|
||||
if ($4 ~ /\(\)/) {
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5), "RELA", $3
|
||||
+ print whatfile, unversioned($5), "RELA", $3
|
||||
} else {
|
||||
- symval = strtonum("0x" $4);
|
||||
+ symval = number("0x" $4);
|
||||
if (symval != 0)
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5), "RELA", $3
|
||||
+ print whatfile, unversioned($5), "RELA", $3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,11 +107,11 @@
|
||||
# Relocations against GNU_IFUNC symbols are not shown as an hexadecimal
|
||||
# value, but rather as the resolver symbol followed by ().
|
||||
if ($4 ~ /\(\)/) {
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5), "REL", $3
|
||||
+ print whatfile, unversioned($5), "REL", $3
|
||||
} else {
|
||||
- symval = strtonum("0x" $4);
|
||||
+ symval = number("0x" $4);
|
||||
if (symval != 0)
|
||||
- print whatfile, gensub(/@.*/, "", "g", $5), "REL", $3
|
||||
+ print whatfile, unversioned($5), "REL", $3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,13 +120,13 @@
|
||||
in_relocs { next }
|
||||
|
||||
$1 == "Relocation" && $2 == "section" && $5 == "offset" {
|
||||
- relocs_offset = strtonum($6);
|
||||
- whatfile = gensub(/^.*\/([^/]+)\.jmprel$/, "\\1:", 1, FILENAME);
|
||||
+ relocs_offset = number($6);
|
||||
+ whatfile = jmprel_file_name(FILENAME);
|
||||
next
|
||||
}
|
||||
|
||||
$2 == "(JMPREL)" {
|
||||
- jmprel_addr = strtonum($3);
|
||||
+ jmprel_addr = number($3);
|
||||
if (jmprel_addr in section_offset_by_address) {
|
||||
jmprel_offset = section_offset_by_address[jmprel_addr];
|
||||
} else {
|
||||
@@ -100,12 +136,12 @@
|
||||
}
|
||||
|
||||
$2 == "(PLTRELSZ)" {
|
||||
- pltrelsz = strtonum($3);
|
||||
+ pltrelsz = number($3);
|
||||
next
|
||||
}
|
||||
|
||||
$2 == "(RELA)" {
|
||||
- rela_addr = strtonum($3);
|
||||
+ rela_addr = number($3);
|
||||
if (rela_addr in section_offset_by_address) {
|
||||
rela_offset = section_offset_by_address[rela_addr];
|
||||
} else {
|
||||
@@ -116,7 +152,7 @@
|
||||
}
|
||||
|
||||
$2 == "(REL)" {
|
||||
- rel_addr = strtonum($3);
|
||||
+ rel_addr = number($3);
|
||||
if (rel_addr in section_offset_by_address) {
|
||||
rel_offset = section_offset_by_address[rel_addr];
|
||||
} else {
|
||||
@@ -127,7 +163,7 @@
|
||||
}
|
||||
|
||||
$2 == "(RELR)" {
|
||||
- relr_addr = strtonum($3);
|
||||
+ relr_addr = number($3);
|
||||
if (relr_addr in section_offset_by_address) {
|
||||
relr_offset = section_offset_by_address[relr_addr];
|
||||
} else {
|
||||
--- a/sysdeps/unix/sysv/linux/gen-syscall-h.awk
|
||||
+++ b/sysdeps/unix/sysv/linux/gen-syscall-h.awk
|
||||
@@ -36,7 +36,11 @@
|
||||
}
|
||||
|
||||
# Skip empty lines and comments.
|
||||
-/^\s*(|#.*)$/ {
|
||||
+/^[[:space:]]*$/ {
|
||||
+ next;
|
||||
+}
|
||||
+
|
||||
+/^[[:space:]]*#/ {
|
||||
next;
|
||||
}
|
||||
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -1561,7 +1561,7 @@
|
||||
-Wl,-soname=$(rtld-installed-name)
|
||||
$(call after-link,$@.new)
|
||||
$(READELF) -s $@.new \
|
||||
- | $(AWK) '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
|
||||
+ | $(AWK) '(($$7 == "UND" || $$7 == "UNDEF") && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }'
|
||||
mv -f $@.new $@
|
||||
|
||||
ifeq (yes,$(build-shared))
|
||||
--- a/intl/Makefile
|
||||
+++ b/intl/Makefile
|
||||
@@ -161,7 +161,11 @@
|
||||
-D'LOCALE_ALIAS_PATH="$(localedir)"' \
|
||||
-Wno-unused-but-set-variable \
|
||||
-Wno-implicit-fallthrough
|
||||
+ifeq ($(notdir $(BISON)),yacc)
|
||||
+BISONFLAGS = -l -p __gettext -o
|
||||
+else
|
||||
BISONFLAGS = --yacc --no-lines --name-prefix=__gettext --output
|
||||
+endif
|
||||
|
||||
$(inst_localedir)/locale.alias: locale.alias $(+force)
|
||||
$(do-install)
|
||||
--- a/timezone/Makefile
|
||||
+++ b/timezone/Makefile
|
||||
@@ -118,10 +118,12 @@
|
||||
$(build-testdata)
|
||||
{ test -r $(@D)/Universal.test-result \
|
||||
&& cp $(@D)/Universal.test-result $(@D)/UTC.test-result \
|
||||
- && sed -i 's/Universal/UTC/' $(@D)/UTC.test-result ; exit 0; }
|
||||
+ && sed 's/Universal/UTC/' $(@D)/UTC.test-result > $(@D)/UTC.test-resultT \
|
||||
+ && mv -f $(@D)/UTC.test-resultT $(@D)/UTC.test-result ; exit 0; }
|
||||
{ test -r $(@D)/UTC.test-result \
|
||||
&& cp $(@D)/UTC.test-result $(@D)/Universal.test-result \
|
||||
- && sed -i 's/UTC/Universal/' $(@D)/Universal.test-result ; exit 0; }
|
||||
+ && sed 's/UTC/Universal/' $(@D)/Universal.test-result > $(@D)/Universal.test-resultT \
|
||||
+ && mv -f $(@D)/Universal.test-resultT $(@D)/Universal.test-result ; exit 0; }
|
||||
$(testdata)/%/Berlin $(testdata)/%/London: europe $(zic-deps)
|
||||
$(build-testdata)
|
||||
$(testdata)/Australia/Melbourne: australasia $(zic-deps)
|
||||
Reference in New Issue
Block a user