From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by sourceware.org (Postfix) with ESMTPS id EDE863858C74 for ; Wed, 27 Sep 2023 03:45:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EDE863858C74 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-59f4bd6905aso168886847b3.3 for ; Tue, 26 Sep 2023 20:45:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695786339; x=1696391139; darn=sourceware.org; h=cc:to:from:subject:mime-version:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=fiotEsJRImJynq5iVvS6q2wiUKFy4xHEg+NBVsebDKQ=; b=Qxh6xi4s8ps8L0ywzw6nfwKOcWPvF2SaWLTSgHVyQ8KiJ13M8aHpTPik8b58x4HjxY 4DLyBJzrK26Ne2eBBNP4lRkedELBAZ5OP/B7z9MdYFlVzl3/LvxUvbywK6wXURBJzb4O RT2hACUFxy7pWv4Bqodstr16OPDWzN2WKbFSewYZsk+9fn8mdUlyWoB24KQXuzXMYcce 5Hk/FD94v574yIumplWTj+S1cKUBRDI2tMZlipupfE6wBlydtp/bYg+ToMqQ7FwAXHMY 6PBtL8BFrLpwi3GbOHFh23TTzkUTv4zkzyc99mU04vr3XckrTW/6DLGRqbzz0YWTjcl+ eT2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695786339; x=1696391139; h=cc:to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=fiotEsJRImJynq5iVvS6q2wiUKFy4xHEg+NBVsebDKQ=; b=jV1vga62u5L8FmUQohWovolZXiMKAAMKwvwtGc4/adXcfz9EEFLA/rFkolsg2sRZwa hUjvqETJOglHipzg6nPMyiTuW6NADeF4+OOZxyBvHoTjxypR+dRh/ckRpYSHCxmjPsyH T+NFkeNq0BNF0jzDprtx389+0hCMmMBBZt3FYGP7PFo8bdv+Ko1Ip0y2Qz1YBtvVrEJw W6wlNXFrBfZAc6bb9XN2idzJPFXKgpg09dzGz5xQd0u49nnWIHkilJVCaPHHWNrgsSZR W0mg4KEwfHs1r775xXr9q/WARVHoYOdqMMDP7Wq45CcBYTflHep8hFaMTqesbNVghh3l AwEA== X-Gm-Message-State: AOJu0YweXtElR5u0+Z2KlsV2fbCY7bBpfQJIWged6QJq6N/RTSxbREh8 USMC3O4xmIwMXJ1IKvH2C9eo5HIKcBnkP4r19be161dsFcQQf/brqQfKHF4Ma8arU322P10jaDw uoS7pQk1YQVVMEArcvy1S9EKkkc7snaurhl5rmgg0Fl91vDysBW5BuSN/lY/pSmdNWQN0 X-Google-Smtp-Source: AGHT+IEGoOnb/AKySl+c8jTeDwW9QNvTSbDiLTV85a3BcFvUDt10qEXExBSJBs7oYu/RyTFHsn5NxuaXFFCX X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:8ff0:2e1:80b2:e4a]) (user=irogers job=sendgmr) by 2002:a0d:ec02:0:b0:595:5cf0:a9b0 with SMTP id q2-20020a0dec02000000b005955cf0a9b0mr11992ywn.9.1695786339089; Tue, 26 Sep 2023 20:45:39 -0700 (PDT) Date: Tue, 26 Sep 2023 20:45:27 -0700 Message-Id: <20230927034527.1648061-1-irogers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.42.0.515.g380fc7ccd1-goog Subject: [RFC PATCH] pthread_create: Name stacks in /proc//maps From: Ian Rogers To: libc-alpha@sourceware.org Cc: Ian Rogers Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-21.3 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Linux 4.5 removed thread stack annotations due to the complexity of computing them: https://github.com/torvalds/linux/commit/65376df582174ffcec9e6471bf5b0dd79ba05e4a This untested (other than building) RFC patch uses PR_SET_VMA_ANON_NAME to name stacks again as part of thread creation. PR_SET_VMA_ANON_NAME was added in: https://lore.kernel.org/lkml/1383170047-21074-2-git-send-email-ccross@android.com/ The patch is intended to create discussion and possibly serve as an implementation. When I try to test it current I get unrelated failures and so guidance would be appreciated. The naming of stacks can be useful in situations like debugging and profiling, for example, to differentiate stack from heap memory accesses. --- nptl/allocatestack.c | 28 ++++++++++++++++++++++++++++ nptl/pthread_create.c | 5 +++++ 2 files changed, 33 insertions(+) diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c index f9d8cdfd08..bf8297950f 100644 --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -577,3 +578,30 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, return 0; } + +#if defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) +/* Use PR_SET_VMA_ANON_NAME to name the thread's stack stack: */ +static void +name_stack_maps (struct pthread *pd, bool set) +{ + void *stack = THREAD_GETMEM (pd, stackblock); + size_t stacksize = THREAD_GETMEM (pd, stackblock_size); + if (!set) { + __prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, stack, stacksize, NULL); + return; + } else { +#define STACK_MAPS_PREFIX "stack:" + char stack_name[sizeof(STACK_MAPS_PREFIX)+11]; + + snprintf(stack_name, sizeof(stack_name), STACK_MAPS_PREFIX "%u", + (unsigned)THREAD_GETMEM (pd, tid)); + __prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, stack, stacksize, stack_name); +#undef STACK_MAPS_PREFIX + } +} +#else /* defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) */ +static void +name_stack_maps (struct pthread *pd) +{ +} +#endif diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index 6a41d50109..0e36d66f50 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -369,6 +369,9 @@ start_thread (void *arg) /* Initialize pointers to locale data. */ __ctype_init (); + /* Set up /proc//maps entry for stack to stack:tid. */ + name_stack_maps(pd, true); + /* Register rseq TLS to the kernel. */ { bool do_rseq = THREAD_GETMEM (pd, flags) & ATTR_FLAG_DO_RSEQ; @@ -571,6 +574,8 @@ start_thread (void *arg) /* Free the TCB. */ __nptl_free_tcb (pd); + /* Release memory for /proc//maps. */ + name_stack_maps(pd, false); out: /* We cannot call '_exit' here. '_exit' will terminate the process. -- 2.42.0.515.g380fc7ccd1-goog