process_mem #10
8
Makefile
8
Makefile
@@ -1,4 +1,4 @@
|
||||
SOURCES = src/boot/boot.c src/sched/scheduler.c src/sched/process.c src/mem/heap/kheap.c src/mem/paging/vmm.c src/mem/paging/paging.c src/mem/paging/pmm.c src/string/string.c src/io/kbd/ps2.c src/io/serial/serial.c src/io/term/printf.c src/io/term/term.c src/idt/idt.c src/mem/gdt/gdt.c src/mem/misc/utils.c src/time/timer.c src/kmain.c
|
||||
SOURCES = src/debug/panic.c src/debug/stacktrace.c src/boot/boot.c src/sched/scheduler.c src/sched/process.c src/mem/heap/kheap.c src/mem/paging/vmm.c src/mem/paging/paging.c src/mem/paging/pmm.c src/string/string.c src/io/kbd/ps2.c src/io/serial/serial.c src/io/term/printf.c src/io/term/term.c src/idt/idt.c src/mem/gdt/gdt.c src/mem/misc/utils.c src/time/timer.c src/kmain.c
|
||||
|
||||
PROBLEMATIC_FLAGS=-Wno-unused-parameter -Wno-unused-variable
|
||||
|
||||
@@ -9,6 +9,10 @@ build:
|
||||
nasm -f elf64 src/idt/idt.S -o idt_stub.o
|
||||
nasm -f elf64 src/entry.S -o entry.o
|
||||
x86_64-elf-ld -o pepperk -T linker.ld *.o
|
||||
nm -n pepperk | awk '$$2 ~ /[TtDdBbRr]/ {print $$1, $$3}' > symbols.map
|
||||
python3 symbols.py
|
||||
nasm -f elf64 symbols.S -o symbols.o
|
||||
x86_64-elf-ld -o pepperk -T linker.ld *.o
|
||||
|
||||
limine/limine:
|
||||
rm -rf limine
|
||||
@@ -44,4 +48,4 @@ run: build-iso
|
||||
/usr/bin/qemu-system-x86_64 -cdrom pepper.iso -serial stdio
|
||||
|
||||
clean:
|
||||
rm -rf *.o pepperk iso_root pepper.iso limine
|
||||
rm -rf *.o symbols.map symbols.S pepperk iso_root pepper.iso limine
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## Trying the kernel
|
||||
|
||||
First install the dependencies: `sudo apt install xorriso make qemu-system`
|
||||
First install the dependencies: `sudo apt install python3 xorriso make qemu-system`
|
||||
|
||||
Then, to compile the kernel and make an ISO image file: `make build-iso`
|
||||
To run it with QEMU, `make run`
|
||||
|
||||
23
src/debug/panic.c
Normal file
23
src/debug/panic.c
Normal file
@@ -0,0 +1,23 @@
|
||||
#include <stddef.h>
|
||||
#include "idt/idt.h"
|
||||
#include "io/serial/serial.h"
|
||||
#include "kernel.h"
|
||||
|
||||
void panic(struct cpu_status_t* ctx, const char* str)
|
||||
{
|
||||
CLEAR_INTERRUPTS;
|
||||
if (ctx == NULL)
|
||||
{
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m Something went horribly wrong! (no cpu ctx)");
|
||||
DIE_DEBUG(str);
|
||||
skputc('\n');
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mend Kernel panic - halting...\x1b[0m");
|
||||
hcf();
|
||||
}
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m at rip=%p\nSomething went horribly wrong! vect=0x%.2x errcode=0x%x\n\rrax=%p rbx=%p rcx=%p rdx=%p\n\rrsi=%p rdi=%p r8=%p r9=%p\n\rr10=%p r11=%p r12=%p r13=%p\n\rr14=%p r15=%p\n\n\rflags=%p\n\rHalting...",
|
||||
ctx->iret_rip,
|
||||
ctx->vector_number, ctx->error_code, ctx->rax, ctx->rbx, ctx->rcx, ctx->rdx, ctx->rsi, ctx->rdi,
|
||||
ctx->r8, ctx->r9, ctx->r10, ctx->r11, ctx->r12, ctx->r13, ctx->r14, ctx->r15, ctx->iret_flags);
|
||||
debug_stack_trace(100);
|
||||
hcf();
|
||||
}
|
||||
75
src/debug/stacktrace.c
Normal file
75
src/debug/stacktrace.c
Normal file
@@ -0,0 +1,75 @@
|
||||
#include <stdint.h>
|
||||
#include "kernel.h"
|
||||
|
||||
void debug_stack_trace(unsigned int max_frames)
|
||||
{
|
||||
DEBUG("*** begin stack trace ***");
|
||||
// Thanks GCC :)
|
||||
uintptr_t* rbp = (uintptr_t*)__builtin_frame_address(0);
|
||||
|
||||
for (unsigned int frame=0; frame<max_frames && rbp != NULL; frame++)
|
||||
{
|
||||
// Return address, 1 word above saved rbp
|
||||
uintptr_t rip = rbp[1];
|
||||
uintptr_t offset = 0;
|
||||
const char* name = debug_find_symbol(rip, &offset);
|
||||
DEBUG("[%u] <0x%p> (%s+0x%x)", frame, (void*)rip, name, offset);
|
||||
|
||||
uintptr_t* next_rbp = (uintptr_t*)rbp[0];
|
||||
|
||||
// invalid rbp or we're at the end
|
||||
if (next_rbp <= rbp || next_rbp == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
rbp = next_rbp;
|
||||
}
|
||||
DEBUG("*** end stack trace ***");
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint64_t addr;
|
||||
const char *name;
|
||||
} __attribute__((packed)) kernel_symbol_t;
|
||||
|
||||
__attribute__((weak)) extern kernel_symbol_t symbol_table[];
|
||||
__attribute__((weak)) extern uint64_t symbol_count;
|
||||
|
||||
// binary search
|
||||
const char* debug_find_symbol(uintptr_t rip, uintptr_t* offset)
|
||||
{
|
||||
if (!symbol_table || symbol_count == 0)
|
||||
{
|
||||
if (offset) *offset = 0;
|
||||
return "???";
|
||||
}
|
||||
|
||||
int low = 0, high = (int)symbol_count - 1;
|
||||
int best = -1;
|
||||
|
||||
while (low <= high)
|
||||
{
|
||||
int mid = (low + high) / 2;
|
||||
if (symbol_table[mid].addr <= rip)
|
||||
{
|
||||
best = mid;
|
||||
low = mid + 1;
|
||||
} else {
|
||||
high = mid - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (best != -1)
|
||||
{
|
||||
if (offset)
|
||||
{
|
||||
*offset = rip - symbol_table[best].addr;
|
||||
}
|
||||
return symbol_table[best].name;
|
||||
}
|
||||
|
||||
if (offset) *offset = 0;
|
||||
return "unknown";
|
||||
}
|
||||
@@ -31,6 +31,10 @@ enum ErrorCodes
|
||||
void panic(struct cpu_status_t* ctx, const char* str);
|
||||
void hcf();
|
||||
void idle();
|
||||
|
||||
void debug_stack_trace(unsigned int max_frames);
|
||||
const char* debug_find_symbol(uintptr_t rip, uintptr_t* offset);
|
||||
|
||||
#define assert(check) do { if(!(check)) hcf(); } while(0)
|
||||
|
||||
struct boot_context
|
||||
|
||||
26
src/kmain.c
26
src/kmain.c
@@ -39,25 +39,6 @@ void idle() {SET_INTERRUPTS; for(;;)asm("hlt");}
|
||||
|
||||
uint8_t kernel_stack[KERNEL_STACK_SIZE] __attribute__((aligned(16)));
|
||||
|
||||
void panic(struct cpu_status_t* ctx, const char* str)
|
||||
{
|
||||
CLEAR_INTERRUPTS;
|
||||
if (ctx == NULL)
|
||||
{
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m Something went horribly wrong! (no cpu ctx)");
|
||||
DIE_DEBUG(str);
|
||||
skputc('\n');
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mend Kernel panic - halting...\x1b[0m");
|
||||
hcf();
|
||||
}
|
||||
DEBUG("\x1b[38;5;231m\x1b[48;5;196mKernel panic!!!\x1b[0m at rip=%p\nSomething went horribly wrong! vect=0x%.2x errcode=0x%x\n\rrax=%p rbx=%p rcx=%p rdx=%p\n\rrsi=%p rdi=%p r8=%p r9=%p\n\rr10=%p r11=%p r12=%p r13=%p\n\rr14=%p r15=%p\n\n\rflags=%p\n\rstack at rbp=%p\n\rHalting...",
|
||||
ctx->iret_rip,
|
||||
ctx->vector_number, ctx->error_code, ctx->rax, ctx->rbx, ctx->rcx, ctx->rdx, ctx->rsi, ctx->rdi,
|
||||
ctx->r8, ctx->r9, ctx->r10, ctx->r11, ctx->r12, ctx->r13, ctx->r14, ctx->r15, ctx->iret_flags,
|
||||
ctx->rbp);
|
||||
hcf();
|
||||
}
|
||||
|
||||
struct boot_context boot_ctx;
|
||||
|
||||
extern volatile struct limine_framebuffer_request framebuffer_request;
|
||||
@@ -71,7 +52,11 @@ extern struct process_t* current_process;
|
||||
void pedicel_main(void* arg)
|
||||
{
|
||||
printf("Hello, world from a KERNEL PROCESS!");
|
||||
//panic(NULL, "WE DID IT! Hello, world from a PROCESS!!!!");
|
||||
}
|
||||
|
||||
void two_main(void* arg)
|
||||
{
|
||||
printf("...process 2 speaking!!!");
|
||||
}
|
||||
|
||||
void idle_main(void* arg)
|
||||
@@ -112,6 +97,7 @@ void kmain()
|
||||
|
||||
struct process_t* idle_proc = process_create("idle", (void*)idle_main, 0);
|
||||
struct process_t* pedicel = process_create("pedicel", (void*)pedicel_main, 0);
|
||||
struct process_t* two = process_create("two", (void*)two_main, 0);
|
||||
|
||||
process_display_list(processes_list);
|
||||
|
||||
|
||||
547
symbols.S
Normal file
547
symbols.S
Normal file
@@ -0,0 +1,547 @@
|
||||
section .rodata
|
||||
global symbol_table
|
||||
global symbol_count
|
||||
symbol_table:
|
||||
dq 0xffffffff80000000
|
||||
dq sym_name_0
|
||||
dq 0xffffffff80000020
|
||||
dq sym_name_1
|
||||
dq 0xffffffff80000060
|
||||
dq sym_name_2
|
||||
dq 0xffffffff800000a0
|
||||
dq sym_name_3
|
||||
dq 0xffffffff800000e0
|
||||
dq sym_name_4
|
||||
dq 0xffffffff80000110
|
||||
dq sym_name_5
|
||||
dq 0xffffffff80000130
|
||||
dq sym_name_6
|
||||
dq 0xffffffff80001000
|
||||
dq sym_name_7
|
||||
dq 0xffffffff80001015
|
||||
dq sym_name_8
|
||||
dq 0xffffffff80001023
|
||||
dq sym_name_9
|
||||
dq 0xffffffff80001044
|
||||
dq sym_name_10
|
||||
dq 0xffffffff80001143
|
||||
dq sym_name_11
|
||||
dq 0xffffffff800011ce
|
||||
dq sym_name_12
|
||||
dq 0xffffffff800011f4
|
||||
dq sym_name_13
|
||||
dq 0xffffffff8000126d
|
||||
dq sym_name_14
|
||||
dq 0xffffffff8000127e
|
||||
dq sym_name_15
|
||||
dq 0xffffffff8000141f
|
||||
dq sym_name_16
|
||||
dq 0xffffffff8000156c
|
||||
dq sym_name_17
|
||||
dq 0xffffffff80001b90
|
||||
dq sym_name_18
|
||||
dq 0xffffffff80001bd0
|
||||
dq sym_name_19
|
||||
dq 0xffffffff80001be0
|
||||
dq sym_name_20
|
||||
dq 0xffffffff80001bf0
|
||||
dq sym_name_21
|
||||
dq 0xffffffff80001c00
|
||||
dq sym_name_22
|
||||
dq 0xffffffff80001c10
|
||||
dq sym_name_23
|
||||
dq 0xffffffff80001c20
|
||||
dq sym_name_24
|
||||
dq 0xffffffff80001c30
|
||||
dq sym_name_25
|
||||
dq 0xffffffff80001c40
|
||||
dq sym_name_26
|
||||
dq 0xffffffff80001c50
|
||||
dq sym_name_27
|
||||
dq 0xffffffff80001c60
|
||||
dq sym_name_28
|
||||
dq 0xffffffff80001c70
|
||||
dq sym_name_29
|
||||
dq 0xffffffff80001c80
|
||||
dq sym_name_30
|
||||
dq 0xffffffff80001c90
|
||||
dq sym_name_31
|
||||
dq 0xffffffff80001ca0
|
||||
dq sym_name_32
|
||||
dq 0xffffffff80001cb0
|
||||
dq sym_name_33
|
||||
dq 0xffffffff80001cc0
|
||||
dq sym_name_34
|
||||
dq 0xffffffff80001cd0
|
||||
dq sym_name_35
|
||||
dq 0xffffffff80001ce0
|
||||
dq sym_name_36
|
||||
dq 0xffffffff80001cf0
|
||||
dq sym_name_37
|
||||
dq 0xffffffff80001d00
|
||||
dq sym_name_38
|
||||
dq 0xffffffff80001d10
|
||||
dq sym_name_39
|
||||
dq 0xffffffff80001d20
|
||||
dq sym_name_40
|
||||
dq 0xffffffff80001d30
|
||||
dq sym_name_41
|
||||
dq 0xffffffff80001d40
|
||||
dq sym_name_42
|
||||
dq 0xffffffff80001d50
|
||||
dq sym_name_43
|
||||
dq 0xffffffff80001d60
|
||||
dq sym_name_44
|
||||
dq 0xffffffff80001d70
|
||||
dq sym_name_45
|
||||
dq 0xffffffff80001d80
|
||||
dq sym_name_46
|
||||
dq 0xffffffff80001d90
|
||||
dq sym_name_47
|
||||
dq 0xffffffff80001da0
|
||||
dq sym_name_48
|
||||
dq 0xffffffff80001db0
|
||||
dq sym_name_49
|
||||
dq 0xffffffff80001dc0
|
||||
dq sym_name_50
|
||||
dq 0xffffffff80001dd0
|
||||
dq sym_name_51
|
||||
dq 0xffffffff80001de0
|
||||
dq sym_name_52
|
||||
dq 0xffffffff80001de9
|
||||
dq sym_name_53
|
||||
dq 0xffffffff80001e3d
|
||||
dq sym_name_54
|
||||
dq 0xffffffff80001e8e
|
||||
dq sym_name_55
|
||||
dq 0xffffffff80001f38
|
||||
dq sym_name_56
|
||||
dq 0xffffffff800020c2
|
||||
dq sym_name_57
|
||||
dq 0xffffffff8000216d
|
||||
dq sym_name_58
|
||||
dq 0xffffffff8000219d
|
||||
dq sym_name_59
|
||||
dq 0xffffffff800021a5
|
||||
dq sym_name_60
|
||||
dq 0xffffffff800021ad
|
||||
dq sym_name_61
|
||||
dq 0xffffffff800021cd
|
||||
dq sym_name_62
|
||||
dq 0xffffffff800021ed
|
||||
dq sym_name_63
|
||||
dq 0xffffffff800021f8
|
||||
dq sym_name_64
|
||||
dq 0xffffffff80002427
|
||||
dq sym_name_65
|
||||
dq 0xffffffff80002439
|
||||
dq sym_name_66
|
||||
dq 0xffffffff8000244b
|
||||
dq sym_name_67
|
||||
dq 0xffffffff800024a4
|
||||
dq sym_name_68
|
||||
dq 0xffffffff800026e5
|
||||
dq sym_name_69
|
||||
dq 0xffffffff80002a43
|
||||
dq sym_name_70
|
||||
dq 0xffffffff80002bf7
|
||||
dq sym_name_71
|
||||
dq 0xffffffff80002dce
|
||||
dq sym_name_72
|
||||
dq 0xffffffff80002e1f
|
||||
dq sym_name_73
|
||||
dq 0xffffffff80002e50
|
||||
dq sym_name_74
|
||||
dq 0xffffffff80002f05
|
||||
dq sym_name_75
|
||||
dq 0xffffffff80002f44
|
||||
dq sym_name_76
|
||||
dq 0xffffffff80002f77
|
||||
dq sym_name_77
|
||||
dq 0xffffffff80002f8f
|
||||
dq sym_name_78
|
||||
dq 0xffffffff80002fbc
|
||||
dq sym_name_79
|
||||
dq 0xffffffff80002ff8
|
||||
dq sym_name_80
|
||||
dq 0xffffffff80003039
|
||||
dq sym_name_81
|
||||
dq 0xffffffff8000305f
|
||||
dq sym_name_82
|
||||
dq 0xffffffff800030bf
|
||||
dq sym_name_83
|
||||
dq 0xffffffff800031c8
|
||||
dq sym_name_84
|
||||
dq 0xffffffff800033f3
|
||||
dq sym_name_85
|
||||
dq 0xffffffff800034fc
|
||||
dq sym_name_86
|
||||
dq 0xffffffff80003605
|
||||
dq sym_name_87
|
||||
dq 0xffffffff80003b8a
|
||||
dq sym_name_88
|
||||
dq 0xffffffff8000401f
|
||||
dq sym_name_89
|
||||
dq 0xffffffff8000509c
|
||||
dq sym_name_90
|
||||
dq 0xffffffff80005161
|
||||
dq sym_name_91
|
||||
dq 0xffffffff80005226
|
||||
dq sym_name_92
|
||||
dq 0xffffffff800052e8
|
||||
dq sym_name_93
|
||||
dq 0xffffffff80005322
|
||||
dq sym_name_94
|
||||
dq 0xffffffff8000535e
|
||||
dq sym_name_95
|
||||
dq 0xffffffff8000543f
|
||||
dq sym_name_96
|
||||
dq 0xffffffff8000545c
|
||||
dq sym_name_97
|
||||
dq 0xffffffff800054e8
|
||||
dq sym_name_98
|
||||
dq 0xffffffff8000565c
|
||||
dq sym_name_99
|
||||
dq 0xffffffff800056cb
|
||||
dq sym_name_100
|
||||
dq 0xffffffff800057a8
|
||||
dq sym_name_101
|
||||
dq 0xffffffff800057c8
|
||||
dq sym_name_102
|
||||
dq 0xffffffff800057de
|
||||
dq sym_name_103
|
||||
dq 0xffffffff80005842
|
||||
dq sym_name_104
|
||||
dq 0xffffffff8000598c
|
||||
dq sym_name_105
|
||||
dq 0xffffffff80005a2d
|
||||
dq sym_name_106
|
||||
dq 0xffffffff80005a42
|
||||
dq sym_name_107
|
||||
dq 0xffffffff80005b8a
|
||||
dq sym_name_108
|
||||
dq 0xffffffff80005ba1
|
||||
dq sym_name_109
|
||||
dq 0xffffffff80005bbb
|
||||
dq sym_name_110
|
||||
dq 0xffffffff80005c95
|
||||
dq sym_name_111
|
||||
dq 0xffffffff80005cab
|
||||
dq sym_name_112
|
||||
dq 0xffffffff80005cdd
|
||||
dq sym_name_113
|
||||
dq 0xffffffff80005d22
|
||||
dq sym_name_114
|
||||
dq 0xffffffff80005e2b
|
||||
dq sym_name_115
|
||||
dq 0xffffffff80005f35
|
||||
dq sym_name_116
|
||||
dq 0xffffffff80005f74
|
||||
dq sym_name_117
|
||||
dq 0xffffffff80005fff
|
||||
dq sym_name_118
|
||||
dq 0xffffffff80006051
|
||||
dq sym_name_119
|
||||
dq 0xffffffff80006066
|
||||
dq sym_name_120
|
||||
dq 0xffffffff8000608d
|
||||
dq sym_name_121
|
||||
dq 0xffffffff8000614e
|
||||
dq sym_name_122
|
||||
dq 0xffffffff800061fa
|
||||
dq sym_name_123
|
||||
dq 0xffffffff80006322
|
||||
dq sym_name_124
|
||||
dq 0xffffffff800063d8
|
||||
dq sym_name_125
|
||||
dq 0xffffffff8000652f
|
||||
dq sym_name_126
|
||||
dq 0xffffffff800066de
|
||||
dq sym_name_127
|
||||
dq 0xffffffff800066f9
|
||||
dq sym_name_128
|
||||
dq 0xffffffff80006742
|
||||
dq sym_name_129
|
||||
dq 0xffffffff800067ff
|
||||
dq sym_name_130
|
||||
dq 0xffffffff8000682b
|
||||
dq sym_name_131
|
||||
dq 0xffffffff80006883
|
||||
dq sym_name_132
|
||||
dq 0xffffffff800068b1
|
||||
dq sym_name_133
|
||||
dq 0xffffffff800068fa
|
||||
dq sym_name_134
|
||||
dq 0xffffffff80006954
|
||||
dq sym_name_135
|
||||
dq 0xffffffff8000699a
|
||||
dq sym_name_136
|
||||
dq 0xffffffff80006a43
|
||||
dq sym_name_137
|
||||
dq 0xffffffff80006ad1
|
||||
dq sym_name_138
|
||||
dq 0xffffffff80006d09
|
||||
dq sym_name_139
|
||||
dq 0xffffffff80006d51
|
||||
dq sym_name_140
|
||||
dq 0xffffffff80006da3
|
||||
dq sym_name_141
|
||||
dq 0xffffffff80006e29
|
||||
dq sym_name_142
|
||||
dq 0xffffffff80007c20
|
||||
dq sym_name_143
|
||||
dq 0xffffffff80009000
|
||||
dq sym_name_144
|
||||
dq 0xffffffff80009080
|
||||
dq sym_name_145
|
||||
dq 0xffffffff80009100
|
||||
dq sym_name_146
|
||||
dq 0xffffffff80009180
|
||||
dq sym_name_147
|
||||
dq 0xffffffff80009200
|
||||
dq sym_name_148
|
||||
dq 0xffffffff80009208
|
||||
dq sym_name_149
|
||||
dq 0xffffffff80009210
|
||||
dq sym_name_150
|
||||
dq 0xffffffff8000a6d0
|
||||
dq sym_name_151
|
||||
dq 0xffffffff8000b000
|
||||
dq sym_name_152
|
||||
dq 0xffffffff8000b028
|
||||
dq sym_name_153
|
||||
dq 0xffffffff8000b040
|
||||
dq sym_name_154
|
||||
dq 0xffffffff8000c040
|
||||
dq sym_name_155
|
||||
dq 0xffffffff8000c050
|
||||
dq sym_name_156
|
||||
dq 0xffffffff8000c058
|
||||
dq sym_name_157
|
||||
dq 0xffffffff8000c060
|
||||
dq sym_name_158
|
||||
dq 0xffffffff8000c070
|
||||
dq sym_name_159
|
||||
dq 0xffffffff8001c080
|
||||
dq sym_name_160
|
||||
dq 0xffffffff8001d000
|
||||
dq sym_name_161
|
||||
dq 0xffffffff8001d008
|
||||
dq sym_name_162
|
||||
dq 0xffffffff8001d010
|
||||
dq sym_name_163
|
||||
dq 0xffffffff8001d018
|
||||
dq sym_name_164
|
||||
dq 0xffffffff8001d020
|
||||
dq sym_name_165
|
||||
dq 0xffffffff8001d028
|
||||
dq sym_name_166
|
||||
dq 0xffffffff8001d030
|
||||
dq sym_name_167
|
||||
dq 0xffffffff8001d038
|
||||
dq sym_name_168
|
||||
dq 0xffffffff8001d040
|
||||
dq sym_name_169
|
||||
dq 0xffffffff8001d048
|
||||
dq sym_name_170
|
||||
dq 0xffffffff8001d050
|
||||
dq sym_name_171
|
||||
dq 0xffffffff8001d058
|
||||
dq sym_name_172
|
||||
dq 0xffffffff8001d060
|
||||
dq sym_name_173
|
||||
dq 0xffffffff8001d070
|
||||
dq sym_name_174
|
||||
dq 0xffffffff8001d078
|
||||
dq sym_name_175
|
||||
dq 0xffffffff8001d080
|
||||
dq sym_name_176
|
||||
dq 0xffffffff8001d180
|
||||
dq sym_name_177
|
||||
dq 0xffffffff8001d188
|
||||
dq sym_name_178
|
||||
dq 0xffffffff8001d190
|
||||
dq sym_name_179
|
||||
|
||||
symbol_count: dq 180
|
||||
|
||||
sym_name_0: db "limine_requests_start_marker", 0
|
||||
sym_name_1: db "framebuffer_request", 0
|
||||
sym_name_2: db "memmap_request", 0
|
||||
sym_name_3: db "hhdm_request", 0
|
||||
sym_name_4: db "kerneladdr_request", 0
|
||||
sym_name_5: db "limine_base_revision", 0
|
||||
sym_name_6: db "limine_requests_end_marker", 0
|
||||
sym_name_7: db "_start", 0
|
||||
sym_name_8: db "gdt_load", 0
|
||||
sym_name_9: db "gdt_flush", 0
|
||||
sym_name_10: db "gdt_init", 0
|
||||
sym_name_11: db "idt_set_entry", 0
|
||||
sym_name_12: db "idt_load", 0
|
||||
sym_name_13: db "idt_init", 0
|
||||
sym_name_14: db "read_cr2", 0
|
||||
sym_name_15: db "page_fault_handler", 0
|
||||
sym_name_16: db "gp_fault_handler", 0
|
||||
sym_name_17: db "interrupt_dispatch", 0
|
||||
sym_name_18: db "interrupt_stub", 0
|
||||
sym_name_19: db "vector_0_handler", 0
|
||||
sym_name_20: db "vector_1_handler", 0
|
||||
sym_name_21: db "vector_2_handler", 0
|
||||
sym_name_22: db "vector_3_handler", 0
|
||||
sym_name_23: db "vector_4_handler", 0
|
||||
sym_name_24: db "vector_5_handler", 0
|
||||
sym_name_25: db "vector_6_handler", 0
|
||||
sym_name_26: db "vector_7_handler", 0
|
||||
sym_name_27: db "vector_8_handler", 0
|
||||
sym_name_28: db "vector_9_handler", 0
|
||||
sym_name_29: db "vector_10_handler", 0
|
||||
sym_name_30: db "vector_11_handler", 0
|
||||
sym_name_31: db "vector_12_handler", 0
|
||||
sym_name_32: db "vector_13_handler", 0
|
||||
sym_name_33: db "vector_14_handler", 0
|
||||
sym_name_34: db "vector_15_handler", 0
|
||||
sym_name_35: db "vector_16_handler", 0
|
||||
sym_name_36: db "vector_17_handler", 0
|
||||
sym_name_37: db "vector_18_handler", 0
|
||||
sym_name_38: db "vector_19_handler", 0
|
||||
sym_name_39: db "vector_20_handler", 0
|
||||
sym_name_40: db "vector_21_handler", 0
|
||||
sym_name_41: db "vector_22_handler", 0
|
||||
sym_name_42: db "vector_23_handler", 0
|
||||
sym_name_43: db "vector_24_handler", 0
|
||||
sym_name_44: db "vector_25_handler", 0
|
||||
sym_name_45: db "vector_26_handler", 0
|
||||
sym_name_46: db "vector_27_handler", 0
|
||||
sym_name_47: db "vector_28_handler", 0
|
||||
sym_name_48: db "vector_29_handler", 0
|
||||
sym_name_49: db "vector_30_handler", 0
|
||||
sym_name_50: db "vector_31_handler", 0
|
||||
sym_name_51: db "vector_32_handler", 0
|
||||
sym_name_52: db "vector_33_handler", 0
|
||||
sym_name_53: db "kheap_grow", 0
|
||||
sym_name_54: db "kheap_map_page", 0
|
||||
sym_name_55: db "kheap_init", 0
|
||||
sym_name_56: db "kmalloc", 0
|
||||
sym_name_57: db "kfree", 0
|
||||
sym_name_58: db "kalloc_stack", 0
|
||||
sym_name_59: db "hcf", 0
|
||||
sym_name_60: db "idle", 0
|
||||
sym_name_61: db "pedicel_main", 0
|
||||
sym_name_62: db "two_main", 0
|
||||
sym_name_63: db "idle_main", 0
|
||||
sym_name_64: db "kmain", 0
|
||||
sym_name_65: db "load_cr3", 0
|
||||
sym_name_66: db "invlpg", 0
|
||||
sym_name_67: db "alloc_page_table", 0
|
||||
sym_name_68: db "paging_map_page", 0
|
||||
sym_name_69: db "paging_init", 0
|
||||
sym_name_70: db "panic", 0
|
||||
sym_name_71: db "pmm_find_biggest_usable_region", 0
|
||||
sym_name_72: db "pmm_alloc", 0
|
||||
sym_name_73: db "pmm_free", 0
|
||||
sym_name_74: db "pmm_init_freelist", 0
|
||||
sym_name_75: db "pmm_init", 0
|
||||
sym_name_76: db "_out_buffer", 0
|
||||
sym_name_77: db "_out_null", 0
|
||||
sym_name_78: db "_out_char", 0
|
||||
sym_name_79: db "_out_fct", 0
|
||||
sym_name_80: db "_strnlen_s", 0
|
||||
sym_name_81: db "_is_digit", 0
|
||||
sym_name_82: db "_atoi", 0
|
||||
sym_name_83: db "_out_rev", 0
|
||||
sym_name_84: db "_ntoa_format", 0
|
||||
sym_name_85: db "_ntoa_long", 0
|
||||
sym_name_86: db "_ntoa_long_long", 0
|
||||
sym_name_87: db "_ftoa", 0
|
||||
sym_name_88: db "_etoa", 0
|
||||
sym_name_89: db "_vsnprintf", 0
|
||||
sym_name_90: db "printf_", 0
|
||||
sym_name_91: db "sprintf_", 0
|
||||
sym_name_92: db "snprintf_", 0
|
||||
sym_name_93: db "vprintf_", 0
|
||||
sym_name_94: db "vsnprintf_", 0
|
||||
sym_name_95: db "fctprintf", 0
|
||||
sym_name_96: db "process_init", 0
|
||||
sym_name_97: db "process_display_list", 0
|
||||
sym_name_98: db "process_create", 0
|
||||
sym_name_99: db "process_add", 0
|
||||
sym_name_100: db "process_delete", 0
|
||||
sym_name_101: db "process_get_next", 0
|
||||
sym_name_102: db "process_switch", 0
|
||||
sym_name_103: db "process_exit", 0
|
||||
sym_name_104: db "keyboard_handler", 0
|
||||
sym_name_105: db "keyboard_init", 0
|
||||
sym_name_106: db "scheduler_init", 0
|
||||
sym_name_107: db "scheduler_schedule", 0
|
||||
sym_name_108: db "outb", 0
|
||||
sym_name_109: db "inb", 0
|
||||
sym_name_110: db "serial_init", 0
|
||||
sym_name_111: db "is_transmit_empty", 0
|
||||
sym_name_112: db "skputc", 0
|
||||
sym_name_113: db "skputs", 0
|
||||
sym_name_114: db "debug_stack_trace", 0
|
||||
sym_name_115: db "debug_find_symbol", 0
|
||||
sym_name_116: db "strcpy", 0
|
||||
sym_name_117: db "strcat", 0
|
||||
sym_name_118: db "strncpy", 0
|
||||
sym_name_119: db "term_max_cols", 0
|
||||
sym_name_120: db "term_max_lines", 0
|
||||
sym_name_121: db "term_init", 0
|
||||
sym_name_122: db "putpixel", 0
|
||||
sym_name_123: db "draw_char", 0
|
||||
sym_name_124: db "erase_char", 0
|
||||
sym_name_125: db "term_scroll", 0
|
||||
sym_name_126: db "putchar", 0
|
||||
sym_name_127: db "_putchar", 0
|
||||
sym_name_128: db "kputs", 0
|
||||
sym_name_129: db "pic_remap", 0
|
||||
sym_name_130: db "pic_enable", 0
|
||||
sym_name_131: db "pit_init", 0
|
||||
sym_name_132: db "timer_wait", 0
|
||||
sym_name_133: db "timer_init", 0
|
||||
sym_name_134: db "memcpy", 0
|
||||
sym_name_135: db "memset", 0
|
||||
sym_name_136: db "memmove", 0
|
||||
sym_name_137: db "memcmp", 0
|
||||
sym_name_138: db "memmap_display", 0
|
||||
sym_name_139: db "hhdm_display", 0
|
||||
sym_name_140: db "convert_x86_vm_flags", 0
|
||||
sym_name_141: db "vmm_setup_pt_root", 0
|
||||
sym_name_142: db "vmm_init", 0
|
||||
sym_name_143: db "pow10.0", 0
|
||||
sym_name_144: db "kbdus", 0
|
||||
sym_name_145: db "kbdus_shifted", 0
|
||||
sym_name_146: db "kbdfr", 0
|
||||
sym_name_147: db "kbdfr_shifted", 0
|
||||
sym_name_148: db "font", 0
|
||||
sym_name_149: db "glyphs", 0
|
||||
sym_name_150: db "_binary_zap_light16_psf_start", 0
|
||||
sym_name_151: db "_binary_zap_light16_psf_end", 0
|
||||
sym_name_152: db "gdt_entries", 0
|
||||
sym_name_153: db "gdtr", 0
|
||||
sym_name_154: db "idt", 0
|
||||
sym_name_155: db "idt_reg", 0
|
||||
sym_name_156: db "kheap_start", 0
|
||||
sym_name_157: db "head", 0
|
||||
sym_name_158: db "end", 0
|
||||
sym_name_159: db "kernel_stack", 0
|
||||
sym_name_160: db "boot_ctx", 0
|
||||
sym_name_161: db "kernel_pml4", 0
|
||||
sym_name_162: db "kernel_phys_base", 0
|
||||
sym_name_163: db "kernel_virt_base", 0
|
||||
sym_name_164: db "biggest_entry", 0
|
||||
sym_name_165: db "hhdm_off", 0
|
||||
sym_name_166: db "g_freelist", 0
|
||||
sym_name_167: db "processes_list", 0
|
||||
sym_name_168: db "current_process", 0
|
||||
sym_name_169: db "next_free_pid", 0
|
||||
sym_name_170: db "key_status", 0
|
||||
sym_name_171: db "keymap", 0
|
||||
sym_name_172: db "keymap_shifted", 0
|
||||
sym_name_173: db "cursor", 0
|
||||
sym_name_174: db "fb", 0
|
||||
sym_name_175: db "framebuffer", 0
|
||||
sym_name_176: db "lines_length", 0
|
||||
sym_name_177: db "ticks", 0
|
||||
sym_name_178: db "vmm_pt_root", 0
|
||||
sym_name_179: db "vm_objs", 0
|
||||
180
symbols.map
Normal file
180
symbols.map
Normal file
@@ -0,0 +1,180 @@
|
||||
ffffffff80000000 limine_requests_start_marker
|
||||
ffffffff80000020 framebuffer_request
|
||||
ffffffff80000060 memmap_request
|
||||
ffffffff800000a0 hhdm_request
|
||||
ffffffff800000e0 kerneladdr_request
|
||||
ffffffff80000110 limine_base_revision
|
||||
ffffffff80000130 limine_requests_end_marker
|
||||
ffffffff80001000 _start
|
||||
ffffffff80001015 gdt_load
|
||||
ffffffff80001023 gdt_flush
|
||||
ffffffff80001044 gdt_init
|
||||
ffffffff80001143 idt_set_entry
|
||||
ffffffff800011ce idt_load
|
||||
ffffffff800011f4 idt_init
|
||||
ffffffff8000126d read_cr2
|
||||
ffffffff8000127e page_fault_handler
|
||||
ffffffff8000141f gp_fault_handler
|
||||
ffffffff8000156c interrupt_dispatch
|
||||
ffffffff80001b90 interrupt_stub
|
||||
ffffffff80001bd0 vector_0_handler
|
||||
ffffffff80001be0 vector_1_handler
|
||||
ffffffff80001bf0 vector_2_handler
|
||||
ffffffff80001c00 vector_3_handler
|
||||
ffffffff80001c10 vector_4_handler
|
||||
ffffffff80001c20 vector_5_handler
|
||||
ffffffff80001c30 vector_6_handler
|
||||
ffffffff80001c40 vector_7_handler
|
||||
ffffffff80001c50 vector_8_handler
|
||||
ffffffff80001c60 vector_9_handler
|
||||
ffffffff80001c70 vector_10_handler
|
||||
ffffffff80001c80 vector_11_handler
|
||||
ffffffff80001c90 vector_12_handler
|
||||
ffffffff80001ca0 vector_13_handler
|
||||
ffffffff80001cb0 vector_14_handler
|
||||
ffffffff80001cc0 vector_15_handler
|
||||
ffffffff80001cd0 vector_16_handler
|
||||
ffffffff80001ce0 vector_17_handler
|
||||
ffffffff80001cf0 vector_18_handler
|
||||
ffffffff80001d00 vector_19_handler
|
||||
ffffffff80001d10 vector_20_handler
|
||||
ffffffff80001d20 vector_21_handler
|
||||
ffffffff80001d30 vector_22_handler
|
||||
ffffffff80001d40 vector_23_handler
|
||||
ffffffff80001d50 vector_24_handler
|
||||
ffffffff80001d60 vector_25_handler
|
||||
ffffffff80001d70 vector_26_handler
|
||||
ffffffff80001d80 vector_27_handler
|
||||
ffffffff80001d90 vector_28_handler
|
||||
ffffffff80001da0 vector_29_handler
|
||||
ffffffff80001db0 vector_30_handler
|
||||
ffffffff80001dc0 vector_31_handler
|
||||
ffffffff80001dd0 vector_32_handler
|
||||
ffffffff80001de0 vector_33_handler
|
||||
ffffffff80001de9 kheap_grow
|
||||
ffffffff80001e3d kheap_map_page
|
||||
ffffffff80001e8e kheap_init
|
||||
ffffffff80001f38 kmalloc
|
||||
ffffffff800020c2 kfree
|
||||
ffffffff8000216d kalloc_stack
|
||||
ffffffff8000219d hcf
|
||||
ffffffff800021a5 idle
|
||||
ffffffff800021ad pedicel_main
|
||||
ffffffff800021cd two_main
|
||||
ffffffff800021ed idle_main
|
||||
ffffffff800021f8 kmain
|
||||
ffffffff80002427 load_cr3
|
||||
ffffffff80002439 invlpg
|
||||
ffffffff8000244b alloc_page_table
|
||||
ffffffff800024a4 paging_map_page
|
||||
ffffffff800026e5 paging_init
|
||||
ffffffff80002a43 panic
|
||||
ffffffff80002bf7 pmm_find_biggest_usable_region
|
||||
ffffffff80002dce pmm_alloc
|
||||
ffffffff80002e1f pmm_free
|
||||
ffffffff80002e50 pmm_init_freelist
|
||||
ffffffff80002f05 pmm_init
|
||||
ffffffff80002f44 _out_buffer
|
||||
ffffffff80002f77 _out_null
|
||||
ffffffff80002f8f _out_char
|
||||
ffffffff80002fbc _out_fct
|
||||
ffffffff80002ff8 _strnlen_s
|
||||
ffffffff80003039 _is_digit
|
||||
ffffffff8000305f _atoi
|
||||
ffffffff800030bf _out_rev
|
||||
ffffffff800031c8 _ntoa_format
|
||||
ffffffff800033f3 _ntoa_long
|
||||
ffffffff800034fc _ntoa_long_long
|
||||
ffffffff80003605 _ftoa
|
||||
ffffffff80003b8a _etoa
|
||||
ffffffff8000401f _vsnprintf
|
||||
ffffffff8000509c printf_
|
||||
ffffffff80005161 sprintf_
|
||||
ffffffff80005226 snprintf_
|
||||
ffffffff800052e8 vprintf_
|
||||
ffffffff80005322 vsnprintf_
|
||||
ffffffff8000535e fctprintf
|
||||
ffffffff8000543f process_init
|
||||
ffffffff8000545c process_display_list
|
||||
ffffffff800054e8 process_create
|
||||
ffffffff8000565c process_add
|
||||
ffffffff800056cb process_delete
|
||||
ffffffff800057a8 process_get_next
|
||||
ffffffff800057c8 process_switch
|
||||
ffffffff800057de process_exit
|
||||
ffffffff80005842 keyboard_handler
|
||||
ffffffff8000598c keyboard_init
|
||||
ffffffff80005a2d scheduler_init
|
||||
ffffffff80005a42 scheduler_schedule
|
||||
ffffffff80005b8a outb
|
||||
ffffffff80005ba1 inb
|
||||
ffffffff80005bbb serial_init
|
||||
ffffffff80005c95 is_transmit_empty
|
||||
ffffffff80005cab skputc
|
||||
ffffffff80005cdd skputs
|
||||
ffffffff80005d22 debug_stack_trace
|
||||
ffffffff80005e2b debug_find_symbol
|
||||
ffffffff80005f35 strcpy
|
||||
ffffffff80005f74 strcat
|
||||
ffffffff80005fff strncpy
|
||||
ffffffff80006051 term_max_cols
|
||||
ffffffff80006066 term_max_lines
|
||||
ffffffff8000608d term_init
|
||||
ffffffff8000614e putpixel
|
||||
ffffffff800061fa draw_char
|
||||
ffffffff80006322 erase_char
|
||||
ffffffff800063d8 term_scroll
|
||||
ffffffff8000652f putchar
|
||||
ffffffff800066de _putchar
|
||||
ffffffff800066f9 kputs
|
||||
ffffffff80006742 pic_remap
|
||||
ffffffff800067ff pic_enable
|
||||
ffffffff8000682b pit_init
|
||||
ffffffff80006883 timer_wait
|
||||
ffffffff800068b1 timer_init
|
||||
ffffffff800068fa memcpy
|
||||
ffffffff80006954 memset
|
||||
ffffffff8000699a memmove
|
||||
ffffffff80006a43 memcmp
|
||||
ffffffff80006ad1 memmap_display
|
||||
ffffffff80006d09 hhdm_display
|
||||
ffffffff80006d51 convert_x86_vm_flags
|
||||
ffffffff80006da3 vmm_setup_pt_root
|
||||
ffffffff80006e29 vmm_init
|
||||
ffffffff80007c20 pow10.0
|
||||
ffffffff80009000 kbdus
|
||||
ffffffff80009080 kbdus_shifted
|
||||
ffffffff80009100 kbdfr
|
||||
ffffffff80009180 kbdfr_shifted
|
||||
ffffffff80009200 font
|
||||
ffffffff80009208 glyphs
|
||||
ffffffff80009210 _binary_zap_light16_psf_start
|
||||
ffffffff8000a6d0 _binary_zap_light16_psf_end
|
||||
ffffffff8000b000 gdt_entries
|
||||
ffffffff8000b028 gdtr
|
||||
ffffffff8000b040 idt
|
||||
ffffffff8000c040 idt_reg
|
||||
ffffffff8000c050 kheap_start
|
||||
ffffffff8000c058 head
|
||||
ffffffff8000c060 end
|
||||
ffffffff8000c070 kernel_stack
|
||||
ffffffff8001c080 boot_ctx
|
||||
ffffffff8001d000 kernel_pml4
|
||||
ffffffff8001d008 kernel_phys_base
|
||||
ffffffff8001d010 kernel_virt_base
|
||||
ffffffff8001d018 biggest_entry
|
||||
ffffffff8001d020 hhdm_off
|
||||
ffffffff8001d028 g_freelist
|
||||
ffffffff8001d030 processes_list
|
||||
ffffffff8001d038 current_process
|
||||
ffffffff8001d040 next_free_pid
|
||||
ffffffff8001d048 key_status
|
||||
ffffffff8001d050 keymap
|
||||
ffffffff8001d058 keymap_shifted
|
||||
ffffffff8001d060 cursor
|
||||
ffffffff8001d070 fb
|
||||
ffffffff8001d078 framebuffer
|
||||
ffffffff8001d080 lines_length
|
||||
ffffffff8001d180 ticks
|
||||
ffffffff8001d188 vmm_pt_root
|
||||
ffffffff8001d190 vm_objs
|
||||
33
symbols.py
Normal file
33
symbols.py
Normal file
@@ -0,0 +1,33 @@
|
||||
# Make assembly file from ELF symbols map
|
||||
# Then link it to kernel so it's aware of symbol names
|
||||
# then we can use that for the stack trace.
|
||||
|
||||
print("Extracting symbols from map file to assembly...")
|
||||
|
||||
with open("symbols.map", "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
symbols = []
|
||||
for line in lines:
|
||||
parts = line.split()
|
||||
# output is formed like "address name"
|
||||
symbols.append((parts[0], parts[1]))
|
||||
|
||||
with open("symbols.S", "w") as f:
|
||||
f.write("section .rodata\n")
|
||||
f.write("global symbol_table\n")
|
||||
f.write("global symbol_count\n")
|
||||
f.write("symbol_table:\n")
|
||||
|
||||
for i, (addr, name) in enumerate(symbols):
|
||||
f.write(f" dq 0x{addr}\n")
|
||||
f.write(f" dq sym_name_{i}\n")
|
||||
|
||||
f.write("\nsymbol_count: dq " + str(len(symbols)) + "\n\n")
|
||||
|
||||
for i, (addr, name) in enumerate(symbols):
|
||||
# escaping quotes
|
||||
safe_name = name.replace('"', '\\"')
|
||||
f.write(f'sym_name_{i}: db "{safe_name}", 0\n')
|
||||
|
||||
print("Done!")
|
||||
Reference in New Issue
Block a user