aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam
AgeCommit message (Collapse)Author
2011-03-09Fix 18 exabyte memory allocation failureBjörn Gustavsson
The new_binary() function takes a size argument that is an int. In the 64-bit emulator (sizeof(int) == 4, sizeof(Uint) == 8), any sizes >= 0x8000000 become 0xffffffff80000000 and above and triggers a memory allocation failure. Change the type of the size argument to Uint, and change any callers that cast the argument to an int. Correction-by: Jon Meredith
2011-03-04erts: Initialize register that may be referenced by garbage collectionBjörn Gustavsson
The call_fun() function in the BEAM emulator is supposed to to put the fun term in the x register following the actual arguments and environment for the fun. But if the fun is not loaded and a call to the error_handler:undefined_lambda/3 function is set up, the x(3) register will not be initialized. The lack of initialization is very unlikely to cause a problem in practice, because all of the following things must happen: 1) An unloaded fun must be called (i.e. the fun must have been received from another node or from a file or dets table). 2) The process must be scheduled out before the call to the error_handler:undefined_lambda/3 function can take place. 3) The process must be garbage collected before the process is scheduled in. 4) The x(3) register must contain a stale cons or box pointer that happens to point into the the heap of the currently executing process. (Because of the literal pool, the GC will never copy anything that is outside of the heap.) I was not able to write a test case that would force an emulator crash.
2011-03-03Merge branch 'bmk/megaco/miscellaneous_dialyzer/OTP-9075' into devMicael Karlberg
Fixing miscellaneous "things" "detected" by dialyzer. Also updated end date for a number of erts files.
2011-03-02Remove race in main thread stealing due to reading and writing to pipe from ↵Patrik Nyblom
same thread
2011-03-02Make MacOS (NS) wx use the main threadPatrik Nyblom
2011-03-02Merge branch 'pan/halfword-tmp-heap-fixes/OTP-8332' into devPatrik Nyblom
* pan/halfword-tmp-heap-fixes/OTP-8332: Fix assymetric (Un)UseTmpHeap in erl_process.c Conflicts: erts/emulator/beam/beam_emu.c
2011-03-01Merge branch 'bjorn/erts/crash-dumps/OTP-9057' into devBjörn-Egil Dahlberg
* bjorn/erts/crash-dumps/OTP-9057: Don't dump the contents of ordered_set ets tables Write the value "Time left" for BIF timers as an unsigned integer
2011-02-28Fixed end date in copyright note.Micael Karlberg
2011-02-27Merge branch 'rickard/unbound/OTP-9056' into devRickard Green
* rickard/unbound/OTP-9056: Allow bindtype unbound when no cpu topology is available
2011-02-25Allow bindtype unbound when no cpu topology is availableRickard Green
2011-02-25Merge branch 'rickard/temp_alloc_check/OTP-9028' into devRickard Green
* rickard/temp_alloc_check/OTP-9028: Verify that temp allocated memory is released
2011-02-25Merge branch 'rickard/mtx-destroy-ebusy/OTP-9009' into devRickard Green
* rickard/mtx-destroy-ebusy/OTP-9009: Send warning instead of abort on EBUSY from pthread_mutex_destroy
2011-02-25Send warning instead of abort on EBUSY from pthread_mutex_destroyRickard Green
Due to a bug in glibc the runtime system could abort while trying to destroy a mutex. The runtime system will now issue a warning instead of aborting.
2011-02-25Merge branch 'rickard/poll-wake/OTP-9019' into devRickard Green
* rickard/poll-wake/OTP-9019: Simplify erts_poll_wait() wakeup logic
2011-02-25Simplify erts_poll_wait() wakeup logicRickard Green
2011-02-24Don't dump the contents of ordered_set ets tablesBjörn Gustavsson
2011-02-24Write the value "Time left" for BIF timers as an unsigned integerBjörn Gustavsson
2011-02-23BEAM loader: Add an assertion to check for overflowed code spaceBjörn Gustavsson
While at it, clean up indentation of CHKBLK() macros.
2011-02-23beam_emu: Eliminate redundant #ifdefBjörn Gustavsson
The halfword emulator used to require special handling, but no longer does.
2011-02-23beam_emu: Remove unnecessary decrement of I in "case_end r"Björn Gustavsson
It is not necessary to decrement I, because an exception is about to be generated. Furthermore, I pointing *before* the instruction that caused the exception may cause problems in the future.
2011-02-18Merge branch 'sverker/ets_halfword_highmem/OTP-8941' into devSverker Eriksson
* sverker/ets_halfword_highmem/OTP-8941: HALFWORD ETS Fix copyright year in some source files Fix vm crash in kernel test case seq_trace_SUITE:call remove NIF compile warning: no previous prototype for ‘nif_init’ Refuse to load NIF library on wrong VM variant (halfword/fullword) HALFWORD ETS match spec heap fragment optimization HALFWORD ETS removed eheap and improved test case t_match_spec_run HALFWORD ETS Further match spec optimization to minimize copying and garbage HALFWORD ETS db_prog_match optimization HALFWORD ETS Fix segv for match spec with several function and guards HALFWORD Make system_info mseg_alloc report both low/high mem HALFWORD Fix segv caused by erlang:halt HALFWORD Make more allocators use high mem (binary, fixed and driver) HALFWORD ETS 32-bit arch fixes and other cleanups HALFWORD ETS nicer update_element HALFWORD ETS Real matching on relative terms HALFWORD first stab at high mem alloc HALFWORD ETS relative terms Conflicts: erts/emulator/test/driver_SUITE.erl
2011-02-18HALFWORD ETS Fix copyright year in some source filesSverker Eriksson
2011-02-18Fix vm crash in kernel test case seq_trace_SUITE:callSverker Eriksson
2011-02-18remove NIF compile warning: no previous prototype for ‘nif_init’Sverker Eriksson
2011-02-18Refuse to load NIF library on wrong VM variant (halfword/fullword)Sverker Eriksson
2011-02-14Eliminate memory leak in code:make_stub/1Björn Gustavsson
2011-02-10Verify that temp allocated memory is releasedRickard Green
2011-02-03HALFWORD ETS match spec heap fragment optimizationSverker Eriksson
Introduce HAllocX to allocate heap fragments with a larger capacity than requested and by that reduce the number of fragments allocated.
2011-02-03HALFWORD ETS removed eheap and improved test case t_match_spec_runSverker Eriksson
2011-02-03HALFWORD ETS Further match spec optimization to minimize copying and garbageSverker Eriksson
2011-02-03HALFWORD ETS db_prog_match optimizationSverker Eriksson
2011-02-03HALFWORD ETS Fix segv for match spec with several function and guardsSverker Eriksson
Did not properly take care of case when TryMeElse restarted with next match clause.
2011-02-03HALFWORD Fix segv caused by erlang:haltSverker Eriksson
Faulty use of term on C-stack in heap_dump()
2011-02-03HALFWORD Make more allocators use high mem (binary, fixed and driver)Sverker Eriksson
2011-02-03HALFWORD ETS 32-bit arch fixes and other cleanupsSverker Eriksson
2011-02-03HALFWORD ETS nicer update_elementSverker Eriksson
2011-02-03HALFWORD ETS Real matching on relative termsSverker Eriksson
2011-02-03HALFWORD first stab at high mem allocSverker Eriksson
2011-02-03HALFWORD ETS relative termsSverker Eriksson
In halfword emulator, make ETS use a variant of the internal term format that uses relative offsets instead of absolute pointers. This will allow storage in high memory (>4G). Preprocessor macros (like list_val_rel(TERM,BASE)) are used to make normal (fullword) emulator almost completely unchanged while still reusing most of the code.
2011-01-18Lower the maximum arity from 256 to 255Björn Gustavsson
Historically, for no good reason, a function is allowed to have from 0 to 256 arguments. Thus, the number of arguments *almost* fits into a byte. HiPE only supports up to 255 arguments (because it assumes that the function arity fits into a single byte), and fixing that limitation would require ugly special-case handling. In Dialyzer, the arity type is defined to be a byte (i.e. 0..255). Since no-one uses functions with 256 arguments anyway, lower the limit to 255.
2011-01-17Merge branch 'bjorn/beam-loader/OTP-9030' into devBjörn Gustavsson
* bjorn/beam-loader/OTP-9030: (43 commits) c: Reduce memory footprint erl_posix_msg: Reduce memory footprint Introduce a few more variations of the move instructions Combine a move + jump sequence into the move_jump instruction Optimize and clean-up the exact equality/non-equality instructions Optimize addition of a small integer to a variable Introduce a special instruction for select_val with two values Introduce a few more specialized put_list instructions Eliminate the "put_list c n Dst" instructions Eliminate the specific move_sd instruction Eliminate use of GetArg1() in the badmatch and case_end instructions Eliminate use of GetArg2() in the i_element instruction Eliminate use of GetArg1() in the fast_element instruction Eliminate use of GetArg1() in the jump_on_val* instructions Eliminate use of GetArg1() in the select_val instruction beam_emu: Eliminate sloppy use of tmp_arg1 and tmp_arg2 beam_emu: Don't inline helper functions into process_main() beam_emu: Clean up calling of the error_handler module Simplify a select_val instruction that selects only one value Optimize creation of tuples ...
2011-01-17Introduce a few more variations of the move instructionsBjörn Gustavsson
Frequency counts show that move Const x(1) move Const x(2) are very common.
2011-01-17Combine a move + jump sequence into the move_jump instructionBjörn Gustavsson
That will save one word and small amount of time for each occurrence.
2011-01-17Optimize and clean-up the exact equality/non-equality instructionsBjörn Gustavsson
The is_eq_exact/3 and is_ne_exact/3 instructions are commonly used with one immediate or literal operand. Introduce three new specialized instructions: i_is_eq_exact_literal/3 i_is_ne_exact_immed/3 i_is_ne_exact_literal/3 The i_is_ne_exact_literal/3 instruction is not very frequently used, but its existence is justified because we removed in a a previous commit the special instruction for matching bignums and we now use i_is_ne_exact_literal/3 instead. For consistency, rename the existing is_eq_immed/3 instruction to is_eq_exact_immed/3. While at it, remove the optimization of an is_eq/3 instruction with an immediate operand because that optimization is already done by the compiler.
2011-01-17Optimize addition of a small integer to a variableBjörn Gustavsson
Introduce a new i_increment/4 to optimize the addition of a register and a small integer. This instruction saves two instruction words compared to the standard instructions (an i_fetch/2 instruction followed by a i_plus/3 instruction) and will also be slightly faster.
2011-01-17Introduce a special instruction for select_val with two valuesBjörn Gustavsson
The new instruction will save one word (because no size operand is needed), and is slightly faster. Handle select_tuple_arity in the same way.
2011-01-17Introduce a few more specialized put_list instructionsBjörn Gustavsson
2011-01-17Eliminate the "put_list c n Dst" instructionsBjörn Gustavsson
Since the literal (constant) pool was introduced in R12, the BEAM compiler will never generate a "put_list Const [] Dst" instruction (it will instead generate a "move [Const] Dst" instruction).
2011-01-17Eliminate the specific move_sd instructionBjörn Gustavsson
The move_sd specific instruction is no longer used since there are specific move instructions covering all possible permutations of operands. Also eliminate the move_cy instruction because it is almost never generated by the compiler.
2011-01-17Eliminate use of GetArg1() in the badmatch and case_end instructionsBjörn Gustavsson
Create separate instructions for each register type. The "badmatch x(0)" and "case_end x(0)" (which are very common) will only require a single word each, compared to two words when GetArg1() is used.