Translation storing interface fails to notify all parties
Today, if any client or library requests DR_EMIT_STORE_TRANSLATIONS, DR will not use recreation to translate and will instead rely on persisted data from block creation time. However, all the other clients and libraries may not be aware that one of them requested to store translations, and will be relying on recreation. It seems that the store-translations approach is broken in the presence of multiple components.
Probably the simplest solution is to add a new callback that DR invokes after the basic block callback when someone requested to store translations. Then all components can treat the new callback kind of like a recreation, but they would persist storage of data for translation.
We should also try to provide a way to associate persisted data with a callback by a user_data pointer or something: though we'll have to handle each component having its own pointer. This avoids each party having to keep its own hashtable and worry about lifetime issues with deletion happening independently of a new block at the same tag (xref various issues with that in the past).