88 Commits

Author SHA1 Message Date
Igor Munkin
a019e8a111
Merge d969cb9c31a4de6f922da7de5b267f00eb2d2daf into 538a82133ad6fddfd0ca64de167c4aca3bc1a2da 2025-03-12 16:42:27 +08:00
Mike Pall
8358eb0cce Merge branch 'master' into v2.1 2025-01-13 16:15:19 +01:00
Mike Pall
e8236561d4 Bump copyright date. 2025-01-13 15:59:10 +01:00
Mike Pall
913df6a945 Merge branch 'master' into v2.1 2024-03-10 17:26:03 +01:00
Mike Pall
88ed9fdbbb Handle stack reallocation in debug.setmetatable() and lua_setmetatable().
Thanks to Sergey Kaplun. #1172
2024-03-10 17:13:28 +01:00
Igor Munkin
d969cb9c31
Prevent Lua VM re-entry through JIT trace.
JIT recording semantics assumes FFI calls are leaf regarding the LuaJIT
VM: if the execution exited Lua world through FFI machinery it is not
re-entering Lua world again.

However, there is a way to break this assumption via FFI: one can
re-enter LuaJIT VM via Lua C API used within the particular C routine
called via FFI. As a result the following host stack mix is created:
| Lua-FFI -> C routine -> Lua-C API -> Lua VM

This sort of re-entrancy is not supported by LuaJIT tracing compiler.
@mraleph named such kind of the call stack an "FFI sandwich" in the
tarantool/tarantool#4427.

This changeset introduces the mechanism for Lua-C API callbacks similar
to the one implemented for Lua-FFI: trace recording is aborted when the
execution re-enters LuaJIT VM. If re-enter is detected while running the
particular mcode, the runtime finishes its execution with EXIT_FAILURE
code and calls panic routine prior to the exit.

Co-authored-by: Vyacheslav Egorov <vegorov@google.com>
Co-authored-by: Sergey Ostanevich <sergos@tarantool.org>
Signed-off-by: Igor Munkin <imun@cpan.org>
2024-02-21 19:30:34 +03:00
Mike Pall
a5d2f70c73 Handle OOM error on stack resize in coroutine.resume and lua_checkstack.
Thanks to Peter Cawley. #1066
2023-09-21 04:40:48 +02:00
Mike Pall
ef587afb2c Merge branch 'master' into v2.1 2023-08-20 21:33:37 +02:00
Mike Pall
158a284cc9 Bump copyright date. 2023-08-20 21:25:30 +02:00
Mike Pall
633f265f67 LJ_GC64: Fix lua_concat().
Reported by Mathias Westerdahl.
2022-08-10 19:27:53 +02:00
Mike Pall
7306ba78d6 Merge branch 'master' into v2.1 2022-01-15 19:42:30 +01:00
Mike Pall
c4dfb625ba Bump copyright date. 2022-01-15 19:30:54 +01:00
Mike Pall
c6f5ef649b Refactor table traversal.
Sponsored by OpenResty Inc.
2021-09-19 17:38:49 +02:00
Mike Pall
836fb5bbd3 Reorganize lightuserdata interning code. 2021-03-25 02:15:26 +01:00
Mike Pall
1e66d0f9e6 Merge branch 'master' into v2.1 2021-01-02 21:56:07 +01:00
Mike Pall
f47c864b01 Bump copyright date. 2021-01-02 21:49:41 +01:00
Mike Pall
e9af1abec5 Add support for full-range 64 bit lightuserdata. 2020-09-30 01:34:49 +02:00
Mike Pall
dd5032ed84 Fix lua_yield() from C hook.
Reported by Jason Carr.
2020-09-15 01:02:24 +02:00
Mike Pall
8ae5170cdc Improve assertions. 2020-06-15 02:52:00 +02:00
Mike Pall
fc1c4da3cc Merge branch 'master' into v2.1 2020-03-20 13:38:05 +01:00
Mike Pall
e613105ca9 Fix write barrier for lua_setupvalue() and debug.setupvalue(). 2020-03-20 13:35:49 +01:00
Mike Pall
87b111f0fe Merge branch 'master' into v2.1 2020-01-20 23:34:21 +01:00
Mike Pall
38a5ed4b43 Bump copyright date. 2020-01-20 23:26:51 +01:00
Mike Pall
de26f76e2e From Lua 5.2: Add lua_tonumberx() and lua_tointegerx().
Contributed by François Perrad.
2017-04-07 12:48:37 +02:00
Mike Pall
2b8de8cfc6 From Lua 5.2: Add luaL_setmetatable().
Contributed by François Perrad.
2017-04-07 12:38:05 +02:00
Mike Pall
cde968f91f From Lua 5.2: Add luaL_testudata().
Contributed by François Perrad.
2017-04-07 12:31:06 +02:00
Mike Pall
f2e2a3f757 From Lua 5.3: Add lua_isyieldable().
Contributed by François Perrad.
2017-04-07 12:27:09 +02:00
Mike Pall
ef23b70eb6 From Lua 5.2: Add lua_copy().
Contributed by François Perrad.
2017-04-07 12:24:26 +02:00
Mike Pall
c67a098292 From Lua 5.2: Add lua_version().
Contributed by François Perrad.
2017-04-07 12:21:41 +02:00
Mike Pall
9c685f7003 Refactor with LUA_OK.
Contributed by François Perrad.
2017-04-07 12:12:03 +02:00
Mike Pall
71ff7ef8a7 Merge branch 'master' into v2.1 2017-01-17 12:41:05 +01:00
Mike Pall
b93a1dd0c8 Bump copyright date to 2017. 2017-01-17 12:35:03 +01:00
Mike Pall
f4231949b5 Merge branch 'master' into v2.1 2016-03-03 12:11:37 +01:00
Mike Pall
db1b399af1 Bump copyright date to 2016. 2016-03-03 12:02:22 +01:00
Mike Pall
86c21bd245 Add collectgarbage("isrunning"). 2015-10-01 16:26:00 +02:00
Mike Pall
9647aab0dc LJ_FR2: Fix lua_settable() and lua_setfield(). 2015-01-07 13:17:57 +01:00
Mike Pall
0a5045c34e Merge branch 'master' into v2.1 2015-01-06 00:12:45 +01:00
Mike Pall
86913b9bbf Bump copyright date to 2015. 2015-01-05 23:59:31 +01:00
Mike Pall
cb481ddc8f Add LJ_GC64 mode: 64 bit GC object references.
Actually NaN tagging with 47 bit pointers and 13+4 bit tags.
2015-01-03 15:23:58 +01:00
Mike Pall
054e6abe37 Add LJ_FR2 mode: Two-slot frame info. 2015-01-03 15:04:38 +01:00
Mike Pall
5cb6e2eaaf Cleanup of TValue setters. No functional changes. 2014-12-20 01:48:00 +01:00
Mike Pall
6e9145a882 Cleanup of memory vs. GC sizes. No functional changes. 2014-12-20 00:17:50 +01:00
Mike Pall
881f48f980 Cleanup of frame handling. No functional changes. 2014-12-15 02:27:27 +01:00
Mike Pall
a9d4543601 Merge branch 'master' into v2.1 2014-01-16 23:18:34 +01:00
Mike Pall
ef59e54820 Bump copyright date to 2014. 2014-01-16 23:10:16 +01:00
Mike Pall
8a2b2beac2 Merge branch 'master' into v2.1 2013-11-05 19:46:41 +01:00
Mike Pall
8941b1994e Fix for last commit 2013-11-05 19:45:04 +01:00
Mike Pall
c8cfca0557 Add table.new(). 2013-10-09 17:02:01 +02:00
Mike Pall
8f90a1279e Big renaming of string buffer/formatting/conversion functions. 2013-05-13 10:15:07 +02:00
Mike Pall
625ffca739 Refactor raw object to pointer or string conversions. 2013-05-13 01:23:33 +02:00