Пробники Systemtap (stap) терпят неудачу с «этот оператор может провалиться через [-Werror = implicit-fallthrough =]» - PullRequest
0 голосов
/ 18 октября 2019

После обновления ядра с 5.2 до 5.3.5 мои зонды SystemTAP (stap) не работают с ошибками типа

/usr/share/systemtap/runtime/map-gen.c: In function ‘hash_si’:
/usr/share/systemtap/runtime/map-gen.c:114:28: error: this statement may fall through [-Werror=implicit-fallthrough=]
  114 |                 case 3: k1 ^= tail[2] << 16; \
      |                         ~~~^~~~~~~~~~~~~~~~
/usr/share/systemtap/runtime/map-gen.c:131:19: note: in expansion of macro ‘MURMUR_STRING’
  131 | #define KEY1_HASH MURMUR_STRING(key1)
      |                   ^~~~~~~~~~~~~
/usr/share/systemtap/runtime/map-gen.c:664:9: note: in expansion of macro ‘KEY1_HASH’
  664 |         KEY1_HASH;
      |         ^~~~~~~~~
/usr/share/systemtap/runtime/map-gen.c:115:17: note: here
  115 |                 case 2: k1 ^= tail[1] << 8; \
      |                 ^~~~

Почему?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Скорее всего, это связано с включением -Werror=implicit-fallthru в сборке ядра (что также влияет на внешние модули), начиная с версии ядра 5.3: https://lwn.net/Articles/794944/ - другими словами, системная каска в восходящем направлении требует некоторой работыдля правильной поддержки 5.3.

Предположительно, другие -Wimplicit-fallthru исправления, которые вы связали, были все для частей пространства системы systemtap, которые скомпилированы с различными настройками компилятора (старые версии ядра, скорее всего, отключили -Wimplicit-fallthru в сборке).

0 голосов
/ 18 октября 2019

Непонятно, почему это произошло после обновления ядра, так как обычно это изменение gcc / toolchain. Выглядит как связанный / похожий на предыдущий выпуск:

В любом случае это может быть локально работал вокруг с небольшим взломом кода времени выполнения systemtap, чтобы отключить предупреждение. В файлах:

  • /usr/share/systemtap/runtime/vsprintf.c
  • /usr/share/systemtap/runtime/map-gen.c

вставьте следующие две строки в начале каждого файла

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"

и эта строка в конце файла:

#pragma GCC diagnostic pop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...