Age | Commit message (Collapse) | Author |
|
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]>
|
|
* maint:
Fix etp-ets-tables
Fix node refc test for free processes hanging around
Enhanced node refc bookkeeping
Fix node container refc tests of ETS
Fix node refc test of external data
Node container refc test for persistent terms
Include persistent term storage in node/dist refc check
Fix node refc test for system message queue
|
|
* rickard/node-refc-tests-22:
Fix etp-ets-tables
Fix node refc test for free processes hanging around
Enhanced node refc bookkeeping
Fix node container refc tests of ETS
Fix node refc test of external data
Node container refc test for persistent terms
Include persistent term storage in node/dist refc check
Fix node refc test for system message queue
|
|
|
|
|
|
|
|
|
|
When running multiple valgrinds on the same machine we want to
attempt to make sure that they do not end up on the same core.
|
|
|
|
Example:
export ERL_AFLAGS=-test
erl dummy_param
In the above example, the dummy_param would be interpreted
as an argument to -test, and not as a separate argument as
it should.
|
|
|
|
for suppression file.
|
|
|
|
|
|
|
|
into maint
|
|
|
|
|
|
to generate nice html from logs of gcov compiled emulator.
|
|
Wake AIX up from coma
|
|
|
|
|
|
|
|
|
|
Use %p instead of %x to print full pointer value.
|
|
This was previously used when erlexec needed to decide
whether to run the smp or non-smp emulator.
|
|
|
|
|
|
where
$argc does not exists
"if $undefined_variable" evaluates as true !?
|
|
* lukas/tools/overhead_benchmark:
etp: Fix free de processes check
tools: Add overhead benchmark
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* sverker/to_erl-utf8/ERL-854:
erts: Remove 7-bit ASCII limitation in to_erl
|
|
Symptom: to_erl garbles anything beyond 7-bit ASCII received on STDIN
Solution: Remove setting of ISTRIP flag on input terminal.
"man tcsetattr" says:
ISTRIP Strip off eighth bit.
|
|
'lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613'
* lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613:
erts: Add debug dist obuf memory leak check
win32: Fix ./otp_build debuginfo_win32
Make ld.sh on windows print better error reason
erts: Fix so that externals with creation 0 compare equal to all
erts: Expand etp to look for free processes
erts: Implement trapping while sending distr exit/down
erts: Add ERL_NODE_BOOKKEEP to node tables refc
erts: Refactor ErtsSendContext to be ErtsDSigSendContext
erts: Add distr testcases for fragmentation
erts: Make remote send of exit/2 trap
erts: Implement fragmentation of distrubution messages
erts: Expand distribution protocol documentation
erts: Move reason in dist messages to payload
erts: Remove a copy of distribution data payload
erts: Yield later during process exit and allow free procs to run
erts: Refactor rbt _yielding to use reductions
erts: Limit binary printout for %.XT in erts_print
|
|
|
|
|
|
OTP-15610
|
|
|
|
* sverker/heart-nice-exit/OTP-15599:
erts: Avoid heart killing a nicely exiting emulator
|
|
|
|
The macro command was added quite recently and far from
all of our testmachines have this command
|
|
Symptom:
Heart kills exiting emulator before is has flushed all ports
and with HEART_KILL_SIGNAL=SIGABRT it may also produce
unnecessary core dumps from doing init:reboot() for example.
Problem:
Heart port is closed together with all the others in handle_reap_ports()
which is detected by heart OS process.
Solution 1:
Leave the heart port alone in handle_reap_ports() and let it be closed
by OS when emulator exists. It doesn't need to be flushed anyway.
Solution 2:
When heart OS process gets EOF on connection let it wait max 5 seconds
for emulator process to self terminate before trying to kill it.
|
|
This reverts commit ea0e763e953f9c7d1fa9c142f24cb95f56119c56.
|
|
* maint:
Add -ztma option for enabling tuple calls
Reinstate tuple calls support in the beam emulator
|
|
Optional tuple calls
OTP-15580
|