[llvm] [PowerPC] Expand global named register support (PR #112603)

Nathan Chancellor via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 22 19:41:15 PDT 2024


nathanchance wrote:

For what it's worth, this breaks building the Linux kernel for 32-bit powerpc for me because [the kernel uses `r2` as a global register variable for `current`](https://elixir.bootlin.com/linux/v6.11.4/source/arch/powerpc/include/asm/current.h#L33).

```
$ make -skj"$(nproc)" ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- LLVM=1 LLVM_IAS=0 mrproper pmac32_defconfig ipc/namespace.o
fatal error: error in backend: Trying to obtain a reserved register "r2".
...
```

While this seems expected given the change, just in case, I ran this through `cvise`, which spits out:

```c
register struct task_struct *current asm("r2");
struct task_struct {
  struct cred *cred;
};
struct cred {
  int euid;
} inc_ucount(int);
int *create_ipc_ns() {
  inc_ucount(({ ({ current->cred; })->euid; }));
  return (void *)8;
}
```

which works with `clang` immediately prior to this change and GCC:

```
$ clang --version | head -1
ClangBuiltLinux clang version 20.0.0git (https://github.com/llvm/llvm-project.git 06d192925d3510d0af6c10e6f64f6deabf66b75f)

$ clang --target=powerpc-linux-gnu -Wall -Werror -Wfatal-errors -c -o /dev/null namespace.i
fatal error: error in backend: Trying to obtain a reserved register "r2".
...
```

```
$ clang --version | head -1
ClangBuiltLinux clang version 20.0.0git (https://github.com/llvm/llvm-project.git e57548387000071562f44bfd66644480c8e6542d)

$ clang --target=powerpc-linux-gnu -Wall -Werror -Wfatal-errors -c -o /dev/null namespace.i
```

```
$ powerpc-linux-gcc --version | head -1
powerpc-linux-gcc (GCC) 14.2.0

$ powerpc-linux-gcc -O2 -Wall -Werror -Wfatal-errors -c -o /dev/null namespace.i
```

https://github.com/llvm/llvm-project/pull/112603


More information about the llvm-commits mailing list