mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-05 22:43:24 +00:00
2b54222fb3
- Support CC/CFLAGS/PREFIX. PR: 16677 Submitted by: KATO Tsuguru <tkato@prontomail.ne.jp>
47 lines
1.6 KiB
Plaintext
47 lines
1.6 KiB
Plaintext
--- scrt/callcc.c.orig Wed Feb 24 08:25:41 1993
|
|
+++ scrt/callcc.c Wed Feb 2 22:22:22 2000
|
|
@@ -91,6 +91,11 @@
|
|
#define SETJMP( x ) sc_setjmp( x )
|
|
#endif
|
|
|
|
+#ifdef FREEBSD
|
|
+#define LONGJMP( x, y ) longjmp( x, y )
|
|
+#define SETJMP( x ) setjmp( x )
|
|
+#endif
|
|
+
|
|
TSCP sc_clink; /* Pointer to inner most continuation on stack. */
|
|
|
|
/* Static declarations for data structures internal to the module. These
|
|
@@ -192,6 +197,17 @@
|
|
STACKPTR( tos );
|
|
count = (((STACK_BYTES (bfp, tos)) + ((sizeof (S2CINT)) - 1))
|
|
/ (sizeof (S2CINT)));
|
|
+#ifdef LAZY_STACK_POP
|
|
+ /* NOTE WELL!
|
|
+ * For machines that must pop arguments after a function call,
|
|
+ * the compiler may let arguments accumulate on the stack for several
|
|
+ * function calls and pop them all at once.
|
|
+ * If your compiler uses this optimization, 'count' must be incremented
|
|
+ * by the number of S2CINTs pushed as arguments between this point and
|
|
+ * the point where 'bcount' is computed.
|
|
+ */
|
|
+ count += LAZY_STACK_INCREMENT;
|
|
+#endif
|
|
save_fp = (S2CINT*)bfp;
|
|
cp = sc_allocateheap( NULLCONTINUATIONSIZE+count+2+sc_maxdisplay,
|
|
CONTINUATIONTAG,
|
|
@@ -199,6 +215,13 @@
|
|
STACKPTR( tos );
|
|
fp = save_fp;
|
|
bcount = (STACK_BYTES (fp, tos));
|
|
+ if (bcount > count*sizeof(S2CINT))
|
|
+ /* If you get this error, look above at LAZY_STACK_POP */
|
|
+ sc_error( "CALL-WITH-CURRENT-CONTINUATION",
|
|
+ "internal error: want to write ~s bytes of stack, "
|
|
+ "but only ~s bytes allocated.",
|
|
+ LIST2( C_FIXED( bcount ),
|
|
+ C_FIXED( count*sizeof(S2CINT) ) ) );
|
|
cp->continuation.continuation = sc_clink;
|
|
cp->continuation.stackbytes = bcount;
|
|
cp->continuation.stacktrace = sc_stacktrace;
|