diff options
author | Lukas Larsson <[email protected]> | 2012-10-11 10:23:17 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2012-10-11 10:23:17 +0200 |
commit | 0b7ed35134de2f6a8fe3e3f3fae87c23f71eb391 (patch) | |
tree | 5d60e33d6b7a8fa8cb8300083ebf845f2294f75c /erts | |
parent | b563b92deee51e66407663b2e2e9fc4ffeb1c8a9 (diff) | |
parent | e978576becd64f0effbc40977ad7efb8a2b31489 (diff) | |
download | otp-0b7ed35134de2f6a8fe3e3f3fae87c23f71eb391.tar.gz otp-0b7ed35134de2f6a8fe3e3f3fae87c23f71eb391.tar.bz2 otp-0b7ed35134de2f6a8fe3e3f3fae87c23f71eb391.zip |
Merge branch 'lukas/erts/bad_terms_hipe_skip/OTP-10375'
* lukas/erts/bad_terms_hipe_skip/OTP-10375:
Skip fun corruption when lists is native
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/test/binary_SUITE.erl | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/erts/emulator/test/binary_SUITE.erl b/erts/emulator/test/binary_SUITE.erl index 58e0cb4096..babdb3363f 100644 --- a/erts/emulator/test/binary_SUITE.erl +++ b/erts/emulator/test/binary_SUITE.erl @@ -626,8 +626,32 @@ safe_binary_to_term2(Config) when is_list(Config) -> bad_terms(suite) -> []; bad_terms(Config) when is_list(Config) -> ?line test_terms(fun corrupter/1). - + +corrupter(Term) when is_function(Term); + is_function(hd(Term)); + is_function(element(2,element(2,element(2,Term)))) -> + %% Check if lists is native compiled. If it is, we do not try to + %% corrupt funs as this can create some very strange behaviour. + %% To show the error print `Byte` in the foreach fun in corrupter/2. + case erlang:system_info(hipe_architecture) of + undefined -> + corrupter0(Term); + Architecture -> + {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists), + ChunkName = hipe_unified_loader:chunk_name(Architecture), + NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]), + case NativeChunk of + {ok,{_,[{_,Bin}]}} when is_binary(Bin) -> + S = io_lib:format("Skipping corruption of: ~P", [Term,12]), + io:put_chars(S); + {error, beam_lib, _} -> + corrupter0(Term) + end + end; corrupter(Term) -> + corrupter0(Term). + +corrupter0(Term) -> ?line try S = io_lib:format("About to corrupt: ~P", [Term,12]), io:put_chars(S) |