Re: gcc 4.1.1 MIPS problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Kaz Kylheku wrote:
> Hi Everyone,
>
> I don't have a lot of detailed information about this bug; it comes to
> me second hand. I don't have a minimal test case to reproduce it (I
> eventually will). But I was wondering whether anyone has seen anything
> like this.
>
> The generated code for a C++ class member function saves the gp
> register on the stack. Smack in the middle,  it suddenly decides to
> restore the value of that register from the stack. After that, a
> shared library call fails (gp is used to hold the base addresses of
> global offset tables). The gp points to the wrong GOT.
>
> Making some trivial perturbation in the source code makes the problem
> go away. The change is alon the lines of uncommenting a function call
> like this:
>
> void Foo::Bar()
> {
>  /* ... */
>
>  // uncomment the following, problem goes away.
>  // int notused = memberPointer->inlineFunction();
>
>  if (somecondition() || memberPointer->inlineFunction() != FOO) ...
>
> Very strange.
>
> Sorry to post crap like this with no useful information, but it was
> reported to me late Friday evening just before going home. :)
>
> My question is, under what conditions would the compiler ever want to
> restore the caller's value for the global offset pointer and actually
> use it, rather than just restore it before returning to the caller?
None that I can think of.

Unless you want to fix it your self, a self contained test case logged
to http://gcc.gnu.org/bugzilla/ is the best bet for getting the problem
solved.  Alternately try 4.2 or 4.3.

David Daney

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux