<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/146537>146537</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AVR] Linking produces wrong startup code for xmega3 devices
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tomtor
</td>
</tr>
</table>
<pre>
script:
```
L=/home/tom/.arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0
LXM3=$L/avrxmega3
LTINY=$L/avr25
clang -L$LXM3 -Os -target avr-none -mmcu=attiny402 bad_copy_data.c -o bad.out
clang -L$LTINY -Os -target avr-none -mmcu=attiny84 bad_copy_data.c -o good.out
```
`good.out` for the `attiny84` is OK, but `bad.out` for the `attiny402` has the following code fragment:
```
00000040 <__do_copy_data>:
40: 1f e3 ldi r17, 0x3F ; 63
42: a0 e0 ldi r26, 0x00 ; 0
44: bf e3 ldi r27, 0x3F ; 63
46: e9 ec ldi r30, 0xC9 ; 201
48: f0 e0 ldi r31, 0x00 ; 0
4a: 02 c0 rjmp .+4 ; 0x50 <.Lname11>
4c: 05 90 lpm r0, Z+
4e: 0d 92 st X+, r0
50: a0 30 cpi r26, 0x00 ; 0
52: b1 07 cpc r27, r17
54: d9 f7 brne .-10 ; 0x4c <.Lname10+0x2>
```
This loop from the CRT tries to copy 0 bytes (because RO data is mapped in the RAM space at 0x8000)
and this test:
` 50: a0 30 cpi r26, 0x00 ; 0`
fails because `X` has been already incremented in the previous line, so it will copy 0x10000 bytes overwriting the complete IO region and all RAM.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVd1u6zYMfhrlhoghS_69yEXaLsDB2hUoiqHbTSHLjKNzZMuQ5DR9-0Gy06bntNsEA0JIfvz5KIbCOdUNiBuSX5H8ZiUmfzB2403vjV01pn3dOGnV6AnfEhq_gi4f3d4SfkPY7mB6JGznTU_YLhG2ndRg0pyw3SjkD9GhI2y3iKOd0VFytOtOSsJ2ZcITuha-R82TIknXi3FJ2E6rhrDdbCeO9mwdoj_d8ZhAdjvrTj12ggfN47c__vqgYvmcvdRi6GB9GzRPdxzW9w7WXtgOPYR8BjMgrPteToTfCO_V8JpRBo1on6UZX59b4UUiYW2CKDGT_9VtiP1__FbZZ247Y978XjA9_3xTFhT2xoI_IJCCnv0FsXJw_zth19BMPujOaX6GyCgL8oNwUb43WpsXNXQgTYuwt6Lrcfi88zSejALh18_PrXkvg_DfZgRARgnfAkC6B-TwfnSr4m3TMmRKT3y3aAi_giJ0EDI2YwUFpJ9hWTFjKb3A0jluNmObGPcd8XU0yIoZgjWg_CwcpzP4uo4wRtMZV824_Vdp8vTrNMWMpQwkBfu9H4M-Iewqg8sTEac8cp3cDqLHNA0sRx9y8ZFD_SH-2IONKf9N2NVsiotpCzW7MHV-vp-CIbsOsGCe07cGcApy_G_a86VlTQq0vAggR3nZgND1aB671NawvzRu7ICRhnVKfyUhkxckUMKu6InNVPw0LI8H5UAbM8Lemj4-7-uHR_BWoQNvIDxXoNC8enRAWNWgFJNDeLiH8IjDGPViHLEFNUT0w_YO3CgkgvBATxWllLCa0K0YWvAhmkf3YVZ-pvCSkH8n81zEXijt4JwaKejTeVwbxAGEtijaV1CDtBgm9T3b0eJRmcmBVgOGGM6A8vCitF5KP6VhgBcCzBHti1U-zH6AS9OPGj3Ct3uw2CkzQChTaB14SFbthrc1r8UKN2mZp7ysy7ReHTayalheY1q0RVHKKs2quuJ5nZd0X5WykCu1YZTltKRpmrE0r5MmF2lZtdUeeZUViCSj2AulE62PfWJst1LOTbhJsyLn5UqLBrWLy4qxAV8gagljYXfZTQCtm6lzJKNaOe_e3Xjlddxy2z8fSH4Dt2r4EcodrWkniQ5erBk6cF5YP43LP6CxMO8UaPGoJLrVZPXm4P3oQqfZLmwm5Q9Tk8i4_EK45VqP1nxH6QnbxSTDxluqOG7YPwEAAP__dEoRPA">