Compare commits

..

No commits in common. "rawhide" and "f27" have entirely different histories.

26 changed files with 1627 additions and 20545 deletions

6
.gitignore vendored
View file

@ -1,2 +1,4 @@
/clisp-*.tar.?z
/clisp-*.tar.bz2
/clisp-2.49-20130208hg.tar.bz2
/clisp-2.49-20161111hg.tar.xz
/clisp-2.49-20161113hg.tar.xz
/clisp-2.49-20170224hg.tar.xz

View file

@ -1,22 +0,0 @@
# clisp
[ANSI Common Lisp](http://www.lispworks.com/documentation/HyperSpec/Front/) is
a high-level, general-purpose programming language.
[GNU CLISP](https://clisp.sourceforge.io/) is a Common Lisp implementation by
Bruno Haible of Karlsruhe University and Michael Stoll of Munich University,
both in Germany. It mostly supports the Lisp described in the ANSI Common
Lisp standard. It runs on most Unix workstations (GNU/Linux, FreeBSD, NetBSD,
OpenBSD, Solaris, Tru64, HP-UX, BeOS, NeXTstep, IRIX, AIX and others) and on
other systems (Windows NT/2000/XP, Windows 95/98/ME) and needs only 4 MiB of
RAM.
It is Free Software and may be distributed under the terms of GNU GPL, while
it is possible to distribute commercial proprietary applications compiled with
GNU CLISP.
The user interface comes in English, German, French, Spanish, Dutch, Russian
and Danish, and can be changed at run time. GNU CLISP includes an
interpreter, a compiler, a debugger, CLOS, MOP, a foreign language interface,
sockets, i18n, fast bignums and more. An X11 interface is available through
CLX, Garnet, CLUE/CLIO. GNU CLISP runs Maxima, ACL2 and many other Common
Lisp packages.

136
clhs.el
View file

@ -1,136 +0,0 @@
;;; clhs.el --- Access the Common Lisp HyperSpec (CLHS) -*- lexical-binding: t -*-
;; Version: 2
;; Homepage: https://gitlab.com/sam-s/clhs
;; Maintainer: Sam Steingold <sds@gnu.org>
;;; This works with both
;;; * the "long file name" version released by Harlequin and available
;;; at the MIT web site as
;;; http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/FrontMatter/
;;; * the "8.3 file name" version released later by Xanalys/LispWorks and
;;; available at http://www.lispworks.com/documentation/common-lisp.html
;;; This is accomplished by not hard-wiring the symbol->file table
;;; but reading the Data/<map> file instead.
;;; Copyright (C) 2002-2008, 2017, 2019, 2021 Sam Steingold <sds@gnu.org>
;;; Keywords: lisp, common lisp, emacs, ANSI CL, hyperspec
;;; released under the GNU GPL <https://www.gnu.org/copyleft/gpl.html>
;;; as a part of GNU CLISP <https://www.clisp.org>
;;; Usage:
;; (autoload 'clhs-doc "clhs" "Get doc on ANSI CL" t)
;; (define-key help-map "\C-l" 'clhs-doc)
;; (custom-set-variables
;; '(tags-apropos-additional-actions '(("Common Lisp" clhs-doc clhs-symbols))))
;;; Commentary:
;; Kent Pitman and the Harlequin Group (later Xanalys) have made the
;; text of the "American National Standard for Information Technology --
;; Programming Language -- Common Lisp", ANSI X3.226-1994 available on
;; the WWW, in the form of the Common Lisp HyperSpec. This package
;; makes it convenient to peruse this documentation from within Emacs.
;; This is inspired by the Erik Naggum's version of 1997.
;;; Code:
(require 'browse-url)
(require 'thingatpt)
(require 'url)
(defvar clhs-symbols nil)
(defcustom clhs-root "http://clhs.lisp.se/"
;; "http://www.lispworks.com/documentation/HyperSpec/"
;; "http://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/html/hyperspec/HyperSpec/"
;; "http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/"
"*The root of the Common Lisp HyperSpec URL.
If you copy the HyperSpec to your local system, set this variable to
something like \"file:/usr/local/doc/HyperSpec/\"."
:group 'lisp
:set (lambda (s v)
(setq clhs-symbols nil)
(set-default s v))
:type 'string)
(defvar clhs-history nil
"History of symbols looked up in the Common Lisp HyperSpec so far.")
(defun clhs-table-buffer (&optional root)
"Create a buffer containing the CLHS symbol table.
Optional argument ROOT specifies the CLHS root location
and defaults to `clhs-root'."
(unless root (setq root clhs-root))
(if (string-match "^file:/" root)
(with-current-buffer (get-buffer-create " *clhs-tmp-buf*")
(insert-file-contents-literally
(let* ((d (concat (substring root 6) "/Data/"))
(f (concat d "Map_Sym.txt")))
(if (file-exists-p f) f
(setq f (concat d "Symbol-Table.text"))
(if (file-exists-p f) f
(error "No symbol table at %s" root))))
nil nil nil t)
(goto-char 0)
(current-buffer))
(let* ((d (concat root "/Data/"))
(f (concat d "Map_Sym.txt")))
(set-buffer (url-retrieve-synchronously f))
(goto-char 0)
(unless (looking-at "^HTTP/.*200 *OK$")
(kill-buffer (current-buffer))
(setq f (concat d "Symbol-Table.text"))
(set-buffer (url-retrieve-synchronously f))
(goto-char 0)
(unless (looking-at "^HTTP/.*200 *OK$")
(kill-buffer (current-buffer))
(error "No symbol table at %s" root)))
;; skip to the first symbol
(search-forward "\n\n")
(current-buffer))))
(defun clhs-read-symbols ()
"Read variable `clhs-symbols' from the current position in the current buffer."
(while (not (eobp))
(puthash (buffer-substring-no-properties ; symbol
(line-beginning-position) (line-end-position))
(progn (forward-line 1) ; file name
(buffer-substring-no-properties ; strip "../"
(+ 3 (line-beginning-position)) (line-end-position)))
clhs-symbols)
(forward-line 1)))
(defun clhs-symbols ()
"Get variable `clhs-symbols' from `clhs-root'."
(if (and clhs-symbols (not (= 0 (hash-table-count clhs-symbols))))
clhs-symbols
(with-current-buffer (clhs-table-buffer)
(unless clhs-symbols
(setq clhs-symbols (make-hash-table :test 'equal :size 1031)))
(clhs-read-symbols)
(kill-buffer (current-buffer))
clhs-symbols)))
;;;###autoload
(defun clhs-doc (symbol-name &optional kill)
"Browse the Common Lisp HyperSpec documentation for SYMBOL-NAME.
Finds the HyperSpec at `clhs-root'.
With prefix arg KILL, save the URL in the `kill-ring' instead."
(interactive (list (let ((sym (thing-at-point 'symbol t))
(completion-ignore-case t))
(completing-read
"Look-up symbol in the Common Lisp HyperSpec: "
(clhs-symbols) nil t sym 'clhs-history))
current-prefix-arg))
(unless (= ?/ (aref clhs-root (1- (length clhs-root))))
(setq clhs-root (concat clhs-root "/")))
(let ((url (concat clhs-root (gethash (upcase symbol-name) (clhs-symbols)))))
(if kill
(kill-new url)
(browse-url url))))
(provide 'clhs)
;;; clhs.el ends here

11
clisp-alias.patch Normal file
View file

@ -0,0 +1,11 @@
--- src/record.d.orig 2017-02-24 10:42:57.482011489 -0700
+++ src/record.d 2017-02-24 10:52:21.862184109 -0700
@@ -1540,7 +1540,7 @@ global maygc object update_instance (obj
ptr->inst_class_version = obj;
clr_break_sem_1(); /* permit interrupts again */
}
- ASSERT(Record_flags(STACK_(2+4+2*kept_slots)) & instflags_forwarded_B);
+ ASSERT(record_flags(TheInstance(STACK_(2+4+2*kept_slots))) & instflags_forwarded_B);
dotimesL(kept_slots,kept_slots, {
var object new_slotinfo = popSTACK();
ASSERT(atomp(new_slotinfo));

856
clisp-arm.patch Normal file
View file

@ -0,0 +1,856 @@
--- src/ariarm.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/ariarm.d 2017-02-24 10:41:46.898615218 -0700
@@ -86,7 +86,7 @@ pc .req r15
#define C(x) x
#define EXPORT(x) .global x
-#define GLABEL(x) x:
+#define GLABEL(x) .type x STT_FUNC; x:
#define LABEL(x) x:
#define RRX rrx
#define END
@@ -187,7 +187,7 @@ GLABEL(mulu32_)
LDR a3,[pc,#ptr_mulu32_high-.-8]
STR a2,[a3,#0]
#endif
- MOVS pc,lr
+ BX lr
/* extern uint16 divu_3216_1616_ (uint32 x, uint16 y);
entry
@@ -243,7 +243,7 @@ GLABEL(divu_3216_1616_)
LDR a3,[pc,#ptr_divu_16_rest-.-8] /* save rest so can be picked up later */
STR a2,[a3,#0] /* the result is 16 bits */
#endif
- MOVS pc, lr
+ BX lr
/* extern uint32 divu_6432_3232_ (uint32 xhi, uint32 xlo, uint32 y); | -> Quotient q
extern uint32 divu_32_rest; | -> Rest r
@@ -278,7 +278,7 @@ GLABEL(divu_6432_3232_)
LDR a4,[pc,#ptr_divu_32_rest-.-8]
STR a2,[a4,#0] /* divu_32_rest = remainder */
#endif
- LDMFD sp!, {v1,v2,v3,v4,v5,v6,pc}^
+ LDMFD sp!, {v1,v2,v3,v4,v5,v6,pc}
LABEL(divu_6432_3232_l1)
MOV v3, #0 /* s = 0 */
@@ -346,7 +346,7 @@ LABEL(divu_6432_3232_l1)
LDR a3,[pc,#ptr_divu_32_rest-.-8]
STR a2,[a3,#0] /* divu_32_rest = remainder */
#endif
- LDMFD sp!, {v1,v2,v3,v4,v5,v6,pc}^
+ LDMFD sp!, {v1,v2,v3,v4,v5,v6,pc}
/* extern uintD* copy_loop_up (uintD* sourceptr, uintD* destptr, uintC count);
entry
@@ -370,7 +370,7 @@ GLABEL(copy_loop_up)
LABEL(copy_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,a2 /* return addr of last word stored */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1,lr} /* save work regs */
LABEL(copy_loop_up_l2)
LDMIA a1!,{a3,v1,ip,lr} /* copy 4 words in one go */
@@ -380,7 +380,7 @@ LABEL(copy_loop_up_l2)
STMGEIA a2!,{a3,v1,ip,lr} /* 4 more words */
BGT copy_loop_up_l2 /* and loop */
MOV a1,a2 /* return addr of last word stored */
- LDMFD sp!,{v1,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1,pc} /* restore work regs and return */
/* extern uintD* copy_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
entry
@@ -404,7 +404,7 @@ GLABEL(copy_loop_down)
LABEL(copy_loop_down_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,a2 /* return addr of last word stored */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1,lr} /* save work regs */
LABEL(copy_loop_down_l2)
LDMDB a1!,{a3,v1,ip,lr} /* copy 4 words in one go */
@@ -414,7 +414,7 @@ LABEL(copy_loop_down_l2)
STMGEDB a2!,{a3,v1,ip,lr} /* 4 more words */
BGT copy_loop_down_l2 /* and loop */
MOV a1,a2 /* return addr of last word stored */
- LDMFD sp!,{v1,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1,pc} /* restore work regs and return */
/* extern uintD* clear_loop_up (uintD* destptr, uintC count);
entry
@@ -446,7 +446,7 @@ GLABEL(fill_loop_up)
STRGT a3,[a1],#4
LABEL(fill_loop_up_l1)
BICS a4,a2,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1,lr} /* save work regs */
MOV v1,a3 /* copy filler to three other */
MOV ip,a3 /* registers */
@@ -456,7 +456,7 @@ LABEL(fill_loop_up_l2)
SUBS a4,a4,#8 /* decrement counter by 8 */
STMGEIA a1!,{a3,v1,ip,lr} /* if count still positive then store 4 */
BGT fill_loop_up_l2 /* more and loop */
- LDMFD sp!,{v1,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1,pc} /* restore work regs and return */
/* extern uintD* clear_loop_down (uintD* destptr, uintC count);
@@ -489,7 +489,7 @@ GLABEL(fill_loop_down)
STRGT a3,[a1,#-4]!
LABEL(fill_loop_down_l1)
BICS a4,a2,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1,lr} /* save work regs */
MOV v1,a3 /* copy filler to three other */
MOV ip,a3 /* registers */
@@ -499,7 +499,7 @@ LABEL(fill_loop_down_l2)
SUBS a4,a4,#8 /* decrement counter by 8 */
STMGEDB a1!,{a3,v1,ip,lr} /* if count still positive then store 4 */
BGT fill_loop_down_l2 /* more and loop */
- LDMFD sp!,{v1,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1,pc} /* restore work regs and return */
/* extern void or_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -529,7 +529,7 @@ GLABEL(or_loop_up)
STRGT ip,[a1],#4
LABEL(or_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(or_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -541,7 +541,7 @@ LABEL(or_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT or_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void xor_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -571,7 +571,7 @@ GLABEL(xor_loop_up)
STRGT ip,[a1],#4
LABEL(xor_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(xor_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -583,7 +583,7 @@ LABEL(xor_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT xor_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void and_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -613,7 +613,7 @@ GLABEL(and_loop_up)
STRGT ip,[a1],#4
LABEL(and_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(and_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -625,7 +625,7 @@ LABEL(and_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT and_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void eqv_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -659,7 +659,7 @@ GLABEL(eqv_loop_up)
STRGT ip,[a1],#4
LABEL(eqv_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(eqv_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -675,7 +675,7 @@ LABEL(eqv_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT eqv_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void nand_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -709,7 +709,7 @@ GLABEL(nand_loop_up)
STRGT ip,[a1],#4
LABEL(nand_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(nand_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -725,7 +725,7 @@ LABEL(nand_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT nand_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void nor_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -759,7 +759,7 @@ GLABEL(nor_loop_up)
STRGT ip,[a1],#4
LABEL(nor_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(nor_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -775,7 +775,7 @@ LABEL(nor_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT nor_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void andc2_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -805,7 +805,7 @@ GLABEL(andc2_loop_up)
STRGT ip,[a1],#4
LABEL(andc2_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(andc2_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -817,7 +817,7 @@ LABEL(andc2_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT andc2_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void orc2_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -851,7 +851,7 @@ GLABEL(orc2_loop_up)
STRGT ip,[a1],#4
LABEL(orc2_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(orc2_loop_up_l2)
LDMIA a2!,{a3,v1,v2,ip} /* load 4 words in one go */
@@ -867,7 +867,7 @@ LABEL(orc2_loop_up_l2)
STMIA a1!,{v3,v4,v5,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT orc2_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern void not_loop_up (uintD* xptr, uintC count);
entry
@@ -893,7 +893,7 @@ GLABEL(not_loop_up)
STRGT a3,[a1],#4
LABEL(not_loop_up_l1)
BICS a4,a2,#3 /* set counter to multiple of 4 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{lr} /* save work regs */
LABEL(not_loop_up_l2)
LDMIA a1,{a2,a3,ip,lr} /* load 4 words in one go,NO writeback */
@@ -904,7 +904,7 @@ LABEL(not_loop_up_l2)
STMIA a1!,{a2,a3,ip,lr} /* store 4 results */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT not_loop_up_l2 /* if count still positive then loop */
- LDMFD sp!,{pc}^ /* restore work regs and return */
+ LDMFD sp!,{pc} /* restore work regs and return */
/* extern void and_test_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -923,13 +923,13 @@ GLABEL(and_test_loop_up)
LDR ip,[a1],#4 /* to align the total to a multiple */
TST ip,a4 /* of 4 words */
MOVNE a1,#1 /* return true if AND_TEST ok */
- MOVNES pc,lr
+ BXNE lr
BCC and_test_loop_up_l1 /* better to branch than skip instrs. */
LDRGE a4,[a2],#4
LDRGE ip,[a1],#4
TSTGE ip,a4
MOVNE a1,#1
- MOVNES pc,lr
+ BXNE lr
ANDS a4,a3,#3
CMP a4,#2
BLE and_test_loop_up_l1 /* better to branch than skip instrs. */
@@ -937,11 +937,11 @@ GLABEL(and_test_loop_up)
LDRGT ip,[a1],#4
TSTGT ip,a4
MOVNE a1,#1
- MOVNES pc,lr
+ BXNE lr
LABEL(and_test_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* return false */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v6,lr} /* save work regs */
MOV v6,a1 /* move xptr to v6 */
MOV a1,#1 /* set result to true */
@@ -952,11 +952,11 @@ LABEL(and_test_loop_up_l2)
TSTEQ v4,v1
TSTEQ v5,v2
TSTEQ lr,ip
- LDMNEFD sp!,{v1-v6,pc}^
+ LDMNEFD sp!,{v1-v6,pc}
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT and_test_loop_up_l2 /* if count still positive then loop */
MOV a1,#0
- LDMFD sp!,{v1-v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v6,pc} /* restore work regs and return */
/* extern void test_loop_up (uintD* xptr, uintC count);
entry
@@ -973,21 +973,21 @@ GLABEL(test_loop_up)
BEQ test_loop_up_l1 /* yup, so branch */
LDR a4,[ip],#4 /* TEST the first 1-3 words */
TEQ a4,#0 /* align the total to a multiple of 4 */
- MOVNES pc,lr /* return true if AND_TEST ok */
+ BXNE lr /* return true if AND_TEST ok */
CMP a3,#2
BLT test_loop_up_l1 /* need to branch 'cos PSR set */
LDRGE a4,[ip],#4 /* when checking against zero */
TEQGE a4,#0
- MOVNES pc,lr
+ BXNE lr
CMP a3,#2
BLE test_loop_up_l1 /* need to branch 'cos PSR set */
LDRGT a4,[ip],#4 /* when checking against zero */
TEQGT a4,#0
- MOVNES pc,lr
+ BXNE lr
LABEL(test_loop_up_l1)
BICS a4,a2,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* return false */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1,lr} /* save work regs */
LABEL(test_loop_up_l2)
LDMIA ip!,{a2,a3,v1,lr} /* load 4 words in one go */
@@ -995,11 +995,11 @@ LABEL(test_loop_up_l2)
TEQEQ a3,#0
TEQEQ v1,#0
TEQEQ lr,#0
- LDMNEFD sp!,{v1,pc}^
+ LDMNEFD sp!,{v1,pc}
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT test_loop_up_l2 /* if count still positive then loop */
MOV a1,#0
- LDMFD sp!,{v1,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1,pc} /* restore work regs and return */
/* extern void compare_loop_up (uintD* xptr, uintD* yptr, uintC count);
entry
@@ -1021,7 +1021,7 @@ GLABEL(compare_loop_up)
CMP ip,a4 /* of 4 words */
MVNLO a1,#0 /* x < y -> -1 */
MOVHI a1,#1 /* x > y -> +1 */
- MOVNES pc,lr /* and return result if not equal */
+ BXNE lr /* and return result if not equal */
ANDS a4,a3,#3
CMP a4,#2
BLT compare_loop_up_l1 /* need to branch 'cos PSR used */
@@ -1030,7 +1030,7 @@ GLABEL(compare_loop_up)
CMP ip,a4
MVNLO a1,#0
MOVHI a1,#1
- MOVNES pc,lr
+ BXNE lr
ANDS a4,a3,#3
CMP a4,#2
BLE compare_loop_up_l1 /* need to branch 'cos PSR used */
@@ -1039,11 +1039,11 @@ GLABEL(compare_loop_up)
CMP ip,a4
MVNLO a1,#0
MOVHI a1,#1
- MOVNES pc,lr
+ BXNE lr
LABEL(compare_loop_up_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* xptr[] == yptr[] -> 0 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v6,lr} /* save work regs */
MOV v6,a1 /* move xptr to v6 */
MOV a1,#1 /* set result to +1 */
@@ -1055,11 +1055,11 @@ LABEL(compare_loop_up_l2)
CMPEQ v5,v2
CMPEQ lr,ip
MVNLO a1,#0 /* x < y -> -1 (a1 already holds +1) */
- LDMNEFD sp!,{v1-v6,pc}^
+ LDMNEFD sp!,{v1-v6,pc}
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT compare_loop_up_l2 /* if count still positive then loop */
MOV a1,#0
- LDMFD sp!,{v1-v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v6,pc} /* restore work regs and return */
/* extern uintD addto_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
entry
@@ -1111,11 +1111,11 @@ LABEL(add_loop_down_l0) /* at l
BICS a4,a4,#3 /* set counter to multiple of 4 */
BNE add_loop_down_l3 /* branch if more adds to do */
ADCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMEQFD sp!,{v6,pc}^ /* and return */
+ LDMEQFD sp!,{v6,pc} /* and return */
LABEL(add_loop_down_l1)
BICS a4,a4,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* no adds, so C = 0 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
CMN a4,#0 /* clear carry bit */
STMFD sp!,{v6,lr}
LABEL(add_loop_down_l3)
@@ -1132,7 +1132,7 @@ LABEL(add_loop_down_l2)
TEQ a4,#0 /* are we done ? */
BNE add_loop_down_l2 /* if count non-zero then loop */
ADC a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMFD sp!,{v1-v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v6,pc} /* restore work regs and return */
/* extern uintD inc_loop_down (uintD* ptr, uintC count);
entry
@@ -1150,11 +1150,11 @@ GLABEL(inc_loop_down)
ADDS a4,a4,#1 /* align the total to a multiple of 2 */
STR a4,[a1]
MOVNE a1,#0 /* set result to 0 */
- MOVNES pc,lr /* return 0 if non-zero result */
+ BXNE lr /* return 0 if non-zero result */
LABEL(inc_loop_down_l1)
BICS a4,a2,#1 /* set counter to multiple of 2 */
MOVEQ a1,#1 /* return 1 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
MOV ip,a1 /* move ptr to ip */
MOV a1,#0 /* set result to 0 */
ANDS a3,a4,#3
@@ -1163,10 +1163,10 @@ LABEL(inc_loop_down_l1)
ADDS a3,a3,#1 /* INC the two words */
ADDEQS a2,a2,#1 /* stopping when first word non-zero */
STMDB ip!,{a2,a3} /* store 2 results */
- MOVNES pc,lr /* return 0 if any result non-zero */
+ BXNE lr /* return 0 if any result non-zero */
SUBS a4,a4,#2 /* decrement counter by 2 */
MOVEQ a1,#1 /* if finished loop then */
- MOVEQS pc,lr /* return 1 */
+ BXEQ lr /* return 1 */
LABEL(inc_loop_down_l3) /* now a multiple of 4 words */
STMFD sp!,{v1,lr} /* save work regs */
LABEL(inc_loop_down_l2)
@@ -1176,11 +1176,11 @@ LABEL(inc_loop_down_l2)
ADDEQS a3,a3,#1
ADDEQS a2,a2,#1
STMDB ip!,{a2,a3,v1,lr} /* store 4 results */
- LDMNEFD sp!,{v1,pc}^ /* return 0 if any result non-zero */
+ LDMNEFD sp!,{v1,pc} /* return 0 if any result non-zero */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT inc_loop_down_l2 /* if count still positive then loop */
MOV a1,#1
- LDMFD sp!,{v1,pc}^ /* restore work regs and return 1 */
+ LDMFD sp!,{v1,pc} /* restore work regs and return 1 */
/* extern uintD sub_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count);
entry
@@ -1206,7 +1206,7 @@ GLABEL(sub_loop_down)
LABEL(sub_loop_down_l4) /* drop through for better instr. timings */
BICS a4,a4,#3 /* set counter to multiple of 4 */
SBCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMEQFD sp!,{v6,pc}^ /* and return */
+ LDMEQFD sp!,{v6,pc} /* and return */
STMFD sp!,{v1-v5} /* save work regs */
B sub_loop_down_l2 /* branch if more subtracts to do */
LABEL(sub_loop_down_l0)
@@ -1224,7 +1224,7 @@ LABEL(sub_loop_down_l0)
LABEL(sub_loop_down_l1)
BICS a4,a4,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* no subtracts, so C = 0 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
CMP a4,#0 /* set carry bit, since a4 > 0 */
STMFD sp!,{v1-v6,lr} /* save work regs */
LABEL(sub_loop_down_l2)
@@ -1239,7 +1239,7 @@ LABEL(sub_loop_down_l2)
TEQ a4,#0 /* are we done ? */
BNE sub_loop_down_l2 /* if count non-zero then loop */
SBC a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMFD sp!,{v1-v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v6,pc} /* restore work regs and return */
/* extern uintD subx_loop_down (uintD* sourceptr1, uintD* sourceptr2, uintD* destptr, uintC count, uintD carry);
entry
@@ -1269,7 +1269,7 @@ LABEL(subx_loop_down_lsub)
LABEL(subx_loop_down_l4) /* drop through for better instr. timings */
BICS a4,a4,#3 /* set counter to multiple of 4 */
SBCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMEQFD sp!,{v6,pc}^ /* and return */
+ LDMEQFD sp!,{v6,pc} /* and return */
STMFD sp!,{v1-v5} /* save work regs */
B subx_loop_down_l2 /* branch if more subtracts to do */
LABEL(subx_loop_down_l0)
@@ -1287,7 +1287,7 @@ LABEL(subx_loop_down_l0)
LABEL(subx_loop_down_l1)
BICS a4,a4,#3 /* set counter to multiple of 4 */
SBCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{v1-v6,lr} /* save work regs */
LABEL(subx_loop_down_l2)
LDMDB a2!,{v1,v2,v3,ip} /* load 4 words in one go */
@@ -1301,7 +1301,7 @@ LABEL(subx_loop_down_l2)
TEQ a4,#0 /* are we done ? */
BNE subx_loop_down_l2 /* if count non-zero then loop */
SBC a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMFD sp!,{v1-v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v6,pc} /* restore work regs and return */
/* extern uintD subfrom_loop_down (uintD* sourceptr, uintD* destptr, uintC count);
entry
@@ -1326,7 +1326,7 @@ GLABEL(subfrom_loop_down)
LABEL(subfrom_loop_down_l4) /* drop through for better instr. timings */
BICS a4,a3,#3 /* set counter to multiple of 4 */
SBCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMEQFD sp!,{pc}^ /* and return */
+ LDMEQFD sp!,{pc} /* and return */
STMFD sp!,{v1-v5} /* save work regs */
B subfrom_loop_down_l2 /* branch if more subtracts to do */
LABEL(subfrom_loop_down_l0)
@@ -1344,7 +1344,7 @@ LABEL(subfrom_loop_down_l0)
LABEL(subfrom_loop_down_l1)
BICS a4,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,#0 /* no subtracts, so C = 0 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
CMP a4,#0 /* set carry bit, since a4 > 0 */
STMFD sp!,{v1-v5,lr} /* save work regs */
LABEL(subfrom_loop_down_l2)
@@ -1359,7 +1359,7 @@ LABEL(subfrom_loop_down_l2)
TEQ a4,#0 /* are we done ? */
BNE subfrom_loop_down_l2 /* if count non-zero then loop */
SBC a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMFD sp!,{v1-v5,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v5,pc} /* restore work regs and return */
/* extern uintD dec_loop_down (uintD* ptr, uintC count);
entry
@@ -1377,11 +1377,11 @@ GLABEL(dec_loop_down)
SUBS a4,a4,#1 /* align the total to a multiple of 2 */
STR a4,[a1]
MOVCS a1,#0 /* set result to 0 */
- MOVCSS pc,lr /* return 0 if non-zero result */
+ BXCS lr /* return 0 if non-zero result */
LABEL(dec_loop_down_l1)
BICS a4,a2,#1 /* set counter to multiple of 2 */
MVNEQ a1,#0 /* return -1 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
MOV ip,a1 /* move ptr to ip */
MOV a1,#0 /* set result to 0 */
ANDS a3,a4,#3
@@ -1390,10 +1390,10 @@ LABEL(dec_loop_down_l1)
SUBS a3,a3,#1 /* DEC the two words */
SUBCCS a2,a2,#1 /* stopping when first word non-zero */
STMDB ip!,{a2,a3} /* store 2 results */
- MOVCSS pc,lr /* return 0 if any result non-zero */
+ BXCS lr /* return 0 if any result non-zero */
SUBS a4,a4,#2 /* decrement counter by 2 */
MVNEQ a1,#0 /* if finished loop then */
- MOVEQS pc,lr /* return -1 */
+ BXEQ lr /* return -1 */
LABEL(dec_loop_down_l3) /* now a multiple of 4 words */
STMFD sp!,{v1,lr} /* save work regs */
LABEL(dec_loop_down_l2)
@@ -1403,11 +1403,11 @@ LABEL(dec_loop_down_l2)
SUBCCS a3,a3,#1
SUBCCS a2,a2,#1
STMDB ip!,{a2,a3,v1,lr} /* store 4 results */
- LDMCSFD sp!,{v1,pc}^ /* return 0 if any carry */
+ LDMCSFD sp!,{v1,pc} /* return 0 if any carry */
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT dec_loop_down_l2 /* if count still positive then loop */
MVN a1,#0
- LDMFD sp!,{v1,pc}^ /* restore work regs and return -1 */
+ LDMFD sp!,{v1,pc} /* restore work regs and return -1 */
/* extern void neg_loop_down (uintD* ptr, uintC count);
entry
@@ -1421,7 +1421,7 @@ LABEL(dec_loop_down_l2)
GLABEL(neg_loop_down)
CMPS a2,#0 /* count = 0 ? */
MOVEQ a1,#0 /* yup, so return 0 */
- MOVEQS pc,lr
+ BXEQ lr
LABEL(neg_loop_down_l1) /* skip all the zero words first */
LDR a3,[a1,#-4]! /* compare words against zero */
CMPS a3,#0 /* downwards in memory */
@@ -1429,13 +1429,13 @@ LABEL(neg_loop_down_l1) /* skip
SUBS a2,a2,#1 /* reduce count of words */
BNE neg_loop_down_l1 /* more ?, so loop */
MOV a1,#0 /* return 0 */
- MOVS pc,lr
+ BX lr
LABEL(neg_loop_down_l2)
RSB a3,a3,#0 /* first non-zero word = -word */
STR a3,[a1]
SUBS a2,a2,#1
MVNEQ a1,#0 /* done ? -> return -1 */
- MOVEQS pc,lr
+ BXEQ lr
/* now NOT rest of the words */
ANDS a3,a2,#3 /* multiple of 4 words ? */
BEQ neg_loop_down_l3 /* yup, so branch */
@@ -1453,7 +1453,7 @@ LABEL(neg_loop_down_l2)
LABEL(neg_loop_down_l3)
BICS a4,a2,#3 /* set counter to multiple of 4 */
MVNEQ a1,#0 /* set result to -1 */
- MOVEQS pc,lr /* if zero then we're done */
+ BXEQ lr /* if zero then we're done */
STMFD sp!,{lr} /* save work regs */
LABEL(neg_loop_down_l4)
LDMDB a1,{a2,a3,ip,lr} /* load 4 words in one go,NO writeback */
@@ -1465,7 +1465,7 @@ LABEL(neg_loop_down_l4)
SUBS a4,a4,#4 /* decrement counter by 4 */
BGT neg_loop_down_l4 /* if count still positive then loop */
MVN a1,#0 /* set result to -1 */
- LDMFD sp!,{pc}^ /* restore work regs and return -1 */
+ LDMFD sp!,{pc} /* restore work regs and return -1 */
/* extern uintD shift1left_loop_down (uintD* ptr, uintC count);
entry
@@ -1485,7 +1485,7 @@ GLABEL(shift1left_loop_down)
LABEL(shift1left_loop_down_l1)
BICS a4,a2,#1 /* set counter to multiple of 2 */
ADCEQ a1,a4,a4 /* if zero set result to C (a4 is 0) */
- MOVEQS pc,lr /* and return */
+ BXEQ lr /* and return */
ANDS a3,a4,#3 /* multiple of 4 words ? */
BEQ shift1left_loop_down_l3 /* yup, so branch */
LDMDB a1,{a2,a3} /* load 2 words in one go */
@@ -1494,7 +1494,7 @@ LABEL(shift1left_loop_down_l1)
STMDB a1!,{a2,a3} /* store 2 results */
BICS a4,a4,#2 /* decrement counter by 2 */
ADCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- MOVEQS pc,lr /* and return */
+ BXEQ lr /* and return */
LABEL(shift1left_loop_down_l3) /* now a multiple of 4 words */
STMFD sp!,{lr} /* save work regs */
LABEL(shift1left_loop_down_l2)
@@ -1508,7 +1508,7 @@ LABEL(shift1left_loop_down_l2)
TEQ a4,#0 /* are we done ? */
BNE shift1left_loop_down_l2 /* if count non-zero then loop */
ADC a1,a4,a4 /* set result to Carry (a4 is 0) */
- LDMFD sp!,{pc}^ /* restore work regs and return 1 */
+ LDMFD sp!,{pc} /* restore work regs and return 1 */
/* extern uintD shiftleft_loop_down (uintD* ptr, uintC count, uintC i, uintD carry);
entry
@@ -1542,7 +1542,7 @@ GLABEL(shiftleft_loop_down)
LABEL(shiftleft_loop_down_l1)
BICS ip,a2,#3 /* set counter to multiple of 4 */
MOVEQ a1,a4 /* if zero then we're done */
- LDMEQFD sp!,{v6,pc}^ /* so return last shift out */
+ LDMEQFD sp!,{v6,pc} /* so return last shift out */
STMFD sp!,{v1-v3} /* save work regs */
LABEL(shiftleft_loop_down_l2)
LDMDB a1,{a2,v1,v2,v3} /* load 4 words in one go */
@@ -1558,7 +1558,7 @@ LABEL(shiftleft_loop_down_l2)
SUBS ip,ip,#4 /* decrement counter by 4 */
BGT shiftleft_loop_down_l2 /* if count still positive then loop */
MOV a1,a4 /* result = last shift out */
- LDMFD sp!,{v1-v3,v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v3,v6,pc} /* restore work regs and return */
/* extern uintD shiftleftcopy_loop_down (uintD* sourceptr, uintD* destptr, uintC count, uintC i);
entry
@@ -1593,7 +1593,7 @@ GLABEL(shiftleftcopy_loop_down)
LABEL(shiftleftcopy_loop_down_l1)
BICS ip,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,v5 /* if zero then we're done */
- LDMEQFD sp!,{v5,v6,pc}^ /* so return last shift out */
+ LDMEQFD sp!,{v5,v6,pc} /* so return last shift out */
STMFD sp!,{v1-v3} /* save work regs */
LABEL(shiftleftcopy_loop_down_l2)
LDMDB a1!,{a3,v1,v2,v3} /* load 4 words in one go */
@@ -1609,7 +1609,7 @@ LABEL(shiftleftcopy_loop_down_l2)
SUBS ip,ip,#4 /* decrement counter by 4 */
BGT shiftleftcopy_loop_down_l2 /* if count still positive then loop */
MOV a1,v5 /* result = last shift out */
- LDMFD sp!,{v1-v3,v5,v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v3,v5,v6,pc} /* restore work regs and return */
/* extern uintD shift1right_loop_up (uintD* ptr, uintC count, uintD carry);
entry
@@ -1630,7 +1630,7 @@ GLABEL(shift1right_loop_up)
LABEL(shift1right_loop_up_l1)
BICS a4,a2,#1 /* set counter to multiple of 2 */
MOVEQ a1,a4,RRX /* if zero set result to C (a4 is 0) */
- MOVEQS pc,lr /* and return */
+ BXEQ lr /* and return */
ANDS a3,a4,#3 /* multiple of 4 words ? */
BEQ shift1right_loop_up_l3 /* yup, so branch */
LDMIA a1,{a2,a3} /* load 2 words in one go */
@@ -1639,7 +1639,7 @@ LABEL(shift1right_loop_up_l1)
STMIA a1!,{a2,a3} /* store 2 results */
BICS a4,a4,#2 /* decrement counter by 2 */
ADCEQ a1,a4,a4 /* set result to Carry (a4 is 0) */
- MOVEQS pc,lr /* and return */
+ BXEQ lr /* and return */
LABEL(shift1right_loop_up_l3) /* now a multiple of 4 words */
STMFD sp!,{lr} /* save work regs */
LABEL(shift1right_loop_up_l2)
@@ -1653,7 +1653,7 @@ LABEL(shift1right_loop_up_l2)
TEQ a4,#0 /* are we done ? */
BNE shift1right_loop_up_l2 /* if count non-zero then loop */
MOV a1,a4,RRX /* set result to Carry (a4 is 0) */
- LDMFD sp!,{pc}^ /* restore work regs and return 1 */
+ LDMFD sp!,{pc} /* restore work regs and return 1 */
/* extern uintD shiftright_loop_up (uintD* ptr, uintC count, uintC i);
entry
@@ -1688,7 +1688,7 @@ LABEL(shiftright_loop_up_l0)
LABEL(shiftright_loop_up_l1)
BICS ip,a2,#3 /* set counter to multiple of 4 */
MOVEQ a1,a4 /* if zero then we're done */
- LDMEQFD sp!,{v6,pc}^ /* so return last shift out */
+ LDMEQFD sp!,{v6,pc} /* so return last shift out */
STMFD sp!,{v1-v3} /* save work regs */
LABEL(shiftright_loop_up_l2)
LDMIA a1,{v1,v2,v3,lr} /* load 4 words in one go */
@@ -1704,7 +1704,7 @@ LABEL(shiftright_loop_up_l2)
SUBS ip,ip,#4 /* decrement counter by 4 */
BGT shiftright_loop_up_l2 /* if count still positive then loop */
MOV a1,a4 /* result = last shift out */
- LDMFD sp!,{v1-v3,v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v3,v6,pc} /* restore work regs and return */
/* extern uintD shiftrightsigned_loop_up (uintD* ptr, uintC count, uintC i);
entry
@@ -1759,7 +1759,7 @@ LABEL(shiftrightcopy_loop_up_l0)
LABEL(shiftrightcopy_loop_up_l1)
BICS ip,a3,#3 /* set counter to multiple of 4 */
MOVEQ a1,v5 /* if zero then we're done */
- LDMEQFD sp!,{v5,v6,pc}^ /* so return last shift out */
+ LDMEQFD sp!,{v5,v6,pc} /* so return last shift out */
STMFD sp!,{v1-v3} /* save work regs */
LABEL(shiftrightcopy_loop_up_l2)
LDMIA a1!,{v1,v2,v3,lr} /* load 4 words in one go */
@@ -1775,7 +1775,7 @@ LABEL(shiftrightcopy_loop_up_l2)
SUBS ip,ip,#4 /* decrement counter by 4 */
BGT shiftrightcopy_loop_up_l2 /* if count still positive then loop */
MOV a1,v5 /* result = last shift out */
- LDMFD sp!,{v1-v3,v5,v6,pc}^ /* restore work regs and return */
+ LDMFD sp!,{v1-v3,v5,v6,pc} /* restore work regs and return */
#ifndef HAVE_umull
/* mulu32_64_vregs
@@ -1800,7 +1800,7 @@ LABEL(mulu32_64_vregs)
ADDCS v2,v2,#0x10000 /* carry from above add */
ADDS v1,v4,ip,LSL #16 /* x is now bottom 32 bits of result */
ADC ip,v2,ip,LSR #16 /* hi is top 32 bits */
- MOVS pc,lr
+ BX lr
#endif /* HAVE_umull */
/* extern uintD mulusmall_loop_down (uintD digit, uintD* ptr, uintC len, uintD newdigit);
@@ -1816,7 +1816,7 @@ LABEL(mulu32_64_vregs)
GLABEL(mulusmall_loop_down)
CMP a3,#0
MOVEQ a1,a4
- MOVEQS pc,lr
+ BXEQ lr
#ifdef HAVE_umull
STMFD sp!,{v1,lr}
LABEL(mulusmall_loop_down_l1)
@@ -1828,7 +1828,7 @@ LABEL(mulusmall_loop_down_l1)
SUBS a3,a3,#1 /* len-- */
BNE mulusmall_loop_down_l1 /* until len==0 */
MOV a1,a4 /* return carry */
- LDMFD sp!,{v1,pc}^
+ LDMFD sp!,{v1,pc}
#else
STMFD sp!,{v1-v2,lr}
LABEL(mulusmall_loop_down_l1)
@@ -1850,7 +1850,7 @@ LABEL(mulusmall_loop_down_l1)
SUBS a3,a3,#1 /* len-- */
BNE mulusmall_loop_down_l1 /* until len==0 */
MOV a1,a4 /* return carry */
- LDMFD sp!,{v1-v2,pc}^
+ LDMFD sp!,{v1-v2,pc}
#endif
/* extern void mulu_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
@@ -1875,7 +1875,7 @@ LABEL(mulu_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE mulu_loop_down_l1 /* until len==0 */
STR v5,[a3,#-4]! /* *--destptr = carry */
- LDMFD sp!,{v1,v5,pc}^
+ LDMFD sp!,{v1,v5,pc}
#else
STMFD sp!,{v1-v5,lr}
MOV v5,#0
@@ -1888,7 +1888,7 @@ LABEL(mulu_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE mulu_loop_down_l1 /* until len==0 */
STR v5,[a3,#-4]! /* *--destptr = carry */
- LDMFD sp!,{v1-v5,pc}^
+ LDMFD sp!,{v1-v5,pc}
#endif
/* extern void muluadd_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
@@ -1916,7 +1916,7 @@ LABEL(muluadd_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE muluadd_loop_down_l1 /* until len==0 */
MOV a1,v5 /* return carry */
- LDMFD sp!,{v1,v5,pc}^
+ LDMFD sp!,{v1,v5,pc}
#else
STMFD sp!,{v1-v5,lr}
MOV v5,#0
@@ -1932,7 +1932,7 @@ LABEL(muluadd_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE muluadd_loop_down_l1 /* until len==0 */
MOV a1,v5 /* return carry */
- LDMFD sp!,{v1-v5,pc}^
+ LDMFD sp!,{v1-v5,pc}
#endif
/* extern void mulusub_loop_down (uintD digit, uintD* sourceptr, uintD* destptr, uintC len);
@@ -1960,7 +1960,7 @@ LABEL(mulusub_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE mulusub_loop_down_l1 /* until len==0 */
MOV a1,v5 /* return carry */
- LDMFD sp!,{v1,v5,pc}^
+ LDMFD sp!,{v1,v5,pc}
#else
STMFD sp!,{v1-v5,lr}
MOV v5,#0
@@ -1976,7 +1976,7 @@ LABEL(mulusub_loop_down_l1)
SUBS a4,a4,#1 /* len-- */
BNE mulusub_loop_down_l1 /* until len==0 */
MOV a1,v5 /* return carry */
- LDMFD sp!,{v1-v5,pc}^
+ LDMFD sp!,{v1-v5,pc}
#endif
END

22
clisp-db.patch Normal file
View file

@ -0,0 +1,22 @@
--- modules/berkeley-db/configure.orig 2017-02-24 10:37:24.000000000 -0700
+++ modules/berkeley-db/configure 2017-02-24 10:42:31.636232558 -0700
@@ -5297,7 +5297,7 @@ if ${ac_cv_dbe_set_errcall_accept_dbe+:}
else
CFLAGS_save="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="$CFLAGS -Wno-uninitialized -Werror"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <db.h>
--- modules/berkeley-db/configure.in.orig 2017-02-24 10:37:24.000000000 -0700
+++ modules/berkeley-db/configure.in 2017-02-24 10:42:31.636232558 -0700
@@ -48,7 +48,7 @@ dnl <http://www.sleepycat.com/docs/ref/u
AC_CACHE_CHECK([whether DB_ENV->set_errcall() accepts DBE],
ac_cv_dbe_set_errcall_accept_dbe,[
CFLAGS_save="$CFLAGS"
-CFLAGS="$CFLAGS -Werror"
+CFLAGS="$CFLAGS -Wno-uninitialized -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <db.h>
void my_callback (const DB_ENV* dbe, const char *errpfx, const char *msg) {}],
[[DB_ENV dbe; dbe.set_errcall(&dbe,&my_callback);]])],

View file

@ -1,10 +0,0 @@
--- src/encoding.d.orig 2024-12-28 00:47:59.000000000 -0700
+++ src/encoding.d 2025-02-04 20:28:22.743346018 -0700
@@ -2592,6 +2592,7 @@ local maygc object encoding_from_name (c
pushSTACK(STACK_0);
}
}
+ free(name);
#else
unused const_name; unused context;
pushSTACK(unbound); /* :charset */

View file

@ -1,33 +1,145 @@
--- src/spvw_fault.d.orig 2017-10-08 11:45:53.000000000 -0600
+++ src/spvw_fault.d 2018-02-18 12:41:32.934240135 -0700
@@ -289,7 +289,7 @@ modexp bool handle_fault_range (int prot
local void xmprotect (aint addr, uintM len, int prot) {
if (mprotect((void*)addr,len,prot) < 0) {
- fprintf(stderr,GETTEXTL("mprotect(0x%lx,%d,%d) failed."),addr,len,prot);
+ fprintf(stderr,GETTEXTL("mprotect(0x%lx,%lu,%d) failed."),addr,(unsigned long)len,prot);
errno_out(OS_errno);
abort();
}
--- src/spvw_language.d.orig 2017-05-25 09:49:04.000000000 -0600
+++ src/spvw_language.d 2018-02-18 12:41:32.934240135 -0700
@@ -172,7 +172,7 @@ global void init_language
{ /* Invalidate the gettext internal caches. */
char *td = textdomain(NULL);
if (NULL == td) {
- ANSIC_ERROR("textdomain",NULL);
+ ANSIC_ERROR("textdomain","");
}
if (NULL == textdomain(td)) {
ANSIC_ERROR("textdomain",td);
--- src/spvw_sigsegv.d.orig 2018-01-09 16:04:26.000000000 -0700
+++ src/spvw_sigsegv.d 2018-03-03 13:52:32.985798284 -0700
@@ -62,7 +62,7 @@ local void print_mem_stats (void) {
/* Put a breakpoint here if you want to catch CLISP just before it dies. */
global void sigsegv_handler_failed (void* address) {
fprint(stderr,"\n");
- fprintf(stderr,GETTEXTL("SIGSEGV cannot be cured. Fault address = 0x%lx."),
+ fprintf(stderr,GETTEXTL("SIGSEGV cannot be cured. Fault address = %p."),
address);
fprint(stderr,"\n");
print_mem_stats();
--- src/errunix.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/errunix.d 2017-02-24 10:41:33.217732236 -0700
@@ -94,7 +94,7 @@ global _Noreturn void OS_error_arg (obje
> FILE: Filename (with quotation marks) as constant ASCIZ-String
> LINE: line number */
global void errno_out_low (int errorcode, const char* file, uintL line) {
- fprintf(stderr,"\n[%s:%d] errno = %d", file, line, errorcode);
+ fprintf(stderr,"\n[%s:%" PRIul "] errno = %d", file, line, errorcode);
var object code = ANSIC_error_code_converter(errorcode);
if (symbolp(code)) { /* known name? */
fputs(" (",stderr);
--- src/lispbibl.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/lispbibl.d 2017-02-24 10:41:33.223732185 -0700
@@ -1013,7 +1013,7 @@
#endif
typedef unsigned char UBYTE;
#else
- #error No 8 bit integer type? -- Which Interger-type has 8 Bit?
+ #error No 8 bit integer type? -- Which Integer-type has 8 Bit?
#endif
#if (short_bitsize==16)
typedef short SWORD;
@@ -1024,26 +1024,36 @@
#if (long_bitsize==32)
typedef long SLONG;
typedef unsigned long ULONG;
+ #define PRIsl "ld"
+ #define PRIul "lu"
#elif (int_bitsize==32)
typedef int SLONG;
typedef unsigned int ULONG;
+ #define PRIsl "d"
+ #define PRIul "u"
#else
#error No 32 bit integer type? -- Which Integer-type has 32 Bit?
#endif
#if (long_bitsize==64) && !defined(UNIX_CYGWIN32)
typedef long SLONGLONG;
typedef unsigned long ULONGLONG;
+ #define PRIsll "ld"
+ #define PRIull "lu"
#ifndef HAVE_LONG_LONG_INT
#define HAVE_LONG_LONG_INT
#endif
#elif defined(MICROSOFT)
typedef __int64 SLONGLONG;
typedef unsigned __int64 ULONGLONG;
+ #define PRIsll "I64d"
+ #define PRIull "I64u"
#define HAVE_LONG_LONG_INT
#elif defined(HAVE_LONG_LONG_INT)
#if defined(long_long_bitsize) && (long_long_bitsize==64)
typedef long long SLONGLONG;
typedef unsigned long long ULONGLONG;
+ #define PRIsll "lld"
+ #define PRIull "llu"
#else /* useless type */
#undef HAVE_LONG_LONG_INT
#endif
@@ -1685,10 +1695,14 @@ typedef unsigned_int_with_n_bits(intBWLs
#if (intCsize==intWsize)
#define dotimesC dotimesW
#define dotimespC dotimespW
+ #define PRIuintC "hu"
+ #define PRIsintC "hd"
#endif
#if (intCsize==intLsize)
#define dotimesC dotimesL
#define dotimespC dotimespL
+ #define PRIuintC PRIul
+ #define PRIsintC PRIsl
#endif
/* Use 'uintC' for counters, which are small most of the time. */
%% export_def(uintC);
--- src/spvw_debug.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/spvw_debug.d 2017-02-24 10:41:33.224732176 -0700
@@ -81,7 +81,7 @@ local void nobject_out1 (FILE* out, obje
fputc('"',out);
} else if (charp(obj)) {
object name = char_name(char_code(obj));
- fprintf(out,"[%c]",as_cint(char_code(obj)));
+ fprintf(out,"[%c]",(int)as_cint(char_code(obj)));
if (!nullp(name)) {
fputs("=#\\",out);
string_out(out,name);
@@ -120,8 +120,8 @@ local void nobject_out1 (FILE* out, obje
fputc(')',out);
} else if (arrayp(obj)) {
fprintf(out,"#<array %d",Array_type(obj));
- if (mdarrayp(obj)) fprintf(out," rank=%d",Iarray_rank(obj));
- else fprintf(out," len=%d",vector_length(obj));
+ if (mdarrayp(obj)) fprintf(out," rank=%" PRIul,Iarray_rank(obj));
+ else fprintf(out," len=%" PRIul,vector_length(obj));
fprintf(out," 0x%lx>",as_oint(obj));
} else if (functionp(obj)) {
fputs("#<",out);
@@ -182,7 +182,7 @@ local void nobject_out1 (FILE* out, obje
fputc(')',out);
} else if (hash_table_p(obj)) {
fputs("#(",out); XOUT(S(hash_table));
- fprintf(out," size=%u maxcount=%u mincount=%u\n",
+ fprintf(out," size=%" PRIul " maxcount=%" PRIul " mincount=%" PRIul "\n",
TheHashtable(obj)->ht_size,
(uintL)posfixnum_to_V(TheHashtable(obj)->ht_maxcount),
(uintL)posfixnum_to_V(TheHashtable(obj)->ht_mincount));
@@ -281,10 +281,10 @@ local void nobject_out1 (FILE* out, obje
case DRIVER_frame_info: fputs("DRIVER",out); break;
default: fputs("**UNKNOWN**",out);
}
- fprintf(out," %d>",STACK_item_count(uTheFramepointer(obj),
+ fprintf(out," %" PRIul ">",STACK_item_count(uTheFramepointer(obj),
(gcv_object_t*)STACK_start));
} else if (builtin_stream_p(obj)) {
- fprintf(out,"#<built-in-stream type=%d flags=%d len=%d xlen=%d slen=%ld",
+ fprintf(out,"#<built-in-stream type=%d flags=%d len=%" PRIul " xlen=%" PRIul " slen=%zd",
TheStream(obj)->strmtype,TheStream(obj)->strmflags,
Stream_length(obj),Stream_xlength(obj),strm_len);
switch (TheStream(obj)->strmtype) {
@@ -358,13 +358,13 @@ local int back_trace_depth (const struct
/* print a single struct backtrace_t object
the caller must do begin_system_call()/end_system_call() ! */
local void bt_out (FILE* out, const struct backtrace_t *bt, uintL bt_index) {
- fprintf(out,"[%d/0x%lx]%s ",bt_index,(uintP)bt,
+ fprintf(out,"[%" PRIul "/0x%lx]%s ",bt_index,(uintP)bt,
bt_beyond_stack_p(bt,STACK)?"<":">");
nobject_out(out,bt->bt_function);
if (bt->bt_num_arg >= 0)
fprintf(out," %d args",bt->bt_num_arg);
if (bt->bt_next)
- fprintf(out," delta: STACK=%ud; SP=%ld",
+ fprintf(out," delta: STACK=%" PRIul "; SP=%lu",
STACK_item_count(top_of_back_trace_frame(bt),
top_of_back_trace_frame(bt->bt_next)),
(((long)((char*)(bt->bt_next) - (char*)bt) ^ SPoffset) - SPoffset)
--- src/spvw_memfile.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/spvw_memfile.d 2017-02-24 10:41:33.225732167 -0700
@@ -1817,7 +1817,7 @@ local void loadmem_from_handle (Handle h
(uintL)posfixnum_to_V(header._dumptime.seconds));
#endif
char memdumptime[10+1];
- sprintf(memdumptime,"%u",header._dumptime);
+ sprintf(memdumptime,"%" PRIul,header._dumptime);
O(memory_image_timestamp) = ascii_to_string(memdumptime);
O(memory_image_host) = asciz_to_string(header._dumphost,
Symbol_value(S(utf_8)));

View file

@ -1,38 +0,0 @@
--- src/stream.d.orig 2024-12-28 00:47:59.000000000 -0700
+++ src/stream.d 2025-02-07 11:47:28.448086694 -0700
@@ -4239,6 +4239,9 @@ global uintL iconv_wcslen (object encodi
!= (size_t)(-1)) {
inptr += sizeof(chart); insize -= sizeof(chart);
} else {
+ var int saved_errno = errno;
+ iconv_close(cd);
+ errno = saved_errno;
if (errno != EILSEQ) {
ANSIC_error();
} else {
@@ -4247,6 +4250,7 @@ global uintL iconv_wcslen (object encodi
}
}
} else {
+ iconv_close(cd);
end_system_call();
error_unencodable(encoding,*(const chart*)inptr);
}
@@ -4317,6 +4321,9 @@ global void iconv_wcstombs (object encod
if (iconv(cd,&inptr1,&insize1,&outptr,&outsize) != (size_t)(-1)) {
inptr += sizeof(chart); insize -= sizeof(chart);
} else {
+ var int saved_errno = errno;
+ iconv_close(cd);
+ errno = saved_errno;
if (errno != EILSEQ) {
ANSIC_error();
} else {
@@ -4325,6 +4332,7 @@ global void iconv_wcstombs (object encod
}
}
} else {
+ iconv_close(cd);
end_system_call();
error_unencodable(encoding,*(const chart*)inptr);
}

11
clisp-libsvm.patch Normal file
View file

@ -0,0 +1,11 @@
--- modules/libsvm/libsvm.lisp.orig 2017-02-24 10:37:24.000000000 -0700
+++ modules/libsvm/libsvm.lisp 2017-02-24 10:42:20.857324755 -0700
@@ -31,7 +31,7 @@
(c-lines "
#if !defined(HAVE_SVM_DESTROY_MODEL)
# if defined(HAVE_SVM_FREE_AND_DESTROY_MODEL)
-void svm_destroy_model (svm_model *model){ svm_free_and_destroy_model(&model); }
+void svm_destroy_model (struct svm_model *model){ svm_free_and_destroy_model(&model); }
# else
# error No svm_destroy_model and no svm_free_and_destroy_model!
# endif

11
clisp-linux.patch Normal file
View file

@ -0,0 +1,11 @@
--- modules/bindings/glibc/linux.lisp.orig 2017-02-24 10:37:24.000000000 -0700
+++ modules/bindings/glibc/linux.lisp 2017-02-24 10:42:45.491114052 -0700
@@ -294,6 +294,8 @@
;; for robust mutexes
(def-c-const EOWNERDEAD (:documentation "Owner died")) ; 130
(def-c-const ENOTRECOVERABLE (:documentation "State not recoverable")) ; 131
+(def-c-const ERFKILL (:documentation "Operation not possible due to RF-kill")) ; 132
+(def-c-const EHWPOISON (:documentation "Memory page has hardware error")) ; 133
; -------------------------- <bits/errno.h> -----------------------------------

121
clisp-negshift.patch Normal file
View file

@ -0,0 +1,121 @@
--- src/aridecl.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/aridecl.d 2017-02-24 10:43:07.072929454 -0700
@@ -163,9 +163,9 @@
/* Creates a single float from sign (0 or -1), exponent and mantissa: */
#define make_FF(sign,exp,mant) \
type_data_object(FF_type | (bit(vorz_bit_t) & (sign)), \
- (ffloat)((sign) << (FF_exp_len+FF_mant_len) \
- | (((exp) & (bit(FF_exp_len)-1)) << FF_mant_len) \
- | ((mant) & (bit(FF_mant_len)-1))))
+ (ffloat)(((unsigned int)(sign)) << (FF_exp_len+FF_mant_len) \
+ | ((((unsigned int)exp) & (bit(FF_exp_len)-1)) << FF_mant_len) \
+ | (((unsigned int)mant) & (bit(FF_mant_len)-1))))
/* Single Float 0.0 : */
#define FF_0 make_FF(0,0,0)
/* Single Float 1.0 : */
--- src/lispbibl.d.orig 2017-02-24 10:42:57.481011497 -0700
+++ src/lispbibl.d 2017-02-24 10:43:07.078929402 -0700
@@ -1203,9 +1203,9 @@ typedef signed int signean;
#endif
#endif
/* Minus bit number n (0<=n<32) */
-#define minus_bit(n) (-1L<<(n))
+#define minus_bit(n) ((long)(((unsigned long)-1L)<<(n)))
/* Minus bit number n (0<n<=32) mod 2^32 */
-#define minus_bitm(n) (-2L<<((n)-1))
+#define minus_bitm(n) ((long)(((unsigned long)-2L)<<((n)-1)))
%% export_def(bit(n));
%% #if notused
%% export_def(bitm(n));
@@ -3029,7 +3029,7 @@ typedef signed_int_with_n_bits(intVsize)
#define vbit(n) (LL(1)<<(n))
#define vbitm(n) (LL(2)<<((n)-1))
#define vbit_test(x,n) ((x) & vbit(n))
- #define minus_vbit(n) (-LL(1)<<(n))
+ #define minus_vbit(n) ((long long)(((unsigned long long)-LL(1))<<(n)))
#else
#define vbit bit
#define vbitm bitm
@@ -5363,7 +5363,7 @@ typedef unsigned_int_with_n_bits(char_in
> delta: a constant
< result: incremented fixnum */
#define fixnum_inc(obj,delta) \
- objectplus(obj, (soint)(delta) << oint_data_shift)
+ objectplus(obj, (oint)(delta) << oint_data_shift)
%% export_def(fixnum_inc(obj,delta));
/* posfixnum(x) is a fixnum with value x>=0. */
--- src/spvw_gcmark.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/spvw_gcmark.d 2017-02-24 10:43:07.078929402 -0700
@@ -43,7 +43,7 @@ local void gc_mark (object obj)
goto down; /* and descent */ \
}
#define up_varobject(first_offset) \
- { curr = objectplus(pred,-(soint)(first_offset)<<(oint_addr_shift-addr_shift)); /* becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)(first_offset))<<(oint_addr_shift-addr_shift)); /* becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#define down_nopointers(The) \
@@ -68,7 +68,7 @@ local void gc_mark (object obj)
goto down; /* and descent */ \
}
#define up_iarray() \
- { curr = objectplus(pred,-(soint)iarray_data_offset<<(oint_addr_shift-addr_shift)); /* array becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)iarray_data_offset)<<(oint_addr_shift-addr_shift)); /* array becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#define down_sistring() \
@@ -88,7 +88,7 @@ local void gc_mark (object obj)
goto down; /* and descent */ \
}
#define up_sistring() \
- { curr = objectplus(pred,-(soint)sistring_data_offset<<(oint_addr_shift-addr_shift)); /* array becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)sistring_data_offset)<<(oint_addr_shift-addr_shift)); /* array becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#define down_svector() \
@@ -114,7 +114,7 @@ local void gc_mark (object obj)
goto down; /* and descent */ \
}}
#define up_svector() \
- { curr = objectplus(pred,-(soint)offsetofa(svector_,data)<<(oint_addr_shift-addr_shift)); /* Svector becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)offsetofa(svector_,data))<<(oint_addr_shift-addr_shift)); /* Svector becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#define down_lrecord() \
@@ -140,7 +140,7 @@ local void gc_mark (object obj)
goto down; /* and descent */ \
}}
#define up_lrecord() \
- { curr = objectplus(pred,-(soint)offsetofa(record_,recdata)<<(oint_addr_shift-addr_shift)); /* Lrecord becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)offsetofa(record_,recdata))<<(oint_addr_shift-addr_shift)); /* Lrecord becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#define down_sxrecord() \
@@ -177,7 +177,7 @@ local void gc_mark (object obj)
#define down_cclosure()
#endif
#define up_sxrecord() \
- { curr = objectplus(pred,-(soint)offsetofa(record_,recdata)<<(oint_addr_shift-addr_shift)); /* record becomes current object */ \
+ { curr = objectplus(pred,((oint)-(soint)offsetofa(record_,recdata))<<(oint_addr_shift-addr_shift)); /* record becomes current object */ \
pred = prepred; goto up; /* go further up */ \
}
#ifdef STANDARD_HEAPCODES
@@ -348,7 +348,7 @@ local void gc_mark (object obj)
curr = currently marked object, store in *pred */
var object prepred = *(gcv_object_t*)ThePointer(pred); /* old predecessor */
*(gcv_object_t*)ThePointer(pred) = curr; /* write back component */
- pred = objectplus(pred,-(soint)(sizeof(gcv_object_t))<<(oint_addr_shift-addr_shift)); /* go to next component */
+ pred = objectplus(pred,((oint)-(soint)sizeof(gcv_object_t))<<(oint_addr_shift-addr_shift)); /* go to next component */
if (marked(ThePointer(pred))) { /* already marked? */
curr = /* next component, without mark */
without_mark_bit(*(gcv_object_t*)ThePointer(pred));
@@ -383,7 +383,7 @@ local void gc_mark (object obj)
case_subr: /* SUBR */
up_sxrecord();
case_sstring: /* simple-string */
- { var object pred_ = objectplus(pred,-(soint)sistring_data_offset<<(oint_addr_shift-addr_shift));
+ { var object pred_ = objectplus(pred,((oint)-(soint)sistring_data_offset)<<(oint_addr_shift-addr_shift));
if (sstring_reallocatedp(TheSstring(pred_)))
up_sistring();
}

View file

@ -1,11 +0,0 @@
--- src/foreign.d.orig 2021-06-28 14:32:42.000000000 -0600
+++ src/foreign.d 2022-02-03 21:52:22.932176743 -0700
@@ -2417,7 +2417,7 @@ local void count_walk_post (object fvd,
{
unused(fvd); unused(obj); unused(walk);
}
-local maygc void convert_to_foreign_needs (object fvd, object obj,
+local maygc __attribute__((noinline)) void convert_to_foreign_needs (object fvd, object obj,
struct foreign_layout *sas)
{
struct walk_lisp walk

View file

@ -1,18 +0,0 @@
Fixes UBSAN errors such as:
../src/spvw_typealloc.d:146:450: runtime error: member access within misaligned address 0x17000000009c for type 'struct s8string_', which requires 8 byte alignment
0x17000000009c: note: pointer points here
53 45 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
^
--- src/lispbibl.d.orig 2025-02-07 19:25:44.207789666 -0700
+++ src/lispbibl.d 2025-02-10 11:38:31.029348227 -0700
@@ -6006,7 +6006,7 @@ typedef signed_int_with_n_bits(intVsize)
#if defined(I80386) || defined(POWERPC) || defined(ARM) || defined(S390)
#define varobject_alignment 4
#endif
-#if defined(SPARC) || defined(HPPA) || defined(MIPS) || defined(DECALPHA) || defined(IA64) || defined(AMD64) || defined(ARM64) || defined(RISCV64) || defined(LOONGARCH64)
+#if defined(SPARC) || defined(HPPA) || defined(MIPS) || defined(DECALPHA) || defined(IA64) || defined(AMD64) || defined(ARM64) || defined(RISCV64) || defined(LOONGARCH64) || defined(POWERPC64)
#define varobject_alignment 8
#endif
#if (!defined(TYPECODES) || defined(GENERATIONAL_GC)) && (varobject_alignment < 4)

View file

@ -1,15 +0,0 @@
--- tests/streams.tst.orig 2024-07-04 15:55:33.000000000 -0600
+++ tests/streams.tst 2024-07-08 14:50:23.547424881 -0600
@@ -1288,9 +1288,9 @@ T
(streamp (setq s (make-stream :error))) T
(or (not (search "#P" (prin1-to-string s))) (pathnamep (truename s))) T
(write-line "foo" s) "foo"
-(let ((*reopen-open-file* nil)) ; stdout can be a file, it will be detected!
- (with-open-file (copy s :direction :output) (streamp copy)))
-#.(if (member (ext:operating-system-type) '("AIX" "Haiku" "Minix" "Windows") :test #'equal) 'ERROR 'T)
+;;(let ((*reopen-open-file* nil)) ; stdout can be a file, it will be detected!
+;; (with-open-file (copy s :direction :output) (streamp copy)))
+;;#.(if (member (ext:operating-system-type) '("AIX" "Haiku" "Minix" "Windows") :test #'equal) 'ERROR 'T)
#+clisp
(progn

View file

@ -1,75 +0,0 @@
--- modules/readline/readline.lisp.orig 2024-12-28 00:47:59.000000000 -0700
+++ modules/readline/readline.lisp 2025-02-10 15:17:06.296266455 -0700
@@ -126,7 +126,7 @@ name in ~/.inputrc. This is preferred wa
(:documentation "Get keymap with given name (e.g., emacs, vi)")
(:arguments (name c-string)) (:return-type keymap))
-(def-call-out get-keymap-name (:name "rl_get_keymap_by_name") ; untested
+(def-call-out get-keymap-name (:name "rl_get_keymap_name") ; untested
(:arguments (keymap keymap)) (:return-type c-string))
;;; Binding Keys
@@ -255,7 +255,7 @@ name in ~/.inputrc. This is preferred wa
;;; Redisplay
(def-call-out redisplay (:name "rl_redisplay")
- (:arguments) (:return-type int))
+ (:arguments) (:return-type nil))
(def-call-out forced-update-display (:name "rl_forced_update_display")
(:arguments) (:return-type int))
@@ -308,7 +308,7 @@ name in ~/.inputrc. This is preferred wa
(def-call-out copy-text (:name "rl_copy_text") ; untested
(:arguments (start int) (end int))
- (:return-type int))
+ (:return-type c-string :malloc-free))
(def-call-out kill-text (:name "rl_kill_text") ; untested
(:arguments (start int) (end int))
@@ -316,7 +316,7 @@ name in ~/.inputrc. This is preferred wa
(def-call-out push-macro-input (:name "rl_push_macro_input")
(:arguments (macro c-string))
- (:return-type int))
+ (:return-type nil))
;;; Character input
@@ -362,7 +362,7 @@ name in ~/.inputrc. This is preferred wa
(def-call-out extend-line-buffer (:name "rl_extend_line_buffer") ; untested
(:arguments (len int))
- (:return-type int))
+ (:return-type nil))
(def-call-out ding (:name "rl_ding")
(:arguments) (:return-type int))
@@ -404,7 +404,7 @@ name in ~/.inputrc. This is preferred wa
(:return-type int))
(def-call-out clear-history (:name "rl_clear_history") ; untested
- (:arguments) (:return-type int))
+ (:arguments) (:return-type nil))
(def-call-out get-termcap (:name "rl_get_termcap") ; untested
(:arguments (cap c-string))
@@ -647,10 +647,16 @@ and the completion character will be ins
(:documentation "reading multiple-key command"))
(def-c-const state-vicmdonce (:name "RL_STATE_VICMDONCE") ; 0x400000
(:documentation "entered vi command mode at least once"))
-(def-c-const state-redisplaying (:name "RL_STATE_REDISPLAYING") ; 0x800000
+(def-c-const state-charsearch (:name "RL_STATE_CHARSEARCH") ; 0x800000
+ (:documentation "vi mode char search"))
+(def-c-const state-redisplaying (:name "RL_STATE_REDISPLAYING") ; 0x1000000
(:documentation "updating terminal display"))
-(def-c-const state-done (:name "RL_STATE_DONE") ; 0x1000000
+(def-c-const state-done (:name "RL_STATE_DONE") ; 0x2000000
(:documentation "done; accepted line"))
+(def-c-const state-timeout (:name "RL_STATE_TIMEOUT") ; 0x4000000
+ (:documentation "done; timed out"))
+(def-c-const state-eof (:name "RL_STATE_EOF") ; 0x8000000
+ (:documentation "done; got eof on read"))
(def-c-const readerr ; (-2)
(:documentation " Input error; can be returned by (*rl_getc_function)

View file

@ -1,11 +0,0 @@
--- src/lispbibl.d.orig 2018-11-11 17:05:07.000000000 -0700
+++ src/lispbibl.d 2019-03-19 20:25:04.289654626 -0600
@@ -11884,7 +11884,7 @@ All other long words on the LISP-Stack a
#define FAST_SP
#endif
#elif defined(GNU) && defined(SP_register)
- register __volatile__ aint __SP __asm__(SP_register);
+ register aint __SP __asm__(SP_register);
#ifdef SPARC64
#define SP() (__SP+2048)
#else

View file

@ -1,18 +0,0 @@
Avoids this warning:
../src/unixaux.d: In function install_signal_handler:
../src/unixaux.d:734:3: warning: siginterrupt is deprecated: Use sigaction with SA_RESTART instead [-Wdeprecated-declarations]
734 | siginterrupt(sig,0);
| ^~~~~~~~~~~~
--- src/unixaux.d.orig 2024-07-12 09:22:07.000000000 -0600
+++ src/unixaux.d 2024-08-26 15:42:17.202775988 -0600
@@ -703,7 +703,7 @@ global int wait2 (pid_t child) {
global signal_handler_t install_signal_handler (int sig,
signal_handler_t handler) {
var signal_handler_t old_handler;
- #if defined(USE_SIGACTION)
+ #if defined(HAVE_SIGACTION)
var struct sigaction old_sa;
var struct sigaction new_sa;
memset(&new_sa,0,sizeof(new_sa));

View file

@ -1,15 +0,0 @@
Fixes this UBSAN error:
../src/eval.d:5808:11: runtime error: variable length array bound evaluates to non-positive value 0
--- src/eval.d.orig 2024-12-28 00:47:59.000000000 -0700
+++ src/eval.d 2025-02-10 09:39:02.285198247 -0700
@@ -5805,7 +5805,7 @@ local /*maygc*/ Values interpret_bytecod
var uintL private_SP_length =
(uintL)(((Codevec)codeptr)->ccv_spdepth_1)
+ jmpbufsize * (uintL)(((Codevec)codeptr)->ccv_spdepth_jmpbufsize);
- var DYNAMIC_ARRAY(private_SP_space,SPint,private_SP_length);
+ var DYNAMIC_ARRAY(private_SP_space,SPint,private_SP_length+1);
var SPint* private_SP = &private_SP_space[private_SP_length];
#undef SP_
#undef _SP_

View file

@ -1,15 +0,0 @@
Fixes this UBSAN error:
runtime error: variable length array bound evaluates to non-positive value 0
--- src/io.d.orig 2024-12-28 00:47:59.000000000 -0700
+++ src/io.d 2025-02-10 09:50:29.262067759 -0700
@@ -8158,7 +8158,7 @@ local maygc void pr_array (const gcv_obj
LEVEL_CHECK;
{ /* determine rank and fetch dimensions and sub-product: */
var uintL r = (uintL)Iarray_rank(obj); /* rank */
- var DYNAMIC_ARRAY(dims_sizes,array_dim_size_t,r); /* dynamically allocated array */
+ var DYNAMIC_ARRAY(dims_sizes,array_dim_size_t,r?r:1); /* dynamically allocated array */
iarray_dims_sizes(obj,dims_sizes); /* fill */
var uintL depth = r; /* depth of recursion */
var pr_array_locals_t locals; /* local variables */

View file

@ -1,23 +0,0 @@
Fixes this USBAN error:
../src/sort.d:42:18: runtime error: applying non-zero offset 18446744073709551584 to null pointer
--- src/sort.d.orig 2024-12-28 00:47:59.000000000 -0700
+++ src/sort.d 2025-02-10 09:33:00.121016044 -0700
@@ -39,7 +39,7 @@
/* sort(v,n); sorts the array v[0]..v[n-1] in ascending order. */
local void SORT(SORTID,sort) (SORT_ELEMENT* v, uintL n)
{
- var SORT_ELEMENT* w = &v[-1];
+ var SORT_ELEMENT* w;
/* w[1]..w[n] point to the same elements as v[0]..v[n-1] .
We collect the numbers 1,...,n to a balanced binary subtree,
so that k has the children 2*k and 2*k+1.
@@ -70,6 +70,7 @@ local void SORT(SORTID,sort) (SORT_ELEME
}
if (n<=1) /* nothing to do? */
return;
+ w = &v[-1];
{ /* Because of 2*(floor(n/2)+1) > n,
w[floor(n/2)+1]..w[n] is already sorted. */
var uintL r;

193
clisp-volatile.patch Normal file
View file

@ -0,0 +1,193 @@
--- src/control.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/control.d 2017-02-24 10:42:57.475011548 -0700
@@ -1591,7 +1591,7 @@ LISPFUN(maplap,seclass_default,2,0,rest,
LISPSPECFORM(tagbody, 0,0,body)
{ /* (TAGBODY {tag | statement}), CLTL p. 130 */
- var object body = popSTACK();
+ var volatile object body = popSTACK();
{ /* build GENV-frame: */
var gcv_object_t* top_of_frame = STACK; /* pointer to frame */
pushSTACK(aktenv.go_env);
--- src/eval.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/eval.d 2017-02-24 10:42:57.479011514 -0700
@@ -710,10 +710,10 @@ global void throw_to (object tag) {
global maygc void invoke_handlers (object cond) {
/* Also deactivates the handler being called, and all newer handlers.
the handler-ranges, which are screened off: */
- var stack_range_t* other_ranges = inactive_handlers;
+ var stack_range_t* volatile other_ranges = inactive_handlers;
var stack_range_t new_range;
/* Search for Handler-Frame, that handles a Type with (TYPEP cond type): */
- var gcv_object_t* FRAME = STACK;
+ var gcv_object_t* volatile FRAME = STACK;
while (1) {
/* search in Stack starting at FRAME for a suitable HANDLER-Frame: */
if (!(other_ranges == NULL) && (FRAME == other_ranges->low_limit)) {
@@ -726,7 +726,7 @@ global maygc void invoke_handlers (objec
if (framecode(FRAME_(0)) == HANDLER_frame_info) { /* Handler-Frame? */
/* loop over types of the vectors #(type1 label1 ... typem labelm): */
var uintL m2 = Svector_length(Car(FRAME_(frame_handlers))); /* 2*m */
- var uintL i = 0;
+ var volatile uintL i = 0;
do {
pushSTACK(cond); /* save cond */
pushSTACK(cond);
@@ -2398,7 +2398,7 @@ local maygc void trace_call (object fun,
/* But ':ALLOW-OTHER-KEYS NIL' hides a subsequent ':ALLOW-OTHER-KEYS T' \
(see CLHS 3.4.1.4.1.1). */ \
var bool allow_hidden = false; /* true if seen ':ALLOW-OTHER-KEYS NIL' */ \
- var uintC check_count=argcount; \
+ var volatile uintC check_count=argcount; \
while (check_count--) { \
var object kw = NEXT(argptr); /* next Argument */ \
var object val = NEXT(argptr); /* and value for it */ \
@@ -2441,7 +2441,7 @@ local maygc void trace_call (object fun,
> found_statement: what is to be done, if value found */
#define find_keyword_value(notfound_statement,found_statement) \
{ var gcv_object_t* argptr = rest_args_pointer; \
- var uintC find_count; \
+ var volatile uintC find_count; \
dotimesC(find_count,argcount, { \
if (eq(NEXT(argptr),keyword)) goto kw_found; /* right keyword? */ \
argptr skipSTACKop -1; /* NEXT */ \
@@ -2460,8 +2460,9 @@ local maygc void trace_call (object fun,
< mv_count/mv_space: values
< STACK: cleaned up, = args_pointer
can trigger GC */
-local maygc Values funcall_iclosure (object closure, gcv_object_t* args_pointer,
- uintC argcount)
+local maygc Values funcall_iclosure (volatile object closure,
+ gcv_object_t* args_pointer,
+ volatile uintC argcount)
{
/* 1st step: finish building of APPLY-frame: */
var sp_jmp_buf my_jmp_buf;
@@ -2649,7 +2650,7 @@ local maygc Values funcall_iclosure (obj
pushSTACK(NIL); /* start of list */
if (argcount>0) {
var gcv_object_t* ptr = args_pointer STACKop -(uintP)argcount;
- var uintC count;
+ var volatile uintC count;
dotimespC(count,argcount, {
var object new_cons = allocate_cons();
Car(new_cons) = BEFORE(ptr);
@@ -2664,7 +2665,7 @@ local maygc Values funcall_iclosure (obj
/* process &KEY-parameters: */
if (!numberp(TheIclosure(closure)->clos_keywords)) {
/* Keyword-parameters present */
- var gcv_object_t* rest_args_pointer = args_pointer;
+ var gcv_object_t* volatile rest_args_pointer = args_pointer;
/* argcount = number of remaining arguments */
/* halve argcount --> number of pairs Key.Value: */
if (argcount%2) { /* number was odd -> not paired: */
@@ -2936,7 +2937,7 @@ local Values eval_ffunction (object fun)
> form: form
< mv_count/mv_space: values
can trigger GC */
-modexp maygc Values eval (object form)
+modexp maygc Values eval (volatile object form)
{
start:
/* Test for Keyboard-Interrupt: */
@@ -2991,7 +2992,7 @@ modexp maygc Values eval (object form)
> form: Form
< mv_count/mv_space: values
can trigger GC */
-global maygc Values eval_no_hooks (object form) {
+global maygc Values eval_no_hooks (volatile object form) {
var sp_jmp_buf my_jmp_buf;
/* build EVAL-Frame: */
{
@@ -5734,7 +5735,8 @@ local maygc Values funcall_closure (obje
#define GOTO_ERROR(label) goto label
#define DEBUG_CHECK_BYTEPTR(b) do{}while(0)
#endif
-local /*maygc*/ Values interpret_bytecode_ (object closure_in, Sbvector codeptr,
+local /*maygc*/ Values interpret_bytecode_ (volatile object closure_in,
+ volatile Sbvector codeptr,
const uintB* byteptr_in)
{
GCTRIGGER_IF(true, {
@@ -5763,7 +5765,7 @@ local /*maygc*/ Values interpret_bytecod
#endif
TRACE_CALL(closure,'B','C');
/* situate closure in STACK, below the arguments: */
- var gcv_object_t* closureptr = (pushSTACK(closure), &STACK_0);
+ var gcv_object_t* volatile closureptr = (pushSTACK(closure), &STACK_0);
#ifndef FAST_SP
/* If there is no fast SP-Access, one has to introduce
an extra pointer: */
--- src/lispbibl.d.orig 2017-02-24 10:41:33.223732185 -0700
+++ src/lispbibl.d 2017-02-24 10:42:57.481011497 -0700
@@ -9103,7 +9103,7 @@ All other long words on the LISP-Stack a
#define FAST_SP
#endif
#elif defined(GNU) && defined(SP_register)
- register __volatile__ aint __SP __asm__(SP_register);
+ register aint __SP __asm__(SP_register);
#ifdef SPARC64
#define SP() (__SP+2048)
#else
--- src/record.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/record.d 2017-02-24 10:42:57.482011489 -0700
@@ -1406,7 +1406,7 @@ LISPFUNNR(punbound,0) { /* not Foldable
> obj: the same CLOS instance, not a forward pointer
< result: the same CLOS instance, not a forward pointer
can trigger GC */
-global maygc object update_instance (object user_obj, object obj) {
+global maygc object update_instance (object user_obj, volatile object obj) {
/* Note about the handling of multiple consecutive class redefinitions:
When there are multiple class redefinitions before an instance gets to
be updated, we call UPDATE-INSTANCE-FOR-REDEFINED-CLASS once for each
--- src/spvw.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/spvw.d 2017-02-24 10:42:57.482011489 -0700
@@ -3466,7 +3466,7 @@ local inline void main_actions (struct a
var gcv_object_t* top_of_frame = STACK; /* pointer over frame */
var sp_jmp_buf returner; /* return point */
var const char* const* fileptr = &p->argv_init_files[0];
- var uintL count = p->argv_init_filecount;
+ var volatile uintL count = p->argv_init_filecount;
finish_entry_frame(DRIVER,returner,,goto done_driver_init_files;);
do {
pushSTACK(asciz_to_string(*fileptr++,O(misc_encoding)));
@@ -3484,8 +3484,8 @@ local inline void main_actions (struct a
if (p->argv_compile_filecount > 0) {
var gcv_object_t* top_of_frame = STACK; /* pointer over frame */
var sp_jmp_buf returner; /* return point */
- var const argv_compile_file_t* fileptr = &p->argv_compile_files[0];
- var uintL count = p->argv_compile_filecount;
+ var const argv_compile_file_t* volatile fileptr = &p->argv_compile_files[0];
+ var volatile uintL count = p->argv_compile_filecount;
finish_entry_frame(DRIVER,returner,,goto done_driver_compile_files;);
do {
var uintC argcount = 1;
--- src/stream.d.orig 2017-02-24 10:37:24.000000000 -0700
+++ src/stream.d 2017-02-24 10:42:57.484011471 -0700
@@ -5839,7 +5839,7 @@ local maygc void clear_output_unbuffered
close_ochannel(stream, abort);
> stream : Channel-Stream
> abort: flag: non-0 => ignore errors */
-local maygc void close_ochannel (object stream, uintB abort) {
+local maygc void close_ochannel (volatile object stream, uintB abort) {
pushSTACK(stream);
MAYBE_IGNORE_ERRORS(abort,oconv_unshift_output_unbuffered(stream));
stream = STACK_0;
@@ -8325,7 +8325,7 @@ local void closed_buffered (object strea
> stream : File-Stream.
> abort: flag: non-0 => ignore errors
changed in stream: all Components except name and truename */
-local maygc void close_buffered (object stream, uintB abort) {
+local maygc void close_buffered (volatile object stream, uintB abort) {
/* Handle=NIL (Stream already closed) -> finished: */
if (nullp(BufferedStream_channel(stream)))
return;
@@ -9310,7 +9310,7 @@ local maygc char** lisp_completion (char
}
sstring_un_realloc(m);
var uintL charcount = Sstring_length(m);
- var const chart* ptr1;
+ var const chart* volatile ptr1;
unpack_sstring_alloca(m,charcount,0, ptr1=);
{ /* (CATCH 'SYS::CONVERSION-FAILURE ...) */
var gcv_object_t* top_of_frame = STACK;

View file

@ -1,103 +1,62 @@
# Upstream has not made a new release since 2010
%global srcname clisp
%global commit f66220939ea7d36fd085384afa4a0ec44597d499
%global date 20250504
%global forgeurl https://gitlab.com/gnu-clisp/clisp
# There is a plus on the end for unreleased versions, not for released versions
%global instdir %{name}-%{version}+
# This package uses toplevel ASMs which are incompatible with LTO
%global _lto_cflags %{nil}
%bcond gtk2 %[!(0%{?rhel} > 9)]
# Mercurial snapshot
%global hgver 20170224hg
Name: clisp
Summary: ANSI Common Lisp implementation
Version: 2.49.95
Version: 2.49
Release: 24.%{hgver}%{?dist}
%forgemeta
# The project as a whole is GPL-2.0-or-later. Exceptions:
# - Some documentation is dual-licensed as GPL-2.0-or-later OR GFDL-1.2-or-later
# - src/gllib is LGPL-2.1-or-later
# - src/socket.d and modules/clx/mit-clx/doc.lisp are HPND
# - src/xthread.d and modules/asdf/asdf.lisp are X11
License: GPL-2.0-or-later AND (GPL-2.0-or-later OR GFDL-1.2-or-later) AND LGPL-2.1-or-later AND HPND AND X11
Release: 5%{?dist}
License: GPLv2
URL: http://www.clisp.org/
VCS: git:%{forgeurl}.git
Source0: %{forgesource}
# Upstream dropped this file from the distribution
Source1: https://gitlab.com/sam-s/clhs/-/raw/master/clhs.el
# Updated translations
Source2: http://translationproject.org/latest/clisp/sv.po
Source3: http://translationproject.org/latest/clisp/de.po
# https://sourceforge.net/p/clisp/patches/32/
# The source for this package was pulled from upstream's mercurial repository.
# Use the following commands to generate the tarball:
# hg clone -u cf1453aed337 http://hg.code.sf.net/p/clisp/clisp clisp-2.49
# rm -fr clisp-2.49/.hg*
# tar cvJf clisp-2.49-20170224hg.tar.xz clisp-2.49
Source0: %{name}-%{version}-%{hgver}.tar.xz
#Source0: http://downloads.sourceforge.net/clisp/%%{name}-%%{version}.tar.bz2
# http://sourceforge.net/tracker/?func=detail&aid=3529607&group_id=1355&atid=301355
Patch0: %{name}-format.patch
# The combination of register and volatile is nonsensical
Patch1: %{name}-register-volatile.patch
# A test that writes to /dev/pts/0 succeeds or fails apparently at random.
# I can only guess that /dev/pts/0 may or may not be what the test expects.
# Perhaps we are racing with something else that allocates a pty. Disable
# the test for now.
Patch2: %{name}-pts-access.patch
# Do not call the deprecated siginterrupt function
Patch3: %{name}-siginterrupt.patch
# Fix an iconv leak in stream.d
Patch4: %{name}-iconv-close.patch
# Fix a memory leak in encoding.d
# https://gitlab.com/gnu-clisp/clisp/-/merge_requests/11
Patch5: %{name}-encoding-leak.patch
# Fix undefined behavior in SORT
Patch6: %{name}-undefined-behavior-sort.patch
# Fix undefined behavior in interpret_bytecode_
Patch7: %{name}-undefined-behavior-eval.patch
# Fix undefined behavior in pr_array
Patch8: %{name}-undefined-behavior-io.patch
# Fix misaligned memory accesses on ppc64le
Patch9: %{name}-ppc64le-alignment.patch
# Fix some mismatched readline function declarations
# https://gitlab.com/gnu-clisp/clisp/-/merge_requests/13
Patch10: %{name}-readline.patch
# Work around a problem inlining a function on ppc64le
# See https://bugzilla.redhat.com/show_bug.cgi?id=2049371
Patch100: %{name}-no-inline.patch
# http://sourceforge.net/tracker/?func=detail&aid=3529615&group_id=1355&atid=301355
Patch1: %{name}-arm.patch
# http://sourceforge.net/tracker/?func=detail&aid=3572511&group_id=1355&atid=301355
Patch2: %{name}-libsvm.patch
# http://sourceforge.net/tracker/?func=detail&aid=3572516&group_id=1355&atid=301355
Patch3: %{name}-db.patch
# Linux-specific fixes. Sent upstream 25 Jul 2012.
Patch4: %{name}-linux.patch
# Add missing volatile keywords.
Patch5: %{name}-volatile.patch
# Left shift of a signed value invokes undefined behabvior.
Patch6: %{name}-negshift.patch
# Fix an aliasing issue, causes a build failure on ARM.
Patch7: %{name}-alias.patch
BuildRequires: compat-readline5-devel
BuildRequires: dbus-devel
BuildRequires: diffutils
BuildRequires: emacs
BuildRequires: fcgi-devel
BuildRequires: ffcall-devel
BuildRequires: ffcall
BuildRequires: gcc
BuildRequires: gdbm-devel
BuildRequires: gettext-devel
BuildRequires: ghostscript
BuildRequires: glibc-langpack-en
BuildRequires: glibc-langpack-fr
BuildRequires: glibc-langpack-ja
BuildRequires: glibc-langpack-zh
BuildRequires: ghostscript-core
BuildRequires: groff
%if %{with gtk2}
BuildRequires: gtk2-devel
BuildRequires: libglade2-devel
%endif
BuildRequires: libXaw-devel
BuildRequires: libXft-devel
BuildRequires: libdb-devel
BuildRequires: libglade2-devel
BuildRequires: libsigsegv-devel
BuildRequires: libsvm-devel
BuildRequires: libunistring-devel
BuildRequires: libxcrypt-devel
BuildRequires: make
BuildRequires: pari-devel
BuildRequires: pari-gp
BuildRequires: libpq-devel
BuildRequires: readline-devel
BuildRequires: vim-filesystem
#BuildRequires: pari-devel
BuildRequires: pcre-devel
BuildRequires: postgresql-devel
BuildRequires: zlib-devel
# See Red Hat bugs 238954 (ppc64) and 925155 (aarch64)
ExcludeArch: %{power64} aarch64
Requires: emacs-filesystem
Requires: vim-filesystem
@ -106,24 +65,25 @@ Requires: vim-filesystem
Provides: bundled(gnulib)
%description
ANSI Common Lisp is a high-level, general-purpose programming language. GNU
CLISP is a Common Lisp implementation by Bruno Haible of Karlsruhe University
and Michael Stoll of Munich University, both in Germany. It mostly supports
the Lisp described in the ANSI Common Lisp standard. It runs on most Unix
workstations (GNU/Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Tru64, HP-UX,
BeOS, NeXTstep, IRIX, AIX and others) and on other systems (Windows NT/2000/XP,
Windows 95/98/ME) and needs only 4 MiB of RAM.
ANSI Common Lisp is a high-level, general-purpose programming
language. GNU CLISP is a Common Lisp implementation by Bruno Haible
of Karlsruhe University and Michael Stoll of Munich University, both
in Germany. It mostly supports the Lisp described in the ANSI Common
Lisp standard. It runs on most Unix workstations (GNU/Linux, FreeBSD,
NetBSD, OpenBSD, Solaris, Tru64, HP-UX, BeOS, NeXTstep, IRIX, AIX and
others) and on other systems (Windows NT/2000/XP, Windows 95/98/ME)
and needs only 4 MiB of RAM.
It is Free Software and may be distributed under the terms of GNU GPL, while
it is possible to distribute commercial proprietary applications compiled with
GNU CLISP.
It is Free Software and may be distributed under the terms of GNU GPL,
while it is possible to distribute commercial proprietary applications
compiled with GNU CLISP.
The user interface comes in English, German, French, Spanish, Dutch, Russian
and Danish, and can be changed at run time. GNU CLISP includes an
interpreter, a compiler, a debugger, CLOS, MOP, a foreign language interface,
sockets, i18n, fast bignums and more. An X11 interface is available through
CLX, Garnet, CLUE/CLIO. GNU CLISP runs Maxima, ACL2 and many other Common
Lisp packages.
The user interface comes in English, German, French, Spanish, Dutch,
Russian and Danish, and can be changed at run time. GNU CLISP
includes an interpreter, a compiler, a debugger, CLOS, MOP, a foreign
language interface, sockets, i18n, fast bignums and more. An X11
interface is available through CLX, Garnet, CLUE/CLIO. GNU CLISP runs
Maxima, ACL2 and many other Common Lisp packages.
%package devel
@ -137,29 +97,44 @@ Files necessary for linking CLISP programs.
%prep
%forgesetup
%autopatch -M99 -p0
%ifarch %{power64}
%autopatch 100 -p0
%endif
%setup -q
%patch0
%patch1
%patch2
%patch3
%patch4
%patch5
%patch6
%patch7
%conf
cp -p %{SOURCE1} emacs
cp -p %{SOURCE2} %{SOURCE3} src/po
# Convince CLisp to build against compat-readline5 instead of readline.
# This is to avoid pulling the GPLv3 readline 6 into a GPLv2 CLisp binary.
# See Red Hat bug #511303.
mkdir -p readline/include
ln -s %{_includedir}/readline5/readline readline/include/readline
ln -s %{_libdir}/readline5 readline/%{_lib}
# Update config.guess and config.sub
cp -p /usr/lib/rpm/redhat/config.{guess,sub} src/build-aux
# Change URLs not affected by the --hyperspec argument to configure
sed -i.orig 's|lisp.org/HyperSpec/Body/chap-7.html|lispworks.com/documentation/HyperSpec/Body/07_.htm|' \
src/clos-package.lisp
touch -r src/clos-package.lisp.orig src/clos-package.lisp
rm -f src/clos-package.lisp.orig
for f in src/_README.*; do
sed -i.orig 's|lisp.org/HyperSpec/FrontMatter|lispworks.com/documentation/HyperSpec/Front|' $f
touch -r ${f}.orig $f
rm -f ${f}.orig
done
# We only link against libraries in system directories, so we need -L dir in
# place of -Wl,-rpath -Wl,dir
cp -p src/build-aux/config.rpath config.rpath.orig
sed -i -e 's/${wl}-rpath ${wl}/-L/g' src/build-aux/config.rpath
# Do not use -Werror, or we get build failures on every new gcc version
sed -i '/CFLAGS -Werror/d' modules/berkeley-db/configure
# Do not override our choice of optimization flags
sed -i "/CFLAGS/s/'-O'/''/;/Z_XCFLAGS/s/' -O'//" src/makemake.in
# When building modules, put -Wl,--as-needed before the libraries to link
sed -i "s/CC='\${CC}'/CC='\${CC} -Wl,--as-needed'/" src/makemake.in
# Fix modules that need access to symbols in libgnu.a
sed -i 's/\(${GLLIB_A}\) \(${LIBS}\)/-Wl,--whole-archive \1 -Wl,--no-whole-archive \2/' src/makemake.in
# Enable firefox to be the default browser for displaying documentation
sed -i 's/;; \((setq \*browser\* .*)\)/\1/' src/cfgunix.lisp
@ -169,15 +144,14 @@ tar -C modules/clx -xzf modules/clx/clx-manual.tar.gz
chmod -R go+r modules/clx/clx-manual
chmod a-x modules/clx/clx-manual/html/doc-index.cgi
# On some koji builders, something is already listening on port 9090, which
# causes a spurious test failure. Change to port 9096 for the test.
sed -i 's/9090/9096/g' tests/socket.tst
%build
ulimit -s unlimited
# Do not need to specify base modules: i18n, readline, regexp, syscalls.
# The dirkey module currently can only be built on Windows/Cygwin/MinGW.
# The editor module is not in good enough shape to use.
# The matlab, netica, and oracle modules require proprietary code to build.
# The pari module only works with pari 2.3. Fedora currently has pari 2.7.
# The queens module is intended as an example only, not for actual use.
./configure --prefix=%{_prefix} \
--libdir=%{_libdir} \
@ -185,6 +159,7 @@ sed -i 's/9090/9096/g' tests/socket.tst
--infodir=%{_infodir} \
--docdir=%{_pkgdocdir} \
--fsstnd=redhat \
--hyperspec=http://www.lispworks.com/documentation/HyperSpec/ \
--with-module=asdf \
--with-module=berkeley-db \
--with-module=bindings/glibc \
@ -192,77 +167,80 @@ sed -i 's/9090/9096/g' tests/socket.tst
--with-module=dbus \
--with-module=fastcgi \
--with-module=gdbm \
%if %{with gtk2}
--with-module=gtk2 \
%endif
--with-module=libsvm \
--with-module=pari \
--with-module=pcre \
--with-module=postgresql \
--with-module=rawsock \
--with-module=zlib \
--with-libreadline-prefix=$PWD/readline \
--with-ffcall \
--config \
--cbc \
build \
CPPFLAGS='-I/usr/include/libsvm' \
CFLAGS='%{build_cflags} -Wa,--noexecstack' \
LDFLAGS='-Wl,--as-needed -Wl,-z,relro -Wl,-z,noexecstack'
cd build
# Workaround libtool reordering -Wl,--as-needed after all the libraries.
sed -i 's|CC="\(.*g..\)"|CC="\1 -Wl,--as-needed"|' libtool
make
cd -
%ifarch ppc %{power64}
CPPFLAGS="-DNO_GENERATIONAL_GC -DNO_MULTIMAP_FILE -DNO_SINGLEMAP -I/usr/include/readline5 -I/usr/include/libsvm" \
%else
CPPFLAGS="-I/usr/include/readline5 -I/usr/include/libsvm" \
%endif
CFLAGS="%{optflags} -Wa,--noexecstack -L%{_libdir}/readline5" \
LDFLAGS="-Wl,-z,relro -L%{_libdir}/readline5 -Wl,-z,noexecstack"
%install
ulimit -s unlimited
make -C build DESTDIR=%{buildroot} install
cp -a build/full %{buildroot}%{_libdir}/%{instdir}
cp -a build/full %{buildroot}%{_libdir}/%{name}-%{version}+
rm -f %{buildroot}%{_pkgdocdir}/doc/clisp.{dvi,1,ps}
rm -f %{buildroot}%{_pkgdocdir}/{COPYRIGHT,GNU-GPL}
cp -p doc/mop-spec.pdf %{buildroot}%{_pkgdocdir}/doc
cp -p doc/*.png %{buildroot}%{_pkgdocdir}/doc
cp -p doc/Why-CLISP* %{buildroot}%{_pkgdocdir}/doc
cp -p doc/regexp.html %{buildroot}%{_pkgdocdir}/doc
find %{buildroot}%{_libdir} -name '*.dvi' -exec rm -f {} \+
find %{buildroot}%{_libdir} -name '*.dvi' | xargs rm -f
%find_lang %{name}
%find_lang %{name}low
cat %{name}low.lang >> %{name}.lang
# Compile the Emacs interface
pushd %{buildroot}%{_emacs_sitelispdir}
pushd %{buildroot}%{_datadir}/emacs/site-lisp
%{_emacs_bytecompile} *.el
popd
# Put back the original config.rpath
cp -p config.rpath.orig %{buildroot}%{_libdir}/%{instdir}/build-aux/config.rpath
# Fix a missing executable bit
chmod a+x %{buildroot}%{_libdir}/%{instdir}/build-aux/depcomp
# Put back the original config.rpath, and fix executable bits
cp -p config.rpath.orig %{buildroot}/%{_libdir}/%{name}-%{version}+/build-aux/config.rpath
chmod a+x \
%{buildroot}/%{_libdir}/%{name}-%{version}+/build-aux/config.guess \
%{buildroot}/%{_libdir}/%{name}-%{version}+/build-aux/config.sub \
%{buildroot}/%{_libdir}/%{name}-%{version}+/build-aux/depcomp \
%{buildroot}/%{_libdir}/%{name}-%{version}+/build-aux/install-sh \
# Fix paths in the Makefiles
for mk in $(find %{buildroot}%{_libdir} -name Makefile); do
sed -e "s,$PWD/modules,%{_libdir}/%{instdir}," \
sed -e "s,$PWD/modules,%{_libdir}/%{name}-%{version}+," \
-e "s,$PWD/build/clisp,%{_bindir}/clisp," \
-e "s,$PWD/build/linkkit,%{_libdir}/%{instdir}/linkkit," \
-e "s,$PWD/build/linkkit,%{_libdir}/%{name}-%{version}+/linkkit," \
-i $mk
done
for mk in %{buildroot}%{_libdir}/%{instdir}/{base,full}/makevars; do
for mk in %{buildroot}%{_libdir}/%{name}-%{version}+/{base,full}/makevars; do
sed -e "s, -I$PWD[^']*,," \
-e "s,$PWD/readline.*readline/lib[[:digit:]]*,-L%{_libdir}/readline5 -lreadline," \
-e "s,%{_libdir}/lib\([[:alnum:]]*\)\.so,-l\1,g" \
-i $mk
done
# Install config.h, which is needed in some cases
for dir in %{buildroot}%{_libdir}/%{instdir}/*; do
for dir in %{buildroot}%{_libdir}/%{name}-%{version}+/*; do
cp -p build/$(basename $dir)/config.h $dir || :
done
cp -p build/config.h %{buildroot}%{_libdir}/%{instdir}
cp -p build/config.h %{buildroot}%{_libdir}/%{name}-%{version}+
cp -p build/clx/new-clx/config.h \
%{buildroot}%{_libdir}/%{instdir}/clx/new-clx
%{buildroot}%{_libdir}/%{name}-%{version}+/clx/new-clx
# Fix permissions
chmod 0755 %{buildroot}%{_bindir}/%{name}
chmod 0755 %{buildroot}%{_libdir}/%{name}-%{version}+/full/lisp.run
# Fix broken symlinks in the full set
pushd %{buildroot}%{_libdir}/%{instdir}/full
for obj in calls gettext readline regexi; do
pushd %{buildroot}%{_libdir}/%{name}-%{version}+/full
for obj in bogomips calls gettext readline regexi; do
rm -f ${obj}.o
ln -s ../base/${obj}.o ${obj}.o
done
@ -274,22 +252,18 @@ for obj in fastcgi fastcgi_wrappers; do
rm -f ${obj}.o
ln -s ../fastcgi/${obj}.o ${obj}.o
done
for obj in cpari pari; do
rm -f ${obj}.o
ln -s ../pari/${obj}.o ${obj}.o
done
rm -f bdb.o
ln -s ../berkeley-db/bdb.o bdb.o
rm -f clx.o
ln -s ../clx/new-clx/clx.o clx.o
rm -f cpcre.o
ln -s ../pcre/cpcre.o cpcre.o
rm -f dbus.o
ln -s ../dbus/dbus.o dbus.o
rm -f gdbm.o
ln -s ../gdbm/gdbm.o gdbm.o
%if %{with gtk2}
rm -f gtk.o
ln -s ../gtk2/gtk.o gtk.o
%endif
rm -f libsvm.o
ln -s ../libsvm/libsvm.o libsvm.o
rm -f linux.o
@ -306,356 +280,148 @@ popd
ln -s ../../src/modules.c build/base/modules.c
ln -s ../../src/modules.c build/full/modules.c
%check
make -C build check
make -C build extracheck
make -C build base-mod-check
%files -f %{name}.lang
%license COPYRIGHT GNU-GPL
%{_bindir}/clisp
%{_mandir}/man1/clisp.1*
%{_pkgdocdir}/
%dir %{_libdir}/%{instdir}/
%dir %{_libdir}/%{instdir}/asdf/
%{_libdir}/%{instdir}/asdf/asdf.fas
%dir %{_libdir}/%{instdir}/base/
%{_libdir}/%{instdir}/base/lispinit.mem
%{_libdir}/%{instdir}/base/lisp.run
%dir %{_libdir}/%{instdir}/berkeley-db/
%{_libdir}/%{instdir}/berkeley-db/*.fas
%{_libdir}/%{instdir}/berkeley-db/preload.lisp
%dir %{_libdir}/%{instdir}/bindings/
%dir %{_libdir}/%{instdir}/bindings/glibc/
%{_libdir}/%{instdir}/bindings/glibc/*.fas
%dir %{_libdir}/%{instdir}/clx/
%dir %{_libdir}/%{instdir}/clx/new-clx/
%{_libdir}/%{instdir}/clx/new-clx/*.fas
%{_libdir}/%{instdir}/clx/new-clx/clx-preload.lisp
%{_libdir}/%{instdir}/data/
%dir %{_libdir}/%{instdir}/dbus/
%{_libdir}/%{instdir}/dbus/*.fas
%{_libdir}/%{instdir}/dynmod/
%dir %{_libdir}/%{instdir}/fastcgi/
%{_libdir}/%{instdir}/fastcgi/*.fas
%dir %{_libdir}/%{instdir}/full/
%{_libdir}/%{instdir}/full/lispinit.mem
%{_libdir}/%{instdir}/full/lisp.run
%dir %{_libdir}/%{instdir}/gdbm/
%{_libdir}/%{instdir}/gdbm/*.fas
%{_libdir}/%{instdir}/gdbm/preload.lisp
%if %{with gtk2}
%dir %{_libdir}/%{instdir}/gtk2/
%{_libdir}/%{instdir}/gtk2/*.fas
%{_libdir}/%{instdir}/gtk2/preload.lisp
%endif
%dir %{_libdir}/%{instdir}/libsvm/
%{_libdir}/%{instdir}/libsvm/*.fas
%{_libdir}/%{instdir}/libsvm/preload.lisp
%dir %{_libdir}/%{instdir}/pari/
%{_libdir}/%{instdir}/pari/*.fas
%{_libdir}/%{instdir}/pari/preload.lisp
%dir %{_libdir}/%{instdir}/postgresql/
%{_libdir}/%{instdir}/postgresql/*.fas
%dir %{_libdir}/%{instdir}/rawsock/
%{_libdir}/%{instdir}/rawsock/*.fas
%{_libdir}/%{instdir}/rawsock/preload.lisp
%dir %{_libdir}/%{instdir}/zlib/
%{_libdir}/%{instdir}/zlib/*.fas
%{_emacs_sitelispdir}/*
%{vimfiles_root}/after/syntax/*
%dir %{_libdir}/%{name}-%{version}+/
%dir %{_libdir}/%{name}-%{version}+/asdf/
%{_libdir}/%{name}-%{version}+/asdf/asdf.fas
%dir %{_libdir}/%{name}-%{version}+/base/
%{_libdir}/%{name}-%{version}+/base/lispinit.mem
%{_libdir}/%{name}-%{version}+/base/lisp.run
%dir %{_libdir}/%{name}-%{version}+/berkeley-db/
%{_libdir}/%{name}-%{version}+/berkeley-db/*.fas
%dir %{_libdir}/%{name}-%{version}+/bindings/
%dir %{_libdir}/%{name}-%{version}+/bindings/glibc/
%{_libdir}/%{name}-%{version}+/bindings/glibc/*.fas
%dir %{_libdir}/%{name}-%{version}+/clx/
%dir %{_libdir}/%{name}-%{version}+/clx/new-clx/
%{_libdir}/%{name}-%{version}+/clx/new-clx/*.fas
%{_libdir}/%{name}-%{version}+/data/
%dir %{_libdir}/%{name}-%{version}+/dbus/
%{_libdir}/%{name}-%{version}+/dbus/*.fas
%{_libdir}/%{name}-%{version}+/dynmod/
%dir %{_libdir}/%{name}-%{version}+/fastcgi/
%{_libdir}/%{name}-%{version}+/fastcgi/*.fas
%dir %{_libdir}/%{name}-%{version}+/full/
%{_libdir}/%{name}-%{version}+/full/lispinit.mem
%{_libdir}/%{name}-%{version}+/full/lisp.run
%dir %{_libdir}/%{name}-%{version}+/gdbm/
%{_libdir}/%{name}-%{version}+/gdbm/*.fas
%dir %{_libdir}/%{name}-%{version}+/gtk2/
%{_libdir}/%{name}-%{version}+/gtk2/*.fas
%dir %{_libdir}/%{name}-%{version}+/libsvm/
%{_libdir}/%{name}-%{version}+/libsvm/*.fas
#%%dir %%{_libdir}/%%{name}-%%{version}/pari/
#%%{_libdir}/%%{name}-%%{version}/pari/*.fas
%dir %{_libdir}/%{name}-%{version}+/pcre/
%{_libdir}/%{name}-%{version}+/pcre/*.fas
%dir %{_libdir}/%{name}-%{version}+/postgresql/
%{_libdir}/%{name}-%{version}+/postgresql/*.fas
%dir %{_libdir}/%{name}-%{version}+/rawsock/
%{_libdir}/%{name}-%{version}+/rawsock/*.fas
%dir %{_libdir}/%{name}-%{version}+/zlib/
%{_libdir}/%{name}-%{version}+/zlib/*.fas
%{_datadir}/emacs/site-lisp/*
%{_datadir}/vim/vimfiles/after/syntax/*
%files devel
%doc modules/clx/clx-manual
%{_bindir}/clisp-link
%{_mandir}/man1/clisp-link.1*
%{_libdir}/%{instdir}/asdf/Makefile
%{_libdir}/%{instdir}/asdf/*.lisp
%{_libdir}/%{instdir}/asdf/*.sh
%{_libdir}/%{instdir}/base/*.a
%{_libdir}/%{instdir}/base/*.h
%{_libdir}/%{instdir}/base/*.o
%{_libdir}/%{instdir}/base/makevars
%{_libdir}/%{instdir}/berkeley-db/Makefile
%{_libdir}/%{instdir}/berkeley-db/*.h
%{_libdir}/%{instdir}/berkeley-db/dbi.lisp
%{_libdir}/%{instdir}/berkeley-db/*.o
%{_libdir}/%{instdir}/berkeley-db/*.sh
%{_libdir}/%{instdir}/bindings/glibc/Makefile
%{_libdir}/%{instdir}/bindings/glibc/*.lisp
%{_libdir}/%{instdir}/bindings/glibc/*.o
%{_libdir}/%{instdir}/bindings/glibc/*.sh
%{_libdir}/%{instdir}/build-aux/
%{_libdir}/%{instdir}/clx/new-clx/demos/
%{_libdir}/%{instdir}/clx/new-clx/README
%{_libdir}/%{instdir}/clx/new-clx/Makefile
%{_libdir}/%{instdir}/clx/new-clx/*.h
%{_libdir}/%{instdir}/clx/new-clx/clx.lisp
%{_libdir}/%{instdir}/clx/new-clx/image.lisp
%{_libdir}/%{instdir}/clx/new-clx/resource.lisp
%{_libdir}/%{instdir}/clx/new-clx/*.o
%{_libdir}/%{instdir}/clx/new-clx/*.sh
%{_libdir}/%{instdir}/config.h
%{_libdir}/%{instdir}/dbus/Makefile
%{_libdir}/%{instdir}/dbus/*.h
%{_libdir}/%{instdir}/dbus/*.lisp
%{_libdir}/%{instdir}/dbus/*.o
%{_libdir}/%{instdir}/dbus/*.sh
%{_libdir}/%{instdir}/fastcgi/README
%{_libdir}/%{instdir}/fastcgi/Makefile
%{_libdir}/%{instdir}/fastcgi/*.h
%{_libdir}/%{instdir}/fastcgi/*.lisp
%{_libdir}/%{instdir}/fastcgi/*.o
%{_libdir}/%{instdir}/fastcgi/*.sh
%{_libdir}/%{instdir}/full/*.a
%{_libdir}/%{instdir}/full/*.h
%{_libdir}/%{instdir}/full/*.o
%{_libdir}/%{instdir}/full/makevars
%{_libdir}/%{instdir}/gdbm/Makefile
%{_libdir}/%{instdir}/gdbm/*.h
%{_libdir}/%{instdir}/gdbm/gdbm.lisp
%{_libdir}/%{instdir}/gdbm/*.o
%{_libdir}/%{instdir}/gdbm/*.sh
%if %{with gtk2}
%{_libdir}/%{instdir}/gtk2/Makefile
%{_libdir}/%{instdir}/gtk2/*.cfg
%{_libdir}/%{instdir}/gtk2/*.glade
%{_libdir}/%{instdir}/gtk2/*.h
%{_libdir}/%{instdir}/gtk2/gtk.lisp
%{_libdir}/%{instdir}/gtk2/*.o
%{_libdir}/%{instdir}/gtk2/*.sh
%endif
%{_libdir}/%{instdir}/libsvm/README
%{_libdir}/%{instdir}/libsvm/Makefile
%{_libdir}/%{instdir}/libsvm/*.h
%{_libdir}/%{instdir}/libsvm/libsvm.lisp
%{_libdir}/%{instdir}/libsvm/*.o
%{_libdir}/%{instdir}/libsvm/*.sh
%{_libdir}/%{instdir}/linkkit/
%{_libdir}/%{instdir}/pari/README
%{_libdir}/%{instdir}/pari/Makefile
%{_libdir}/%{instdir}/pari/*.h
%{_libdir}/%{instdir}/pari/desc2lisp.lisp
%{_libdir}/%{instdir}/pari/pari.lisp
%{_libdir}/%{instdir}/pari/*.o
%{_libdir}/%{instdir}/pari/*.sh
%{_libdir}/%{instdir}/postgresql/README
%{_libdir}/%{instdir}/postgresql/Makefile
%{_libdir}/%{instdir}/postgresql/*.h
%{_libdir}/%{instdir}/postgresql/*.lisp
%{_libdir}/%{instdir}/postgresql/*.o
%{_libdir}/%{instdir}/postgresql/*.sh
%{_libdir}/%{instdir}/rawsock/demos/
%{_libdir}/%{instdir}/rawsock/Makefile
%{_libdir}/%{instdir}/rawsock/*.h
%{_libdir}/%{instdir}/rawsock/sock.lisp
%{_libdir}/%{instdir}/rawsock/*.o
%{_libdir}/%{instdir}/rawsock/*.sh
%{_libdir}/%{instdir}/zlib/Makefile
%{_libdir}/%{instdir}/zlib/*.h
%{_libdir}/%{instdir}/zlib/*.lisp
%{_libdir}/%{instdir}/zlib/*.o
%{_libdir}/%{instdir}/zlib/*.sh
%{_libdir}/%{name}-%{version}+/asdf/Makefile
%{_libdir}/%{name}-%{version}+/asdf/*.lisp
%{_libdir}/%{name}-%{version}+/asdf/*.sh
%{_libdir}/%{name}-%{version}+/base/*.a
%{_libdir}/%{name}-%{version}+/base/*.h
%{_libdir}/%{name}-%{version}+/base/*.o
%{_libdir}/%{name}-%{version}+/base/makevars
%{_libdir}/%{name}-%{version}+/berkeley-db/Makefile
%{_libdir}/%{name}-%{version}+/berkeley-db/*.h
%{_libdir}/%{name}-%{version}+/berkeley-db/*.lisp
%{_libdir}/%{name}-%{version}+/berkeley-db/*.o
%{_libdir}/%{name}-%{version}+/berkeley-db/*.sh
%{_libdir}/%{name}-%{version}+/bindings/glibc/Makefile
%{_libdir}/%{name}-%{version}+/bindings/glibc/*.lisp
%{_libdir}/%{name}-%{version}+/bindings/glibc/*.o
%{_libdir}/%{name}-%{version}+/bindings/glibc/*.sh
%{_libdir}/%{name}-%{version}+/build-aux/
%{_libdir}/%{name}-%{version}+/clx/new-clx/demos/
%{_libdir}/%{name}-%{version}+/clx/new-clx/README
%{_libdir}/%{name}-%{version}+/clx/new-clx/Makefile
%{_libdir}/%{name}-%{version}+/clx/new-clx/*.h
%{_libdir}/%{name}-%{version}+/clx/new-clx/*.lisp
%{_libdir}/%{name}-%{version}+/clx/new-clx/*.o
%{_libdir}/%{name}-%{version}+/clx/new-clx/*.sh
%{_libdir}/%{name}-%{version}+/config.h
%{_libdir}/%{name}-%{version}+/dbus/Makefile
%{_libdir}/%{name}-%{version}+/dbus/*.h
%{_libdir}/%{name}-%{version}+/dbus/*.lisp
%{_libdir}/%{name}-%{version}+/dbus/*.o
%{_libdir}/%{name}-%{version}+/dbus/*.sh
%{_libdir}/%{name}-%{version}+/fastcgi/README
%{_libdir}/%{name}-%{version}+/fastcgi/Makefile
%{_libdir}/%{name}-%{version}+/fastcgi/*.h
%{_libdir}/%{name}-%{version}+/fastcgi/*.lisp
%{_libdir}/%{name}-%{version}+/fastcgi/*.o
%{_libdir}/%{name}-%{version}+/fastcgi/*.sh
%{_libdir}/%{name}-%{version}+/full/*.a
%{_libdir}/%{name}-%{version}+/full/*.h
%{_libdir}/%{name}-%{version}+/full/*.o
%{_libdir}/%{name}-%{version}+/full/makevars
%{_libdir}/%{name}-%{version}+/gdbm/Makefile
%{_libdir}/%{name}-%{version}+/gdbm/*.h
%{_libdir}/%{name}-%{version}+/gdbm/*.lisp
%{_libdir}/%{name}-%{version}+/gdbm/*.o
%{_libdir}/%{name}-%{version}+/gdbm/*.sh
%{_libdir}/%{name}-%{version}+/gtk2/Makefile
%{_libdir}/%{name}-%{version}+/gtk2/*.cfg
%{_libdir}/%{name}-%{version}+/gtk2/*.glade
%{_libdir}/%{name}-%{version}+/gtk2/*.h
%{_libdir}/%{name}-%{version}+/gtk2/*.lisp
%{_libdir}/%{name}-%{version}+/gtk2/*.o
%{_libdir}/%{name}-%{version}+/gtk2/*.sh
%{_libdir}/%{name}-%{version}+/libsvm/README
%{_libdir}/%{name}-%{version}+/libsvm/Makefile
%{_libdir}/%{name}-%{version}+/libsvm/*.h
%{_libdir}/%{name}-%{version}+/libsvm/*.lisp
%{_libdir}/%{name}-%{version}+/libsvm/*.o
%{_libdir}/%{name}-%{version}+/libsvm/*.sh
%{_libdir}/%{name}-%{version}+/linkkit/
#%%{_libdir}/%%{name}-%%{version}/pari/README
#%%{_libdir}/%%{name}-%%{version}/pari/Makefile
#%%{_libdir}/%%{name}-%%{version}/pari/*.h
#%%{_libdir}/%%{name}-%%{version}/pari/*.lisp
#%%{_libdir}/%%{name}-%%{version}/pari/*.o
#%%{_libdir}/%%{name}-%%{version}/pari/*.sh
%{_libdir}/%{name}-%{version}+/pcre/Makefile
%{_libdir}/%{name}-%{version}+/pcre/*.h
%{_libdir}/%{name}-%{version}+/pcre/*.lisp
%{_libdir}/%{name}-%{version}+/pcre/*.o
%{_libdir}/%{name}-%{version}+/pcre/*.sh
%{_libdir}/%{name}-%{version}+/postgresql/README
%{_libdir}/%{name}-%{version}+/postgresql/Makefile
%{_libdir}/%{name}-%{version}+/postgresql/*.h
%{_libdir}/%{name}-%{version}+/postgresql/*.lisp
%{_libdir}/%{name}-%{version}+/postgresql/*.o
%{_libdir}/%{name}-%{version}+/postgresql/*.sh
%{_libdir}/%{name}-%{version}+/rawsock/demos/
%{_libdir}/%{name}-%{version}+/rawsock/Makefile
%{_libdir}/%{name}-%{version}+/rawsock/*.h
%{_libdir}/%{name}-%{version}+/rawsock/*.lisp
%{_libdir}/%{name}-%{version}+/rawsock/*.o
%{_libdir}/%{name}-%{version}+/rawsock/*.sh
%{_libdir}/%{name}-%{version}+/zlib/Makefile
%{_libdir}/%{name}-%{version}+/zlib/*.h
%{_libdir}/%{name}-%{version}+/zlib/*.lisp
%{_libdir}/%{name}-%{version}+/zlib/*.o
%{_libdir}/%{name}-%{version}+/zlib/*.sh
%{_datadir}/aclocal/clisp.m4
%changelog
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.95-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Mon Jun 02 2025 Jerry James <loganjerry@gmail.com> - 2.49.95-4
- Update to latest git snapshot
- Drop one upstreamed patch to fix undefined behavior
* Fri Feb 14 2025 Jerry James <loganjerry@gmail.com> - 2.49.95-3
- Add patches to fix more undefined behavior
- Fix misaligned memory accesses on ppc64le
- Fix mismatched readline function declarations
* Fri Feb 7 2025 Jerry James <loganjerry@gmail.com> - 2.49.95-3
- Add patch to fix undefined behavior (rhbz#2339979)
- Add two patches to fix memory leaks
- Do not force -O1
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.95-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Mon Jan 13 2025 Jerry James <loganjerry@gmail.com> - 2.49.95-2
- Update to latest git snapshot
- Move configuration steps to %%conf
* Mon Nov 25 2024 Jerry James <loganjerry@gmail.com> - 2.49.95-1
- Version 2.49.95
- Drop upstreamed patches: db, c99, bdb-mismatched-pointer, new-clx, pari
* Sat Oct 5 2024 Jerry James <loganjerry@gmail.com> - 2.49.93-40
- Rebuild for pari 2.17.0
* Tue Sep 3 2024 Jerry James <loganjerry@gmail.com> - 2.49.93-39
- Update to latest git snapshot
- Add patch to fix FTBFS in the new-clx code
- Add patch to avoid calling the deprecated siginterrupt function
- Add VCS field
- Setting LC_ALL is no longer necessary
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-38
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-37
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-36
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Dec 1 2023 Jerry James <loganjerry@gmail.com> - 2.49.93-35
- Fix a mismatched pointer type error with GCC 14
* Wed Aug 16 2023 Jerry James <loganjerry@gmail.com> - 2.49.93-34
- Build without pcre support (rhbz#2128278)
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-33
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jul 18 2023 Jerry James <loganjerry@gmail.com> - 2.49.93-32
- Update to fix message typos
* Mon May 08 2023 Florian Weimer <fweimer@redhat.com> - 2.49.93-31
- Port to C99
* Tue Apr 4 2023 Jerry James <loganjerry@gmail.com> - 2.49.93-30
- Update to allow non-simple strings in FORMAT and FORMATTER
- Drop upstreamed ensure-6x patch
- Disable gtk2 support for RHEL 10 (thanks to Yaakov Selkowitz)
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-30
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Tue Jan 10 2023 Jerry James <loganjerry@gmail.com> - 2.49.93-29
- Update to latest git snapshot for buffer overflow fix
- Drop upstreamed pari patch
* Mon Sep 19 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-28
- Rebuild for pari 2.15.0
* Thu Aug 18 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-27
- Rebuild for libsvm 3.3
* Mon Aug 15 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-26
- Convert License tag to SPDX
* Wed Aug 10 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-26
- Move preload.lisp files to the main package
* Mon Aug 8 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-25
- Add -ensure-6x patch (rhbz#2115476)
* Wed Jul 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jul 18 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-23
- Reduce the impact of the -no-inline patch
* Thu Feb 3 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-23
- Add -no-inline patch to workaround bz 2049371 (ppc64le segfault)
* Fri Jan 28 2022 Jerry James <loganjerry@gmail.com> - 2.49.93-23
- Add -pts-access patch to fix FTBFS
* Wed Jan 19 2022 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Jul 21 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-22
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Jul 16 2021 Jerry James <loganjerry@gmail.com> - 2.49.93-21.20210628gitde01f0f
- Update to latest git snapshot for autoconf + glib updates
- Drop upstreamed -setkey patch
- Use forge macros
- Use default HyperSpec URLs
* Thu Jun 17 2021 Jerry James <loganjerry@gmail.com> - 2.49.93-20.d9cbf22git
- Rebuild for ffcall 2.4 and multithreaded pari
* Tue May 25 2021 Florian Weimer <fweimer@redhat.com> - 2.49.93-19.d9cbf22git
- Rebuild with new binutils to fix ppc64le corruption (#1960730)
* Tue Mar 23 2021 Jerry James <loganjerry@gmail.com> - 2.49.93-18.d9cbf22git
- Update to latest git snapshot for autoconf + glib updates
- Fix broken symlinks in the full set
* Mon Feb 08 2021 Pavel Raiskup <praiskup@redhat.com> - 2.49.93-17.a9aeb80git
- rebuild for libpq ABI fix rhbz#1908268
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-16.a9aeb80git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Nov 9 2020 Jerry James <loganjerry@gmail.com> - 2.49.93-15.a9aeb80git
- Update to latest git snapshot for more HyperSpec fixes
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-14.c26de78git
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 27 2020 Jeff Law <law@redhat.com> - 2.49.93-13.c26de78git
- Disable LTO
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-12.c26de78git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-11.c26de78git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Tue Dec 17 2019 Jerry James <loganjerry@gmail.com> - 2.49.93-10.c26de78git
- Update to latest git snapshot for HyperSpec fixes
* Mon Aug 26 2019 Jerry James <loganjerry@gmail.com> - 2.49.93-9.dd40369git
- Update to latest git snapshot for bug fixes
- Add latest German translation
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-8.df3b9f6git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sat Mar 30 2019 Jerry James <loganjerry@gmail.com> - 2.49.93-7.df3b9f6git
- Update to latest git snapshot for bug fixes
- Add -register-volatile patch
- Build for s390x again now that bz 1689769 is fixed
* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.49.93-6.90b3631git
- Rebuild for readline 8.0
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-5.90b3631git
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Mon Jan 14 2019 Björn Esser <besser82@fedoraproject.org> - 2.49.93-4.90b3631git
- Rebuilt for libcrypt.so.2 (#1666033)
* Fri Aug 10 2018 Jerry James <loganjerry@gmail.com> - 2.49.93-3.90b3631git
- Update to latest git snapshot for bug fixes
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.49.93-2.d1310adgit
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Jun 21 2018 Jerry James <loganjerry@gmail.com> - 2.49.93-1.d1310adgit
- License change: GPLv2 to GPLv2+
- Build with readline 6 due to the new license
- Drop upstreamed -arm, -libsvm, -alias, and -linux patches
- Build for all architectures
- Bring back the pari module
* Mon Feb 26 2018 Tom Callaway <spot@fedoraproject.org> - 2.49.93-0.1.20180224hg
- update to latest in mercurial (lots of fixes)
- re-enable ppc64, aarch64
- disable s390x (builds, but does not run properly)
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.49-27.20170224hg
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Sun Jan 21 2018 Björn Esser <besser82@fedoraproject.org> - 2.49-26.20170224hg
- Explicitly BR: ffcall-devel and configure --with-ffcall
* Sat Jan 20 2018 Björn Esser <besser82@fedoraproject.org> - 2.49-25.20170224hg
- Rebuilt for switch to libxcrypt
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.49-24.20170224hg
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

11575
de.po

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
SHA512 (clisp-f66220939ea7d36fd085384afa4a0ec44597d499.tar.bz2) = 16d6ccba500d60fe36c20b5bd1d6c9403567996020cef406e42813a302a86d94dc0d5e36aae434b5b846d39ec37d6db2b50565a69d24291b973724bcc0874bd0
SHA512 (clisp-2.49-20170224hg.tar.xz) = e5ebccc48254ce82e707d9bf1e4f8f6711502bb541aa9958e25e1ced5a2aae286071adefbe2969018402e29056d49887a3dc36df7542cffffa05f1bc84b59d07

8041
sv.po

File diff suppressed because it is too large Load diff