brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.5 KiB · c4fa1e3 Raw
543 lines · cpp
1//===-- sanitizer_platform_limits_freebsd.cpp -----------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of Sanitizer common code.10//11// Sizes and layouts of platform-specific FreeBSD data structures.12//===----------------------------------------------------------------------===//13 14#include "sanitizer_platform.h"15 16#if SANITIZER_FREEBSD17 18#include <sys/capsicum.h>19#include <sys/consio.h>20#include <sys/cpuset.h>21#include <sys/filio.h>22#include <sys/ipc.h>23#include <sys/kbio.h>24#include <sys/link_elf.h>25#include <sys/mman.h>26#include <sys/mount.h>27#include <sys/mqueue.h>28#include <sys/msg.h>29#include <sys/mtio.h>30#include <sys/ptrace.h>31#include <sys/resource.h>32#include <sys/shm.h>33#include <sys/signal.h>34#include <sys/socket.h>35#include <sys/sockio.h>36#include <sys/soundcard.h>37#include <sys/stat.h>38#include <sys/statvfs.h>39#include <sys/time.h>40#pragma clang diagnostic push41#pragma clang diagnostic ignored "-W#warnings"42#include <sys/timeb.h>43#pragma clang diagnostic pop44#include <sys/times.h>45#include <sys/timespec.h>46#include <sys/types.h>47#include <sys/ucontext.h>48#include <sys/utsname.h>49//50#include <arpa/inet.h>51#include <net/ethernet.h>52#include <net/if.h>53#include <net/ppp_defs.h>54#include <net/route.h>55#include <netdb.h>56#include <netinet/in.h>57#include <netinet/ip_mroute.h>58//59#include <dirent.h>60#include <dlfcn.h>61#include <fstab.h>62#include <fts.h>63#include <glob.h>64#include <grp.h>65#include <ifaddrs.h>66#include <limits.h>67#include <poll.h>68#include <pthread.h>69#include <pwd.h>70#include <regex.h>71#include <semaphore.h>72#include <signal.h>73#include <stddef.h>74#include <stdio.h>75#include <stringlist.h>76#include <termios.h>77#include <time.h>78#include <ttyent.h>79#include <utime.h>80#include <utmpx.h>81#include <vis.h>82#include <wchar.h>83#include <wordexp.h>84 85#undef IOC_DIRMASK86 87// Include these after system headers to avoid name clashes and ambiguities.88#include "sanitizer_internal_defs.h"89#include "sanitizer_libc.h"90#include "sanitizer_platform_limits_freebsd.h"91 92namespace __sanitizer {93void *__sanitizer_get_link_map_by_dlopen_handle(void *handle) {94  void *p = nullptr;95  return internal_dlinfo(handle, RTLD_DI_LINKMAP, &p) == 0 ? p : nullptr;96}97 98unsigned struct_cpuset_sz = sizeof(cpuset_t);99unsigned struct_cap_rights_sz = sizeof(cap_rights_t);100unsigned struct_utsname_sz = sizeof(struct utsname);101unsigned struct_stat_sz = sizeof(struct stat);102unsigned struct_rusage_sz = sizeof(struct rusage);103unsigned struct_tm_sz = sizeof(struct tm);104unsigned struct_passwd_sz = sizeof(struct passwd);105unsigned struct_group_sz = sizeof(struct group);106unsigned siginfo_t_sz = sizeof(siginfo_t);107unsigned struct_sigaction_sz = sizeof(struct sigaction);108unsigned struct_stack_t_sz = sizeof(stack_t);109unsigned struct_itimerval_sz = sizeof(struct itimerval);110unsigned pthread_t_sz = sizeof(pthread_t);111unsigned pthread_mutex_t_sz = sizeof(pthread_mutex_t);112unsigned pthread_cond_t_sz = sizeof(pthread_cond_t);113unsigned pid_t_sz = sizeof(pid_t);114unsigned timeval_sz = sizeof(timeval);115unsigned uid_t_sz = sizeof(uid_t);116unsigned gid_t_sz = sizeof(gid_t);117unsigned fpos_t_sz = sizeof(fpos_t);118unsigned mbstate_t_sz = sizeof(mbstate_t);119unsigned sigset_t_sz = sizeof(sigset_t);120unsigned struct_timezone_sz = sizeof(struct timezone);121unsigned struct_tms_sz = sizeof(struct tms);122unsigned struct_sigevent_sz = sizeof(struct sigevent);123unsigned struct_sched_param_sz = sizeof(struct sched_param);124unsigned struct_statfs_sz = sizeof(struct statfs);125unsigned struct_sockaddr_sz = sizeof(struct sockaddr);126unsigned ucontext_t_sz(void *ctx) { return sizeof(ucontext_t); }127unsigned struct_rlimit_sz = sizeof(struct rlimit);128unsigned struct_timespec_sz = sizeof(struct timespec);129unsigned struct_utimbuf_sz = sizeof(struct utimbuf);130unsigned struct_itimerspec_sz = sizeof(struct itimerspec);131unsigned struct_timeb_sz = sizeof(struct timeb);132unsigned struct_msqid_ds_sz = sizeof(struct msqid_ds);133unsigned struct_mq_attr_sz = sizeof(struct mq_attr);134unsigned struct_statvfs_sz = sizeof(struct statvfs);135unsigned struct_regmatch_sz = sizeof(regmatch_t);136unsigned struct_regex_sz = sizeof(regex_t);137unsigned struct_fstab_sz = sizeof(struct fstab);138unsigned struct_FTS_sz = sizeof(FTS);139unsigned struct_FTSENT_sz = sizeof(FTSENT);140unsigned struct_StringList_sz = sizeof(StringList);141 142const uptr sig_ign = (uptr)SIG_IGN;143const uptr sig_dfl = (uptr)SIG_DFL;144const uptr sig_err = (uptr)SIG_ERR;145const uptr sa_siginfo = (uptr)SA_SIGINFO;146 147int shmctl_ipc_stat = (int)IPC_STAT;148unsigned struct_utmpx_sz = sizeof(struct utmpx);149 150int map_fixed = MAP_FIXED;151 152int af_inet = (int)AF_INET;153int af_inet6 = (int)AF_INET6;154 155uptr __sanitizer_in_addr_sz(int af) {156  if (af == AF_INET)157    return sizeof(struct in_addr);158  else if (af == AF_INET6)159    return sizeof(struct in6_addr);160  else161    return 0;162}163 164// For FreeBSD the actual size of a directory entry is not always in d_reclen.165// Use the appropriate macro to get the correct size for all cases (e.g. NFS).166u16 __sanitizer_dirsiz(const __sanitizer_dirent *dp) {167  return _GENERIC_DIRSIZ(dp);168}169 170unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);171int glob_nomatch = GLOB_NOMATCH;172int glob_altdirfunc = GLOB_ALTDIRFUNC;173const int wordexp_wrde_dooffs = WRDE_DOOFFS;174 175unsigned path_max = PATH_MAX;176 177int struct_ttyent_sz = sizeof(struct ttyent);178 179// ioctl arguments180unsigned struct_ifreq_sz = sizeof(struct ifreq);181unsigned struct_termios_sz = sizeof(struct termios);182unsigned struct_winsize_sz = sizeof(struct winsize);183#if SOUND_VERSION >= 0x040000184unsigned struct_copr_buffer_sz = 0;185unsigned struct_copr_debug_buf_sz = 0;186unsigned struct_copr_msg_sz = 0;187#else188unsigned struct_copr_buffer_sz = sizeof(struct copr_buffer);189unsigned struct_copr_debug_buf_sz = sizeof(struct copr_debug_buf);190unsigned struct_copr_msg_sz = sizeof(struct copr_msg);191#endif192unsigned struct_midi_info_sz = sizeof(struct midi_info);193unsigned struct_mtget_sz = sizeof(struct mtget);194unsigned struct_mtop_sz = sizeof(struct mtop);195unsigned struct_sbi_instrument_sz = sizeof(struct sbi_instrument);196unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec);197unsigned struct_synth_info_sz = sizeof(struct synth_info);198unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info);199unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);200unsigned struct_sioc_sg_req_sz = sizeof(struct sioc_sg_req);201unsigned struct_sioc_vif_req_sz = sizeof(struct sioc_vif_req);202unsigned struct_procctl_reaper_status_sz = sizeof(struct __sanitizer_procctl_reaper_status);203unsigned struct_procctl_reaper_pidinfo_sz = sizeof(struct __sanitizer_procctl_reaper_pidinfo);204unsigned struct_procctl_reaper_pids_sz = sizeof(struct __sanitizer_procctl_reaper_pids);205unsigned struct_procctl_reaper_kill_sz = sizeof(struct __sanitizer_procctl_reaper_kill);206const unsigned long __sanitizer_bufsiz = BUFSIZ;207 208const unsigned IOCTL_NOT_PRESENT = 0;209 210unsigned IOCTL_FIOASYNC = FIOASYNC;211unsigned IOCTL_FIOCLEX = FIOCLEX;212unsigned IOCTL_FIOGETOWN = FIOGETOWN;213unsigned IOCTL_FIONBIO = FIONBIO;214unsigned IOCTL_FIONCLEX = FIONCLEX;215unsigned IOCTL_FIOSETOWN = FIOSETOWN;216unsigned IOCTL_SIOCADDMULTI = SIOCADDMULTI;217unsigned IOCTL_SIOCATMARK = SIOCATMARK;218unsigned IOCTL_SIOCDELMULTI = SIOCDELMULTI;219unsigned IOCTL_SIOCGIFADDR = SIOCGIFADDR;220unsigned IOCTL_SIOCGIFBRDADDR = SIOCGIFBRDADDR;221unsigned IOCTL_SIOCGIFCONF = SIOCGIFCONF;222unsigned IOCTL_SIOCGIFDSTADDR = SIOCGIFDSTADDR;223unsigned IOCTL_SIOCGIFFLAGS = SIOCGIFFLAGS;224unsigned IOCTL_SIOCGIFMETRIC = SIOCGIFMETRIC;225unsigned IOCTL_SIOCGIFMTU = SIOCGIFMTU;226unsigned IOCTL_SIOCGIFNETMASK = SIOCGIFNETMASK;227unsigned IOCTL_SIOCGPGRP = SIOCGPGRP;228unsigned IOCTL_SIOCSIFADDR = SIOCSIFADDR;229unsigned IOCTL_SIOCSIFBRDADDR = SIOCSIFBRDADDR;230unsigned IOCTL_SIOCSIFDSTADDR = SIOCSIFDSTADDR;231unsigned IOCTL_SIOCSIFFLAGS = SIOCSIFFLAGS;232unsigned IOCTL_SIOCSIFMETRIC = SIOCSIFMETRIC;233unsigned IOCTL_SIOCSIFMTU = SIOCSIFMTU;234unsigned IOCTL_SIOCSIFNETMASK = SIOCSIFNETMASK;235unsigned IOCTL_SIOCSPGRP = SIOCSPGRP;236unsigned IOCTL_TIOCCONS = TIOCCONS;237unsigned IOCTL_TIOCEXCL = TIOCEXCL;238unsigned IOCTL_TIOCGETD = TIOCGETD;239unsigned IOCTL_TIOCGPGRP = TIOCGPGRP;240unsigned IOCTL_TIOCGWINSZ = TIOCGWINSZ;241unsigned IOCTL_TIOCMBIC = TIOCMBIC;242unsigned IOCTL_TIOCMBIS = TIOCMBIS;243unsigned IOCTL_TIOCMGET = TIOCMGET;244unsigned IOCTL_TIOCMSET = TIOCMSET;245unsigned IOCTL_TIOCNOTTY = TIOCNOTTY;246unsigned IOCTL_TIOCNXCL = TIOCNXCL;247unsigned IOCTL_TIOCOUTQ = TIOCOUTQ;248unsigned IOCTL_TIOCPKT = TIOCPKT;249unsigned IOCTL_TIOCSCTTY = TIOCSCTTY;250unsigned IOCTL_TIOCSETD = TIOCSETD;251unsigned IOCTL_TIOCSPGRP = TIOCSPGRP;252unsigned IOCTL_TIOCSTI = TIOCSTI;253unsigned IOCTL_TIOCSWINSZ = TIOCSWINSZ;254unsigned IOCTL_SIOCGETSGCNT = SIOCGETSGCNT;255unsigned IOCTL_SIOCGETVIFCNT = SIOCGETVIFCNT;256unsigned IOCTL_MTIOCGET = MTIOCGET;257unsigned IOCTL_MTIOCTOP = MTIOCTOP;258unsigned IOCTL_SNDCTL_DSP_GETBLKSIZE = SNDCTL_DSP_GETBLKSIZE;259unsigned IOCTL_SNDCTL_DSP_GETFMTS = SNDCTL_DSP_GETFMTS;260unsigned IOCTL_SNDCTL_DSP_NONBLOCK = SNDCTL_DSP_NONBLOCK;261unsigned IOCTL_SNDCTL_DSP_POST = SNDCTL_DSP_POST;262unsigned IOCTL_SNDCTL_DSP_RESET = SNDCTL_DSP_RESET;263unsigned IOCTL_SNDCTL_DSP_SETFMT = SNDCTL_DSP_SETFMT;264unsigned IOCTL_SNDCTL_DSP_SETFRAGMENT = SNDCTL_DSP_SETFRAGMENT;265unsigned IOCTL_SNDCTL_DSP_SPEED = SNDCTL_DSP_SPEED;266unsigned IOCTL_SNDCTL_DSP_STEREO = SNDCTL_DSP_STEREO;267unsigned IOCTL_SNDCTL_DSP_SUBDIVIDE = SNDCTL_DSP_SUBDIVIDE;268unsigned IOCTL_SNDCTL_DSP_SYNC = SNDCTL_DSP_SYNC;269unsigned IOCTL_SNDCTL_FM_4OP_ENABLE = SNDCTL_FM_4OP_ENABLE;270unsigned IOCTL_SNDCTL_FM_LOAD_INSTR = SNDCTL_FM_LOAD_INSTR;271unsigned IOCTL_SNDCTL_MIDI_INFO = SNDCTL_MIDI_INFO;272unsigned IOCTL_SNDCTL_MIDI_PRETIME = SNDCTL_MIDI_PRETIME;273unsigned IOCTL_SNDCTL_SEQ_CTRLRATE = SNDCTL_SEQ_CTRLRATE;274unsigned IOCTL_SNDCTL_SEQ_GETINCOUNT = SNDCTL_SEQ_GETINCOUNT;275unsigned IOCTL_SNDCTL_SEQ_GETOUTCOUNT = SNDCTL_SEQ_GETOUTCOUNT;276unsigned IOCTL_SNDCTL_SEQ_NRMIDIS = SNDCTL_SEQ_NRMIDIS;277unsigned IOCTL_SNDCTL_SEQ_NRSYNTHS = SNDCTL_SEQ_NRSYNTHS;278unsigned IOCTL_SNDCTL_SEQ_OUTOFBAND = SNDCTL_SEQ_OUTOFBAND;279unsigned IOCTL_SNDCTL_SEQ_PANIC = SNDCTL_SEQ_PANIC;280unsigned IOCTL_SNDCTL_SEQ_PERCMODE = SNDCTL_SEQ_PERCMODE;281unsigned IOCTL_SNDCTL_SEQ_RESET = SNDCTL_SEQ_RESET;282unsigned IOCTL_SNDCTL_SEQ_RESETSAMPLES = SNDCTL_SEQ_RESETSAMPLES;283unsigned IOCTL_SNDCTL_SEQ_SYNC = SNDCTL_SEQ_SYNC;284unsigned IOCTL_SNDCTL_SEQ_TESTMIDI = SNDCTL_SEQ_TESTMIDI;285unsigned IOCTL_SNDCTL_SEQ_THRESHOLD = SNDCTL_SEQ_THRESHOLD;286unsigned IOCTL_SNDCTL_SYNTH_INFO = SNDCTL_SYNTH_INFO;287unsigned IOCTL_SNDCTL_SYNTH_MEMAVL = SNDCTL_SYNTH_MEMAVL;288unsigned IOCTL_SNDCTL_TMR_CONTINUE = SNDCTL_TMR_CONTINUE;289unsigned IOCTL_SNDCTL_TMR_METRONOME = SNDCTL_TMR_METRONOME;290unsigned IOCTL_SNDCTL_TMR_SELECT = SNDCTL_TMR_SELECT;291unsigned IOCTL_SNDCTL_TMR_SOURCE = SNDCTL_TMR_SOURCE;292unsigned IOCTL_SNDCTL_TMR_START = SNDCTL_TMR_START;293unsigned IOCTL_SNDCTL_TMR_STOP = SNDCTL_TMR_STOP;294unsigned IOCTL_SNDCTL_TMR_TEMPO = SNDCTL_TMR_TEMPO;295unsigned IOCTL_SNDCTL_TMR_TIMEBASE = SNDCTL_TMR_TIMEBASE;296unsigned IOCTL_SOUND_MIXER_READ_ALTPCM = SOUND_MIXER_READ_ALTPCM;297unsigned IOCTL_SOUND_MIXER_READ_BASS = SOUND_MIXER_READ_BASS;298unsigned IOCTL_SOUND_MIXER_READ_CAPS = SOUND_MIXER_READ_CAPS;299unsigned IOCTL_SOUND_MIXER_READ_CD = SOUND_MIXER_READ_CD;300unsigned IOCTL_SOUND_MIXER_READ_DEVMASK = SOUND_MIXER_READ_DEVMASK;301unsigned IOCTL_SOUND_MIXER_READ_ENHANCE = SOUND_MIXER_READ_ENHANCE;302unsigned IOCTL_SOUND_MIXER_READ_IGAIN = SOUND_MIXER_READ_IGAIN;303unsigned IOCTL_SOUND_MIXER_READ_IMIX = SOUND_MIXER_READ_IMIX;304unsigned IOCTL_SOUND_MIXER_READ_LINE = SOUND_MIXER_READ_LINE;305unsigned IOCTL_SOUND_MIXER_READ_LINE1 = SOUND_MIXER_READ_LINE1;306unsigned IOCTL_SOUND_MIXER_READ_LINE2 = SOUND_MIXER_READ_LINE2;307unsigned IOCTL_SOUND_MIXER_READ_LINE3 = SOUND_MIXER_READ_LINE3;308unsigned IOCTL_SOUND_MIXER_READ_LOUD = SOUND_MIXER_READ_LOUD;309unsigned IOCTL_SOUND_MIXER_READ_MIC = SOUND_MIXER_READ_MIC;310unsigned IOCTL_SOUND_MIXER_READ_MUTE = SOUND_MIXER_READ_MUTE;311unsigned IOCTL_SOUND_MIXER_READ_OGAIN = SOUND_MIXER_READ_OGAIN;312unsigned IOCTL_SOUND_MIXER_READ_PCM = SOUND_MIXER_READ_PCM;313unsigned IOCTL_SOUND_MIXER_READ_RECLEV = SOUND_MIXER_READ_RECLEV;314unsigned IOCTL_SOUND_MIXER_READ_RECMASK = SOUND_MIXER_READ_RECMASK;315unsigned IOCTL_SOUND_MIXER_READ_RECSRC = SOUND_MIXER_READ_RECSRC;316unsigned IOCTL_SOUND_MIXER_READ_SPEAKER = SOUND_MIXER_READ_SPEAKER;317unsigned IOCTL_SOUND_MIXER_READ_STEREODEVS = SOUND_MIXER_READ_STEREODEVS;318unsigned IOCTL_SOUND_MIXER_READ_SYNTH = SOUND_MIXER_READ_SYNTH;319unsigned IOCTL_SOUND_MIXER_READ_TREBLE = SOUND_MIXER_READ_TREBLE;320unsigned IOCTL_SOUND_MIXER_READ_VOLUME = SOUND_MIXER_READ_VOLUME;321unsigned IOCTL_SOUND_MIXER_WRITE_ALTPCM = SOUND_MIXER_WRITE_ALTPCM;322unsigned IOCTL_SOUND_MIXER_WRITE_BASS = SOUND_MIXER_WRITE_BASS;323unsigned IOCTL_SOUND_MIXER_WRITE_CD = SOUND_MIXER_WRITE_CD;324unsigned IOCTL_SOUND_MIXER_WRITE_ENHANCE = SOUND_MIXER_WRITE_ENHANCE;325unsigned IOCTL_SOUND_MIXER_WRITE_IGAIN = SOUND_MIXER_WRITE_IGAIN;326unsigned IOCTL_SOUND_MIXER_WRITE_IMIX = SOUND_MIXER_WRITE_IMIX;327unsigned IOCTL_SOUND_MIXER_WRITE_LINE = SOUND_MIXER_WRITE_LINE;328unsigned IOCTL_SOUND_MIXER_WRITE_LINE1 = SOUND_MIXER_WRITE_LINE1;329unsigned IOCTL_SOUND_MIXER_WRITE_LINE2 = SOUND_MIXER_WRITE_LINE2;330unsigned IOCTL_SOUND_MIXER_WRITE_LINE3 = SOUND_MIXER_WRITE_LINE3;331unsigned IOCTL_SOUND_MIXER_WRITE_LOUD = SOUND_MIXER_WRITE_LOUD;332unsigned IOCTL_SOUND_MIXER_WRITE_MIC = SOUND_MIXER_WRITE_MIC;333unsigned IOCTL_SOUND_MIXER_WRITE_MUTE = SOUND_MIXER_WRITE_MUTE;334unsigned IOCTL_SOUND_MIXER_WRITE_OGAIN = SOUND_MIXER_WRITE_OGAIN;335unsigned IOCTL_SOUND_MIXER_WRITE_PCM = SOUND_MIXER_WRITE_PCM;336unsigned IOCTL_SOUND_MIXER_WRITE_RECLEV = SOUND_MIXER_WRITE_RECLEV;337unsigned IOCTL_SOUND_MIXER_WRITE_RECSRC = SOUND_MIXER_WRITE_RECSRC;338unsigned IOCTL_SOUND_MIXER_WRITE_SPEAKER = SOUND_MIXER_WRITE_SPEAKER;339unsigned IOCTL_SOUND_MIXER_WRITE_SYNTH = SOUND_MIXER_WRITE_SYNTH;340unsigned IOCTL_SOUND_MIXER_WRITE_TREBLE = SOUND_MIXER_WRITE_TREBLE;341unsigned IOCTL_SOUND_MIXER_WRITE_VOLUME = SOUND_MIXER_WRITE_VOLUME;342unsigned IOCTL_VT_ACTIVATE = VT_ACTIVATE;343unsigned IOCTL_VT_GETMODE = VT_GETMODE;344unsigned IOCTL_VT_OPENQRY = VT_OPENQRY;345unsigned IOCTL_VT_RELDISP = VT_RELDISP;346unsigned IOCTL_VT_SETMODE = VT_SETMODE;347unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;348unsigned IOCTL_GIO_SCRNMAP = GIO_SCRNMAP;349unsigned IOCTL_KDDISABIO = KDDISABIO;350unsigned IOCTL_KDENABIO = KDENABIO;351unsigned IOCTL_KDGETLED = KDGETLED;352unsigned IOCTL_KDGETMODE = KDGETMODE;353unsigned IOCTL_KDGKBMODE = KDGKBMODE;354unsigned IOCTL_KDGKBTYPE = KDGKBTYPE;355unsigned IOCTL_KDMKTONE = KDMKTONE;356unsigned IOCTL_KDSETLED = KDSETLED;357unsigned IOCTL_KDSETMODE = KDSETMODE;358unsigned IOCTL_KDSKBMODE = KDSKBMODE;359unsigned IOCTL_KIOCSOUND = KIOCSOUND;360unsigned IOCTL_PIO_SCRNMAP = PIO_SCRNMAP;361unsigned IOCTL_SNDCTL_DSP_GETISPACE = SNDCTL_DSP_GETISPACE;362 363const int si_SEGV_MAPERR = SEGV_MAPERR;364const int si_SEGV_ACCERR = SEGV_ACCERR;365const int unvis_valid = UNVIS_VALID;366const int unvis_validpush = UNVIS_VALIDPUSH;367}  // namespace __sanitizer368 369using namespace __sanitizer;370 371COMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t) >= sizeof(pthread_attr_t));372 373COMPILER_CHECK(sizeof(socklen_t) == sizeof(unsigned));374CHECK_TYPE_SIZE(pthread_key_t);375 376// There are more undocumented fields in dl_phdr_info that we are not interested377// in.378COMPILER_CHECK(sizeof(__sanitizer_dl_phdr_info) <= sizeof(dl_phdr_info));379CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_addr);380CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_name);381CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);382CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);383 384CHECK_TYPE_SIZE(glob_t);385CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);386CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);387CHECK_SIZE_AND_OFFSET(glob_t, gl_offs);388CHECK_SIZE_AND_OFFSET(glob_t, gl_flags);389CHECK_SIZE_AND_OFFSET(glob_t, gl_closedir);390CHECK_SIZE_AND_OFFSET(glob_t, gl_readdir);391CHECK_SIZE_AND_OFFSET(glob_t, gl_opendir);392CHECK_SIZE_AND_OFFSET(glob_t, gl_lstat);393CHECK_SIZE_AND_OFFSET(glob_t, gl_stat);394 395CHECK_TYPE_SIZE(addrinfo);396CHECK_SIZE_AND_OFFSET(addrinfo, ai_flags);397CHECK_SIZE_AND_OFFSET(addrinfo, ai_family);398CHECK_SIZE_AND_OFFSET(addrinfo, ai_socktype);399CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);400CHECK_SIZE_AND_OFFSET(addrinfo, ai_protocol);401CHECK_SIZE_AND_OFFSET(addrinfo, ai_addrlen);402CHECK_SIZE_AND_OFFSET(addrinfo, ai_canonname);403CHECK_SIZE_AND_OFFSET(addrinfo, ai_addr);404 405CHECK_TYPE_SIZE(hostent);406CHECK_SIZE_AND_OFFSET(hostent, h_name);407CHECK_SIZE_AND_OFFSET(hostent, h_aliases);408CHECK_SIZE_AND_OFFSET(hostent, h_addrtype);409CHECK_SIZE_AND_OFFSET(hostent, h_length);410CHECK_SIZE_AND_OFFSET(hostent, h_addr_list);411 412CHECK_TYPE_SIZE(iovec);413CHECK_SIZE_AND_OFFSET(iovec, iov_base);414CHECK_SIZE_AND_OFFSET(iovec, iov_len);415 416CHECK_TYPE_SIZE(msghdr);417CHECK_SIZE_AND_OFFSET(msghdr, msg_name);418CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen);419CHECK_SIZE_AND_OFFSET(msghdr, msg_iov);420CHECK_SIZE_AND_OFFSET(msghdr, msg_iovlen);421CHECK_SIZE_AND_OFFSET(msghdr, msg_control);422CHECK_SIZE_AND_OFFSET(msghdr, msg_controllen);423CHECK_SIZE_AND_OFFSET(msghdr, msg_flags);424 425CHECK_TYPE_SIZE(cmsghdr);426CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);427CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);428CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);429 430COMPILER_CHECK(sizeof(__sanitizer_dirent) <= sizeof(dirent));431CHECK_SIZE_AND_OFFSET(dirent, d_ino);432CHECK_SIZE_AND_OFFSET(dirent, d_reclen);433 434CHECK_TYPE_SIZE(ifconf);435CHECK_SIZE_AND_OFFSET(ifconf, ifc_len);436CHECK_SIZE_AND_OFFSET(ifconf, ifc_ifcu);437 438CHECK_TYPE_SIZE(pollfd);439CHECK_SIZE_AND_OFFSET(pollfd, fd);440CHECK_SIZE_AND_OFFSET(pollfd, events);441CHECK_SIZE_AND_OFFSET(pollfd, revents);442 443CHECK_TYPE_SIZE(nfds_t);444 445CHECK_TYPE_SIZE(sigset_t);446 447COMPILER_CHECK(sizeof(__sanitizer_sigaction) == sizeof(struct sigaction));448COMPILER_CHECK(sizeof(__sanitizer_siginfo) == sizeof(siginfo_t));449CHECK_SIZE_AND_OFFSET(siginfo_t, si_value);450// Can't write checks for sa_handler and sa_sigaction due to them being451// preprocessor macros.452CHECK_STRUCT_SIZE_AND_OFFSET(sigaction, sa_mask);453 454CHECK_TYPE_SIZE(wordexp_t);455CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordc);456CHECK_SIZE_AND_OFFSET(wordexp_t, we_wordv);457CHECK_SIZE_AND_OFFSET(wordexp_t, we_offs);458 459CHECK_TYPE_SIZE(tm);460CHECK_SIZE_AND_OFFSET(tm, tm_sec);461CHECK_SIZE_AND_OFFSET(tm, tm_min);462CHECK_SIZE_AND_OFFSET(tm, tm_hour);463CHECK_SIZE_AND_OFFSET(tm, tm_mday);464CHECK_SIZE_AND_OFFSET(tm, tm_mon);465CHECK_SIZE_AND_OFFSET(tm, tm_year);466CHECK_SIZE_AND_OFFSET(tm, tm_wday);467CHECK_SIZE_AND_OFFSET(tm, tm_yday);468CHECK_SIZE_AND_OFFSET(tm, tm_isdst);469CHECK_SIZE_AND_OFFSET(tm, tm_gmtoff);470CHECK_SIZE_AND_OFFSET(tm, tm_zone);471 472CHECK_TYPE_SIZE(ether_addr);473 474CHECK_TYPE_SIZE(ipc_perm);475CHECK_SIZE_AND_OFFSET(ipc_perm, key);476CHECK_SIZE_AND_OFFSET(ipc_perm, seq);477CHECK_SIZE_AND_OFFSET(ipc_perm, uid);478CHECK_SIZE_AND_OFFSET(ipc_perm, gid);479CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);480CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);481 482CHECK_TYPE_SIZE(shmid_ds);483CHECK_SIZE_AND_OFFSET(shmid_ds, shm_perm);484CHECK_SIZE_AND_OFFSET(shmid_ds, shm_segsz);485CHECK_SIZE_AND_OFFSET(shmid_ds, shm_atime);486CHECK_SIZE_AND_OFFSET(shmid_ds, shm_dtime);487CHECK_SIZE_AND_OFFSET(shmid_ds, shm_ctime);488CHECK_SIZE_AND_OFFSET(shmid_ds, shm_cpid);489CHECK_SIZE_AND_OFFSET(shmid_ds, shm_lpid);490CHECK_SIZE_AND_OFFSET(shmid_ds, shm_nattch);491 492CHECK_TYPE_SIZE(clock_t);493 494CHECK_TYPE_SIZE(ifaddrs);495CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_next);496CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_name);497CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_addr);498CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_netmask);499#undef ifa_dstaddr500CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);501CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);502 503CHECK_TYPE_SIZE(timeb);504CHECK_SIZE_AND_OFFSET(timeb, time);505CHECK_SIZE_AND_OFFSET(timeb, millitm);506CHECK_SIZE_AND_OFFSET(timeb, timezone);507CHECK_SIZE_AND_OFFSET(timeb, dstflag);508 509CHECK_TYPE_SIZE(passwd);510CHECK_SIZE_AND_OFFSET(passwd, pw_name);511CHECK_SIZE_AND_OFFSET(passwd, pw_passwd);512CHECK_SIZE_AND_OFFSET(passwd, pw_uid);513CHECK_SIZE_AND_OFFSET(passwd, pw_gid);514CHECK_SIZE_AND_OFFSET(passwd, pw_dir);515CHECK_SIZE_AND_OFFSET(passwd, pw_shell);516 517CHECK_SIZE_AND_OFFSET(passwd, pw_gecos);518 519CHECK_TYPE_SIZE(group);520CHECK_SIZE_AND_OFFSET(group, gr_name);521CHECK_SIZE_AND_OFFSET(group, gr_passwd);522CHECK_SIZE_AND_OFFSET(group, gr_gid);523CHECK_SIZE_AND_OFFSET(group, gr_mem);524 525#if HAVE_RPC_XDR_H526CHECK_TYPE_SIZE(XDR);527CHECK_SIZE_AND_OFFSET(XDR, x_op);528CHECK_SIZE_AND_OFFSET(XDR, x_ops);529CHECK_SIZE_AND_OFFSET(XDR, x_public);530CHECK_SIZE_AND_OFFSET(XDR, x_private);531CHECK_SIZE_AND_OFFSET(XDR, x_base);532CHECK_SIZE_AND_OFFSET(XDR, x_handy);533COMPILER_CHECK(__sanitizer_XDR_ENCODE == XDR_ENCODE);534COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE);535COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE);536#endif537 538CHECK_TYPE_SIZE(sem_t);539 540COMPILER_CHECK(sizeof(__sanitizer_cap_rights_t) >= sizeof(cap_rights_t));541COMPILER_CHECK(sizeof(__sanitizer_cpuset_t) >= sizeof(cpuset_t));542#endif  // SANITIZER_FREEBSD543