From nobody Fri Sep 15 15:34:15 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RnJBw158Cz4sslv; Fri, 15 Sep 2023 15:34:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RnJBw0clSz4ThQ; Fri, 15 Sep 2023 15:34:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694792056; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=GyqyfsPXLCe0P4QAKmr6MyROZtcQlqWIu+ZbDFQkgMI=; b=vUQe5+kLrUyUvIdc+GP8V7WnvngB1O5iTxM+L4kNKBBzAR3TITXMKtmy2G21W7gUYEcT1C 2kXytHmeKY5stVMkA2m4KPyPizAoJcc/hhGDjRV53CUp5Lo0pzdWoDUa4G9FWwBNd3Bvki hrJBooAGxlBjalvLkkEu/FRru0hIK+h/LPNnKfOedp5Pk4EsCovlwRjF7OKKJoVyv3Vt5y 6SkHX7UkH8m0lf4TnMnW0IPHwa2XrPYI2Fqr+/jGdRMpTc1sfwyRnEWYlRGwlsUIb4YPX/ /VyY6BTCKOrAIVUb0JJEvajHIQSrkjtlskiC6Qgr1+k0ScF2tMp6QbIYa8DpBw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694792056; a=rsa-sha256; cv=none; b=tn4/9hEUvJk1W6/ZtttJJkWi9f3KeERmMo9gxXM3cpd18yW01PVCnQfhkld3tgDCTpl/De 1fRgJ2KbH3W47p7qnqqw03Cs568aYu02mHMBHJIkkV65p5hJlbzmCHPXZdrv1PYm/B4/Dp 0Xtrh1zr1wN2VwB6SDmgrtxx4YgokT9kkEIFrZ8+IkmZaQ6GQXSWeJWn0LfKIAA0lcUOc0 1xinxRKBvnYJuNyMU6F68/X1rpfTeD+n6ajsLr2WGisgFtFeHt5ICu8EzUsHeHdaoD4kqE Yt0JBmSkshEoyVjDsU/0mjfc4eH5cDfou8lQwVcLcekdjXeXFhXLiddyiFDhBg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694792056; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=GyqyfsPXLCe0P4QAKmr6MyROZtcQlqWIu+ZbDFQkgMI=; b=u4poh/yQal5z3ZLQ5KxFNrjAHQKTzmZlqmSI4bYUSfnJZq+UMFFuX843XZQOLC3hAPM9gH +v2X/McdxoPCldUZVVC0HlAwzFYIJDLRauP0Xzq5wzAWbdzM4cLBIfn//D0V138vdzSjAe +4sFuf5iqEY0DRTu4hvXGklkF/QJgNaq6ENFnZ7Hqzge7zsB7x2QVseSNIila5Mox5/XfW bdmCGA+7YKD8VKIfxRrCKUbzbKFjL82kvWJn6gUAsHK+3XhpIJ3Xnc0XeNxbtiqFZywHTF l8Q0pVpB4JMIrDv13HRHMBTKyAG1AoXMziTIdRLnoo0hBMWZFXkK+om6Fml94Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RnJBv6p62zTpF; Fri, 15 Sep 2023 15:34:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38FFYFbB040764; Fri, 15 Sep 2023 15:34:15 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38FFYFcD040761; Fri, 15 Sep 2023 15:34:15 GMT (envelope-from git) Date: Fri, 15 Sep 2023 15:34:15 GMT Message-Id: <202309151534.38FFYFcD040761@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Christos Margiolis Subject: git: bbe8195bfad6 - main - kinst: do not look for a function epilogue List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: bbe8195bfad620e01a7b1cfdb0de3e4b65a72949 Auto-Submitted: auto-generated The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=bbe8195bfad620e01a7b1cfdb0de3e4b65a72949 commit bbe8195bfad620e01a7b1cfdb0de3e4b65a72949 Author: Christos Margiolis AuthorDate: 2023-09-15 15:33:41 +0000 Commit: Christos Margiolis CommitDate: 2023-09-15 15:33:41 +0000 kinst: do not look for a function epilogue kinst currently only traces functions that start and end with the usual function prologue and epilogue respectively. Ignoring functions that do not have an epilogue however, makes the filtering too strict, as this means that we can not trace functions that never return (e.g vnlru_proc()). This patch relaxes the filtering and only checks whether the function pushes the frame pointer. Reviewed by: markj Approved by: markj Differential Revision: https://reviews.freebsd.org/D41876 --- sys/cddl/dev/kinst/amd64/kinst_isa.c | 18 ++++++++++-------- sys/cddl/dev/kinst/riscv/kinst_isa.c | 11 +++++------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/sys/cddl/dev/kinst/amd64/kinst_isa.c b/sys/cddl/dev/kinst/amd64/kinst_isa.c index 398f30a281c0..b1d3d8727ead 100644 --- a/sys/cddl/dev/kinst/amd64/kinst_isa.c +++ b/sys/cddl/dev/kinst/amd64/kinst_isa.c @@ -22,7 +22,6 @@ #include "kinst.h" #define KINST_PUSHL_RBP 0x55 -#define KINST_POPL_RBP 0x5d #define KINST_STI 0xfb #define KINST_POPF 0x9d @@ -502,7 +501,7 @@ kinst_make_probe(linker_file_t lf, int symindx, linker_symval_t *symval, const char *func; int error, instrsize, n, off; uint8_t *instr, *limit, *tmp; - bool push_found, pop_found; + bool push_found; pd = opaque; func = symval->name; @@ -521,17 +520,20 @@ kinst_make_probe(linker_file_t lf, int symindx, linker_symval_t *symval, * manipulations since they might correspond to exception handlers. */ tmp = instr; - push_found = pop_found = false; + push_found = false; while (tmp < limit) { - if (*tmp == KINST_PUSHL_RBP) + /* + * Checking for 'pop %rbp' as well makes the filtering too + * strict as it would skip functions that never return (e.g., + * vnlru_proc()). + */ + if (*tmp == KINST_PUSHL_RBP) { push_found = true; - else if (*tmp == KINST_POPL_RBP) - pop_found = true; - if (push_found && pop_found) break; + } tmp += dtrace_instr_size(tmp); } - if (!push_found || !pop_found) + if (!push_found) return (0); n = 0; diff --git a/sys/cddl/dev/kinst/riscv/kinst_isa.c b/sys/cddl/dev/kinst/riscv/kinst_isa.c index 9c1f4a239f83..1fabde189712 100644 --- a/sys/cddl/dev/kinst/riscv/kinst_isa.c +++ b/sys/cddl/dev/kinst/riscv/kinst_isa.c @@ -448,7 +448,7 @@ kinst_make_probe(linker_file_t lf, int symindx, linker_symval_t *symval, kinst_patchval_t *insn, v; uint8_t *instr, *limit; int instrsize, n, off; - bool lrsc_block, store_found, ret_found; + bool lrsc_block, store_found; pd = opaque; func = symval->name; @@ -464,16 +464,15 @@ kinst_make_probe(linker_file_t lf, int symindx, linker_symval_t *symval, return (0); /* Check for the usual function prologue. */ + store_found = false; for (insn = (kinst_patchval_t *)instr; insn < (kinst_patchval_t *)limit; insn++) { - if (dtrace_instr_sdsp(&insn) || dtrace_instr_c_sdsp(&insn)) + if (dtrace_instr_sdsp(&insn) || dtrace_instr_c_sdsp(&insn)) { store_found = true; - else if (dtrace_instr_ret(&insn) || dtrace_instr_c_ret(&insn)) - ret_found = true; - if (store_found && ret_found) break; + } } - if (!store_found || !ret_found) + if (!store_found) return (0); n = 0;