On x86 the usual uncommon trap code looks like this:
0x000000010598efb6: mov $0xffffffad,%esi
0x000000010598efbb: callq 0x0000000105965f20 ; OopMap{rbp=Oop [0]=Oop off=64}
;*if_acmpne
; - java.lang.Object::equals@2 (line 149)
; {runtime_call}
0x000000010598efc0: callq 0x00000001048e2834 ; {runtime_call}
The first call is to the uncommon trap blob. The second one comes from the HaltNode basically putting verification code there to make sure we are not returning from the deopt blob. We don't need in a product build.
The Halt node is matched in the .ad files to int3 of the MacroAssembler.
A possible fix would be to change the implementation of MacroAssembler::int3 in all assembler_<os>_x86.cpp files. But that might break some other uses of int3.