7a3231
commit eb4181e9f4a512de37dad4ba623c921671584dea
7a3231
Author: Vladislav Khmelevsky <och95@yandex.ru>
7a3231
Date:   Thu Nov 17 12:47:29 2022 +0400
7a3231
7a3231
    elf: Fix rtld-audit trampoline for aarch64
7a3231
    
7a3231
    This patch fixes two problems with audit:
7a3231
    
7a3231
      1. The DL_OFFSET_RV_VPCS offset was mixed up with DL_OFFSET_RG_VPCS,
7a3231
         resulting in x2 register value nulling in RG structure.
7a3231
    
7a3231
      2. We need to preserve the x8 register before function call, but
7a3231
         don't have to save it's new value and restore it before return.
7a3231
    
7a3231
    Anyway the final restore was using OFFSET_RV instead of OFFSET_RG value
7a3231
    which is wrong (althoug doesn't affect anything).
7a3231
    
7a3231
    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
7a3231
7a3231
diff --git a/sysdeps/aarch64/dl-trampoline.S b/sysdeps/aarch64/dl-trampoline.S
7a3231
index a83e7fc5f97047e2..b4b9c86224785a2c 100644
7a3231
--- a/sysdeps/aarch64/dl-trampoline.S
7a3231
+++ b/sysdeps/aarch64/dl-trampoline.S
7a3231
@@ -282,12 +282,11 @@ _dl_runtime_profile:
7a3231
 	stp	x2, x3, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*1]
7a3231
 	stp	x4, x5, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*2]
7a3231
 	stp	x6, x7, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*3]
7a3231
-	str	x8,     [x29, #OFFSET_RG + DL_OFFSET_RG_X0 + 16*4]
7a3231
 	stp	q0, q1, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*0]
7a3231
 	stp	q2, q3, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*1]
7a3231
 	stp	q4, q5, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*2]
7a3231
 	stp	q6, q7, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*3]
7a3231
-	str	xzr,    [X29, #OFFSET_RV + DL_OFFSET_RG_VPCS]
7a3231
+	str	xzr,    [X29, #OFFSET_RV + DL_OFFSET_RV_VPCS]
7a3231
 
7a3231
 	/* Setup call to pltexit  */
7a3231
 	ldp	x0, x1, [x29, #OFFSET_SAVED_CALL_X0]
7a3231
@@ -299,7 +298,6 @@ _dl_runtime_profile:
7a3231
 	ldp	x2, x3, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*1]
7a3231
 	ldp	x4, x5, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*2]
7a3231
 	ldp	x6, x7, [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*3]
7a3231
-	ldr	x8,     [x29, #OFFSET_RV + DL_OFFSET_RV_X0 + 16*4]
7a3231
 	ldp	q0, q1, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*0]
7a3231
 	ldp	q2, q3, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*1]
7a3231
 	ldp	q4, q5, [x29, #OFFSET_RV + DL_OFFSET_RV_V0 + 32*2]