Issue 150569
Summary llvm-objdump for ARM misapplies conditional instruction suffixes to subsequent instructions when an instruction is not recognized
Labels new issue
Assignees
Reporter JonathonReinhart
    Consider this input code:
```asm
.syntax unified

example:
    tst r3, #0x10
    it eq
    vldmiaeq r0!, {s16-s31}
    msr psplim, r2
    msr psp, r0
    bx r3
```

Assembled with GNU AS:
```
arm-none-eabi-as -mcpu=cortex-m33 -mfpu=fp-armv8 code.s
```

If I disassemble with `--mcpu=cortex-m33` it works fine:
```
$ llvm-objdump --mcpu=cortex-m33 -d a.out
a.out:      file format elf32-littlearm

Disassembly of section .text:

00000000 <example>:
       0: f013 0f10     tst.w   r3, #0x10
       4: bf08 it      eq
       6: ecb0 8a10     vldmiaeq        r0!, {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
       a: f382 880b     msr     psplim, r2
       e: f380 8809     msr     psp, r0
 12: 4718          bx      r3
```


If I disassemble without any `--mcpu` option, it doesn't understand the `vldmiaeq` instruction at `0x6`, which is okay (I don't know what the default ARM instruction set is).

But it does something else weird: It erroneously applies the `eq` suffix to the `msr` instruction  at `0xa`:

```
$ llvm-objdump -d a.out

/usr/local/google/home/jrreinhart/bugs/objdump-iteq/a.out:      file format elf32-littlearm

Disassembly of section .text:

00000000 <example>:
       0: f013 0f10     tst.w   r3, #0x10
       4: bf08 it      eq
       6: ecb0 8a10     <unknown>
       a: f382 880b     msreq psplim, r2    // not supposed to be `msreq`
       e: f380 8809     msr psp, r0
      12: 4718          bx      r3
```

and if I force it to Cortex-M3 (which doesn't have PSPLIM), then it moves to the next instruction at `0xe`:
```
llvm-objdump --mcpu=cortex-m3 -d ~/bugs/objdump-iteq/a.out

/usr/local/google/home/jrreinhart/bugs/objdump-iteq/a.out: file format elf32-littlearm

Disassembly of section .text:

00000000 <example>:
       0: f013 0f10     tst.w   r3, #0x10
       4: bf08 it      eq
       6: ecb0 8a10     <unknown>
       a: f382 880b <unknown>
       e: f380 8809     msreq   psp, r0      // now this instruction got the `eq` suffix
      12: 4718          bx      r3
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to