Avoid declaring arrays of size 0 when making large stack allocations.
This commit is contained in:
parent
5a6a2bed9a
commit
05978528c3
|
@ -47,14 +47,15 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
* - large enough to support all architectures and kernel
|
* - large enough to support all architectures and kernel
|
||||||
* Chosing a too small SIZE will lead to a stack smashing.
|
* Chosing a too small SIZE will lead to a stack smashing.
|
||||||
*/
|
*/
|
||||||
#define STACK_ALLOC(SIZE, TYPE, BUFFER) \
|
#define STACK_ALLOC(SIZE, TYPE, BUFFER) \
|
||||||
/* make it volatile because some function (ex: dgemv_n.S) */ \
|
/* make it volatile because some function (ex: dgemv_n.S) */ \
|
||||||
/* do not restore all register */ \
|
/* do not restore all register */ \
|
||||||
volatile int stack_alloc_size = SIZE; \
|
volatile int stack_alloc_size = SIZE; \
|
||||||
if(stack_alloc_size > MAX_STACK_ALLOC / sizeof(TYPE)) \
|
if (stack_alloc_size > MAX_STACK_ALLOC / sizeof(TYPE)) stack_alloc_size = 0; \
|
||||||
stack_alloc_size = 0; \
|
STACK_ALLOC_PROTECT_SET \
|
||||||
STACK_ALLOC_PROTECT_SET \
|
/* Avoid declaring an array of length 0 */ \
|
||||||
TYPE stack_buffer[stack_alloc_size] __attribute__((aligned(0x20))); \
|
TYPE stack_buffer[stack_alloc_size ? stack_alloc_size : 1] \
|
||||||
|
__attribute__((aligned(0x20))); \
|
||||||
BUFFER = stack_alloc_size ? stack_buffer : (TYPE *)blas_memory_alloc(1);
|
BUFFER = stack_alloc_size ? stack_buffer : (TYPE *)blas_memory_alloc(1);
|
||||||
#else
|
#else
|
||||||
//Original OpenBLAS/GotoBLAS codes.
|
//Original OpenBLAS/GotoBLAS codes.
|
||||||
|
|
Loading…
Reference in New Issue