Re: [reSIProcate] Conditional compile should not change object sizes
- From: Alan Hawrylyshen <alan@xxxxxxxxxx>
- Date: Thu, 14 Apr 2005 14:26:19 -0600
On Apr 13, 2005, at 13.40, Dennis Dupont wrote:
I have been hit by this twice now:
[snip]
Welcome to this most frustrating and not-nearly-exclusive-enough club!
:-)
It appears somebody tried to address this with the ApiCheck and
ApiCheckList
classes. However, the only way to use them would be to pass each
possibly
affected class and its size to the ApiCheck class, something
cumbersome and
not very robust in terms of keeping up with library changes.
Indeed.
I think a longer term solution would be to make TransportSelector an
interface
class (only pure virtual methods), and use a TransportSelectorFactory
that
could be conditionally compiled to instantiate the correct
implementation
class. This of course has the problem of breaking value semantics
(sigh).
Ideally with the release of the next tarball, this is something that we
really MUST address. The library will have very limited utility if we
cannot create a stable ABI that doesn't change from one compilation /
config cycle to the next. At the most basic level, the size of the
DataStackLocal buffer must be fixed and the objects that are included
conditionally (Security, V6, etc) should all be padded in the cases
where they are absent so we don't have this ABI instability.
Anyone in a position to assist in making these changes? I think they
can all be backwards compatible from an API/CODE point of view, but
obviously not from an ABI point of view.
Cheers,
Alan
a l a n a t j a s o m i d o t c o m