summary refs log tree commit diff stats
path: root/results/classifier/zero-shot-user-mode/instruction/1805
blob: 5598411dddbb383077c5adefb6371affe6e149b2 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
instruction: 0.513
runtime: 0.307
syscall: 0.180



build-user-hexagon  CI job is not actually testing hexagon
Description of problem:
Look at the output from the `build-user-hexagon` CI job and see what compiler meson reports it is using:

  https://gitlab.com/qemu-project/qemu/-/jobs/4790457871

```
Project name: qemu
Project version: 8.0.91
C compiler for the host machine: cc -m64 -mcx16 (gcc 10.2.1 "cc (Debian 10.2.1-6) 10.2.1 20210110")
C linker for the host machine: cc -m64 -mcx16 ld.bfd 2.35.2
Host machine cpu family: x86_64
Host machine cpu: x86_64
```

What is 'cc' resolving to ?

```
$ podman run -it registry.gitlab.com/qemu-project/qemu/qemu/debian-hexagon-cross cc -v | grep Target
Target: x86_64-linux-gnu
```

That is a x86_64 target native compiler, not a hexagon target cross compiler.

The ``tests/docker/dockerfiles/debian-hexagon-cross.docker`` file installs the hexagon toolchain under ``/opt`` and adds the dir to ``$PATH`` with: 

```
ENV PATH $PATH:${TOOLCHAIN_INSTALL}/${TOOLCHAIN_BASENAME}/x86_64-linux-gnu/bin
```

This toolchain just installs a `clang` binary, not ``cc``

So when ``configure`` runs it looks for ``cc`` first and finds the naitve x86_64 GCC install from the container, not the clang cross compiler

It is also not possible to merely set ``CC=clang`` because meson will assume it is a native compiler and crash and burn when unable to run binaries

```
# CC=clang ./configure --target-list=x86_64-softmmu
Using './build' as the directory for build output
...snip...
Sphinx not found/usable, disabling docs.
Disabling PIE due to missing toolchain support
The Meson build system
Version: 1.2.0
Source dir: /qemu
Build dir: /qemu/build
Build type: native build
Project name: qemu
Project version: 8.0.92

../meson.build:1:0: ERROR: Executables created by c compiler clang -m64 -mcx16 are not runnable.
```

AFAICT, the root problem here is that the hexagon container is not setup in the same way as the other cross compiler containers.

We need the toolchain binaries to be named after the target triplet - ie not ``clang`` but ``hexagon-unknown-linux-musl-clang``

This used to be done but was thrown away when switching to a pre-built toolchain in b9052d36342c947b36447558ed0a0dd3fb3fb8f4

Then the container also needs to set the configure args for the cross target

```
ENV QEMU_CONFIGURE_OPTS --cross-prefix=hexagon-unknown-linux-musl-
```

AFAICT, this was never done, so even before switching to the pre-built toolchain, I think the `build-user-hexagon` CI job was running a native built not hexagon build.