summaryrefslogtreecommitdiff
path: root/libgo/mksysinfo.sh
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/mksysinfo.sh')
-rwxr-xr-xlibgo/mksysinfo.sh165
1 files changed, 164 insertions, 1 deletions
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index 62296b8af2f..e5f3066e26a 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -78,6 +78,7 @@ cat > sysinfo.c <<EOF
#if defined(HAVE_SYS_SELECT_H)
#include <sys/select.h>
#endif
+#include <time.h>
#include <unistd.h>
#include <netdb.h>
#include <pwd.h>
@@ -93,6 +94,30 @@ cat > sysinfo.c <<EOF
#if defined(HAVE_NET_IF_H)
#include <net/if.h>
#endif
+#if defined(HAVE_SYS_MOUNT_H)
+#include <sys/mount.h>
+#endif
+#if defined(HAVE_SYS_VFS_H)
+#include <sys/vfs.h>
+#endif
+#if defined(HAVE_STATFS_H)
+#include <sys/statfs.h>
+#endif
+#if defined(HAVE_SYS_TIMEX_H)
+#include <sys/timex.h>
+#endif
+#if defined(HAVE_SYS_SYSINFO_H)
+#include <sys/sysinfo.h>
+#endif
+#if defined(HAVE_USTAT_H)
+#include <ustat.h>
+#endif
+#if defined(HAVE_UTIME_H)
+#include <utime.h>
+#endif
+#if defined(HAVE_LINUX_REBOOT_H)
+#include <linux/reboot.h>
+#endif
/* Constants that may only be defined as expressions on some systems,
expressions too complex for -fdump-go-spec to handle. These are
@@ -147,7 +172,7 @@ fi
# The signal numbers.
grep '^const _SIG[^_]' gen-sysinfo.go | \
grep -v '^const _SIGEV_' | \
- sed -e 's/^\(const \)_\(SIG[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+ sed -e 's/^\(const \)_\(SIG[^= ]*\)\(.*\)$/\1\2 = Signal(_\2)/' >> ${OUT}
# The syscall numbers. We force the names to upper case.
grep '^const _SYS_' gen-sysinfo.go | \
@@ -166,6 +191,8 @@ grep '^const _PROT_' gen-sysinfo.go | \
sed -e 's/^\(const \)_\(PROT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _MAP_' gen-sysinfo.go | \
sed -e 's/^\(const \)_\(MAP_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+grep '^const _MADV_' gen-sysinfo.go | \
+ sed -e 's/^\(const \)_\(MADV_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# Process status constants.
grep '^const _W' gen-sysinfo.go |
@@ -330,6 +357,11 @@ if grep "^// type _upad128_t" gen-sysinfo.go > /dev/null 2>&1; then
echo "type _upad128_t struct { _l [4]uint32; }" >> ${OUT}
fi
+# The time_t type.
+if grep '^type _time_t ' gen-sysinfo.go > /dev/null 2>&1; then
+ echo 'type Time_t _time_t' >> ${OUT}
+fi
+
# The time structures need special handling: we need to name the
# types, so that we can cast integers to the right types when
# assigning to the structures.
@@ -703,6 +735,10 @@ grep '^const _IFLA' gen-sysinfo.go | \
sed -e 's/^\(const \)_\(IFLA[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
grep '^const _IFF' gen-sysinfo.go | \
sed -e 's/^\(const \)_\(IFF[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+grep '^const _IFNAMSIZ' gen-sysinfo.go | \
+ sed -e 's/^\(const \)_\(IFNAMSIZ[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+grep '^const _SIOC' gen-sysinfo.go |
+ sed -e 's/^\(const \)_\(SIOC[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
# The size of the ifinfomsg struct.
if grep 'type IfInfomsg ' ${OUT} > /dev/null 2>&1; then
@@ -766,4 +802,131 @@ for n in IGNBRK BRKINT IGNPAR PARMRK INPCK ISTRIP INLCR IGNCR ICRNL IUCLC \
sed -e 's/^\(const \)_\([^=]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
done
+# The mount flags
+grep '^const _MS_' gen-sysinfo.go |
+ sed -e 's/^\(const \)_\(MS_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
+# The fallocate flags.
+grep '^const _FALLOC_' gen-sysinfo.go |
+ sed -e 's/^\(const \)_\(FALLOC_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
+# The statfs struct.
+# Prefer largefile variant if available.
+statfs=`grep '^type _statfs64 ' gen-sysinfo.go || true`
+if test "$statfs" != ""; then
+ grep '^type _statfs64 ' gen-sysinfo.go
+else
+ grep '^type _statfs ' gen-sysinfo.go
+fi | sed -e 's/type _statfs64/type Statfs_t/' \
+ -e 's/type _statfs/type Statfs_t/' \
+ -e 's/f_type/Type/' \
+ -e 's/f_bsize/Bsize/' \
+ -e 's/f_blocks/Blocks/' \
+ -e 's/f_bfree/Bfree/' \
+ -e 's/f_bavail/Bavail/' \
+ -e 's/f_files/Files/' \
+ -e 's/f_ffree/Ffree/' \
+ -e 's/f_fsid/Fsid/' \
+ -e 's/f_namelen/Namelen/' \
+ -e 's/f_frsize/Frsize/' \
+ -e 's/f_flags/Flags/' \
+ -e 's/f_spare/Spare/' \
+ >> ${OUT}
+
+# The timex struct.
+grep '^type _timex ' gen-sysinfo.go | \
+ sed -e 's/_timex/Timex/' \
+ -e 's/modes/Modes/' \
+ -e 's/offset/Offset/' \
+ -e 's/freq/Freq/' \
+ -e 's/maxerror/Maxerror/' \
+ -e 's/esterror/Esterror/' \
+ -e 's/status/Status/' \
+ -e 's/constant/Constant/' \
+ -e 's/precision/Precision/' \
+ -e 's/tolerance/Tolerance/' \
+ -e 's/ time / Time /' \
+ -e 's/tick/Tick/' \
+ -e 's/ppsfreq/Ppsfreq/' \
+ -e 's/jitter/Jitter/' \
+ -e 's/shift/Shift/' \
+ -e 's/stabil/Stabil/' \
+ -e 's/jitcnt/Jitcnt/' \
+ -e 's/calcnt/Calcnt/' \
+ -e 's/errcnt/Errcnt/' \
+ -e 's/stbcnt/Stbcnt/' \
+ -e 's/tai/Tai/' \
+ -e 's/_timeval/Timeval/' \
+ >> ${OUT}
+
+# The rlimit struct.
+grep '^type _rlimit ' gen-sysinfo.go | \
+ sed -e 's/_rlimit/Rlimit/' \
+ -e 's/rlim_cur/Cur/' \
+ -e 's/rlim_max/Max/' \
+ >> ${OUT}
+
+# The RLIMIT constants.
+grep '^const _RLIMIT_' gen-sysinfo.go |
+ sed -e 's/^\(const \)_\(RLIMIT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
+# The sysinfo struct.
+grep '^type _sysinfo ' gen-sysinfo.go | \
+ sed -e 's/_sysinfo/Sysinfo_t/' \
+ -e 's/uptime/Uptime/' \
+ -e 's/loads/Loads/' \
+ -e 's/totalram/Totalram/' \
+ -e 's/freeram/Freeram/' \
+ -e 's/sharedram/Sharedram/' \
+ -e 's/bufferram/Bufferram/' \
+ -e 's/totalswap/Totalswap/' \
+ -e 's/freeswap/Freeswap/' \
+ -e 's/procs/Procs/' \
+ -e 's/totalhigh/Totalhigh/' \
+ -e 's/freehigh/Freehigh/' \
+ -e 's/mem_unit/Unit/' \
+ >> ${OUT}
+
+# The ustat struct.
+grep '^type _ustat ' gen-sysinfo.go | \
+ sed -e 's/_ustat/Ustat_t/' \
+ -e 's/f_tfree/Tfree/' \
+ -e 's/f_tinode/Tinoe/' \
+ -e 's/f_fname/Fname/' \
+ -e 's/f_fpack/Fpack/' \
+ >> ${OUT}
+# Force it to be defined, as on some older GNU/Linux systems the
+# header file fails when using with <linux/filter.h>.
+if ! grep 'type _ustat ' gen-sysinfo.go >/dev/null 2>&1; then
+ echo 'type Ustat_t struct { Tfree int32; Tinoe uint64; Fname [5+1]int8; Fpack [5+1]int8; }' >> ${OUT}
+fi
+
+# The utimbuf struct.
+grep '^type _utimbuf ' gen-sysinfo.go | \
+ sed -e 's/_utimbuf/Utimbuf/' \
+ -e 's/actime/Actime/' \
+ -e 's/modtime/Modtime/' \
+ >> ${OUT}
+
+# The GNU/Linux LINUX_REBOOT flags.
+grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
+ sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+
+# The GNU/Linux sock_filter struct.
+grep '^type _sock_filter ' gen-sysinfo.go | \
+ sed -e 's/_sock_filter/SockFilter/' \
+ -e 's/code/Code/' \
+ -e 's/jt/Jt/' \
+ -e 's/jf/Jf/' \
+ -e 's/k /K /' \
+ >> ${OUT}
+
+# The GNU/Linux sock_fprog struct.
+grep '^type _sock_fprog ' gen-sysinfo.go | \
+ sed -e 's/_sock_fprog/SockFprog/' \
+ -e 's/len/Len/' \
+ -e 's/filter/Filter/' \
+ -e 's/_sock_filter/SockFilter/' \
+ >> ${OUT}
+
exit $?