8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / cmd / sgs / include / sgs.h
blobfc6248107a06852db25410282efaddbfc362eb2f
1 /*
2 * CDDL HEADER START
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]
19 * CDDL HEADER END
23 * Copyright (c) 1988 AT&T
24 * All Rights Reserved
27 * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
29 * Global include file for all sgs.
32 #ifndef _SGS_H
33 #define _SGS_H
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
39 /* <assert.h> keys off of NDEBUG */
40 #ifdef DEBUG
41 #undef NDEBUG
42 #else
43 #define NDEBUG
44 #endif
46 #ifndef _ASM
47 #include <sys/types.h>
48 #include <sys/machelf.h>
49 #include <stdlib.h>
50 #include <stdarg.h>
51 #include <libelf.h>
52 #include <assert.h>
53 #include <alist.h>
54 #endif /* _ASM */
57 * Software identification.
59 #define SGS ""
60 #define SGU_PKG "Software Generation Utilities"
61 #define SGU_REL "(SGU) Solaris-ELF (4.0)"
64 #ifndef _ASM
67 * link_ver_string[] contains a version string for use by the link-editor
68 * and all other linker components. It is found in libconv, and is
69 * generated by sgs/libconv/common/bld_vernote.ksh. That script produces
70 * libconv/{plat}/vernote.s, which is in turn assembled/linked into
71 * libconv.
73 extern const char link_ver_string[];
75 * Macro to round to next double word boundary.
77 #define S_DROUND(x) (((x) + sizeof (double) - 1) & ~(sizeof (double) - 1))
80 * General align and round macros.
82 #define S_ALIGN(x, a) ((x) & ~(((a) ? (a) : 1) - 1))
83 #define S_ROUND(x, a) ((x) + (((a) ? (a) : 1) - 1) & ~(((a) ? (a) : 1) - 1))
86 * Bit manipulation macros; generic bit mask and is `v' in the range
87 * supportable in `n' bits?
89 #define S_MASK(n) ((1 << (n)) -1)
90 #define S_INRANGE(v, n) (((-(1 << (n)) - 1) < (v)) && ((v) < (1 << (n))))
94 * Yet another definition of the OFFSETOF macro, used with the AVL routines.
96 #define SGSOFFSETOF(s, m) ((size_t)(&(((s *)0)->m)))
99 * When casting between integer and pointer types, gcc will complain
100 * if the integer type used is not large enough to hold the pointer
101 * value without loss. Although a dubious practice in general, this
102 * is sometimes done by design. In those cases, the general solution
103 * is to introduce an intermediate cast to widen the integer value. The
104 * CAST_PTRINT macro does this, and its use documents the fact that
105 * the programmer is doing that sort of cast.
107 #ifdef __GNUC__
108 #define CAST_PTRINT(cast, value) ((cast)(uintptr_t)value)
109 #else
110 #define CAST_PTRINT(cast, value) ((cast)value)
111 #endif
114 * General typedefs.
116 typedef enum {
117 FALSE = 0,
118 TRUE = 1
119 } Boolean;
122 * Types of errors (used by veprintf()), together with a generic error return
123 * value.
125 typedef enum {
126 ERR_NONE, /* plain message */
127 ERR_WARNING_NF, /* warning that cannot be promoted to fatal */
128 ERR_WARNING, /* warning that can be promoted to fatal */
129 ERR_GUIDANCE, /* guidance warning that can be promoted */
130 ERR_FATAL, /* fatal error */
131 ERR_ELF, /* fatal libelf error */
132 ERR_NUM /* # of Error codes. Must be last */
133 } Error;
136 * Type used to represent line numbers within files, and a corresponding
137 * printing macro for it.
139 typedef ulong_t Lineno;
140 #define EC_LINENO(_x) EC_XWORD(_x) /* "llu" */
143 #if defined(_LP64) && !defined(_ELF64)
144 #define S_ERROR (~(uint_t)0)
145 #else
146 #define S_ERROR (~(uintptr_t)0)
147 #endif
150 * CTF currently does not handle automatic array variables sized via function
151 * arguments (VLA arrays) properly, when the code is compiled with gcc.
152 * Adding 1 to the size is a workaround. VLA_SIZE, and its use, should be
153 * pulled when CTF is fixed or replaced.
155 #ifdef __GNUC__
156 #define VLA_SIZE(_arg) ((_arg) + 1)
157 #else
158 #define VLA_SIZE(_arg) (_arg)
159 #endif
162 * Structure to maintain rejected files elf information. Files that are not
163 * applicable to the present link-edit are rejected and a search for an
164 * appropriate file may be resumed. The first rejected files information is
165 * retained so that a better error diagnostic can be given should an appropriate
166 * file not be located.
168 typedef struct {
169 ushort_t rej_type; /* SGS_REJ_ value */
170 ushort_t rej_flags; /* additional information */
171 uint_t rej_info; /* numeric and string information */
172 const char *rej_str; /* associated with error */
173 const char *rej_name; /* object name - expanded library */
174 /* name and archive members */
175 } Rej_desc;
177 #define SGS_REJ_NONE 0
178 #define SGS_REJ_MACH 1 /* wrong ELF machine type */
179 #define SGS_REJ_CLASS 2 /* wrong ELF class (32-bit/64-bit) */
180 #define SGS_REJ_DATA 3 /* wrong ELF data format (MSG/LSB) */
181 #define SGS_REJ_TYPE 4 /* bad ELF type */
182 #define SGS_REJ_BADFLAG 5 /* bad ELF flags value */
183 #define SGS_REJ_MISFLAG 6 /* mismatched ELF flags value */
184 #define SGS_REJ_VERSION 7 /* mismatched ELF/lib version */
185 #define SGS_REJ_HAL 8 /* HAL R1 extensions required */
186 #define SGS_REJ_US3 9 /* Sun UltraSPARC III extensions */
187 /* required */
188 #define SGS_REJ_STR 10 /* generic error - info is a string */
189 #define SGS_REJ_UNKFILE 11 /* unknown file type */
190 #define SGS_REJ_UNKCAP 12 /* unknown capabilities */
191 #define SGS_REJ_HWCAP_1 13 /* hardware capabilities mismatch */
192 #define SGS_REJ_SFCAP_1 14 /* software capabilities mismatch */
193 #define SGS_REJ_MACHCAP 15 /* machine capability mismatch */
194 #define SGS_REJ_PLATCAP 16 /* platform capability mismatch */
195 #define SGS_REJ_HWCAP_2 17 /* hardware capabilities mismatch */
196 #define SGS_REJ_ARCHIVE 18 /* archive used in invalid context */
197 #define SGS_REJ_NUM 19
199 #define FLG_REJ_ALTER 0x01 /* object name is an alternative */
202 * For those source files used both inside and outside of the
203 * libld source base (tools/common/string_table.c) we can
204 * automatically switch between the allocation models
205 * based off of the 'cc -DUSE_LIBLD_MALLOC' flag.
207 #ifdef USE_LIBLD_MALLOC
208 #define calloc(x, a) libld_malloc(((size_t)x) * ((size_t)a))
209 #define free libld_free
210 #define malloc libld_malloc
211 #define realloc libld_realloc
213 #define libld_calloc(x, a) libld_malloc(((size_t)x) * ((size_t)a))
214 extern void libld_free(void *);
215 extern void *libld_malloc(size_t);
216 extern void *libld_realloc(void *, size_t);
217 #endif
220 * Data structures (defined in libld.h).
222 typedef struct audit_desc Audit_desc;
223 typedef struct audit_info Audit_info;
224 typedef struct audit_list Audit_list;
225 typedef struct cap_desc Cap_desc;
226 typedef struct ent_desc Ent_desc;
227 typedef struct group_desc Group_desc;
228 typedef struct ifl_desc Ifl_desc;
229 typedef struct is_desc Is_desc;
230 typedef struct isa_desc Isa_desc;
231 typedef struct isa_opt Isa_opt;
232 typedef struct os_desc Os_desc;
233 typedef struct ofl_desc Ofl_desc;
234 typedef struct rel_cache Rel_cache;
235 typedef struct rel_cachebuf Rel_cachebuf;
236 typedef struct rel_aux_cachebuf Rel_aux_cachebuf;
237 typedef struct rel_aux Rel_aux;
238 typedef struct rel_desc Rel_desc;
239 typedef struct sdf_desc Sdf_desc;
240 typedef struct sdv_desc Sdv_desc;
241 typedef struct sec_order Sec_order;
242 typedef struct sg_desc Sg_desc;
243 typedef struct sort_desc Sort_desc;
244 typedef struct sym_avlnode Sym_avlnode;
245 typedef struct sym_aux Sym_aux;
246 typedef struct sym_desc Sym_desc;
247 typedef struct uts_desc Uts_desc;
248 typedef struct ver_desc Ver_desc;
249 typedef struct ver_index Ver_index;
252 * Data structures defined in rtld.h.
254 typedef struct lm_list Lm_list;
255 #ifdef _SYSCALL32
256 typedef struct lm_list32 Lm_list32;
257 #endif /* _SYSCALL32 */
260 * For the various utilities that include sgs.h
262 extern int assfail(const char *, const char *, int);
263 extern void eprintf(Lm_list *, Error, const char *, ...);
264 extern void veprintf(Lm_list *, Error, const char *, va_list);
265 extern uint_t sgs_str_hash(const char *);
266 extern uint_t findprime(uint_t);
268 #endif /* _ASM */
270 #ifdef __cplusplus
272 #endif
275 #endif /* _SGS_H */