Prechádzať zdrojové kódy

xtensa: Stack unwinding on Xtensa requires that the return address register always be valid. This patch fixes a part of ldso that had been using an Xtensa CALL0 instruction to get the current PC value, which temporarily clobbered the return address register. The revised code just loads the address of a label in the code. See my change to GCC from 2007-12-20 for more info (http://gcc.gnu.org/ml/gcc-patches/2007-12/msg01023.html).

Chris Zankel 15 rokov pred
rodič
commit
c9db9e50e6
1 zmenil súbory, kde vykonal 4 pridanie a 8 odobranie
  1. 4 8
      ldso/ldso/xtensa/resolve.S

+ 4 - 8
ldso/ldso/xtensa/resolve.S

@@ -32,15 +32,11 @@
 	.type	_dl_linux_resolve, @function
 _dl_linux_resolve:
 	/* Fix up the high 2 bits of the return address.  */
-	mov	a14, a0		// save a0 temporarily
-	_call0	0f
-	.align	4
-0:	extui	a13, a0, 30, 2
-	slli	a13, a13, 30
-	mov	a0, a14		// restore a0
+	movi	a13, 0f
 	slli	a12, a0, 2
-	srli	a12, a12, 2
-	or	a12, a12, a13
+0:	extui	a13, a13, 30, 2
+	ssai	2
+	src	a12, a13, a12
 
 	/* Call the fixup function.  */
 	movi	a8, _dl_linux_resolver