123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573 |
- /* sysinfo.c -- input for mksysinfo.sh
- Copyright 2009 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file. */
- /* This file is passed to GCC with the -fdump-go-spec option to
- generate a Go version of the system information. */
- #include "config.h"
- #include <stddef.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
- #include <dirent.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <ucontext.h>
- #include <netinet/in.h>
- /* <netinet/tcp.h> needs u_char/u_short, but <sys/bsd_types> is only
- included by <netinet/in.h> if _SGIAPI (i.e. _SGI_SOURCE
- && !_XOPEN_SOURCE.
- <sys/termios.h> only defines TIOCNOTTY if !_XOPEN_SOURCE, while
- <sys/ttold.h> does so unconditionally. */
- #ifdef __sgi__
- #include <sys/bsd_types.h>
- #include <sys/ttold.h>
- #endif
- #include <netinet/tcp.h>
- #if defined(HAVE_NETINET_IN_SYSTM_H)
- #include <netinet/in_systm.h>
- #endif
- #if defined(HAVE_NETINET_IP_H)
- #include <netinet/ip.h>
- #endif
- #if defined(HAVE_NETINET_IP_MROUTE_H)
- #include <netinet/ip_mroute.h>
- #endif
- #if defined(HAVE_NETINET_IF_ETHER_H)
- #include <netinet/if_ether.h>
- #endif
- #include <signal.h>
- #include <sys/ioctl.h>
- #include <termios.h>
- #if defined(HAVE_SYSCALL_H)
- #include <syscall.h>
- #endif
- #if defined(HAVE_SYS_SYSCALL_H)
- #include <sys/syscall.h>
- #endif
- #if defined(HAVE_SYS_SYSCTL_H)
- #include <sys/sysctl.h>
- #endif
- #if defined(HAVE_SYS_EPOLL_H)
- #include <sys/epoll.h>
- #endif
- #if defined(HAVE_SYS_EVENT_H)
- #include <sys/event.h>
- #endif
- #if defined(HAVE_SYS_FILE_H)
- #include <sys/file.h>
- #endif
- #if defined(HAVE_SYS_MMAN_H)
- #include <sys/mman.h>
- #endif
- #if defined(HAVE_SYS_PRCTL_H)
- #include <sys/prctl.h>
- #endif
- #if defined(HAVE_SYS_PTRACE_H)
- #include <sys/ptrace.h>
- #endif
- #include <sys/resource.h>
- #include <sys/uio.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
- #include <sys/time.h>
- #include <sys/times.h>
- #include <sys/wait.h>
- #include <sys/un.h>
- #if defined(HAVE_SYS_USER_H)
- #include <sys/user.h>
- #endif
- #if defined(HAVE_SYS_UTSNAME_H)
- #include <sys/utsname.h>
- #endif
- #if defined(HAVE_SYS_SELECT_H)
- #include <sys/select.h>
- #endif
- #include <time.h>
- #include <unistd.h>
- #include <netdb.h>
- #include <pwd.h>
- #include <grp.h>
- #if defined(HAVE_LINUX_FILTER_H)
- #include <linux/filter.h>
- #endif
- #if defined(HAVE_LINUX_IF_ADDR_H)
- #include <linux/if_addr.h>
- #endif
- #if defined(HAVE_LINUX_IF_ETHER_H)
- #include <linux/if_ether.h>
- #endif
- #if defined(HAVE_LINUX_IF_TUN_H)
- #include <linux/if_tun.h>
- #endif
- #if defined(HAVE_LINUX_NETLINK_H)
- #include <linux/netlink.h>
- #endif
- #if defined(HAVE_LINUX_PTRACE_H)
- /* Avoid https://sourceware.org/bugzilla/show_bug.cgi?id=762 . */
- #define ia64_fpreg pt_ia64_fpreg
- #define pt_all_user_regs pt_ia64_all_user_regs
- /* Avoid redefinition of ptrace_peeksiginfo from <sys/ptrace.h>.
- https://gcc.gnu.org/PR81324 . */
- #define ptrace_peeksiginfo_args ignore_ptrace_peeksiginfo_args
- #include <linux/ptrace.h>
- #undef ia64_fpreg
- #undef pt_all_user_regs
- #undef ptrace_peeksiginfo_args
- #endif
- #if defined(HAVE_LINUX_RTNETLINK_H)
- #include <linux/rtnetlink.h>
- #endif
- #if defined(HAVE_NET_BPF_H)
- #include <net/bpf.h>
- #endif
- #if defined(HAVE_NET_IF_H)
- #include <net/if.h>
- #endif
- #if defined(HAVE_NET_IF_ARP_H)
- #include <net/if_arp.h>
- #endif
- #if defined(HAVE_NET_ROUTE_H)
- #include <net/route.h>
- #endif
- #if defined (HAVE_NETPACKET_PACKET_H)
- #include <netpacket/packet.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_UTIME_H)
- #include <utime.h>
- #endif
- #if defined(HAVE_LINUX_ETHER_H)
- #include <linux/ether.h>
- #endif
- #if defined(HAVE_LINUX_FS_H)
- #include <linux/fs.h>
- #endif
- #if defined(HAVE_LINUX_REBOOT_H)
- #include <linux/reboot.h>
- #endif
- #if defined(HAVE_SYS_INOTIFY_H)
- #include <sys/inotify.h>
- #endif
- #if defined(HAVE_NETINET_ICMP6_H)
- #include <netinet/icmp6.h>
- #endif
- #if defined(HAVE_SCHED_H)
- #include <sched.h>
- #endif
- #if defined(HAVE_SEMAPHORE_H)
- #include <semaphore.h>
- #endif
- #if defined(HAVE_PORT_H)
- #include <port.h>
- #endif
- #if defined(HAVE_LWP_H)
- #include <lwp.h>
- #endif
- #ifdef USE_LIBFFI
- #include "ffi.h"
- #endif
- /* Constants that may only be defined as expressions on some systems,
- expressions too complex for -fdump-go-spec to handle. These are
- handled specially below. */
- enum {
- #ifdef TIOCGWINSZ
- TIOCGWINSZ_val = TIOCGWINSZ,
- #endif
- #ifdef TIOCSWINSZ
- TIOCSWINSZ_val = TIOCSWINSZ,
- #endif
- #ifdef TIOCNOTTY
- TIOCNOTTY_val = TIOCNOTTY,
- #endif
- #ifdef TIOCSCTTY
- TIOCSCTTY_val = TIOCSCTTY,
- #endif
- #ifdef TIOCGPGRP
- TIOCGPGRP_val = TIOCGPGRP,
- #endif
- #ifdef TIOCSPGRP
- TIOCSPGRP_val = TIOCSPGRP,
- #endif
- #ifdef TIOCGPTN
- TIOCGPTN_val = TIOCGPTN,
- #endif
- #ifdef TIOCSPTLCK
- TIOCSPTLCK_val = TIOCSPTLCK,
- #endif
- #ifdef TIOCGDEV
- TIOCGDEV_val = TIOCGDEV,
- #endif
- #ifdef TIOCSIG
- TIOCSIG_val = TIOCSIG,
- #endif
- #ifdef TCGETS
- TCGETS_val = TCGETS,
- #endif
- #ifdef TCSETS
- TCSETS_val = TCSETS,
- #endif
- #ifdef TUNSETIFF
- TUNSETIFF_val = TUNSETIFF,
- #endif
- #ifdef TUNSETNOCSUM
- TUNSETNOCSUM_val = TUNSETNOCSUM,
- #endif
- #ifdef TUNSETDEBUG
- TUNSETDEBUG_val = TUNSETDEBUG,
- #endif
- #ifdef TUNSETPERSIST
- TUNSETPERSIST_val = TUNSETPERSIST,
- #endif
- #ifdef TUNSETOWNER
- TUNSETOWNER_val = TUNSETOWNER,
- #endif
- #ifdef TUNSETLINK
- TUNSETLINK_val = TUNSETLINK,
- #endif
- #ifdef TUNSETGROUP
- TUNSETGROUP_val = TUNSETGROUP,
- #endif
- #ifdef TUNGETFEATURES
- TUNGETFEATURES_val = TUNGETFEATURES,
- #endif
- #ifdef TUNSETOFFLOAD
- TUNSETOFFLOAD_val = TUNSETOFFLOAD,
- #endif
- #ifdef TUNSETTXFILTER
- TUNSETTXFILTER_val = TUNSETTXFILTER,
- #endif
- #ifdef TUNGETIFF
- TUNGETIFF_val = TUNGETIFF,
- #endif
- #ifdef TUNGETSNDBUF
- TUNGETSNDBUF_val = TUNGETSNDBUF,
- #endif
- #ifdef TUNSETSNDBUF
- TUNSETSNDBUF_val = TUNSETSNDBUF,
- #endif
- #ifdef TUNATTACHFILTER
- TUNATTACHFILTER_val = TUNATTACHFILTER,
- #endif
- #ifdef TUNDETACHFILTER
- TUNDETACHFILTER_val = TUNDETACHFILTER,
- #endif
- #ifdef TUNGETVNETHDRSZ
- TUNGETVNETHDRSZ_val = TUNGETVNETHDRSZ,
- #endif
- #ifdef TUNSETVNETHDRSZ
- TUNSETVNETHDRSZ_val = TUNSETVNETHDRSZ,
- #endif
- #ifdef TUNSETQUEUE
- TUNSETQUEUE_val = TUNSETQUEUE,
- #endif
- #ifdef TUNSETIFINDEX
- TUNSETIFINDEX_val = TUNSETIFINDEX,
- #endif
- #ifdef TUNGETFILTER
- TUNGETFILTER_val = TUNGETFILTER,
- #endif
- #ifdef NLA_HDRLEN
- NLA_HDRLEN_val = NLA_HDRLEN,
- #endif
- #ifdef BIOCFLUSH
- BIOCFLUSH_val = BIOCFLUSH,
- #endif
- #ifdef BIOCGBLEN
- BIOCGBLEN_val = BIOCGBLEN,
- #endif
- #ifdef BIOCGDLT
- BIOCGDLT_val = BIOCGDLT,
- #endif
- #ifdef BIOCGETIF
- BIOCGETIF_val = BIOCGETIF,
- #endif
- #ifdef BIOCGHDRCMPLT
- BIOCGHDRCMPLT_val = BIOCGHDRCMPLT,
- #endif
- #ifdef BIOCGRTIMEOUT
- BIOCGRTIMEOUT_val = BIOCGRTIMEOUT,
- #endif
- #ifdef BIOCGSTATS
- BIOCGSTATS_val = BIOCGSTATS,
- #endif
- #ifdef BIOCIMMEDIATE
- BIOCIMMEDIATE_val = BIOCIMMEDIATE,
- #endif
- #ifdef BIOCPROMISC
- BIOCPROMISC_val = BIOCPROMISC,
- #endif
- #ifdef BIOCSBLEN
- BIOCSBLEN_val = BIOCSBLEN,
- #endif
- #ifdef BIOCSDLT
- BIOCSDLT_val = BIOCSDLT,
- #endif
- #ifdef BIOCSETF
- BIOCSETF_val = BIOCSETF,
- #endif
- #ifdef BIOCSETIF
- BIOCSETIF_val = BIOCSETIF,
- #endif
- #ifdef BIOCSHDRCMPLT
- BIOCSHDRCMPLT_val = BIOCSHDRCMPLT,
- #endif
- #ifdef BIOCSRTIMEOUT
- BIOCSRTIMEOUT_val = BIOCSRTIMEOUT,
- #endif
- #ifdef BIOCVERSION
- BIOCVERSION_val = BIOCVERSION,
- #endif
- #ifdef SO_RCVTIMEO
- SO_RCVTIMEO_val = SO_RCVTIMEO,
- #endif
- };
- // SIOCGIFMTU can't be added in the above enum as it might
- // be signed in some OSes.
- #ifdef SIOCGIFMTU
- enum {
- SIOCGIFMTU_val = SIOCGIFMTU,
- };
- #endif
- #if defined(HAVE_SYS_EPOLL_H)
- enum {
- epoll_data_offset = offsetof(struct epoll_event, data)
- };
- #endif
- // The following section introduces explicit references to types and
- // constants of interest to support bootstrapping libgo using a
- // compiler that doesn't support -fdump-go-spec (e.g., clang), via
- // DWARF-based tools. This process is made more difficult due to the
- // fact that clang tries hard to omit types/constants from DWARF if it
- // can't find explicit references to them, so here we make sure that
- // key items are mentioned in ways that will force them into the
- // generated DWARF.
- #if defined(__clang__)
- // Make a reference to a type
- #define TREF(typ) typ typ ## ref
- // Make a reference to an opaque type
- #define OTREF(typ) typ *typ ## ref
- // Make a reference to a struct tag
- #define SREF(stag) struct stag stag ## ref
- // Make a reference to an enum literal
- #define EREF(elit) unsigned elit ## fn(unsigned x) { return x == elit ? 1 : 0; }
- //......................................................................
- // From dirent.h
- SREF(dirent);
- SREF(dirent64);
- OTREF(DIR);
- EREF(DT_UNKNOWN);
- // From fcntl.h
- SREF(flock);
- SREF(flock64);
- // From ffi headers
- SREF(_ffi_type);
- TREF(ffi_cif);
- TREF(ffi_abi);
- TREF(ffi_status);
- EREF(FFI_OK);
- // From grp.h
- SREF(group);
- #if defined(HAVE_LINUX_FILTER_H)
- // From linux/filter.h
- SREF(sock_filter);
- SREF(sock_fprog);
- #endif
- // From linux/if.h
- EREF(IFF_UP);
- #if defined(HAVE_LINUX_IF_ADDR_H)
- // From linux/if_addr.h
- SREF(ifaddrmsg);
- EREF(IFA_ADDRESS);
- #endif
- #if defined(HAVE_LINUX_RTNETLINK_H)
- // From linux/if_link.h
- EREF(IFLA_ADDRESS);
- #endif
- // From in.h, in6.h, icmp6.h
- SREF(ip_mreq);
- SREF(ip_mreqn);
- SREF(ipv6_mreq);
- SREF(ip6_mtuinfo);
- SREF(icmp6_filter);
- SREF(in_pktinfo);
- EREF(IPPROTO_TCP);
- #if defined(HAVE_LINUX_RTNETLINK_H)
- // From linux/rtnetlink.h
- SREF(rtgenmsg);
- SREF(rtmsg);
- SREF(ifinfomsg);
- SREF(rtattr);
- SREF(rtnexthop);
- EREF(RTM_BASE);
- EREF(RTN_UNSPEC);
- #endif
- // From netdb.h
- SREF(addrinfo);
- // From netlink.h
- SREF(nlattr);
- SREF(nlmsgerr);
- // From pthread.h and related
- TREF(pthread_attr_t);
- TREF(pthread_t);
- TREF(pthread_mutex_t);
- TREF(pthread_mutexattr_t);
- // From pwd.h
- SREF(passwd);
- // From signal.h and related
- TREF(sigset_t);
- TREF(siginfo_t);
- TREF(stack_t);
- SREF(sigaction);
- SREF(sigstack);
- EREF(SI_USER);
- EREF(FPE_INTOVF);
- EREF(BUS_ADRALN);
- EREF(SS_ONSTACK);
- EREF(SEGV_MAPERR);
- // From stat.h
- SREF(stat64);
- // From statfs.h
- SREF(statfs);
- SREF(statfs64);
- // From sysinfo.h
- SREF(sysinfo);
- // From <sys/epoll.h>
- #if defined(HAVE_SYS_EPOLL_H)
- SREF(epoll_event);
- EREF(EPOLLIN);
- EREF(epoll_data_offset);
- #endif
- #if defined(HAVE_SYS_MOUNT_H)
- // From sys/mount.h
- EREF(MS_PRIVATE);
- EREF(MNT_FORCE);
- #endif
- #if defined(HAVE_SYS_PTRACE_H)
- // From <sys/ptrace.h>
- #if defined (__aarch64__)
- SREF(user_pt_regs);
- #else
- SREF(pt_regs);
- #endif
- EREF(PTRACE_PEEKTEXT);
- #endif
- // From sys/resource.h
- SREF(rusage);
- SREF(rlimit64);
- EREF(RLIMIT_NOFILE);
- EREF(PRIO_USER);
- EREF(RUSAGE_SELF);
- // From sys/select.h
- TREF(fd_set);
- // From sys/socket.h
- SREF(msghdr);
- SREF(cmsghdr);
- SREF(ucred);
- EREF(MSG_OOB);
- EREF(SCM_RIGHTS);
- EREF(SOCK_RAW);
- EREF(SHUT_RD);
- // From sys/time.h and sys/times.h
- SREF(timespec);
- SREF(timeval);
- SREF(itimerval);
- SREF(tms);
- EREF(ITIMER_PROF);
- #if defined(HAVE_SYS_TIMEX_H)
- // From sys/timex.h
- SREF(timex);
- #endif
- // From sys/types.h
- TREF(pid_t);
- TREF(off_t);
- TREF(loff_t);
- TREF(size_t);
- TREF(ssize_t);
- TREF(mode_t);
- TREF(dev_t);
- TREF(time_t);
- // From sys/ucontext.h
- TREF(ucontext_t);
- #if defined(HAVE_SYS_USER_H)
- // From sys/user.h
- SREF(user_regs_struct);
- #endif
- #if defined(HAVE_SYS_UTSNAME_H)
- // From sys/utsname.h
- SREF(utsname);
- #endif
- // From termios.h
- SREF(termios);
- // From uio.h
- SREF(iovec);
- // From utime.h
- SREF(utimbuf);
- // From unistd.h
- EREF(_PC_NAME_MAX);
- EREF(_SC_GETPW_R_SIZE_MAX);
- #endif // clang
|