Actions

icon Post
text/html Subscribe
text/html Unsubscribe

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

Re: [cxx-abi-dev] Question about guard variable types


  • To: Martin v. Löwis <martin@xxxxxxxxxxx>, "cxx-abi-dev@xxxxxxxxxxxxxxxx" <cxx-abi-dev@xxxxxxxxxxxxxxxx>
  • Subject: Re: [cxx-abi-dev] Question about guard variable types
  • From: Mark Mitchell <mark@xxxxxxxxxxxxxxxx>
  • Date: Fri, 06 Dec 2002 09:22:58 -0800

(Note that even though the __cxa_guard functions are extern "C" you
can still observe their types; take their addresses.)

But that is not relevant for the ABI, is it?

Well, the ABI has this little API part. :-)  The <cxxabi.h> header
is documented and required.  You can use it in low-level
applications -- one good example would be if you're writing a C++
interpreter that wants to interact correctly with compiled C++
object files.  (This was CenterLine's ObjectCenter product.)

All of the other functions have portable types; why not this one?

In what way would you have to change g++? I.e. on what system does it
support a type long long which has not exactly 8 bytes?

Well, the runtime is broken, as Richard Henderson pointed out; we use
"mode((DI))" which needn't be 64 bits.  There's certainly nothing to
keep someone from making a GCC port where "long long" isn't 64 bits;
I don't know whether there already is such a thing in the FSF tree or
not.

I claim that g++ conforms to the ABI, as both the ABI and g++ are, in
this very moment.

But if that's true, then it's harmless to make the ABI say "long long"
to match.

The point is that the G++ front end explicitly uses "long long" -- not
"64-bit type" -- when constructing a guard variable.

There are two cases:

1) Those things are always the same, in which case we may as well say
  "long long" in the ABI so that things match up and we have a
  well-defined type for the function, and so that a new GCC port
  doesn't accidentally stray from the ABI, or;

2) Those things are not always the same, in which case something needs
  to change, and G++'s widespread deployment would argue for the ABI
  changing.

--
Mark Mitchell                mark@xxxxxxxxxxxxxxxx
CodeSourcery, LLC            http://www.codesourcery.com