From f830c3b9bc88e968d34ea935e2125674d3a504b0 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Thu, 13 Oct 2011 21:43:39 +0800 Subject: [PATCH] Kernel - Fixing bugs --- Kernel/Makefile | 8 +++++--- Kernel/lib.c | 2 +- Kernel/threads.c | 23 ++++++----------------- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/Kernel/Makefile b/Kernel/Makefile index f76540cb..bb76c131 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -59,8 +59,7 @@ MODS += $(addprefix ../Modules/, $(addsuffix .xo.$(ARCH),$(MODULES))) BIN = ../Acess2.$(ARCH).bin GZBIN = ../Acess2.$(ARCH).gz -DEPFILES = $(filter %.o$(OBJSUFFIX),$(OBJ)) -DEPFILES := $(DEPFILES:%.o$(OBJSUFFIX)=%.dep$(OBJSUFFIX)) +DEPFILES := $(OBJ:%$(OBJSUFFIX)=%.dep$(OBJSUFFIX)) SRCFILES = $(OBJ:$(OBJDIR)%.o$(OBJSUFFIX)=%.c) SRCFILES := $(SRCFILES:$(OBJDIR)%.ao$(OBJSUFFIX)=%.$(AS_SUFFIX)) @@ -97,6 +96,9 @@ $(OBJDIR)%.ao$(OBJSUFFIX): %.$(AS_SUFFIX) Makefile @echo --- AS -o $@ @mkdir -p $(dir $@) @$(AS) $(ASFLAGS) $< -o $@ +ifeq ($(AS_SUFFIX),S) + @$(MAKEDEP) $(CPPFLAGS) -MT $@ -o $(OBJDIR)$*.ao.dep$(OBJSUFFIX) $< +endif $(OBJDIR)%.o$(OBJSUFFIX): %.c Makefile # if exists %*/Makefile @@ -105,7 +107,7 @@ $(OBJDIR)%.o$(OBJSUFFIX): %.c Makefile @echo --- CC -o $@ @mkdir -p $(dir $@) @$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - @$(MAKEDEP) $(CPPFLAGS) -MT $@ -o $(OBJDIR)$*.dep$(OBJSUFFIX) $< + @$(MAKEDEP) $(CPPFLAGS) -MT $@ -o $(OBJDIR)$*.o.dep$(OBJSUFFIX) $< # endif %.xo.$(ARCH): diff --git a/Kernel/lib.c b/Kernel/lib.c index c4251a63..472351cb 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -357,7 +357,7 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) // String - Null Terminated Array case 's': p = va_arg(args, char*); // Get Argument - if( !CheckString(p) ) p = "(inval)"; // Avoid #PFs + if( !p || !CheckString(p) ) p = "(inval)"; // Avoid #PFs printString: if(!p) p = "(null)"; len = strlen(p); diff --git a/Kernel/threads.c b/Kernel/threads.c index 76041f58..57382a8c 100644 --- a/Kernel/threads.c +++ b/Kernel/threads.c @@ -311,9 +311,8 @@ tThread *Threads_CloneTCB(Uint Flags) */ tThread *Threads_CloneThreadZero(void) { - tThread *cur, *new; + tThread *new; int i; - cur = Proc_GetCurThread(); // Allocate and duplicate new = malloc(sizeof(tThread)); @@ -340,28 +339,17 @@ tThread *Threads_CloneThreadZero(void) new->LastMessage = NULL; // Set State - new->Remaining = new->Quantum = cur->Quantum; - new->Priority = cur->Priority; + new->Remaining = new->Quantum = DEFAULT_QUANTUM; + new->Priority = DEFAULT_PRIORITY; new->bInstrTrace = 0; // Set Signal Handlers new->CurFaultNum = 0; - new->FaultHandler = cur->FaultHandler; + new->FaultHandler = 0; for( i = 0; i < NUM_CFG_ENTRIES; i ++ ) { - switch(cCONFIG_TYPES[i]) - { - default: - new->Config[i] = cur->Config[i]; - break; - case CFGT_HEAPSTR: - if(cur->Config[i]) - new->Config[i] = (Uint) strdup( (void*)cur->Config[i] ); - else - new->Config[i] = 0; - break; - } + new->Config[i] = 0; } // Maintain a global list of threads @@ -677,6 +665,7 @@ void Threads_Kill(tThread *Thread, int Status) */ void Threads_Yield(void) { + Log("Threads_Yield: by %p", __builtin_return_address(0)); Proc_Reschedule(); } -- 2.20.1