aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2013-02-20 15:57:22 +0100
committerSverker Eriksson <[email protected]>2013-02-20 15:58:05 +0100
commitcff50efe0cd9dd3e70341142d52b1865a58ea41e (patch)
tree1cec87969b6cbaeb3c332b74a6e860795c854cab /erts
parent973eecebb6ba42f44f44a9166cb861818b3f9265 (diff)
parenta3158a1e6b7c5a0e6721dab3618b772068903fd4 (diff)
downloadotp-cff50efe0cd9dd3e70341142d52b1865a58ea41e.tar.gz
otp-cff50efe0cd9dd3e70341142d52b1865a58ea41e.tar.bz2
otp-cff50efe0cd9dd3e70341142d52b1865a58ea41e.zip
Merge branch 'sverk/is_module_native-fix'
* sverk/is_module_native-fix: erts: Fix code:is_module_native OTP-10870
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/beam_bif_load.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c
index 73264214ce..8a8239493a 100644
--- a/erts/emulator/beam/beam_bif_load.c
+++ b/erts/emulator/beam/beam_bif_load.c
@@ -1081,7 +1081,21 @@ beam_make_current_old(Process *c_p, ErtsProcLocks c_p_locks, Eterm module)
static int
is_native(BeamInstr* code)
{
- return ((Eterm *)code[MI_FUNCTIONS])[1] != 0;
+ Uint i, num_functions = code[MI_NUM_FUNCTIONS];
+
+ /* Check NativeAdress of first real function in module
+ */
+ for (i=0; i<num_functions; i++) {
+ BeamInstr* func_info = (BeamInstr *) code[MI_FUNCTIONS+i];
+ Eterm name = (Eterm) func_info[3];
+
+ if (is_atom(name)) {
+ return func_info[1] != 0;
+ }
+ else ASSERT(is_nil(name)); /* ignore BIF stubs */
+ }
+ /* Not a single non-BIF function? */
+ return 0;
}