From 92c37668f0f62c6bca4910d603599a2a21607b6d Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Wed, 21 Feb 2024 16:50:47 -0800 Subject: [PATCH 1/7] build: don't link to optional_mutex if it doesn't exist --- Makefile.inc | 15 +++++++++++++-- release-tools/metabuild.sh | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Makefile.inc b/Makefile.inc index 2ae1b810..e5390ced 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -14,11 +14,22 @@ IDIRS := ${IDIRS} # Default is no man pages MAN = +# The SUBDIR_DEPTH variable (defined above) initializes tracking the +# subdirectory depth, but it's not fully set at this stage in the build +# process. Instead, we jump back to the shell and print the (finalized) value +# of SUBDIR_DEPTH. This avoids an infinite loop because we query the Makefile +# (which does not include ../Makefile.inc), rather than Makefile.BSD (which +# would end up including this file again). +FINALIZED_SUBDIR_DEPTH != ${MAKE} -v SUBDIR_DEPTH + .if !defined(NOLIBALL) # Link everything to liball.a, unless they specifically ask not to use it. -# If appropriate, metabuild.sh will do: +LIBALL = ${SUBDIR_DEPTH}/liball/liball.a +.if exists(${FINALIZED_SUBDIR_DEPTH}/liball/optional_mutex_normal) +# If we have optional_mutex, add it. If appropriate, metabuild.sh will do: # s/optional_mutex_normal/optional_mutex_pthread/g -LIBALL = ${SUBDIR_DEPTH}/liball/liball.a ${SUBDIR_DEPTH}/liball/optional_mutex_normal/liball_optional_mutex_normal.a +LIBALL += ${SUBDIR_DEPTH}/liball/optional_mutex_normal/liball_optional_mutex_normal.a +.endif LDADD += ${LIBALL} DPADD += ${LIBALL} .endif diff --git a/release-tools/metabuild.sh b/release-tools/metabuild.sh index 9d1a8050..2ba18f64 100755 --- a/release-tools/metabuild.sh +++ b/release-tools/metabuild.sh @@ -176,6 +176,9 @@ printf "RELATIVE_DIR=%s\n" "${D}" >> "${OUT}" if [ -n "$(${MAKEBSD} -v LIB)" ]; then cat "${SUBDIR_DEPTH}/release-tools/Makefile.lib" >> "${OUT}" elif [ -n "$(${MAKEBSD} -v SRCS)" ]; then + # This *must* come after SUBDIR_DEPTH has been copied into + # the Makefile, because it depends on being able to run: + # make -v SUBDIR_DEPTH copyvar_LIBALL_optional_mutex add_makefile_prog else From 0443440d7bedd20d2c5df9363eb04bcb38e73193 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Mon, 10 Jun 2024 09:32:15 -0700 Subject: [PATCH 2/7] comments: fix API arg descriptions SHA256_arm: W and S should have been removed in: 2021-02-19 sha256: don't pass W and S to SHA256_Transform_arm 05ebafdd870e30e49e5715331414ebcd9e3a1233 SHA256_sse2: W and S should have been included in: 2021-02-06 sha256_sse2: add 192d05beba9502601496102ee89258afc534387d util/entropy.h: ${er} should not have been included in: 2020-09-22 entropy: expose _init(), _fill(), _done() ceaae6784dbc836ca2a789765510ed60c25cd555 --- libcperciva/alg/sha256_arm.c | 5 ++--- libcperciva/alg/sha256_arm.h | 5 ++--- libcperciva/alg/sha256_sse2.c | 2 +- libcperciva/alg/sha256_sse2.h | 2 +- libcperciva/util/entropy.h | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/libcperciva/alg/sha256_arm.c b/libcperciva/alg/sha256_arm.c index e3e5f6b1..96223f4d 100644 --- a/libcperciva/alg/sha256_arm.c +++ b/libcperciva/alg/sha256_arm.c @@ -49,12 +49,11 @@ static const uint32_t Krnd[64] = { X0 = vsha256su1q_u32(vsha256su0q_u32(X0, X1), X2, X3) /** - * SHA256_Transform_arm(state, block, W, S): + * SHA256_Transform_arm(state, block): * Compute the SHA256 block compression function, transforming ${state} using * the data in ${block}. This implementation uses ARM SHA256 instructions, * and should only be used if _SHA256 is defined and cpusupport_arm_sha256() - * returns nonzero. The arrays W and S may be filled with sensitive data, and - * should be cleared by the callee. + * returns nonzero. */ #ifdef POSIXFAIL_ABSTRACT_DECLARATOR void diff --git a/libcperciva/alg/sha256_arm.h b/libcperciva/alg/sha256_arm.h index 4c39b6cf..d9ed3fab 100644 --- a/libcperciva/alg/sha256_arm.h +++ b/libcperciva/alg/sha256_arm.h @@ -4,12 +4,11 @@ #include /** - * SHA256_Transform_arm(state, block, W, S): + * SHA256_Transform_arm(state, block): * Compute the SHA256 block compression function, transforming ${state} using * the data in ${block}. This implementation uses ARM SHA256 instructions, * and should only be used if _SHA256 is defined and cpusupport_arm_sha256() - * returns nonzero. The arrays W and S may be filled with sensitive data, and - * should be cleared by the callee. + * returns nonzero. */ #ifdef POSIXFAIL_ABSTRACT_DECLARATOR void SHA256_Transform_arm(uint32_t state[8], const uint8_t block[64]); diff --git a/libcperciva/alg/sha256_sse2.c b/libcperciva/alg/sha256_sse2.c index 35b58d2f..d2575534 100644 --- a/libcperciva/alg/sha256_sse2.c +++ b/libcperciva/alg/sha256_sse2.c @@ -167,7 +167,7 @@ MSG4(__m128i X0, __m128i X1, __m128i X2, __m128i X3) } /** - * SHA256_Transform_sse2(state, block): + * SHA256_Transform_sse2(state, block, W, S): * Compute the SHA256 block compression function, transforming ${state} using * the data in ${block}. This implementation uses x86 SSE2 instructions, and * should only be used if _SSE2 is defined and cpusupport_x86_sse2() returns diff --git a/libcperciva/alg/sha256_sse2.h b/libcperciva/alg/sha256_sse2.h index 4035d388..16704cec 100644 --- a/libcperciva/alg/sha256_sse2.h +++ b/libcperciva/alg/sha256_sse2.h @@ -4,7 +4,7 @@ #include /** - * SHA256_Transform_sse2(state, block): + * SHA256_Transform_sse2(state, block, W, S): * Compute the SHA256 block compression function, transforming ${state} using * the data in ${block}. This implementation uses x86 SSE2 instructions, and * should only be used if _SSE2 is defined and cpusupport_x86_sse2() returns diff --git a/libcperciva/util/entropy.h b/libcperciva/util/entropy.h index ffe67cfe..abadfa94 100644 --- a/libcperciva/util/entropy.h +++ b/libcperciva/util/entropy.h @@ -25,7 +25,7 @@ int entropy_read_fill(struct entropy_read_cookie *, uint8_t *, size_t); * entropy_read_done(er): * Release any resources used by ${er}. */ -int entropy_read_done(struct entropy_read_cookie * er); +int entropy_read_done(struct entropy_read_cookie *); /** * entropy_read(buf, buflen): From 073566369107cf8a6af6b950b1da564413b8d171 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Wed, 26 Jun 2024 17:55:18 -0700 Subject: [PATCH 3/7] Portability fix for printing pid We cannot rely on "%d" to print the pid correctly; POSIX specifies that: pid_t... shall be signed integer types. https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html That page also says: The implementation shall support one or more programming environments in which the widths of ... pid_t, ... are no greater than the width of type long. but if we were to rely on that, we'd need to check that we were in the relevant programming environment. Easier just to use "%jd". --- libcperciva/util/daemonize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libcperciva/util/daemonize.c b/libcperciva/util/daemonize.c index a9dd5767..2bb508f1 100644 --- a/libcperciva/util/daemonize.c +++ b/libcperciva/util/daemonize.c @@ -1,4 +1,5 @@ #include +#include #include #include @@ -53,7 +54,7 @@ writepid(const char * spid) warnp("fopen(%s)", spid); goto err0; } - if (fprintf(f, "%d", getpid()) < 0) { + if (fprintf(f, "%jd", (intmax_t)getpid()) < 0) { warnp("fprintf"); goto err1; } From 242c4a1c924e37a53f8919a7efc66a438f336244 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Thu, 27 Jun 2024 15:08:58 -0700 Subject: [PATCH 4/7] Update to latest apisupport code --- libcperciva/apisupport/Build/apisupport-LIBSSL-HOST_NAME.c | 2 ++ libcperciva/apisupport/Build/apisupport.sh | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libcperciva/apisupport/Build/apisupport-LIBSSL-HOST_NAME.c b/libcperciva/apisupport/Build/apisupport-LIBSSL-HOST_NAME.c index 597ba96a..6768a2bc 100644 --- a/libcperciva/apisupport/Build/apisupport-LIBSSL-HOST_NAME.c +++ b/libcperciva/apisupport/Build/apisupport-LIBSSL-HOST_NAME.c @@ -1,3 +1,5 @@ +#include + #include int diff --git a/libcperciva/apisupport/Build/apisupport.sh b/libcperciva/apisupport/Build/apisupport.sh index 37b3a342..4b11c6a0 100755 --- a/libcperciva/apisupport/Build/apisupport.sh +++ b/libcperciva/apisupport/Build/apisupport.sh @@ -75,6 +75,8 @@ feature NONPOSIX SETGROUPS "" "" \ "-U_POSIX_C_SOURCE -U_XOPEN_SOURCE" \ "-U_POSIX_C_SOURCE -U_XOPEN_SOURCE -Wno-reserved-id-macro" -# Detect how to compile libssl code. +# Detect how to compile libssl and libcrypto code. feature LIBSSL HOST_NAME "-lssl" "" \ "-Wno-cast-qual" +feature LIBCRYPTO LOW_LEVEL_AES "-lcrypto" "" \ + "-Wno-deprecated-declarations" From 7edd0766af0f090e64973f4624e7e2cdfe05a918 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Tue, 23 Jul 2024 16:24:24 -0700 Subject: [PATCH 5/7] Add ipc_sync.{c,h} --- liball/Makefile.BSD | 1 + libcperciva/util/ipc_sync.c | 238 ++++++++++++++++++++++++++++++++++++ libcperciva/util/ipc_sync.h | 59 +++++++++ 3 files changed, 298 insertions(+) create mode 100644 libcperciva/util/ipc_sync.c create mode 100644 libcperciva/util/ipc_sync.h diff --git a/liball/Makefile.BSD b/liball/Makefile.BSD index fbb2c15b..aaf0703c 100644 --- a/liball/Makefile.BSD +++ b/liball/Makefile.BSD @@ -89,6 +89,7 @@ SRCS += getopt.c SRCS += hexify.c SRCS += humansize.c SRCS += insecure_memzero.c +SRCS += ipc_sync.c SRCS += json.c SRCS += monoclock.c SRCS += noeintr.c diff --git a/libcperciva/util/ipc_sync.c b/libcperciva/util/ipc_sync.c new file mode 100644 index 00000000..b04a7c82 --- /dev/null +++ b/libcperciva/util/ipc_sync.c @@ -0,0 +1,238 @@ +#include +#include +#include + +#include "noeintr.h" +#include "warnp.h" + +#include "ipc_sync.h" + +/* Convention for read/write ends of a pipe. */ +#define R 0 +#define W 1 + +struct ipc_sync { + int fd[2]; +}; + +/* Read and discard one byte from ${fd}, looping upon EINTR. */ +static inline int +readbyte(int fd) +{ + char dummy; + char done = 0; + + /* Loop until done. */ + do { + switch (read(fd, &dummy, 1)) { + case -1: + /* Anything other than EINTR is bad. */ + if (errno != EINTR) { + warnp("read"); + goto err0; + } + + /* Otherwise, loop and read again. */ + break; + case 0: + warn0("Unexpected EOF in pipe"); + goto err0; + case 1: + /* Expected value; quit the loop. */ + done = 1; + } + } while (!done); + + /* Success! */ + return (0); + +err0: + /* Failure! */ + return (-1); +} + +/* Write one byte from ${fd}, looping upon EINTR. */ +static inline int +writebyte(int fd) +{ + char dummy = 0; + + /* Do the write. */ + if (noeintr_write(fd, &dummy, 1) == -1) { + warnp("write"); + goto err0; + } + + /* Success! */ + return (0); + +err0: + /* Failure! */ + return (-1); +} + +/* close(), but looping upon EINTR. */ +static inline int +ipc_sync_close(int fd) +{ + + /* Loop until closed. */ + while (close(fd)) { + if (errno == EINTR) + continue; + warnp("close"); + goto err0; + } + + /* Success! */ + return (0); + +err0: + /* Failure! */ + return (-1); +} + +/* Close the unneeded read or write end of the pipe. */ +static int +ipc_sync_prep(struct ipc_sync * IS, int num) +{ + + /* Bail if there's nothing to do. */ + if (IS->fd[num] == -1) + return (0); + + /* + * Close the indicated end of pipe so that if the other process dies, + * we will notice the pipe being reset. + */ + if (ipc_sync_close(IS->fd[num])) + goto err0; + IS->fd[num] = -1; + + /* Success! */ + return (0); + +err0: + /* Failure! */ + return (-1); +} + +/** + * ipc_sync_init(void): + * Initialize an inter-process synchronization barrier. This must be called + * before forking. + */ +struct ipc_sync * +ipc_sync_init(void) +{ + struct ipc_sync * IS; + + /* Allocate the cookie. */ + if ((IS = malloc(sizeof(struct ipc_sync))) == NULL) { + warnp("malloc"); + goto err0; + } + + /* Set up synchronization. */ + if (pipe(IS->fd)) { + warnp("pipe"); + goto err1; + } + + /* Success! */ + return (IS); + +err1: + free(IS); +err0: + /* Failure! */ + return (NULL); +} + +/** + * ipc_sync_wait(IS): + * Block until ipc_sync_signal() has been called with ${IS}. + */ +int +ipc_sync_wait(struct ipc_sync * IS) +{ + + /* Ensure that we've closed the write end. */ + if (ipc_sync_prep(IS, W)) + return (-1); + + /* Read and discard a byte from the read end of the pipe. */ + return (readbyte(IS->fd[R])); +} + +/** + * ipc_sync_signal(IS): + * Indicate that ${IS} should no longer block. + */ +int +ipc_sync_signal(struct ipc_sync * IS) +{ + + /* Ensure that we've closed the read end. */ + if (ipc_sync_prep(IS, R)) + return (-1); + + /* Write a byte to the write end of the pipe. */ + return (writebyte(IS->fd[W])); +} + +/** + * ipc_sync_wait_prep(IS): + * Perform any operation(s) that would speed up an upcoming call to + * ipc_sync_wait(). Calling this function is optional. + */ +int +ipc_sync_wait_prep(struct ipc_sync * IS) +{ + + /* Ensure that we've closed the write end. */ + return (ipc_sync_prep(IS, W)); +} + +/** + * ipc_sync_signal_prep(IS): + * Perform any operation(s) that would speed up an upcoming call to + * ipc_sync_signal(). Calling this function is optional. + */ +int +ipc_sync_signal_prep(struct ipc_sync * IS) +{ + + /* Ensure that we've closed the read end. */ + return (ipc_sync_prep(IS, R)); +} + +/** + * ipc_sync_done(IS): + * Free resources associated with ${IS}. + */ +int +ipc_sync_done(struct ipc_sync * IS) +{ + + /* Close any open file descriptors. */ + if ((IS->fd[W] != -1) && ipc_sync_close(IS->fd[W])) + goto err1; + if ((IS->fd[R] != -1) && ipc_sync_close(IS->fd[R])) + goto err2; + + /* Clean up. */ + free(IS); + + /* Success! */ + return (0); + +err2: + if (IS->fd[R] != -1) + ipc_sync_close(IS->fd[R]); +err1: + free(IS); + + /* Failure! */ + return (-1); +} diff --git a/libcperciva/util/ipc_sync.h b/libcperciva/util/ipc_sync.h new file mode 100644 index 00000000..cc5c65b9 --- /dev/null +++ b/libcperciva/util/ipc_sync.h @@ -0,0 +1,59 @@ +#ifndef IPC_SYNC_H_ +#define IPC_SYNC_H_ + +/** + * Normal usage: + * 1) ipc_sync_init() + * 2) fork a new process + * 3) process x: ipc_sync_wait() + * process y: ipc_sync_signal() + * 4) both processes: ipc_sync_done() + * + * If there's a need to make _wait() or _signal() as fast as possible + * (e.g. for a benchmark or a performance bottleneck), call the + * relevant _prep() function before the critical section. + */ + +/* Opaque structure. */ +struct ipc_sync; + +/** + * ipc_sync_init(void): + * Initialize an inter-process synchronization barrier. This must be called + * before forking. + */ +struct ipc_sync * ipc_sync_init(void); + +/** + * ipc_sync_wait(IS): + * Block until ipc_sync_signal() has been called with ${IS}. + */ +int ipc_sync_wait(struct ipc_sync *); + +/** + * ipc_sync_signal(IS): + * Indicate that ${IS} should no longer block. + */ +int ipc_sync_signal(struct ipc_sync *); + +/** + * ipc_sync_wait_prep(IS): + * Perform any operation(s) that would speed up an upcoming call to + * ipc_sync_wait(). Calling this function is optional. + */ +int ipc_sync_wait_prep(struct ipc_sync *); + +/** + * ipc_sync_signal_prep(IS): + * Perform any operation(s) that would speed up an upcoming call to + * ipc_sync_signal(). Calling this function is optional. + */ +int ipc_sync_signal_prep(struct ipc_sync *); + +/** + * ipc_sync_done(IS): + * Free resources associated with ${IS}. + */ +int ipc_sync_done(struct ipc_sync *); + +#endif /* !IPC_SYNC_H_ */ From c28e69f9068ad12416b02c1dd62738e1a79a6b78 Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Tue, 23 Jul 2024 16:24:26 -0700 Subject: [PATCH 6/7] daemonize.c: use ipc_sync --- libcperciva/util/daemonize.c | 100 ++++++----------------------------- 1 file changed, 16 insertions(+), 84 deletions(-) diff --git a/libcperciva/util/daemonize.c b/libcperciva/util/daemonize.c index 2bb508f1..b40ad153 100644 --- a/libcperciva/util/daemonize.c +++ b/libcperciva/util/daemonize.c @@ -1,48 +1,12 @@ -#include #include #include #include -#include "noeintr.h" +#include "ipc_sync.h" #include "warnp.h" #include "daemonize.h" -/* Read and discard one byte from ${fd}, looping upon EINTR. */ -static int -readbyte(int fd) -{ - char dummy; - char done = 0; - - do { - switch (read(fd, &dummy, 1)) { - case -1: - /* Anything other than EINTR is bad. */ - if (errno != EINTR) { - warnp("read"); - goto err0; - } - - /* Otherwise, loop and read again. */ - break; - case 0: - warn0("Unexpected EOF in pipe"); - goto err0; - case 1: - /* Expected value; quit the loop. */ - done = 1; - } - } while (!done); - - /* Success! */ - return (0); - -err0: - /* Failure! */ - return (-1); -} - /* Write the process' pid to a file called ${spid}. */ static int writepid(const char * spid) @@ -84,17 +48,14 @@ writepid(const char * spid) int daemonize(const char * spid) { - int fd[2]; - char dummy = 0; + struct ipc_sync * IS; /* * Create a pipe for the child to notify the parent when it has * finished daemonizing. */ - if (pipe(fd)) { - warnp("pipe"); + if ((IS = ipc_sync_init()) == NULL) goto err0; - } /* * Fork into the parent process (which waits for a poke and exits) @@ -104,35 +65,22 @@ daemonize(const char * spid) case -1: /* Fork failed. */ warnp("fork"); - goto err2; + goto err1; case 0: /* In child process. */ break; default: - /* - * In parent process. Close write end of pipe so that if the - * client dies we will notice the pipe being reset. - */ - while (close(fd[1])) { - if (errno == EINTR) - continue; - warnp("close"); - goto err1; - } - - /* Read and discard a byte from the read end of the pipe. */ - if (readbyte(fd[0])) + /* In parent process; wait for the child to start. */ + if (ipc_sync_wait(IS)) goto err1; /* - * We don't need to read from this any more. The pipe would - * be implicitly closed by the following _exit(), but we're - * explicitly closing it for the benefit of leak checkers. + * Free resources associated with ${IS}. These would be + * released by the following _exit(), but we're explicitly + * releasing them for the benefit of leak checkers. */ - if (close(fd[0])) { - warnp("close"); - goto err0; - } + if (ipc_sync_done(IS)) + goto err1; /* We have been poked by the child. Exit. */ _exit(0); @@ -148,35 +96,19 @@ daemonize(const char * spid) if (writepid(spid)) goto die; - /* Tell the parent to suicide. */ - if (noeintr_write(fd[1], &dummy, 1) == -1) { - warnp("write"); + /* Tell the parent that we've started. */ + if (ipc_sync_signal(IS)) goto die; - } - /* Close the pipe. */ - while (close(fd[0])) { - if (errno == EINTR) - continue; - warnp("close"); + /* Clean up. */ + if (ipc_sync_done(IS)) goto die; - } - while (close(fd[1])) { - if (errno == EINTR) - continue; - warnp("close"); - goto die; - } /* Success! */ return (0); -err2: - if (close(fd[1])) - warnp("close"); err1: - if (close(fd[0])) - warnp("close"); + ipc_sync_done(IS); err0: /* Failure! */ return (-1); From d47ab41d4c9d71b2d1a2df3406989db0a6d4877d Mon Sep 17 00:00:00 2001 From: Graham Percival Date: Fri, 26 Jul 2024 11:10:35 -0700 Subject: [PATCH 7/7] build: run `make Makefiles` --- liball/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/liball/Makefile b/liball/Makefile index 981238b3..aa815b02 100644 --- a/liball/Makefile +++ b/liball/Makefile @@ -1,7 +1,7 @@ .POSIX: # AUTOGENERATED FILE, DO NOT EDIT LIB=liball.a -SRCS=crc32c.c crc32c_arm.c crc32c_sse42.c md5.c sha1.c sha256.c sha256_arm.c sha256_shani.c sha256_sse2.c aws_readkeys.c aws_sign.c cpusupport_arm_crc32_64.c cpusupport_arm_sha256.c cpusupport_x86_shani.c cpusupport_x86_sse2.c cpusupport_x86_sse42.c cpusupport_x86_ssse3.c elasticarray.c elasticqueue.c ptrheap.c seqptrmap.c timerqueue.c events.c events_immediate.c events_network.c events_network_selectstats.c events_timer.c http.c https.c netbuf_read.c netbuf_ssl.c netbuf_write.c network_accept.c network_connect.c network_read.c network_write.c network_ssl.c network_ssl_compat.c asprintf.c b64encode.c daemonize.c entropy.c getopt.c hexify.c humansize.c insecure_memzero.c json.c monoclock.c noeintr.c sock.c sock_util.c warnp.c bench.c mkpair.c doubleheap.c kvldskey.c kvhash.c kvpair.c onlinequantile.c pool.c dynamodb_kv.c dynamodb_request.c dynamodb_request_queue.c logging.c proto_dynamodb_kv_client.c proto_dynamodb_kv_server.c proto_kvlds_client.c proto_kvlds_server.c proto_lbs_client.c proto_lbs_server.c proto_s3_client.c proto_s3_server.c s3_request.c s3_request_queue.c s3_serverpool.c s3_verifyetag.c serverpool.c wire_packet.c wire_readpacket.c wire_requestqueue.c wire_writepacket.c kivaloo.c kvlds.c +SRCS=crc32c.c crc32c_arm.c crc32c_sse42.c md5.c sha1.c sha256.c sha256_arm.c sha256_shani.c sha256_sse2.c aws_readkeys.c aws_sign.c cpusupport_arm_crc32_64.c cpusupport_arm_sha256.c cpusupport_x86_shani.c cpusupport_x86_sse2.c cpusupport_x86_sse42.c cpusupport_x86_ssse3.c elasticarray.c elasticqueue.c ptrheap.c seqptrmap.c timerqueue.c events.c events_immediate.c events_network.c events_network_selectstats.c events_timer.c http.c https.c netbuf_read.c netbuf_ssl.c netbuf_write.c network_accept.c network_connect.c network_read.c network_write.c network_ssl.c network_ssl_compat.c asprintf.c b64encode.c daemonize.c entropy.c getopt.c hexify.c humansize.c insecure_memzero.c ipc_sync.c json.c monoclock.c noeintr.c sock.c sock_util.c warnp.c bench.c mkpair.c doubleheap.c kvldskey.c kvhash.c kvpair.c onlinequantile.c pool.c dynamodb_kv.c dynamodb_request.c dynamodb_request_queue.c logging.c proto_dynamodb_kv_client.c proto_dynamodb_kv_server.c proto_kvlds_client.c proto_kvlds_server.c proto_lbs_client.c proto_lbs_server.c proto_s3_client.c proto_s3_server.c s3_request.c s3_request_queue.c s3_serverpool.c s3_verifyetag.c serverpool.c wire_packet.c wire_readpacket.c wire_requestqueue.c wire_writepacket.c kivaloo.c kvlds.c IDIRS=-I../libcperciva/alg -I../libcperciva/aws -I../libcperciva/cpusupport -I../libcperciva/datastruct -I../libcperciva/events -I ../libcperciva/http -I ../libcperciva/netbuf -I../libcperciva/network -I ../libcperciva/network_ssl -I../libcperciva/util -I../libcperciva/external/queue -I ../lib/bench -I ../lib/datastruct -I ../lib/dynamodb -I ../lib/logging -I ../lib/proto_dynamodb_kv -I ../lib/proto_kvlds -I ../lib/proto_lbs -I ../lib/proto_s3 -I ../lib/s3 -I ../lib/serverpool -I ../lib/wire -I ../lib/util SUBDIR_DEPTH=.. RELATIVE_DIR=liball @@ -101,7 +101,7 @@ asprintf.o: ../libcperciva/util/asprintf.c ../libcperciva/util/asprintf.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/asprintf.c -o asprintf.o b64encode.o: ../libcperciva/util/b64encode.c ../libcperciva/util/b64encode.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/b64encode.c -o b64encode.o -daemonize.o: ../libcperciva/util/daemonize.c ../libcperciva/util/noeintr.h ../libcperciva/util/warnp.h ../libcperciva/util/daemonize.h +daemonize.o: ../libcperciva/util/daemonize.c ../libcperciva/util/ipc_sync.h ../libcperciva/util/warnp.h ../libcperciva/util/daemonize.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/daemonize.c -o daemonize.o entropy.o: ../libcperciva/util/entropy.c ../libcperciva/util/warnp.h ../libcperciva/util/entropy.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/entropy.c -o entropy.o @@ -113,6 +113,8 @@ humansize.o: ../libcperciva/util/humansize.c ../libcperciva/util/asprintf.h ../l ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/humansize.c -o humansize.o insecure_memzero.o: ../libcperciva/util/insecure_memzero.c ../libcperciva/util/insecure_memzero.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/insecure_memzero.c -o insecure_memzero.o +ipc_sync.o: ../libcperciva/util/ipc_sync.c ../libcperciva/util/noeintr.h ../libcperciva/util/warnp.h ../libcperciva/util/ipc_sync.h + ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/ipc_sync.c -o ipc_sync.o json.o: ../libcperciva/util/json.c ../libcperciva/util/json.h ${CC} ${CFLAGS_POSIX} -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -DCPUSUPPORT_CONFIG_FILE=\"cpusupport-config.h\" -DAPISUPPORT_CONFIG_FILE=\"apisupport-config.h\" -I.. ${IDIRS} ${CPPFLAGS} ${CFLAGS} -c ../libcperciva/util/json.c -o json.o monoclock.o: ../libcperciva/util/monoclock.c ../libcperciva/util/warnp.h ../libcperciva/util/monoclock.h