summaryrefslogtreecommitdiff
path: root/src/minutils/s6ps_wchan.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2023-02-11 08:13:14 +0000
committerLaurent Bercot <ska@appnovation.com>2023-02-11 08:13:14 +0000
commit2f8984613e17f9e5971ec338240b0bb6d2dd1cc6 (patch)
tree4061a64dc5ee8c415ca249ec1852cfc666e1468b /src/minutils/s6ps_wchan.c
parent3caba3fd8f3825544c065ec62e4298c6edc76b28 (diff)
downloads6-linux-utils-2f8984613e17f9e5971ec338240b0bb6d2dd1cc6.tar.xz
Code refactor; only s6-ps has remaining globals now
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/minutils/s6ps_wchan.c')
-rw-r--r--src/minutils/s6ps_wchan.c94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/minutils/s6ps_wchan.c b/src/minutils/s6ps_wchan.c
deleted file mode 100644
index 209e1ef..0000000
--- a/src/minutils/s6ps_wchan.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/* ISC license. */
-
-#include <string.h>
-#include <sys/utsname.h>
-#include <skalibs/uint64.h>
-#include <skalibs/stralloc.h>
-#include <skalibs/genalloc.h>
-#include <skalibs/djbunix.h>
-#include "s6-ps.h"
-
-static stralloc sysmap = STRALLOC_ZERO ;
-static genalloc ind = GENALLOC_ZERO ;
-
-int s6ps_wchan_init (char const *file)
-{
- if (file)
- {
- if (!openslurpclose(&sysmap, file)) return 0 ;
- }
- else
- {
- char *files[3] = { "/proc/kallsyms", 0, "/boot/System.map" } ;
- struct utsname uts ;
- size_t n ;
- if (uname(&uts) < 0) return 0 ;
- n = strlen(uts.release) ;
- {
- char buf[18 + n] ;
- unsigned int i = 0 ;
- memcpy(buf, "/boot/System.map", 16) ;
- buf[16] = '-' ;
- memcpy(buf + 17, uts.release, n + 1) ;
- files[1] = buf ;
- for (; i < 3 ; i++)
- if (openslurpclose(&sysmap, files[i])) break ;
- if (i >= 3) return 0 ;
- }
- }
- {
- size_t i = 0 ;
- if (!genalloc_append(size_t, &ind, &i)) goto err2 ;
- for (i = 1 ; i <= sysmap.len ; i++)
- if (sysmap.s[i-1] == '\n')
- if (!genalloc_append(size_t, &ind, &i)) goto err ;
- }
- return 1 ;
- err:
- genalloc_free(size_t, &ind) ;
- err2:
- stralloc_free(&sysmap) ;
- return 0 ;
-}
-
-void s6ps_wchan_finish (void)
-{
- genalloc_free(size_t, &ind) ;
- stralloc_free(&sysmap) ;
-}
-
-static inline size_t lookup (uint64_t addr, size_t *i)
-{
- size_t low = 0, mid, high = genalloc_len(size_t, &ind), len ;
- for (;;)
- {
- uint64_t cur ;
- mid = (low + high) >> 1 ;
- len = uint64_xscan(sysmap.s + genalloc_s(size_t, &ind)[mid], &cur) ;
- if (!len) return 0 ;
- if (cur == addr) break ;
- if (mid == low) return 0 ;
- if (addr < cur) high = mid ; else low = mid ;
- }
- *i = mid ;
- return len ;
-}
-
-int s6ps_wchan_lookup (stralloc *sa, uint64_t addr)
-{
- if (addr == (sizeof(void *) == 8 ? 0xffffffffffffffffULL : 0xffffffffUL))
- return stralloc_catb(sa, "*", 1) ;
- if (!addr) return stralloc_catb(sa, "-", 1) ;
- if (sysmap.len)
- {
- size_t i, pos, len = lookup(addr, &i) ;
- if (!len) return stralloc_catb(sa, "?", 1) ;
- pos = genalloc_s(size_t, &ind)[i] + len + 3 ;
- return stralloc_catb(sa, sysmap.s + pos, genalloc_s(size_t, &ind)[i+1] - 1 - pos) ;
- }
- if (!stralloc_readyplus(sa, UINT64_FMT + 3)) return 0 ;
- stralloc_catb(sa, "(0x", 3) ;
- sa->len += uint64_fmt(sa->s + sa->len, addr) ;
- stralloc_catb(sa, ")", 1) ;
- return 1 ;
-}