aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2019-08-22Optimize continuation pointer managementBjörn Gustavsson
The BEAM instructions for calling a function don't save the continuation pointer (return address) on the stack, but to a special BEAM register called CP. It is the responsibility of the called function to save CP to the stack frame before calling other functions. In the earlier implementations of BEAM on Sparc, CP was located in a CPU register. That meant that the continuation pointer was never written to memory when calling simple functions that didn't call other functions at all or ended in a tail-call to another function. The modern BEAM no longer keeps CP in CPU register. Instead, it is kept in the `process` struct (in `p->cp`). That means the continuation pointer must be written to the memory on every call, and if the called function will call other functions, it will must read the continuation pointer from `p->cp` and store it on the stack. This commit eliminates the concept of the CP register and modifies the call instructions to directly store the continuation pointer on the stack. That makes allocation and trimming of stack frames slightly faster. A more important benefit is simplification of code that handles continuation pointers. Because all continuation pointers are now stored on the stack, the special case of handling `p->cp` disappears. Co-authored-by: John Högberg <[email protected]>
2019-08-13Merge branch 'maint'John Högberg
* maint: erts: Fix crash in instrument:allocations/0-1
2019-08-13Merge branch 'john/erts/fix-instrument-allocations-race/OTP-15983' into maintJohn Högberg
* john/erts/fix-instrument-allocations-race/OTP-15983: erts: Fix crash in instrument:allocations/0-1
2019-08-12Merge branch 'maint'John Högberg
* maint: erts: Create heap binaries in binary:split/2-3 erts: Create heap binaries in binary_part/2-3 erts: Create heap binaries in split_binary/2 erts: Create heap binaries in bs_get_binary2 erts: Remove size check in bs_start_match erts: Disallow binaries whose size in bits exceeds UWORD_MAX
2019-08-12Merge branch 'john/erts/bs_get_binary2-heap-binaries/OTP-15977' into maintJohn Högberg
* john/erts/bs_get_binary2-heap-binaries/OTP-15977: erts: Create heap binaries in binary:split/2-3 erts: Create heap binaries in binary_part/2-3 erts: Create heap binaries in split_binary/2 erts: Create heap binaries in bs_get_binary2 erts: Remove size check in bs_start_match erts: Disallow binaries whose size in bits exceeds UWORD_MAX
2019-08-12Merge branch 'maint'John Högberg
* maint: Fix documentation for erlang:is_map_key/2
2019-08-12erts: Fix crash in instrument:allocations/0-1John Högberg
The current carrier list was read when the allocator wasn't locked, crashing the emulator if a block scan raced with a carrier allocation.
2019-08-12Merge pull request #2325 from max-au/is_map_key_doc_fixBjörn Gustavsson
Fix documentation for erlang:is_map_key/2
2019-08-09erts: Create heap binaries in binary:split/2-3John Högberg
2019-08-09erts: Create heap binaries in binary_part/2-3John Högberg
2019-08-09erts: Create heap binaries in split_binary/2John Högberg
2019-08-09erts: Create heap binaries in bs_get_binary2John Högberg
ErlSubBin is a large struct that often dwarfs the region of memory it points at, and it's common for them to refer to a ProcBin which must be kept around as long as the SubBin lives, using up even more heap space and keeping the referenced binary alive regardless of how small the sub-binary is.
2019-08-09erts: Remove size check in bs_start_matchJohn Högberg
The size check is redundant now that all binaries are guaranteed to be small enough that their size in bits fits into a word.
2019-08-09erts: Disallow binaries whose size in bits exceeds UWORD_MAXJohn Högberg
These have never worked in binary matching (including sub-binaries extracted from them) so it's hard to justify their existence. They also make a future migration of binary sizes from bytes to bits problematic, so we may as well change it ahead of time. This is potentially incompatible on 32-bit platforms where a NIF or driver could allocate 512MB+ binaries, but allocations that large should be expected to fail anyway.
2019-08-08Merge branch 'maint'John Högberg
* maint: erts: Escape atoms in erlang:fun_to_list/1
2019-08-08Merge branch 'john/erts/fun_to_list-escaping/OTP-15975/ERL-1009' into maintJohn Högberg
* john/erts/fun_to_list-escaping/OTP-15975/ERL-1009: erts: Escape atoms in erlang:fun_to_list/1
2019-08-07erts: Escape atoms in erlang:fun_to_list/1John Högberg
2019-08-07Merge branch 'john/compiler/explicit-call-exceptions'John Högberg
* john/compiler/explicit-call-exceptions: compiler: Simplify set_tuple_element optimization compiler: Make 'succeeded' optimization more general compiler: Simplify call type optimization compiler: All calls may throw, so they all need success checks erts_debug: Turn off unsafe optimizations in test case
2019-08-06erts_debug: Turn off unsafe optimizations in test caseJohn Högberg
The test case alters the return value of a function that the compiler expects will never return, resulting in undefined behavior. Note that the debugger (which may change variables/return values) is unaffected since the affected module is purged and "replaced" with an interpreted variant.
2019-08-05Merge branch 'maint'Lukas Larsson
2019-08-05Merge pull request #2333 from matwey/fix_ethr_x86_cpuid_asm/OTP-15971Lukas Larsson
erts: Do not use named no_cpuid label in asm
2019-08-01Merge branch 'maint'Micael Karlberg
2019-08-01Merge branch 'bmk/erts/esock/20190730/select_info/OTP-15958' into maintMicael Karlberg
2019-07-31Merge branch 'maint'Raimo Niskanen
* maint: The linger option is not transferred on *BSD
2019-07-31Merge branch 'raimo/inherit-listen-options/OTP-15824' into maintRaimo Niskanen
* raimo/inherit-listen-options/OTP-15824: The linger option is not transferred on *BSD
2019-07-30[esock|doc] Updated select-infoMicael Karlberg
2019-07-30[esock] Updated select-infoMicael Karlberg
2019-07-30Merge branch 'maint'Micael Karlberg
2019-07-30Merge branch 'bmk/erts/esock/20190729/eafnosupport_on_solaris10' into maintMicael Karlberg
2019-07-30Merge branch 'maint'Micael Karlberg
2019-07-30Merge branch 'bmk/erts/esock/20190724/invalid_sockaddr_null_in_sendto' into ↵Micael Karlberg
maint
2019-07-30[esock] Post merge fixMicael Karlberg
2019-07-30Merge branch 'maint'Micael Karlberg
2019-07-30Merge branch 'bmk/esock/20190723/renaming_nif_functions/OTP-15955' into maintMicael Karlberg
2019-07-30Merge branch 'maint'Micael Karlberg
2019-07-30Merge branch 'bmk/erts/esock/20190717/socket_options/OTP-15904' into maintMicael Karlberg
2019-07-29Fix documentation for erlang:is_map_key/2Maxim Fedorov
This function is allowed to be used in guards.
2019-07-29[esoco|test] Attempt to handle unsupported unix domain socketMicael Karlberg
2019-07-29[esock|test] Race during socket closeMicael Karlberg
Add a sleep to reduce the chance that process exit has not been "processed" by the nif code. Also increased the test case timetrap for the sc_ctrl_proc_exit group of test cases. OTP-15904
2019-07-27erts: Do not use named no_cpuid label in asmMatwey V. Kornilov
Ask compiler to generate unique label name. Using named label has implications on optimizer, that may lead to the compilation errors as the following: pthread/ethread.c: Assembler messages: pthread/ethread.c:213: Error: symbol `no_cpuid' is already defined pthread/ethread.c:213: Error: symbol `no_cpuid' is already defined pthread/ethread.c:213: Error: symbol `no_cpuid' is already defined
2019-07-24[esock] Renaming structures and callback functionsMicael Karlberg
Rename some of the structures and callback functions (socket -> esock). OTP-15955
2019-07-24[esock] Renamed constantsMicael Karlberg
Renamed constants (defines): SOCKET_ -> ESOCK_ OTP-15955
2019-07-24[esock] Renaming internal functions to avoid name clashesMicael Karlberg
The naming "convention" for "top" functions of the esock nif module was: The API functions where called nif_<foo> This function did basic checks and arg extraction and then called the a function called n<foo>, which was the one doing the actual work. Unfortunately, och some platforms (AIX) these second names, n<foo>, clashed with system functions. So, in order to avoid this, the naming of second function has been changed to esock_<foo>. OTP-15955
2019-07-24[esock] Dialyzer related cleanupMicael Karlberg
Removed unnecessary spec's causing dialyzer warnings.
2019-07-24[esock] Incorrect socket address guard in sendtoMicael Karlberg
Invalid guard tests for function sendto. It handled the, invalid, socket address 'null'. Presumably, this was intended for connected UDP sockets. Though, for a connected (UDP) socket, the send function shall be used.
2019-07-24[esock|test] Moved include file (to its proper place)Micael Karlberg
OTP-15904
2019-07-24[esock|test] Make some skip reasons more readableMicael Karlberg
OTP-15904
2019-07-24Merge branch 'maint'Micael Karlberg
2019-07-24Merge branch 'bmk/erts/esock/20190717/select_info_clarify/OTP-15731' into maintMicael Karlberg
2019-07-23[esock|test] Changing 'dontroute' may not be allowedMicael Karlberg
If we are not allowe to change ('eopnotsupp') the socket option 'dontroute' then we skip the test case. OTP-15904