docheck.c:
#include "config.h"
int main(int argc, char **argv) {

return 0; }
gcc -o docheck docheck.c

docheck.c:
#include "config.h"
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <time.h>
int main(int argc, char **argv) {

  char x[sizeof(time_t) > 4 ? 1 : -1] = {0};
  return x[0];
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <math.h>
int main(int argc, char **argv) {
return (int) pow(2.0, log(sqrt((double)argc)));
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now
/tmp/ccDkvCtP.o: In function `main':
/google/src/cloud/ctalbott/chrony/google3/third_party/chrony/chrony-3.3/docheck.c:4: undefined reference to `log'
/google/src/cloud/ctalbott/chrony/google3/third_party/chrony/chrony-3.3/docheck.c:4: undefined reference to `pow'
/google/src/cloud/ctalbott/chrony/google3/third_party/chrony/chrony-3.3/docheck.c:4: undefined reference to `sqrt'
collect2: error: ld returned 1 exit status

docheck.c:
#include "config.h"
#include <math.h>
int main(int argc, char **argv) {
return (int) pow(2.0, log(sqrt((double)argc)));
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -lm -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <stdint.h>
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <inttypes.h>
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv) {

  struct in_pktinfo ipi;
  return sizeof (ipi.ipi_spec_dst.s_addr) + IP_PKTINFO;
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv) {

    struct sockaddr_in6 n;
    char p[100];
    n.sin6_addr = in6addr_any;
    return !inet_ntop(AF_INET6, &n.sin6_addr.s6_addr, p, sizeof(p));
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv) {

    return sizeof (struct in6_pktinfo) + IPV6_PKTINFO;
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c: In function 'main':
docheck.c:6:20: error: invalid application of 'sizeof' to incomplete type 'struct in6_pktinfo'
     return sizeof (struct in6_pktinfo) + IPV6_PKTINFO;
                    ^~~~~~

docheck.c:
#include "config.h"
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char **argv) {
return sizeof (struct in6_pktinfo) + IPV6_PKTINFO;
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -D_GNU_SOURCE -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <time.h>
int main(int argc, char **argv) {
clock_gettime(CLOCK_REALTIME, NULL);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int main(int argc, char **argv) {
return getaddrinfo(0, 0, 0, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <pthread.h>
int main(int argc, char **argv) {
return pthread_create((void *)1, NULL, (void *)1, NULL);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <stdlib.h>
int main(int argc, char **argv) {
arc4random_buf(NULL, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c: In function 'main':
docheck.c:4:1: warning: implicit declaration of function 'arc4random_buf'; did you mean 'srandom_r'? [-Wimplicit-function-declaration]
 arc4random_buf(NULL, 0);
 ^~~~~~~~~~~~~~
 srandom_r
/tmp/ccgWPyl2.o: In function `main':
/google/src/cloud/ctalbott/chrony/google3/third_party/chrony/chrony-3.3/docheck.c:4: undefined reference to `arc4random_buf'
collect2: error: ld returned 1 exit status

docheck.c:
#include "config.h"
#include <stdlib.h>
#include <sys/random.h>
int main(int argc, char **argv) {
return getrandom(NULL, 256, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c:3:10: fatal error: sys/random.h: No such file or directory
 #include <sys/random.h>
          ^~~~~~~~~~~~~~
compilation terminated.

docheck.c:
#include "config.h"
#include <sys/socket.h>
int main(int argc, char **argv) {

  struct mmsghdr hdr;
  return !recvmmsg(0, &hdr, 1, MSG_DONTWAIT, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/net_tstamp.h>
#include <linux/errqueue.h>
#include <linux/ptp_clock.h>
int main(int argc, char **argv) {

    int val = SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_RX_SOFTWARE |
              SOF_TIMESTAMPING_RAW_HARDWARE | SOF_TIMESTAMPING_OPT_CMSG;
    return sizeof (struct scm_timestamping) + SCM_TSTAMP_SND + PTP_SYS_OFFSET +
           setsockopt(0, SOL_SOCKET, SO_SELECT_ERR_QUEUE + SO_TIMESTAMPING,
                      &val, sizeof (val));
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/net_tstamp.h>
int main(int argc, char **argv) {

    struct scm_ts_pktinfo pktinfo;
    pktinfo.if_index = pktinfo.pkt_length = 0;
    return pktinfo.if_index + pktinfo.pkt_length + HWTSTAMP_FILTER_NTP_ALL +
           SCM_TIMESTAMPING_PKTINFO +
           SOF_TIMESTAMPING_OPT_PKTINFO + SOF_TIMESTAMPING_OPT_TX_SWHW;
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/timepps.h>
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c:2:10: fatal error: sys/timepps.h: No such file or directory
 #include <sys/timepps.h>
          ^~~~~~~~~~~~~~~
compilation terminated.

docheck.c:
#include "config.h"
#include <timepps.h>
int main(int argc, char **argv) {

return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c:2:10: fatal error: timepps.h: No such file or directory
 #include <timepps.h>
          ^~~~~~~~~~~
compilation terminated.

docheck.c:
#include "config.h"
#include <sys/ioctl.h>
#include <linux/rtc.h>
int main(int argc, char **argv) {
ioctl(1, RTC_UIE_ON&RTC_UIE_OFF&RTC_RD_TIME&RTC_SET_TIME, 0&RTC_UF);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/ioctl.h>
#include <linux/ptp_clock.h>
int main(int argc, char **argv) {
ioctl(1, PTP_CLOCK_GETCAPS + PTP_SYS_OFFSET, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sched.h>
int main(int argc, char **argv) {

     struct sched_param sched;
     sched_get_priority_max(SCHED_FIFO);
     sched_setscheduler(0, SCHED_FIFO, &sched);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <sys/mman.h>
#include <sys/resource.h>
int main(int argc, char **argv) {

     struct rlimit rlim;
     setrlimit(RLIMIT_MEMLOCK, &rlim);
     mlockall(MCL_CURRENT|MCL_FUTURE);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now

docheck.c:
#include "config.h"
#include <nettle/nettle-meta.h>
#include <nettle/sha2.h>
int main(int argc, char **argv) {
return nettle_hashes[0]->context_size;
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -o docheck docheck.c -pie -Wl,-z,relro,-z,now
docheck.c:2:10: fatal error: nettle/nettle-meta.h: No such file or directory
 #include <nettle/nettle-meta.h>
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

docheck.c:
#include "config.h"
#include <tomcrypt.h>
int main(int argc, char **argv) {
hash_memory_multi(find_hash("md5"), NULL, NULL, NULL, 0, NULL, 0);
return 0; }
gcc -O2 -g -D_FORTIFY_SOURCE=2 -fPIE -fstack-protector-strong --param=ssp-buffer-size=4 -Wmissing-prototypes -Wall -pthread -I/usr/include/tomcrypt -o docheck docheck.c -ltomcrypt -pie -Wl,-z,relro,-z,now
docheck.c:2:10: fatal error: tomcrypt.h: No such file or directory
 #include <tomcrypt.h>
          ^~~~~~~~~~~~
compilation terminated.

