xref: /openbsd-src/gnu/usr.bin/binutils/gdb/rdi-share/host.h (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis /*
2*b725ae77Skettenis  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3*b725ae77Skettenis  *
4*b725ae77Skettenis  * This software may be freely used, copied, modified, and distributed
5*b725ae77Skettenis  * provided that the above copyright notice is preserved in all copies of the
6*b725ae77Skettenis  * software.
7*b725ae77Skettenis  */
8*b725ae77Skettenis 
9*b725ae77Skettenis 
10*b725ae77Skettenis #ifndef _host_LOADED
11*b725ae77Skettenis #define _host_LOADED 1
12*b725ae77Skettenis 
13*b725ae77Skettenis #include <stdio.h>
14*b725ae77Skettenis #include <stddef.h>
15*b725ae77Skettenis #include <stdlib.h>
16*b725ae77Skettenis 
17*b725ae77Skettenis #ifndef SEEK_SET
18*b725ae77Skettenis #  define SEEK_SET  0
19*b725ae77Skettenis #endif
20*b725ae77Skettenis #ifndef SEEK_CUR
21*b725ae77Skettenis #  define SEEK_CUR  1
22*b725ae77Skettenis #endif
23*b725ae77Skettenis #ifndef SEEK_END
24*b725ae77Skettenis #  define SEEK_END  2
25*b725ae77Skettenis #endif
26*b725ae77Skettenis 
27*b725ae77Skettenis /* The following for the benefit of compiling on SunOS */
28*b725ae77Skettenis #ifndef offsetof
29*b725ae77Skettenis #  define offsetof(T, member)  ((char *)&(((T *)0)->member) - (char *)0)
30*b725ae77Skettenis #endif
31*b725ae77Skettenis 
32*b725ae77Skettenis /* A temporary sop to older compilers */
33*b725ae77Skettenis #if defined (__NetBSD__) || defined (unix)
34*b725ae77Skettenis #  ifndef __unix              /* (good for long-term portability?)  */
35*b725ae77Skettenis #    define __unix    1
36*b725ae77Skettenis #  endif
37*b725ae77Skettenis #endif
38*b725ae77Skettenis 
39*b725ae77Skettenis #if defined(__unix)
40*b725ae77Skettenis /* Generic unix -- hopefully a split into other variants will not be    */
41*b725ae77Skettenis /* needed.  However, beware the 'bsd' test above and safe_toupper etc.  */
42*b725ae77Skettenis /* which cope with backwards (pre-posix/X/open) unix compatility.       */
43*b725ae77Skettenis #  define COMPILING_ON_UNIX     1
44*b725ae77Skettenis #endif
45*b725ae77Skettenis #if defined(_WIN32)
46*b725ae77Skettenis #  define COMPILING_ON_WIN32    1
47*b725ae77Skettenis #  if !defined(__CYGWIN__)
48*b725ae77Skettenis #    define COMPILING_ON_WINDOWS  1
49*b725ae77Skettenis #  endif
50*b725ae77Skettenis #endif
51*b725ae77Skettenis #if defined(_CONSOLE)
52*b725ae77Skettenis #  define COMPILING_ON_WINDOWS_CONSOLE 1
53*b725ae77Skettenis #  define COMPILING_ON_WINDOWS 1
54*b725ae77Skettenis #endif
55*b725ae77Skettenis /* The '(defined(__sparc) && defined(P_tmpdir)                     */
56*b725ae77Skettenis /* && !defined(__svr4__))' is to detect gcc on SunOS.              */
57*b725ae77Skettenis /* C++ compilers don't have to define __STDC__                     */
58*b725ae77Skettenis #if (defined(__sparc) && defined(P_tmpdir))
59*b725ae77Skettenis #  if defined(__svr4__)
60*b725ae77Skettenis #    define COMPILING_ON_SOLARIS
61*b725ae77Skettenis #  else
62*b725ae77Skettenis #    define COMPILING_ON_SUNOS
63*b725ae77Skettenis #  endif
64*b725ae77Skettenis #endif
65*b725ae77Skettenis #ifdef __hppa
66*b725ae77Skettenis #  define COMPILING_ON_HPUX
67*b725ae77Skettenis #endif
68*b725ae77Skettenis 
69*b725ae77Skettenis /*
70*b725ae77Skettenis  * The following typedefs may need alteration for obscure host machines.
71*b725ae77Skettenis  */
72*b725ae77Skettenis #if defined(__alpha) && defined(__osf__) /* =========================== */
73*b725ae77Skettenis /* Under OSF the alpha has 64-bit pointers and 64-bit longs.            */
74*b725ae77Skettenis typedef                int   int32;
75*b725ae77Skettenis typedef unsigned       int   unsigned32;
76*b725ae77Skettenis /* IPtr and UPtr are 'ints of same size as pointer'.  Do not use in     */
77*b725ae77Skettenis /* new code.  Currently only used within 'ncc'.                         */
78*b725ae77Skettenis typedef          long  int   IPtr;
79*b725ae77Skettenis typedef unsigned long  int   UPtr;
80*b725ae77Skettenis 
81*b725ae77Skettenis #else /* all hosts except alpha under OSF ============================= */
82*b725ae77Skettenis 
83*b725ae77Skettenis typedef          long  int   int32;
84*b725ae77Skettenis typedef unsigned long  int   unsigned32;
85*b725ae77Skettenis /* IPtr and UPtr are 'ints of same size as pointer'.  Do not use in     */
86*b725ae77Skettenis /* new code.  Currently only used within 'ncc'.                         */
87*b725ae77Skettenis #define IPtr int32
88*b725ae77Skettenis #define UPtr unsigned32
89*b725ae77Skettenis #endif /* ============================================================= */
90*b725ae77Skettenis 
91*b725ae77Skettenis typedef          short int   int16;
92*b725ae77Skettenis typedef unsigned short int   unsigned16;
93*b725ae77Skettenis typedef   signed       char  int8;
94*b725ae77Skettenis typedef unsigned       char  unsigned8;
95*b725ae77Skettenis 
96*b725ae77Skettenis /* The following code defines the 'bool' type to be 'int' under C       */
97*b725ae77Skettenis /* and real 'bool' under C++.  It also avoids warnings such as          */
98*b725ae77Skettenis /* C++ keyword 'bool' used as identifier.  It can be overridden by      */
99*b725ae77Skettenis /* defining IMPLEMENT_BOOL_AS_ENUM or IMPLEMENT_BOOL_AS_INT.            */
100*b725ae77Skettenis #undef _bool
101*b725ae77Skettenis 
102*b725ae77Skettenis #ifdef IMPLEMENT_BOOL_AS_ENUM
103*b725ae77Skettenis    enum _bool { _false, _true };
104*b725ae77Skettenis #  define _bool enum _bool
105*b725ae77Skettenis #elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus)
106*b725ae77Skettenis #  define _bool int
107*b725ae77Skettenis #  define _false 0
108*b725ae77Skettenis #  define _true 1
109*b725ae77Skettenis #endif
110*b725ae77Skettenis 
111*b725ae77Skettenis #ifdef _bool
112*b725ae77Skettenis #  if defined(_MFC_VER) || defined(__CC_NORCROFT) /* When using MS Visual C/C++ v4.2 */
113*b725ae77Skettenis #    define bool _bool /* avoids "'bool' is reserved word" warning      */
114*b725ae77Skettenis #  else
115*b725ae77Skettenis #    ifndef bool
116*b725ae77Skettenis        typedef _bool bool;
117*b725ae77Skettenis #    endif
118*b725ae77Skettenis #  endif
119*b725ae77Skettenis #  define true _true
120*b725ae77Skettenis #  define false _false
121*b725ae77Skettenis #endif
122*b725ae77Skettenis 
123*b725ae77Skettenis #define YES   true
124*b725ae77Skettenis #define NO    false
125*b725ae77Skettenis #undef TRUE             /* some OSF headers define as 1                 */
126*b725ae77Skettenis #define TRUE  true
127*b725ae77Skettenis #undef FALSE            /* some OSF headers define as 1                 */
128*b725ae77Skettenis #define FALSE false
129*b725ae77Skettenis 
130*b725ae77Skettenis /* 'uint' conflicts with some Unixen sys/types.h, so we now don't define it */
131*b725ae77Skettenis typedef unsigned8  uint8;
132*b725ae77Skettenis typedef unsigned16 uint16;
133*b725ae77Skettenis typedef unsigned32 uint32;
134*b725ae77Skettenis 
135*b725ae77Skettenis typedef unsigned   Uint;
136*b725ae77Skettenis typedef unsigned8  Uint8;
137*b725ae77Skettenis typedef unsigned16 Uint16;
138*b725ae77Skettenis typedef unsigned32 Uint32;
139*b725ae77Skettenis 
140*b725ae77Skettenis #ifdef ALPHA_TASO_SHORT_ON_OSF /* was __alpha && __osf.                 */
141*b725ae77Skettenis /* The following sets ArgvType for 64-bit pointers so that              */
142*b725ae77Skettenis /* DEC Unix (OSF) cc can be used with the -xtaso_short compiler option  */
143*b725ae77Skettenis /* to force pointers to be 32-bit.  Not currently used since most/all   */
144*b725ae77Skettenis /* ARM tools accept 32 or 64 bit pointers transparently.  See IPtr.     */
145*b725ae77Skettenis #pragma pointer_size (save)
146*b725ae77Skettenis #pragma pointer_size (long)
147*b725ae77Skettenis typedef char *ArgvType;
148*b725ae77Skettenis #pragma pointer_size (restore)
149*b725ae77Skettenis #else
150*b725ae77Skettenis typedef char *ArgvType;
151*b725ae77Skettenis #endif
152*b725ae77Skettenis 
153*b725ae77Skettenis /*
154*b725ae77Skettenis  * Rotate macros
155*b725ae77Skettenis  */
156*b725ae77Skettenis #define ROL_32(val, n) \
157*b725ae77Skettenis ((((unsigned32)(val) << (n)) | ((unsigned32)(val) >> (32-(n)))) & 0xFFFFFFFFL)
158*b725ae77Skettenis #define ROR_32(val, n) \
159*b725ae77Skettenis ((((unsigned32)(val) >> (n)) | ((unsigned32)(val) << (32-(n)))) & 0xFFFFFFFFL)
160*b725ae77Skettenis 
161*b725ae77Skettenis #ifdef COMPILING_ON_UNIX
162*b725ae77Skettenis #  define FOPEN_WB     "w"
163*b725ae77Skettenis #  define FOPEN_RB     "r"
164*b725ae77Skettenis #  define FOPEN_RWB    "r+"
165*b725ae77Skettenis #  ifndef __STDC__                     /* caveat RISCiX... */
166*b725ae77Skettenis #    define remove(file) unlink(file)  /* a horrid hack, but probably best? */
167*b725ae77Skettenis #  endif
168*b725ae77Skettenis #else
169*b725ae77Skettenis #  define FOPEN_WB     "wb"
170*b725ae77Skettenis #  define FOPEN_RB     "rb"
171*b725ae77Skettenis #  define FOPEN_RWB    "rb+"
172*b725ae77Skettenis #endif
173*b725ae77Skettenis 
174*b725ae77Skettenis #ifndef FILENAME_MAX
175*b725ae77Skettenis #  define FILENAME_MAX 256
176*b725ae77Skettenis #endif
177*b725ae77Skettenis 
178*b725ae77Skettenis #if (!defined(__STDC__) && !defined(__cplusplus)) || defined(COMPILING_ON_SUNOS)
179*b725ae77Skettenis /* Use bcopy rather than memmove, as memmove is not available.     */
180*b725ae77Skettenis /* There does not seem to be a header for bcopy.                   */
181*b725ae77Skettenis void bcopy(const char *src, char *dst, int length);
182*b725ae77Skettenis #  define memmove(d,s,l) bcopy(s,d,l)
183*b725ae77Skettenis 
184*b725ae77Skettenis /* BSD/SUN don't have strtoul(), but then strtol() doesn't barf on */
185*b725ae77Skettenis /* overflow as required by ANSI... This bodge is horrid.           */
186*b725ae77Skettenis #  define strtoul(s, ptr, base) strtol(s, ptr, base)
187*b725ae77Skettenis 
188*b725ae77Skettenis /* strtod is present in the C-library but is not in stdlib.h       */
189*b725ae77Skettenis extern double strtod(const char *str, char **ptr);
190*b725ae77Skettenis #endif
191*b725ae77Skettenis 
192*b725ae77Skettenis /* For systems that do not define EXIT_SUCCESS and EXIT_FAILURE */
193*b725ae77Skettenis #ifndef EXIT_SUCCESS
194*b725ae77Skettenis #  define EXIT_SUCCESS           0
195*b725ae77Skettenis #endif
196*b725ae77Skettenis #ifndef EXIT_FAILURE
197*b725ae77Skettenis #  define EXIT_FAILURE           1
198*b725ae77Skettenis #endif
199*b725ae77Skettenis 
200*b725ae77Skettenis #ifndef IGNORE
201*b725ae77Skettenis #define IGNORE(x) (x = x)  /* Silence compiler warnings for unused arguments */
202*b725ae77Skettenis #endif
203*b725ae77Skettenis 
204*b725ae77Skettenis /* Define endian-ness of host */
205*b725ae77Skettenis 
206*b725ae77Skettenis #if defined(__acorn) || defined(__mvs) || defined(_WIN32) || \
207*b725ae77Skettenis   (defined(__alpha) && defined(__osf__))
208*b725ae77Skettenis #  define HOST_ENDIAN_LITTLE
209*b725ae77Skettenis #elif defined(__sparc) || defined(macintosh)
210*b725ae77Skettenis #  define HOST_ENDIAN_BIG
211*b725ae77Skettenis #else
212*b725ae77Skettenis #  define HOST_ENDIAN_UNKNOWN
213*b725ae77Skettenis #endif
214*b725ae77Skettenis 
215*b725ae77Skettenis #endif
216*b725ae77Skettenis 
217*b725ae77Skettenis /* Needs to be supplied by the host.  */
218*b725ae77Skettenis extern void Fail (const char *, ...);
219*b725ae77Skettenis 
220*b725ae77Skettenis /* end of host.h */
221