Fixes C++ streams (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 20:27:09 +0000 (12:27 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 20:27:09 +0000 (12:27 -0800)
Stream file code under the hood wasn't opening files.  It would call a
few functions, and due to having large file support built in (which we
do want), it would try to call open64, which was not built in glibc due
to the lack of _G_OPEN64.  Conveniently enough, the fopen calls didn't
have stub warnings; they just returned ENOSYS.

Turns out there is a _G_config.h file in sysdeps/gnu/ that I think Linux
uses.  We're now using that same file, with minor changes (no __mremap).

Rebuild your cross compiler (either make clean or copy over the -ros
file).

tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/_G_config.h [new file with mode: 0644]

diff --git a/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/_G_config.h b/tools/compilers/gcc-glibc/glibc-2.14.1-ros/sysdeps/ros/_G_config.h
new file mode 100644 (file)
index 0000000..c8e18e1
--- /dev/null
@@ -0,0 +1,103 @@
+/* This file is needed by libio to define various configuration parameters.
+   These are always the same in the GNU C library.  */
+
+#ifndef _G_config_h
+#define _G_config_h 1
+
+/* this is the same as the GNU version, unless marked 'ROS' */
+
+/* Define types for libio in terms of the standard internal type names.  */
+
+#include <bits/types.h>
+#define __need_size_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wchar_t
+#endif
+#define __need_NULL
+#include <stddef.h>
+#define __need_mbstate_t
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# define __need_wint_t
+#endif
+#include <wchar.h>
+#define _G_size_t      size_t
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+#define _G_ssize_t     __ssize_t
+#define _G_off_t       __off_t
+#define _G_off64_t     __off64_t
+#define        _G_pid_t        __pid_t
+#define        _G_uid_t        __uid_t
+#define _G_wchar_t     wchar_t
+#define _G_wint_t      wint_t
+#define _G_stat64      stat64
+#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
+# include <gconv.h>
+typedef union
+{
+  struct __gconv_info __cd;
+  struct
+  {
+    struct __gconv_info __cd;
+    struct __gconv_step_data __data;
+  } __combined;
+} _G_iconv_t;
+#endif
+
+typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
+
+#define _G_HAVE_BOOL 1
+
+
+/* These library features are always available in the GNU C library.  */
+#define _G_HAVE_ATEXIT 1
+#define _G_HAVE_SYS_CDEFS 1
+#define _G_HAVE_SYS_WAIT 1
+#define _G_NEED_STDARG_H 1
+#define _G_va_list __gnuc_va_list
+
+#define _G_HAVE_PRINTF_FP 1
+#define _G_HAVE_MMAP 1
+//#define _G_HAVE_MREMAP 1 /* ROS: turning off mremap */
+#define _G_HAVE_LONG_DOUBLE_IO 1
+#define _G_HAVE_IO_FILE_OPEN 1
+#define _G_HAVE_IO_GETLINE_INFO 1
+
+#define _G_IO_IO_FILE_VERSION 0x20001
+
+#define _G_OPEN64      __open64
+#define _G_LSEEK64     __lseek64
+#define _G_MMAP64      __mmap64
+#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
+
+/* This is defined by <bits/stat.h> if `st_blksize' exists.  */
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+#define _G_BUFSIZ 8192
+
+/* These are the vtbl details for ELF.  */
+#define _G_NAMES_HAVE_UNDERSCORE 0
+#define _G_VTABLE_LABEL_HAS_LENGTH 1
+#define _G_USING_THUNKS        1
+#define _G_VTABLE_LABEL_PREFIX "__vt_"
+#define _G_VTABLE_LABEL_PREFIX_ID __vt_
+
+
+#if defined __cplusplus || defined __STDC__
+# define _G_ARGS(ARGLIST) ARGLIST
+#else
+# define _G_ARGS(ARGLIST) ()
+#endif
+
+#endif /* _G_config.h */