Hi,
To answer your question on your previous email, I am running a 32 bit
xen. Thanks for the patch. I can now build the caml stubdom on 32 bit
debian 4.0 and run the mini-os caml domain.
geoffrey
On Thu, Aug 7, 2008 at 10:25 AM, Samuel Thibault
<samuel.thibault@xxxxxxxxxxxxx> wrote:
> stubdom: turn off_t 64bit on x86
>
> We can decide to make off_t 64bit instead of implementing the LFS
> tricks. Name corresponding functions foo64 to permit simple caml
> programs linking.
>
> Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
>
> diff -r c43e01d53d1d extras/mini-os/include/fcntl.h
> --- a/extras/mini-os/include/fcntl.h Wed Aug 06 11:54:09 2008 +0100
> +++ b/extras/mini-os/include/fcntl.h Thu Aug 07 18:21:37 2008 +0100
> @@ -91,8 +91,9 @@ struct flock64 {
> #define F_LINUX_SPECIFIC_BASE 1024
> */
>
> -int open(const char *path, int flags, ...);
> -int fcntl(int fd, int cmd, ...);
> #endif
>
> +int open(const char *path, int flags, ...) asm("open64");
> +int fcntl(int fd, int cmd, ...);
> +
> #endif
> diff -r c43e01d53d1d extras/mini-os/include/posix/sys/mman.h
> --- a/extras/mini-os/include/posix/sys/mman.h Wed Aug 06 11:54:09 2008 +0100
> +++ b/extras/mini-os/include/posix/sys/mman.h Thu Aug 07 18:21:37 2008 +0100
> @@ -14,7 +14,7 @@
>
> #define MAP_FAILED ((void*)0)
>
> -void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t
> offset);
> +void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t
> offset) asm("mmap64");
> int munmap(void *start, size_t length);
> #define munlock(addr, len) ((void)addr, (void)len, 0)
> #define mlock(addr, len) ((void)addr, (void)len, 0)
> diff -r c43e01d53d1d extras/mini-os/include/posix/sys/stat.h
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/extras/mini-os/include/posix/sys/stat.h Thu Aug 07 18:21:37 2008 +0100
> @@ -0,0 +1,7 @@
> +#ifndef _POSIX_SYS_STAT_H
> +#define _POSIX_SYS_STAT_H
> +
> +#include_next <sys/stat.h>
> +int fstat(int fd, struct stat *buf) asm("fstat64");
> +
> +#endif /* _POSIX_SYS_STAT_H */
> diff -r c43e01d53d1d extras/mini-os/lib/sys.c
> --- a/extras/mini-os/lib/sys.c Wed Aug 06 11:54:09 2008 +0100
> +++ b/extras/mini-os/lib/sys.c Thu Aug 07 18:21:37 2008 +0100
> @@ -204,9 +204,6 @@ int open(const char *pathname, int flags
> files[fd].file.offset = 0;
> return fd;
> }
> -#if defined(__x86_64__) || defined(__ia64__)
> -__typeof__(open) open64 __attribute__((__alias__("open")));
> -#endif
>
> int isatty(int fd)
> {
> @@ -347,9 +344,6 @@ off_t lseek(int fd, off_t offset, int wh
> }
> return files[fd].file.offset;
> }
> -#if defined(__x86_64__) || defined(__ia64__)
> -__typeof__(lseek) lseek64 __attribute__((__alias__("lseek")));
> -#endif
>
> int fsync(int fd) {
> switch (files[fd].type) {
> @@ -1184,9 +1178,6 @@ void *mmap(void *start, size_t length, i
> return map_frames_ex(&zero, n, 0, 0, 1, DOMID_SELF, 0, 0);
> } else ASSERT(0);
> }
> -#if defined(__x86_64__) || defined(__ia64__)
> -__typeof__(mmap) mmap64 __attribute__((__alias__("mmap")));
> -#endif
>
> int munmap(void *start, size_t length)
> {
> diff -r c43e01d53d1d stubdom/newlib.patch
> --- a/stubdom/newlib.patch Wed Aug 06 11:54:09 2008 +0100
> +++ b/stubdom/newlib.patch Thu Aug 07 18:21:37 2008 +0100
> @@ -627,3 +627,123 @@ diff -u -p -r1.1 memcpy.S
>
> #ifdef _I386MACH_NEED_SOTYPE_FUNCTION
> #define SOTYPE_FUNCTION(sym) .type SYM(sym),@function
> +
> +
> +We want to have a 64bit offsets libc even on 32bit platforms.
> +
> +--- ./newlib/configure.host.orig 2008-08-07 16:01:17.801946000 +0100
> ++++ ./newlib/configure.host 2008-08-07 16:01:34.181064000 +0100
> +@@ -317,6 +317,8 @@
> + oext=lo
> + lpfx=
> + aext=la ;;
> ++ i[34567]86-xen-elf)
> ++ stdio64_dir=stdio64 ;;
> + *) ;; #shared library not supported for ${host}
> + esac
> +
> +--- newlib/libc/include/sys/_types.h.orig 2008-08-07 15:22:44.925008000
> +0100
> ++++ newlib/libc/include/sys/_types.h 2008-08-07 15:22:50.824044000 +0100
> +@@ -13,8 +13,12 @@
> + #include <sys/lock.h>
> +
> + #ifndef __off_t_defined
> ++#ifdef __MINIOS__
> ++typedef long long _off_t;
> ++#else
> + typedef long _off_t;
> + #endif
> ++#endif
> +
> + #if defined(__rtems__)
> + /* device numbers are 32-bit major and and 32-bit minor */
> +--- ./newlib/libc/include/sys/config.h.orig 2008-08-07 14:43:25.915866000
> +0100
> ++++ ./newlib/libc/include/sys/config.h 2008-08-07 14:44:13.508154000 +0100
> +@@ -69,6 +69,10 @@
> + /* we use some glibc header files so turn on glibc large file feature */
> + #define _LARGEFILE64_SOURCE 1
> + #endif
> ++#ifdef __MINIOS__
> ++#define __LARGE64_FILES 1
> ++#define _LARGEFILE64_SOURCE 1
> ++#endif
> + #endif
> +
> + #ifndef __DYNAMIC_REENT__
> +--- ./newlib/libc/include/sys/_default_fcntl.h.orig 2008-08-07
> 15:08:22.377836000 +0100
> ++++ ./newlib/libc/include/sys/_default_fcntl.h 2008-08-07 15:08:31.651890000
> +0100
> +@@ -170,7 +170,11 @@
> + /* Provide _<systemcall> prototypes for functions provided by some versions
> + of newlib. */
> + #ifdef _COMPILING_NEWLIB
> +-extern int _open _PARAMS ((const char *, int, ...));
> ++extern int _open _PARAMS ((const char *, int, ...))
> ++#ifdef __MINIOS__
> ++ asm("open64")
> ++#endif
> ++ ;
> + extern int _fcntl _PARAMS ((int, int, ...));
> + #ifdef __LARGE64_FILES
> + extern int _open64 _PARAMS ((const char *, int, ...));
> +--- ./newlib/libc/include/sys/unistd.h.orig 2008-08-07 15:09:36.449280000
> +0100
> ++++ ./newlib/libc/include/sys/unistd.h 2008-08-07 15:09:51.210370000 +0100
> +@@ -101,7 +101,11 @@
> + int _EXFUN(link, (const char *__path1, const char *__path2 ));
> + int _EXFUN(nice, (int __nice_value ));
> + #if !defined(__INSIDE_CYGWIN__)
> +-off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ));
> ++off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ))
> ++#ifdef __MINIOS__
> ++ asm("lseek64")
> ++#endif
> ++ ;
> + #endif
> + #if defined(__SPU__)
> + #define F_ULOCK 0
> +--- ./newlib/libc/include/sys/stat.h.orig 2008-08-07 16:08:50.495116000
> +0100
> ++++ ./newlib/libc/include/sys/stat.h 2008-08-07 16:10:21.799753000 +0100
> +@@ -49,6 +49,9 @@
> + long st_spare4[2];
> + #endif
> + };
> ++#ifdef __MINIOS__
> ++#define stat64 stat
> ++#endif
> + #endif
> +
> + #define _IFMT 0170000 /* type of file */
> +@@ -132,7 +135,11 @@
> + /* Provide prototypes for most of the _<systemcall> names that are
> + provided in newlib for some compilers. */
> + #ifdef _COMPILING_NEWLIB
> +-int _EXFUN(_fstat,( int __fd, struct stat *__sbuf ));
> ++int _EXFUN(_fstat,( int __fd, struct stat *__sbuf ))
> ++#ifdef __MINIOS__
> ++ asm("fstat64")
> ++#endif
> ++ ;
> + int _EXFUN(_stat,( const char *__path, struct stat *__sbuf ));
> + #ifdef __LARGE64_FILES
> + struct stat64;
> +--- ./newlib/libc/include/_syslist.h.orig 2008-08-07 16:24:19.122605000
> +0100
> ++++ ./newlib/libc/include/_syslist.h 2008-08-07 16:24:21.548628000 +0100
> +@@ -14,6 +14,7 @@
> + #define _kill kill
> + #define _link link
> + #define _lseek lseek
> ++#define _lseek64 lseek64
> + #define _open open
> + #define _read read
> + #define _sbrk sbrk
> +--- newlib/libc/include/reent.h.orig 2008-08-07 16:28:49.846502000 +0100
> ++++ newlib/libc/include/reent.h 2008-08-07 16:29:02.096586000 +0100
> +@@ -87,6 +87,9 @@
> + #if defined(__CYGWIN__) && defined(_COMPILING_NEWLIB)
> + #define stat64 __stat64
> + #endif
> ++#if defined(__MINIOS__)
> ++#define stat64 stat
> ++#endif
> +
> + struct stat64;
> +
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|