aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/libc
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
parentb71a55bc489db6bc9beca5cee9cd584e82846ac8 (diff)
downloadpsn00bsdk-9b2ffc6078a850b7d354855cca7622090b41f30c.tar.gz
Add debug log buffering, fix GetHeapUsage()
Diffstat (limited to 'libpsn00b/libc')
-rw-r--r--libpsn00b/libc/abort.c16
-rw-r--r--libpsn00b/libc/malloc.c22
2 files changed, 15 insertions, 23 deletions
diff --git a/libpsn00b/libc/abort.c b/libpsn00b/libc/abort.c
index 1108160..2db5016 100644
--- a/libpsn00b/libc/abort.c
+++ b/libpsn00b/libc/abort.c
@@ -1,16 +1,10 @@
-#include <stdio.h>
-
-#ifdef NDEBUG
-#define _LOG(...)
-#else
-#define _LOG(...) printf(__VA_ARGS__)
-#endif
+#include <psxetc.h>
/* Standard abort */
-void abort() {
- _LOG("abort()\n");
+void abort(void) {
+ _sdk_log("abort()\n");
for (;;)
__asm__ volatile("");
@@ -19,7 +13,7 @@ void abort() {
/* Internal function used by assert() macro */
void _assert_abort(const char *file, int line, const char *expr) {
- _LOG("%s:%d: assert(%s)\n", file, line, expr);
+ _sdk_log("%s:%d: assert(%s)\n", file, line, expr);
for (;;)
__asm__ volatile("");
@@ -28,7 +22,7 @@ void _assert_abort(const char *file, int line, const char *expr) {
/* Pure virtual function call (C++) */
void __cxa_pure_virtual(void) {
- _LOG("__cxa_pure_virtual()\n");
+ _sdk_log("__cxa_pure_virtual()\n");
for (;;)
__asm__ volatile("");
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;
}