diff options
author | Sverker Eriksson <[email protected]> | 2015-04-20 15:52:27 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2015-04-20 15:52:27 +0200 |
commit | 91fb6636f95f882b75170fb77c412ccc4a9b75f4 (patch) | |
tree | 17e33497bf2f9c72f2d096210fc61eb204a38f1d /lib/hipe | |
parent | 545890576542e4be630df8772654b99bd0306f62 (diff) | |
download | otp-91fb6636f95f882b75170fb77c412ccc4a9b75f4.tar.gz otp-91fb6636f95f882b75170fb77c412ccc4a9b75f4.tar.bz2 otp-91fb6636f95f882b75170fb77c412ccc4a9b75f4.zip |
erts,hipe: Fix bug in binary matching of writable binary
Seen symptom: Hipe compiled code with <<C/utf8, ...>> = Bin does sometimes
not match even though Bin contains a valid utf8 character. There might be
other possible binary matching symptoms, as the problem is not utf8
specific.
Problem: A writable binary was not "emasculated" when the matching started
(as it should) by the hipe compiled code.
Fix: Add a new primop emasculate_binary(Bin) that is called when
a matchstate is created.
ToDo: There are probably room for optimization. For example only call
emasculate_binary if ProcBin.flags is set.
Diffstat (limited to 'lib/hipe')
-rw-r--r-- | lib/hipe/rtl/hipe_rtl_binary_match.erl | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/hipe/rtl/hipe_rtl_binary_match.erl b/lib/hipe/rtl/hipe_rtl_binary_match.erl index af8903904b..c906286cb4 100644 --- a/lib/hipe/rtl/hipe_rtl_binary_match.erl +++ b/lib/hipe/rtl/hipe_rtl_binary_match.erl @@ -704,6 +704,7 @@ get_base(Orig,Base) -> hipe_rtl:mk_alu(Base, Orig, 'add', hipe_rtl:mk_imm(?HEAP_BIN_DATA-2)), hipe_rtl:mk_goto(hipe_rtl:label_name(EndLbl)), REFCLbl, + hipe_rtl:mk_call([], emasculate_binary, [Orig], [], [], 'not_remote'), hipe_rtl:mk_load(Base, Orig, hipe_rtl:mk_imm(?PROC_BIN_BYTES-2)), EndLbl]. |