From patchwork Wed Jan 19 08:30:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717264 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A22C2C433EF for ; Wed, 19 Jan 2022 08:30:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351533AbiASIa0 (ORCPT ); Wed, 19 Jan 2022 03:30:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47004 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234262AbiASIaX (ORCPT ); Wed, 19 Jan 2022 03:30:23 -0500 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F230C06161C for ; Wed, 19 Jan 2022 00:30:23 -0800 (PST) Received: by mail-ed1-x52a.google.com with SMTP id cx27so7735860edb.1 for ; Wed, 19 Jan 2022 00:30:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+q1AC6uEFBIqtXdCRvnGmv8PVSyVX5IUmDh2Uc2MyYE=; b=Wul9WUB5bxLWbqfZ7Ae/gxgqtB8zsdw48Lp+phV3X8d0kO9OC//8Ag9U0VyP0aUNa5 uMQJTxjD6Zv0E7oqgHoI9BDaLHFNIzJ1Gw3bj2D9kKh891756+u3CFhuMy+eVDqch3RF 323aSkjsyrQsT6n4uRg4CSi49H80aEpPWGnYWed/TzUKzW4BRlLCKVMNzDACJrtlgyXg 7tzyXF5dNjPdKVDR72PcoX9P8YwGfhlQrMuBRfre1SU/4/T8AFzXqrh0mR2B3r1yr3qf suB4a+Fz7ghrkaD8w30f3hasMIgKQwPvZFY2KNn+LHQxpWHh0FjUSpvCE/isZB3wr3gn jQFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+q1AC6uEFBIqtXdCRvnGmv8PVSyVX5IUmDh2Uc2MyYE=; b=X3H4B2icca1c6gNHsftB7yhDsD3BAyDCqMzTU+2GP+rFxBghuvbelqtboEA3ynD81X nHcCsP5uOEXBBPldWbIbNLbYzM07xy+Arqxnh7y3FLmGgVxH5ZizkAC9ly5OF1/WOI5k kJK3pQKAPk+9AWLEjrbQod8Z728Fu44RCfkAoWXiaX0TgRocf33OFwhhVULQQNxecdb3 z3aiWvqB2qJV7zedm9XiMl7ohJ7yFLabEV3eJLUcRuzjZsMUH9TrOoqSfFXgGgd6z0EU qhruJOergnlpaNQn0Zb4JXFjUIMadWTdvTVqluPG36U0YLmztPoNSqzJX1n9QOwVPO+D X/cQ== X-Gm-Message-State: AOAM533HHkc85dMw63iLRVqMJHbTQ7mcxRo7tBFmcxgmq62joYYCkWa+ JM/5Mpp6TAKE3s2tLnuT16tKRaj4Cpc= X-Google-Smtp-Source: ABdhPJxDs6L4YSrSgncJbasrU21YHSa5Tx4Hw/hVxxtnONROP+i56b1Q/DIcGUeDysld6hcY5mKUeg== X-Received: by 2002:a17:906:7302:: with SMTP id di2mr8044639ejc.322.1642581022153; Wed, 19 Jan 2022 00:30:22 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:21 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 01/11] trace-cmd dump: Add helpers for processing trace file version 7 Date: Wed, 19 Jan 2022 10:30:09 +0200 Message-Id: <20220119083019.246153-2-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org New global variables are added, that hold trace file context: - trace file version - compression context Also a few helper functions for reading compressed data. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 88 ++++++++++++++++++++++++++++++++----------- 1 file changed, 67 insertions(+), 21 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 2408a4ab..23733194 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -26,6 +26,9 @@ static struct tep_handle *tep; static unsigned int trace_cpus; static int has_clock; +static unsigned long file_version; +static bool read_compress; +static struct tracecmd_compression *compress; enum dump_items { SUMMARY = (1 << 0), @@ -52,46 +55,69 @@ enum dump_items verbosity; tracecmd_plog(fmt, ##__VA_ARGS__); \ } while (0) -static int read_file_string(int fd, char *dst, int len) +static int read_fd(int fd, char *dst, int len) { size_t size = 0; int r; do { - r = read(fd, dst+size, 1); + r = read(fd, dst+size, len); if (r > 0) { - size++; - len--; + size += r; + len -= r; } else break; - if (!dst[size - 1]) - break; - } while (r > 0 && len); + } while (r > 0); - if (!size || dst[size - 1]) + if (len) return -1; - return 0; + return size; } -static int read_file_bytes(int fd, char *dst, int len) +static int read_compressed(int fd, char *dst, int len) +{ + + if (read_compress) + return tracecmd_compress_read(compress, dst, len); + return read_fd(fd, dst, len); +} + +static int do_lseek(int fd, int offset, int whence) +{ + if (read_compress) + return tracecmd_compress_lseek(compress, offset, whence); + return lseek64(fd, offset, whence); +} + +static int read_file_string(int fd, char *dst, int len) { size_t size = 0; int r; do { - r = read(fd, dst+size, len); + r = read_compressed(fd, dst+size, 1); if (r > 0) { - size += r; - len -= r; + size++; + len--; } else break; - } while (r > 0); + if (!dst[size - 1]) + break; + } while (r > 0 && len); - if (len) + if (!size || dst[size - 1]) return -1; return 0; } +static int read_file_bytes(int fd, char *dst, int len) +{ + int ret; + + ret = read_compressed(fd, dst, len); + return ret < 0 ? ret : 0; +} + static void read_dump_string(int fd, int size, enum dump_items id) { char buf[DUMP_SIZE]; @@ -146,7 +172,6 @@ static void dump_initial_format(int fd) char magic[] = TRACECMD_MAGIC; char buf[DUMP_SIZE]; int val4; - unsigned long ver; do_print(SUMMARY, "\t[Initial format]\n"); @@ -168,11 +193,11 @@ static void dump_initial_format(int fd) die("no version string"); do_print(SUMMARY, "\t\t%s\t[Version]\n", buf); - ver = strtol(buf, NULL, 10); - if (!ver && errno) + file_version = strtol(buf, NULL, 10); + if (!file_version && errno) die("Invalid file version string %s", buf); - if (!tracecmd_is_version_supported(ver)) - die("Unsupported file version %lu", ver); + if (!tracecmd_is_version_supported(file_version)) + die("Unsupported file version %lu", file_version); /* get file endianness*/ if (read_file_bytes(fd, buf, 1)) @@ -234,6 +259,27 @@ static void dump_header_event(int fd) read_dump_string(fd, size, HEAD_EVENT); } +static void uncompress_reset(void) +{ + if (compress && file_version >= FILE_VERSION_COMPRESSION) { + read_compress = false; + tracecmd_compress_reset(compress); + } +} + +static int uncompress_block(void) +{ + int ret = 0; + + if (compress && file_version >= FILE_VERSION_COMPRESSION) { + ret = tracecmd_uncompress_block(compress); + if (!ret) + read_compress = true; + + } + return ret; +} + static void dump_ftrace_events_format(int fd) { unsigned long long size; @@ -623,7 +669,7 @@ static void dump_options(int fd) default: do_print(OPTIONS, " %d %d\t[Unknown option, size - skipping]\n", option, size); - lseek64(fd, size, SEEK_CUR); + do_lseek(fd, size, SEEK_CUR); break; } } From patchwork Wed Jan 19 08:30:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717265 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A70FC433EF for ; Wed, 19 Jan 2022 08:30:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352484AbiASIa2 (ORCPT ); Wed, 19 Jan 2022 03:30:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235211AbiASIaZ (ORCPT ); Wed, 19 Jan 2022 03:30:25 -0500 Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7F6D9C06173E for ; Wed, 19 Jan 2022 00:30:24 -0800 (PST) Received: by mail-ed1-x535.google.com with SMTP id f21so7516367eds.11 for ; Wed, 19 Jan 2022 00:30:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fuzogmPA1cNlbPNA80i95aTJkAS7oOOClLtr8KSBmOM=; b=A0Ddu0dQzm34B1qv1E4SjjW5LHZoYgahMeZ+qqNJM9/T2gEeNCKcoaAdUb6CRokxuy Irws909ZydANMB52zqgKQ4pEF6IrEegm+SetkjcWjbe6q+rahnrTL52SG9GMWGXIamkv eIXXZfGQL9uhAPk1RDbONJNnIw5kbvn9pO6rYuWq9lSdXcoREGAcENG1PPBiy/wOiIgK i3Q1joi9ut2agyoaJhfR2Cia1RrPtDfgf/iJ6xc4htAp1OKJDQRHtuNVpm2ve+wUAsFc its6djyQpqGT9yPw08cD4j2unmnHVzGHgMysxYm4GGgKXz0GlM+0HjIAgU0lf7yLIK0N HWng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fuzogmPA1cNlbPNA80i95aTJkAS7oOOClLtr8KSBmOM=; b=NRrZQVFhKuuiVQ6saGrZUess1n3TYJKWGCPHiU42BJuHOqVLKMVkMArDSThnnS8HwK y92p//Eq6RzXrnToyNX6Gauf1CX9TdbsD7EFiQaqvniXy0ftMr9DonqD4cDppkoa0/ZQ Q2uwRN7indfw+oxPxXI9IwvRhVKScv6TlLBX2VOD2wXE0BtSYJ10V12FEDmRTjHDjE5w oTgR1Feo7yTw0aC+msFRg64/X3BHYF2EG4Wv/yRfCTm/fHBbJaNsVkSx4EegK4016/tL EuHHVDewBTq/TW2rAASObI0gWdnUlNgVC1XJNG00zPxIBM8/15qjV/4CXoQ7AfyLsiOZ W3Iw== X-Gm-Message-State: AOAM530lNMKkiWerSieoUwQDURjrxzlSn8gBhyOv676FduG2EVFagZmz 8Sgz+Y+MR34x3MwQ8MBkIQaYzfqZebE= X-Google-Smtp-Source: ABdhPJx3nvC2zCmuudfHRu7rN3mbGgOG/bWpRunQXcNaGAtgQnsS7hMBRi41PldLbJF3/9faNSJbAA== X-Received: by 2002:a05:6402:22a3:: with SMTP id cx3mr1198496edb.269.1642581023174; Wed, 19 Jan 2022 00:30:23 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:22 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 02/11] trace-cmd dump: Print compression header Date: Wed, 19 Jan 2022 10:30:10 +0200 Message-Id: <20220119083019.246153-3-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Dump the compression header of trace file version 7 Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 23733194..1503e2bf 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -217,6 +217,29 @@ static void dump_initial_format(int fd) do_print(SUMMARY, "\t\t%d\t[Page size, bytes]\n", val4); } +static void dump_compress(int fd) +{ + char zname[DUMP_SIZE]; + char zver[DUMP_SIZE]; + + if (file_version < FILE_VERSION_COMPRESSION) + return; + + /* get compression header */ + if (read_file_string(fd, zname, DUMP_SIZE)) + die("no compression header"); + if (read_file_string(fd, zver, DUMP_SIZE)) + die("no compression version"); + do_print((SUMMARY), "\t\t%s\t[Compression algorithm]\n", zname); + do_print((SUMMARY), "\t\t%s\t[Compression version]\n", zver); + + if (strcmp(zname, "none")) { + compress = tracecmd_compress_alloc(zname, zver, fd, tep, NULL); + if (!compress) + die("cannot uncompress the file"); + } +} + static void dump_header_page(int fd) { unsigned long long size; @@ -760,6 +783,7 @@ static void dump_file(const char *file) do_print(SUMMARY, "\n Tracing meta data in file %s:\n", file); dump_initial_format(fd); + dump_compress(fd); dump_header_page(fd); dump_header_event(fd); dump_ftrace_events_format(fd); From patchwork Wed Jan 19 08:30:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717266 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E4FCC433F5 for ; Wed, 19 Jan 2022 08:30:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235211AbiASIaa (ORCPT ); Wed, 19 Jan 2022 03:30:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232460AbiASIa0 (ORCPT ); Wed, 19 Jan 2022 03:30:26 -0500 Received: from mail-ed1-x536.google.com (mail-ed1-x536.google.com [IPv6:2a00:1450:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCA61C061574 for ; Wed, 19 Jan 2022 00:30:25 -0800 (PST) Received: by mail-ed1-x536.google.com with SMTP id j23so2487167edp.5 for ; Wed, 19 Jan 2022 00:30:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oSncKr1Yq5cH10X6nVu9hqk2u5RbAFMeSnzG2SlLsHs=; b=YHwEq1lMMCxAtO5MSfMLM9yXyul33nSzX/OF/9ge65l5edHrvf6mfFdh5mrn46zKtz XTIGQnKcFH5UX4Cz+iZMipyPJE5IQQEMqt/ISjZeZmPKfjBl3xtr1yQ1txeatDwc+JVe 9r6t6cssSnIejz72MqDnIs6O65wPKyoldxs/G8CxzKQd0gZOFpHYPWOM+V72gXWmEp/H TCSF7resgyy4CJA9IlcxsmZcmICMMVTCYAjDZne5mQaIBzVAUnQtHYb7QFZq3iHVRtuo MVNhOC2ZXlPUws7lPq6WzFuZaMyO//PIUmRz/QyXEhFnW6F9KHN4+qq4qanN+gDztDfF DElg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oSncKr1Yq5cH10X6nVu9hqk2u5RbAFMeSnzG2SlLsHs=; b=e8BhZSQlXvcy4iwmWCYHcFUQ4vnH/KxneSuoq2GY+oHykZaNfVsRknUfK/mkaMQkrj jThymWNuoedUxqCmdkL1rVZMygjYbzY7Eeiu0fnyKS63Tb63eaJt9NTBsCZJD/j7elIq aNETlz8rDlqdXz3hmHWQ4flhO1DVMaNBEU6hUrWEM7YmhUws12Mfgf8muIakTyaw/RvW c90/+0USWWrB5xSU0pXmCEzkXXSdZHpIq9un1R2eKUUB7n7tUXC7JJrGxcvra9xZPfTv LZnxdBElEvKI0rziZ9U422w1EMtBo3R0tMJ9XD0BYH0v8Ma/IG7E0e3QXdej/KNUvgaJ JEUg== X-Gm-Message-State: AOAM533a3N3R6YPjJyXbBmt8vC0ZWLlZvdD0xONjtX3f2LGVZoIKgf0r PVxxt5CIZDMjx/OEbWvD+rb8HY0jeuA= X-Google-Smtp-Source: ABdhPJw9QTiuiRzDrVxkPRmDU00RdLFAWu4DmIwSN7R6HNMHDDQuR1drHmlkxhelA1NcwWLLlL5eBw== X-Received: by 2002:a05:6402:2552:: with SMTP id l18mr29300960edb.124.1642581024348; Wed, 19 Jan 2022 00:30:24 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:23 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 03/11] trace-cmd dump: Add helpers for processing trace file sections Date: Wed, 19 Jan 2022 10:30:11 +0200 Message-Id: <20220119083019.246153-4-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Added a new local database for storing sections, found in trace file version 7. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 1503e2bf..113eee8e 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -43,8 +43,18 @@ enum dump_items { OPTIONS = (1 << 9), FLYRECORD = (1 << 10), CLOCK = (1 << 11), + SECTIONS = (1 << 12), }; +struct file_section { + int id; + unsigned long long offset; + struct file_section *next; + enum dump_items verbosity; +}; + +static struct file_section *sections; + enum dump_items verbosity; #define DUMP_CHECK(X) ((X) & verbosity) @@ -768,6 +778,17 @@ static void dump_therest(int fd) } } +static void free_sections(void) +{ + struct file_section *del; + + while (sections) { + del = sections; + sections = sections->next; + free(del); + } +} + static void dump_file(const char *file) { int fd; @@ -793,7 +814,7 @@ static void dump_file(const char *file) dump_cmdlines(fd); dump_cpus_count(fd); dump_therest(fd); - + free_sections(); tep_free(tep); tep = NULL; close(fd); From patchwork Wed Jan 19 08:30:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717267 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13384C433FE for ; Wed, 19 Jan 2022 08:30:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232460AbiASIac (ORCPT ); Wed, 19 Jan 2022 03:30:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351699AbiASIa1 (ORCPT ); Wed, 19 Jan 2022 03:30:27 -0500 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00D60C06161C for ; Wed, 19 Jan 2022 00:30:27 -0800 (PST) Received: by mail-ed1-x532.google.com with SMTP id c71so7645846edf.6 for ; Wed, 19 Jan 2022 00:30:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+iAa93CJ2/fPj4SjtJlW2bmXJMCCaYzvUUnG8EqUzbQ=; b=VlcS+Mqw2Osf4hWpiytIjSuvtNQEqvx2Z+b4hdyJHkWyvphXTky8Um/k2XHDzdCeq+ c+r0jQDkSDlhCiwYe6JyKhz6LHwkPJW/482vjFdi0vSVsLINVCKwu3bcPTTYuFoU2idB 9MG+oSS4iOWQ2JqbumYm0S/1cBdMVQXZTuxLosu3KHF1rh8siZZZp6ea6OyTZi1VaxpS ARVCppXN1BZaQMaruU5elkbY035SG86eZ3e0TWJi2jYmQ45KeETEzsfQ1g3/KvCqxpiM 1E9JyjekwDwB+ZgxVZM+/l8AnS1pA2m0jLnTyqVtGC+pWQ/xMhXzPyxaqj0cUXZIF/j2 GhnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+iAa93CJ2/fPj4SjtJlW2bmXJMCCaYzvUUnG8EqUzbQ=; b=v/yAmxpz68ACSLpKU3gcFPaPdHnC9BDSsyhoicLs/UVFzVUi7sRjsPHIi1z0hgv3q+ +L5MEMTPIRARz8Hm1GoC46+MxOIYswzO4dD7FE92q4y/2jFW16B7HjV73HS/UgmU8xpO JN4ky3BTRk1ZY34yhlIQae3GOhVwJKHsDJF0eyqPvIIefca+s8EKeNaMVOFE++PLJBu0 /VzFDHpaEAKuSjAENWk6f3HxQEL/03xkeA/GlEt85isDPLTwbw2X87O3BGDMX3gskAS9 nCOs6SAurVMo3QZGE2EMKhdEy04vp5NshbwMahQ1p5oFKxDq1uZ8wKqLikTpAU1fhjYk SOFg== X-Gm-Message-State: AOAM5339pcsxt8yQqvfbxKoj2ujter4z6SsEqfBNLaQlYJ4l4Zn5oQF0 ZjyMFqMxR43GbLHNXMNJGprctYIj1A0= X-Google-Smtp-Source: ABdhPJxNQAg6NONhXOuCIXWUnvKe6SV1BKlcqydyzgD9rRBFXdFo1moxzU9I5AYJLfEFWkAOUwNbMg== X-Received: by 2002:a17:906:7315:: with SMTP id di21mr22992257ejc.700.1642581025383; Wed, 19 Jan 2022 00:30:25 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:24 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 04/11] trace-cmd dump: Read recursively all options sections Date: Wed, 19 Jan 2022 10:30:12 +0200 Message-Id: <20220119083019.246153-5-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Trace file version 7 supports multiple options sections in the file. The DONE option is extended to hold the offset to the next options section. A new logic for handling the extended DONE option and to read recursively all options sections is added. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 78 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 8 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 113eee8e..7e203ae2 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -422,6 +422,29 @@ static void dump_option_string(int fd, int size, char *desc) read_dump_string(fd, size, OPTIONS); } +static void dump_section_header(int fd, enum dump_items v, unsigned short *flags) +{ + unsigned long long offset, size; + unsigned short fl; + unsigned short id; + int desc_id; + + offset = lseek64(fd, 0, SEEK_CUR); + if (read_file_number(fd, &id, 2)) + die("cannot read the section id"); + if (read_file_number(fd, &fl, 2)) + die("cannot read the section flags"); + if (read_file_number(fd, &desc_id, 4)) + die("no section description"); + if (read_file_number(fd, &size, 8)) + die("cannot read section size"); + do_print(v, "\t[Section %d @ %lld, flags 0x%X, %lld bytes]\n", + id, offset, fl, size); + + if (flags) + *flags = fl; +} + static void dump_option_buffer(int fd, int size) { unsigned long long offset; @@ -636,25 +659,51 @@ void dump_option_tsc2nsec(int fd, int size) do_print(OPTIONS, "%d %d %llu [multiplier, shift, offset]\n", mult, shift, offset); } -static void dump_options(int fd) +static int dump_options_read(int fd); + +static int dump_option_done(int fd, int size) +{ + unsigned long long offset; + + do_print(OPTIONS, "\t\t[Option DONE, %d bytes]\n", size); + + if (file_version < FILE_VERSION_SECTIONS || size < 8) + return 0; + if (read_file_number(fd, &offset, 8)) + die("cannot read the next options offset"); + do_print(OPTIONS, "%lld\n", offset); + if (!offset) + return 0; + + if (lseek64(fd, offset, SEEK_SET) == (off_t)-1) + die("cannot goto next options offset %lld", offset); + + do_print(OPTIONS, "\n\n"); + + return dump_options_read(fd); +} + +static int dump_options_read(int fd) { + unsigned short flags = 0; unsigned short option; unsigned int size; int count = 0; + if (file_version >= FILE_VERSION_SECTIONS) + dump_section_header(fd, OPTIONS, &flags); + if ((flags & TRACECMD_SEC_FL_COMPRESS) && uncompress_block()) + die("cannot uncompress file block"); + for (;;) { if (read_file_number(fd, &option, 2)) die("cannot read the option id"); - if (!option) + if (option == TRACECMD_OPTION_DONE && file_version < FILE_VERSION_SECTIONS) break; if (read_file_number(fd, &size, 4)) die("cannot read the option size"); count++; - if (!DUMP_CHECK(OPTIONS) && !DUMP_CHECK(CLOCK) && !DUMP_CHECK(SUMMARY)) { - lseek64(fd, size, SEEK_CUR); - continue; - } switch (option) { case TRACECMD_OPTION_DATE: dump_option_string(fd, size, "DATE"); @@ -666,7 +715,8 @@ static void dump_options(int fd) dump_option_buffer(fd, size); break; case TRACECMD_OPTION_TRACECLOCK: - dump_option_string(fd, size, "TRACECLOCK"); + do_print(OPTIONS, "\t\t[Option TRACECLOCK, %d bytes]\n", size); + read_dump_string(fd, size, OPTIONS | CLOCK); has_clock = 1; break; case TRACECMD_OPTION_UNAME: @@ -699,6 +749,10 @@ static void dump_options(int fd) case TRACECMD_OPTION_TSC2NSEC: dump_option_tsc2nsec(fd, size); break; + case TRACECMD_OPTION_DONE: + uncompress_reset(); + count += dump_option_done(fd, size); + return count; default: do_print(OPTIONS, " %d %d\t[Unknown option, size - skipping]\n", option, size); @@ -706,8 +760,16 @@ static void dump_options(int fd) break; } } - do_print(SUMMARY, "\t[%d options]\n", count); + uncompress_reset(); + return count; +} + +static void dump_options(int fd) +{ + int count; + count = dump_options_read(fd); + do_print(SUMMARY|OPTIONS, "\t[%d options]\n", count); } static void dump_latency(int fd) From patchwork Wed Jan 19 08:30:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717268 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6CDC7C4332F for ; Wed, 19 Jan 2022 08:30:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351699AbiASIac (ORCPT ); Wed, 19 Jan 2022 03:30:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351821AbiASIa2 (ORCPT ); Wed, 19 Jan 2022 03:30:28 -0500 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA3CDC06173E for ; Wed, 19 Jan 2022 00:30:27 -0800 (PST) Received: by mail-ed1-x534.google.com with SMTP id j23so2487679edp.5 for ; Wed, 19 Jan 2022 00:30:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YA2X64lWedr3ZEFbV5C4jNS63GjKA810+pq88SpYLeI=; b=myy6z7E+OU+HAnkV8OUBnhnAz1pCOHPhQqw32ZDT2kOudwqNI0csMTvsiIHL7c6/n8 gVSDv+tcj58J/Ctjx2jNxT5BM7C5XfxB9khsOHdiIXshusblKVBOd/QxwFxiAcfnOix8 CJQ4oTTpx7wxPzaHobVeyYM7j7pUnnuL1sWkNeP2EnXoMjVkvUzU+2HFWIpo0KSXZNaa 1DA7vd8/WyR2V9YtgJHp3dCBjP6H2FRqYbDgA7Hzd5+Q2YgHrvjOWw6dfa8MZJf+RUnj MHgDs1+ZE/00vd6cNGEvPYfYHz3FxHgKjn+bOvMkUYbGgGqJ0nnJ/glMmTh3hwjoCG3E hpLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YA2X64lWedr3ZEFbV5C4jNS63GjKA810+pq88SpYLeI=; b=tfhhJmdeYH7UNcFbFzG+sDNUrCyKO0RpVZUAi/VOYJMpw/bC6r/5r7/BN8DQ8Iv1pC jNtaxA+GmyLOsd9LglpztJGOTOD8zaitQQik5108rG/MaVkehc+7gno4WZKshcsmjhUO UlShSQekeeCsHqsJr7LnX6qE8Vi17fdiTk+UDY2lhRkT95iA7hPlgvWlvvomMtKhTh0S U+6StiL/5+y5fNAZ2kqIAXxDrV8CzFbButjp7uTjDmB/oCKNjSchkOpk/aBgCCKu4mRX IMhzZDUb7DK2WoSAl75ohNSXHQ/eE5YfeR/u/wGeOS/zQaIHEibUk1Sj6AZ0ycZoloJC Rf7Q== X-Gm-Message-State: AOAM532jqffvYMMt/HNdO+i35fqZDzxlL4LXYGt+PKPhgD5Pn1PGnPcU VoM3L9wvQn4mYqOYukh8IifTvfHdPfA= X-Google-Smtp-Source: ABdhPJwktKqadYqEYkqbKKoj6r0vIkjBAhmw8igFI6fGTRres8gTc5JsvioUJRp/TrYBIM8YA9Dv/Q== X-Received: by 2002:a17:906:318a:: with SMTP id 10mr23098044ejy.154.1642581026368; Wed, 19 Jan 2022 00:30:26 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:25 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 05/11] trace-cmd dump: Read extended BUFFER option Date: Wed, 19 Jan 2022 10:30:13 +0200 Message-Id: <20220119083019.246153-6-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org In trace file version 7 the BUFFER option is extended to hold a trace metadata, related to the recorded instance. Also, a new BUFFER_TEXT option is added for latency trace data. Implemented logic for reading and printing these extended options. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 64 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 7e203ae2..8f81ddb5 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -445,19 +445,72 @@ static void dump_section_header(int fd, enum dump_items v, unsigned short *flags *flags = fl; } -static void dump_option_buffer(int fd, int size) +static void dump_option_buffer(int fd, unsigned short option, int size) { + unsigned long long total_size = 0; + unsigned long long data_size; + unsigned long long current; unsigned long long offset; + unsigned short flags; + char clock[DUMP_SIZE]; + char name[DUMP_SIZE]; + int cpus = 0; + int id; + int i; if (size < 8) die("broken buffer option with size %d", size); if (read_file_number(fd, &offset, 8)) die("cannot read the offset of the buffer option"); + if (read_file_string(fd, name, DUMP_SIZE)) + die("cannot read the name of the buffer option"); + if (file_version < FILE_VERSION_SECTIONS) { + do_print(OPTIONS|FLYRECORD, "\t\t[Option BUFFER, %d bytes]\n", size); + do_print(OPTIONS|FLYRECORD, "%lld [offset]\n", offset); + do_print(OPTIONS|FLYRECORD, "\"%s\" [name]\n", name); + return; + } + + current = lseek64(fd, 0, SEEK_CUR); + if (lseek64(fd, offset, SEEK_SET) == (off_t)-1) + die("cannot goto buffer offset %lld", offset); + + dump_section_header(fd, FLYRECORD, &flags); + + if (lseek64(fd, current, SEEK_SET) == (off_t)-1) + die("cannot go back to buffer option"); + + do_print(OPTIONS|FLYRECORD, "\t\t[Option BUFFER, %d bytes]\n", size); + do_print(OPTIONS|FLYRECORD, "%lld [offset]\n", offset); + do_print(OPTIONS|FLYRECORD, "\"%s\" [name]\n", name); + + if (read_file_string(fd, clock, DUMP_SIZE)) + die("cannot read clock of the buffer option"); + do_print(OPTIONS|FLYRECORD, "\"%s\" [clock]\n", clock); + if (option == TRACECMD_OPTION_BUFFER) { + if (read_file_number(fd, &cpus, 4)) + die("cannot read the cpu count of the buffer option"); + + do_print(OPTIONS|FLYRECORD, "%d [CPUs]:\n", cpus); + for (i = 0; i < cpus; i++) { + if (read_file_number(fd, &id, 4)) + die("cannot read the id of cpu %d from the buffer option", i); + if (read_file_number(fd, &offset, 8)) + die("cannot read the offset of cpu %d from the buffer option", i); + if (read_file_number(fd, &data_size, 8)) + die("cannot read the data size of cpu %d from the buffer option", i); + total_size += data_size; + do_print(OPTIONS|FLYRECORD, " %d %lld\t%lld\t[id, data offset and size]\n", + id, offset, data_size); + } + do_print(SUMMARY, "\t\[buffer \"%s\", \"%s\" clock, " + "%d cpus, %lld bytes flyrecord data]\n", + name, clock, cpus, total_size); + } else { + do_print(SUMMARY, "\t\[buffer \"%s\", \"%s\" clock, latency data]\n", name, clock); + } - do_print(OPTIONS, "\t\t[Option BUFFER, %d bytes]\n", size); - do_print(OPTIONS, "%lld [offset]\n", offset); - read_dump_string(fd, size - 8, OPTIONS); } static void dump_option_int(int fd, int size, char *desc) @@ -712,7 +765,8 @@ static int dump_options_read(int fd) dump_option_string(fd, size, "CPUSTAT"); break; case TRACECMD_OPTION_BUFFER: - dump_option_buffer(fd, size); + case TRACECMD_OPTION_BUFFER_TEXT: + dump_option_buffer(fd, option, size); break; case TRACECMD_OPTION_TRACECLOCK: do_print(OPTIONS, "\t\t[Option TRACECLOCK, %d bytes]\n", size); From patchwork Wed Jan 19 08:30:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717269 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ACF3BC433EF for ; Wed, 19 Jan 2022 08:30:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351821AbiASIad (ORCPT ); Wed, 19 Jan 2022 03:30:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352486AbiASIa3 (ORCPT ); Wed, 19 Jan 2022 03:30:29 -0500 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5622C061574 for ; Wed, 19 Jan 2022 00:30:28 -0800 (PST) Received: by mail-ed1-x534.google.com with SMTP id 30so7670755edv.3 for ; Wed, 19 Jan 2022 00:30:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gQMIDjD2/QGpKhk9TPq2R3csc66HguJmNb11OAUHbpM=; b=H8iF9HKArKYlb50sUIZDg1pIpqRz3Fi+8xNtDlXjH4WMS3C9dzCoMd0o3PRwIEU8Ak +esY6xws8Vp2m45tHt3oSO9Q03Wavc9DQELFKxosyTsDbDoL7i2Ro6SrW/LHb9iDvspL E73GmRQSjtKSYsMuT4KRLWHdaMV4L8aDPdFDpzGu3wlFxX4BeUCqmTWjhA2jIuUKYDAy lHbmqtezldWkkcAQOoNDuRdhQEQdMnCPkbWM4XLbBdcor1tgcU3KJ7ugN2S2msMvDTQA LrlRK00f2OQcnN08YtPVfgQSdpU8a6G/G1uZ+UPnIB6GUWtG+UwD4ViBF7f6k1O2uZAT r4VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gQMIDjD2/QGpKhk9TPq2R3csc66HguJmNb11OAUHbpM=; b=7Gg7F92Hlb6s9ttZFNpmPTBR0sWFrvHUw7DqZd9AT3pkJ5FOYq/CjOdGEqYk7xnVS0 kxbw4xg8IdVafdoGW43qwP/YrYJPHUKLsoTae15z4VE6YT2L4Y6zJrEAxsghoU33xpUU h04b5dWX91JLAIdcRVJeiq3rkEtD91j6VGqEEOuxZbHJAGOaIA6gSj+Ay/1p28SsKQ7X NUKXq1PHHJEjQRebU525okTGqwGlNGr8MGREhqRUtz5MnPjVjZZWIudoWCRwmfmSAEeU obL1JiPm2HrU9TPGwyz0BXwb6redtEkEYkuJopSz1m6xaGHX4AjL28NiCuIsfhWh6H5+ eKLg== X-Gm-Message-State: AOAM533qhRsBMNasJTVi5mIEKHxbrnNiHCUSt+ALqeFsSN7wr4pO8JH+ CUTj9YUzzFezbqnRcwck6qrty2eCbHk= X-Google-Smtp-Source: ABdhPJyUt40bM2IzhXssAPmeBu55P4SCU9SJp6CqZBLy7p2+JrhoqB2ALmjdJADG64gmICphZbFG6Q== X-Received: by 2002:a17:906:4782:: with SMTP id cw2mr24069756ejc.337.1642581027310; Wed, 19 Jan 2022 00:30:27 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:26 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 06/11] trace-cmd dump: Dump sections Date: Wed, 19 Jan 2022 10:30:14 +0200 Message-Id: <20220119083019.246153-7-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org In trace file version 7, headers are stored as sections. This allows their position in the file not to be fixed. Pointers to these sections are stored as trace options. Add logic to handle these new options: HEADER_INFO FTRACE_EVENTS EVENT_FORMATS KALLSYM PRINTK CMDLINES Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 8f81ddb5..2ae53885 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -712,6 +712,23 @@ void dump_option_tsc2nsec(int fd, int size) do_print(OPTIONS, "%d %d %llu [multiplier, shift, offset]\n", mult, shift, offset); } +static void dump_option_section(int fd, unsigned int size, + unsigned short id, char *desc, enum dump_items v) +{ + struct file_section *sec; + + sec = calloc(1, sizeof(struct file_section)); + if (!sec) + die("cannot allocate new section"); + sec->next = sections; + sections = sec; + sec->id = id; + sec->verbosity = v; + if (read_file_number(fd, &sec->offset, 8)) + die("cannot read the option %d offset", id); + do_print(OPTIONS, "\t\t[Option %s, %d bytes] @ %lld\n", desc, size, sec->offset); +} + static int dump_options_read(int fd); static int dump_option_done(int fd, int size) @@ -803,6 +820,25 @@ static int dump_options_read(int fd) case TRACECMD_OPTION_TSC2NSEC: dump_option_tsc2nsec(fd, size); break; + case TRACECMD_OPTION_HEADER_INFO: + dump_option_section(fd, size, option, "HEADERS", HEAD_PAGE | HEAD_EVENT); + break; + case TRACECMD_OPTION_FTRACE_EVENTS: + dump_option_section(fd, size, option, "FTRACE EVENTS", FTRACE_FORMAT); + break; + case TRACECMD_OPTION_EVENT_FORMATS: + dump_option_section(fd, size, option, + "EVENT FORMATS", EVENT_SYSTEMS | EVENT_FORMAT); + break; + case TRACECMD_OPTION_KALLSYMS: + dump_option_section(fd, size, option, "KALLSYMS", KALLSYMS); + break; + case TRACECMD_OPTION_PRINTK: + dump_option_section(fd, size, option, "PRINTK", TRACE_PRINTK); + break; + case TRACECMD_OPTION_CMDLINES: + dump_option_section(fd, size, option, "CMDLINES", CMDLINES); + break; case TRACECMD_OPTION_DONE: uncompress_reset(); count += dump_option_done(fd, size); From patchwork Wed Jan 19 08:30:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717270 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20AF3C43217 for ; Wed, 19 Jan 2022 08:30:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352485AbiASIad (ORCPT ); Wed, 19 Jan 2022 03:30:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352487AbiASIaa (ORCPT ); Wed, 19 Jan 2022 03:30:30 -0500 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A1FEEC06161C for ; Wed, 19 Jan 2022 00:30:29 -0800 (PST) Received: by mail-ed1-x52f.google.com with SMTP id c24so5231344edy.4 for ; Wed, 19 Jan 2022 00:30:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mNMmF/NVraF92oJMtfPPWEpO5yqxIVJPYTVqlEtYYqg=; b=E6dvAiyZNXCgG1kbYav1X2HrWbCP6fLW9YTTrj1vVdYcTn3zdLul+TrQn1z1Agq64J o215sNYM/PQmNTt733pS4+cMim6lyyL8g9JvNechwakCYNtEuZO61J8ap7xSGLcUJMn8 y1SdqACn4GzmmMvKl8oFWXL41WA/YUsPKGc1QT+7Q8N7F1cj6OqjvTyacYGxR6sPkLX7 WeDCbkj+VSqabJkIHaIRDW2OykPKzjQn8rTK3/krfhM1qOsTgZUaPKouuQOvvnWszTvC rmEQ4hXpDdCtf05T/b04qo+Bn/sH8cZcxK5dvB88nyNQpphN/E0td4KPFK42Wzwjzft+ k/Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mNMmF/NVraF92oJMtfPPWEpO5yqxIVJPYTVqlEtYYqg=; b=TZ9Ux89CZVtMQbfIhOMsK1pjWqlfjEldusG1nzVfqw+w/n+ivS5L98Ag7TiGlRr++X Hd35UUzT7MRTyssLSNehAlJCWTin3bpjp9MtDg75kiEXOy0X/WvwSstWyei4KcZu0il+ 0pGW5PNPjVhoYg6X5tvjnUFhss5dFcmeqcLbOBYzq47ZWKvSpV0EqRUsdgiPUMJ2DIR2 5ZrHAtsBgaa+axQaGUAW2tiz4FcIzaPhBUwpqfSg3MbulzbhRiTfU89dHt4AEISXHAEQ EqocKyxaDM9u2AFeES/jXigTUPqX8lxt8UuBk5UQqWSjhliHQXKy1+rR9gJaWqF0Tu+q l1ww== X-Gm-Message-State: AOAM530ZJFdiJCTGq/1QHDsYWUS8S4fKW/rqSJi/8cPj8S6w2LoMXC0k +MESSzk+Vz3M6nVuYWsIa89NQs/q3F8= X-Google-Smtp-Source: ABdhPJxMY6zCKTXvzwFnxWuPzXqJUFq88e7b5Ro0xhtdM91QbattVgePUo2iedkDKcDmK7/pBNk6TA== X-Received: by 2002:a05:6402:4486:: with SMTP id er6mr17109549edb.185.1642581028245; Wed, 19 Jan 2022 00:30:28 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:27 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 07/11] trace-cmd dump: Dump trace file version 7 Date: Wed, 19 Jan 2022 10:30:15 +0200 Message-Id: <20220119083019.246153-8-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Trace file version 7 has different structure than version 6. Separates parsing both versions in different flows. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index 2ae53885..cbf94206 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -930,6 +930,31 @@ static void dump_therest(int fd) } } +static void dump_v6_file(int fd) +{ + dump_header_page(fd); + dump_header_event(fd); + dump_ftrace_events_format(fd); + dump_events_format(fd); + dump_kallsyms(fd); + dump_printk(fd); + dump_cmdlines(fd); + dump_cpus_count(fd); + dump_therest(fd); +} + +static void dump_v7_file(int fd) +{ + long long offset; + + if (read_file_number(fd, &offset, 8)) + die("cannot read offset of the first option section"); + + if (lseek64(fd, offset, SEEK_SET) == (off64_t)-1) + die("cannot goto options offset %lld", offset); + dump_options(fd); +} + static void free_sections(void) { struct file_section *del; @@ -957,15 +982,10 @@ static void dump_file(const char *file) dump_initial_format(fd); dump_compress(fd); - dump_header_page(fd); - dump_header_event(fd); - dump_ftrace_events_format(fd); - dump_events_format(fd); - dump_kallsyms(fd); - dump_printk(fd); - dump_cmdlines(fd); - dump_cpus_count(fd); - dump_therest(fd); + if (file_version < FILE_VERSION_SECTIONS) + dump_v6_file(fd); + else + dump_v7_file(fd); free_sections(); tep_free(tep); tep = NULL; From patchwork Wed Jan 19 08:30:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717271 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49848C43219 for ; Wed, 19 Jan 2022 08:30:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352487AbiASIae (ORCPT ); Wed, 19 Jan 2022 03:30:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352474AbiASIac (ORCPT ); Wed, 19 Jan 2022 03:30:32 -0500 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4394AC06173E for ; Wed, 19 Jan 2022 00:30:31 -0800 (PST) Received: by mail-ed1-x534.google.com with SMTP id j23so2488494edp.5 for ; Wed, 19 Jan 2022 00:30:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=J6L1X6h9L3q0sykVyHmdOdb9pnuOjtw0mZlPm2QARw4=; b=qEZIJfhC5etTRZey6YPyhK9UZDLwTYcHjRH4yyzjycVgoPxoo08G8FUMb9ndYP2Av2 ObmLujYSzRbtwyrv5pzduC7eQ2W8Pu2ssUDyE4LL7Nb17Jlhi36njvGqHA8G5ZJGuoip T93fAHdqpBlfxJDxfjd34XjgBBgdd9N0tAW0wfyLhgQl4jno9L8mNLyGit+cj2Ql/Tb2 HY9XBn4CjZaS41NzxUYqPbb4gAN+gG/EqpeLm+lXqV2dPhjVt5XzNAyja5lmsZ2b57KT QhzipZ30qIg307fvVw9g8wC3m9HNAvYQ4kU3Q1rTg9BSOEzgqizzpj4IqgMWaJpDEfbb eXhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=J6L1X6h9L3q0sykVyHmdOdb9pnuOjtw0mZlPm2QARw4=; b=651KGNbQBJPdA8cObaAcUEcHUdlpHqpAqeQ0jXqaD1YCA1/ELdxRB6cVQVel5397Ky vsLuZuiA8dM25IpYxV5W0+E6Rdy/zR+T5o/5HjX88hXwp3AI5mq/BodIJmLJ4rvjEaM5 qheZ9lZe3L60j03NixEV5M57jpt/adTjkiaGEizuijkq5/fyWLukMgVfRzFIM8E76kur OzNkIDGXvTiJ7NbfpTwzmYlxGYS9/46ZF/IwdZF2tFI74H9lw9HCynsXC9R2hWwOi3w4 qqgvb1ZpmnpzorGE8voCEyuVcSLtKwWOCw6hiTG3ScrHdMhECT+xGLqU9APahGP81BqN U+fQ== X-Gm-Message-State: AOAM531VWRJvQBcC96pYJUl1iJTCGrC07NQm4Va2Rn5My9ySbw5WLGiD WC1CfcnQZHs/gCWoRmhtaG4s0hRW09I= X-Google-Smtp-Source: ABdhPJwfmuTsvO5Nas+19zD9CkKOVnOdZYowket6xtYNFh6AH1TfvclOcUi/JEpwkpBHw79urkPtZQ== X-Received: by 2002:a17:906:af8b:: with SMTP id mj11mr1549025ejb.66.1642581029258; Wed, 19 Jan 2022 00:30:29 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:28 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 08/11] trace-cmd dump: Read strings sections from v7 trace files Date: Wed, 19 Jan 2022 10:30:16 +0200 Message-Id: <20220119083019.246153-9-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org Trace file v7 has sections with metadata strings. When such file is opened with "trace-cmd dump", read that section and store the strings in an internal database. Also, a new argument "--strings" is added to "trace-cmd dump", to display all strings sections from the file. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 93 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index cbf94206..a765d1cc 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -29,6 +29,8 @@ static int has_clock; static unsigned long file_version; static bool read_compress; static struct tracecmd_compression *compress; +static char *meta_strings; +static int meta_strings_size; enum dump_items { SUMMARY = (1 << 0), @@ -44,6 +46,7 @@ enum dump_items { FLYRECORD = (1 << 10), CLOCK = (1 << 11), SECTIONS = (1 << 12), + STRINGS = (1 << 13), }; struct file_section { @@ -177,6 +180,14 @@ static int read_file_number(int fd, void *digit, int size) return 0; } +static const char *get_metadata_string(int offset) +{ + if (!meta_strings || offset < 0 || meta_strings_size <= offset) + return NULL; + + return meta_strings + offset; +} + static void dump_initial_format(int fd) { char magic[] = TRACECMD_MAGIC; @@ -427,6 +438,7 @@ static void dump_section_header(int fd, enum dump_items v, unsigned short *flags unsigned long long offset, size; unsigned short fl; unsigned short id; + const char *desc; int desc_id; offset = lseek64(fd, 0, SEEK_CUR); @@ -436,10 +448,13 @@ static void dump_section_header(int fd, enum dump_items v, unsigned short *flags die("cannot read the section flags"); if (read_file_number(fd, &desc_id, 4)) die("no section description"); + desc = get_metadata_string(desc_id); + if (!desc) + desc = "Unknown"; if (read_file_number(fd, &size, 8)) die("cannot read section size"); - do_print(v, "\t[Section %d @ %lld, flags 0x%X, %lld bytes]\n", - id, offset, fl, size); + do_print(v, "\t[Section %d @ %lld: \"%s\", flags 0x%X, %lld bytes]\n", + id, offset, desc, fl, size); if (flags) *flags = fl; @@ -943,6 +958,73 @@ static void dump_v6_file(int fd) dump_therest(fd); } +static int read_metadata_strings(int fd, unsigned long long size) +{ + char *str, *strings; + int psize; + int ret; + + strings = realloc(meta_strings, meta_strings_size + size); + if (!strings) + return -1; + meta_strings = strings; + + ret = read_file_bytes(fd, meta_strings + meta_strings_size, size); + if (ret < 0) + return -1; + + do_print(STRINGS, "\t[String @ offset]\n"); + psize = 0; + while (psize < size) { + str = meta_strings + meta_strings_size + psize; + do_print(STRINGS, "\t\t\"%s\" @ %d\n", str, meta_strings_size + psize); + psize += strlen(str) + 1; + } + + meta_strings_size += size; + + return 0; +} + +static void get_meta_strings(int fd) +{ + unsigned long long offset, size; + unsigned int csize, rsize; + unsigned short fl, id; + int desc_id; + + offset = lseek64(fd, 0, SEEK_CUR); + do { + if (read_file_number(fd, &id, 2)) + break; + if (read_file_number(fd, &fl, 2)) + die("cannot read section flags"); + if (read_file_number(fd, &desc_id, 4)) + die("cannot read section description"); + if (read_file_number(fd, &size, 8)) + die("cannot read section size"); + if (id == TRACECMD_OPTION_STRINGS) { + if ((fl & TRACECMD_SEC_FL_COMPRESS)) { + read_file_number(fd, &csize, 4); + read_file_number(fd, &rsize, 4); + lseek64(fd, -8, SEEK_CUR); + if (uncompress_block()) + break; + } else { + rsize = size; + } + read_metadata_strings(fd, rsize); + uncompress_reset(); + } else { + if (lseek64(fd, size, SEEK_CUR) == (off_t)-1) + break; + } + } while (1); + + if (lseek64(fd, offset, SEEK_SET) == (off_t)-1) + die("cannot restore the original file location"); +} + static void dump_v7_file(int fd) { long long offset; @@ -950,6 +1032,8 @@ static void dump_v7_file(int fd) if (read_file_number(fd, &offset, 8)) die("cannot read offset of the first option section"); + get_meta_strings(fd); + if (lseek64(fd, offset, SEEK_SET) == (off64_t)-1) die("cannot goto options offset %lld", offset); dump_options(fd); @@ -993,6 +1077,7 @@ static void dump_file(const char *file) } enum { + OPT_strings = 241, OPT_verbose = 242, OPT_clock = 243, OPT_all = 244, @@ -1036,6 +1121,7 @@ void trace_dump(int argc, char **argv) {"options", no_argument, NULL, OPT_options}, {"flyrecord", no_argument, NULL, OPT_flyrecord}, {"clock", no_argument, NULL, OPT_clock}, + {"strings", no_argument, NULL, OPT_strings}, {"validate", no_argument, NULL, 'v'}, {"help", no_argument, NULL, '?'}, {"verbose", optional_argument, NULL, OPT_verbose}, @@ -1099,6 +1185,9 @@ void trace_dump(int argc, char **argv) if (trace_set_verbose(optarg) < 0) die("invalid verbose level %s", optarg); break; + case OPT_strings: + verbosity |= STRINGS; + break; default: usage(argv); } From patchwork Wed Jan 19 08:30:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717272 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EA97AC433F5 for ; Wed, 19 Jan 2022 08:30:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352474AbiASIae (ORCPT ); Wed, 19 Jan 2022 03:30:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47012 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234262AbiASIac (ORCPT ); Wed, 19 Jan 2022 03:30:32 -0500 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 147E6C06173F for ; Wed, 19 Jan 2022 00:30:32 -0800 (PST) Received: by mail-ed1-x530.google.com with SMTP id q25so7705729edb.2 for ; Wed, 19 Jan 2022 00:30:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7xyD6vR4ZlbFS2gg5k4coi2AQeLmNQhzFxkWHZCXl80=; b=OB1/YVnFQkkJYyugfT7sn1pxWfoKOkBYhwT/YlgBDWaTebdI4fM2ObFAC8tSBaUG72 BNuSaIQOTBH/u6L8ZiPnDHb10lzHh3qljx3CEKsy2bJSaQX65HDmhWH59LvEVXBQDCaN pGLpZgmoxIHqUIOLHinPAzbEVV+5QwU3X3KM4w074XiPLCzt5ZqtNN6YD0E0TUk6qJUU WHDkFyiuFNsx2HKfDnh2ayDbbG549Lv56fwktV6f/TgrGyFJmucEseQvO1lWx8/+Js2x Xbn4whZ2Z+KpYtWvsg/NJi/JmbkZ3+/vRDlPfvyzukhB4d9hsFwRC9al0nwGNvq47zWq 3p/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7xyD6vR4ZlbFS2gg5k4coi2AQeLmNQhzFxkWHZCXl80=; b=x3qPNz3AOtdw6vhqHP1KVXyLL3PQEY5AL7XDmH10e0vNNHnNywkxwJwoSMbSa1q6Zo pj4DNMcvC/D880RsXmzzolXVAurcymn9yB3UnoKDXyTcoRTn8/2j2EGLB4Lq4Ezwvws8 AzQmixzNmfU4sLI+ZG2KY4bX6iX6Ss8BkiNn6IlGMaSyb+bvIT5Gn9iS2tERMZ+8NyYg 7dEcd/QG7LVhBVzEKk14RWyNsWdOcJWZ12FVE3N15iVWxCII82QLztaAgwASN1TSvbEp tE9tDsO+K/5IJVDldSIoYlT8mD/Ok1IPHEoZS9iVJg7lyk4wOvlmUecNW92zrICRNzaW zb6A== X-Gm-Message-State: AOAM5328brnsxS8KgaT8XKZpna4/Y6f24ItPDzjhiViPjqX9jHpkzc4d Rl6V5FqIKio4VM7nW3U/wFI= X-Google-Smtp-Source: ABdhPJy7fiuSAOyQPxHfDHB4vAulw/utyE0pVFAfkXrsgNS1MV+crvhhSoD+g0bB+J6QZTKn8T/gYw== X-Received: by 2002:aa7:c448:: with SMTP id n8mr27329706edr.378.1642581030711; Wed, 19 Jan 2022 00:30:30 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:30 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 09/11] trace-cmd dump: Dump sections content Date: Wed, 19 Jan 2022 10:30:17 +0200 Message-Id: <20220119083019.246153-10-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org In trace file version 7, dump the content of the headers content, that are stored as sections. Added logic to dump these headers: HEADER_INFO FTRACE_EVENTS EVENT_FORMATS KALLSYM PRINTK CMDLINES Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index a765d1cc..fd54ee5c 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -744,6 +744,46 @@ static void dump_option_section(int fd, unsigned int size, do_print(OPTIONS, "\t\t[Option %s, %d bytes] @ %lld\n", desc, size, sec->offset); } +static void dump_sections(int fd) +{ + struct file_section *sec = sections; + unsigned short flags; + + while (sec) { + if (lseek64(fd, sec->offset, SEEK_SET) == (off_t)-1) + die("cannot goto option offset %lld", sec->offset); + + dump_section_header(fd, sec->verbosity, &flags); + + if ((flags & TRACECMD_SEC_FL_COMPRESS) && uncompress_block()) + die("cannot uncompress section block"); + + switch (sec->id) { + case TRACECMD_OPTION_HEADER_INFO: + dump_header_page(fd); + dump_header_event(fd); + break; + case TRACECMD_OPTION_FTRACE_EVENTS: + dump_ftrace_events_format(fd); + break; + case TRACECMD_OPTION_EVENT_FORMATS: + dump_events_format(fd); + break; + case TRACECMD_OPTION_KALLSYMS: + dump_kallsyms(fd); + break; + case TRACECMD_OPTION_PRINTK: + dump_printk(fd); + break; + case TRACECMD_OPTION_CMDLINES: + dump_cmdlines(fd); + break; + } + uncompress_reset(); + sec = sec->next; + } +} + static int dump_options_read(int fd); static int dump_option_done(int fd, int size) @@ -1037,6 +1077,7 @@ static void dump_v7_file(int fd) if (lseek64(fd, offset, SEEK_SET) == (off64_t)-1) die("cannot goto options offset %lld", offset); dump_options(fd); + dump_sections(fd); } static void free_sections(void) From patchwork Wed Jan 19 08:30:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717273 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 818B3C4332F for ; Wed, 19 Jan 2022 08:30:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352488AbiASIae (ORCPT ); Wed, 19 Jan 2022 03:30:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352486AbiASIad (ORCPT ); Wed, 19 Jan 2022 03:30:33 -0500 Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3AEB2C061574 for ; Wed, 19 Jan 2022 00:30:33 -0800 (PST) Received: by mail-ed1-x531.google.com with SMTP id j2so7575396edj.8 for ; Wed, 19 Jan 2022 00:30:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ij35J1yQ/yW203B+uK70SAPMlWJUg8uswRuxK0rVHn0=; b=WXYVO4l3ThN4hHPcjI4dAXZVpxPbKEOgIMlwUtmDzKYT9r2yWuTZtjkKQbY0Wtdfg1 hLpCD5Lubb622UI2kXjM/+yLJ9GASLkzx8mJZ1JZUmQiPbpOyCx88rgETnqgso6bI+n4 PQil5lw9piIDJgh3M6F0rJzHq5DyCuPBwSkM+b6Yv5LQ7e3Th/R9ZogRtyZk38jv1lIZ 7TvGMXlz5is0IngR11Xy1WDAvS+q/vf2MIERrhLuvLkixCZkAsuzUiY26vkrVF2lezRe 53OKEo6tZXOi0j0RtmR+wwc9UvXY3SfkIXTSgDcl6Smv1bBWma4van1xBBNmxKVyxG6F iYVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ij35J1yQ/yW203B+uK70SAPMlWJUg8uswRuxK0rVHn0=; b=OnxpSzfsP1Ur19RZ/NNTpxm/PTSaYd6oV0k0K7Iv3QRSCjcZS1z0r616yqBbfG2yBI q2yUtDih1qHyqwsOmN0RFNrK9Vat3bJ2P6PMawNEtZfiV52Fg2wObb9LRgRN4gkhf7pO XKO9Y3L3TvcpyH0ySkQYEKf2flZuj8dMutn+qHqx6U87cjZ/VEdYNUPBsqRgN/SRwfwH nYoQdctDFDNdZhWubNeGajvqVeZFGFgxDOVTqash6UR/7Rk/mUfhMWlCLh/1EpkWui3i tWlYde9GSeqYLorixR9bbHgY5q1iTpkxCIBFhEZ4F+W3Qhq7ApMu6u9brK+cTjyrSffi 27Ww== X-Gm-Message-State: AOAM530MlI8d5o0luxnTwMUXhAb8VuogEksXwvl6KnVjzurtKELNupyb Ey1K8u5vdxLcKjha/3bg+F4pbML/EGM= X-Google-Smtp-Source: ABdhPJwQu0W+mlOFYg0eW8ZK32hq0G1amLtbokLkWu4ptLI1ldCNdKX040qrWIFiPpPE1tbqwGhHRA== X-Received: by 2002:aa7:cd69:: with SMTP id ca9mr27128562edb.16.1642581031741; Wed, 19 Jan 2022 00:30:31 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:31 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 10/11] trace-cmd dump: Add new argument --sections Date: Wed, 19 Jan 2022 10:30:18 +0200 Message-Id: <20220119083019.246153-11-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The new "trace-cmd dump --sections" argument walks through the sections from a trace file version 7 and prints their headers. The logic does not rely on the options, describing these sections. It could be useful to dump broken or incomplete trace files. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 72 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index fd54ee5c..fd9008fd 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -744,7 +744,7 @@ static void dump_option_section(int fd, unsigned int size, do_print(OPTIONS, "\t\t[Option %s, %d bytes] @ %lld\n", desc, size, sec->offset); } -static void dump_sections(int fd) +static void dump_sections(int fd, int count) { struct file_section *sec = sections; unsigned short flags; @@ -782,6 +782,7 @@ static void dump_sections(int fd) uncompress_reset(); sec = sec->next; } + do_print(SUMMARY|SECTIONS, "\t[%d sections]\n", count); } static int dump_options_read(int fd); @@ -1065,19 +1066,79 @@ static void get_meta_strings(int fd) die("cannot restore the original file location"); } +static int walk_v7_sections(int fd) +{ + unsigned long long offset, soffset, size; + unsigned short fl; + unsigned short id; + int csize, rsize; + int count = 0; + int desc_id; + const char *desc; + + offset = lseek64(fd, 0, SEEK_CUR); + do { + soffset = lseek64(fd, 0, SEEK_CUR); + if (read_file_number(fd, &id, 2)) + break; + if (read_file_number(fd, &fl, 2)) + die("cannot read section flags"); + if (read_file_number(fd, &desc_id, 4)) + die("cannot read section description"); + desc = get_metadata_string(desc_id); + if (!desc) + desc = "Unknown"; + if (read_file_number(fd, &size, 8)) + die("cannot read section size"); + if (id >= TRACECMD_OPTION_MAX) + do_print(SECTIONS, "Unknown section id %d: %s", id, desc); + count++; + if (fl & TRACECMD_SEC_FL_COMPRESS) { + if (id == TRACECMD_OPTION_BUFFER || + id == TRACECMD_OPTION_BUFFER_TEXT) { + do_print(SECTIONS, + "\t[Section %2d @ %-16lld\t\"%s\", flags 0x%X, " + "%lld compressed bytes]\n", + id, soffset, desc, fl, size); + } else { + if (read_file_number(fd, &csize, 4)) + die("cannot read section size"); + if (read_file_number(fd, &rsize, 4)) + die("cannot read section size"); + do_print(SECTIONS, "\t[Section %2d @ %-16lld\t\"%s\", flags 0x%X, " + "%d compressed, %d uncompressed]\n", + id, soffset, desc, fl, csize, rsize); + size -= 8; + } + } else { + do_print(SECTIONS, "\t[Section %2d @ %-16lld\t\"%s\", flags 0x%X, %lld bytes]\n", + id, soffset, desc, fl, size); + } + + if (lseek64(fd, size, SEEK_CUR) == (off_t)-1) + break; + } while (1); + + if (lseek64(fd, offset, SEEK_SET) == (off_t)-1) + die("cannot restore the original file location"); + return count; +} + static void dump_v7_file(int fd) { long long offset; + int sections; if (read_file_number(fd, &offset, 8)) die("cannot read offset of the first option section"); get_meta_strings(fd); + sections = walk_v7_sections(fd); - if (lseek64(fd, offset, SEEK_SET) == (off64_t)-1) + if (lseek64(fd, offset, SEEK_SET) == (off_t)-1) die("cannot goto options offset %lld", offset); dump_options(fd); - dump_sections(fd); + dump_sections(fd, sections); } static void free_sections(void) @@ -1118,6 +1179,7 @@ static void dump_file(const char *file) } enum { + OPT_sections = 240, OPT_strings = 241, OPT_verbose = 242, OPT_clock = 243, @@ -1163,6 +1225,7 @@ void trace_dump(int argc, char **argv) {"flyrecord", no_argument, NULL, OPT_flyrecord}, {"clock", no_argument, NULL, OPT_clock}, {"strings", no_argument, NULL, OPT_strings}, + {"sections", no_argument, NULL, OPT_sections}, {"validate", no_argument, NULL, 'v'}, {"help", no_argument, NULL, '?'}, {"verbose", optional_argument, NULL, OPT_verbose}, @@ -1229,6 +1292,9 @@ void trace_dump(int argc, char **argv) case OPT_strings: verbosity |= STRINGS; break; + case OPT_sections: + verbosity |= SECTIONS; + break; default: usage(argv); } From patchwork Wed Jan 19 08:30:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Tzvetomir Stoyanov (VMware)" X-Patchwork-Id: 12717274 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B947BC433FE for ; Wed, 19 Jan 2022 08:30:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352486AbiASIaf (ORCPT ); Wed, 19 Jan 2022 03:30:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234262AbiASIae (ORCPT ); Wed, 19 Jan 2022 03:30:34 -0500 Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0FE9DC06161C for ; Wed, 19 Jan 2022 00:30:34 -0800 (PST) Received: by mail-ed1-x52e.google.com with SMTP id cx27so7738164edb.1 for ; Wed, 19 Jan 2022 00:30:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e5gYC8ONSeCJ8BvnmorRHJFxsyZlO4Wj4pR1xXb63xs=; b=WoV5c4fa8Rp99a8H1a3a9VNmVLa9wnbRkmP140mEPD7iThlFTuGJLQdDFR2QhY/vaL 6vCNG13MjWKCa1Sl1zIde9DlBb3Zf9ym2odMaZ9BGOt5zVCr/AtuS32kwba94RSNv7YB lnav1FvI8kiCeaNeQl7ZNryH+oelU9WuQ3Xhlez3P16Haf8XEsishJKNBO+H3Gyz0ddL x02Z7Q/rf6TEEcW6lAGUXGJCichqWSYULnHx/Tw4bXc4zjZvAENQEDDw0RB7JyzEVibz E9VbydIXu4RLXzCLZNVKHm4fTr0iUnYAAIpujr5NzAp9bd+ysK4sJGhabzaZck/rEgu+ Nxow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=e5gYC8ONSeCJ8BvnmorRHJFxsyZlO4Wj4pR1xXb63xs=; b=H3q/REONRUrSkIchs55KmBVbyniCQoIFSwpIm+1vjuDSsh4pnZXYJ0Z7ZXEK1cISj9 OTsAwdnSrErGAKAHschvvZyeA3MlfnD7HNpocvYX4ZM7VIdehaXIPV1NU3iSGnGNbKSn 5alnce4ElZ7fUD/8LiRWbUVfpjV+OrZWsoNKCV77z4ujH4uBUe7U3IUvPkFPan36LWD7 fakd4O0ql4ve7+GS1kTE70+/g9UpPoS2/iuNhKBbXvWn07HHHTGW9MmxCIvPBYuKBSbJ WAEwQ0yJHr1lUNWyMFKL1NdNCSiNjA0YMzMO7MldVgxmDOhnQJnZ9ph5gTrx1D2imAyg UOdA== X-Gm-Message-State: AOAM532O20NLUj/8LsnpeGwhfoqg0oham8lOf+cznJYpBdCDqoD3WaFI y9ZWGTRV5P9RSfDuS0V/LkLWcwyzVT4= X-Google-Smtp-Source: ABdhPJw4HeYNz6kWfpNWeUqcQ1pNgdsGoJ/F99IRZVMQLl6t3+Kr54w6TfbnG/Wdihtv0zL6sHV7ZA== X-Received: by 2002:a05:6402:5216:: with SMTP id s22mr29490115edd.132.1642581032654; Wed, 19 Jan 2022 00:30:32 -0800 (PST) Received: from oberon.zico.biz.zico.biz ([83.222.187.186]) by smtp.gmail.com with ESMTPSA id la7sm6095530ejc.94.2022.01.19.00.30.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jan 2022 00:30:32 -0800 (PST) From: "Tzvetomir Stoyanov (VMware)" To: rostedt@goodmis.org Cc: linux-trace-devel@vger.kernel.org Subject: [PATCH v7 11/11] trace-cmd dump: Align better the output of flyrecord dump Date: Wed, 19 Jan 2022 10:30:19 +0200 Message-Id: <20220119083019.246153-12-tz.stoyanov@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220119083019.246153-1-tz.stoyanov@gmail.com> References: <20220119083019.246153-1-tz.stoyanov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org The flyrecord dump prints various file offsets and sizes, that can be huge numbers. Add format arguments to align better the output. Signed-off-by: Tzvetomir Stoyanov (VMware) --- tracecmd/trace-dump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracecmd/trace-dump.c b/tracecmd/trace-dump.c index fd9008fd..70adb816 100644 --- a/tracecmd/trace-dump.c +++ b/tracecmd/trace-dump.c @@ -959,7 +959,7 @@ static void dump_flyrecord(int fd) die("cannot read the cpu %d offset", i); if (read_file_number(fd, &cpu_size, 8)) die("cannot read the cpu %d size", i); - do_print(FLYRECORD, "\t\t %lld %lld\t[offset, size of cpu %d]\n", + do_print(FLYRECORD, "\t %10.lld %10.lld\t[offset, size of cpu %d]\n", cpu_offset, cpu_size, i); } dump_clock(fd);