b4d7002c112c12b1eebaf79afbc3068d499e45ec
[projects/cmucl/cmucl.git] / src / lisp / undefineds.c
1 /* Routines that must be linked into the core for lisp to work. */
2 /* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/undefineds.c,v 1.7 2005/09/15 18:26:53 rtoy Rel $ */
3
4 #ifdef sun
5 #ifndef MACH
6 #if !defined(SUNOS) && !defined(SOLARIS)
7 #define SUNOS
8 #endif
9 #endif
10 #endif
11
12 typedef int func();
13
14 extern func
15 #define F(x) x,
16 #if !(defined(irix) || defined(SOLARIS))
17 /* XXXfixme next line probably wrong; was previous behavior */
18 #define D(x) x,
19 #else
20 #define D(x)
21 #endif
22 #include "undefineds.h"
23 #undef F
24 #undef D
25   exit;                         /* just a random function known to exist */
26
27 #if defined(SOLARIS) || defined(irix)
28
29 #ifdef irix
30 int errno;                      /* hack to be sure works with newer libc without having to redump */
31
32            /* causes libc to be relocated to match cmucl rather than vice
33               versa */
34 #endif
35
36 extern int
37 #define F(x)
38 #define D(x) x,
39 #include "undefineds.h"
40 #undef F
41 #undef D
42   errno;                        /* a random variable known to exist */
43
44 int
45 reference_random_symbols(void)
46 {
47     int a;
48
49 #if defined(SOLARIS) && defined(__GNUC__)
50     /*
51      * For some reason, gcc 3.0 still deletes function calls here, even
52      * with -O0.  I don't know why.  So, we don't define the functions
53      * here, but define them in the table below.
54      */
55 #define F(x)
56 #else
57 #define F(x) x(0);
58 #endif
59 #define D(x) a+=x;
60 #include "undefineds.h"
61 #undef F
62 #undef D
63     return a;
64 }
65
66 #if defined(SOLARIS) && defined(__GNUC__)
67 /*
68  * If we reference the functions here, gcc 3.0 will leave them in the
69  * object file.  However, don't try to put the data symbols here.  It
70  * will cause CMUCL to crash doing a get_timezone.
71  */
72
73 func *reference_random_symbols_table[] = {
74 #define F(x) x,
75 #define D(x)
76 #include "undefineds.h"
77 #undef F
78 #undef D
79     exit                        /* a random function known to exist */
80 };
81 #endif
82
83 #else
84
85 #if defined(SVR4)
86 extern char *tzname[];
87 extern int daylight;
88 extern long altzone;
89 extern long timezone;
90 #endif
91 func *reference_random_symbols[] = {
92 #define F(x) x,
93     /* XXXfixme next line is probably wrong but was previous behavior */
94 #define D(x) &x,
95 #include "undefineds.h"
96 #undef F
97 #undef D
98     exit                        /* a random function known to exist */
99 };
100
101 #endif