From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id B182C6EFF3; Fri, 5 Jun 2026 17:57:20 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org B182C6EFF3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1780671440; bh=2qDtSuLRXgQ26MKUuZLTjYKaZlRNnatq2afWR2CTGSQ=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=LKpFmWssI/WE0J9v4rnu8YHXwWs/EhYj3LYIGoSckx6oWq6qqO9/B3fWh3ALl8vSF DsNVJOMxHmwEOsbUNMIaakFlnggQ95bHj7PxxCN5sb9Kh/89tlJu5qvLsUAe5U89y7 OEOGqXlkRunDzENAA778/6NsMOfxyB0NYmDqe2NM= Received: from send240.i.mail.ru (send240.i.mail.ru [95.163.59.79]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 147A66EFF3 for ; Fri, 5 Jun 2026 17:57:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 147A66EFF3 Received: by exim-smtp-85dd497b6-9qvxl with esmtpa (envelope-from ) id 1wVVz3-00000000Wsp-2RZS; Fri, 05 Jun 2026 17:57:18 +0300 Content-Type: multipart/alternative; boundary="------------MYipQssv3flrZH3jIMsKm2f0" Message-ID: Date: Fri, 5 Jun 2026 17:57:16 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Sergey Kaplun , Evgeniy Temirgaleev Cc: tarantool-patches@dev.tarantool.org References: <20260604093052.2221827-1-skaplun@tarantool.org> <20260604093052.2221827-3-skaplun@tarantool.org> In-Reply-To: <20260604093052.2221827-3-skaplun@tarantool.org> X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9FAD06046D747065BB37D99665BB5EFC39F1602B0976B8AB0182A05F5380850408FB0B631F19B4D173DE06ABAFEAF6705DE04410D0C2F0A02CF5BE8966240E96A0CC985FF34F4B040 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE787D390A33DAA1DB5EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB5533756660A56BB7F6F20B60FB6918590A21188D87112F40057D09E0C07CAA35CFCCB74A389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0A29E2F051442AF778941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B6D52CD31C43BF465FCC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE73A6989AD488FD87D731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A5BB4CC340BB8200265002B1117B3ED696B38979831C3777F61E49B01306B5E3AD823CB91A9FED034534781492E4B8EEAD9CFA8CFAC159CE19BDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D65935A58296C47B9623EE3791920623B02F97AB86925AA1C25D5252681D06EA7EAE9507F0046BE726ACB8341EE9D5BE9A0AFE66538DFFF1CC1E62E167FBBC1E9A173FAFED68F1743E076536EB022892E5344C41F94D744909CE2512F26BEC029E55448553D2254B8D95CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRI2994ruhLUI+DBSxMfKOM= X-DA7885C5: 802C53F78FCAB3A0F255D290C0D534F99A5EEB9CD45DCE9F400A98A6D9A46CF427522F4F1CA5B8D05B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393520AF17B8A65FDE23FFD3DB75F49FBA59CB55D1314E9E81FD3401E0A2233125EEF86D5F70DA33880E41E8EF7A07863ECB274557F927329BE2DDF8182D28ACDB545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit 2/4] dbg: fix DUALNUM detection for LLDB X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Bronnikov via Tarantool-patches Reply-To: Sergey Bronnikov Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This is a multi-part message in MIME format. --------------MYipQssv3flrZH3jIMsKm2f0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Sergey, thanks for the patch! LGTM with a minor comment below. Sergey On 6/4/26 12:30, Sergey Kaplun wrote: > The `lj-arch` command on LLDB reports 'LJ_DUALNUM: True' for the > single-number build since the `module.FindSymbol()` returns an invalid > `SBSymbol` object [1], which is not `None`. This leads to invalid > DUALNUM mode detection. > > This patch fixes this by checking that the returned symbol is valid. > > [1]:https://lldb.llvm.org/python_api/lldb.SBModule.html#lldb.SBModule.FindSymbol > --- > src/luajit_dbg.py | 3 ++- > .../debug-extension-tests.py | 15 +++++++++++++-- > 2 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/src/luajit_dbg.py b/src/luajit_dbg.py > index 410f0191..300d65e9 100644 > --- a/src/luajit_dbg.py > +++ b/src/luajit_dbg.py I believe DUALNUM should be added to the help for `lj-arch`. Now it describes only LJ_64, LJ_GC64: | (gdb) help lj-arch | lj-arch | | The command requires no args and dumps values of LJ_64 and LJ_GC64 | compile-time flags. These values define the sizes of host and GC | pointers, respectively. | (gdb) > @@ -498,7 +498,8 @@ class _LLDBDebugger(Debugger): > global LJ_64, LJ_DUALNUM, LJ_FR2, LJ_GC64 > IRT_P64 = 9 > module = self.target.modules[0] > - LJ_DUALNUM = module.FindSymbol('lj_lib_checknumber') is not None > + dualnum_sym = module.FindSymbol('lj_lib_checknumber') > + LJ_DUALNUM = dualnum_sym is not None and dualnum_sym.IsValid() > irtype_enum = self.target.FindFirstType('IRType').enum_members > for member in irtype_enum: > if member.name == 'IRT_PTR': > diff --git a/test/tarantool-debugger-tests/debug-extension-tests.py b/test/tarantool-debugger-tests/debug-extension-tests.py > index 7cb60d84..06a118ff 100644 > --- a/test/tarantool-debugger-tests/debug-extension-tests.py > +++ b/test/tarantool-debugger-tests/debug-extension-tests.py > @@ -92,6 +92,17 @@ def execute_process(cmd, timeout=TIMEOUT): > return process.stdout > > > +IS_DUALNUM = execute_process([ > + LUAJIT_BINARY, '-e', "print(require('ffi').abi('dualnum'))" > +]).strip() == 'true' > + > +# If it is the guaranteed DUALNUM build (for example, on aarch64), > +# we use this regexp for the guaranteed 'integer' check and > +# 'number' for single-number build. > +RX_INT = r'integer' if IS_DUALNUM else r'number' > +RX_ISDUALNUM = r'True' if IS_DUALNUM else r'False' > + > + > class TestCaseBase(unittest.TestCase): > @classmethod > def construct_cmds(cls): > @@ -150,7 +161,7 @@ class TestLJArch(TestCaseBase): > pattern = ( > r'LJ_64: (True|False), ' > r'LJ_GC64: (True|False), ' > - r'LJ_DUALNUM: (True|False)' > + r'LJ_DUALNUM: ' + RX_ISDUALNUM > ) > > > @@ -265,7 +276,7 @@ class TestLJTV(TestCaseBase): > r'cdata @ ' + RX_ADDR + r'\n' > r'table @ ' + RX_ADDR + r' \(asize: \d+, hmask: ' + RX_HASH + r'\)\n' > r'userdata @ ' + RX_ADDR + r'\n' > - r'(number|integer) .*1.*\n' > + RX_INT + r' .*1.*\n' > r'number 1.1\d+\n' > ) > --------------MYipQssv3flrZH3jIMsKm2f0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi, Sergey,

thanks for the patch! LGTM with a minor comment below.

Sergey

On 6/4/26 12:30, Sergey Kaplun wrote:
The `lj-arch` command on LLDB reports 'LJ_DUALNUM: True' for the
single-number build since the `module.FindSymbol()` returns an invalid
`SBSymbol` object [1], which is not `None`. This leads to invalid
DUALNUM mode detection.

This patch fixes this by checking that the returned symbol is valid.

[1]: https://lldb.llvm.org/python_api/lldb.SBModule.html#lldb.SBModule.FindSymbol
---
 src/luajit_dbg.py                                 |  3 ++-
 .../debug-extension-tests.py                      | 15 +++++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/luajit_dbg.py b/src/luajit_dbg.py
index 410f0191..300d65e9 100644
--- a/src/luajit_dbg.py
+++ b/src/luajit_dbg.py

I believe DUALNUM should be added to the help for `lj-arch`. Now it describes only LJ_64, LJ_GC64:

| (gdb) help lj-arch
| lj-arch
|
| The command requires no args and dumps values of LJ_64 and LJ_GC64
| compile-time flags. These values define the sizes of host and GC
| pointers, respectively.
| (gdb) 

@@ -498,7 +498,8 @@ class _LLDBDebugger(Debugger):
         global LJ_64, LJ_DUALNUM, LJ_FR2, LJ_GC64
         IRT_P64 = 9
         module = self.target.modules[0]
-        LJ_DUALNUM = module.FindSymbol('lj_lib_checknumber') is not None
+        dualnum_sym = module.FindSymbol('lj_lib_checknumber')
+        LJ_DUALNUM = dualnum_sym is not None and dualnum_sym.IsValid()
         irtype_enum = self.target.FindFirstType('IRType').enum_members
         for member in irtype_enum:
             if member.name == 'IRT_PTR':
diff --git a/test/tarantool-debugger-tests/debug-extension-tests.py b/test/tarantool-debugger-tests/debug-extension-tests.py
index 7cb60d84..06a118ff 100644
--- a/test/tarantool-debugger-tests/debug-extension-tests.py
+++ b/test/tarantool-debugger-tests/debug-extension-tests.py
@@ -92,6 +92,17 @@ def execute_process(cmd, timeout=TIMEOUT):
         return process.stdout
 
 
+IS_DUALNUM = execute_process([
+    LUAJIT_BINARY, '-e', "print(require('ffi').abi('dualnum'))"
+]).strip() == 'true'
+
+# If it is the guaranteed DUALNUM build (for example, on aarch64),
+# we use this regexp for the guaranteed 'integer' check and
+# 'number' for single-number build.
+RX_INT = r'integer' if IS_DUALNUM else r'number'
+RX_ISDUALNUM = r'True' if IS_DUALNUM else r'False'
+
+
 class TestCaseBase(unittest.TestCase):
     @classmethod
     def construct_cmds(cls):
@@ -150,7 +161,7 @@ class TestLJArch(TestCaseBase):
     pattern = (
         r'LJ_64: (True|False), '
         r'LJ_GC64: (True|False), '
-        r'LJ_DUALNUM: (True|False)'
+        r'LJ_DUALNUM: ' + RX_ISDUALNUM
     )
 
 
@@ -265,7 +276,7 @@ class TestLJTV(TestCaseBase):
         r'cdata @ ' + RX_ADDR + r'\n'
         r'table @ ' + RX_ADDR + r' \(asize: \d+, hmask: ' + RX_HASH + r'\)\n'
         r'userdata @ ' + RX_ADDR + r'\n'
-        r'(number|integer) .*1.*\n'
+        RX_INT + r' .*1.*\n'
         r'number 1.1\d+\n'
     )
 
--------------MYipQssv3flrZH3jIMsKm2f0--