diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2023-02-22 13:12:58 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-02-22 13:16:22 +0100 |
commit | 4ddbcb9c0c555838b123c018a9ebc9b7e14a87e5 (patch) | |
tree | 8ca0b65e08bb811d0aab681f2a0678086d511900 /tcp.c | |
parent | 933aa1014bb9012fa20974945502c6687beaaebe (diff) | |
download | passt-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>
Diffstat (limited to 'tcp.c')
-rw-r--r-- | tcp.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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) { |