aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
AgeCommit message (Collapse)Author
2010-05-20erts: Stop supporting non-literal empty tuplesBjörn Gustavsson
Since R12B, empty tuples are literals. Thus the compiler will no longer generate the instruction: put_tuple 0 Destination for creating an empty tuple. It is now time to stop supporting that instruction in the run-time system. While we are at it, correct a typo.
2010-05-20Merge branch 'pan/otp_8217_binary' into devErlang/OTP
* pan/otp_8217_binary: Add documentation for binary module Add more tests and make some go easier on small systems Correct Boyer More and trapping for longest_common_suffix Add longer timetrap to testcases and add binary to app file Add guard BIFs binary_part/2,3 Add binary:{encode,decode}_unsigned({1,2} Add referenced_byte_size/1 Add binary:list_to_bin/1 and binary:copy/1,2 Add bin_to_list/{1,2,3} Add binary:longest_common_prefix/longest_common_suffix Add binary:part to erl_bif_binary.c Move binary module bif's to erl_bif_binary.c Count reductions for process even when not trapping Add random compare testcase Teach BIF's binary:match/matches interrupting/restarting Teach binary.c the semantics to take longest instead of shortest match Initial commit of the binary EEP OTP-8217 Implement EEP31 The module binary from EEP31 (and EEP9) is implemented.
2010-05-17Add documentation for binary modulePatrik Nyblom
Correct behaviour of copy/2 witn 0 copies.
2010-05-17Add more tests and make some go easier on small systemsPatrik Nyblom
Even more tests added to cover more error cases, some tests made easier on systems with small memories and timeouts made longer due to timetraps on solaris daily builds.
2010-05-17Correct Boyer More and trapping for longest_common_suffixPatrik Nyblom
Add testcases and clean up to get better code coverage.
2010-05-17Add guard BIFs binary_part/2,3Patrik Nyblom
Add the gc_bif's to the VM. Add infrastructure for gc_bif's (guard bifs that can gc) with two and. three arguments in VM (loader and VM). Add compiler support for gc_bif with three arguments. Add compiler (and interpreter) support for new guard BIFs. Add testcases for new guard BIFs in compiler and emulator.
2010-05-17Add binary:{encode,decode}_unsigned({1,2}Patrik Nyblom
Add testcases for encode/decode_unsigned/1,2.
2010-05-17Add referenced_byte_size/1Patrik Nyblom
Add testcases for referenced_byte_size/1. Add failure tests for referenced_byte_size.
2010-05-17Add binary:list_to_bin/1 and binary:copy/1,2Patrik Nyblom
Add testcases for binary:list_to_bin/1 and binary:copy/1,2. Add reference implementation of list_to_bin/1.
2010-05-17Add bin_to_list/{1,2,3}Patrik Nyblom
Add testcases for bin_to_list. Teach binref.erl bin_to_list.
2010-05-17Add binary:longest_common_prefix/longest_common_suffixPatrik Nyblom
Add allcoator parameter to erts_get_aligned_binary_bytes_extra. Add testcases for the functions above. Add reference implementation for the functions above.
2010-05-17Add binary:part to erl_bif_binary.cPatrik Nyblom
Change name of the 'scope' option for binary:match/matches. Add split and replace to binary.erl. Cleanup comments etc in binary.erl and atom.names Add testcases for part, split, replace and scopes.
2010-05-17Move binary module bif's to erl_bif_binary.cPatrik Nyblom
2010-05-17Count reductions for process even when not trappingPatrik Nyblom
Set loop factors to 10. Teach erts_debug:set_internal_state to limit loop factor for binary. Add random tests for matches and match with multiple searchstrings.
2010-05-17Add random compare testcasePatrik Nyblom
Fix heap-hole when trapping in binary.c Fix boyer more segfaulting when searchstring is longer than haystack
2010-05-17Teach BIF's binary:match/matches interrupting/restartingPatrik Nyblom
Add Boyer More implementation of binary:matches. Cleanup and removed unused code.
2010-05-17Teach binary.c the semantics to take longest instead of shortest matchPatrik Nyblom
Add testcase embryos and reference implementation. Change name of compile function according to EEP31.
2010-05-17Initial commit of the binary EEPPatrik Nyblom
2010-05-15fix livelock in erts_poll_info_kp()Mikael Pettersson
erts_poll_info_kp() [defined in erts/emulator/sys/common/erl_poll.c via some name-mangling trickery] contains a code path that can end up in an infinite loop, causing a livelock. There is a block of code inside #if ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE that is supposed to iterate over a linked list of ErtsPollSetUpdateRequestsBlocks and update two variables based on the sizes of these blocks. The bug is that the loop forgets to advance the list pointer to the next element, so if the loop is entered at all (the initial list pointer is non-NULL), the thread falls into an infinite loop. This patch, against R13B03 but applies fine to today's git, fixes the bug by adding a statement to advance the list pointer in the loop. All other loops over this list appear to be correct. Thanks to Chetan Ahuja for the original report of a livelock problem in erts_poll_info_kp().
2010-05-12Merge branch 'bg/opt-receive' into devErlang/OTP
* bg/opt-receive: Test that gen_server:call/2,3 are fast even with a huge message queue erts: Add tests for the receive optimization Update primary bootstrap erts: Implement recv_mark/1 and recv_set/1 for real compiler tests: Cover the error handling code in beam_receive compiler test: Test optimization of receive statements Optimize selective receives in the presence of a large message queue Introduce the new recv_mark/1 and recv_mark/1 instructions Compile tests that communicate with R12 nodes with the r12 option Move p_run/2 to test_lib gen: Inline wait_resp_mon/2 to help the compiler optimize OTP-8623 bg/opt-receive reveive statements that can only read out a newly created reference are now specially optimized so that it will execute in constant time regardless of the number of messages in the receive queue for the process. That optimization will benefit calls to gen_server:call(). (See gen:do_call/4 for an example of a receive statement that will be optimized.)
2010-05-11erts: Add tests for the receive optimizationBjörn Gustavsson
2010-05-11erts: Implement recv_mark/1 and recv_set/1 for realBjörn Gustavsson
The recv_mark/1 instruction will both save the current position in the message queue and a mark (the address of the loop_rec/2 instruction just following the recv_set/1 instruction). The recv_mark/1 instruction will only use the saved position if the mark is correct. The reason for saving and verifying the mark is that the compiler does not need to guarantee that no other receive instruction can be executed in between the recv_mark/1 and recv_set/1 instructions (the mark will be cleared by the remove_message/0 instruction when a message is removed from the message queue). That means that arbitrary function calls in between those instruction can be allowed.
2010-05-11Introduce the new recv_mark/1 and recv_mark/1 instructionsBjörn Gustavsson
Make the recv_mark/1 and recv_mark/1 instructions known to the compiler and run-time system. For the moment, make the loader ignore any occurrences of those instructions in BEAM files. Also update hipe_beam_to_icode to ignore those instructions.
2010-05-11Compile tests that communicate with R12 nodes with the r12 optionBjörn Gustavsson
R12 nodes cannot load code that use the optimized receive that we are about to implement.
2010-05-05OTP-8581 Revert prototype of driver_asyncPatrik Nyblom
2010-05-03allow open_port to set env vars containing a trailing '=' characterSteve Vinoski
The erlang:open_port spawn and spawn_executable directives can include an {env, Env} directive to set up environment variables for the spawned process. A bug in ert/emulator/sys/unix/sys.c prevented applications from using {env, Env} to set an environment variable whose value ended with a '=' (equal sign) character; the code mistook the trailing equal sign as an indication that an environment variable was to be cleared from the environment of the spawned process. For example, passing an {env, Env} of {env, [{"foo", "bar="}]} would result in the code in sys.c seeing a string of the form "foo=bar=" The code would see the final '=' character and assume the directive wanted to clear a variable named "foo=bar" from the environment of the spawned process, rather than seeing it as a directive to set the environment variable "foo" to the value "bar=". Fix this problem and add a new regression test for it to the port test suite.
2010-05-02Merge branch 'bg/remove-stray-ose-support' into devErlang/OTP
* bg/remove-stray-ose-support: configure: Remove stray OSE/Delta support Makefiles: Remove stray OSE/Delta support kernel tests: Remove stray OSE/Delta support system tests: Remove stray OSE/Delta support erl_interface tests: Remove stray OSE/Delta support epmd: Remove stray OSE/Delta support epmd: #ifdef out start_epmd() for other platforms than VxWorks emulator tests: Remove stray OSE/Delta support emulator: Remove stray OSE/Delta support emulator: Eliminate #ifdef for sys_tty_reset() test_server: Remove stray support for OSE/Delta OTP-8585 bg/remove-stray-ose-support
2010-04-30Makefiles: Remove stray OSE/Delta supportBjörn Gustavsson
2010-04-30emulator tests: Remove stray OSE/Delta supportBjörn Gustavsson
2010-04-30emulator: Remove stray OSE/Delta supportBjörn Gustavsson
2010-04-30emulator: Eliminate #ifdef for sys_tty_reset()Björn Gustavsson
In the erts/emulator/beam sources #ifdef SOME_OPERATING_SYSTEM should be avoided. Instead, call a function implemented in sys/OPERATING_SYSTEM/sys.c.
2010-04-28OTP-8591 Race in mseg cashe on non-SMP with async threadsSverker Eriksson
Fix memory management bug causing crash of non-SMP emulator with async threads enabled. The bug did first appear in R13B03.
2010-04-28OTP-8474 NIF improvements after R13B04Sverker Eriksson
New NIF API function enif_make_new_binary
2010-04-20re: Fix non-termination for a certain regular expressionMichael Santos
The following code never terminates: fail() -> Str = "http:/www.flickr.com/slideShow/index.gne?group_id=&user_id=69845378@N0", EMail_regex = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+" ++ "(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" ++ "@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+" ++ "(?:[a-zA-Z]{2}|com|org|net|gov|mil" ++ "|biz|info|mobi|name|aero|jobs|museum)", io:format("about to run...~n"), Ret = re:run(Str, EMail_regex), io:format("Ret is ~p~n", [Ret]). Fix it by having pcre_exec remember match_call_count between restarts. Reported-by: Gordon Guthrie Acked-by: Patrik Nyblom
2010-04-14MacOS X: Boost default stack sizeBjörn Gustavsson
The default stack size on MacOS X for the SMP emulator is too small to support all uses of pcre. For example, the following expression N = 819, re:compile([lists:duplicate(N, $(), lists:duplicate(N, $))]). will cause a stack overflow. By bisection of different values for the +sss option, I found that 166 is the smallest value that avoids the crash. Round that up to 256 to give a nice, round power of 2 and a resonable safety margin. Use that value as a default stack size on MacOS X only.
2010-04-14Fix check for compile workspace overflowMichael Santos
Patch from: http://vcs.pcre.org/viewvc/code/trunk/pcre_compile.c?r1=504&r2=505&view=patch Test case: N = 819, re:compile([lists:duplicate(N, $(), lists:duplicate(N, $))]). Compiling large regular expressions could overflow the workspace buffer. Modify the test to check for a value smaller than the buffer size.
2010-04-13Merge branch 'bg/fconv' into devErlang/OTP
* bg/fconv: erts: Fix loading of modules with invalid floating point arithmetic
2010-04-08system_info(procs): Fix the value for "OldHeap unused"Satoshi Kinoshita
The value for "OldHeap unused" in the output of erlang:system_info(procs) and in crash dumps, was incorrectly calculated as the size of the entire old heap.
2010-04-07erts: Fix loading of modules with invalid floating point arithmeticBjörn Gustavsson
The following program is supposed to cause an exception at run-time: foo() -> Sum1 = Sum2 = N = 2, pSum - (Sum1*(Sum2/N)). but the loader fails to load because it contains the following instruction: fconv {atom,pSum} {fr,2} Fix the loader so that it can handle fconv instructions where the first operand is a non-numeric literal. Reported-by: Torbjörn Törnkvist
2010-03-30Merge branch 'se/decode_packet' into devErlang/OTP
* se/decode_packet: Fix erlang:decode_packet(httph_bin,..) to not return faulty header strings OTP-8548 se/decode_packet erlang:decode_packet(httph_bin,..) could return corrupt header strings or even crash the VM. This has been fixed. It only happened on 32-bit VM if the header name was unknown and between 16 and 20 characters long. Sockets with simular packet option did not suffer from this bug.
2010-03-29Fix erlang:decode_packet(httph_bin,..) to not return faulty header stringsSverker Eriksson
Unrecognized Http header names was sometimes returned as corrupt sub-binaries pointing to a stack allocated buffer. This only happened on 32-bit VM if the header name was between 16 and 20 characters long. It could in some cases lead to segmentation fault. The solution was to avoid creating sub-binary if the returned string was not part of the original binary.
2010-03-25Merge branch 'bg/compiler-remove-r11-support' into devErlang/OTP
* bg/compiler-remove-r11-support: compiler: Don't support the no_binaries option erts: Don't support the put_string/3 instruction compiler: Don't support the no_constant_pool option compiler: Don't support the r11 option test_server: Don't support communication with R11 nodes binary_SUITE: Don't test bit-level binary roundtrips with R11 nodes erts: Test compatibility of funs with R12 instead of R11 OTP-8531 bg/compiler-remove-r11-support
2010-03-22erts: Don't support the put_string/3 instructionBjörn Gustavsson
Since R14 does not need to load code that can also be loaded in an R11 run-time system, support for the put_string/3 instruction can be removed.
2010-03-22binary_SUITE: Don't test bit-level binary roundtrips with R11 nodesBjörn Gustavsson
2010-03-22erts: Test compatibility of funs with R12 instead of R11Björn Gustavsson
2010-03-22Merge branch 'pan/otp_8332_halfword' into devErlang/OTP
* pan/otp_8332_halfword: Teach testcase in driver_suite the new prototype for driver_async wx: Correct usage of driver callbacks from wx thread Adopt the new (R13B04) Nif functionality to the halfword codebase Support monitoring and demonitoring from driver threads Fix further test-suite problems Correct the VM to work for more test suites Teach {wordsize,internal|external} to system_info/1 Make tracing and distribution work Turn on instruction packing in the loader and virtual machine Add the BeamInstr data type for loaded BEAM code Fix the BEAM dissambler for the half-word emulator Store pointers to heap data in 32-bit words Add a custom mmap wrapper to force heaps into the lower address range Fit all heap data into the 32-bit address range
2010-03-12Teach testcase in driver_suite the new prototype for driver_asyncPatrik Nyblom
The testcase core dunmped. Also made sure the key could actually store long integers in driver_async (which is more of a cosmetic change).
2010-03-10Adopt the new (R13B04) Nif functionality to the halfword codebasePatrik Nyblom
Change erl_int_sizes_config to include HALFWORD_HEAP_EMULATOR, which make it possible for the NIFs to figure out the term size.
2010-03-10Support monitoring and demonitoring from driver threadsPatrik Nyblom
The driver in the wx application does monitoring (and demonitoring) from non-scheduler threads. In the non-half-word emulators, data will be modified without the protection of a lock (which is potentially bad), but the half-word emulator will crash in that situation. While at it, also correct an old bug which make assertions fail in the Kernel test suite.
2010-03-10Fix further test-suite problemsPatrik Nyblom
Fix safe_mul in the loader, which caused failures in the bit syntax test cases. Fix yet another Uint in erl_alloc.h (ERTS_CACHE_LINE_SIZE) causing segmentation fault when we have many schedulers (why only in that situation?). Clean up erl_mseg (remove old code for the Linux 32-bit mmap flag). While at it, also remove compilation warnings.