]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DEBUG: tools: add vma_set_name_id() helper
authorAurelien DARRAGON <adarragon@haproxy.com>
Fri, 24 May 2024 08:29:08 +0000 (10:29 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Fri, 24 May 2024 10:07:13 +0000 (12:07 +0200)
Just like vma_set_name() from 51a8f134e ("DEBUG: tools: add vma_set_name()
helper"), but also takes <id> as parameter to append "-$id" suffix after
the name in order to differentiate 2 areas that were named using the same
<type> and <name> combination.

example, using mmap + MAP_SHARED|MAP_ANONYMOUS:
  7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon_shmem:type:name-id]
Another example, using mmap + MAP_PRIVATE|MAP_ANONYMOUS or using
glibc/malloc() above MMAP_THRESHOLD:
  7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon:type:name-id]

include/haproxy/tools.h
src/tools.c

index fbd8a59c4ebf9e4028933177da922b167cf8e3ae..fc1b576f394e4beee67c907c9a20c3508a60b7dc 100644 (file)
@@ -1201,5 +1201,6 @@ int openssl_compare_current_name(const char *name);
 
 /* vma helpers */
 void vma_set_name(void *addr, size_t size, const char *type, const char *name);
+void vma_set_name_id(void *addr, size_t size, const char *type, const char *name, unsigned int id);
 
 #endif /* _HAPROXY_TOOLS_H */
index a8e01fe43d286ddfb696befd8bb56fb08a17e7dd..7608e7e6daa7eeee6eed50c5a0d5ed3cbe05a0dc 100644 (file)
@@ -6477,11 +6477,13 @@ int openssl_compare_current_name(const char *name)
  * heap as much as possible below that.
  *
  * <type> and <name> are mandatory
+ * <id> is optional, if != ~0, will be used to append an id after the name
+ * in order to differentiate 2 entries set using the same <type> and <name>
  *
  * The function does nothing if naming API is not available, and naming errors
  * are ignored.
  */
-void vma_set_name(void *addr, size_t size, const char *type, const char *name)
+void vma_set_name_id(void *addr, size_t size, const char *type, const char *name, unsigned int id)
 {
        long pagesize = sysconf(_SC_PAGESIZE);
        void *aligned_addr;
@@ -6515,15 +6517,18 @@ void vma_set_name(void *addr, size_t size, const char *type, const char *name)
                 * except [, ], \, $ and '.
                 * As a result, when looking for /proc/<pid>/maps, we can see the anonymous range
                 * as follow :
-                * `7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon_shmem:scope:name]`
+                * `7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon_shmem:scope:name{-id}]`
                 * (MAP_SHARED)
-                * `7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon:scope:name]`
+                * `7364c4fff000-736508000000 rw-s 00000000 00:01 3540  [anon:scope:name{-id}]`
                 * (MAP_PRIVATE)
                 */
                char fullname[80];
                int rn;
 
-               rn = snprintf(fullname, sizeof(fullname), "%s:%s", type, name);
+               if (id != ~0)
+                       rn = snprintf(fullname, sizeof(fullname), "%s:%s-%u", type, name, id);
+               else
+                       rn = snprintf(fullname, sizeof(fullname), "%s:%s", type, name);
 
                if (rn >= 0) {
                        /* Give a name to the map by setting PR_SET_VMA_ANON_NAME attribute
@@ -6541,6 +6546,12 @@ void vma_set_name(void *addr, size_t size, const char *type, const char *name)
 #endif
 }
 
+/* wrapper for vma_set_name_id() but without id */
+void vma_set_name(void *addr, size_t size, const char *type, const char *name)
+{
+       vma_set_name_id(addr, size, type, name, ~0);
+}
+
 #if defined(RTLD_DEFAULT) || defined(RTLD_NEXT)
 /* redefine dlopen() so that we can detect unexpected replacement of some
  * critical symbols, typically init/alloc/free functions coming from alternate