mirror of
https://github.com/Xahau/xahaud.git
synced 2026-09-28 16:08:05 +00:00
Api costs were looked up as import_type_map[callee_idx], but that map is keyed by wasm type index while callee_idx is a function index. A hook was charged whichever api happened to occupy the callee's index, or nothing at all when no type carried that index, and imports sharing a signature collapsed to a single cost. Reordering imports was enough to call util_verify, the most expensive api, for free. Costs now come from import_cost_map, keyed by import function index, and import_type_map is reduced to the signature checking it is actually used for. compute_wce() applied the loop multiplier to instruction_count only, so an api call inside a guarded loop was charged for one iteration no matter how many the guard allowed. The multiplier now applies to execution_cost as well, with the same floor instruction_count uses.