Compare commits

..

3 commits

Author SHA1 Message Date
Imbus
435b712f25 Freelist testing in start 2025-09-09 12:10:05 +02:00
Imbus
9df66792f2 Limits 2025-09-09 12:09:57 +02:00
Imbus
323522b03c Memcmp 2025-09-09 12:09:53 +02:00
3 changed files with 50 additions and 10 deletions

26
kern/libkern/limits.h Normal file
View file

@ -0,0 +1,26 @@
/* Support signed or unsigned plain-char */
#if '\xff' > 0
#define CHAR_MIN 0
#define CHAR_MAX 255
#else
#define CHAR_MIN (-128)
#define CHAR_MAX 127
#endif
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 255
#define SHRT_MIN (-1 - 0x7fff)
#define SHRT_MAX 0x7fff
#define USHRT_MAX 0xffff
#define INT_MIN (-1 - 0x7fffffff)
#define INT_MAX 0x7fffffff
#define UINT_MAX 0xffffffffU
#define LONG_MIN (-LONG_MAX - 1)
#define LONG_MAX __LONG_MAX
#define ULONG_MAX (2UL * LONG_MAX + 1)
#define LLONG_MIN (-LLONG_MAX - 1)
#define LLONG_MAX 0x7fffffffffffffffLL
#define ULLONG_MAX (2ULL * LLONG_MAX + 1)

View file

@ -154,15 +154,10 @@ char *itoa(int value, char *str, int base) {
return str;
}
int memcmp(const void *s1, const void *s2, size_t len) {
const u8 *a = (const u8 *)s1;
const u8 *b = (const u8 *)s2;
for (size_t i = 0; i < len; i++) {
if (a[i] != b[i]) {
return (int)a[i] - (int)b[i];
}
}
return 0;
int memcmp(const void *vl, const void *vr, size_t n) {
const unsigned char *l = vl, *r = vr;
for (; n && *l == *r; n--, l++, r++);
return n ? *l - *r : 0;
}
size_t strlen(const char *s) {

View file

@ -2,6 +2,7 @@
#include <banner.h>
#include <buddy.h>
#include <config.h>
#include <freelist.h>
#include <memory.h>
#include <panic.h>
#include <proc.h>
@ -11,6 +12,7 @@
#include <stdio.h>
#include <string.h>
#include <uart.h>
#include <util.h>
/**
* Allocate one stack per CPU (hart).
@ -39,7 +41,7 @@ void start() {
// cpu (struct Cpu).
write_tp(id);
if (id == 0) {
if (unlikely(id == 0)) {
/* Here we will do a bunch of initialization steps */
memory_sweep(heap_start, heap_end);
buddy_init(heap_start, heap_end);
@ -60,6 +62,23 @@ void start() {
else
PANIC("Some cores seem to have been enumerated incorrectly!\n");
{
FreeList fl;
void *mem = buddy_alloc(4096);
fl_init(&fl, (uintptr_t)mem, 4096, sizeof(int));
uint32_t *hello = fl_alloc(&fl);
*hello = UINT32_MAX;
int a = fl_available(&fl);
assert_msg(fl_check(&fl) > 0, "FreeList checking failed, might be corrupt.");
kprintf("Available: %d\n", a);
kprintf("Size: %d\n", fl.size);
buddy_free(mem);
}
kprintf("To exit qemu, press CTRL+a followed by x\n");
spin_unlock(&sl);
}