annotate src/alloca.s @ 5518:3cc7470ea71c

gnuclient: if TMPDIR was set and connect failed, try again with /tmp 2011-06-03 Aidan Kehoe <kehoea@parhasard.net> * gnuslib.c (connect_to_unix_server): Retry with /tmp as a directory in which to search for Unix sockets if an attempt to connect with some other directory failed (which may be because gnuclient and gnuserv don't share an environment value for TMPDIR, or because gnuserv was compiled with USE_TMPDIR turned off).
author Aidan Kehoe <kehoea@parhasard.net>
date Fri, 03 Jun 2011 18:40:57 +0100
parents 308d34e9f07d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* `alloca' standard 4.2 subroutine for 68000's and 16000's and others.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985, 1986, 1988 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
6 XEmacs is free software: you can redistribute it and/or modify it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
8 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
9 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 4759
diff changeset
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Both 68000 systems I have run this on have had broken versions of alloca.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 Also, I am told that non-berkeley systems do not have it at all.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 So replace whatever system-provided alloca there may be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 on all 68000 systems. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 #define NOT_C_CODE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 #ifdef emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #include "config.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #ifndef HAVE_ALLOCA /* define this to use system's alloca */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #ifndef m68k
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 #ifndef m68000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 lose!!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #endif /* m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #endif /* m68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #ifdef m68k /* SGS assembler totally different */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 file "alloca.s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 global alloca
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 alloca:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 mov.l (%sp)+,%a1 # pop return addr from top of stack
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 mov.l (%sp)+,%d0 # pop size in bytes from top of stack
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 add.l &R%1,%d0 # round size up to long word
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 and.l &-4,%d0 # mask out lower two bits of size
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 sub.l %d0,%sp # allocate by moving stack pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 tst.b P%1(%sp) # stack probe to allocate pages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 mov.l %sp,%a0 # return pointer as pointer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 mov.l %sp,%d0 # return pointer as int to avoid disaster
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 add.l &-4,%sp # new top of stack
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 jmp (%a1) # not a normal return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 set S%1,64 # safety factor for C compiler scratch
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 set R%1,3+S%1 # add to size for rounding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 set P%1,-132 # probe this far below current top of stack
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 #else /* not m68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #ifdef m68000
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 /* Some systems want the _, some do not. Win with both kinds. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 .globl _alloca
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 _alloca:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 .globl alloca
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 alloca:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 movl sp@+,a0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 movl a7,d0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 subl sp@,d0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 andl #~3,d0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 movl d0,sp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 tstb sp@(0) /* Make stack pages exist */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 /* Needed on certain systems
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 that lack true demand paging */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 addql #4,d0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 jmp a0@
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 #endif /* m68000 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 #endif /* not m68k */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 #endif /* not HAVE_ALLOCA */