git.ucc.asn.au
/
tpg
/
acess2.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
022489d
)
Fixed Segfault if execve fails, fixed errors in LibC pertaining to stdin,... not...
author
John Hodge
<
[email protected]
>
Wed, 30 Sep 2009 14:29:48 +0000
(22:29 +0800)
committer
John Hodge
<
[email protected]
>
Wed, 30 Sep 2009 14:29:48 +0000
(22:29 +0800)
Kernel/binary.c
patch
|
blob
|
history
Kernel/threads.c
patch
|
blob
|
history
Usermode/Libraries/libc.so_src/fileIO.c
patch
|
blob
|
history
Usermode/Libraries/libc.so_src/heap.c
patch
|
blob
|
history
Usermode/Libraries/libc.so_src/stub.c
patch
|
blob
|
history
diff --git
a/Kernel/binary.c
b/Kernel/binary.c
index
04dfed2
..
1884af8
100644
(file)
--- a/
Kernel/binary.c
+++ b/
Kernel/binary.c
@@
-24,6
+24,7
@@
typedef struct sKernelBin {
// === IMPORTS ===
\r
extern int Proc_Clone(Uint *Err, Uint Flags);
\r
extern void Threads_SetName(char *Name);
\r
// === IMPORTS ===
\r
extern int Proc_Clone(Uint *Err, Uint Flags);
\r
extern void Threads_SetName(char *Name);
\r
+extern char *Threads_GetName(int ID);
\r
extern Uint MM_ClearUser();
\r
extern void Threads_Exit();
\r
extern void Proc_StartUser(Uint Entrypoint, Uint *Bases, int ArgC, char **ArgV, char **EnvP, int DataSize);
\r
extern Uint MM_ClearUser();
\r
extern void Threads_Exit();
\r
extern void Proc_StartUser(Uint Entrypoint, Uint *Bases, int ArgC, char **ArgV, char **EnvP, int DataSize);
\r
@@
-145,7
+146,7
@@
int Proc_Execve(char *File, char **ArgV, char **EnvP)
free(savedFile);
\r
if(bases[0] == 0)
\r
{
\r
free(savedFile);
\r
if(bases[0] == 0)
\r
{
\r
- Warning("Proc_Execve - Unable to load '%s'",
File
);
\r
+ Warning("Proc_Execve - Unable to load '%s'",
Threads_GetName(-1)
);
\r
Threads_Exit();
\r
for(;;);
\r
}
\r
Threads_Exit();
\r
for(;;);
\r
}
\r
diff --git
a/Kernel/threads.c
b/Kernel/threads.c
index
d55bd2d
..
54438c3
100644
(file)
--- a/
Kernel/threads.c
+++ b/
Kernel/threads.c
@@
-20,6
+20,7
@@
extern int Proc_Clone(Uint *Err, Uint Flags);
// === PROTOTYPES ===
void Threads_Init();
void Threads_SetName(char *NewName);
// === PROTOTYPES ===
void Threads_Init();
void Threads_SetName(char *NewName);
+char *Threads_GetName(int ID);
void Threads_SetTickets(int Num);
int Threads_WaitTID(int TID, int *status);
tThread *Threads_GetThread(Uint TID);
void Threads_SetTickets(int Num);
int Threads_WaitTID(int TID, int *status);
tThread *Threads_GetThread(Uint TID);
@@
-117,6
+118,18
@@
void Threads_SetName(char *NewName)
strcpy(cur->ThreadName, NewName);
}
strcpy(cur->ThreadName, NewName);
}
+/**
+ * \fn char *Threads_GetName(int ID)
+ * \brief Gets a thread's name
+ */
+char *Threads_GetName(int ID)
+{
+ if(ID == -1) {
+ return Proc_GetCurThread()->ThreadName;
+ }
+ return NULL;
+}
+
/**
* \fn void Threads_SetTickets(int Num)
* \brief Sets the 'priority' of a task
/**
* \fn void Threads_SetTickets(int Num)
* \brief Sets the 'priority' of a task
diff --git
a/Usermode/Libraries/libc.so_src/fileIO.c
b/Usermode/Libraries/libc.so_src/fileIO.c
index
c1a47ff
..
b8cdb11
100644
(file)
--- a/
Usermode/Libraries/libc.so_src/fileIO.c
+++ b/
Usermode/Libraries/libc.so_src/fileIO.c
@@
-21,9
+21,10
@@
struct sFILE *get_file_struct();
\r
// === GLOBALS ===
\r
struct sFILE _iob[STDIO_MAX_STREAMS]; // IO Buffer
\r
\r
// === GLOBALS ===
\r
struct sFILE _iob[STDIO_MAX_STREAMS]; // IO Buffer
\r
-struct sFILE *stdin = &_iob[0]; // Standard Input
\r
-struct sFILE *stdout = &_iob[1]; // Standard Output
\r
-struct sFILE *stderr = &_iob[2]; // Standard Error
\r
+struct sFILE *stdin; // Standard Input
\r
+struct sFILE *stdout; // Standard Output
\r
+struct sFILE *stderr; // Standard Error
\r
+///\note Initialised in SoMain
\r
\r
// === CODE ===
\r
/**
\r
\r
// === CODE ===
\r
/**
\r
@@
-303,6
+304,10
@@
EXPORT void sprintfv(char *buf, const char *format, va_list args)
itoa(tmp, arg, 10, minSize, pad);
\r
goto sprintf_puts;
\r
// break;
\r
itoa(tmp, arg, 10, minSize, pad);
\r
goto sprintf_puts;
\r
// break;
\r
+ case 'p': // Pointer
\r
+ buf[pos++] = '*';
\r
+ buf[pos++] = '0';
\r
+ buf[pos++] = 'x';
\r
case 'x':
\r
itoa(tmp, arg, 16, minSize, pad);
\r
goto sprintf_puts;
\r
case 'x':
\r
itoa(tmp, arg, 16, minSize, pad);
\r
goto sprintf_puts;
\r
@@
-396,6
+401,8
@@
EXPORT int ssprintfv(char *format, va_list args)
case 'u':
\r
itoa(tmp, arg, 10, minSize, pad);
\r
goto sprintf_puts;
\r
case 'u':
\r
itoa(tmp, arg, 10, minSize, pad);
\r
goto sprintf_puts;
\r
+ case 'p': // Pointer
\r
+ len += 3;
\r
case 'x':
\r
itoa(tmp, arg, 16, minSize, pad);
\r
goto sprintf_puts;
\r
case 'x':
\r
itoa(tmp, arg, 16, minSize, pad);
\r
goto sprintf_puts;
\r
@@
-458,7
+465,7
@@
EXPORT void itoa(char *buf, unsigned long num, int base, int minLength, char pad
*/
\r
EXPORT int printf(const char *format, ...)
\r
{
\r
*/
\r
EXPORT int printf(const char *format, ...)
\r
{
\r
- #if
0
\r
+ #if
1
\r
int size;
\r
char *buf;
\r
va_list args;
\r
int size;
\r
char *buf;
\r
va_list args;
\r
@@
-479,7
+486,8
@@
EXPORT int printf(const char *format, ...)
\r
free(buf);
\r
return size;
\r
\r
free(buf);
\r
return size;
\r
- #endif
\r
+
\r
+ #else
\r
\r
int ret;
\r
va_list args;
\r
\r
int ret;
\r
va_list args;
\r
@@
-487,6
+495,7
@@
EXPORT int printf(const char *format, ...)
ret = fprintfv(stdout, (char*)format, args);
\r
va_end(args);
\r
return ret;
\r
ret = fprintfv(stdout, (char*)format, args);
\r
va_end(args);
\r
return ret;
\r
+ #endif
\r
}
\r
\r
/**
\r
}
\r
\r
/**
\r
diff --git
a/Usermode/Libraries/libc.so_src/heap.c
b/Usermode/Libraries/libc.so_src/heap.c
index
6832738
..
10cdb24
100644
(file)
--- a/
Usermode/Libraries/libc.so_src/heap.c
+++ b/
Usermode/Libraries/libc.so_src/heap.c
@@
-53,7
+53,7
@@
EXPORT void *malloc(size_t bytes)
\r
// Initialise Heap
\r
if(_heap_start == NULL)
\r
\r
// Initialise Heap
\r
if(_heap_start == NULL)
\r
- {
LOCAL void *sbrk(int delta);
\r
+ {
\r
_heap_start = sbrk(0);
\r
_heap_end = _heap_start;
\r
extendHeap(HEAP_INIT_SIZE);
\r
_heap_start = sbrk(0);
\r
_heap_end = _heap_start;
\r
extendHeap(HEAP_INIT_SIZE);
\r
@@
-208,10
+208,10
@@
EXPORT void *realloc(void *oldPos, size_t bytes)
}
\r
\r
/**
\r
}
\r
\r
/**
\r
- \fn LOCAL void *extendHeap(int bytes)
\r
- \brief Create a new block at the end of the heap area
\r
-
\param bytes
Integer - Size reqired
\r
- \return Pointer to last free block
\r
+
*
\fn LOCAL void *extendHeap(int bytes)
\r
+
*
\brief Create a new block at the end of the heap area
\r
+
* \param bytes
Integer - Size reqired
\r
+
*
\return Pointer to last free block
\r
*/
\r
\r
LOCAL void *extendHeap(int bytes)
\r
*/
\r
\r
LOCAL void *extendHeap(int bytes)
\r
diff --git
a/Usermode/Libraries/libc.so_src/stub.c
b/Usermode/Libraries/libc.so_src/stub.c
index
acb3653
..
a10d9d1
100644
(file)
--- a/
Usermode/Libraries/libc.so_src/stub.c
+++ b/
Usermode/Libraries/libc.so_src/stub.c
@@
-5,6
+5,9
@@
\r
extern char **_envp;
\r
extern struct sFILE _iob[];
\r
\r
extern char **_envp;
\r
extern struct sFILE _iob[];
\r
+extern struct sFILE *stdin;
\r
+extern struct sFILE *stdout;
\r
+extern struct sFILE *stderr;
\r
\r
/**
\r
* \fn int SoMain()
\r
\r
/**
\r
* \fn int SoMain()
\r
@@
-20,9
+23,12
@@
int SoMain(unsigned int BaseAddress, int argc, char **argv, char **envp)
_envp = envp;
\r
\r
// Init FileIO Pointers
\r
_envp = envp;
\r
\r
// Init FileIO Pointers
\r
- _iob[0].FD = 0; _iob[0].Flags = FILE_FLAG_MODE_READ;
\r
- _iob[1].FD = 1; _iob[1].Flags = FILE_FLAG_MODE_WRITE;
\r
- _iob[2].FD = 2; _iob[2].Flags = FILE_FLAG_MODE_WRITE;
\r
+ stdin = &_iob[0];
\r
+ stdin->FD = 0; stdin->Flags = FILE_FLAG_MODE_READ;
\r
+ stdout = &_iob[1];
\r
+ stdout->FD = 1; stdout->Flags = FILE_FLAG_MODE_WRITE;
\r
+ stderr = &_iob[2];
\r
+ stderr->FD = 2; stderr->Flags = FILE_FLAG_MODE_WRITE;
\r
\r
return 1;
\r
}
\r
\r
return 1;
\r
}
\r
UCC
git Repository :: git.ucc.asn.au