]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
samples/ftrace: Adjust LoongArch register restore order in direct calls
authorChenghao Duan <duanchenghao@kylinos.cn>
Wed, 31 Dec 2025 07:19:25 +0000 (15:19 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Wed, 31 Dec 2025 07:19:25 +0000 (15:19 +0800)
Ensure that in the ftrace direct call logic, the CPU register state
(with ra = parent return address) is restored to the correct state after
the execution of the custom trampoline function and before returning to
the traced function. Additionally, guarantee the correctness of the jump
logic for jr t0 (traced function address).

Cc: stable@vger.kernel.org
Fixes: 9cdc3b6a299c ("LoongArch: ftrace: Add direct call support")
Reported-by: Youling Tang <tangyouling@kylinos.cn>
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
samples/ftrace/ftrace-direct-modify.c
samples/ftrace/ftrace-direct-multi-modify.c
samples/ftrace/ftrace-direct-multi.c
samples/ftrace/ftrace-direct-too.c
samples/ftrace/ftrace-direct.c

index da3a9f2091f55b05ee24aaa62ec8ff4144c0414c..1ba1927b548ee9abb1fd2720c9cd36c7c47dcce0 100644 (file)
@@ -176,8 +176,8 @@ asm (
 "      st.d    $t0, $sp, 0\n"
 "      st.d    $ra, $sp, 8\n"
 "      bl      my_direct_func1\n"
-"      ld.d    $t0, $sp, 0\n"
-"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $ra, $sp, 0\n"
+"      ld.d    $t0, $sp, 8\n"
 "      addi.d  $sp, $sp, 16\n"
 "      jr      $t0\n"
 "      .size           my_tramp1, .-my_tramp1\n"
@@ -189,8 +189,8 @@ asm (
 "      st.d    $t0, $sp, 0\n"
 "      st.d    $ra, $sp, 8\n"
 "      bl      my_direct_func2\n"
-"      ld.d    $t0, $sp, 0\n"
-"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $ra, $sp, 0\n"
+"      ld.d    $t0, $sp, 8\n"
 "      addi.d  $sp, $sp, 16\n"
 "      jr      $t0\n"
 "      .size           my_tramp2, .-my_tramp2\n"
index 8f7986d698d874a4c8f4896d1f457c013eb80757..7a7822dfeb50aba38c132d070107f560e788a5f6 100644 (file)
@@ -199,8 +199,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func1\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp1, .-my_tramp1\n"
@@ -215,8 +215,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func2\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp2, .-my_tramp2\n"
index db326c81a27dddc6b3df205a541b4491d0884b28..3fe6ddaf0b69f7a7f885d1db18b9b23a4e77c9f8 100644 (file)
@@ -131,8 +131,8 @@ asm (
 "      move    $a0, $t0\n"
 "      bl      my_direct_func\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"
index 3d0fa260332d477b20c5ffee1e3dc1350eb2cf42..bf2411aa6fd7ad56b62baf06f89f44eae8372e9d 100644 (file)
@@ -143,8 +143,8 @@ asm (
 "      ld.d    $a0, $sp, 0\n"
 "      ld.d    $a1, $sp, 8\n"
 "      ld.d    $a2, $sp, 16\n"
-"      ld.d    $t0, $sp, 24\n"
-"      ld.d    $ra, $sp, 32\n"
+"      ld.d    $ra, $sp, 24\n"
+"      ld.d    $t0, $sp, 32\n"
 "      addi.d  $sp, $sp, 48\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"
index 956834b0d19ac6bae00a5855bcfb38d1e5ebd642..5368c8c39cbb4439532f285b737f8ae071749ede 100644 (file)
@@ -124,8 +124,8 @@ asm (
 "      st.d    $ra, $sp, 16\n"
 "      bl      my_direct_func\n"
 "      ld.d    $a0, $sp, 0\n"
-"      ld.d    $t0, $sp, 8\n"
-"      ld.d    $ra, $sp, 16\n"
+"      ld.d    $ra, $sp, 8\n"
+"      ld.d    $t0, $sp, 16\n"
 "      addi.d  $sp, $sp, 32\n"
 "      jr      $t0\n"
 "      .size           my_tramp, .-my_tramp\n"