diff options
author | David Tardon <dtardon@redhat.com> | 2012-04-23 09:47:41 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2012-04-23 13:47:00 +0200 |
commit | c4c9484a1f55266c92e83406ddee3715affed7f6 (patch) | |
tree | 1c8afd40be32e5ec69037a3dce3e3f7aa4bbf9b1 /bridges | |
parent | Add all the available themes to the list. (diff) | |
download | core-c4c9484a1f55266c92e83406ddee3715affed7f6.tar.gz core-c4c9484a1f55266c92e83406ddee3715affed7f6.zip |
save register arguments first
The "mr" stores r11 to indeterminate register (r9 in my case) before
storing it into the output variable, thus overwriting one of our input
arguments... This later leads to nice segfault in
testtools/source/bridgetest ...
I suppose there is a better way to get the variable, but I do not know
it .-)
Diffstat (limited to 'bridges')
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx index 425c5b530b7f..3cb94dd43595 100644 --- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx @@ -504,13 +504,6 @@ static typelib_TypeClass cpp_mediate( extern "C" void privateSnippetExecutor( ... ) { - volatile long nOffsetAndIndex; - - //mr %r3, %r11 # move into arg1 the 64bit value passed from OOo - __asm__ __volatile__ ( - "mr %0, 11\n\t" - : "=r" (nOffsetAndIndex) : ); - sal_uInt64 gpreg[ppc64::MAX_GPR_REGS]; double fpreg[ppc64::MAX_SSE_REGS]; @@ -537,11 +530,18 @@ extern "C" void privateSnippetExecutor( ... ) "stfd 12, 88(%1)\t\n" "stfd 13, 96(%1)\t\n" : : "r" (gpreg), "r" (fpreg) - : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", + : "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "fr1", "fr2", "fr3", "fr4", "fr5", "fr6", "fr7", "fr8", "fr9", "fr10", "fr11", "fr12", "fr13" ); + volatile long nOffsetAndIndex; + + //mr %r3, %r11 # move into arg1 the 64bit value passed from OOo + __asm__ __volatile__ ( + "mr %0, 11\n\t" + : "=r" (nOffsetAndIndex) : ); + volatile long sp; //stack pointer |