Age | Commit message (Collapse) | Author |
|
We want to be able to write type specifications for BIFs in the same
way as for any other function. Currently, the type for BIFs need
to be described in erl_bif_types.
To avoid extending the compiler and Dialyzer with special directives
for providing specifications for BIFs, we have decided to let the
loader accept a local definition for a function which exists as a
BIF. As an example, here is how a stub for lists:reverse/2 can be
defined:
-export([reverse/2]).
-spec reverse([term()], term()) -> [term()].
reverse(_, _) ->
erlang:nif_error(undef).
Essentially, the loader will discard the local definition of reverse/2.
Other functions in the same module must *not* do local calls to a BIF
stub. If a local call to a BIF is found, the loader will refuse to load
the module. That is, the following call is not allowed:
reverse(List) ->
reverse(List, []).
but the following is:
reverse(List) ->
?MODULE:reverse(List, []).
A few words about the implementation.
It turns out to be too complicated to actually discard the BIF
stubs. Although it would be possibly with some jiggery pokery in
ops.tab, the code would be difficult to maintain and it could slow
down loading of modules that don't define BIFs (which are almost
all modules).
Therefore, the stub functions are kept in the loaded code, but
their names in the func_info instruction are invalidated so that
module_info(functions) can filter them out.
|
|
For errors that occur after reading the code chunking, saying
that the error occurred in the last function in the module and
in the instruction int_code_end/0 is just confusing.
|
|
The idea was probably to cause less fragmentation. Even if that would
be true, it is irrelevant because the short-lived allocator that is
used does not have any problems with fragmentation.
In CodeNeed() we will simply double the size of the area used for code
instead of using the next heap size.
|
|
It is wrongly assumed in the BEAM loader that apply/2 is a BIF
and must be treated specially. Also make it clearer in ops.tab
that apply/3 is a BIF, but apply/2 is not.
|
|
* egil/fix-compiler-warnings:
erts: Use re instead of regexp in testsuite
erts: Remove unused code in testsuites
orber: Use modern list guard in testsuite
orber: Ignore unused variable in orber_tb.erl
xmerl: Ignore unused variable in xmerl_uri.erl
syntax_tool: Add missing type information
hipe: Suppress warnings for unused variables
hipe: Add type information to cfg_info record
tools: Use literal formatting in erl_memory.c
asn1: Remove unused variable in asn1_erl_nif.c
ei: Remove unused variable in ei_format.c
erts: Add missing prototype to DRIVER_INIT
runtime_tools: Fix signedness in trace_ip_drv.c
to_erl: Remove compiler warnings
heart: Suppress compiler warnings
erts: Remove compiler warnings in inet_gethost.c
erts: Remove dead code in inet_gethost.c
erts: Remove dead code
|
|
|
|
* The DRIVER_INIT macro will now produce an prototype for
the driver_init() function in addition to previous
behaviour.
|
|
|
|
|
|
|
|
|
|
Conflicts:
erts/vsn.mk
|
|
I/O events could potentially be delayed for ever when enabling
kernel-poll on a non-SMP runtime system executing on Solaris. When
also combined with async-threads the runtime system hung before
completing the boot phase. This bug was introduced in
erts-5.9/OTP-R15B.
|
|
It is possible also in non-SMP case:
1. The process receives an exit signal and is set in status exiting
and inserted into the run queue.
2. The distribution port exits before the process has been selected
for execution and cannot remove the link half on the process since
it is in status exiting.
3. Process is selected for execution and when removing this link half
the distribution channel is gone!
|
|
* rickard/alloc-opt/OTP-7775:
Fix thread progress debug code for has_reached_wakeup()
|
|
|
|
* pan/win64-fixes:
Update INSTALL-WIN32.md to reflect changes in R15B
Make erl_alloc.c use correct strtol variant on windows
Set absolute limit on number of threads in ethread_SUITE
OTP-9130
|
|
|
|
* raimo/64-bit-driver-api/OTP-9795: (22 commits)
driver_SUITE.erl: Fix sys info drivers
emulator test drivers: Conform to updated driver API
runtime_tools's drivers: Conform to updated driver API
ws's xwe_driver.c: Conform to updated driver API
megaco's flex scanner: Conform to updated driver API
seq_trace_SUITE_data/echo_drv.c: Conform to updated driver API
erl_interface tests: Conform port_call_drv.c updated driver API
erl_drv_thread_SUITE_data/testcase_driver.c: Conform to updated driver API
float_SUITE_data/fp_drv.c: Conform to updated driver API
port_SUITE_data/*_drv.c: Conform to updated driver API
port_bif_SUITE_data/control_drv.c: Conform to updated driver API
send_term_SUITE_data/send_term_drv.c: Conform to updated driver API
system_profile_SUITE_data/echo_drv.c: Conform to updated driver API
trace_port_SUITE_data/echo_drv.c: Conform to updated driver API
Remove support for old drivers without ERL_DRV_EXTENDED_MARKER
built-in drivers: Add ERL_DRV_EXTENDED_MARKER and version numbers
Bump driver version to 2.0
erl_driver.h: Enlarge type on return value from call
erl_driver.h: Enlarge types on driver callbacks output, control and call
erl_driver.h: Enlarge types in driver output functions
...
Conflicts:
erts/emulator/test/driver_SUITE_data/monitor_drv.c
erts/emulator/test/driver_SUITE_data/timer_drv.c
|
|
|
|
|
|
|
|
While at it, include <string.h> to eliminate warnings.
|
|
While at it, eliminate compilation warnings.
Eliminate the control callback if it is not used.
|
|
Also include <string.h> to include a prototype for memcpy().
|
|
|
|
While at it, also eliminate all compiler warnings. Also remove
the control callback since it is not actually used.
|
|
While at it, also eliminate all compiler warnings.
|
|
Because of the extensive changes in the driver API (and especially
the change of return types for callbacks such as 'control'), we
can no longer allow drivers without version numbers.
|
|
|
|
|
|
|
|
|
|
* rickard/alloc-opt/OTP-7775:
Fix erts_thr_progress_wakeup()
|
|
|
|
* origin/pan/hipe-alignment-warning:
Declare hipe_mode_switch_debug extern in header
|
|
|
|
* lukas/bugs_and_tc_fixes:
Fix test_server test makefile for windows
Only step pointer arity steps
Link with LIBS after ETHR_LIBS
Save +M<S>t data as true or false, not the number
Return true/false instead of num for +M<S>t info
Return correct format for info about sys_alloc
Add explanatory text for tc failure
OTP-9800
|
|
OTP-7775
|
|
OTP-7775
|
|
* ta/sendfile/OTP-9240:
Do not use async threads on DARWIN
Fix cleanup when sendfile process crashes
Return {error,closed} from sendfile if closed
Do not use SFV_NOWAIT as it does not exist on all solaris
Clarify some code comments
Make solaris use sendfilev
|
|
* rickard/generic-thr-queue/OTP-9632:
Give elements of lock-free queues some time to be deallocated
Fix cleanup of elements in lock-free queues
|
|
* sverk/misc-valgrind-fixes:
erts: Suppress valgrind warning about syscall sendmsg
erts: Fix memory leak in test drivers
erts: Small fix in inet_drv.c:sctp_set_opts
|
|
|
|
When sendfile crashes during a send there should be no
error_logger printouts about stolen fds.
|
|
* egil/file-info-opt-utc/OTP-7687: (39 commits)
Remove time_t specific test in prim_file_SUITE
Update prim_file.beam and prim_zip.beam
Add types for posixtime_to_universaltime and the reverse
Set BASEYEAR to 1902
Set lower limit of years handled to 1601
Emulate localtime, gmtime and mktime to enable negative time_t
Document file:*_file_info/2
Fix compiler warning in unix_efile.c
Change name of bif universaltime_to_seconds/1
Change options to prim_file:*_file_info/*
Remove dead code
Catch errors from prim_file:*_file_info
Testcase for utc <-> seconds conversion
Fix negative time in seconds_to_universaltime/1
Remove OS taint from datetime conversion
Add utc <-> seconds conversions bifs
Let prim_file validate ctime in file_info
Teach #file_info spec unix epochs for file times
Add file_info_opt tests in prim_file_SUITE
unix_efile: Zero is a valid number in utime
...
Conflicts:
erts/emulator/beam/erl_time_sup.c
erts/emulator/sys/win32/erl_win_sys.h
erts/emulator/sys/win32/sys_time.c
|
|
|
|
|
|
|
|
|