This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Different invariants about the contents of static links


"Rodney M. Bates" <rbatesjk@cox.net> writes:

> I don't understand this.  A pointer to anywhere in an activation record
> (or even outside it, if outside by a fixed offset) allows access to
> exactly the same set of things as any other, including the value the base
> register holds when the activation record is current.  That set is everything
> in the AR, using different but still fixed displacements, and nothing more,
> since everything else is not necessarily at a fixed displacement from the
> AR.

OK, let me reset.

It seemed to me that you were suggesting that the static link pointer
should always be a constant offset from the frame pointer.

gcc doesn't work that way, though.  Here is a simple counter-example.

int
foo (int x, int y)
{
  int
  s1 ()
  {
    if (--y == 0)
      return 0;
    return x + s1 ();
  }

  return s1 ();
}

If you compile this code, you will see that the static link pointer is
passed down unchanged through the recursive calls.  The frame pointer
is, of course, different for each call.  You can't compute the static
link pointer from the frame pointer.  It's completely independent.

If this is not a counter-example for what you want, then I think we
need a clearer explanation of what you want.

Ian


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]