capstone icon indicating copy to clipboard operation
capstone copied to clipboard

PowerPC missing 'bctar' family of instructions

Open hainest opened this issue 7 months ago • 1 comments

While testing #2663, I found that Capstone is missing the bctar/bctarl instructions. It turns out that it's because LLVM doesn't have them. They were introduced in Power8 back in 2013, so that's surprising. It would be good to manually add them into Capstone until they become available. I'm assuming the best place for that is in capstone-engine/llvm-capstone, but I don't speak TableGen so it would take me a while to do that.

echo 'void test(){ __asm__ volatile("bctar 0x14, 0x0, 0x0"); }' |  clang -x c -mtune=power9 -c -o test.o -
<stdin>:1:31: error: invalid instruction, did you mean: bca, bcctr, bctr, bctrl, bfctr, bta, btctr?
    1 | void test(){ __asm__ volatile("bctar 0x14, 0x0, 0x0"); }
      |                               ^
<inline asm>:1:2: note: instantiated into assembly here
    1 |         bctar 0x14, 0x0, 0x0
      |         ^~~~~
1 error generated.
echo 'void test(){ __asm__ volatile("bctar 0x14, 0x0, 0x0"); }' |  gcc -x c -mtune=power9 -c -o test.o - && objdump -d test.o

test.o:     file format elf64-powerpcle

Disassembly of section .text:

0000000000000000 <test>:
   0:   f8 ff e1 fb     std     r31,-8(r1)
   4:   d1 ff 21 f8     stdu    r1,-48(r1)
   8:   78 0b 3f 7c     mr      r31,r1
   c:   60 04 80 4e     btar
  10:   00 00 00 60     nop
  14:   30 00 3f 38     addi    r1,r31,48
  18:   f8 ff e1 eb     ld      r31,-8(r1)
  1c:   20 00 80 4e     blr
        ...
  28:   80 01 00 01     .long 0x1000180
./cstool -dar ppc64 "60 04 80 4e"
ERROR: invalid assembly code

Image

hainest avatar Mar 29 '25 13:03 hainest