Avoid declaring arrays of size 0 when making large stack allocations.

This commit is contained in:
Craig Donner 2018-06-20 17:03:18 +01:00
parent 5a6a2bed9a
commit 05978528c3
1 changed files with 9 additions and 8 deletions

View File

@ -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.