Skip to contentSkip to conversation

ARM: dyndbg: allow including dyndbg.h in decompressor

PATCH In review Arnd Bergmann 4 participants 4 messages Mar 10, 2023 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: dyndbg: allow including dyndbg.h in decompressor

From: Arnd Bergmann <[email protected]>

After a change to linux/module.h, dyndbg.h is now included indirectly from the decompressor for lz4 support, which in turn causes a build failure on 32-bit Arm:

In file included from include/linux/module.h:30,

                 from arch/arm/boot/compressed/../../../../lib/lz4/lz4_decompress.c:39,
                 from arch/arm/boot/compressed/../../../../lib/decompress_unlz4.c:10,
                 from arch/arm/boot/compressed/decompress.c:59:
include/linux/dynamic_debug.h: In function 'ddebug_dyndbg_module_param_cb':
include/linux/dynamic_debug.h:307:14: error: implicit declaration of function 'strcmp' [-Werror=implicit-function-declaration]
  307 |         if (!strcmp(param, "dyndbg")) {
      |              ^~~~~~

include/linux/dynamic_debug.h:1:1: note: 'strcmp' is defined in header '<string.h>'; did you forget to '#include <string.h>'?
+++ |+#include <string.h>

The decompressor has its own replacement for the linux/string.h contents, so the normal declaration is not visible here. Since the function is not actually called, it is sufficient to add a declaration, and this is in fact the correct one as it matches the definition in arch/arm/boot/compressed/string.c.

Fixes 7deabd674988 ("dyndbg: use the module notifier callbacks")

---
The patch that caused the problem is in linux-next, maybe fold the fix into that patch if possible

---
 arch/arm/boot/compressed/decompress.c | 1 +
 1 file changed, 1 insertion(+)
arch/arm/boot/compressed/decompress.c +1 -0
index 74255e819831..0669851394f0 100644
@@ -31,6 +31,7 @@
 /* Not needed, but used in some headers pulled in by decompressors */
 extern char * strstr(const char * s1, const char *s2);
 extern size_t strlen(const char *s);
+extern int strcmp(const char *cs, const char *ct);
 extern int memcmp(const void *cs, const void *ct, size_t count);
 extern char * strchrnul(const char *, int);
 
Signature · 1 line
2.39.2
Acked-by on v1 1/1
#1 lore raw
Quoted 37 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

After a change to linux/module.h, dyndbg.h is now included indirectly from the decompressor for lz4 support, which in turn causes a build failure on 32-bit Arm:

In file included from include/linux/module.h:30,

                  from arch/arm/boot/compressed/../../../../lib/lz4/lz4_decompress.c:39,
                  from arch/arm/boot/compressed/../../../../lib/decompress_unlz4.c:10,
                  from arch/arm/boot/compressed/decompress.c:59:
include/linux/dynamic_debug.h: In function 'ddebug_dyndbg_module_param_cb':
include/linux/dynamic_debug.h:307:14: error: implicit declaration of function 'strcmp' [-Werror=implicit-function-declaration]
   307 |         if (!strcmp(param, "dyndbg")) {
       |              ^~~~~~

include/linux/dynamic_debug.h:1:1: note: 'strcmp' is defined in header '<string.h>'; did you forget to '#include <string.h>'?
+++ |+#include <string.h>

The decompressor has its own replacement for the linux/string.h contents, so the normal declaration is not visible here. Since the function is not actually called, it is sufficient to add a declaration, and this is in fact the correct one as it matches the definition in arch/arm/boot/compressed/string.c.

Fixes 7deabd674988 ("dyndbg: use the module notifier callbacks")

---
The patch that caused the problem is in linux-next, maybe fold the fix into that patch if possible

---
  arch/arm/boot/compressed/decompress.c | 1 +
  1 file changed, 1 insertion(+)
arch/arm/boot/compressed/decompress.c +0 -0
index 74255e819831..0669851394f0 100644

arch/arm/boot/compressed/decompress.c line 37

Quoted 7 lines
arch/arm/boot/compressed/decompress.c +1 -0
@@ -31,6 +31,7 @@
  /* Not needed, but used in some headers pulled in by decompressors */
  extern char * strstr(const char * s1, const char *s2);
  extern size_t strlen(const char *s);
+extern int strcmp(const char *cs, const char *ct);
  extern int memcmp(const void *cs, const void *ct, size_t count);
  extern char * strchrnul(const char *, int);
 

Hi Arnd,

Thank you for the fix up, I was about to look into this...

Thanks,

-Jason

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Reviewed-by on v1 1/1
#2 lore raw
In reply to Arnd Bergmann
Quoted 23 lines

From: Arnd Bergmann <[email protected]>

After a change to linux/module.h, dyndbg.h is now included indirectly from the decompressor for lz4 support, which in turn causes a build failure on 32-bit Arm:

In file included from include/linux/module.h:30,

                 from arch/arm/boot/compressed/../../../../lib/lz4/lz4_decompress.c:39,
                 from arch/arm/boot/compressed/../../../../lib/decompress_unlz4.c:10,
                 from arch/arm/boot/compressed/decompress.c:59:
include/linux/dynamic_debug.h: In function 'ddebug_dyndbg_module_param_cb':
include/linux/dynamic_debug.h:307:14: error: implicit declaration of function 'strcmp' [-Werror=implicit-function-declaration]
  307 |         if (!strcmp(param, "dyndbg")) {
      |              ^~~~~~

include/linux/dynamic_debug.h:1:1: note: 'strcmp' is defined in header '<string.h>'; did you forget to '#include <string.h>'?
+++ |+#include <string.h>

The decompressor has its own replacement for the linux/string.h contents, so the normal declaration is not visible here. Since the function is not actually called, it is sufficient to add a declaration, and this is in fact the correct one as it matches the definition in arch/arm/boot/compressed/string.c.

Quoted 3 lines
Fixes 7deabd674988 ("dyndbg: use the module notifier callbacks")

---

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

#3 lore raw
In reply to Arnd Bergmann
Quoted 23 lines · Arnd Bergmann

From: Arnd Bergmann <[email protected]>

After a change to linux/module.h, dyndbg.h is now included indirectly from the decompressor for lz4 support, which in turn causes a build failure on 32-bit Arm:

In file included from include/linux/module.h:30,

                 from arch/arm/boot/compressed/../../../../lib/lz4/lz4_decompress.c:39,
                 from arch/arm/boot/compressed/../../../../lib/decompress_unlz4.c:10,
                 from arch/arm/boot/compressed/decompress.c:59:
include/linux/dynamic_debug.h: In function 'ddebug_dyndbg_module_param_cb':
include/linux/dynamic_debug.h:307:14: error: implicit declaration of function 'strcmp' [-Werror=implicit-function-declaration]
  307 |         if (!strcmp(param, "dyndbg")) {
      |              ^~~~~~

include/linux/dynamic_debug.h:1:1: note: 'strcmp' is defined in header '<string.h>'; did you forget to '#include <string.h>'?
+++ |+#include <string.h>

The decompressor has its own replacement for the linux/string.h contents, so the normal declaration is not visible here. Since the function is not actually called, it is sufficient to add a declaration, and this is in fact the correct one as it matches the definition in arch/arm/boot/compressed/string.c.

Quoted 6 lines
Fixes 7deabd674988 ("dyndbg: use the module notifier callbacks")

---
The patch that caused the problem is in linux-next, maybe fold the fix into that patch if possible
---

Thanks for figuring this out, Arnd! Pushed to modules-next!

Luis