On Mon, Apr 24, 2023 at 08:28:55AM -0700, Boqun Feng wrote: > On Mon, Apr 24, 2023 at 10:13:51AM -0500, Segher Boessenkool wrote: > > At what points can r13 change? Only when some particular functions are > > called? > > r13 is the local paca: > > register struct paca_struct *local_paca asm("r13"); > > , which is a pointer to percpu data. Yes, it is a global register variable. > So if a task schedule from one CPU to anotehr CPU, the value gets > changed. But the compiler does not see that something else changes local_paca (or r13 some other way, via assembler code perhaps)? Or is there a compiler bug? If the latter is true: Can you make a reproducer and open a GCC PR? <https://gcc.gnu.org/bugs/> for how to get started doing that. We need *exact* code that shows the problem, together with a compiler command line. So that we can reproduce the problem. That is step 0 in figuring out what is going on, and then maybe fixing the problem :-) Segher