tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] Small patch


From: Domingo Alvarez Duarte
Subject: Re: [Tinycc-devel] Small patch
Date: Thu, 31 Jan 2013 01:19:38 +0000

Here is some that I found simple to make:

Author: mingodad <address@hidden>  2013-01-31 01:17:50
Committer: mingodad <address@hidden>  2013-01-31 01:17:50
Parent: 1b1e7ee1fd2f269872128dc5e8b830bd55dfa80c (Fix cross-compilation out-of-tree build)
Branch: vio_patch
Follows: release_0_9_25
Precedes:

    Alerts found using Coverity Scan

----------------------------------- libtcc.c -----------------------------------
index b0a9b1a..69d9e0d 100644
@@ -479,8 +479,7 @@ ST_FUNC void put_extern_sym2(Sym *sym, Section *section,
             case TOK_strlen:
             case TOK_strcpy:
             case TOK_alloca:
-                strcpy(buf, "__bound_");
-                strcat(buf, name);
+                snprintf(buf, sizeof(buf), "__bound_%s", name);
                 name = buf;
                 break;
             }

----------------------------------- tccelf.c -----------------------------------
index a4dee19..479b2fa 100644
@@ -114,7 +114,7 @@ ST_FUNC int put_elf_sym(Section *s, uplong value, unsigned long size,
         if (ELFW(ST_BIND)(info) != STB_LOCAL) {
             /* add another hashing entry */
             nbuckets = base[0];
-            h = elf_hash(name) % nbuckets;
+            h = name ? elf_hash(name) % nbuckets : 0;
             *ptr = base[2 + h];
             base[2 + h] = sym_index;
             base[1]++;
@@ -3052,7 +3052,7 @@ static int ld_add_file_list(TCCState *s1, const char *cmd, int as_needed)
                 ret = -1;
                 goto lib_parse_error;
             }
-            strcpy(libname, &filename[1]);
+            snprintf(libname, sizeof(libname), "%s", &filename[1]);
             libname_to_filename(s1, libname, filename);
         } else if (t != LD_TOK_NAME) {
             tcc_error_noabort("filename expected");

----------------------------------- tccgen.c -----------------------------------
index 4300403..e06a932 100644
@@ -361,6 +361,7 @@ void vpush64(int ty, unsigned long long v)
     CValue cval;
     CType ctype;
     ctype.t = ty;
+    ctype.ref = 0;
     cval.ull = v;
     vsetc(&ctype, VT_CONST, &cval);
 }
@@ -1734,6 +1735,7 @@ ST_FUNC void gen_op(int op)
         }
         vswap();
         type1.t = t;
+        type1.ref = 0;
         gen_cast(&type1);
         vswap();
         /* special case for shifts and long long: we keep the shift as
@@ -2717,6 +2719,7 @@ static void struct_decl(CType *type, int u)
         v = anon_sym++;
     }
     type1.t = a;
+    type1.ref = 0;
     /* we put an undefined size for struct/union */
     s = sym_push(v | SYM_STRUCT, &type1, 0, -1);
     s->r = 0; /* default alignment is zero as gcc */
@@ -3396,6 +3399,7 @@ static void gfunc_param_typed(Sym *func, Sym *arg)
         /* default casting : only need to convert float to double */
         if ((vtop->type.t & VT_BTYPE) == VT_FLOAT) {
             type.t = VT_DOUBLE;
+            type.ref = 0;
             gen_cast(&type);
         }
     } else if (arg == NULL) {
@@ -3592,6 +3596,7 @@ ST_FUNC void unary(void)
         if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
             CType boolean;
             boolean.t = VT_BOOL;
+            boolean.ref = 0;
             gen_cast(&boolean);
             vtop->c.i = !vtop->c.i;
         } else if ((vtop->r & VT_VALMASK) == VT_CMP)
@@ -4101,6 +4106,7 @@ static void expr_cond(void)
             CType boolean;
             int c;
             boolean.t = VT_BOOL;
+            boolean.ref = 0;
             vdup();
             gen_cast(&boolean);
             c = vtop->c.i;
@@ -5574,7 +5580,7 @@ ST_FUNC void gen_inline_functions(void)
                 str = fn->token_str;
                 fn->sym = NULL;
                 if (file)
-                    strcpy(file->filename, fn->filename);
+                    snprintf(file->filename, sizeof(file->filename), "%s", fn->filename);
                 sym->r = VT_SYM | VT_CONST;
                 sym->type.t &= ~VT_INLINE;
 



On Thu, Jan 31, 2013 at 1:13 AM, Domingo Alvarez Duarte <address@hidden> wrote:
Also on this function:

CID 968150 (#1 of 1): Unchecked return value (CHECKED_RETURN)6. check_return: Calling function "parse_btype(CType *, AttributeDef *)" without checking return value (as is done elsewhere 7 out of 8 times).


/* enum/struct/union declaration. u is either VT_ENUM or VT_STRUCT */
static void struct_decl(CType *type, int u)
{
...
            bit_pos = 0;
            offset = 0;
            while (tok != '}') {
                parse_btype(&btype, &ad); //// no check made here ?????????????????
                while (1) {
                    bit_size = -1;
                    v = 0;
                    type1 = btype;



On Thu, Jan 31, 2013 at 1:07 AM, Domingo Alvarez Duarte <address@hidden> wrote:
Also here :

static void asm_expr_logic(TCCState *s1, ExprValue *pe)
{
    int op;
    ExprValue e2;

    asm_expr_prod(s1, pe);

    for(;;) {
        op = tok;
        if (op != '&' && op != '|' && op != '^')
            break;
        next();
        asm_expr_prod(s1, &e2);

        if (pe->sym || e2.sym)
            tcc_error("invalid operation with label");
        switch(op) {
        case '&':
            pe->v &= e2.v;
            break;
        case '|': 
            pe->v |= e2.v;
            break;
        default:
        case '^':  ///////////////////////////////////////what this case after default mean ????????
            pe->v ^= e2.v;
            break;
        }
    }
}



On Thu, Jan 31, 2013 at 1:06 AM, Domingo Alvarez Duarte <address@hidden> wrote:
Hello !
I'm looking again on the reports done with Coverity Scan and found several things one of it is this:

static void asm_expr_prod(TCCState *s1, ExprValue *pe)
{
    int op;
    ExprValue e2;

    asm_expr_unary(s1, pe);
    for(;;) {
        op = tok;
        if (op != '*' && op != '/' && op != '%' &&
            op != TOK_SHL && op != TOK_SAR)
            break;
        next();
        asm_expr_unary(s1, &e2);
        if (pe->sym || e2.sym)
            tcc_error("invalid operation with label");
        switch(op) {
        case '*':
            pe->v *= e2.v;
            break;
        case '/': 
            if (e2.v == 0) {
            div_error:
                tcc_error("division by zero");
            }
            pe->v /= e2.v;
            break;
        case '%': 
            if (e2.v == 0)
                goto div_error;
            pe->v %= e2.v;
            break;
        case TOK_SHL:
            pe->v <<= e2.v;
            break;
        default:
        case TOK_SAR:    ////////////////////////////////////////this case after default what does it mean ??????????????
            pe->v >>= e2.v;
            break;
        }
    }
}



On Wed, Jan 30, 2013 at 11:08 PM, Ivo van Poorten <address@hidden> wrote:
Error:

$ ./configure --cc=tcc
Binary  directory   /usr/local/bin
TinyCC directory    /usr/local/lib/tcc
Library directory   /usr/local/lib
Include directory   /usr/local/include
Manual directory    /usr/local/share/man
Info directory      /usr/local/share/info
Doc directory       /usr/local/share/doc/tcc
Target root prefix
Source path      /home/ivo/git/tinycc
C compiler       tcc
Target OS        Linux
CPU              x86
Big Endian       no
gprof enabled    no
cross compilers  no
use libgcc       no
Creating config.mak and config.h
$ make
[..snip..]
gcc -c lib/bcheck.c -o bcheck.o -I. -I/home/ivo/git/tinycc -Wall -g -O2
-mpreferred-stack-boundary=2 -m386 -malign-functions=0 -m32 cc1: error:
unrecognized command line option "-m386"


----8<----8<----8<----8<----8<----8<----8<----8<----

diff --git a/Makefile b/Makefile
index d257464..0333ebe 100644
--- a/Makefile
+++ b/Makefile
@@ -232,7 +232,7 @@ libtcc1.a : FORCE
 lib/%/libtcc1.a : FORCE $(PROGS_CROSS)
        @$(MAKE) -C lib cross TARGET=$*
 bcheck.o : lib/bcheck.c
-       gcc -c $< -o $@ $(CPPFLAGS) $(CFLAGS)
+       $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS)
 FORCE:

 # install

_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel





reply via email to

[Prev in Thread] Current Thread [Next in Thread]