Our C++ Smart Differencer tool compares two source files and reports differences in terms of language structures (identifiers, expressions, statements,...) and plausible editing actions (insert, delete, move, copy, replace-identifier, ...).
It doesn't answer the ABI question directly, but the information it provides might be pretty helpful. An example discussed in another answer is change-of-return-type from struct {a,b} to struct {b,a}. SmartDifferencer would report that a was moved. (Note: a regular diff tool would report the that line containing the struct definition was changed, so you kind of get the same information, but SmartDifference will ignore changes in whitespaces/layout and comments, too, producing less conceptual noise).
What neither of these tools will report is the change of the definition of a typedef, it is in another header file. But then presumably one would compare all header files involved. If you don't want to do this manually, whatever tool is in use must included essentially a full C++ parser, name resolver, and must compare the declarations for equivalence. Another poster suggested pretty much that answer: comparing GCCXML output for equivalence. I'm not sure how easy that is in practice; it can't be just "are the files the same XML in order?".