Age | Commit message (Collapse) | Author |
|
Sometimes the line number in a stack trace could be wrong,
for example for this code:
t() ->
Res = id(x), %<== Wrong line number.
Res + 1.
id(I) -> I.
The line number pointed out in the stack trace would be the
line before the line where the exception occurred.
The reason is the way the increment instruction instruction
is implemented:
OpCase(i_increment_rWtd):
{
increment_reg_val = r(0);
}
I -= 1;
goto increment__execute;
OpCase(i_increment_xWtd):
{
increment_reg_val = xb(I[1]);
}
goto increment__execute;
increment__execute:
/* Common code for increment */
.
.
.
(The implementation in OTP 20 is similar, but hand-coded directly
in beam_emu.c instead of generated.)
The instruction i_increment_rWtd decrements the instruction pointer (I)
before jumping to the common code. That means that I points *before*
the 'increment' instruction. If there is a 'line' instruction directly
before the 'increment' instruction (as there is in this example), the
instruction pointer will point before that line. Thus the previous line
will be picked up instead.
To eliminate this bug, we must never decrement the instruction pointer.
Instead, we can increment the other (longer) instructions in the
same group of combined instructions:
OpCase(i_increment_rWtd):
{
increment_reg_val = r(0);
}
goto increment__execute;
OpCase(i_increment_xWtd):
{
increment_reg_val = xb(I[1]);
}
I += 1;
goto increment__execute;
increment__execute:
/* Common code for increment */
.
.
.
Also fix a bug that was only a potential bug when ddaed7774eb0a
introduced relative jumps, but is now a real bug. See the added
comment for SET_I_REL() in macros.tab.
|
|
* raimo/ssl-dist-skip-loopback/OTP-14465:
Update runtime dependencies
Disable debug function
Pass all info's to the ssl_connection state function
Remove ssl_tls_dist_ctrl module
Remove ssl_tls_dist_ctrl process
Remove ssl_tls_dist_proxy
Avoid dialyzer warning
Separate in and out in dist ctrl
Rewrite dist ctrl from port to process
Conflicts:
lib/ssl/src/ssl.app.src
|
|
|
|
* maint:
Fix xmllint warning
|
|
* rickard/doc-fix:
Fix xmllint warning
|
|
|
|
|
|
Fix grammar in 'ets' docs
|
|
|
|
|
|
|
|
|
|
* lukas/erts/fix_threads_error_printout:
erts: Print the error reason when threads fail to start
|
|
* kvakvs/zero-size-read_file/ERL-327/PR-1524/OTP-14637:
erts: On zero-size files attempt to read until EOF
|
|
|
|
|
|
|
|
|
|
|
|
* dgud/stdlib/unicode-string-bench:
stdlib: Add unicode string benchmarks
|
|
|
|
fix off by one error in docs
|
|
|
|
* bjorn/speed-up-disassembler:
Add testing of erts_debug:df() to the emulator smoke tests
Speed up erts_debug:df()
|
|
|
|
|
|
|
|
|
|
The byte_offset of sub-binaries wasn't taken into account for
ProcBins, subtly ruining the results. The test suite didn't catch
it since it didn't check for sub-binaries in particular, and only
checked for equality between variations -- not whether the output
was equal to the input.
|
|
* maint:
stdlib: Remove gs removed warning
|
|
* dgud/stdlib/remove-gs-depr:
stdlib: Remove gs removed warning
|
|
|
|
|
|
|
|
Caused warnings which could not be suppressed, if old 'gs' application
was compiled and used together with otp-20, which is fair usage even
if OTP does not support the application anymore.
|
|
It is too easy to break the disassembler. Make sure that we notice.
|
|
The test case erts_debug_SUITE:df/1 in the emulator test suite is
about 4 times faster with this change.
|
|
|
|
* siri/observer/dont-use-old-string-api:
[cdv] Don't use old string API
|
|
|
|
|
|
|
|
* anders/diameter/doc/OTP-14561:
Document new(ish) options in diameter_tcp/sctp
|
|
* anders/diameter/SoC/OTP-10927:
Simplify/complete Standards Compliance doc
|
|
|
|
* lars/make/fop-font-cache/OTP-14622:
Change number of parameters
Fix fop font-cache handling during pdf build
|
|
|
|
Two parallell doc builds running fop (as same user) could both
update the fop font-cache at the same time. The cache is now
created as an artifact in the build process.
|
|
* maint:
fprof: Make sure the receiving file can handle Unicode
|
|
* hasse/tools/fprof_unicode_fix:
fprof: Make sure the receiving file can handle Unicode
|