Align libgloss/arm and libc/sys/arm sources: HeapInfo and __heap_limit
Applied changes from commit 8d98f95: * arm/crt0.S: Initialise __heap_limit when ARM_RDI_MONITOR is defined. * arm/syscalls.c: define __heap_limit global symbol. * arm/syscalls.c (_sbrk): Honour __heap_limit. Applied changes from commit 8d98f95: Fixed semihosting for ARM when heapinfo not provided by debugger
This commit is contained in:
parent
37e80fbb1c
commit
dfffe68303
|
@ -282,6 +282,13 @@
|
|||
#endif
|
||||
ldr r0, .LC0 /* Point at values read. */
|
||||
|
||||
/* Set __heap_limit. */
|
||||
ldr r1, [r0, #4]
|
||||
cmp r1, #0
|
||||
beq .LC33
|
||||
ldr r2, =__heap_limit
|
||||
str r1, [r2]
|
||||
.LC33:
|
||||
ldr r1, [r0, #0]
|
||||
cmp r1, #0
|
||||
bne .LC32
|
||||
|
|
|
@ -487,6 +487,9 @@ _getpid (void)
|
|||
return (pid_t)1;
|
||||
}
|
||||
|
||||
/* Heap limit returned from SYS_HEAPINFO Angel semihost call. */
|
||||
uint __heap_limit = 0xcafedead;
|
||||
|
||||
void * __attribute__((weak))
|
||||
_sbrk (ptrdiff_t incr)
|
||||
{
|
||||
|
@ -499,7 +502,9 @@ _sbrk (ptrdiff_t incr)
|
|||
|
||||
prev_heap_end = heap_end;
|
||||
|
||||
if (heap_end + incr > stack_ptr)
|
||||
if ((heap_end + incr > stack_ptr)
|
||||
/* Honour heap limit if it's valid. */
|
||||
|| (__heap_limit != 0xcafedead && heap_end + incr > (char *)__heap_limit))
|
||||
{
|
||||
/* Some of the libstdc++-v3 tests rely upon detecting
|
||||
out of memory errors, so do not abort here. */
|
||||
|
|
Loading…
Reference in New Issue