Uprobes не работают в ядре v4.14.x с SystemTap на 32-битной платформе ARM - PullRequest
0 голосов
/ 22 февраля 2020

Я полагаюсь на Uprobes для динамического c инструментария общей библиотеки. Хотя все, что мне нужно, отлично работает на системах x86, при работе с ядром Linux v4.14.x на 32-битной платформе ARM: плате Odroid XU4 появляются неожиданные ошибки. В настоящее время я использую ядро ​​, предоставленное производителем платы (Hardkernel).

По существу, все зонды Systemtap в следующем формате не работают:

process(<PATH_TO_EXECUTABLE_OR_SHARED_LIB>).mark(<MARKER_NAME>)
process(<PATH_TO_EXECUTABLE_OR_SHARED_LIB).function(<FUNCTION_NAME>)

Пример для Исполняемый файл example_openmp_stap:

$ stap -e 'probe process("./example_openmp_stap").function("main") { printf("Hey\n")}' -c ./example_openmp_stap
WARNING: probe process("/tmp/example_openmp_stap").function("main") at inode-offset 165296:00000789 registration error (rc -22)
WARNING: task_finder mmap inode-uprobes callback for task 4989 failed: -22
...

В отличие от этого, некоторые функции "семейства" зондов процесса работают:

$ stap -e 'probe process("/tmp/example_openmp_stap").begin { printf("Program launched\n")}' -c ./example_openmp_stap
Program launched

Очевидно, функция ядра uprobe_register () - определена в kernel / события / uprobes. c - это тот, который терпит неудачу (он возвращает -EINVAL). Обратите внимание, что ядро ​​было скомпилировано со всеми необходимыми символами:

CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_UPROBES=y
CONFIG_UPROBE_EVENTS=y

Я скомпилировал и установил SystemTap из его GIT репозитория (последняя версия):

$ stap --version
Systemtap translator/driver (version 4.3/0.170, commit release-4.2-41-g0e1d5b7eb397 + changes)
Copyright (C) 2005-2019 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
tested kernel versions: 2.6.32 ... 5.4-rc6
enabled features: AVAHI BPF LIBSQLITE3 NLS NSS

Любая информация который проливает свет на то, как это исправить, будет с благодарностью!

PS .: Обратите внимание, что это не работает ни с ядрами 4.9.x, ни с 3.10.x.

...