Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
Flags that control the heap should all fall under the +h flag
|
|
When FP exceptions are used, matherr() forces a fake FP exception,
which is interpreted as an error by the checking code after a math
routine call. This is wrong for several reasons:
- it's not necessary for error checking: when FP exceptions aren't
used, matherr() is a stub and no information is derived from it
being called
- it's not necessary for FPU maintenance: the FPU only needs to be
reprogrammed after an actual FP exception
- it causes false negatives: matherr() may be called even though
Erlang doesn't consider the case to be an error (exp() and pow()
underflows on Solaris for instance); with FP exceptions enabled
they are incorrectly considered errors
The fix is to remove all FP exception related code from matherr().
|
|
* lukas/erts/non-smp-debug-fixes/OTP-13047:
erts: Fix incorrect non-smp debug assert
erts: std_alloc is not thread safe on non-smp
Conflicts:
erts/emulator/beam/erl_alloc_util.c
|
|
In an SMP emulator, print_garb_info doesn't do anything because the
heap pointers could be invalid.
However, when crashdumping there are no schedulers running so it's ok
to print this additional information which could be useful when
examining a core file.
|
|
|
|
* egil/fix-lock-order-trace-status:
erts: Fix lock-order trace status
|
|
* egil/erts/fix-copy-share-heap:
erts: Fix comments
erts: Fix copy share with onheap messages
|
|
|
|
Windows 8 and later have stronger admin checks which requires
erlang to run in privileged shells, ignore for now.
|
|
|
|
|
|
|
|
on 32-bit, as the granularity of the literal bit vector
is super-alignment.
|
|
|
|
* lukas/erts/tracing/fix-spawned-lc-error/OTP-10267:
erts: Fix lock order bug when only child is procs traced
|
|
|
|
* bjorn/compiler/misc-opt:
v3_kernel: Construct literal lists properly
Use the register map in %live in beam_utils:is_killed_block/2
Teach beam_utils to check liveness for put_map instructions
beam_peep: Help out beam_jump
|
|
* bjorn/erts/beam_load:
Optimize get_tuple_element instructions that target Y registers
Mend beam_SUITE:packed_registers/1
Correct unpacking of 3 operands on 32-bit archictectures
Eliminate misleading #ifdef ARCH_64 in beam_opcodes.h
beam_debug: Correct masking when unpacking packed operands
|
|
This performs a number of cleanups in the FP exception code:
- inline the body of unmask_fpe_conditional() in its only caller,
then delete the duplicated and identical definitions of it
- start the big processor-specific block with a comment describing
the two functions that must be defined, then delete redundant
comments at all the mask_*() functions
- add a comment before fpe_sig_action() explaining exactly what
processor-specific action is required of it
- flatten #ifdef nesting in fpe_sig_action()
- move common code in the x86 unmask_fpe() and erts_restore_fpu()
function into a subroutine
- minor tweaks: drop a redundant L suffix on a 0, add a comment
after an #else, bump the size of a debug buffer,
There should be no change in behaviour from these changes.
|
|
that uses its own super carrier (erts_exec_mmapper)
to guarantee low addressed and executable memory (PROT_EXEC).
Currently only used on x86_64 that needs low memory
for HiPE/AMD64's small code model.
By initializing erts_exec_mapper early we secure
its low memory area before erts_literal_mmapper might
steal it.
|
|
to prepare for hipe native code allocation.
|
|
Make the callbacks more general to be usable for any allocator
that that uses its own ErtsMemMapper.
|
|
Reduce main carrier size
and number of free descriptors.
|
|
|
|
|
|
|
|
This is needed as otherwise messages from system_profile
will not be guaranteed to arrive before trace delivered.
|
|
|
|
Without off_heap message queue the GC of the tracer could take
very long and thus delay the code:purge which would in turn allow
the trace generator to generate a lot of more messages which would
make the tracer GC for even longer etc etc. The time taken for the
testcase could go up to as large as 10 seconds and use lots of memory.
|
|
OTP-13501
|
|
Any heap fragment created during a nif call to a tracer nif
should be free'd immediately in order for the GC not to treat
it as live data.
|
|
OTP-13497
This trace event is triggered when a process is created from the
process that is created.
|
|
Rickards said that this was ok
|
|
We have the main lock on rp->p, so why not?
|
|
provoked by nif_SUITE:nif_binary_to_term.
If we fail to decode an immediate (unsafe atom for example) with
a dummy factory then hp and factory->hp will both be uninitialized
and valgrind will complain about comparing them.
|
|
|
|
|
|
Tracing to port in non-smp now creates port tasks
instead of calling directly to the port to fake
schedule events don't exist any more.
|
|
erts_block/unblock_fpe should only be called at entry to/exit from
native user code.
|
|
This commit completes the tracing for processes so that
all messages sent by a process (via nifs or otherwise) will
be traced.
The commit also adds tracing of all types of events from ports.
When enabling tracing using erlang:trace, the 'all' flag now also
enables tracing on all ports.
OTP-13496
|
|
Add the possibility to use modules as trace data receivers. The functions
in the module have to be nifs as otherwise complex trace probes will be
very hard to handle (complex means trace probes for ports for example).
This commit changes the way that the ptab->tracer field works from always
being an immediate, to now be NIL if no tracer is present or else be
the tuple {TracerModule, TracerState} where TracerModule is an atom that
is later used to lookup the appropriate tracer callbacks to call and
TracerState is just passed to the tracer callback. The default process and
port tracers have been rewritten to use the new API.
This commit also changes the order which trace messages are delivered to the
potential tracer process. Any enif_send done in a tracer module may be delayed
indefinitely because of lock order issues. If a message is delayed any other
trace message send from that process is also delayed so that order is preserved
for each traced entity. This means that for some trace events (i.e. send/receive)
the events may come in an unintuitive order (receive before send) to the
trace receiver. Timestamps are taken when the trace message is generated so
trace messages from differented processes may arrive with the timestamp
out of order.
Both the erlang:trace and seq_trace:set_system_tracer accept the new tracer
module tracers and also the backwards compatible arguments.
OTP-10267
|
|
These are convinience functions for calling nifs from erts
|
|
|
|
* lukas/erts/enif_send_null_env/OTP-13495:
erts: Add enif_send with NULL as msg env
|
|
* egil/erts/fix-erlang-system_profile/ERL-126/OTP-13494:
erts: Enhance system_profile tests
erts: Don't use function location when process is terminating
|