]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgo/sysinfo.c
Fix boostrap failure in tree-ssa-loop-ch.cc
[thirdparty/gcc.git] / libgo / sysinfo.c
CommitLineData
14cda8a1
ILT
1/* sysinfo.c -- input for mksysinfo.sh
2
3 Copyright 2009 The Go Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file. */
6
7/* This file is passed to GCC with the -fdump-go-spec option to
8 generate a Go version of the system information. */
9
10#include "config.h"
11
812ba636 12#include <stddef.h>
0cdde1e7 13#include <stdlib.h>
9bac6639 14#include <stdio.h>
14cda8a1
ILT
15#include <sys/types.h>
16#include <dirent.h>
17#include <errno.h>
18#include <fcntl.h>
19#include <ucontext.h>
20#include <netinet/in.h>
21/* <netinet/tcp.h> needs u_char/u_short, but <sys/bsd_types> is only
22 included by <netinet/in.h> if _SGIAPI (i.e. _SGI_SOURCE
23 && !_XOPEN_SOURCE.
24 <sys/termios.h> only defines TIOCNOTTY if !_XOPEN_SOURCE, while
25 <sys/ttold.h> does so unconditionally. */
26#ifdef __sgi__
27#include <sys/bsd_types.h>
28#include <sys/ttold.h>
29#endif
30#include <netinet/tcp.h>
31#if defined(HAVE_NETINET_IN_SYSTM_H)
32#include <netinet/in_systm.h>
33#endif
34#if defined(HAVE_NETINET_IP_H)
35#include <netinet/ip.h>
36#endif
37#if defined(HAVE_NETINET_IP_MROUTE_H)
38#include <netinet/ip_mroute.h>
39#endif
40#if defined(HAVE_NETINET_IF_ETHER_H)
41#include <netinet/if_ether.h>
42#endif
43#include <signal.h>
44#include <sys/ioctl.h>
45#include <termios.h>
46#if defined(HAVE_SYSCALL_H)
47#include <syscall.h>
48#endif
49#if defined(HAVE_SYS_SYSCALL_H)
50#include <sys/syscall.h>
51#endif
dc570700
NB
52#if defined(HAVE_SYS_SYSCTL_H)
53#include <sys/sysctl.h>
54#endif
14cda8a1
ILT
55#if defined(HAVE_SYS_EPOLL_H)
56#include <sys/epoll.h>
57#endif
812ba636
ILT
58#if defined(HAVE_SYS_EVENT_H)
59#include <sys/event.h>
60#endif
14cda8a1
ILT
61#if defined(HAVE_SYS_FILE_H)
62#include <sys/file.h>
63#endif
64#if defined(HAVE_SYS_MMAN_H)
65#include <sys/mman.h>
66#endif
67#if defined(HAVE_SYS_PRCTL_H)
68#include <sys/prctl.h>
69#endif
70#if defined(HAVE_SYS_PTRACE_H)
71#include <sys/ptrace.h>
72#endif
73#include <sys/resource.h>
74#include <sys/uio.h>
75#include <sys/socket.h>
76#include <sys/stat.h>
77#include <sys/time.h>
78#include <sys/times.h>
79#include <sys/wait.h>
80#include <sys/un.h>
81#if defined(HAVE_SYS_USER_H)
82#include <sys/user.h>
83#endif
84#if defined(HAVE_SYS_UTSNAME_H)
85#include <sys/utsname.h>
86#endif
87#if defined(HAVE_SYS_SELECT_H)
88#include <sys/select.h>
89#endif
90#include <time.h>
91#include <unistd.h>
92#include <netdb.h>
93#include <pwd.h>
94#include <grp.h>
95#if defined(HAVE_LINUX_FILTER_H)
96#include <linux/filter.h>
97#endif
98#if defined(HAVE_LINUX_IF_ADDR_H)
99#include <linux/if_addr.h>
100#endif
101#if defined(HAVE_LINUX_IF_ETHER_H)
102#include <linux/if_ether.h>
103#endif
104#if defined(HAVE_LINUX_IF_TUN_H)
105#include <linux/if_tun.h>
106#endif
107#if defined(HAVE_LINUX_NETLINK_H)
108#include <linux/netlink.h>
109#endif
8d4b68a7 110#if defined(HAVE_LINUX_PTRACE_H)
0bcce674
ILT
111/* Avoid https://sourceware.org/bugzilla/show_bug.cgi?id=762 . */
112#define ia64_fpreg pt_ia64_fpreg
113#define pt_all_user_regs pt_ia64_all_user_regs
eb80664a
ILT
114/* Avoid redefinition of ptrace_peeksiginfo from <sys/ptrace.h>.
115 https://gcc.gnu.org/PR81324 . */
116#define ptrace_peeksiginfo_args ignore_ptrace_peeksiginfo_args
8d4b68a7 117#include <linux/ptrace.h>
0bcce674
ILT
118#undef ia64_fpreg
119#undef pt_all_user_regs
eb80664a 120#undef ptrace_peeksiginfo_args
8d4b68a7 121#endif
14cda8a1
ILT
122#if defined(HAVE_LINUX_RTNETLINK_H)
123#include <linux/rtnetlink.h>
124#endif
dc570700
NB
125#if defined(HAVE_NET_BPF_H)
126#include <net/bpf.h>
127#endif
14cda8a1
ILT
128#if defined(HAVE_NET_IF_H)
129#include <net/if.h>
130#endif
131#if defined(HAVE_NET_IF_ARP_H)
132#include <net/if_arp.h>
133#endif
134#if defined(HAVE_NET_ROUTE_H)
135#include <net/route.h>
136#endif
137#if defined (HAVE_NETPACKET_PACKET_H)
138#include <netpacket/packet.h>
139#endif
140#if defined(HAVE_SYS_MOUNT_H)
141#include <sys/mount.h>
142#endif
143#if defined(HAVE_SYS_VFS_H)
144#include <sys/vfs.h>
145#endif
146#if defined(HAVE_STATFS_H)
147#include <sys/statfs.h>
148#endif
149#if defined(HAVE_SYS_TIMEX_H)
150#include <sys/timex.h>
151#endif
152#if defined(HAVE_SYS_SYSINFO_H)
153#include <sys/sysinfo.h>
154#endif
14cda8a1
ILT
155#if defined(HAVE_UTIME_H)
156#include <utime.h>
157#endif
158#if defined(HAVE_LINUX_ETHER_H)
159#include <linux/ether.h>
160#endif
14cda8a1
ILT
161#if defined(HAVE_LINUX_REBOOT_H)
162#include <linux/reboot.h>
163#endif
164#if defined(HAVE_SYS_INOTIFY_H)
165#include <sys/inotify.h>
166#endif
167#if defined(HAVE_NETINET_ICMP6_H)
168#include <netinet/icmp6.h>
169#endif
170#if defined(HAVE_SCHED_H)
171#include <sched.h>
172#endif
c0401cf7
ILT
173#if defined(HAVE_SEMAPHORE_H)
174#include <semaphore.h>
175#endif
812ba636
ILT
176#if defined(HAVE_PORT_H)
177#include <port.h>
178#endif
0cdde1e7
NB
179#if defined(HAVE_LWP_H)
180#include <lwp.h>
181#endif
14cda8a1 182
5302cd02
ILT
183#ifdef USE_LIBFFI
184#include "ffi.h"
185#endif
186
14cda8a1
ILT
187/* Constants that may only be defined as expressions on some systems,
188 expressions too complex for -fdump-go-spec to handle. These are
189 handled specially below. */
190enum {
191#ifdef TIOCGWINSZ
192 TIOCGWINSZ_val = TIOCGWINSZ,
193#endif
194#ifdef TIOCSWINSZ
195 TIOCSWINSZ_val = TIOCSWINSZ,
196#endif
197#ifdef TIOCNOTTY
198 TIOCNOTTY_val = TIOCNOTTY,
199#endif
200#ifdef TIOCSCTTY
201 TIOCSCTTY_val = TIOCSCTTY,
202#endif
203#ifdef TIOCGPGRP
204 TIOCGPGRP_val = TIOCGPGRP,
205#endif
206#ifdef TIOCSPGRP
207 TIOCSPGRP_val = TIOCSPGRP,
208#endif
209#ifdef TIOCGPTN
210 TIOCGPTN_val = TIOCGPTN,
211#endif
212#ifdef TIOCSPTLCK
213 TIOCSPTLCK_val = TIOCSPTLCK,
214#endif
215#ifdef TIOCGDEV
216 TIOCGDEV_val = TIOCGDEV,
217#endif
218#ifdef TIOCSIG
219 TIOCSIG_val = TIOCSIG,
220#endif
221#ifdef TCGETS
222 TCGETS_val = TCGETS,
223#endif
224#ifdef TCSETS
225 TCSETS_val = TCSETS,
226#endif
227#ifdef TUNSETIFF
228 TUNSETIFF_val = TUNSETIFF,
229#endif
230#ifdef TUNSETNOCSUM
231 TUNSETNOCSUM_val = TUNSETNOCSUM,
232#endif
233#ifdef TUNSETDEBUG
234 TUNSETDEBUG_val = TUNSETDEBUG,
235#endif
236#ifdef TUNSETPERSIST
237 TUNSETPERSIST_val = TUNSETPERSIST,
238#endif
239#ifdef TUNSETOWNER
240 TUNSETOWNER_val = TUNSETOWNER,
241#endif
242#ifdef TUNSETLINK
243 TUNSETLINK_val = TUNSETLINK,
244#endif
245#ifdef TUNSETGROUP
246 TUNSETGROUP_val = TUNSETGROUP,
247#endif
248#ifdef TUNGETFEATURES
249 TUNGETFEATURES_val = TUNGETFEATURES,
250#endif
251#ifdef TUNSETOFFLOAD
252 TUNSETOFFLOAD_val = TUNSETOFFLOAD,
253#endif
254#ifdef TUNSETTXFILTER
255 TUNSETTXFILTER_val = TUNSETTXFILTER,
256#endif
257#ifdef TUNGETIFF
258 TUNGETIFF_val = TUNGETIFF,
259#endif
260#ifdef TUNGETSNDBUF
261 TUNGETSNDBUF_val = TUNGETSNDBUF,
262#endif
263#ifdef TUNSETSNDBUF
264 TUNSETSNDBUF_val = TUNSETSNDBUF,
265#endif
266#ifdef TUNATTACHFILTER
267 TUNATTACHFILTER_val = TUNATTACHFILTER,
268#endif
269#ifdef TUNDETACHFILTER
270 TUNDETACHFILTER_val = TUNDETACHFILTER,
271#endif
272#ifdef TUNGETVNETHDRSZ
273 TUNGETVNETHDRSZ_val = TUNGETVNETHDRSZ,
274#endif
275#ifdef TUNSETVNETHDRSZ
276 TUNSETVNETHDRSZ_val = TUNSETVNETHDRSZ,
277#endif
278#ifdef TUNSETQUEUE
279 TUNSETQUEUE_val = TUNSETQUEUE,
280#endif
281#ifdef TUNSETIFINDEX
282 TUNSETIFINDEX_val = TUNSETIFINDEX,
283#endif
284#ifdef TUNGETFILTER
285 TUNGETFILTER_val = TUNGETFILTER,
286#endif
287#ifdef NLA_HDRLEN
288 NLA_HDRLEN_val = NLA_HDRLEN,
289#endif
dc570700
NB
290#ifdef BIOCFLUSH
291 BIOCFLUSH_val = BIOCFLUSH,
292#endif
293#ifdef BIOCGBLEN
294 BIOCGBLEN_val = BIOCGBLEN,
295#endif
296#ifdef BIOCGDLT
297 BIOCGDLT_val = BIOCGDLT,
298#endif
299#ifdef BIOCGETIF
300 BIOCGETIF_val = BIOCGETIF,
301#endif
302#ifdef BIOCGHDRCMPLT
303 BIOCGHDRCMPLT_val = BIOCGHDRCMPLT,
304#endif
305#ifdef BIOCGRTIMEOUT
306 BIOCGRTIMEOUT_val = BIOCGRTIMEOUT,
307#endif
308#ifdef BIOCGSTATS
309 BIOCGSTATS_val = BIOCGSTATS,
310#endif
311#ifdef BIOCIMMEDIATE
312 BIOCIMMEDIATE_val = BIOCIMMEDIATE,
313#endif
314#ifdef BIOCPROMISC
315 BIOCPROMISC_val = BIOCPROMISC,
316#endif
317#ifdef BIOCSBLEN
318 BIOCSBLEN_val = BIOCSBLEN,
319#endif
320#ifdef BIOCSDLT
321 BIOCSDLT_val = BIOCSDLT,
322#endif
323#ifdef BIOCSETF
324 BIOCSETF_val = BIOCSETF,
325#endif
326#ifdef BIOCSETIF
327 BIOCSETIF_val = BIOCSETIF,
328#endif
329#ifdef BIOCSHDRCMPLT
330 BIOCSHDRCMPLT_val = BIOCSHDRCMPLT,
331#endif
332#ifdef BIOCSRTIMEOUT
333 BIOCSRTIMEOUT_val = BIOCSRTIMEOUT,
334#endif
335#ifdef BIOCVERSION
336 BIOCVERSION_val = BIOCVERSION,
337#endif
e848a83f
ILT
338#ifdef SO_RCVTIMEO
339 SO_RCVTIMEO_val = SO_RCVTIMEO,
340#endif
14cda8a1 341};
812ba636 342
63cd53d2
CC
343// SIOCGIFMTU can't be added in the above enum as it might
344// be signed in some OSes.
345#ifdef SIOCGIFMTU
346enum {
347 SIOCGIFMTU_val = SIOCGIFMTU,
348};
349#endif
350
812ba636
ILT
351#if defined(HAVE_SYS_EPOLL_H)
352enum {
353 epoll_data_offset = offsetof(struct epoll_event, data)
354};
355#endif
fbf2f198 356
a63b99f2
ILT
357#if !defined(SYS_timer_settime) && defined(SYS_timer_settime32)
358// musl defines SYS_timer_settim32 on 32-bit systems.
359#define SYS_timer_settime SYS_timer_settime32
360#endif
361
7f195a22
ILT
362#if defined(HAVE_LOFF_T)
363// loff_t can be defined as a macro; for -fgo-dump-spec make sure we
364// see a typedef.
365typedef loff_t libgo_loff_t_type;
366#endif
367
368#if defined(HAVE_OFF64_T)
369typedef off64_t libgo_off_t_type;
370#else
371typedef off_t libgo_off_t_type;
372#endif
373
fbf2f198
ILT
374// The following section introduces explicit references to types and
375// constants of interest to support bootstrapping libgo using a
376// compiler that doesn't support -fdump-go-spec (e.g., clang), via
377// DWARF-based tools. This process is made more difficult due to the
378// fact that clang tries hard to omit types/constants from DWARF if it
379// can't find explicit references to them, so here we make sure that
380// key items are mentioned in ways that will force them into the
381// generated DWARF.
382
383#if defined(__clang__)
384
385// Make a reference to a type
386#define TREF(typ) typ typ ## ref
387
388// Make a reference to an opaque type
389#define OTREF(typ) typ *typ ## ref
390
391// Make a reference to a struct tag
392#define SREF(stag) struct stag stag ## ref
393
394// Make a reference to an enum literal
395#define EREF(elit) unsigned elit ## fn(unsigned x) { return x == elit ? 1 : 0; }
396
397//......................................................................
398
399// From dirent.h
400SREF(dirent);
401SREF(dirent64);
402OTREF(DIR);
1d7d3f91 403EREF(DT_UNKNOWN);
fbf2f198
ILT
404
405// From fcntl.h
406SREF(flock);
407SREF(flock64);
408
409// From ffi headers
410SREF(_ffi_type);
411TREF(ffi_cif);
412TREF(ffi_abi);
413TREF(ffi_status);
414EREF(FFI_OK);
415
416// From grp.h
417SREF(group);
418
419#if defined(HAVE_LINUX_FILTER_H)
420// From linux/filter.h
421SREF(sock_filter);
422SREF(sock_fprog);
423#endif
424
425// From linux/if.h
426EREF(IFF_UP);
427
428#if defined(HAVE_LINUX_IF_ADDR_H)
429// From linux/if_addr.h
430SREF(ifaddrmsg);
431EREF(IFA_ADDRESS);
432#endif
433
434#if defined(HAVE_LINUX_RTNETLINK_H)
435// From linux/if_link.h
436EREF(IFLA_ADDRESS);
437#endif
438
439// From in.h, in6.h, icmp6.h
440SREF(ip_mreq);
441SREF(ip_mreqn);
442SREF(ipv6_mreq);
443SREF(ip6_mtuinfo);
444SREF(icmp6_filter);
445SREF(in_pktinfo);
446EREF(IPPROTO_TCP);
447
448#if defined(HAVE_LINUX_RTNETLINK_H)
449// From linux/rtnetlink.h
450SREF(rtgenmsg);
451SREF(rtmsg);
452SREF(ifinfomsg);
453SREF(rtattr);
454SREF(rtnexthop);
455EREF(RTM_BASE);
456EREF(RTN_UNSPEC);
457#endif
458
459// From netdb.h
460SREF(addrinfo);
461
462// From netlink.h
463SREF(nlattr);
464SREF(nlmsgerr);
465
466// From pthread.h and related
467TREF(pthread_attr_t);
468TREF(pthread_t);
469TREF(pthread_mutex_t);
470TREF(pthread_mutexattr_t);
471
472// From pwd.h
473SREF(passwd);
474
475// From signal.h and related
476TREF(sigset_t);
477TREF(siginfo_t);
478TREF(stack_t);
479SREF(sigaction);
480SREF(sigstack);
481EREF(SI_USER);
482EREF(FPE_INTOVF);
483EREF(BUS_ADRALN);
484EREF(SS_ONSTACK);
485EREF(SEGV_MAPERR);
486
487// From stat.h
488SREF(stat64);
489
490// From statfs.h
491SREF(statfs);
492SREF(statfs64);
493
494// From sysinfo.h
495SREF(sysinfo);
496
497// From <sys/epoll.h>
498#if defined(HAVE_SYS_EPOLL_H)
499SREF(epoll_event);
500EREF(EPOLLIN);
501EREF(epoll_data_offset);
502#endif
503
504#if defined(HAVE_SYS_MOUNT_H)
505// From sys/mount.h
506EREF(MS_PRIVATE);
507EREF(MNT_FORCE);
508#endif
509
510#if defined(HAVE_SYS_PTRACE_H)
511// From <sys/ptrace.h>
ab2d47a8
ILT
512#if defined (__aarch64__)
513SREF(user_pt_regs);
514#else
fbf2f198 515SREF(pt_regs);
ab2d47a8 516#endif
fbf2f198
ILT
517EREF(PTRACE_PEEKTEXT);
518#endif
519
520// From sys/resource.h
521SREF(rusage);
522SREF(rlimit64);
523EREF(RLIMIT_NOFILE);
524EREF(PRIO_USER);
1d7d3f91 525EREF(RUSAGE_SELF);
fbf2f198
ILT
526
527// From sys/select.h
528TREF(fd_set);
529
530// From sys/socket.h
531SREF(msghdr);
532SREF(cmsghdr);
533SREF(ucred);
534EREF(MSG_OOB);
535EREF(SCM_RIGHTS);
536EREF(SOCK_RAW);
537EREF(SHUT_RD);
538
539// From sys/time.h and sys/times.h
540SREF(timespec);
541SREF(timeval);
542SREF(itimerval);
543SREF(tms);
544EREF(ITIMER_PROF);
545
546#if defined(HAVE_SYS_TIMEX_H)
547// From sys/timex.h
548SREF(timex);
549#endif
550
551// From sys/types.h
552TREF(pid_t);
553TREF(off_t);
7f195a22
ILT
554TREF(libgo_loff_t_type);
555TREF(libgo_off_t_type);
fbf2f198
ILT
556TREF(size_t);
557TREF(ssize_t);
558TREF(mode_t);
559TREF(dev_t);
560TREF(time_t);
561
562// From sys/ucontext.h
563TREF(ucontext_t);
564
565#if defined(HAVE_SYS_USER_H)
566// From sys/user.h
567SREF(user_regs_struct);
568#endif
569
570#if defined(HAVE_SYS_UTSNAME_H)
571// From sys/utsname.h
572SREF(utsname);
573#endif
574
575// From termios.h
576SREF(termios);
577
578// From uio.h
579SREF(iovec);
580
581// From utime.h
582SREF(utimbuf);
583
584// From unistd.h
585EREF(_PC_NAME_MAX);
586EREF(_SC_GETPW_R_SIZE_MAX);
587
588#endif // clang