[gforth] updated to 0.7.2

Adrian Reber adrian at fedoraproject.org
Fri Jun 13 13:21:54 UTC 2014


commit a2e0b82761c92f863995915cd6f3d792b1dc6695
Author: Adrian Reber <adrian at lisas.de>
Date:   Fri Jun 13 15:21:06 2014 +0200

    updated to 0.7.2
    
    - included patchset from GIT to build with GCC 4.9
    - fixes "gforth: FTBFS in rawhide" (#1106528)

 .gitignore                            |    1 +
 gforth-0.7.0-buildpath.patch          |   12 -
 gforth-broken-disassembler.patch      |   11 -
 gforth-from-git-0-7-3.patch           |  419 +++++++++++++++++++++++++++++++++
 gforth-newline-null-local-array.patch |   33 ---
 gforth.spec                           |   33 ++-
 sources                               |    2 +-
 7 files changed, 440 insertions(+), 71 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 2d1cde0..448d462 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 gforth-0.7.0.tar.gz
+/gforth-0.7.2.tar.gz
diff --git a/gforth-from-git-0-7-3.patch b/gforth-from-git-0-7-3.patch
new file mode 100644
index 0000000..c900f98
--- /dev/null
+++ b/gforth-from-git-0-7-3.patch
@@ -0,0 +1,419 @@
+diff --git a/arch/386/machine.h b/arch/386/machine.h
+index 1b626a3..f582c4d 100644
+--- a/arch/386/machine.h
++++ b/arch/386/machine.h
+@@ -1,7 +1,7 @@
+ /*
+   This is the machine-specific part for Intel 386 compatible processors
+ 
+-  Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
++  Copyright (C) 1995,1996,1997,1998,2000,2003,2004,2005,2006,2007,2008,2012,2013 Free Software Foundation, Inc.
+ 
+   This file is part of Gforth.
+ 
+@@ -45,8 +45,6 @@
+ #define ASM_UM_SLASH_MOD(d1lo, d1hi, n1, n2, n3) \
+ 	asm("divl %4": "=a"(n3),"=d"(n2) : "a"(d1lo),"d"(d1hi),"g"(n1):"cc");
+ 
+-#include "../generic/machine.h"
+-
+ /* 386 and below have no cache, 486 has a shared cache, and the
+    Pentium and later employ hardware cache consistency, so
+    flush-icache is a noop */
+@@ -102,15 +100,30 @@
+ /* ecx works only for TOS, and eax, edx don't work for anything (gcc-3.0) */
+ #   else /* !(gcc-2.95 or gcc-3.x) */
+ #    if (__GNUC__==4 && defined(__GNUC_MINOR__) && __GNUC_MINOR__>=2)
+-#     ifndef __APPLE__
+-#      define IPREG asm("%ebx")
++#     if defined(PIC) || defined(__ANDROID__)
+ #      define SPREG asm("%esi")
+-#      define RPREG asm("%edi")
+-#      define TOSREG asm("%edx")
+-#     else
+ #      define IPREG asm("%edi")
+-#      define SPREG asm("%esi")
+-#      define TOSREG asm("%edx")
++#     else
++#      ifndef __APPLE__
++#       define IPREG asm("%ebx")
++#       define SPREG asm("%esi")
++#       define RPREG asm("%edi")
++#       if(__GNUC_MINOR__>=6)
++#        define TOSREG asm("%ebp")
++#       else
++#        define TOSREG asm("%ecx")
++#        define TOS_CLOBBERED
++#       endif
++#      else
++#       define IPREG asm("%edi")
++#       define SPREG asm("%esi")
++#       if(__GNUC_MINOR__>=6)
++#        define TOSREG asm("%ebp")
++#       else
++#        define TOSREG asm("%ecx")
++#        define TOS_CLOBBERED
++#       endif
++#      endif
+ #     endif
+ #    endif /* (gcc-4.2 or later) */
+ #   endif /* !(gcc-2.95 or later) */
+@@ -131,3 +144,10 @@
+ #endif /* defined(FORCE_REG) && !defined(DOUBLY_INDIRECT) && !defined(VM_PROFILING) */
+ 
+ /* #define ALIGNMENT_CHECK 1 */
++
++#if defined(USE_TOS) && defined(TOS_CLOBBERED)
++#define CLOBBER_TOS_WORKAROUND_START sp[0]=spTOS; __asm__ __volatile__ ("" ::: "memory");
++#define CLOBBER_TOS_WORKAROUND_END   __asm__ __volatile__ ("" ::: "memory"); spTOS=sp[0];
++#endif
++
++#include "../generic/machine.h"
+diff --git a/arch/amd64/machine.h b/arch/amd64/machine.h
+index 500cd20..17d61cf 100644
+--- a/arch/amd64/machine.h
++++ b/arch/amd64/machine.h
+@@ -89,12 +89,18 @@ explicit register allocation and efforts to stop coalescing.
+ #define RPREG asm("%r13")
+ #define FPREG asm("%r12")
+ #define TOSREG asm("%r14")
+-#define SPREG asm("%r15")
+-#define IPREG asm("%rbx")
+-#if 0
+-#define LPREG asm("%rbp") /* doesn't work now */
++#if (__GNUC__==4 && defined(__GNUC_MINOR__) && __GNUC_MINOR__!=6)
++# define SPREG asm("%r15")
++# define IPREG asm("%rbx")
+ #endif
++#if (__GNUC__==4 && defined(__GNUC_MINOR__) && __GNUC_MINOR__>=7)
++#define LPREG asm("%rbp") /* works with GCC 4.7.x */
++#endif
++#if (__GNUC__==4 && defined(__GNUC_MINOR__) && __GNUC_MINOR__>=8)
++#define FTOSREG asm("%xmm7")
++#else
+ #define FTOSREG asm("%xmm8")
+ #endif
++#endif
+ 
+ #define GOTO_ALIGN asm(".p2align 4,,7");
+diff --git a/arch/generic/machine.h b/arch/generic/machine.h
+index dd75c34..b75cc1b 100644
+--- a/arch/generic/machine.h
++++ b/arch/generic/machine.h
+@@ -47,6 +47,11 @@
+ #endif
+ #endif
+ 
++#ifndef CLOBBER_TOS_WORKAROUND_START
++#define CLOBBER_TOS_WORKAROUND_START
++#define CLOBBER_TOS_WORKAROUND_END
++#endif
++
+ #ifndef INDIRECT_THREADED
+ #ifndef DIRECT_THREADED
+ #define DIRECT_THREADED
+diff --git a/cross.fs b/cross.fs
+index 59d12f3..670995a 100644
+--- a/cross.fs
++++ b/cross.fs
+@@ -691,7 +691,7 @@ Variable comp-state
+   ['] pi-undefined , \ target plugin action
+   8765 ,     \ plugin magic
+ [IFDEF] value!
+-  ['] value! !to
++  ['] value! set-to
+ [THEN]
+   DOES> perform ;
+ 
+diff --git a/engine/engine.c b/engine/engine.c
+index e4ed239..cec5815 100644
+--- a/engine/engine.c
++++ b/engine/engine.c
+@@ -445,7 +445,7 @@ Label *gforth_engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0 sr_p
+ #else
+   SET_IP(ip);
+   SUPER_END; /* count the first block, too */
+-  FIRST_NEXT;
++  NEXT;
+ #endif
+ 
+ #ifdef CPU_DEP3
+@@ -453,7 +453,7 @@ Label *gforth_engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0 sr_p
+ #endif
+ 
+ #include PRIM_I
+-  after_last: return (Label *)0;
++  after_last:   FIRST_NEXT;
+   /*needed only to get the length of the last primitive */
+ 
+   return (Label *)0;
+diff --git a/extend.fs b/extend.fs
+index 6229812..f599496 100644
+--- a/extend.fs
++++ b/extend.fs
+@@ -199,7 +199,7 @@ variable span ( -- c-addr ) \ core-ext-obsolescent
+     \G editing capabilites are available. The length of the string is
+     \G stored in @code{span}; it does not include the <return>
+     \G character. OBSOLESCENT: superceeded by @code{accept}.
+-    0 rot over
++    everyline 0 rot over
+     BEGIN ( maxlen span c-addr pos1 )
+ 	key decode ( maxlen span c-addr pos2 flag )
+ 	>r 2over = r> or
+diff --git a/gforth.el b/gforth.el
+index d2b2661..48a9b3c 100644
+--- a/gforth.el
++++ b/gforth.el
+@@ -510,9 +510,7 @@ End:\" construct).")
+ 			sub 
+ 			)) 
+ 		    mapped)))
+-    (let ((result (cons regexp sub-list)))
+-      (byte-compile 'result)
+-      result)))
++    (cons regexp sub-list)))
+ 
+ (defun forth-compile-words ()
+   "Compile the the words from `forth-words' and `forth-indent-words' into
+@@ -726,12 +724,11 @@ End:\" construct).")
+ 		 (get-text-property from 'fontified))
+        (forth-update-properties from to)))))
+ 
+-(eval-when-compile
+-  (byte-compile 'forth-set-word-properties)
+-  (byte-compile 'forth-next-known-forth-word)
+-  (byte-compile 'forth-update-properties)
+-  (byte-compile 'forth-delete-properties)
+-  (byte-compile 'forth-get-regexp-branch)) 
++(byte-compile 'forth-set-word-properties)
++(byte-compile 'forth-next-known-forth-word)
++(byte-compile 'forth-update-properties)
++(byte-compile 'forth-delete-properties)
++(byte-compile 'forth-get-regexp-branch)
+ 
+ ;;; imenu support
+ ;;;
+diff --git a/libcc.fs b/libcc.fs
+index 2ceab19..aba5df5 100644
+--- a/libcc.fs
++++ b/libcc.fs
+@@ -238,6 +238,10 @@ variable c-libs \ linked list of library names (without "lib")
+     \ append " -l<nodelib>" to string1
+     >r s"  -l" append r> c-lib-string 2@ append ;
+ 
++: add-libpath ( c-addr1 u1 node -- c-addr2 u2 )
++    \ append " -l<nodelib>" to string1
++    >r s"  -L" append r> c-lib-string 2@ append ;
++
+ \ C prefix lines
+ 
+ \ linked list of longcstrings: [ link | count-cell | characters ]
+diff --git a/prim b/prim
+index 9c0e77b..bc38d4e 100644
+--- a/prim
++++ b/prim
+@@ -2082,7 +2082,9 @@ r3 = r1/r2;
+ 
+ f**	( r1 r2 -- r3 )	float-ext	f_star_star
+ ""@i{r3} is @i{r1} raised to the @i{r2}th power.""
++CLOBBER_TOS_WORKAROUND_START;
+ r3 = pow(r1,r2);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fm*	( r1 n -- r2 )	gforth	fm_star
+ r2 = r1*n;
+@@ -2124,11 +2126,15 @@ n2 = n1*sizeof(Float);
+ floor	( r1 -- r2 )	float
+ ""Round towards the next smaller integral value, i.e., round toward negative infinity.""
+ /* !! unclear wording */
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = floor(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fround	( r1 -- r2 )	float	f_round
+ ""Round to the nearest integral value.""
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = rint(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fmax	( r1 r2 -- r3 )	float	f_max
+ if (r1<r2)
+@@ -2178,27 +2184,40 @@ fabs	( r1 -- r2 )	float-ext	f_abs
+ r2 = fabs(r1);
+ 
+ facos	( r1 -- r2 )	float-ext	f_a_cos
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = acos(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fasin	( r1 -- r2 )	float-ext	f_a_sine
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = asin(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fatan	( r1 -- r2 )	float-ext	f_a_tan
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = atan(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fatan2	( r1 r2 -- r3 )	float-ext	f_a_tan_two
+ ""@i{r1/r2}=tan(@i{r3}). ANS Forth does not require, but probably
+ intends this to be the inverse of @code{fsincos}. In gforth it is.""
++CLOBBER_TOS_WORKAROUND_START;
+ r3 = atan2(r1,r2);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fcos	( r1 -- r2 )	float-ext	f_cos
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = cos(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fexp	( r1 -- r2 )	float-ext	f_e_x_p
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = exp(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fexpm1	( r1 -- r2 )	float-ext	f_e_x_p_m_one
+ ""@i{r2}=@i{e}**@i{r1}@minus{}1""
++CLOBBER_TOS_WORKAROUND_START;
+ #ifdef HAVE_EXPM1
+ extern double
+ #ifdef NeXT
+@@ -2209,12 +2228,16 @@ r2 = expm1(r1);
+ #else
+ r2 = exp(r1)-1.;
+ #endif
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fln	( r1 -- r2 )	float-ext	f_l_n
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = log(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ flnp1	( r1 -- r2 )	float-ext	f_l_n_p_one
+ ""@i{r2}=ln(@i{r1}+1)""
++CLOBBER_TOS_WORKAROUND_START;
+ #ifdef HAVE_LOG1P
+ extern double
+ #ifdef NeXT
+@@ -2225,59 +2248,83 @@ r2 = log1p(r1);
+ #else
+ r2 = log(r1+1.);
+ #endif
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ flog	( r1 -- r2 )	float-ext	f_log
+ ""The decimal logarithm.""
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = log10(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ falog	( r1 -- r2 )	float-ext	f_a_log
+ ""@i{r2}=10**@i{r1}""
+ extern double pow10(double);
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = pow10(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fsin	( r1 -- r2 )	float-ext	f_sine
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = sin(r1);
+ 
+ fsincos	( r1 -- r2 r3 )	float-ext	f_sine_cos
+ ""@i{r2}=sin(@i{r1}), @i{r3}=cos(@i{r1})""
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = sin(r1);
+ r3 = cos(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ fsqrt	( r1 -- r2 )	float-ext	f_square_root
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = sqrt(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ 
+ ftan	( r1 -- r2 )	float-ext	f_tan
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = tan(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fsincos f/ ;
+ 
+ fsinh	( r1 -- r2 )	float-ext	f_cinch
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = sinh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fexpm1 fdup fdup 1. d>f f+ f/ f+ f2/ ;
+ 
+ fcosh	( r1 -- r2 )	float-ext	f_cosh
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = cosh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fexp fdup 1/f f+ f2/ ;
+ 
+ ftanh	( r1 -- r2 )	float-ext	f_tan_h
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = tanh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  f2* fexpm1 fdup 2. d>f f+ f/ ;
+ 
+ fasinh	( r1 -- r2 )	float-ext	f_a_cinch
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = asinh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fdup fdup f* 1. d>f f+ fsqrt f/ fatanh ;
+ 
+ facosh	( r1 -- r2 )	float-ext	f_a_cosh
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = acosh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fdup fdup f* 1. d>f f- fsqrt f+ fln ;
+ 
+ fatanh	( r1 -- r2 )	float-ext	f_a_tan_h
++CLOBBER_TOS_WORKAROUND_START;
+ r2 = atanh(r1);
++CLOBBER_TOS_WORKAROUND_END;
+ :
+  fdup f0< >r fabs 1. d>f fover f- f/  f2* flnp1 f2/
+  r> IF  fnegate  THEN ;
+diff --git a/test/float.fs b/test/float.fs
+index 68bdb15..45cd231 100644
+--- a/test/float.fs
++++ b/test/float.fs
+@@ -49,3 +49,32 @@ decimal
+ { s"   " >float 0e f= -> true true }
+ { s" 2e+3e" >float -> false }
+ { s" 2+3" >float -> 2000e true }
++
++set-near
++\ transcendenal and other functions, mainly test effect on TOS (not FTOS)
++{ 12345 2e 3e f** -> 12345 8e }
++{ 12345 1.8e floor -> 12345 1e }
++{ 12345 1.8e fround -> 12345 2e }
++{ 12345 -1.8e fabs -> 12345 1.8e }
++{ 12345 1e facos -> 12345 0e }
++{ 12345 1e fasin -> 12345 pi 2e f/ }
++{ 12345 0e fatan -> 12345 0e }
++{ 12345 1e 0e fatan2 -> 12345 pi 2e f/ }
++{ 12345 pi fcos -> 12345 -1e }
++{ 12345 0e fexp -> 12345 1e }
++{ 12345 0e fexpm1 -> 12345 0e }
++{ 12345 1e fln -> 12345 0e }
++{ 12345 0e flnp1 -> 12345 0e }
++{ 12345 1e flog -> 12345 0e }
++{ 12345 0e falog -> 12345 1e }
++{ 12345 pi f2/ fsin -> 12345 1e }
++{ 12345 0e fsincos -> 12345 0e 1e }
++{ 12345 4e fsqrt -> 12345 2e }
++{ 12345 pi 4e f/ ftan -> 12345 1e }
++{ 12345 0e fsinh -> 12345 0e }
++{ 12345 0e fcosh -> 12345 1e }
++{ 12345 0e ftanh -> 12345 0e }
++{ 12345 0e fasinh -> 12345 0e }
++{ 12345 1e facosh -> 12345 0e }
++{ 12345 0e fatanh -> 12345 0e }
++
diff --git a/gforth.spec b/gforth.spec
index 1978df3..5303479 100644
--- a/gforth.spec
+++ b/gforth.spec
@@ -1,21 +1,25 @@
 Name:           gforth
-Version:        0.7.0
-Release:        15%{?dist}
+Version:        0.7.2
+Release:        1%{?dist}
 Summary:        Fast and portable implementation of the ANS Forth language
 
 Group:          Development/Languages
 License:        GPLv3+
-URL:            http://www.jwdt.com/~paysan/gforth.html
-Source:         http://www.complang.tuwien.ac.at/forth/gforth/gforth-0.7.0.tar.gz
-Patch0:		gforth-0.7.0-buildpath.patch
-Patch1:		gforth-0.7.0-shebang.patch
+URL:            http://www.gnu.org/software/gforth/
+Source:         http://www.complang.tuwien.ac.at/forth/gforth/gforth-0.7.2.tar.gz
+Patch0:		gforth-0.7.0-shebang.patch
 # s390 build fix from Debian (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544827)
-Patch2:		gforth-0.7.0-compile-fix.patch
-Patch3:		gforth-broken-disassembler.patch
-Patch4:		gforth-newline-null-local-array.patch
-Patch5:		gforth-libtool-build.patch
+Patch1:		gforth-0.7.0-compile-fix.patch
+Patch2:		gforth-libtool-build.patch
+# git clone http://git.savannah.gnu.org/r/gforth.git
+# cd gforth/
+# git checkout origin/v0-7
+# git diff v0-7-2 > gforth-from-git-0-7-3.patch
+Patch3:		gforth-from-git-0-7-3.patch
 BuildRequires:  m4 libtool-ltdl-devel
 BuildRequires:  libffi-devel
+# temporarily required for Patch3
+BuildRequires:  gforth
 Requires(post): /sbin/install-info
 Requires(postun): /sbin/install-info
 
@@ -42,12 +46,8 @@ you can also use a traditional-style indirect threaded interpreter.
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
-%patch4 -p1
-%patch5 -p1
-#sed -i 's/-fforce-mem//' configure
 iconv -f latin1 -t utf8 AUTHORS > AUTHORS.new
 mv -f AUTHORS.new AUTHORS
-touch -d 2008-10-01 prim prim.b engine/prim.i
 
 
 %build
@@ -137,6 +137,11 @@ fi
 
 
 %changelog
+* Fri Jun 13 2014 Adrian Reber <adrian at lisas.de> - 0.7.2-1
+- updated to 0.7.2
+- included patchset from GIT to build with GCC 4.9
+- fixes "gforth: FTBFS in rawhide" (#1106528)
+
 * Sat Jun 07 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.7.0-15
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
 
diff --git a/sources b/sources
index a6c2587..eec2c22 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-2979ae86ede73ce2b3576dae957f4098  gforth-0.7.0.tar.gz
+96f2354ec8c4005e1a54035586ed683e  gforth-0.7.2.tar.gz


More information about the scm-commits mailing list