On 9/11/24 18:03, Sami Tolvanen wrote: > On Wed, Sep 11, 2024 at 3:08 AM Petr Pavlu <petr.pavlu@xxxxxxxx> wrote: >> On 8/15/24 19:39, Sami Tolvanen wrote: >> More importantly, it made me think which names are included in the CRC >> calculation and which ones are omitted. >> >> If I'm looking correctly, names of structs, enums and enumerators make >> it into the calculation. On the other hand, names of struct members, >> function parameters and exports (functions/variables) are missing. >> >> I think the names of struct members and function parameters should be >> added as well. If the code changes 'struct A { int cols; int rows; }' to >> 'struct A { int rows; int cols; }' then that should be recognized as >> a different API/ABI. The same applies to function parameters. > > I did leave out member names because typically renaming a member > doesn't change the ABI, but you're right, it might help capture these > types of changes where fields with identical types are reordered for > some reason. I'll add names. > >> I'm not sure about export names. I would probably include them as well, >> if only for consistency. > > I would rather leave out the symbol names to have consistent CRCs > between symbols that have identical types. Or is there an actual > benefit in including the symbol name in the CRC? The names are already > rather explicitly involved when symbol versions are checked. Ok with me. I can't think of a strong argument to do it one way or the other. -- Petr