diff options
Diffstat (limited to 'patches/04_add-strtonum-to-conftest.patch')
-rw-r--r-- | patches/04_add-strtonum-to-conftest.patch | 127 |
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" |