Commit Graph
79 Commits
Author SHA1 Message Date
David Anderson 04827466b0 Rewrite the .smx parser.
This removes one the last remnants of the SourceMod 1.0 VM implementation.

The new parser introduces a number of design changes in the VM. First, the VM now takes greater responsibility for validating and sanity checking the structure of the SMX container format. Previously, malformed SMX files could easily crash SourcePawn. The loader now rejects files that have out-of-bounds offsets or incomplete sections. Complex sections, like debug info or the code stream, are verified lazily.

Internally, the sp_plugin_t structure has been removed. It has been replaced by a new LegacyImage class, designed to be independent from the SPVM API. This potentially lets us load code streams from non-.smx containers. More importantly, it removes a lot of bookkeeping and pre-computed state from PluginRuntime. The LegacyImage class is now responsible for handling debug info as well.

PluginRuntime is now intended to hold only cached or immutable data, and PluginContext holds all VM state. As such PluginContext is now responsible for allocating a plugin's runtime memory, not PluginRuntime.

Finally, some aspects of the loading process have been cleaned up. The
decompression and image handoff logic should now be easier to
understand.
2015-02-25 22:28:10 -08:00
David Anderson acf6dcac86 Remove the interpreter. 2015-02-24 23:57:08 -08:00
David Anderson b9b0ec865c Simplify the JIT function cache. 2015-02-24 23:43:07 -08:00
David Anderson fcaa5361c8 Don't expose mutable sp_native_t. 2015-02-24 23:10:18 -08:00
David Anderson 11ea385169 Remove sp_context_t::rval. 2015-02-24 21:54:34 -08:00
David Anderson 31ab1ced06 Move hp from sp_context_t to PluginContext. 2015-02-24 21:54:34 -08:00
David Anderson b2c61a341a Move sp from sp_context_t to PluginContext. 2015-02-24 21:54:30 -08:00
David Anderson 4c9321f02a Move frm from sp_context_t to PluginContext. 2015-02-24 21:01:05 -08:00
David Anderson d2005bd42a Move cip from sp_context_t to PluginContext. 2015-02-24 20:53:44 -08:00
David Anderson 97dbc7ff07 Move n_err from sp_context_t to PluginContext. 2015-02-24 20:16:13 -08:00
[email protected] 9c104ef310 Move nidx from sp_context_t to PluginContext. 2015-02-24 19:59:45 -08:00
[email protected] 5502fbbdc1 Move the tracker from sp_context_t to PluginContext. 2015-02-24 15:43:41 -08:00
[email protected] 37af05c456 Move the debug return stack into PluginContext. 2015-02-24 15:20:00 -08:00
[email protected] 8eed58a467 Rename sp_vm_basecontext to plugin-context. 2015-02-24 12:55:00 -08:00
David Anderson 781c5129a9 Remove the JITX86 class. 2015-02-24 02:03:58 -08:00
David Anderson 111dd7eb68 Factor code stubs out of JITX86. 2015-02-24 02:03:58 -08:00
David Anderson 21f5400d9c Remove ICompilationData. 2015-02-24 02:03:57 -08:00
David Anderson 8cf3e227ea Move context var initialization into BaseContext. 2015-02-24 02:03:56 -08:00
David Anderson 8c95919b32 Move watchdog/runtime interaction into Environment. 2015-02-24 02:03:55 -08:00
David Anderson c70e87d582 Move the code cache into Environment, and out of knight/shared. 2015-02-24 01:57:50 -08:00
David Anderson 57ba8fd09b De-singleton-ify the watchdog timer. 2015-02-24 01:53:37 -08:00
David Anderson 3cf3f6c3f8 Merge sp_vm_engine and engine2. 2015-02-24 01:52:14 -08:00
David Anderson 499f7b3929 Refactor the public API entrypoint for SourcePawn. 2015-02-24 01:52:13 -08:00
[email protected] 1f9b898702 Rename BaseRuntime files to plugin-runtime. 2015-02-23 16:44:15 -08:00
[email protected] 2f71cb4cd7 Rename BaseRuntime to PluginRuntime. 2015-02-23 16:40:36 -08:00
[email protected] b2d8dde3a5 Rename Function to CompiledFunction. 2015-02-23 16:27:57 -08:00
[email protected] 45bac7feb0 Rename jit_function to compiled-function. 2015-02-23 16:04:57 -08:00
[email protected] 892b8c05b1 Rename JitFunction to CompiledFunction and CFunction to ScriptedInvoker. 2015-02-23 16:03:08 -08:00
David Anderson 225954a27c Modernize the smx headers. 2014-08-21 22:16:07 -07:00
Ryan Stecker 6864bf0068 Only spew JIT compilation and opcodes when built with JIT_SPEW defined. 2014-07-05 10:57:08 -05:00
David Anderson ec61d4d188 Add a general profiling abstraction layer. 2014-06-24 01:04:13 -07:00
Kyle Sanderson 9c62e94239 Optimize native call if statically bound (bug 5842, r=ds,fyren f=dvander).
Original patch written by David Anderson (original r from Fyren).
- Updated to function with the current JIT compiler.
- Took in clean-ups from later-dated patches.
2014-05-11 14:36:32 -07:00
David Anderson e69e9eddc7 Change float comparison operators to return false for NaN (bug 6107, r=ds).
--HG--
extra : rebase_source : a11c56fb23d6617545def3591ec6100dd143eb3e
2014-04-22 19:40:45 -07:00
David Anderson f9f4c7dcd6 Add an interpreter because. (bug 5902, r=ds). 2013-09-01 00:23:44 -07:00
Nicholas Hastings 124ede82b3 Fix build. 2013-08-29 15:05:34 -04:00
Nicholas Hastings 1c40d77b14 Fix build. 2013-08-29 14:16:18 -04:00
Kyle Sanderson d05feabcd6 Suppress SpewOpcode if not a debug build (bug 5859, r=dvander). 2013-08-27 08:39:15 -04:00
David Anderson d6a6194e68 Make amtl headers BSD-licensed and clean up outstanding style issues. 2013-08-22 17:11:17 -07:00
David Anderson c373527851 Rename ke_* headers to am-*
--HG--
rename : public/amtl/ke_allocator_policies.h => public/amtl/am-allocator-policies.h
rename : public/amtl/ke_inline_list.h => public/amtl/am-inline-list.h
rename : public/amtl/ke_thread_posix.h => public/amtl/am-thread-posix.h
rename : public/amtl/ke_thread_utils.h => public/amtl/am-thread-utils.h
rename : public/amtl/ke_thread_windows.h => public/amtl/am-thread-windows.h
rename : public/amtl/ke_utility.h => public/amtl/am-utility.h
rename : public/amtl/ke_vector.h => public/amtl/am-vector.h
2013-08-22 17:10:59 -07:00
David Anderson b972ea4781 Fix stack alignment when lazily compiling scripted calls (bug 5871, r=ds). 2013-08-20 23:59:11 -07:00
David Anderson 582162460f Fix OP_MOVS to not clobber random memory (bug 5868, r=psychonic). 2013-08-19 12:59:10 -07:00
David Anderson c48cc0afdc Fix OS X build. 2013-08-15 16:26:16 -07:00
David Anderson 3ac43497b9 Implement a watchdog timer for scripts that take too long to execute (bug 5837, r=fyren).
--HG--
extra : rebase_source : ffacb38457eca581660ce8f15c444ad828b7fedd
2013-08-14 23:54:25 -07:00
David Anderson b39fcebe65 Remove InfoVars, reassign DAT from EBP to ESI to preserve C++ stacktraces in JIT code (bug 5844 part 10, r=ds). 2013-08-12 00:24:02 +01:00
David Anderson 04129a0841 Remove InfoVars::frm (bug 5844 part 9, r=ds). 2013-08-12 00:23:54 +01:00
David Anderson a7658f013e Eliminate InfoVars::hp (bug 5844 part 8, r=ds). 2013-08-12 00:23:00 +01:00
David Anderson 2822bf7a65 Eliminate InfoVars::cip (bug 5844 part 7, r=ds). 2013-08-12 00:22:54 +01:00
David Anderson 87ccd272ee Eliminate InfoVars::rval (bug 5844 part 6, r=ds). 2013-08-12 00:22:41 +01:00
David Anderson 18275ce2c9 Remove InfoVars::ctx (bug 5844 part 5, r=fyren). 2013-08-11 11:33:47 -07:00
David Anderson 5935070dfa Remove InfoVars::memory (bug 5844 part 4, r=ds). 2013-08-11 11:33:29 -07:00