diff options
author | markm <markm@FreeBSD.org> | 2002-03-03 13:17:00 +0000 |
---|---|---|
committer | markm <markm@FreeBSD.org> | 2002-03-03 13:17:00 +0000 |
commit | a9c0aaa0e8a6efa66f2c4364b24f1bf7520d9a53 (patch) | |
tree | 9ca989e7577c4407884daecc9836097ae6fccce0 /usr.bin/xlint/common | |
parent | 97ea65b2cb83e7b5b2c4afcacc3a185482457c2a (diff) | |
download | FreeBSD-src-a9c0aaa0e8a6efa66f2c4364b24f1bf7520d9a53.zip FreeBSD-src-a9c0aaa0e8a6efa66f2c4364b24f1bf7520d9a53.tar.gz |
Import of NetBSD's (x)lint, snapshotted at 2002-3-3.
Diffstat (limited to 'usr.bin/xlint/common')
-rw-r--r-- | usr.bin/xlint/common/emit.c | 234 | ||||
-rw-r--r-- | usr.bin/xlint/common/externs.h | 66 | ||||
-rw-r--r-- | usr.bin/xlint/common/ilp32.h | 59 | ||||
-rw-r--r-- | usr.bin/xlint/common/inittyp.c | 133 | ||||
-rw-r--r-- | usr.bin/xlint/common/lint.h | 126 | ||||
-rw-r--r-- | usr.bin/xlint/common/lp64.h | 59 | ||||
-rw-r--r-- | usr.bin/xlint/common/mem.c | 88 | ||||
-rw-r--r-- | usr.bin/xlint/common/param.h | 88 |
8 files changed, 853 insertions, 0 deletions
diff --git a/usr.bin/xlint/common/emit.c b/usr.bin/xlint/common/emit.c new file mode 100644 index 0000000..9413433 --- /dev/null +++ b/usr.bin/xlint/common/emit.c @@ -0,0 +1,234 @@ +/* $NetBSD: emit.c,v 1.2 2002/01/21 19:49:51 tv Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +#if defined(__RCSID) && !defined(lint) +__RCSID("$NetBSD: emit.c,v 1.2 2002/01/21 19:49:51 tv Exp $"); +#endif + +#include <ctype.h> +#include <stdio.h> +#include <string.h> + +#include "lint.h" + +/* name and handle of output file */ +static const char *loname; +static FILE *lout; + +/* output buffer data */ +ob_t ob; + +static void outxbuf(void); + + +/* + * initialize output + */ +void +outopen(const char *name) +{ + + loname = name; + + /* Open output file */ + if ((lout = fopen(name, "w")) == NULL) + err(1, "cannot open '%s'", name); + + /* Create output buffer */ + ob.o_len = 1024; + ob.o_end = (ob.o_buf = ob.o_nxt = xmalloc(ob.o_len)) + ob.o_len; +} + +/* + * flush output buffer and close file + */ +void +outclose(void) +{ + + outclr(); + if (fclose(lout) == EOF) + err(1, "cannot close '%s'", loname); +} + +/* + * resize output buffer + */ +static void +outxbuf(void) +{ + ptrdiff_t coffs; + + coffs = ob.o_nxt - ob.o_buf; + ob.o_len *= 2; + ob.o_end = (ob.o_buf = xrealloc(ob.o_buf, ob.o_len)) + ob.o_len; + ob.o_nxt = ob.o_buf + coffs; +} + +/* + * reset output buffer + * if it is not empty, it is flushed + */ +void +outclr(void) +{ + size_t sz; + + if (ob.o_buf != ob.o_nxt) { + outchar('\n'); + sz = ob.o_nxt - ob.o_buf; + if (sz > ob.o_len) + errx(1, "internal error: outclr() 1"); + if (fwrite(ob.o_buf, sz, 1, lout) != 1) + err(1, "cannot write to %s", loname); + ob.o_nxt = ob.o_buf; + } +} + +/* + * write a character to the output buffer + */ +void +outchar(int c) +{ + + if (ob.o_nxt == ob.o_end) + outxbuf(); + *ob.o_nxt++ = (char)c; +} + +/* + * write a character to the output buffer, qouted if necessary + */ +void +outqchar(int c) +{ + + if (isprint(c) && c != '\\' && c != '"' && c != '\'') { + outchar(c); + } else { + outchar('\\'); + switch (c) { + case '\\': + outchar('\\'); + break; + case '"': + outchar('"'); + break; + case '\'': + outchar('\''); + break; + case '\b': + outchar('b'); + break; + case '\t': + outchar('t'); + break; + case '\n': + outchar('n'); + break; + case '\f': + outchar('f'); + break; + case '\r': + outchar('r'); + break; + case '\v': + outchar('v'); + break; + case '\a': + outchar('a'); + break; + default: + outchar((((u_int)c >> 6) & 07) + '0'); + outchar((((u_int)c >> 3) & 07) + '0'); + outchar((c & 07) + '0'); + break; + } + } +} + +/* + * write a strint to the output buffer + * the string must not contain any characters which + * should be quoted + */ +void +outstrg(const char *s) +{ + + while (*s != '\0') { + if (ob.o_nxt == ob.o_end) + outxbuf(); + *ob.o_nxt++ = *s++; + } +} + +/* + * write an integer value to toe output buffer + */ +void +outint(int i) +{ + + if ((ob.o_end - ob.o_nxt) < 3 * sizeof (int)) + outxbuf(); + ob.o_nxt += sprintf(ob.o_nxt, "%d", i); +} + +/* + * write the name of a symbol to the output buffer + * the name is preceded by its length + */ +void +outname(const char *name) +{ + + if (name == NULL) + errx(1, "internal error: outname() 1"); + outint((int)strlen(name)); + outstrg(name); +} + +/* + * write the name of the .c source + */ +void +outsrc(const char *name) +{ + + outclr(); + outchar('S'); + outstrg(name); +} diff --git a/usr.bin/xlint/common/externs.h b/usr.bin/xlint/common/externs.h new file mode 100644 index 0000000..8c454b4 --- /dev/null +++ b/usr.bin/xlint/common/externs.h @@ -0,0 +1,66 @@ +/* $NetBSD: externs.h,v 1.1 2002/01/18 20:39:23 thorpej Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * main[12].c + */ +extern int pflag; + +/* + * inittyp.c + */ +extern void inittyp(void); + +/* + * mem.c + */ +extern void *xmalloc(size_t); +extern void *xcalloc(size_t, size_t); +extern void *xrealloc(void *, size_t); +extern char *xstrdup(const char *); +extern void nomem(void); + +/* + * emit.c + */ +extern ob_t ob; + +extern void outopen(const char *); +extern void outclose(void); +extern void outclr(void); +extern void outchar(int); +extern void outqchar(int); +extern void outstrg(const char *); +extern void outint(int); +extern void outname(const char *); +extern void outsrc(const char *); diff --git a/usr.bin/xlint/common/ilp32.h b/usr.bin/xlint/common/ilp32.h new file mode 100644 index 0000000..5eb5f03 --- /dev/null +++ b/usr.bin/xlint/common/ilp32.h @@ -0,0 +1,59 @@ +/* $NetBSD: ilp32.h,v 1.1 2002/01/18 20:39:23 thorpej Exp $ */ + +/* + * Copyright (c) 2001 Wasabi Systems, Inc. + * All rights reserved. + * + * Written by Jason R. Thorpe for Wasabi Systems, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the NetBSD Project by + * Wasabi Systems, Inc. + * 4. The name of Wasabi Systems, Inc. may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Type sizes for IPL32 platforms (int, long, pointer: 32-bit) + */ + +#define CHAR_SIZE (CHAR_BIT) +#define SHORT_SIZE (2 * CHAR_BIT) +#define INT_SIZE (4 * CHAR_BIT) +#define LONG_SIZE (4 * CHAR_BIT) +#define QUAD_SIZE (8 * CHAR_BIT) +#define PTR_SIZE (4 * CHAR_BIT) + +#define TARG_INT_MAX ((int32_t) (((uint32_t) -1) >> 1)) +#define TARG_INT_MIN ((-TARG_INT_MAX) - 1) +#define TARG_UINT_MAX ((uint32_t) -1) + +#define TARG_LONG_MAX TARG_INT_MAX +#define TARG_LONG_MIN TARG_INT_MIN +#define TARG_ULONG_MAX TARG_UINT_MAX + +#define TARG_QUAD_MAX ((int64_t) (((uint64_t) -1) >> 1)) +#define TARG_QUAD_MIN ((-TARG_QUAD_MAX) - 1) +#define TARG_UQUAD_MAX ((uint64_t) -1) diff --git a/usr.bin/xlint/common/inittyp.c b/usr.bin/xlint/common/inittyp.c new file mode 100644 index 0000000..b0958bf --- /dev/null +++ b/usr.bin/xlint/common/inittyp.c @@ -0,0 +1,133 @@ +/* $NetBSD: inittyp.c,v 1.3 2002/01/30 06:55:02 thorpej Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +#if defined(__RCSID) && !defined(lint) +__RCSID("$NetBSD: inittyp.c,v 1.3 2002/01/30 06:55:02 thorpej Exp $"); +#endif + +#include <ctype.h> +#include <limits.h> +#include <stdlib.h> + +#include "lint.h" + +/* various type information */ +ttab_t ttab[NTSPEC]; + +void +inittyp(void) +{ + int i; + static const struct { + tspec_t it_tspec; + ttab_t it_ttab; + } ittab[NTSPEC] = { + { SIGNED, { 0, 0, + SIGNED, UNSIGN, + 0, 0, 0, 0, 0, "signed" } }, + { UNSIGN, { 0, 0, + SIGNED, UNSIGN, + 0, 0, 0, 0, 0, "unsigned" } }, + { CHAR, { CHAR_SIZE, CHAR_BIT, + SCHAR, UCHAR, + 1, 0, 0, 1, 1, "char" } }, + { SCHAR, { CHAR_SIZE, CHAR_BIT, + SCHAR, UCHAR, + 1, 0, 0, 1, 1, "signed char" } }, + { UCHAR, { CHAR_SIZE, CHAR_BIT, + SCHAR, UCHAR, + 1, 1, 0, 1, 1, "unsigned char" } }, + { SHORT, { SHORT_SIZE, 2 * CHAR_BIT, + SHORT, USHORT, + 1, 0, 0, 1, 1, "short" } }, + { USHORT, { SHORT_SIZE, 2 * CHAR_BIT, + SHORT, USHORT, + 1, 1, 0, 1, 1, "unsigned short" } }, + { INT, { INT_SIZE, 3 * CHAR_BIT, + INT, UINT, + 1, 0, 0, 1, 1, "int" } }, + { UINT, { INT_SIZE, 3 * CHAR_BIT, + INT, UINT, + 1, 1, 0, 1, 1, "unsigned int" } }, + { LONG, { LONG_SIZE, 4 * CHAR_BIT, + LONG, ULONG, + 1, 0, 0, 1, 1, "long" } }, + { ULONG, { LONG_SIZE, 4 * CHAR_BIT, + LONG, ULONG, + 1, 1, 0, 1, 1, "unsigned long" } }, + { QUAD, { QUAD_SIZE, 8 * CHAR_BIT, + QUAD, UQUAD, + 1, 0, 0, 1, 1, "long long" } }, + { UQUAD, { QUAD_SIZE, 8 * CHAR_BIT, + QUAD, UQUAD, + 1, 1, 0, 1, 1, "unsigned long long" } }, + { FLOAT, { FLOAT_SIZE, 4 * CHAR_BIT, + FLOAT, FLOAT, + 0, 0, 1, 1, 1, "float" } }, + { DOUBLE, { DOUBLE_SIZE, 8 * CHAR_BIT, + DOUBLE, DOUBLE, + 0, 0, 1, 1, 1, "double" } }, + { LDOUBLE, { LDOUBLE_SIZE, 10 * CHAR_BIT, + LDOUBLE, LDOUBLE, + 0, 0, 1, 1, 1, "long double" } }, + { VOID, { -1, -1, + VOID, VOID, + 0, 0, 0, 0, 0, "void" } }, + { STRUCT, { -1, -1, + STRUCT, STRUCT, + 0, 0, 0, 0, 0, "struct" } }, + { UNION, { -1, -1, + UNION, UNION, + 0, 0, 0, 0, 0, "union" } }, + { ENUM, { ENUM_SIZE, 3 * CHAR_BIT, + ENUM, ENUM, + 1, 0, 0, 1, 1, "enum" } }, + { PTR, { PTR_SIZE, 4 * CHAR_BIT, + PTR, PTR, + 0, 1, 0, 0, 1, "pointer" } }, + { ARRAY, { -1, -1, + ARRAY, ARRAY, + 0, 0, 0, 0, 0, "array" } }, + { FUNC, { -1, -1, + FUNC, FUNC, + 0, 0, 0, 0, 0, "function" } }, + }; + + for (i = 0; i < sizeof (ittab) / sizeof (ittab[0]); i++) + STRUCT_ASSIGN(ttab[ittab[i].it_tspec], ittab[i].it_ttab); + if (!pflag) { + for (i = 0; i < NTSPEC; i++) + ttab[i].tt_psz = ttab[i].tt_sz; + } +} diff --git a/usr.bin/xlint/common/lint.h b/usr.bin/xlint/common/lint.h new file mode 100644 index 0000000..c73f73c --- /dev/null +++ b/usr.bin/xlint/common/lint.h @@ -0,0 +1,126 @@ +/* $NetBSD: lint.h,v 1.3 2002/01/31 22:44:00 tv Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#else +#define HAVE_DECL_SYS_SIGNAME 1 +#endif + +#include <sys/types.h> +#include <stddef.h> +#include <err.h> +#include <inttypes.h> +#include <stdio.h> + +#include "param.h" + +/* + * Type specifiers, used in type structures (type_t) and otherwere. + */ +typedef enum { + NOTSPEC = 0, + SIGNED, /* keyword "signed", only used in the parser */ + UNSIGN, /* keyword "unsigned", only used in the parser */ + CHAR, /* char */ + SCHAR, /* signed char */ + UCHAR, /* unsigned char */ + SHORT, /* (signed) short */ + USHORT, /* unsigned short */ + INT, /* (signed) int */ + UINT, /* unsigned int */ + LONG, /* (signed) long */ + ULONG, /* unsigned long */ + QUAD, /* (signed) long long */ + UQUAD, /* unsigned long long */ + FLOAT, /* float */ + DOUBLE, /* double or, with tflag, long float */ + LDOUBLE, /* long double */ + VOID, /* void */ + STRUCT, /* structure tag */ + UNION, /* union tag */ + ENUM, /* enum tag */ + PTR, /* pointer */ + ARRAY, /* array */ + FUNC, /* function */ + NTSPEC +} tspec_t; + +/* + * size of types, name and classification + */ +typedef struct { + int tt_sz; /* size in bits */ + int tt_psz; /* size, different from tt_sz + if pflag is set */ + tspec_t tt_styp; /* signed counterpart */ + tspec_t tt_utyp; /* unsigned counterpart */ + u_int tt_isityp : 1; /* 1 if integer type */ + u_int tt_isutyp : 1; /* 1 if unsigned integer type */ + u_int tt_isftyp : 1; /* 1 if floating point type */ + u_int tt_isatyp : 1; /* 1 if arithmetic type */ + u_int tt_issclt : 1; /* 1 if scalar type */ + char *tt_name; /* Bezeichnung des Typs */ +} ttab_t; + +#define size(t) (ttab[t].tt_sz) +#define psize(t) (ttab[t].tt_psz) +#define styp(t) (ttab[t].tt_styp) +#define utyp(t) (ttab[t].tt_utyp) +#define isityp(t) (ttab[t].tt_isityp) +#define isutyp(t) (ttab[t].tt_isutyp) +#define isftyp(t) (ttab[t].tt_isftyp) +#define isatyp(t) (ttab[t].tt_isatyp) +#define issclt(t) (ttab[t].tt_issclt) + +extern ttab_t ttab[]; + + +typedef enum { + NODECL, /* until now not declared */ + DECL, /* declared */ + TDEF, /* tentative defined */ + DEF /* defined */ +} def_t; + +/* + * Following structure contains some data used for the output buffer. + */ +typedef struct ob { + char *o_buf; /* buffer */ + char *o_end; /* first byte after buffer */ + size_t o_len; /* length of buffer */ + char *o_nxt; /* next free byte in buffer */ +} ob_t; + +#include "externs.h" diff --git a/usr.bin/xlint/common/lp64.h b/usr.bin/xlint/common/lp64.h new file mode 100644 index 0000000..cd88700 --- /dev/null +++ b/usr.bin/xlint/common/lp64.h @@ -0,0 +1,59 @@ +/* $NetBSD: lp64.h,v 1.1 2002/01/18 20:39:23 thorpej Exp $ */ + +/* + * Copyright (c) 2001 Wasabi Systems, Inc. + * All rights reserved. + * + * Written by Jason R. Thorpe for Wasabi Systems, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the NetBSD Project by + * Wasabi Systems, Inc. + * 4. The name of Wasabi Systems, Inc. may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Type sizes for LP64 platforms (long, pointer: 64-bit) + */ + +#define CHAR_SIZE (CHAR_BIT) +#define SHORT_SIZE (2 * CHAR_BIT) +#define INT_SIZE (4 * CHAR_BIT) +#define LONG_SIZE (8 * CHAR_BIT) +#define QUAD_SIZE (8 * CHAR_BIT) +#define PTR_SIZE (8 * CHAR_BIT) + +#define TARG_INT_MAX ((int32_t) (((uint32_t) -1) >> 1)) +#define TARG_INT_MIN ((-TARG_INT_MAX) - 1) +#define TARG_UINT_MAX ((uint32_t) -1) + +#define TARG_QUAD_MAX ((int64_t) (((uint64_t) -1) >> 1)) +#define TARG_QUAD_MIN ((-TARG_QUAD_MAX) - 1) +#define TARG_UQUAD_MAX ((uint64_t) -1) + +#define TARG_LONG_MAX TARG_QUAD_MAX +#define TARG_LONG_MIN TARG_QUAD_MIN +#define TARG_ULONG_MAX TARG_UQUAD_MAX diff --git a/usr.bin/xlint/common/mem.c b/usr.bin/xlint/common/mem.c new file mode 100644 index 0000000..2621081 --- /dev/null +++ b/usr.bin/xlint/common/mem.c @@ -0,0 +1,88 @@ +/* $NetBSD: mem.c,v 1.2 2002/01/21 19:49:51 tv Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +#if defined(__RCSID) && !defined(lint) +__RCSID("$NetBSD: mem.c,v 1.2 2002/01/21 19:49:51 tv Exp $"); +#endif + +#include <stdlib.h> +#include <string.h> + +#include "lint.h" + +void * +xmalloc(size_t s) +{ + void *p; + + if ((p = malloc(s)) == NULL) + nomem(); + return (p); +} + +void * +xcalloc(size_t n, size_t s) +{ + void *p; + + if ((p = calloc(n, s)) == NULL) + nomem(); + return (p); +} + +void * +xrealloc(void *p, size_t s) +{ + + if ((p = realloc(p, s)) == NULL) + nomem(); + return (p); +} + +char * +xstrdup(const char *s) +{ + char *s2; + + if ((s2 = strdup(s)) == NULL) + nomem(); + return (s2); +} + +void +nomem(void) +{ + + errx(1, "virtual memory exhausted"); +} diff --git a/usr.bin/xlint/common/param.h b/usr.bin/xlint/common/param.h new file mode 100644 index 0000000..46f7326 --- /dev/null +++ b/usr.bin/xlint/common/param.h @@ -0,0 +1,88 @@ +/* $NetBSD: param.h,v 1.1 2002/01/18 20:39:24 thorpej Exp $ */ + +/* + * Copyright (c) 1994, 1995 Jochen Pohl + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Jochen Pohl for + * The NetBSD Project. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Minimun size of string buffer. If this is not enough, the buffer + * is enlarged in steps of STRBLEN bytes. + */ +#define STRBLEN 256 + +/* + * This defines the size of memory blocks which are used to allocate + * memory in larger chunks. + */ +#define MBLKSIZ ((size_t)0x4000) + +/* + * Sizes of hash tables + * Should be a prime. Possible primes are + * 307, 401, 503, 601, 701, 809, 907, 1009, 1103, 1201, 1301, 1409, 1511. + * + * HSHSIZ1 symbol table 1st pass + * HSHSIZ2 symbol table 2nd pass + * THSHSIZ2 type table 2nd pass + */ +#define HSHSIZ1 503 +#define HSHSIZ2 1009 +#define THSHSIZ2 1009 + +/* + * Pull in target-specific parameters. + */ +#include "targparam.h" + +/* + * Make sure this matches wchar_t. + */ +#define WCHAR INT + +/* + * long double only in ANSI C. + * + * And the sparc64 long double code generation is broken. + */ +#if !defined(__sparc64__) && defined(__STDC__) +typedef long double ldbl_t; +#else +typedef double ldbl_t; +#endif + +/* + * Some traditional compilers are not able to assign structures. + */ +#ifdef __STDC__ +#define STRUCT_ASSIGN(dest, src) (dest) = (src) +#else +#define STRUCT_ASSIGN(dest, src) (void)memcpy(&(dest), &(src), \ + sizeof (dest)); +#endif |