[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: clang build error on i686
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: clang build error on i686 |
Date: |
Sat, 3 Jul 2021 18:20:00 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
On 7/3/21 4:34 PM, Cole Robinson wrote:
> Hi, I'm hitting build errors with clang on i686 userspace on x86_64
> kernel. Affects both qemu 6.0.0 and qemu.git, tested with fedora
> clang-12.0.1~rc3-1.fc35.i686.
> /builddir/build/BUILD/qemu-6.0.0/include/qemu/stats64.h:58:21: warning:
> misaligned atomic operation may incur significant performance penalty;
> the expected alignment (8 bytes) exceeds the actual alignment (4 bytes)
> [-Watomic-alignment]
> uint64_t orig = qatomic_read__nocheck(&s->value);
> ^
> /builddir/build/BUILD/qemu-6.0.0/include/qemu/atomic.h:129:5: note:
> expanded from macro 'qatomic_read__nocheck'
> __atomic_load_n(ptr, __ATOMIC_RELAXED)
Ah I hit this one few months ago using Clang10 to build i386 guest
on mips64el host.
In my notes I see I tried:
-- >8 --
diff --git a/include/qemu/stats64.h b/include/qemu/stats64.h
index fdd3d1b8f98..df9962add4e 100644
--- a/include/qemu/stats64.h
+++ b/include/qemu/stats64.h
@@ -37,7 +37,7 @@ static inline void stat64_init(Stat64 *s, uint64_t value)
static inline uint64_t stat64_get(const Stat64 *s)
{
- return qatomic_read__nocheck(&s->value);
+ return qatomic_read_u64(&s->value);
}
static inline void stat64_add(Stat64 *s, uint64_t value)
@@ -47,7 +47,7 @@ static inline void stat64_add(Stat64 *s, uint64_t value)
static inline void stat64_min(Stat64 *s, uint64_t value)
{
- uint64_t orig = qatomic_read__nocheck(&s->value);
+ uint64_t orig = qatomic_read_u64(&s->value);
while (orig > value) {
orig = qatomic_cmpxchg__nocheck(&s->value, orig, value);
}
@@ -55,7 +55,7 @@ static inline void stat64_min(Stat64 *s, uint64_t value)
static inline void stat64_max(Stat64 *s, uint64_t value)
{
- uint64_t orig = qatomic_read__nocheck(&s->value);
+ uint64_t orig = qatomic_read_u64(&s->value);
while (orig < value) {
orig = qatomic_cmpxchg__nocheck(&s->value, orig, value);
}
---
TBH today I don't remember much, I think the change wasn't making much
sense, then I stopped using Clang there.
Ah wait, there is also another one (which I reverted later):
-- >8 --
diff --git a/meson.build b/meson.build
index 372576f82c5..1a5da5ee56b 100644
--- a/meson.build
+++ b/meson.build
@@ -161,6 +161,9 @@
error('Multipath is supported only on Linux')
endif
+if 'CONFIG_ATOMIC64' in config_host
+ atomic = cc.find_library('atomic', required: config_host['ARCH'] in
['i386', 'arm', 'riscv32'])
+endif
m = cc.find_library('m', required: false)
util = cc.find_library('util', required: false)
winmm = []
@@ -1534,7 +1537,7 @@
util_ss = util_ss.apply(config_all, strict: false)
libqemuutil = static_library('qemuutil',
sources: util_ss.sources() +
stub_ss.sources() + genh,
- dependencies: [util_ss.dependencies(), m,
glib, socket, malloc])
+ dependencies: [util_ss.dependencies(),
atomic, m, glib, socket, malloc])
qemuutil = declare_dependency(link_with: libqemuutil,
sources: genh + version_res)
---
No clue neither. Posting in case it ring a bell to someone.