Kaynağa Gözat

some fixes: calloc was wrong; catch traps, and let divides
by 0 generate a signal, if on a unix machine

ceriel 35 yıl önce
ebeveyn
işleme
8e485ab09a

+ 1 - 1
lang/cem/libcc/gen/calloc.c

@@ -1,5 +1,5 @@
 /* $Header$ */
-#define ALIGN(sz)	(((sz) + (sizeof(long) - 1) / sizeof(long)) * sizeof(long))
+#define ALIGN(sz)	((((sz) + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long))
 char *
 calloc(nelem, elsize)
 	unsigned int nelem, elsize;

+ 34 - 0
lang/cem/libcc/gen/head_cc.e

@@ -1,4 +1,5 @@
 #
+#include "em_abs.h"
 /*
  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
  *
@@ -43,6 +44,11 @@ _penvp
  loi EM_PSIZE
  lae _penvp
  sti EM_PSIZE
+#if unix && ! (em22 || em24 || em44)
+ lpi $_ctch_
+ sig
+ asp EM_PSIZE
+#endif
  lal EM_WSIZE+EM_PSIZE
  loi EM_PSIZE
  lal EM_WSIZE
@@ -54,3 +60,31 @@ _penvp
  lfr EM_WSIZE
  cal $exit
  end
+
+#if unix && ! (em22 || em24 || em44)
+ exp $_ctch_
+ pro $_ctch_,0
+ lol 0
+ loc EIDIVZ
+ beq *1
+ lol 0
+ loc EFDIVZ
+ beq *1
+ bra *2
+2
+ lol 0
+ trp
+ bra *3
+1
+ loc 8
+ cal $getpid
+ lfr EM_WSIZE
+ cal $kill
+ asp 2*EM_WSIZE
+3
+ lpi $_ctch_
+ sig
+ asp EM_WSIZE
+ rtt
+ end 0
+#endif

+ 9 - 0
lang/cem/libcc/gen/rename.c

@@ -0,0 +1,9 @@
+int
+rename(from, to)
+	char *from, *to;
+{
+	(void) unlink(to);
+	if (link(from, to) < 0) return -1;
+	(void) unlink(from);
+	return 0;
+}