Twice this year I've been asked to help people figure out why the size of a
structure seemed to vary. The reason was that it contained a function
pointer, and that function pointers size varied due to changes in how the
code was compiled. Pure evil. The techniques for investigating such problems
are not at all obvious. Ping me and I can send along my notes, which might
be helpful.
For the 64-bit ABI some things you could look at are:
- How parameters are passed (first registers, then memory), mixed parameters
(float and int), and how well it handles m128 parameters
- Perhaps discuss the home space (memory on the stack left for registers
that are passed even if they never go there)
- Different exception handling support (metadata instead of linked-list of
handlers)
- Different stack walking model (metadata instead of linked-list of stack
frames)
- Different standard for where float results are returned
- Stack pointer that never changes throughout a function (parameters to
called functions are placed not pushed)
There are numerous advantages to this, although it can make stack walking
slightly more expensive and arguably less obvious.
That's all that comes to mind. It's probably way more than you are planning
to cover, but I figured it's always helpful to know where some of the
interesting/sharp areas are when you start investigating.