diff options
author | Sverker Eriksson <[email protected]> | 2016-10-31 16:34:53 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2016-10-31 16:34:53 +0100 |
commit | 33a676a965688710c312577171bae7b742703b13 (patch) | |
tree | 6edc4594ad714b6047a286659dfaab5a0c8c8f7c | |
parent | 056789659edec99e5500c4508f00460b98d6c73f (diff) | |
parent | e084d3d77eb15f58b2152e45ef84c27e7cf88403 (diff) | |
download | otp-33a676a965688710c312577171bae7b742703b13.tar.gz otp-33a676a965688710c312577171bae7b742703b13.tar.bz2 otp-33a676a965688710c312577171bae7b742703b13.zip |
Merge branch 'sverker/hipe-beam-stacktrace/ERL-205/OTP-13992' into maint
* sverker/hipe-beam-stacktrace/ERL-205:
erts: Exclude random beam functions from hipe stacktrace
-rw-r--r-- | erts/emulator/hipe/hipe_bif0.c | 4 | ||||
-rw-r--r-- | erts/emulator/hipe/hipe_mode_switch.h | 6 |
2 files changed, 10 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_bif0.c b/erts/emulator/hipe/hipe_bif0.c index 3336fded7a..dcb6c35bfa 100644 --- a/erts/emulator/hipe/hipe_bif0.c +++ b/erts/emulator/hipe/hipe_bif0.c @@ -1476,6 +1476,10 @@ int hipe_find_mfa_from_ra(const void *ra, Eterm *m, Eterm *f, unsigned int *a) struct hipe_mfa_info **bucket; unsigned int i, nrbuckets; + if (hipe_is_ra_mode_switch(ra)) { + return 0; + } + /* Note about locking: the table is only updated from the loader, which runs with the rest of the system suspended. */ /* XXX: alas not true; see comment at hipe_mfa_info_table.lock */ diff --git a/erts/emulator/hipe/hipe_mode_switch.h b/erts/emulator/hipe/hipe_mode_switch.h index c40077d558..e54b81cf78 100644 --- a/erts/emulator/hipe/hipe_mode_switch.h +++ b/erts/emulator/hipe/hipe_mode_switch.h @@ -64,6 +64,7 @@ Eterm hipe_build_stacktrace(Process *p, struct StackTrace *s); ERTS_GLB_INLINE void hipe_reserve_beam_trap_frame(Process*, Eterm reg[], unsigned arity); ERTS_GLB_INLINE void hipe_unreserve_beam_trap_frame(Process*); +ERTS_GLB_INLINE int hipe_is_ra_mode_switch(const void* ra); extern Uint hipe_beam_pc_return[]; extern Uint hipe_beam_pc_throw[]; @@ -112,6 +113,11 @@ ERTS_GLB_INLINE void hipe_unreserve_beam_trap_frame(Process *p) p->stop += 2; } +ERTS_GLB_INLINE int hipe_is_ra_mode_switch(const void* ra) +{ + return ra == nbif_return; +} + #endif /* ERTS_GLB_INLINE_INCL_FUNC_DEF */ #endif /* ASM */ |