summaryrefslogtreecommitdiff
path: root/src/stdlib/__jkmalloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdlib/__jkmalloc.c')
-rw-r--r--src/stdlib/__jkmalloc.c49
1 files changed, 12 insertions, 37 deletions
diff --git a/src/stdlib/__jkmalloc.c b/src/stdlib/__jkmalloc.c
index b97fa10c..c55842ea 100644
--- a/src/stdlib/__jkmalloc.c
+++ b/src/stdlib/__jkmalloc.c
@@ -11,43 +11,14 @@
#include <sys/mman.h>
#include <unistd.h>
#else
-#include "_syscall.h"
+#include "_forced/sigaction.h"
+#include "_forced/mmap.h"
+#include "_forced/munmap.h"
+#include "_forced/mprotect.h"
#define sysconf(__n) 4096
-
-#define mprotect(__ptr, __len, __prot) __syscall(__sys_mprotect, __ptr, __len, __prot)
-#define mmap(_a, _l, _p, _fl, _fd, _o) (void*)__syscall(__sys_mmap, _a, _l, _p, _fl, _fd, _o)
-#define munmap(_a, _l) __syscall(__sys_munmap, _a, _l)
-#define open(_p, _a, _m) __syscall(__sys_open, _p, _a, _m)
-
-typedef unsigned long pid_t;
-typedef unsigned long uid_t;
-typedef unsigned long clock_t;
-#include "signal/sigset_t.h"
-#include "signal/union_sigval.h"
-#include "signal/siginfo_t.h"
-
-#define _POSIX_C_SOURCE 199506L
-#include "signal/struct_sigaction.h"
-
-static int sigaction(int, const struct sigaction * restrict, struct sigaction * restrict);
-
-#include "signal/sigaction.c"
-
-#define SA_RESTART 0x10000000
-#define SA_RESTORER 0x04000000
-
-#define O_RDWR 02
-#define PROT_NONE 0x0
-#define PROT_READ 0x1
-#define PROT_WRITE 0x2
-#define MAP_PRIVATE 0x02
-#define MAP_FAILED (void*)(-1)
-#define MAP_ANONYMOUS (0x20)
#define psiginfo(x, y) fprintf(stderr, "%s (%p)\n", (char*)(y), (void*)(x))
-
#define sigemptyset(x) memset(x, 0, sizeof(*x))
-
#endif
#include "_jkmalloc.h"
@@ -195,7 +166,7 @@ static void jk_sigsegv(int sig)
}
*/
-void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1, size_t size2)
+void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr, size_t alignment, size_t size1, size_t size2, const char *user)
{
static int sa_set = 0;
if (!sa_set) {
@@ -296,7 +267,7 @@ void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr,
__jk_error("Attempt to reallocate() incorrect address", ptr, &src);
}
- void *newptr = __jkmalloc(NULL, NULL, 0, NULL, alignment, size1, size2);
+ void *newptr = __jkmalloc(NULL, NULL, 0, NULL, alignment, size1, size2, user);
if (newptr != NULL) {
memmove(newptr, ptr, b->size);
free(ptr);
@@ -345,7 +316,11 @@ void* __jkmalloc(const char *file, const char *func, uintmax_t line, void *ptr,
if (file) {
under->tlen = snprintf(under->trace, __jk_pagesize - sizeof(*under), "+++ %s() (%s:%ju)", func, file, line);
- memmove(over->trace, under->trace, under->tlen + 1);
+ memcpy(over->trace, under->trace, under->tlen + 1);
+ over->tlen = under->tlen;
+ } else if (user) {
+ under->tlen = snprintf(under->trace, __jk_pagesize - sizeof(*under), "Read-only memory for %s", user);
+ memcpy(over->trace, under->trace, under->tlen + 1);
over->tlen = under->tlen;
} else {
under->trace[0] = '\0';
@@ -372,7 +347,7 @@ int (jk_memalign)(void **ptr, size_t a, size_t n)
return EINVAL;
}
- if (((*ptr) = __jkmalloc(NULL, NULL, 0, NULL, a, n, 0)) == NULL) {
+ if (((*ptr) = __jkmalloc(NULL, NULL, 0, NULL, a, n, 0, NULL)) == NULL) {
return errno;
}