This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[PATCH] SPU use current stack pointer to limit sbrk() heap allocation
- From: Patrick Mansfield <patmans at us dot ibm dot com>
- To: newlib at sourceware dot org, Jeff Johnston <jjohnstn at redhat dot com>
- Date: Mon, 17 Sep 2007 14:40:51 -0700
- Subject: [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;