aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2012-10-11 10:23:17 +0200
committerLukas Larsson <[email protected]>2012-10-11 10:23:17 +0200
commit0b7ed35134de2f6a8fe3e3f3fae87c23f71eb391 (patch)
tree5d60e33d6b7a8fa8cb8300083ebf845f2294f75c
parentb563b92deee51e66407663b2e2e9fc4ffeb1c8a9 (diff)
parente978576becd64f0effbc40977ad7efb8a2b31489 (diff)
downloadotp-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
-rw-r--r--erts/emulator/test/binary_SUITE.erl26
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)