This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] SPU use current stack pointer to limit sbrk() heap allocation


libgloss ChangeLog:

2007-09-17 Patrick Mansfield <patmans@us.ibm.com>

	* spu/sbrk.c: Use the current stack pointer value rather than the
	maximum available memory to determine the amount of heap space
	left. Without this change calling sbrk() can allocate space that
	is currently in use on the stack.

Index: src/libgloss/spu/sbrk.c
===================================================================
--- src.orig/libgloss/spu/sbrk.c
+++ src/libgloss/spu/sbrk.c
@@ -37,7 +37,6 @@ Author: Andreas Neukoetter (ti95neuk@de.
 extern int errno;
 
 extern caddr_t  _end;
-#define RAMSIZE 262144
 #define STACKSIZE 4096
 
 void *
@@ -47,6 +46,7 @@ sbrk (ptrdiff_t increment)
 	caddr_t base;
 	vector unsigned int sp_reg, sp_delta;
 	vector unsigned int *sp_ptr;
+	caddr_t sps;
 
 	/* The stack pointer register.  */
 	volatile register vector unsigned int sp_r1 __asm__("1");
@@ -54,7 +54,8 @@ sbrk (ptrdiff_t increment)
 	if (heap_ptr == NULL)
 	  heap_ptr = (caddr_t) & _end;
 	
-	if (((RAMSIZE - STACKSIZE) - (int) heap_ptr) >= increment)
+	sps = (caddr_t) spu_extract (sp_r1, 0);
+	if (((int) sps - STACKSIZE - (int) heap_ptr) >= increment)
 	  {
 	    base = heap_ptr;
 	    heap_ptr += increment;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]