aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/hipe
AgeCommit message (Collapse)Author
2012-02-21erts: Rename "loader" code_ix as "staging" code_ixSverker Eriksson
Staging is a better and more general name as does not necessary need to involve code loading (can be deletion, tracing, etc).
2012-02-21erts: Multiple module tables using code_ixSverker Eriksson
2012-02-21erts: Use several addresses in each ExportSverker Eriksson
2012-02-21erts: Multiple export tab's using code_ixSverker Eriksson
Still blocking code loading
2012-02-21erts: Refactor Module structSverker Eriksson
2012-01-11Merge branch 'sverk/hipe-hibernate-sparc-bug' into maintSverker Eriksson
* sverk/hipe-hibernate-sparc-bug: erts: Make GC tolerate hibernated process without hipe stack
2012-01-03hipe: Suppress warnings for unused variablesBjörn-Egil Dahlberg
2011-12-19erts: Make GC tolerate hibernated process without hipe stackSverker Eriksson
Seen causing segv on sparc with hibernate_native_SUITE:basic: nstack_walk_frame_ra (nsp=0x0, sdesc=0x6c8f2c) at hipe_risc_gc.h:105 gensweep_nstack (p=0x6a6930, ptr_old_htop=0xffbfea50, ptr_n_htop=0xffbfea4c) at hipe/hipe_gc.c:224 do_minor (p=0x6a6930, new_sz=233, objv=0x6a6984, nobj=3) at beam/erl_gc.c:949 minor_collection (p=0x6a6930, need=3, objv=0x6a6984, nobj=3, recl=0xffbfece4) at beam/erl_gc.c:811 erts_garbage_collect (p=0x6a6930, need=3, objv=0x6a6984, nobj=3) at beam/erl_gc.c:379 erts_send_message (sender=0x6a6048, receiver=0x6a6930, receiver_locks=0xffbfedf8, message=6132762, flags=0) at beam/erl_message.c:922 do_send (p=0x6a6048, to=515, msg=6132762, suspend=1) at beam/bif.c:2052 erl_send (p=0x6a6048, to=515, msg=6132762) at beam/bif.c:2151 send_2 (A__p=0x6a6048, BIF__ARGS=0x6a609c) at beam/bif.c:2146 nbif_send_2 ()
2011-12-08Declare hipe_mode_switch_debug extern in headerPatrik Nyblom
Fixes alignment warning from ld on 64bit platforms with gcc 4.6.1
2011-12-06Merge branch 'sverk/ppc-hibernate-fix'Sverker Eriksson
* sverk/ppc-hibernate-fix: erts: Fix hipe bug in hibernate on PowerPC
2011-12-02Get cerl and distribution working in Win64Patrik Nyblom
Can still not setup -a, but cerl works.
2011-12-01erts: Fix hipe bug in hibernate on PowerPCSverker Eriksson
Seems to apply to Sparc and ARM as well (even if not observed).
2011-11-17hipe,erts: Allow hipe without floating point exceptionsSverker Eriksson
2011-11-13Merge branch 'rickard/alloc-opt/OTP-7775'Rickard Green
* rickard/alloc-opt/OTP-7775: Optimize memory allocation Conflicts: erts/aclocal.m4 erts/emulator/hipe/hipe_bif_list.m4 erts/preloaded/ebin/erl_prim_loader.beam erts/preloaded/ebin/erlang.beam erts/preloaded/ebin/init.beam erts/preloaded/ebin/otp_ring0.beam erts/preloaded/ebin/prim_file.beam erts/preloaded/ebin/prim_inet.beam erts/preloaded/ebin/prim_zip.beam erts/preloaded/ebin/zlib.beam
2011-11-13Optimize memory allocationRickard Green
A number of memory allocation optimizations have been implemented. Most optimizations reduce contention caused by synchronization between threads during allocation and deallocation of memory. Most notably: * Synchronization of memory management in scheduler specific allocator instances has been rewritten to use lock-free synchronization. * Synchronization of memory management in scheduler specific pre-allocators has been rewritten to use lock-free synchronization. * The 'mseg_alloc' memory segment allocator now use scheduler specific instances instead of one instance. Apart from reducing contention this also ensures that memory allocators always create memory segments on the local NUMA node on a NUMA system.
2011-11-09erts,hipe: Limited support for hipe cross compilationSverker Eriksson
Normally hipe assumes that generated native code will be executed on the same emulator as the hipe compiler is running on. This commit allows you to build a hipe "cross-compiler" for a different configured emulator (but for same architecture). Example: > cd lib/hipe > make clean > make XCOMP=yes FLAVOR=smp TYPE=debug This hipe compiler will generate code to be executed on the debug compiled smp-emulator at $ERL_TOP.
2011-10-26erts-hipe: Change THE_NON_VALUE for HiPE enabled debug emulatorSverker Eriksson
This is a work-around as there are hipe BIFs that return untagged integers that may be intepreted as THE_NON_VALUE (24). Hipe bifs that return offsets as untagged integers: hipe_bs_put_utf8 hipe_bs_put_utf16be hipe_bs_put_utf16le Hipe bifs that return raw pointers: hipe_find_na_or_make_stub hipe_nonclosure_address
2011-10-26erts-hipe: Enable debug compiled hipe-VM with lock checkerSverker Eriksson
Add hipe_debug_bif_wrapper() as a wrapper for every BIF called by native code.
2011-10-26erts-hipe: Rename fail_bif_interface_0 to standard_bif_interface_0Sverker Eriksson
2011-10-26erts-hipe: Fix new trap conventions for x86, amd64 and ppcSverker Eriksson
2011-10-26erts-hipe: Make some primops use new BIF calling conventionSverker Eriksson
These primops use the standard_bif_interface_X macros in hipe_bif_list.m4 and must therefor be implemented as bifs for things to work. Maybe there is room for optimization here to call the primops more directly with arguments in registers without having to push them on stack to emulate bif calls.
2011-10-26erts-hipe: Adapt generated BIF wrappers for new calling conventionSverker Eriksson
x86 and amd64: Push BIF__ARGS array on C-stack. ppc, sparc and arm: Write BIF__ARGS array to P->def_arg_reg[] Just the simplest solution with limited assembler knowledge, probably room for improvements.
2011-10-26erts-hipe: Remove obscuring macros in generated assembler codeSverker Eriksson
No semantic change. Just easier to debug when jumps are spelled out and not obscured by yet another layer of macros.
2011-10-26erts-hipe: Make hipe enabled emulator compile with new BIF callsSverker Eriksson
A first step to adapt hipe to the new BIF calling convention.
2011-10-14Merge branch 'rickard/atomics-api/OTP-9014' and OTP_R14B04Rickard Green
Conflicts: erts/aclocal.m4 erts/emulator/beam/erl_db.c erts/emulator/sys/win32/sys.c erts/include/internal/ethread_header_config.h.in
2011-09-06BEAM: Unify allocation of X and float registersBjörn Gustavsson
In the half-word emulator, smp emulator, and non-smp emulator the X register and float register arrays were allocated in different ways. Always allocate the registers and store the pointers to the allocated register arrays in the scheduler data.
2011-08-16emulator: Add a fourth element in exception stacktracesBjörn Gustavsson
This commit is a preparation for introducing location information (filename/line number) in stacktraces in exceptions. Currently a stack trace looks like: [{Mod1,Function1,Arity1}, . . . {ModN,FunctionN,ArityN}] Add a forth element to each tuple that can be used indication the filename and line number of the source file: [{Mod1,Function1,Arity1,Location1}, . . . {ModN,FunctionN,ArityN,LocationN}] In this commit, the fourth element will just be an empty list, and we will change all code that look at or manipulate stacktraces.
2011-08-08Merge branch 'dev' into majorHenrik Nord
2011-08-08Merge branch 'pg/fix-hibernate-scheduling-with-hipe' into devHenrik Nord
* pg/fix-hibernate-scheduling-with-hipe: Fix bug related to hibernate and HiPE (clear F_HIBERNATE_SCHED flag) OTP-9452
2011-06-14Use new atomic API in runtime systemRickard Green
All uses of the old deprecated atomic API in the runtime system have been replaced with the use of the new atomic API. In a lot of places this change imply a relaxation of memory barriers used.
2011-05-21Fix bug related to hibernate and HiPE (clear F_HIBERNATE_SCHED flag)Paul Guyot
F_HIBERNATE_SCHED flag that was introduced in b7ecdcd1ae9e11b8f75e must be cleared in hipe_mode_switch as well. Otherwise, processes running HiPE code that hibernate, wake up and then trap into a BIF will not be rescheduled.
2011-05-20Update copyright yearsBjörn-Egil Dahlberg
2011-05-11hipe_mkliterals print argv[0] in generated filesSverker Eriksson
2011-05-11lock checking fix in hipe_bif2.cSverker Eriksson
2011-04-27Merge branch 'sverker/erts_printf-halfword' into devSverker Eriksson
* sverker/erts_printf-halfword: erts_printf %be to print integers of size Eterm Fix use of type BeamInstr in hipe_debug.c Conflicts: erts/emulator/hipe/hipe_debug.c
2011-04-05Merge branch 'ks/hipe-ppc64' into devHenrik Nord
* ks/hipe-ppc64: Enable HiPE by default when compiling for PPC64 Translate RTL to PPC code on PPC64 too Changes in ppc files for PPC64 Additions for the PPC64 backend Changes for the PPC64 backend Added loader for ppc64 New files for the 64-bit backends Cleanup tags OTP-9198
2011-03-16erts_printf %be to print integers of size EtermSverker Eriksson
Existing %bp to print pointer size integers does not work in halfword emulator to print Eterm size integers.
2011-03-16Fix use of type BeamInstr in hipe_debug.cSverker Eriksson
2011-03-11Update copyright yearsBjörn-Egil Dahlberg
2011-03-11Merge branch 'pg/hipe-remove-constants-pool' into devNiclas Axelsson
* pg/hipe-remove-constants-pool: Remove hipe constants pool OTP-9128
2011-03-10Update copyright yearsSverker Eriksson
2011-03-10Fix NULL-free bug in hibernate on debug emulatorSverker Eriksson
2011-02-14Changes for the PPC64 backendKostis Sagonas
2011-02-14New files for the 64-bit backendsKostis Sagonas
2011-02-14Cleanup tagsKostis Sagonas
2011-01-31Remove hipe constants poolPaul Guyot
Hipe constants used to be allocated within a single, fixed-size pool for interaction with the garbage collector. However, the garbage collector no longer depends on constants being allocated within a single pool, and the fixed size of the pool both meant unnecessary allocations on most deployments and crashes on deployments requiring more constants. The code was simplified to directly invoke erts_alloc. Debugging and undocumented function hipe_bifs:show_literals/0 was removed (it returned true and output text to the console), and debugging and undocumented function hipe_bifs:constants_size/0 was rewritten with a global to count the size of allocated constants.
2011-01-29Fix several bugs related to hibernate/3 and HiPEPaul Guyot
This commit fixes four related bugs: - calling hibernate/3 using a dynamic call would fail with badarg as hibernate/3 as a BIF was not implemented. hibernate/3 is generally provided as a Beam instruction, and code is translated to use this instruction when loaded. - calling hibernate/3 from HiPE would fail with badarg because this would call the aforementioned BIF which was not implemented. - calling hibernate/3 with some HiPE-native garbage in the process heap would randomly crash at the next garbage collect. This bug only happened in a complex, yet reproduceable scenarios, where native code calls beam code that calls hibernate/3, and the process has some garbage when being hibernated and the process generates garbage when awaken. - when entering HiPE, the process current_function can be set and be inaccurate. The fix is three folded: - hibernate_3 BIF now actually works instead of throwing a badarg. While hibernate_3 BIF was (usually) not called from BEAM, it is called from HiPE. hibernate behaviour is very close to the scheduler and this is why it is implemented as an instruction in BEAM. The fix consists in doing the actual hibernation (through the now exported erts_hibernate function) and setting the process flag to TRAP as well as the process status to P_WAITING. On BIF epilogue in both BEAM and HiPE, this status is tested on TRAP and if set, the scheduler is invoked. The i_hibernate instruction and translation code is now redundant and could be deleted. - hibernation now also empties the HiPE native stack, with a new function hipe_empty_nstack provided by Mikael Pettersson. - when entering HiPE through hipe_mode_switch, p->current is cleared, as suggested by Mikael Pettersson. p->current normally hold a pointer to the {M,F,A} of the current function if it exists. When hibernating, it is set to {erlang,hibernate,3}, and all stdlib hibernate tests (gen_server_SUITE:hibernate/1, proc_lib_suite:hibernate/1, etc.) actually rely on this information. Clearing p->current fixes the tests and avoids the surprise one might have when querying the process info of a process that hibernated and woke up in a native function. Non-regression tests are provided, a test for the dynamic call as well as a Makefile-handled duplication of the hibernate_SUITE into hibernate_native_SUITE for the HiPE case.
2010-09-30fix 64-bit writes to 32-bit struct field in HiPE runtimeMikael Pettersson
In the HiPE part of the runtime system's Process struct there is a state field which is 32 bits wide even on 64-bit machines. There is a single instruction in the HiPE AMD64 runtime where this field is incorrectly written with a 64-bit store. Luckily the extraneous 32 bits are written as zeros to 4 bytes of tail-padding at the end of the struct, so nothing should have broken because of this. The same bug exists in the HiPE PowerPC64 runtime (in development), but on the big-endian PPC64 the effect is to write the actual value to the tail-padding and zero to the struct field, which potentially breaks TRAPs from BIFs (depending on BIF arities and how many parameter registers the runtime has been configured to use). Thanks to Paul Guyot for noticing the oversized write on AMD64.
2010-09-07Merge branch 'pg/fix-hipe-crash-in-gc_after_bif' into devBjörn Gustavsson
* pg/fix-hipe-crash-in-gc_after_bif: Fix call to erts_gc_after_bif_call in hipe glue
2010-09-07Merge branch 'mk/net-dragonfly-bsd-patches' into devBjörn Gustavsson
* mk/net-dragonfly-bsd-patches: Remove unused variables Use proper install method Add support for DragonFly BSD Add support for NetBSD