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