summaryrefslogtreecommitdiffstats
path: root/patches/04_add-strtonum-to-conftest.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/04_add-strtonum-to-conftest.patch')
-rw-r--r--patches/04_add-strtonum-to-conftest.patch127
1 files changed, 127 insertions, 0 deletions
diff --git a/patches/04_add-strtonum-to-conftest.patch b/patches/04_add-strtonum-to-conftest.patch
new file mode 100644
index 0000000..fcdcd58
--- /dev/null
+++ b/patches/04_add-strtonum-to-conftest.patch
@@ -0,0 +1,127 @@
+From: "P. J. McDermott" <pjm@nac.net>
+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
+@@ -6373,14 +6373,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
+@@ -1474,14 +1474,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"