<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55628>55628</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Wrong relocation under ARM RWPI relocation model
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Acciente717
      </td>
    </tr>
</table>

<pre>
    TL; DR: Two global variables are relocated to the same address.

Reproducible code example here: https://github.com/Acciente717/rwpi-bug

The C code snippet fetches and adds global variables.

```c
extern int vola1;
extern int vola2;
extern int vola3;
extern int vola4;
extern int vola5;

int main(void) {
    vola1 += 1;
    vola2 += 2;
    vola3 += 3;
    vola4 += 4;
    vola5 += 5;

    return 0;
}
```

The disassembly of the compiled code shows that `vola1` and `vola4` are relocated to the same address.
```
080001a8 <main>:
 80001a8:       f240 0000       movw    r0, #0
 80001ac:       f2c0 0000       movt    r0, #0
 80001b0:       f859 1000       ldr.w   r1, [r9, r0] ; fetching vola1 from [%r9 + 0]
 80001b4:       3101            adds    r1, #1       ; vola1 += 1
 80001b6:       f849 1000       str.w   r1, [r9, r0] ; storing vola1
 80001ba:       f240 0008       movw    r0, #8
 80001be:       f2c0 0000       movt    r0, #0
 80001c2:       f859 1000       ldr.w   r1, [r9, r0]
 80001c6:       3102            adds    r1, #2
 80001c8:       f849 1000       str.w   r1, [r9, r0]
 80001cc:       f240 0004       movw    r0, #4
 80001d0:       f2c0 0000       movt    r0, #0
 80001d4:       f859 1000       ldr.w   r1, [r9, r0]
 80001d8:       3103            adds    r1, #3
 80001da:       f849 1000       str.w   r1, [r9, r0]
 80001de:       f240 0000       movw    r0, #0
 80001e2:       f2c0 0000       movt    r0, #0
 80001e6:       f859 1000       ldr.w   r1, [r9, r0] ; fetching vola4 from [%r9 + 0] again ???
 80001ea:       3104            adds    r1, #4       ; vola4 += 4
 80001ec:       f849 1000       str.w   r1, [r9, r0] ; storing vola4
 80001f0:       f240 0104       movw    r1, #4
 80001f4:       f2c0 0100       movt    r1, #0
 80001f8:       f859 0001       ldr.w   r0, [r9, r1]
 80001fc:       1d42            adds    r2, r0, #5
 80001fe:       2000            movs    r0, #0
 8000200:       f849 2001       str.w   r2, [r9, r1]
 8000204:       4770            bx      lr
```

My toolchain version is
```
clang version 14.0.4 (https://github.com/llvm/llvm-project.git 5f66e721ec1d099cf2370235ce122cf47c287308)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: ~/opt/llvm-14/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytV9uO6jYU_ZrwYg1yHOf2wMMMHKoj9UjVdKTzWDmxA25NjGwHmL_vdi6QMDAtmoMQibNvy8vL8abQ_H3x9nsQvaDVaxA9o7ejRhulC6bQgRnJCiUsYkYgI5QumRMcOY3cViDLdgIxzo2wdh7gVYCfu99XsTeaN6WEWFRqLpA4sd0eBlthhC-ydW5v4SYga_hupNs2xbzUOxg8l6UUtRNpmMLIHPfyqWg24_RvUHvZ5bW13O-FQ5Vw5dbjrLlHZD_MYIIvSHD3LbuxODlhaiRrhw5asRDIuGkg9wzRPQO9Z4jPhu7XP98xWQckO2jJA5KjIO09EHxaXCggL0G0QheAg4kMJvLBFA2m6IOJDib6wRQPpmug3sEI18Bc8MWUrq6YvV4vLi2zVuwK9Y501coHlnsvFcipW8mtPlp4zhyC8G4ZEtwuaD-m7fj_CnEKBGcY45BlKIiWLc3RN6--bka9rX2QV4RiBA8wgsFOH45wMTggSyAkwpOIcogoJxHubkSB-4gszlHYRyhu5m2RsA2JX0zubyBDvEJ-W7balvWm10Bl9M67BSQ2uV8l5D0nZWhXJgpxiNoPDPyuuFQhUW9pK1yJa5wqGRDTC2Lr_gOxddqcAU_SsSnJ2S2Ss0mEeJTkkjxI8iQ4OVNH7lJHJhHZgwxNgsspH_QWH3QcwfGjfHD6BT54duYjustHNIlgX-CDi0c3oSCP8iGSL29CemcTIraBdwv4r_vvuCw7M0nvMkmvNuXoBT1OVX51U07SVXhMejgVYXhLhBUdkx5OSQ9vkV5lI9L9gwnpeAo5vFJF1c8XpPxxU5J-ll3ReBLXq4l4ioY4gGnvaQMcR8ySHuaZWfIpTIJ7VmiaXsoVJz9R88np-OMdjjGtyq2XzkEYKzW0CfZmRKmYX8HeKaRzPPcSyT5pp5Q6DJcn6Mr-FqWbgwOKqyQRKQExwTslz8uKRCkGAksRElJWNC1JlkY4g06kP8WZ2Qjnm7dTlvyV0Kem_qfWx_pJybo5PW3qZjjtjWAc7eBQV957r608dabvtXVMwZG_ksabgvQbQNN7NwAMKdwVcDy37mvdwOlfQgsgORz36LflEvqnNgVzQECbgqwba3y8LPzU4Y1K1j3ACzCyzn59yp6XP4UCTqEZ-QW5lmdgu0Y56YMgydz3WRTvEvqZV0R6t-F8uu12OvudBsfzDD4relbijC8inkc5mznplFj8NBo02fdkXpbAsDDo-fUHev35x_expdXErDFq8ZhgYSitbYSFmzhOSDbbLqo8E5hilqRpldJQ5GECjU9VJDwvcprxmWKFUHbRvqRJLY6oTQH3sG1nckEwITgmob_G-TxMOU9EHidphfMkJjB1AY2imnscc202M7NoIcF_EQtGJa2zFyP0tnJTC9GWg_yscVttFqP_MrO2_KKF_y-HA5ea">