[vbox-dev] VirtualBo 6.0 - clean up messy warnings for module_init and module_exit

Valdis Kl=?utf-8?Q?=c4=93?=tnieks valdis.kletnieks at vt.edu
Thu Mar 14 21:47:39 GMT 2019


Building against linux-next, we get some ugly warnings in vboxpci, vboxnetflt
and vboxnetadp of the form:

In file included from /usr/share/virtualbox/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h:91,
                 from /usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:33:
./include/linux/module.h:132:6: warning: ?init_module? specifies less restrictive attribute than its target ?VBoxNetFltLinuxInit?: ?cold? [-Wmissing-attributes]
  132 |  int init_module(void) __copy(initfn) __attribute__((alias(#initfn)));
      |      ^~~~~~~~~~~
/usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:231:1: note: in expansion of macro ?module_init?
  231 | module_init(VBoxNetFltLinuxInit);
      | ^~~~~~~~~~~
/usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:266:19: note: ?init_module? target declared here
  266 | static int __init VBoxNetFltLinuxInit(void)
      |                   ^~~~~~~~~~~~~~~~~~~
In file included from /usr/share/virtualbox/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h:91,
                 from /usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:33:
./include/linux/module.h:138:7: warning: ?cleanup_module? specifies less restrictive attribute than its target ?VBoxNetFltLinuxUnload?: ?cold? [-Wmissing-attributes]
  138 |  void cleanup_module(void) __copy(exitfn) __attribute__((alias(#exitfn)));
      |       ^~~~~~~~~~~~~~
/usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:232:1: note: in expansion of macro ?module_exit?
  232 | module_exit(VBoxNetFltLinuxUnload);
      | ^~~~~~~~~~~
/usr/share/virtualbox/src/vboxhost/vboxnetflt/linux/VBoxNetFlt-linux.c:307:20: note: ?cleanup_module? target declared here
  307 | static void __exit VBoxNetFltLinuxUnload(void)
      |                    ^~~~~~~~~~~~~~~~~~~~~

Fortunately, the fix is simple - match the forward definition's attributes to
the target's attributes. I'm not sure why vboxdrv doesn't throw a warning, but
let's swat it there as well while we're at it.

And with this, doing a 'make' in /usr/share/virtualbox/src/vboxhost against
5.0.0-next-20190306 and GCC 9 on Fedora Rawhide has zero warnings. Hooray!

--- vboxdrv/linux/SUPDrv-linux.c.dist	2019-03-14 17:35:21.635584889 -0400
+++ vboxdrv/linux/SUPDrv-linux.c	2019-03-14 17:35:45.049606102 -0400
@@ -97,8 +97,8 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int  VBoxDrvLinuxInit(void);
-static void VBoxDrvLinuxUnload(void);
+static int  __init VBoxDrvLinuxInit(void);
+static void __exit VBoxDrvLinuxUnload(void);
 static int  VBoxDrvLinuxCreateSys(struct inode *pInode, struct file *pFilp);
 static int  VBoxDrvLinuxCreateUsr(struct inode *pInode, struct file *pFilp);
 static int  VBoxDrvLinuxClose(struct inode *pInode, struct file *pFilp);
--- vboxnetflt/linux/VBoxNetFlt-linux.c.dist	2019-01-25 13:21:52.000000000 -0500
+++ vboxnetflt/linux/VBoxNetFlt-linux.c	2019-03-14 17:19:33.790962955 -0400
@@ -215,8 +215,8 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int      VBoxNetFltLinuxInit(void);
-static void     VBoxNetFltLinuxUnload(void);
+static int      __init VBoxNetFltLinuxInit(void);
+static void     __exit VBoxNetFltLinuxUnload(void);
 static void     vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf);
 
 
--- vboxnetadp/linux/VBoxNetAdp-linux.c.dist	2019-03-14 17:21:35.896159037 -0400
+++ vboxnetadp/linux/VBoxNetAdp-linux.c	2019-03-14 17:22:46.402133526 -0400
@@ -70,8 +70,8 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int  VBoxNetAdpLinuxInit(void);
-static void VBoxNetAdpLinuxUnload(void);
+static int  __init VBoxNetAdpLinuxInit(void);
+static void __exit VBoxNetAdpLinuxUnload(void);
 
 static int VBoxNetAdpLinuxOpen(struct inode *pInode, struct file *pFilp);
 static int VBoxNetAdpLinuxClose(struct inode *pInode, struct file *pFilp);
--- vboxpci/linux/VBoxPci-linux.c.dist	2019-03-14 17:31:26.724668323 -0400
+++ vboxpci/linux/VBoxPci-linux.c	2019-03-14 17:31:51.420198104 -0400
@@ -66,8 +66,8 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int  VBoxPciLinuxInit(void);
-static void VBoxPciLinuxUnload(void);
+static int  __init VBoxPciLinuxInit(void);
+static void __exit VBoxPciLinuxUnload(void);
 
 
 /*********************************************************************************************************************************




More information about the vbox-dev mailing list