Stack trace all black & void arg fix

This commit is contained in:
2026-03-14 09:31:57 +01:00
parent 5c0d02579b
commit e5c296238c
6 changed files with 12 additions and 8 deletions

View File

@@ -19,11 +19,10 @@ The basics that I'm targeting are:
### Basic utility of what we call a "kernel" ### Basic utility of what we call a "kernel"
- Fix terminal driver (backspace issues, scrolling) OR add Flanterm or equivalent
- Implement tasks, and task switching + context switching and spinlock acquire/release - Implement tasks, and task switching + context switching and spinlock acquire/release
- Load an executable - Load an executable
- Filesystem (TAR for read-only initfs, then maybe read-write using FAT12/16/32 or easier fs) w/ VFS layer - Filesystem (TAR for read-only initfs, then maybe read-write using FAT12/16/32 or easier fs) w/ VFS layer
- Getting to userspace (syscalls) - Getting to userspace (ring 3 switching, syscall interface)
- Porting musl libc or equivalent - Porting musl libc or equivalent
### Scalability/maintenance/expansion features ### Scalability/maintenance/expansion features
@@ -32,7 +31,6 @@ The basics that I'm targeting are:
- SOME error handling in functions - SOME error handling in functions
- Unit tests - Unit tests
- Good error codes (like Linux kernel: ENOMEM, ENOENT, ...) - Good error codes (like Linux kernel: ENOMEM, ENOENT, ...)
- Make the panic function work within itself without dependencies + error message (and still get cpu context?)
### Optional features ### Optional features

View File

@@ -8,7 +8,7 @@ Indentations should be 4 characters long.
## Line length ## Line length
Lines should not be more than 100 characters long. Lines should not be more than 100 characters long. Exceptions is made for printing strings.
## Variables ## Variables

View File

@@ -46,7 +46,7 @@ void debug_stack_trace(unsigned int max_frames)
rbp = next_rbp; rbp = next_rbp;
} }
if (init.terminal) { if (init.terminal) {
printf("*** end stack trace ***[0m"); printf("*** end stack trace ***\x1b[0m");
} }
DEBUG("*** end stack trace ***"); DEBUG("*** end stack trace ***");
} }

View File

@@ -36,13 +36,13 @@ extern volatile uint64_t ticks;
// printf("debug: [%s]: " log "\n", __FILE__, ##__VA_ARGS__); // printf("debug: [%s]: " log "\n", __FILE__, ##__VA_ARGS__);
void panic(struct cpu_status_t* ctx, const char* str); void panic(struct cpu_status_t* ctx, const char* str);
void hcf(); void hcf(void);
void idle(); void idle(void);
/* debug */ /* debug */
void debug_stack_trace(unsigned int max_frames); void debug_stack_trace(unsigned int max_frames);
const char* debug_find_symbol(uintptr_t rip, uintptr_t* offset); const char* debug_find_symbol(uintptr_t rip, uintptr_t* offset);
void boot_mem_display(); void boot_mem_display(void);
#define assert(check) do { if(!(check)) hcf(); } while(0) #define assert(check) do { if(!(check)) hcf(); } while(0)

View File

@@ -124,5 +124,6 @@ void kmain()
scheduler_init(); scheduler_init();
kputs(PEPPEROS_SPLASH); kputs(PEPPEROS_SPLASH);
idle(); idle();
} }

View File

@@ -43,6 +43,11 @@ struct cpu_status_t* scheduler_schedule(struct cpu_status_t* context)
current_process = idle_proc; current_process = idle_proc;
} }
if (current_process == idle_proc && current_process->next == NULL)
{
return idle_proc->context;
}
current_process->context = context; current_process->context = context;
//current_process->status = READY; //current_process->status = READY;