46
46
* Zero-arity BIFs never signal Erlang-level exceptions,
47
47
* but may signal internal implementaton-level exceptions,
48
48
* currently only TRAP.
49
* - standard: may signal any exception except RESCHEDULE
49
* - standard: may signal any exception
50
50
* The BIF wrapper must check for an exception before returning.
51
* - expensive: may signal any exception including RESCHEDULE
52
* The BIF wrapper must preserve the actual parameters before
53
* calling the C code. After the C code returns, the BIF wrapper
54
* must check for an exception and be prepared to supply the
55
* actual parameters and its own start address to the handler.
58
53
/****************************************************************
65
60
* standard_bif_interface_3(nbif_name, cbif_name)
67
62
* A BIF with implicit P parameter, 1-3 ordinary parameters,
68
* which may fail but not with RESCHEDULE.
69
64
* HP and FCALLS may be read and updated.
70
65
* HP_LIMIT, NSP, NSP_LIMIT, and NRA may not be accessed.
81
* expensive_bif_interface_1(nbif_name, cbif_name)
82
* expensive_bif_interface_2(nbif_name, cbif_name)
83
* expensive_bif_interface_3(nbif_name, cbif_name)
85
* A BIF which may fail with RESCHEDULE, otherwise
86
* identical to standard_bif_interface_N.
90
76
* nofail_primop_interface_0(nbif_name, cbif_name)
91
77
* nofail_primop_interface_1(nbif_name, cbif_name)
92
78
* nofail_primop_interface_2(nbif_name, cbif_name)
112
* expensive_gc_bif_interface_1(nbif_name, cbif_name)
113
* expensive_gc_bif_interface_2(nbif_name, cbif_name)
115
* A BIF which may fail with RESCHEDULE, otherwise
116
* identical to gc_bif_interface_N.
120
98
* gc_nofail_primop_interface_1(nbif_name, cbif_name)
122
100
* A primop with implicit P parameter, 1 ordinary parameter,
160
138
trap_bif_interface_0(nbif_processes_0, processes_0)
163
* BIFs with expensive failure modes.
165
expensive_bif_interface_1(nbif_demonitor_1, demonitor_1)
166
expensive_bif_interface_2(nbif_exit_2, exit_2)
167
expensive_bif_interface_2(nbif_group_leader_2, group_leader_2)
168
expensive_bif_interface_1(nbif_link_1, link_1)
169
expensive_bif_interface_2(nbif_monitor_2, monitor_2)
170
expensive_bif_interface_2(nbif_port_command_2, port_command_2)
171
expensive_bif_interface_1(nbif_process_info_1, process_info_1)
172
expensive_bif_interface_2(nbif_process_info_2, process_info_2)
173
expensive_bif_interface_2(nbif_send_2, send_2)
174
expensive_bif_interface_3(nbif_send_3, send_3)
175
expensive_bif_interface_3(nbif_setnode_3, setnode_3)
176
expensive_bif_interface_2(nbif_suspend_process_2, suspend_process_2)
177
expensive_bif_interface_2(nbif_system_flag_2, system_flag_2)
178
expensive_bif_interface_1(nbif_unlink_1, unlink_1)
179
expensive_bif_interface_2(nbif_erts_debug_set_internal_state_2, erts_debug_set_internal_state_2)
182
141
* BIFs and primops that may do a GC (change heap limit and walk the native stack).
183
142
* XXX: erase/1 and put/2 cannot fail
185
expensive_gc_bif_interface_2(nbif_check_process_code_2, hipe_check_process_code_2)
144
gc_bif_interface_2(nbif_check_process_code_2, hipe_check_process_code_2)
186
145
gc_bif_interface_1(nbif_erase_1, erase_1)
187
146
gc_bif_interface_0(nbif_garbage_collect_0, garbage_collect_0)
188
expensive_gc_bif_interface_1(nbif_garbage_collect_1, hipe_garbage_collect_1)
147
gc_bif_interface_1(nbif_garbage_collect_1, hipe_garbage_collect_1)
189
148
gc_nofail_primop_interface_1(nbif_gc_1, hipe_gc)
190
149
gc_bif_interface_2(nbif_put_2, put_2)