4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
27 /* All Rights Reserved */
29 #pragma ident "%Z%%M% %I% %E% SMI"
37 /* ======== storage allocation ======== */
40 getstak(asize
) /* allocate requested stack */
43 unsigned char *oldstak
;
46 size
= round(asize
, BYTESPERWORD
);
48 staktop
= stakbot
+= size
;
49 if (staktop
>= brkend
)
55 * set up stack for local use
56 * should be followed by `endstak'
61 if (brkend
- stakbot
< BRKINCR
)
63 if (setbrk(brkincr
) == -1)
73 unsigned char *newtop
;
77 incr
= (unsigned)round(newtop
- brkend
+ 1, BYTESPERWORD
);
80 if (setbrk(incr
) == -1)
87 assert(staktop
== stakbot
);
92 endstak(unsigned char *argp
) /* tidy up after `locstak' */
94 unsigned char *oldstak
;
100 stakbot
= staktop
= (unsigned char *)round(argp
, BYTESPERWORD
);
101 if (staktop
>= brkend
)
107 tdystak(unsigned char *x
) /* try to bring stack back to x */
111 while ((unsigned char *)stakbsy
> x
)
113 next
= stakbsy
->word
;
117 staktop
= stakbot
= max(x
, stakbas
);
124 if ((brkend
- stakbas
) > BRKINCR
+ BRKINCR
)
132 return(endstak(movstrstak(x
, locstak())));
136 movstrstak(unsigned char *a
, unsigned char *b
)
148 * Copy s2 to s1, always copy n bytes.
152 memcpystak(unsigned char *s1
, unsigned char *s2
, int n
)
154 unsigned char *os1
= s1
;