<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">