summaryrefslogtreecommitdiff
path: root/kernel/user.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-03-28 10:06:08 -0400
committerFreya Murphy <freya@freyacat.org>2025-03-28 10:06:08 -0400
commit4bf4659392148e236f1b92baad5db8f0fd638cfc (patch)
treeec338a639e05d5fac8a5f18099e623677ae70063 /kernel/user.c
parenttrack changes (diff)
downloadcomus-4bf4659392148e236f1b92baad5db8f0fd638cfc.tar.gz
comus-4bf4659392148e236f1b92baad5db8f0fd638cfc.tar.bz2
comus-4bf4659392148e236f1b92baad5db8f0fd638cfc.zip
track changes
Diffstat (limited to 'kernel/user.c')
-rw-r--r--kernel/user.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/kernel/user.c b/kernel/user.c
index f444b6c..e9398ff 100644
--- a/kernel/user.c
+++ b/kernel/user.c
@@ -431,6 +431,11 @@ static int read_phdrs(elfhdr_t *hdr, pcb_t *pcb)
*/
static context_t *stack_setup(pcb_t *pcb, uint32_t entry, const char **args)
{
+#if TRACING_USER
+ cio_printf("stksetup: pcb %08x, entry %08, args %08x\n", (uint32_t)pcb,
+ entry, (uint32_t)args);
+#endif
+
/*
** First, we need to count the space we'll need for the argument
** vector and strings.
@@ -653,7 +658,7 @@ void user_init(void)
// This is gross, but we need to get this information somehow.
// Access the "user blob" data in the second bootstrap sector
- uint16_t *blobdata = (uint16_t *)USER_BLOB_DATA;
+ uint16_t *blobdata = (uint16_t *)P2V(USER_BLOB_DATA);
user_offset = *blobdata++;
user_segment = *blobdata++;
user_sectors = *blobdata++;
@@ -698,6 +703,10 @@ void user_init(void)
*/
prog_t *user_locate(uint_t what)
{
+#if TRACING_USER
+ cio_printf("ulocate: %u\n", what);
+#endif
+
// no programs if there is no blob!
if (user_header == NULL) {
return NULL;
@@ -733,6 +742,10 @@ prog_t *user_locate(uint_t what)
*/
int user_duplicate(pcb_t *new, pcb_t *old)
{
+#if TRACING_USER
+ cio_printf("udup: old %08x new %08x\n", (uint32_t)old, (uint32_t)new);
+#endif
+
// We need to do a recursive duplication of the process address
// space of the current process. First, we create a new user
// page directory. Next, we'll duplicate the USER_PDE page
@@ -806,6 +819,11 @@ int user_load(prog_t *ptab, pcb_t *pcb, const char **args)
assert1(pcb != NULL);
assert1(args != NULL);
+#if TRACING_USER
+ cio_printf("uload: prog '%s' pcb %08x args %08x\n",
+ ptab->name[0] ? ptab->name : "?", (uint32_t)pcb, (uint32_t)args);
+#endif
+
// locate the ELF binary
elfhdr_t *hdr = (elfhdr_t *)((uint32_t)user_header + ptab->offset);
@@ -864,6 +882,10 @@ int user_load(prog_t *ptab, pcb_t *pcb, const char **args)
*/
void user_cleanup(pcb_t *pcb)
{
+#if TRACING_USER
+ cio_printf("uclean: %08x\n", (uint32_t)pcb);
+#endif
+
if (pcb == NULL) {
// should this be an error?
return;