aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-09-20 16:16:50 +0200
committerSverker Eriksson <[email protected]>2016-10-14 14:29:16 +0200
commit966098ceb9dd9d18e9bcd37cd06b96045903e320 (patch)
treed1b5690ffb2005d0f2201058011c54f45902b5ac /lib
parente36c8d49359db1622ad381f705c54d460c4fb5e9 (diff)
downloadotp-966098ceb9dd9d18e9bcd37cd06b96045903e320.tar.gz
otp-966098ceb9dd9d18e9bcd37cd06b96045903e320.tar.bz2
otp-966098ceb9dd9d18e9bcd37cd06b96045903e320.zip
erts: Move new hipe ref and sdesc lists to loader state
Diffstat (limited to 'lib')
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl13
-rw-r--r--lib/kernel/src/hipe_unified_loader.erl9
2 files changed, 15 insertions, 7 deletions
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 9a08305686..f53f6d5816 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -1058,8 +1058,8 @@ type(hipe_bifs, enter_code, 3, Xs, Opaques) ->
%% XXX: The tuple below contains integers and
%% is of size same as the length of the MFA list
t_sup(t_nil(), t_binary())]) end, Opaques);
-type(hipe_bifs, enter_sdesc, 1, Xs, Opaques) ->
- strict(hipe_bifs, enter_sdesc, 1, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, enter_sdesc, 2, Xs, Opaques) ->
+ strict(hipe_bifs, enter_sdesc, 2, Xs, fun (_) -> t_nil() end, Opaques);
type(hipe_bifs, find_na_or_make_stub, 1, Xs, Opaques) ->
strict(hipe_bifs, find_na_or_make_stub, 1, Xs,
fun (_) -> t_integer() end, Opaques); % address
@@ -2459,7 +2459,9 @@ arg_types(hipe_bifs, add_ref, 2) ->
[t_mfa(), t_tuple([t_mfa(),
t_integer(),
t_sup(t_atom('call'), t_atom('load_mfa')),
- t_trampoline()])];
+ t_trampoline(),
+ t_atom(),
+ t_binary()])];
arg_types(hipe_bifs, alloc_data, 3) ->
[t_integer(), t_integer(), t_binary()];
arg_types(hipe_bifs, array, 2) ->
@@ -2498,8 +2500,9 @@ arg_types(hipe_bifs, check_crc, 1) ->
[t_crc32()];
arg_types(hipe_bifs, enter_code, 3) ->
[t_binary(), t_sup(t_nil(), t_tuple()), t_binary()];
-arg_types(hipe_bifs, enter_sdesc, 1) ->
- [t_tuple([t_integer(), t_integer(), t_integer(), t_integer(), t_integer(), t_mfa()])];
+arg_types(hipe_bifs, enter_sdesc, 2) ->
+ [t_tuple([t_integer(), t_integer(), t_integer(), t_integer(), t_integer(), t_mfa(), t_atom()]),
+ t_binary()];
arg_types(hipe_bifs, find_na_or_make_stub, 1) ->
[t_mfa()];
arg_types(hipe_bifs, fun_to_address, 1) ->
diff --git a/lib/kernel/src/hipe_unified_loader.erl b/lib/kernel/src/hipe_unified_loader.erl
index 6245646263..cde2eb059a 100644
--- a/lib/kernel/src/hipe_unified_loader.erl
+++ b/lib/kernel/src/hipe_unified_loader.erl
@@ -189,6 +189,7 @@ load_common(Mod, Bin, Beam, Architecture) ->
WordSize = word_size(Architecture),
WriteWord = write_word_fun(WordSize),
LoaderState = hipe_bifs:alloc_loader_state(Mod),
+ put(hipe_loader_state, LoaderState),
%% Create data segment
{ConstAddr,ConstMap2} =
create_data_segment(ConstAlign, ConstSize, ConstMap, WriteWord,
@@ -238,6 +239,7 @@ load_common(Mod, Bin, Beam, Architecture) ->
end,
%% Final clean up.
+ _ = erase(hipe_loader_state),
_ = erase(hipe_patch_closures),
_ = erase(hipe_assert_code_area),
?debug_msg("****************Loader Finished****************\n", []),
@@ -554,7 +556,8 @@ patch_sdesc(?STACK_DESC(SymExnRA, FSize, Arity, Live),
end,
?ASSERT(assert_local_patch(Address)),
MFA = address_to_mfa_lth(Address, FunDefs),
- hipe_bifs:enter_sdesc({Address, ExnRA, FSize, Arity, Live, MFA, get(hipe_patch_closures)}).
+ hipe_bifs:enter_sdesc({Address, ExnRA, FSize, Arity, Live, MFA, get(hipe_patch_closures)},
+ get(hipe_loader_state)).
%%----------------------------------------------------------------
@@ -774,7 +777,9 @@ add_ref(CalleeMFA, Address, FunDefs, RefType, Trampoline, RemoteOrLocal) ->
{M,_,_} = CalleeMFA,
{M,_,_} = CallerMFA;
remote ->
- hipe_bifs:add_ref(CalleeMFA, {CallerMFA,Address,RefType,Trampoline,get(hipe_patch_closures)})
+ hipe_bifs:add_ref(CalleeMFA, {CallerMFA,Address,RefType,Trampoline,
+ get(hipe_patch_closures),
+ get(hipe_loader_state)})
end,
ok.