Fixes two races with shared ibt tables:
-
Adding a new table entry must write the start_pc before the tag. This is accomplished with a new ENTRY_SET_TO_ENTRY hashtablex.h optional specifier. For ARM #2502 a new MEMORY_STORE_BARRIER macro is added.
-
Resizing a table must not clear the tags in the old table to avoid losing the tag on the target_delete ibl path.
Adds a test api.ibl-stress which uses the DR IR to synthetically construct thousands of basic blocks with indirect branches betweent them.
To make the test work, relaxes several is-on-stack checks to support pre-building basic blocks (#2463 (closed)) from generated code or other locations not known prior to starting the application.
Issue: #3098 (closed), #2502, #2463 (closed)
Fixes #3098 (closed)