This is the mail archive of the gcc-patches@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: [Patch] Put warning into documentation of attribute "regparm"


Fergus Henderson <fjh@cs.mu.oz.au> writes:
>
> However, presumably the problem could be worked around by just not using
> lazy binding, e.g. by linking with `-z now'?

Looks like that's true, on a per-module basis.

> If so, saying that the attribute is "unsuitable for
> global functions in shared libraries" is a little bit too strong.
> "unsuitable for global functions in shared libraries that use lazy binding"
> would be more accurate

I think I went through a version with it like that, then decided to
describe primarily the usual behaviour, in the interests of brevity.

> (and then you could mention that lazy binding is
> the default, and how to disable it).

Perhaps the following, with the last sentence deliberately
non-committal, so as not to repeat what ld and ld.so should be
describing.


Beware that on some ELF systems this attribute is unsuitable for
global functions in shared libraries with lazy binding (which is the
default).  Lazy binding will send the first call via resolving code in
the loader, which might assume EAX, EDX and ECX can be clobbered, as
per the standard calling conventions.  Solaris 8 is affected by this.
GNU systems with GLIBC 2.1 or higher, and FreeBSD, are believed to be
safe since the loaders there save all registers.  (Lazy binding can be
disabled with the linker or the loader if desired, to avoid the
problem.)


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