|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/4] tools/tests/x86_emulator: avoid duplicating loop body
clang would duplicate the loop body and end up with a double definition of the symbol: ``` /tmp/test_x86_emulator-0f3576.s:27823: Error: symbol `vmovsh_to_mem' is already defined /tmp/test_x86_emulator-0f3576.s:27825: Error: symbol `.Lvmovsh_to_mem_end' is already defined ``` This is a valid transformation, that even GCC might do, see https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Volatile-1 which says that `%=` should be used instead. However the C code here also needs to know the name of the label, so I don't immediately see how to solve that. For now mark the loop variable `volatile` to prevent the optimization as a workaround. (another way to fix this could be to move the loop body into a function, but a compiler might inline it, or specialize it, leading to the same problem) Signed-off-by: Edwin Török <edwin.torok@xxxxxxxxxx> --- tools/tests/x86_emulator/test_x86_emulator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tests/x86_emulator/test_x86_emulator.c b/tools/tests/x86_emulator/test_x86_emulator.c index a25eca1634..cf4e5cc593 100644 --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -5248,7 +5248,7 @@ int main(int argc, char **argv) memset(res + 3, ~0, 8); regs.eax = (unsigned long)res; regs.ecx = ~0; - for ( i = 0; i < 2; ++i ) + for (volatile int i = 0; i < 2; ++i ) { decl_insn(vmovsh_to_mem); -- 2.47.3
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |