scripts/decodecode: add support for LoongArch
authorYouling Tang <tangyouling@kylinos.cn>
Sat, 16 Dec 2023 06:51:28 +0000 (14:51 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 29 Dec 2023 20:22:25 +0000 (12:22 -0800)
An example how to invoke decodecode for loongarch64:
$ echo 'Code: 380839f6  380831f9  28412bae  <24000ca6>
  004081ad  0014cb50  004083e8  02bff34c  58008e91' | \
  ARCH=loongarch CROSS_COMPILE=loongarch64-linux-gnu- \
  ./scripts/decodecode
Code: 380839f6 380831f9 28412bae <24000ca6004081ad 0014cb50 004083e8 02bff34c 58008e91
All code
========
   0: 380839f6  ldx.w        $fp, $t3, $t2
   4: 380831f9  ldx.w        $s2, $t3, $t0
   8: 28412bae  ld.h         $t2, $s6, 74(0x4a)
   c:* 24000ca6  ldptr.w      $a2, $a1, 12(0xc) <-- trapping instruction
  10: 004081ad  slli.w       $t1, $t1, 0x0
  14: 0014cb50  and          $t4, $s3, $t6
  18: 004083e8  slli.w       $a4, $s8, 0x0
  1c: 02bff34c  addi.w       $t0, $s3, -4(0xffc)
  20: 58008e91  beq          $t8, $t5, 140(0x8c) # 0xac

Code starting with the faulting instruction
===========================================
   0: 24000ca6  ldptr.w      $a2, $a1, 12(0xc)
   4: 004081ad  slli.w       $t1, $t1, 0x0
   8: 0014cb50  and          $t4, $s3, $t6
   c: 004083e8  slli.w       $a4, $s8, 0x0
  10: 02bff34c  addi.w       $t0, $s3, -4(0xffc)
  14: 58008e91  beq          $t8, $t5, 140(0x8c) # 0xa0

Link: https://lkml.kernel.org/r/MW4PR84MB3145B99B9677BB7887BB26CD8192A@MW4PR84MB3145.NAMPRD84.PROD.OUTLOOK.COM
Signed-off-by: Youling Tang <tangyouling@kylinos.cn>
Acked-by: Huacai Chen <chenhuacai@loongson.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
scripts/decodecode

index 8fe71c29238179095adb3f884049991e77be91c6..6364218b2178f538b86dab8f37ced5acfada7742 100755 (executable)
@@ -67,6 +67,7 @@ if [ -z "$ARCH" ]; then
     case `uname -m` in
        aarch64*) ARCH=arm64 ;;
        arm*) ARCH=arm ;;
+       loongarch*) ARCH=loongarch ;;
     esac
 fi
 
@@ -98,6 +99,10 @@ disas() {
                ${CROSS_COMPILE}strip $t.o
        fi
 
+       if [ "$ARCH" = "loongarch" ]; then
+               ${CROSS_COMPILE}strip $t.o
+       fi
+
        if [ $pc_sub -ne 0 ]; then
                if [ $PC ]; then
                        adj_vma=$(( $PC - $pc_sub ))