Compare commits

...

2 Commits

Author SHA1 Message Date
94dd38d010 Set bitmap block size to page size 2025-09-07 22:56:00 +02:00
a9ac962051 Move dlmalloc outside of kernel tree 2025-09-07 22:48:05 +02:00
7 changed files with 6381 additions and 6391 deletions

6292
dlmalloc/malloc.c Normal file

File diff suppressed because it is too large Load Diff

12
dlmalloc/malloc.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef MALLOC_MALLOC_H_
#define MALLOC_MALLOC_H_
#include <stddef.h>
void *dlmalloc(size_t);
void dlfree(void *);
void *dlcalloc(size_t, size_t);
void *dlrealloc(void *, size_t);
void *dlrealloc_in_place(void *, size_t);
#endif // MALLOC_MALLOC_H_

View File

@ -5,6 +5,8 @@
#include <stddef.h>
#include <stdbool.h>
#include "hal/hal.h"
typedef struct {
uint8_t *map;
size_t nblocks;
@ -15,7 +17,7 @@ typedef struct {
} BitMap;
#define BITMAP_BLOCKS_PER_BYTE 8
#define BITMAP_BLOCK_SIZE 0x1000
#define BITMAP_BLOCK_SIZE HAL_PAGE_SIZE
#define BITMAP_INVALID_BLOCK ((size_t)-1)
void *bitmap_toptr(BitMap *bm, size_t block);

View File

@ -0,0 +1,72 @@
// Config
#include <stddef.h>
#include "hal/hal.h"
#include "spinlock/spinlock.h"
#include "kprintf.h"
#include "bitmap/bitmap.h"
#include "util/util.h"
#include "pmm/pmm.h"
#include "malloc.h"
#include "bootinfo/bootinfo.h"
#define USE_DL_PREFIX 1
#define LACKS_SYS_TYPES_H 1
#define NO_MALLOC_STATS 1
#define LACKS_ERRNO_H 1
#define LACKS_TIME_H 1
#define LACKS_STDLIB_H 1
#define LACKS_SYS_MMAN_H 1
#define LACKS_FCNTL_H 1
#define LACKS_UNISTD_H 1
#define LACKS_SYS_PARAM_H 1
#define LACKS_STRINGS_H 1
#define LACKS_SCHED_H 1
#define HAVE_MMAP 0
#define ABORT \
do { \
ERR("dlmalloc", "Aborting..."); \
hal_hang(); \
} while(0)
#define MALLOC_FAILURE_ACTION
#define HAVE_MORECORE 1
#define USE_LOCKS 2
#define malloc_getpagesize 0x1000
#define EINVAL 0xdeadbeef
#define ENOMEM 0xb16b00b5
#define MLOCK_T SpinLock
int ACQUIRE_LOCK(SpinLock *sl) {
spinlock_acquire(sl);
return 0;
}
int RELEASE_LOCK(SpinLock *sl) {
spinlock_release(sl);
return 0;
}
int INITIAL_LOCK(SpinLock *sl) {
spinlock_release(sl);
return 0;
}
static MLOCK_T malloc_global_mutex = { 0 };
void *_last = 0;
void *sbrk(long inc) {
if (inc < 0) {
return 0;
}
if (!inc) {
return _last;
}
uint64_t blocks = _DIV_ROUNDUP(inc, BITMAP_BLOCK_SIZE);
uint8_t *virt = VIRT(pmm_alloc(blocks));
hal_memset(virt, 0, blocks * BITMAP_BLOCK_SIZE);
_last = (void *)(virt + inc);
return virt;
}

File diff suppressed because it is too large Load Diff

1
kernel/dlmalloc/malloc.c Symbolic link
View File

@ -0,0 +1 @@
../../dlmalloc/malloc.c

View File

@ -1,13 +0,0 @@
#ifndef MALLOC_MALLOC_H_
#define MALLOC_MALLOC_H_
#include <stddef.h>
void *dlmalloc(size_t);
void dlfree(void *);
void *dlcalloc(size_t, size_t);
void *dlrealloc(void *, size_t);
void *dlrealloc_in_place(void *, size_t);
void dlmalloc_check(void);
#endif // MALLOC_MALLOC_H_

1
kernel/dlmalloc/malloc.h Symbolic link
View File

@ -0,0 +1 @@
../../dlmalloc/malloc.h

View File

@ -61,7 +61,6 @@ void kmain(void) {
hal_init();
pmm_init();
hal_vmm_init();
dlmalloc_check();
storedev_init();
baseimg_init();
vfs_init();