tinycc-devel
[Top][All Lists]
Advanced

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

[Tinycc-devel] core dump because stack overwritten


From: Herman ten Brugge
Subject: [Tinycc-devel] core dump because stack overwritten
Date: Tue, 22 Oct 2019 22:14:39 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1

I have a small testcase:

--------------
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

int
main(void)
{
  struct tst_struct { uint64_t cnt; } *tst =
    (struct tst_struct *) malloc (sizeof (struct tst_struct));

  tst->cnt = 42;
  printf ("%" PRIu64 " %" PRIu64 "\n", tst->cnt, (uint64_t) (tst->cnt / 1.0));
  return 0;
}
----------------
when I compile this with tcc and run it I get a core dump. The problem is that the stack is overwritten.
I have a fix.

------------------------
--- a/tccgen.c  2019-10-22 19:52:48.761977245 +0200
+++ b/tccgen.c  2019-10-22 22:08:08.465825842 +0200
@@ -1203,7 +1203,7 @@ ST_FUNC void save_reg_upstack(int r, int
                 }
 #endif
                 /* special long long case */
-                if ((p->r2 & VT_VALMASK) < VT_CONST) {
+                if (PTR_SIZE == 4 && (p->r2 & VT_VALMASK) < VT_CONST) {
                     sv.c.i += PTR_SIZE;
                     store(p->r2, &sv);
                 }
---------------------
But am not sure if this is the correct fix. The code generator is quite complex.

    Herman




reply via email to

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