Tarantool development patches archive
 help / color / mirror / Atom feed
From: Maxim Kokryashkin via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: tarantool-patches@dev.tarantool.org, imun@tarantool.org,
	skaplun@tarantool.org
Subject: [Tarantool-patches] [PATCH luajit] sysprof: disable proto and trace dumps in default
Date: Sun, 12 Jun 2022 21:52:20 +0300	[thread overview]
Message-ID: <20220612185220.502537-1-m.kokryashkin@tarantool.org> (raw)

There is no need to dump proto or trace information for sysprof
in the default mode. Moreover, attempts to do so will lead to
segmentation fault due to uninitialized buffer. This commit
disables proto and trace dumps in the default mode.

Resolves tarantool/tarantool#7264
---
PR: https://github.com/tarantool/tarantool/pull/7265
Branch: https://github.com/tarantool/luajit/tree/fckxorg/gh-7264-dump-proto-default-mode

 src/lj_sysprof.c                              |  4 +-
 ...4-add-proto-trace-sysprof-default.test.lua | 58 +++++++++++++++++++
 2 files changed, 60 insertions(+), 2 deletions(-)
 create mode 100644 test/tarantool-tests/gh-7264-add-proto-trace-sysprof-default.test.lua

diff --git a/src/lj_sysprof.c b/src/lj_sysprof.c
index a4a70146..2e9ed9b3 100644
--- a/src/lj_sysprof.c
+++ b/src/lj_sysprof.c
@@ -524,7 +524,7 @@ void lj_sysprof_add_proto(const struct GCproto *pt)
 {
   struct sysprof *sp = &sysprof;
 
-  if (sp->state != SPS_PROFILE)
+  if (sp->state != SPS_PROFILE || sp->opt.mode == LUAM_SYSPROF_DEFAULT)
     return;
 
   /*
@@ -543,7 +543,7 @@ void lj_sysprof_add_trace(const struct GCtrace *tr)
 {
   struct sysprof *sp = &sysprof;
 
-  if (sp->state != SPS_PROFILE)
+  if (sp->state != SPS_PROFILE || sp->opt.mode == LUAM_SYSPROF_DEFAULT)
     return;
 
   /* See the comment about the sysprof state above. */
diff --git a/test/tarantool-tests/gh-7264-add-proto-trace-sysprof-default.test.lua b/test/tarantool-tests/gh-7264-add-proto-trace-sysprof-default.test.lua
new file mode 100644
index 00000000..2d2a756a
--- /dev/null
+++ b/test/tarantool-tests/gh-7264-add-proto-trace-sysprof-default.test.lua
@@ -0,0 +1,58 @@
+-- Sysprof is implemented for x86 and x64 architectures only.
+local ffi = require("ffi")
+require("utils").skipcond(
+  jit.arch ~= "x86" and jit.arch ~= "x64" or jit.os ~= "Linux"
+    or ffi.abi("gc64"),
+  jit.arch.." architecture or "..jit.os..
+  " OS is NIY for sysprof"
+)
+
+local tap = require("tap")
+local jit = require("jit")
+
+local test = tap.test("gh-7264-add-proto-trace-sysprof-default.test.lua")
+test:plan(2)
+
+jit.off()
+jit.flush()
+
+local function allocate()
+  local a = {}
+  for _ = 1, 1e4 do table.insert(a, "teststring") end
+  return a
+end
+
+local chunk = [[
+function lua_global_f()
+  local a = 'teststring'
+end
+]]
+
+-- Trace creation during the sysprof runtime.
+jit.on()
+
+local _ = nil
+local res, err = misc.sysprof.start({ mode = "D" })
+assert(res, err)
+allocate()
+res, _ = misc.sysprof.stop()
+test:ok(res)
+
+jit.off()
+
+-- Proto creation during the sysprof runtime.
+res, err = misc.sysprof.start({ mode = "D" })
+assert(res, err)
+
+res, err = loadstring(chunk)
+assert(res, err)
+res()
+
+-- luacheck: globals lua_global_f
+lua_global_f()
+collectgarbage()
+res, _ = misc.sysprof.stop()
+test:ok(res)
+
+jit.on()
+os.exit(test:check() and 0 or 1)
-- 
2.36.1


             reply	other threads:[~2022-06-12 18:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-12 18:52 Maxim Kokryashkin via Tarantool-patches [this message]
2022-06-16  6:56 ` Sergey Kaplun via Tarantool-patches
2022-07-04 15:27   ` Maxim Kokryashkin via Tarantool-patches
2022-07-15 13:36 ` Igor Munkin via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220612185220.502537-1-m.kokryashkin@tarantool.org \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=imun@tarantool.org \
    --cc=max.kokryashkin@gmail.com \
    --cc=skaplun@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH luajit] sysprof: disable proto and trace dumps in default' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox