Skip to contentSkip to conversation

Fix IrDA build failure

PATCH In review Samuel Ortiz 6 participants 9 messages Jul 16, 2007 – Jul 18, 2007 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Fix IrDA build failure

Hi Dave,

When having built-in IrDA, we hit the following error:

irda_sysctl_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irda_proc_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irsock_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irttp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o iriap_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irda_device_cleanup' referenced in section .init.text' of net/built-in.o: defined in discarded section .exit.text' of net/built-in.o
irlap_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irlmp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section `.exit.text' of net/built-in.o make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [_all] Error 2

This is due to the irda_init fix recently added, where we call __exit
routines from an __init one. It is a build failure that I didn't catch
because it doesn't show up when building IrDA as a module. My apologies
for that.
The following patch fixes that failure and is against your net-2.6
tree. I hope it can make it to the merge window, and [email protected] is CCed on this mail.

net/irda/af_irda.c +1 -1
index dcd7e32..4c670cf 100644
@@ -2567,7 +2567,7 @@ int __init irsock_init(void)
  *    Remove IrDA protocol
  *
  */
-void __exit irsock_cleanup(void)
+void irsock_cleanup(void)
 {
 	sock_unregister(PF_IRDA);
 	proto_unregister(&irda_proto);
net/irda/irda_device.c +2 -2
index 7b5def1..435b563 100644
@@ -95,14 +95,14 @@ int __init irda_device_init( void)
 	return 0;
 }
 
-static void __exit leftover_dongle(void *arg)
+static void leftover_dongle(void *arg)
 {
 	struct dongle_reg *reg = arg;
 	IRDA_WARNING("IrDA: Dongle type %x not unregistered\n",
 		     reg->type);
 }
 
-void __exit irda_device_cleanup(void)
+void irda_device_cleanup(void)
 {
 	IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
net/irda/iriap.c +1 -1
index 774eb70..ee3889f 100644
@@ -153,7 +153,7 @@ int __init iriap_init(void)
  *    Initializes the IrIAP layer, called by the module cleanup code in
  *    irmod.c
  */
-void __exit iriap_cleanup(void)
+void iriap_cleanup(void)
 {
 	irlmp_unregister_service(service_handle);
 
net/irda/irlap.c +1 -1
index 2fc9f51..3d76aaf 100644
@@ -95,7 +95,7 @@ int __init irlap_init(void)
 	return 0;
 }
 
-void __exit irlap_cleanup(void)
+void irlap_cleanup(void)
 {
 	IRDA_ASSERT(irlap != NULL, return;);
 
net/irda/irlmp.c +1 -1
index 24a5e3f..7efa930 100644
@@ -116,7 +116,7 @@ int __init irlmp_init(void)
  *    Remove IrLMP layer
  *
  */
-void __exit irlmp_cleanup(void)
+void irlmp_cleanup(void)
 {
 	/* Check for main structure */
 	IRDA_ASSERT(irlmp != NULL, return;);
net/irda/irproc.c +1 -1
index d6f9aba..181cb51 100644
@@ -84,7 +84,7 @@ void __init irda_proc_register(void)
  *    Unregister irda entry in /proc file system
  *
  */
-void __exit irda_proc_unregister(void)
+void irda_proc_unregister(void)
 {
 	int i;
 
net/irda/irsysctl.c +1 -1
index 2e968e7..957e04f 100644
@@ -287,7 +287,7 @@ int __init irda_sysctl_register(void)
  *    Unregister our sysctl interface
  *
  */
-void __exit irda_sysctl_unregister(void)
+void irda_sysctl_unregister(void)
 {
 	unregister_sysctl_table(irda_table_header);
 }
net/irda/irttp.c +1 -1
index 7f50832..3d7ab03 100644
@@ -109,7 +109,7 @@ int __init irttp_init(void)
  *    Called by module destruction/cleanup code
  *
  */
-void __exit irttp_cleanup(void)
+void irttp_cleanup(void)
 {
 	/* Check for main structure */
 	IRDA_ASSERT(irttp->magic == TTP_MAGIC, return;);

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/

#1 lore raw

Hi Samuel.

Quoted 4 lines · Samuel Ortiz

This is due to the irda_init fix recently added, where we call __exit routines from an __init one. It is a build failure that I didn't catch because it doesn't show up when building IrDA as a module. My apologies for that.

What about having all of them __devinit/__devexit?

Signature · 1 line
	Evgeniy Polyakov
#2 lore raw
Quoted 9 lines · Evgeniy Polyakov

Hi Samuel.

Quoted 4 lines · Samuel Ortiz

This is due to the irda_init fix recently added, where we call __exit routines from an __init one. It is a build failure that I didn't catch because it doesn't show up when building IrDA as a module. My apologies for that.

What about having all of them __devinit/__devexit?

That would be completely wrong.

Quoted 1 line

Evgeniy Polyakov

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#3 lore raw
Quoted 3 lines · Adrian Bunk
Quoted 1 line

What about having all of them __devinit/__devexit?

That would be completely wrong.

Hi Adrian.

Then why should irda have __init/__exit at first point - replacing that with appropriate 'dev' prefix I suggested.

Signature · 1 line
	Evgeniy Polyakov
#4 lore raw
Quoted 6 lines · Evgeniy Polyakov
Quoted 3 lines · Adrian Bunk
Quoted 1 line

What about having all of them __devinit/__devexit?

That would be completely wrong.

Hi Adrian.

Hi Evgeniy,

Quoted 1 line

Then why should irda have __init/__exit at first point

for code that only gets called during driver loading resp. driver unloading.

Quoted 2 lines

- replacing that
with appropriate 'dev' prefix I suggested.

You seem to misunderstand what the "dev" prefix is doing.

Quoted 1 line

Evgeniy Polyakov

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#5 lore raw
In reply to Evgeniy Polyakov
Quoted 9 lines · Evgeniy Polyakov

Hi Samuel.

Quoted 4 lines · Samuel Ortiz

This is due to the irda_init fix recently added, where we call __exit routines from an __init one. It is a build failure that I didn't catch because it doesn't show up when building IrDA as a module. My apologies for that.

What about having all of them __devinit/__devexit?

__devinit is used to say that this funtion is used for hotplug so place this in section .init.text only if !HOTPLUG.

So with __devinit/__devexit we would see exactly the same in the !HOTPLUG case but only make it harder to trigger since the normal build has HOTPLUG enabled.

New version of modpost will btw. catch these kind of errors so also in the x86 case we will be notified - but then only as a warning not as an error.

Sam

#6 lore raw
In reply to Samuel Ortiz
Quoted 26 lines · Samuel Ortiz

Hi Dave,

When having built-in IrDA, we hit the following error:

irda_sysctl_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irda_proc_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irsock_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irttp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o iriap_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irda_device_cleanup' referenced in section .init.text' of net/built-in.o: defined in discarded section .exit.text' of net/built-in.o
irlap_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irlmp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section `.exit.text' of net/built-in.o make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [_all] Error 2

Quoted 4 lines

This is due to the irda_init fix recently added, where we call __exit routines from an __init one. It is a build failure that I didn't catch because it doesn't show up when building IrDA as a module. My apologies for that.

I forgot to mention that the build fails on ARM but not on x86. As Sam explained to me, x86 discards exit sections at runtime only, unlike ARM. I don't know about other platforms though.

So, to hit this build failure, you need a combination of !x86 and built-in IrDA.

Cheers,
Samuel.

Quoted 128 lines

The following patch fixes that failure and is against your net-2.6 tree. I hope it can make it to the merge window, and [email protected] is CCed on this mail.

net/irda/af_irda.c +1 -1
index dcd7e32..4c670cf 100644
@@ -2567,7 +2567,7 @@ int __init irsock_init(void)
  *    Remove IrDA protocol
  *
  */
-void __exit irsock_cleanup(void)
+void irsock_cleanup(void)
 {
 	sock_unregister(PF_IRDA);
 	proto_unregister(&irda_proto);
net/irda/irda_device.c +2 -2
index 7b5def1..435b563 100644
@@ -95,14 +95,14 @@ int __init irda_device_init( void)
 	return 0;
 }
 
-static void __exit leftover_dongle(void *arg)
+static void leftover_dongle(void *arg)
 {
 	struct dongle_reg *reg = arg;
 	IRDA_WARNING("IrDA: Dongle type %x not unregistered\n",
 		     reg->type);
 }
 
-void __exit irda_device_cleanup(void)
+void irda_device_cleanup(void)
 {
 	IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
net/irda/iriap.c +1 -1
index 774eb70..ee3889f 100644
@@ -153,7 +153,7 @@ int __init iriap_init(void)
  *    Initializes the IrIAP layer, called by the module cleanup code in
  *    irmod.c
  */
-void __exit iriap_cleanup(void)
+void iriap_cleanup(void)
 {
 	irlmp_unregister_service(service_handle);
 
net/irda/irlap.c +1 -1
index 2fc9f51..3d76aaf 100644
@@ -95,7 +95,7 @@ int __init irlap_init(void)
 	return 0;
 }
 
-void __exit irlap_cleanup(void)
+void irlap_cleanup(void)
 {
 	IRDA_ASSERT(irlap != NULL, return;);
 
net/irda/irlmp.c +1 -1
index 24a5e3f..7efa930 100644
@@ -116,7 +116,7 @@ int __init irlmp_init(void)
  *    Remove IrLMP layer
  *
  */
-void __exit irlmp_cleanup(void)
+void irlmp_cleanup(void)
 {
 	/* Check for main structure */
 	IRDA_ASSERT(irlmp != NULL, return;);
net/irda/irproc.c +1 -1
index d6f9aba..181cb51 100644
@@ -84,7 +84,7 @@ void __init irda_proc_register(void)
  *    Unregister irda entry in /proc file system
  *
  */
-void __exit irda_proc_unregister(void)
+void irda_proc_unregister(void)
 {
 	int i;
 
net/irda/irsysctl.c +1 -1
index 2e968e7..957e04f 100644
@@ -287,7 +287,7 @@ int __init irda_sysctl_register(void)
  *    Unregister our sysctl interface
  *
  */
-void __exit irda_sysctl_unregister(void)
+void irda_sysctl_unregister(void)
 {
 	unregister_sysctl_table(irda_table_header);
 }
net/irda/irttp.c +1 -2
index 7f50832..3d7ab03 100644
@@ -109,7 +109,7 @@ int __init irttp_init(void)
  *    Called by module destruction/cleanup code
  *
  */
-void __exit irttp_cleanup(void)
+void irttp_cleanup(void)
 {
 	/* Check for main structure */
 	IRDA_ASSERT(irttp->magic == TTP_MAGIC, return;);
 
-------------------------------------------------------------------------

This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
irda-users mailing list [email protected]
http://lists.sourceforge.net/lists/listinfo/irda-users

#7 lore raw
Quoted 31 lines · Samuel Ortiz
Quoted 26 lines · Samuel Ortiz

Hi Dave,

When having built-in IrDA, we hit the following error:

irda_sysctl_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irda_proc_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irsock_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irttp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o iriap_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irda_device_cleanup' referenced in section .init.text' of net/built-in.o: defined in discarded section .exit.text' of net/built-in.o
irlap_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irlmp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section `.exit.text' of net/built-in.o make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [_all] Error 2

Quoted 4 lines

This is due to the irda_init fix recently added, where we call __exit routines from an __init one. It is a build failure that I didn't catch because it doesn't show up when building IrDA as a module. My apologies for that.

Quoted 6 lines

I forgot to mention that the build fails on ARM but not on x86. As Sam explained to me, x86 discards exit sections at runtime only, unlike ARM. I don't know about other platforms though.

So, to hit this build failure, you need a combination of !x86 and built-in IrDA.

On i386 these are runtime failures (although in unlikely error paths) which isn't better.

Quoted 2 lines

Cheers,
Samuel.

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed

A message that is not in the archive (sent off-list or not yet received): 20070716111715.GB22757-OPs8hQ7j6VREYlHNa9+yaNBPR1lH4CV8@public.gmane.org

#9 lore raw

From: Samuel Ortiz <[email protected]>
Date: Mon, 16 Jul 2007 14:17:15 +0300

Quoted 32 lines

When having built-in IrDA, we hit the following error:

irda_sysctl_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irda_proc_unregister' referenced in section .init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o
irsock_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irttp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o iriap_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irda_device_cleanup' referenced in section .init.text' of net/built-in.o: defined in discarded section .exit.text' of net/built-in.o
irlap_cleanup' referenced in section .init.text' of net/built-in.o:
defined in discarded section .exit.text' of net/built-in.o irlmp_cleanup' referenced in section `.init.text' of net/built-in.o:
defined in discarded section `.exit.text' of net/built-in.o make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [_all] Error 2

This is due to the irda_init fix recently added, where we call __exit
routines from an __init one. It is a build failure that I didn't catch
because it doesn't show up when building IrDA as a module. My apologies
for that.
The following patch fixes that failure and is against your net-2.6
tree. I hope it can make it to the merge window, and [email protected] is CCed on this mail.

Quoted 1 line

I've applied this.

I realize that alternative suggestions have been made on how to fix this, and when consensus on that is reached someone can send me a follow-on patch.

Thanks!

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/