summary refs log tree commit diff stats
path: root/results/classifier/gemma3:27b/runtime/1883268
blob: 97be215b8e02f44423bafad93acbf074d1596662 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
random errors on aarch64 when executing __aarch64_cas8_acq_rel

Hello,

Since I upgraded to qemu-5.0 when executing the GCC testsuite,
I've noticed random failures of g++.dg/ext/sync-4.C.

I'm attaching the source of the testcase, the binary executable and the qemu traces (huge, 111MB!) starting at main (with qemu-aarch64 -cpu cortex-a57 -R 0 -d in_asm,int,exec,cpu,unimp,guest_errors,nochain)

The traces where generated by a CI build, I built the executable manually but I expect it to be the same as the one executed by CI.

In seems the problem occurs in f13, which leads to a call to abort()

The preprocessed version of f13/t13 are as follows:
static bool f13 (void *p) __attribute__ ((noinline));
static bool f13 (void *p)
{
  return (__sync_bool_compare_and_swap((ditype*)p, 1, 2));
}
static void t13 ()
{
  try {
    f13(0);
  }
  catch (...) {
    return;
  }
  abort();
}


When looking at the execution traces at address 0x00400c9c, main calls f13, which in turn calls __aarch64_cas8_acq_rel (at 0x00401084)
__aarch64_cas8_acq_rel returns to f13 (address 0x0040113c), then f13 returns to main (0x0040108c) which then calls abort (0x00400ca0)

I'm not quite sure what's wrong :-(

I've not noticed such random problems with native aarch64 hardware.