Object file questions
Johannes Pfau via D.gnu
d.gnu at puremagic.com
Sun Aug 17 07:45:15 PDT 2014
Am Sun, 17 Aug 2014 14:36:53 +0000
schrieb "Timo Sintonen" <t.sintonen at luukku.com>:
> On Sunday, 17 August 2014 at 13:59:03 UTC, Artur Skawina via
> D.gnu wrote:
> > On 08/17/14 15:44, Timo Sintonen via D.gnu wrote:
> >
> >> I am compiling for arm and I am sorry I misinterpreted the
> >> optimized code. Actually the code is correct but it still does
> >> not work.
> >> The problem is that the call to get the tls pointer for
> >> volatile_dummy seems to corrupt the register (r3) where the
> >> this pointer is. The call is inside the while loop. After
> >> removing tha call by hand in the assembly everything works. R3
> >> is usually pushed into stack when it is used in a function. I
> >> have to check what is wrong in this case.
> >
> > Does declaring it as:
> >
> > extern __gshared int volatile_dummy;
> >
> > help?
> >
> > artur
>
> Yes, now it works.
>
> But the register corruption is still an issue. My tls function
> clearly uses r3 and does not save it.
>
> Johannes, do you know the arm calling system? Is it caller or
> callee that should save r3?
> In this case it is my function that has one function inlined that
> has another function inlined that contains a compiler generated
> function call. Could this be a bug in the compiler that it does
> not recognize the innermost call and does not save registers?
r3 is an argument/scratch register, the callee can't rely on its
contents after a function call. This could also be caused by the inline
ASM.
More information about the D.gnu
mailing list