Restored x86 compliation. Still unable to run under x86 due to no TLS
authorPaul Pearce <pearce@eecs.berkeley.edu>
Wed, 6 Jan 2010 04:38:52 +0000 (23:38 -0500)
committerPaul Pearce <pearce@eecs.berkeley.edu>
Wed, 6 Jan 2010 04:38:52 +0000 (23:38 -0500)
This commit provides various fixes, including several stubs, needed to allow
ROS to build for x86. Most of these stubs are syscalls that newlib_backend
needs to handle. I haven't decided how we should support these syscalls. Our
options are to either ship them off over the serial/network link to the
syscall server, or handle them locally.

There is an additional stub in trap.h to handle the setting of errno's
with respect to syscalls. We need to figure out how we wish to handle
this.

NOTE: Although this compiles, attempting to run this under x86 will
result in a page fault durin proc_run. This is a result of the lack
of any thread local store support on the x86 side. Paul plans to
take a look at adding x86 tls support, next.

kern/arch/i386/trap.h
kern/src/manager.c
user/parlib/src/i386/entry.S
user/parlib/src/i386/newlib_backend.c

index 6fb1e61..b12eba2 100644 (file)
@@ -98,6 +98,12 @@ typedef struct AncillaryState {
        uint32_t silly; // remove this when you actually use this struct
 } ancillary_state_t;
 
+// TODO: WE MUST DECIDE HOW TO HANDLE THIS.
+static inline void set_errno(trapframe_t* tf, uint32_t errno)
+{
+       return;
+}
+
 #endif /* !__ASSEMBLER__ */
 
 // Must equal 'sizeof(trapframe_t)'.
index 6eeca47..51ce4e1 100644 (file)
@@ -194,6 +194,12 @@ void manager_waterman()
        manager_klueska();
 }
 
+void manager_pearce()
+{
+       manager_klueska();
+}
+
+
 #ifdef __sparc_v8__
 
 static char*
index 456f8fa..30740aa 100644 (file)
@@ -35,7 +35,7 @@ _start:
        jne     notcore0
 
        // argc/argv are provided by procinfo and are accessed in parlibmain
-       call parlibmain
+       call parlib_main
 
        // illegal instruction in case parlibmain accidentally returns
        mov     (0),%eax
index bb03dde..552baff 100644 (file)
 #include <stdio.h>
 #include <debug.h>
 #include <sys/times.h>
+#include <assert.h>
+#include <dirent.h>
+
+/* These are stubs for newlib syscalls that 
+   exist on the sparc platform, but not x86.
+
+   Paul TODO: Ship or do locally?
+*/
+
+DIR *opendir (const char *name) { assert(0); }
+struct dirent *readdir (DIR *d) { assert(0); }
+void rewinddir (DIR *d) { assert(0); }
+int closedir (DIR *d) { assert(0); }
+int access (const char *name, int mode) { return 0; }
+int gettimeofday(struct timeval* tp, void* tzp) { return 0; }
 
 /* environ
  * A pointer to a list of environment variables and their values. 
  * For a minimal environment, this empty list is adequate.
  */
+/* These are defined inside of newlib.
 char *__env[1] = { 0 };
 char **environ = __env;
+*/
 
 /* _exit()
  * Exit a program without cleaning up files.