summaryrefslogtreecommitdiff
path: root/libre/syslinux/0018-prevent-pow-optimization.patch
diff options
context:
space:
mode:
authorOmar Vega Ramos <ovruni@gnu.org.pe>2019-04-15 09:55:41 -0500
committerOmar Vega Ramos <ovruni@gnu.org.pe>2019-04-15 09:55:41 -0500
commit859c853ee4ecbb8ee958e3b61e12fca9aca8cd53 (patch)
tree6b69522fdd41a91da8a8b1d22c3e9bf5f4eb65dd /libre/syslinux/0018-prevent-pow-optimization.patch
parent4106007657ac82b8df2219ea4b7c97686055f4f9 (diff)
syslinux-6.04.pre2.r11.gbf6db5b4-1.par1: updating version
Diffstat (limited to 'libre/syslinux/0018-prevent-pow-optimization.patch')
-rw-r--r--libre/syslinux/0018-prevent-pow-optimization.patch36
1 files changed, 36 insertions, 0 deletions
diff --git a/libre/syslinux/0018-prevent-pow-optimization.patch b/libre/syslinux/0018-prevent-pow-optimization.patch
new file mode 100644
index 000000000..0c42c7bbb
--- /dev/null
+++ b/libre/syslinux/0018-prevent-pow-optimization.patch
@@ -0,0 +1,36 @@
+From: Lukas Schwaighofer <lukas@schwaighofer.name>
+Date: Tue, 26 Feb 2019 23:13:58 +0100
+Subject: Prevent optimizing the pow() function
+
+With the current GCC 8.2.0 from Debian, a section of code calling pow() in
+zzjson_parse.c is turned into a sequence calling exp(). Since no exp()
+implementation is available in syslinux those optimizations need to be
+disabled.
+---
+ com32/gpllib/zzjson/zzjson_parse.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/com32/gpllib/zzjson/zzjson_parse.c b/com32/gpllib/zzjson/zzjson_parse.c
+index ecb6f61..e66a9d8 100644
+--- a/com32/gpllib/zzjson/zzjson_parse.c
++++ b/com32/gpllib/zzjson/zzjson_parse.c
+@@ -138,6 +138,10 @@ static ZZJSON *parse_string2(ZZJSON_CONFIG *config) {
+ return zzjson;
+ }
+
++static double __attribute__((optimize("O0"))) pow_noopt(double x, double y) {
++ return pow(x, y);
++}
++
+ static ZZJSON *parse_number(ZZJSON_CONFIG *config) {
+ ZZJSON *zzjson;
+ unsigned long long ival = 0, expo = 0;
+@@ -213,7 +217,7 @@ skipexpo:
+ if (dbl) {
+ dval = sign * (long long) ival;
+ dval += sign * frac;
+- dval *= pow(10.0, (double) signexpo * expo);
++ dval *= pow_noopt(10.0, (double) signexpo * expo);
+ }
+
+ zzjson = config->calloc(1, sizeof(ZZJSON));