aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/libc/malloc.c
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2022-10-18 17:29:42 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2022-10-18 17:29:42 +0200
commit9b2ffc6078a850b7d354855cca7622090b41f30c (patch)
tree33654513b0b184c27f8035dbc405640fcbeb44ab /libpsn00b/libc/malloc.c
parentb71a55bc489db6bc9beca5cee9cd584e82846ac8 (diff)
downloadpsn00bsdk-9b2ffc6078a850b7d354855cca7622090b41f30c.tar.gz
Add debug log buffering, fix GetHeapUsage()
Diffstat (limited to 'libpsn00b/libc/malloc.c')
-rw-r--r--libpsn00b/libc/malloc.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/libpsn00b/libc/malloc.c b/libpsn00b/libc/malloc.c
index acac753..e9fd6f4 100644
--- a/libpsn00b/libc/malloc.c
+++ b/libpsn00b/libc/malloc.c
@@ -120,7 +120,7 @@ __attribute__((weak)) void *malloc(size_t size) {
_alloc_head = new;
_alloc_tail = new;
- TrackHeapUsage(_size);
+ TrackHeapUsage(size);
return ptr;
}
@@ -139,7 +139,7 @@ __attribute__((weak)) void *malloc(size_t size) {
_alloc_head->prev = new;
_alloc_head = new;
- TrackHeapUsage(_size);
+ TrackHeapUsage(size);
return ptr;
}
@@ -157,7 +157,7 @@ __attribute__((weak)) void *malloc(size_t size) {
(new->next)->prev = new;
prev->next = new;
- TrackHeapUsage(_size);
+ TrackHeapUsage(size);
return ptr;
}
@@ -175,7 +175,7 @@ __attribute__((weak)) void *malloc(size_t size) {
_alloc_tail->next = new;
_alloc_tail = new;
- TrackHeapUsage(_size);
+ TrackHeapUsage(size);
return ptr;
}
@@ -196,7 +196,7 @@ __attribute__((weak)) void *realloc(void *ptr, size_t size) {
// New memory block shorter?
if (prev->size >= _size) {
- TrackHeapUsage(_size - prev->size);
+ TrackHeapUsage(size - prev->size);
prev->size = _size;
if (!prev->next)
@@ -211,14 +211,14 @@ __attribute__((weak)) void *realloc(void *ptr, size_t size) {
if (!new)
return 0;
- TrackHeapUsage(_size - prev->size);
+ TrackHeapUsage(size - prev->size);
prev->size = _size;
return ptr;
}
// Do we have free memory after it?
if (((prev->next)->ptr - ptr) > _size) {
- TrackHeapUsage(_size - prev->size);
+ TrackHeapUsage(size - prev->size);
prev->size = _size;
return ptr;
}
@@ -250,7 +250,7 @@ __attribute__((weak)) void free(void *ptr) {
sbrk(-size);
}
- TrackHeapUsage(-size);
+ TrackHeapUsage(-(_alloc_head->size));
return;
}
@@ -265,17 +265,15 @@ __attribute__((weak)) void free(void *ptr) {
if (cur->next) {
// In the middle, just unlink it
(cur->next)->prev = cur->prev;
- TrackHeapUsage(-(cur->size + sizeof(BlockHeader)));
} else {
// At the end, shrink heap
- _alloc_tail = cur->prev;
-
void *top = sbrk(0);
size_t size = (top - (cur->prev)->ptr) - (cur->prev)->size;
+ _alloc_tail = cur->prev;
sbrk(-size);
- TrackHeapUsage(-size);
}
+ TrackHeapUsage(-(cur->size));
(cur->prev)->next = cur->next;
}