From 884a8db7a8448deb90d6b42ad9931baabfdce8e6 Mon Sep 17 00:00:00 2001 From: "R. Imura" Date: Mon, 5 Sep 2005 17:03:40 +0000 Subject: [PATCH] Fix panic when loading libiconv.ko on sparc64. It seems that this issue only become obvious when compiled with -O2 on sparc64. Since each struct iconv_converter_class has been initialized by DEFINE_CLASS macro, not all members of struct iconv_converter_class has been allocated on memory and cc_link member has not been initialized, while iconv_register_converter() wanted to access it with TAILQ. Now we modify KICONV_CONVERTER macro and fix this bug. Problem reported on: freebsd-sparc64 Pointed out by: yongari Discussed with: yongari Tested by: yongari MFC after: 3 days --- sys/sys/iconv.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/sys/iconv.h b/sys/sys/iconv.h index 90ea3dbc9d1c..914522d9b7fc 100644 --- a/sys/sys/iconv.h +++ b/sys/sys/iconv.h @@ -128,8 +128,10 @@ struct iconv_cspair { TAILQ_ENTRY(iconv_cspair) cp_link; }; -#define KICONV_CONVERTER(name,size) \ - static DEFINE_CLASS(iconv_ ## name, iconv_ ## name ## _methods, (size)); \ +#define KICONV_CONVERTER(name,size) \ + static struct iconv_converter_class iconv_ ## name ## _class = { \ + "iconv_"#name, iconv_ ## name ## _methods, size, NULL \ + }; \ static moduledata_t iconv_ ## name ## _mod = { \ "iconv_"#name, iconv_converter_handler, \ (void*)&iconv_ ## name ## _class \