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

    <tr>
        <th>Summary</th>
        <td>
            [AVR] llvm-objdump should automatically select the instruction set
        </td>
    </tr>

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

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

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

<pre>
    Given a simple test program:
```c++
int adiw(int a) {
        return a + 51;
}
```

Build it with `clang a.c --target=avr -mmcu=avr2 -c -O3`, and then disassemble it with `llvm-objdump -d a.o`, we see
```asm
a.o:    file format elf32-avr

Disassembly of section .text:

00000000 <adiw>:
       0: c3 96 08 95   <unknown>
```

We must specify `--mcpu=avr2` to `llvm-objdump` explicitly to make `adiw` correctly  decoded.
```asm
a.o:    file format elf32-avr

Disassembly of section .text:

00000000 <adiw>:
       0: c3 96         adiw    r24, 0x33
       2: 08 95         ret
```


However the generated object file does contain the `avr2` family information.
```bash
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data: 2's complement, little endian
  Version: 1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type: REL (Relocatable file)
  Machine:                           Atmel AVR 8-bit microcontroller
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          284 (bytes into file)
  Flags:                             0x82, EF_AVR_ARCH_AVR2, relaxable
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers: 5
  Section header string table index: 1
```

So the `llvm-objdump` should automatically select the avr family according to ELF header, other than rely on user's explicit specification. 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVk2P4ygQ_TXkUnKEsZ3EhxzcH9kZaT6k7t3evY0wVGJmMESAu5P99Suwk-lM93RfFyElouoV9V5BYe692hnENamuCGMtGt8pSnPCGKluZnwInXXr8_KstfK4_kM9ogEOXvV7jRDQB9g7u3O8J0VDaEMWdJyCsKs4aaNMAC7VE2Gr9JewGsgyWgitHYbBxYiEXUGVkyKtL2-eh0qezdWgtAQV4EmFDuIOmpsd8LmALAvc7TCQ4oY_Osj6XgzjfwaZgOxrEaOwa-BGQujQgFSee499q_F5SK0f-8y23-XQ7yGTwOd2Qj4heMTnWXHfE9pEj0i83iqNsLWu5wFQbwuW8Uc3Zn5z3uwIdgseRVDWwDzgIUyq0YZOA0hxndQqbkcbjIOSogFRQL0AuoK6AiC0JsX1YH4Y-2Si-wvJ_kboBx_A71Go7TEyzLJe7E_ikAWFYH8lHlfxsNdKqKCP0aHnPzB6pbwWFIR1DkU0gkRhJcr5_0OZaRBaJ0daO1bG6tFDUfwEsAiYRDwDHIaXAhLafLBP-IguHhvYoUHHA0qw7XcUARI1adGDsCZwZZJblGBSd8t7pY-gzMhfWXOhVMt9R2hz-2kDH5BLdCdin_lOiZgmwHILZQWlgHIBND9N-ruZ4Neaez_Cfz9uP20KltxveODRmxG2jFTi3e7RhCidViFoBDRScZO8H9B5ZU0E5EDYSgzOJec6mb_eE7Zprj6-s_1fXz7-AxncH33AHh4StLn6-Dz662Nk-Odxj9Hn7vZTzOEOtRU88HifY1FOyXzmolMG386lCT1qaB7uYJW1KkCvhLOxoM5qje5X0r8f9JAn51sT3BH2dux80uFrxaCHkcl94C7E0z_1UejSSbhE0EiyPQb0oEywFxzPAU7X57UAbFW-EWKj-e7d80IPKxZPxO3mW_Nw9625u_4Q_6Q1h5ofovpjRupfjAmFTvkpm5fBK3ZO6Mxkwr2lxDMpTrAvQ9-iewdIL3Z4Syoo39riFWQ1hr4wgA9OmR2MR1IZiYd0YV72mHt7ahq_NmHf2UFL4EOwsXcIrvURPOrYeSIkvnVTg-FCWCfThjZe7JPq7Bps6FL74iZW6QjWwOCjaenPbX56IZQYWxTM5LqQdVHzGa7zZZUXRZWz5axb5zlK2i7FSpaSrhYF45TWrKZ1zhd5ua1mas0oq-iS5jSvVuVyviy2tC1EJdo2l7yipKTYc6Xnke3cut1MeT_gOi8XZZXPNG9R--mbxOATJOv0TeLWSaJ22HlSUq188D_DBBV0-phpHu5IdQMXb_l7UirjgxvGAnoMs8HpdRfCPtaXsA1hm50K3dDOhe0J28TY00-2dza-BYRtUqqesM3E5XHN_gsAAP__kYC2Hg">