Dynarmic uses semantic versioning, restricting backwards-incompatible
changes to major releases. This backwards compatibility, though, refers
to API changes, and disregards ABI stability. Since having to maintain a
compatible ABI between major releases is somewhat of a pain, and it
arguably doesn't matter that much for dynarmic, setting the SOVERSION to
major.minor allows for breaking ABI changes to be made between feature
releases, and not only major ones.
To be clear, this patch doesn't try to enforce a new policy, but just
reflects how the project has handled ABI changes in the past. That is,
these kind of changes have been made already.
This patch comes as a fix for Debian bug <https://bugs.debian.org/1041270>.
Caught by UBSan. I don't think this has a meaningful performance impact
(especially since the thread state doesn't include floating-point/vector
registers), but I haven't tested it.
src/dynarmic/frontend/A64/translate/impl/simd_table_lookup.cpp:14:31: error: implicit instantiation of undefined template 'std::vector<Dynarmic::IR::TypedValue<Dynarmic::IR::Type::U128>>'
std::vector<IR::U128> result;
^
/usr/include/c++/v1/iosfwd:251:28: note: template is declared here
class _LIBCPP_TEMPLATE_VIS vector;
^
src/dynarmic/frontend/A64/translate/impl/simd_table_lookup.cpp:13:34: error: no matching member function for call to 'VectorTable'
const IR::Table table = v.ir.VectorTable([&] {
~~~~~^~~~~~~~~~~
src/dynarmic/../dynarmic/ir/ir_emitter.h:313:11: note: candidate function not viable: cannot convert argument of incomplete type 'void' to 'std::vector<U64>' (aka 'vector<TypedValue<Type::U64>>') for 1st argument
Table VectorTable(std::vector<U64> values);
^
src/dynarmic/../dynarmic/ir/ir_emitter.h:314:11: note: candidate function not viable: cannot convert argument of incomplete type 'void' to 'std::vector<U128>' (aka 'vector<TypedValue<Type::U128>>') for 1st argument
Table VectorTable(std::vector<U128> values);
^