From: "P. J. McDermott" Description: Add strtonum() to generated conftest.awk conftest.awk uses the strtonum() function of GNU Awk to check for a linker that supports the "-z relro" option. . This patch adds the pure awk implementation of strtonum() found in awklib/eg/lib/strtonum.awk in GNU Awk to enable conftest.awk to run on other awk implementations. diff -Naur src.orig/libc/configure src/libc/configure --- src.orig/libc/configure 2012-12-02 16:11:45.000000000 -0500 +++ src/libc/configure 2013-06-20 20:13:34.122952650 -0400 @@ -6383,14 +6383,52 @@ _ACEOF cat > conftest.awk <<\EOF +# mystrtonum --- convert string to number +# Arnold Robbins, arnold@skeeve.com, Public Domain +# February, 2004 +function mystrtonum(str, ret, chars, n, i, k, c) +{ + if (str ~ /^0[0-7]*$/) { + # octal + n = length(str) + ret = 0 + for (i = 1; i <= n; i++) { + c = substr(str, i, 1) + if ((k = index("01234567", c)) > 0) + k-- # adjust for 1-basing in awk + ret = ret * 8 + k + } + } else if (str ~ /^0[xX][[:xdigit:]]+/) { + # hexadecimal + str = substr(str, 3) # lop off leading 0x + n = length(str) + ret = 0 + for (i = 1; i <= n; i++) { + c = substr(str, i, 1) + c = tolower(c) + if ((k = index("0123456789", c)) > 0) + k-- # adjust for 1-basing in awk + else if ((k = index("abcdef", c)) > 0) + k += 9 + ret = ret * 16 + k + } + } else if (str ~ \ + /^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/) { + # decimal number, possibly floating point + ret = str + 0 + } else + ret = "NOT-A-NUMBER" + + return ret +} BEGIN { result = "no" - commonpagesize = strtonum(commonpagesize) + commonpagesize = mystrtonum(commonpagesize) } { print "LINE:", $0 > "/dev/stderr" } $1 == "GNU_RELRO" { - vaddr = strtonum($3) - memsz = strtonum($6) + vaddr = mystrtonum($3) + memsz = mystrtonum($6) end = vaddr + memsz printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \ vaddr, memsz, end, commonpagesize > "/dev/stderr" diff -Naur src.orig/libc/configure.in src/libc/configure.in --- src.orig/libc/configure.in 2012-12-02 16:11:45.000000000 -0500 +++ src/libc/configure.in 2013-06-20 20:13:42.351194464 -0400 @@ -1475,14 +1475,52 @@ int data[0x10000] = { 1, }; ]])]) cat > conftest.awk <<\EOF +# mystrtonum --- convert string to number +# Arnold Robbins, arnold@skeeve.com, Public Domain +# February, 2004 +function mystrtonum(str, ret, chars, n, i, k, c) +{ + if (str ~ /^0[0-7]*$/) { + # octal + n = length(str) + ret = 0 + for (i = 1; i <= n; i++) { + c = substr(str, i, 1) + if ((k = index("01234567", c)) > 0) + k-- # adjust for 1-basing in awk + ret = ret * 8 + k + } + } else if (str ~ /^0[xX][[:xdigit:]]+/) { + # hexadecimal + str = substr(str, 3) # lop off leading 0x + n = length(str) + ret = 0 + for (i = 1; i <= n; i++) { + c = substr(str, i, 1) + c = tolower(c) + if ((k = index("0123456789", c)) > 0) + k-- # adjust for 1-basing in awk + else if ((k = index("abcdef", c)) > 0) + k += 9 + ret = ret * 16 + k + } + } else if (str ~ \ + /^[-+]?([0-9]+([.][0-9]*([Ee][0-9]+)?)?|([.][0-9]+([Ee][-+]?[0-9]+)?))$/) { + # decimal number, possibly floating point + ret = str + 0 + } else + ret = "NOT-A-NUMBER" + + return ret +} BEGIN { result = "no" - commonpagesize = strtonum(commonpagesize) + commonpagesize = mystrtonum(commonpagesize) } { print "LINE:", $0 > "/dev/stderr" } $1 == "GNU_RELRO" { - vaddr = strtonum($3) - memsz = strtonum($6) + vaddr = mystrtonum($3) + memsz = mystrtonum($6) end = vaddr + memsz printf "vaddr %#x memsz %#x end %#x commonpagesize %#x\n", \ vaddr, memsz, end, commonpagesize > "/dev/stderr"