Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2826078lqp; Mon, 25 Mar 2024 10:13:44 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCU6pfBXiWbgQNetgwz3VAvwY5utzoTm7EZ0kBRhBDUaYs8HupU8XZvdPoo5lEbqY2NCrrVxxWbJK+Qzd6GiZto5gsV2EjT/E1JWa9ckcg== X-Google-Smtp-Source: AGHT+IGXfChEPvjTSSAyjBr6p7+HI6vtDhZ2a3spnAozgSRRCBYbClWbi0GU9bjAm8OuFPTrs8rT X-Received: by 2002:ad4:5c62:0:b0:696:4084:d6f6 with SMTP id i2-20020ad45c62000000b006964084d6f6mr10999839qvh.8.1711386824527; Mon, 25 Mar 2024 10:13:44 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711386824; cv=pass; d=google.com; s=arc-20160816; b=JSaXpR7reIdUUJ0NV1KltwL1L67O+XFCRAYDSggohSMQnjkxCGlu2lJAA9koQO1/3V LbKsrRk3HxbwCNl+L3iwHrGn+tjm8lEY0iPKbQO7Fn3WkvZQLd9Qa2g2UkBjqLUjiLtP TKzSImYdzKxJgouAvnP+2wj7jQmTQrFeprojpMSwtY4NWAipnT4dNdLTWyxypClTw9DG J6PoVdu2SkJf2zVb2cwfJjkg4svoGigwFhWyGeyzf0v1DeWt899k7wXRD0b9JoOkISBX 0TalgHn4IszyeZooqAznVInlf6FLyzvmbDKjDxB2eaqQSy2Nv1Qk5UY5Q1mqm4rFn6Xf orvg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=4zOZsJzIzK5aa7TbeViHBJbBdj6M2gj9ZvGgoPmIol8=; fh=4HrqP3YaNHWjVJvy7jtUt2gHj286Mhzmqh1uW1VgRbc=; b=Towyzegnw2Y4PKAauXOnv99Lr6xSJqfi7qIMENJQ2apytLSm6RxNjNFN75KknJFrhj A0o6uS/iWai6aVQL9AoRoWOHqYDH2bAM7brcup6u8zvctJDCgkXnxGhrgw/a69g7eSEH 4xJs7wwSGFhjRQ6ULw9j21X/uGC+xkFB7L57sXVhRDaYMvPxyIfhOJggNDfCozQpqmIF bOYPI/RlASD1HrckI19pEzD4rd3B6BnFrz0JijS8ZUAL+7d+9C1ZaAY7gVBwNe76vdBu W7c72qJGVnaT+lUMPMrBz22UOW7dhx5iRMkzvTSFBJMR9eiSt9uoc4ZgbyNk7s1Cdpdb HWVA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b="ZkOjk/Il"; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-117406-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-117406-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id m9-20020ad45dc9000000b0069688b789bdsi3251574qvh.40.2024.03.25.10.13.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 10:13:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-117406-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b="ZkOjk/Il"; arc=pass (i=1 spf=pass spfdomain=gmail.com dkim=pass dkdomain=gmail.com dmarc=pass fromdomain=gmail.com); spf=pass (google.com: domain of linux-kernel+bounces-117406-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-117406-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id A95DE1C3C932 for ; Mon, 25 Mar 2024 17:12:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3B22113E893; Mon, 25 Mar 2024 15:48:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZkOjk/Il" Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E43B113E8A0; Mon, 25 Mar 2024 15:47:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381680; cv=none; b=TuoP3TSJdOltPTkl10aE5cYmDbhWzmam/DrK6Ny0mD4kwyePsvvk5LnFc6FeZ22GF8h5iXOLHSsdUa52LRwkUK6psFDfKOyvEjZ7zfHjA11CUB8TATDeLAbfgzvDxeVmW+TzwkDXLyn/b4nSSBzfAihmbuhNqM1StTnnZVwoyKM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711381680; c=relaxed/simple; bh=mvvdkm7cWc9qKXInCyiVibBC9xDX3H4bRjU01AqzUBg=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=noL/28fI3zjGsDGLTJzzTVhzt2C8mxFRdVIGr33hFuKeKFzu/XTfPPr96V6/1vdJaJ08OPrgEIxAPmOELXWXxk+jN5cRM7W/LOswXysphNYCV12xvIHdzrMnyrioyy3nP/SBtvnMBBORx+Y1QHApi+VKSb3/D+aYHS5rnepuRyM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZkOjk/Il; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1e0189323b4so33492895ad.1; Mon, 25 Mar 2024 08:47:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711381678; x=1711986478; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=4zOZsJzIzK5aa7TbeViHBJbBdj6M2gj9ZvGgoPmIol8=; b=ZkOjk/IluuqPT0l/GcV4Y+VxBWrzikjdG6iXIapQ6AvPk29QSl48vyY3ANf8WmqZ6N jyOJPZkLLTVxuElNAluM6phms0ByJAPMVVsSVDeibfhVJLiBoqxyI5ZuU2cdve4rSNkx R6Oy4DkS2K3CKrOG4Y/sbJNK9BsIzidQygvMFqhXIISDPTeFXlXPD7e1i4ddVJu6RoBx g/3qNJ82N+tkd7ZiNhYp2m/5Q0M5y23HoY9vUcMsSYt9BZTyiWE87jZJp2DKQgWzFpYb tdSrbqdygoJypkJ3I8L2bGIYqwXt/xyuIC1NZRC4LXA+PzkOH/+R9ktZfxGYaD1mohbo OaUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711381678; x=1711986478; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4zOZsJzIzK5aa7TbeViHBJbBdj6M2gj9ZvGgoPmIol8=; b=NkdGXJQKleS+hvLV+9niVgGGm3xWyz3xZyPFDilLxnqDMziLiTz8O1ccnPu+0fDAL1 FGyqxQEPrRsVyETs2ik4tLm9hDRfIOxug+JTtdv6M/03VT7WPJpud+o9CzyCbLLvDnMs ZwmGLnf+1Y6Pq7ceYVXtwn3jO0UzwXto/XNZUuTDbnGEOEXyWiAS8dkCuaEBvodyMzdB rX2ewVFxJEweF7gdgAmvTfJ8ziyj481MH6izxweva7m2C4o70FedGcdHIDDI6Q3x/4RB ESclAPSrpTDP+kXCg9oseEqqfQzBvOnxP/vgNNqTZjFBiXPM0dSFuRkxbslueqoxpfUq Fipw== X-Forwarded-Encrypted: i=1; AJvYcCVpKb5UktP8M2SpmjC8ZKoeeIG+6xRtD50SAhh+5m8n/gjI05GeQPnxC4RBcR2Scy/TMALFQ4XRpc/xmnpQCkcUEAqHiL59yEIOzApg X-Gm-Message-State: AOJu0Yx+5ZRjKaDx/01vrgjnyKR9NhwhF5leG1I6HX6+oYRumSI/Y2C3 uBdln7iuiedGNQZRIhUlxiOem8MZgrTMCoD9GYN8RWzYcV5oP0gd X-Received: by 2002:a17:903:1cb:b0:1e0:9c35:e07f with SMTP id e11-20020a17090301cb00b001e09c35e07fmr10097783plh.34.1711381678047; Mon, 25 Mar 2024 08:47:58 -0700 (PDT) Received: from localhost ([106.54.237.100]) by smtp.gmail.com with ESMTPSA id d2-20020a170903230200b001e0d70680acsm442804plh.268.2024.03.25.08.47.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 08:47:57 -0700 (PDT) From: Tao Chen To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, chen.dylane@gmail.com Subject: [RFC PATCH] libbpf: Add bpf_program__set_section_name api Date: Mon, 25 Mar 2024 23:47:37 +0800 Message-Id: <20240325154737.3754820-1-chen.dylane@gmail.com> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The new api can be used to reset the function we want to trace in runtime. So we need not to change the code again when we just do minor changes to the trace function in kprobe or other ebpf event type. We can replace the old section with new section passed in via parameter. Maybe the following scenario we can use the api: 1. solve "*.isra.o" issue caused by compiler in new kernel obj = offcputime_bpf__open(); bpf_program__set_section_name(*(obj->skeleton->obj), "kprobe/finish_task_switch", "kprobe/finish_task_switch.isra.0"); 2. dynamic adjustment for trace function offset obj = offcputime_bpf__open(); bpf_program__set_section_name(*(obj->skeleton->obj), "kprobe/finish_task_switch+23", "kprobe/finish_task_switch+45"); Signed-off-by: Tao Chen --- tools/lib/bpf/libbpf.c | 24 ++++++++++++++++++++++++ tools/lib/bpf/libbpf.h | 2 ++ tools/lib/bpf/libbpf.map | 1 + 3 files changed, 27 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 96ff1aa4bf6a..94f32e845c61 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -8576,6 +8576,30 @@ const char *bpf_program__section_name(const struct bpf_program *prog) return prog->sec_name; } +int bpf_program__set_section_name(struct bpf_object *obj, const char *old_sec, + const char *new_sec) +{ + struct bpf_program *prog = NULL; + + if (obj == NULL || old_sec == NULL || new_sec == NULL) + return libbpf_err(-EINVAL); + + do { + prog = bpf_object__next_program(obj, NULL); + if (prog) { + if (strcmp(prog->sec_name, old_sec) == 0) { + free(prog->sec_name); + prog->sec_name = strdup(new_sec); + if (!prog->sec_name) + return libbpf_err(-ENOMEM); + return 0; + } + } + } while (prog); + + return libbpf_err(-ENOENT); +} + bool bpf_program__autoload(const struct bpf_program *prog) { return prog->autoload; diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h index 0e52621cba43..eb620a9c8b8a 100644 --- a/tools/lib/bpf/libbpf.h +++ b/tools/lib/bpf/libbpf.h @@ -307,6 +307,8 @@ LIBBPF_API void bpf_program__set_ifindex(struct bpf_program *prog, LIBBPF_API const char *bpf_program__name(const struct bpf_program *prog); LIBBPF_API const char *bpf_program__section_name(const struct bpf_program *prog); +LIBBPF_API int bpf_program__set_section_name(struct bpf_object *obj, const char *old_sec, + const char *new_sec); LIBBPF_API bool bpf_program__autoload(const struct bpf_program *prog); LIBBPF_API int bpf_program__set_autoload(struct bpf_program *prog, bool autoload); LIBBPF_API bool bpf_program__autoattach(const struct bpf_program *prog); diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map index 57712321490f..14ac62cff605 100644 --- a/tools/lib/bpf/libbpf.map +++ b/tools/lib/bpf/libbpf.map @@ -400,4 +400,5 @@ LIBBPF_1.3.0 { bpf_program__attach_netfilter; bpf_program__attach_tcx; bpf_program__attach_uprobe_multi; + bpf_program__set_section_name; } LIBBPF_1.2.0; -- 2.34.1