tinycc-devel
[Top][All Lists]
Advanced

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

Re: [Tinycc-devel] Problem using alloca


From: Carlos Montiers
Subject: Re: [Tinycc-devel] Problem using alloca
Date: Mon, 30 Jun 2014 13:20:05 -0400

I think is a bug of tiny c.
I use the tiny c for x86.
The problem is that the stack overflow exception that generates alloca, is not catched with the function passed to SetUnhandledExceptionFilter. This only happen with the executable created with tiny c. When I compile the executable with mingw. The exception is catched ok.

I imitate the behavior with malloc, if the allocation fails, I set the pointer to NULL.
I use MAX_INT intentionally for provocate the exception.

Executable created with mingw print alloca Failed


Executable created with the last tiny c for x86: crash !!

I know that the default stack size on windows for the executable is only 1mb.
But I want use the method with alloca as a recovery method when malloc fails (improbable but possible).


Carlos.





2014-06-30 10:44 GMT-04:00 Thomas Preud'homme <address@hidden>:
Le dimanche 29 juin 2014, 21:38:33 Carlos Montiers a écrit :
> Hello.
> I requesting memory from the stack using the function alloca.
> I know that the use of it is discourage, but I want use it anyways.
>
> I write a code for windows that use it and I tested ok, but only when I
> compile with gcc. Compiling it with tiny c fails, the program crash.
> Maybe is a bug of tiny c.

I assume that your program is compiled on Windows 64 bits, given the alloca
(INT_MAX). The definition of alloca for Windows 64 bits is in
lib/alloca86_64.S. When the parameter is bigger than 4096, then it will do a
loop that allocates 4096 bytes on the stack, read a value on the stack and
start all over again until all the space asked is allocated. I suppose that
the goal of the read is to make Windows actually allocate the space to avoid
an error if a big alloca is made.

I don't know for Windows but on Linux nothing is allocated as long as nothing
is written. So a big alloca would do nothing and then writing a bit structure
on the stack would fail as it would make the stack grow too quickly. I guess
that's what is happening here. Try to reduce the amount given to alloca (Try
8192 for instance).

Best regards,

Thomas


reply via email to

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