aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2023-02-22 13:12:58 +0100
committerStefano Brivio <sbrivio@redhat.com>2023-02-22 13:16:22 +0100
commit4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5 (patch)
tree8ca0b65e08bb811d0aab681f2a0678086d511900
parent933aa1014bb9012fa20974945502c6687beaaebe (diff)
downloadpasst-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar.gz
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar.bz2
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar.lz
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar.xz
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.tar.zst
passt-4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5.zip
tcp: Disable optimisations for tcp_hash()2023_02_22.4ddbcb9
I'm not sure if we're breaking some aliasing rule here, but with gcc 12.2.1 on x86_64 and -flto, the siphash_20b() call in tcp_hash() doesn't see the connection address -- it gets all zeroes instead. Fix this temporarily by disabling optimisations for this tcp_hash(). Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--tcp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/tcp.c b/tcp.c
index 81468d9..803c2c4 100644
--- a/tcp.c
+++ b/tcp.c
@@ -1185,6 +1185,9 @@ static int tcp_hash_match(const struct tcp_tap_conn *conn,
#if TCP_HASH_NOINLINE
__attribute__((__noinline__)) /* See comment in Makefile */
#endif
+__attribute__((optimize("O0"))) /* TODO: with -O2 and -flto on gcc 12.2,
+ * siphash_20b() doesn't see 'addr', why?
+ */
static unsigned int tcp_hash(const struct ctx *c, const union inany_addr *addr,
in_port_t tap_port, in_port_t sock_port)
{