Skip to contentSkip to conversation

compile fixes

PATCH In review Andrew Morton 3 participants 7 messages Feb 13, 2002 – Feb 15, 2002

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

PATCH 1/1 compile fixes

This patch should fix all the remaining .text.exit problems
which have resulted from recent binutils changes. For all
files which are accessible to an x86 build.

With these changes I was able to link the entire tree with CONFIG_HOTPLUG enabled and disabled.

The kernel text+data+bss was 21 megabytes. The build system whined about "System is too big. Try using modules." so I couldn't test it, which would have been rather fun.

Affected files:

drivers/char/mwave/mwavedd.c
drivers/media/video/zr36120.c
drivers/sound/cs4232.c
drivers/sound/mpu401.c
drivers/mtd/maps/elan-104nc.c
drivers/mtd/maps/sbc_gxx.c
drivers/isdn/avmb1/capi.c
drivers/atm/firestream.c
drivers/char/synclink.c
drivers/net/tokenring/abyss.c
drivers/net/tokenring/tmspci.c
drivers/net/hamachi.c
drivers/net/rcpci45.c
drivers/sound/i810_audio.c
drivers/sound/trident.c
drivers/sound/via82cxxx_audio.c
drivers/media/video/bttv-driver.c
drivers/net/wireless/orinoco_plx.c
drivers/video/radeonfb.c

drivers/char/mwave/mwavedd.c +1 -1
@@ -462,7 +462,7 @@ static struct miscdevice mwave_misc_dev 
 * mwave_exit is called on module unload
 * mwave_exit is also used to clean up after an aborted mwave_init
 */
-static void __exit mwave_exit(void)
+static void mwave_exit(void)
 {
 	pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd;
 
drivers/media/video/zr36120.c +1 -1
@@ -2025,7 +2025,7 @@ int __init init_zoran(int card)
 }
 
 static
-void __exit release_zoran(int max)
+void release_zoran(int max)
 {
 	struct zoran *ztv;
 	int i;
drivers/sound/cs4232.c +1 -1
@@ -277,7 +277,7 @@ void __init attach_cs4232(struct address
 	}
 }
 
-void __exit unload_cs4232(struct address_info *hw_config)
+void unload_cs4232(struct address_info *hw_config)
 {
 	int base = hw_config->io_base, irq = hw_config->irq;
 	int dma1 = hw_config->dma, dma2 = hw_config->dma2;
drivers/sound/mpu401.c +1 -1
@@ -1227,7 +1227,7 @@ int probe_mpu401(struct address_info *hw
 	return ok;
 }
 
-void __exit unload_mpu401(struct address_info *hw_config)
+void unload_mpu401(struct address_info *hw_config)
 {
 	void *p;
 	int n=hw_config->slots[1];
drivers/mtd/maps/elan-104nc.c +1 -1
@@ -213,7 +213,7 @@ static struct map_info elan_104nc_map = 
 /* MTD device for all of the flash. */
 static struct mtd_info *all_mtd;
 
-static void __exit cleanup_elan_104nc(void)
+static void cleanup_elan_104nc(void)
 {
 	if( all_mtd ) {
 		del_mtd_partitions( all_mtd );
drivers/mtd/maps/sbc_gxx.c +1 -1
@@ -221,7 +221,7 @@ static struct map_info sbc_gxx_map = {
 /* MTD device for all of the flash. */
 static struct mtd_info *all_mtd;
 
-static void __exit cleanup_sbc_gxx(void)
+static void cleanup_sbc_gxx(void)
 {
 	if( all_mtd ) {
 		del_mtd_partitions( all_mtd );
drivers/isdn/avmb1/capi.c +1 -1
@@ -1772,7 +1772,7 @@ static void __exit proc_exit(void)
 /* -------- init function and module interface ---------------------- */
 
 
-static void __exit alloc_exit(void)
+static void alloc_exit(void)
 {
 	if (capidev_cachep) {
 		(void)kmem_cache_destroy(capidev_cachep);
drivers/atm/firestream.c +3 -3
@@ -1530,7 +1530,7 @@ static void top_off_fp (struct fs_dev *d
 	fs_dprintk (FS_DEBUG_QUEUE, "Added %d entries. \n", n);
 }
 
-static void __exit free_queue (struct fs_dev *dev, struct queue *txq)
+static void __devexit free_queue (struct fs_dev *dev, struct queue *txq)
 {
 	func_enter ();
 
@@ -1546,7 +1546,7 @@ static void __exit free_queue (struct fs
 	func_exit ();
 }
 
-static void __exit free_freepool (struct fs_dev *dev, struct freepool *fp)
+static void __devexit free_freepool (struct fs_dev *dev, struct freepool *fp)
 {
 	func_enter ();
 
@@ -2088,7 +2088,7 @@ int __init init_PCI (void)
 #endif 
 */
 
-const static struct pci_device_id firestream_pci_tbl[] __devinitdata = {
+static struct pci_device_id firestream_pci_tbl[] __devinitdata = {
 	{ PCI_VENDOR_ID_FUJITSU_ME, PCI_DEVICE_ID_FUJITSU_FS50, 
 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, FS_IS50},
 	{ PCI_VENDOR_ID_FUJITSU_ME, PCI_DEVICE_ID_FUJITSU_FS155, 
drivers/char/synclink.c +2 -2
@@ -940,7 +940,7 @@ static struct pci_driver synclink_pci_dr
 	name:		"synclink",
 	id_table:	synclink_pci_tbl,
 	probe:		synclink_init_one,
-	remove:		synclink_remove_one,
+	remove:		__devexit_p(synclink_remove_one),
 };
 
 static struct tty_driver serial_driver, callout_driver;
@@ -8219,7 +8219,7 @@ static int __init synclink_init_one (str
 	return 0;
 }
 
-static void __exit synclink_remove_one (struct pci_dev *dev)
+static void __devexit synclink_remove_one (struct pci_dev *dev)
 {
 }
 
drivers/net/tokenring/abyss.c +2 -2
@@ -433,7 +433,7 @@ static int abyss_close(struct net_device
 	return 0;
 }
 
-static void __exit abyss_detach (struct pci_dev *pdev)
+static void __devexit abyss_detach (struct pci_dev *pdev)
 {
 	struct net_device *dev = pci_get_drvdata(pdev);
 	
@@ -451,7 +451,7 @@ static struct pci_driver abyss_driver = 
 	name:		"abyss",
 	id_table:	abyss_pci_tbl,
 	probe:		abyss_attach,
-	remove:		abyss_detach,
+	remove:		__devexit_p(abyss_detach),
 };
 
 static int __init abyss_init (void)
drivers/net/tokenring/tmspci.c +2 -2
@@ -220,7 +220,7 @@ static unsigned short tms_pci_setnselout
 	return val;
 }
 
-static void __exit tms_pci_detach (struct pci_dev *pdev)
+static void __devexit tms_pci_detach (struct pci_dev *pdev)
 {
 	struct net_device *dev = pci_get_drvdata(pdev);
 
@@ -238,7 +238,7 @@ static struct pci_driver tms_pci_driver 
 	name:		"tmspci",
 	id_table:	tmspci_pci_tbl,
 	probe:		tms_pci_attach,
-	remove:		tms_pci_detach,
+	remove:		__devexit_p(tms_pci_detach),
 };
 
 static int __init tms_pci_init (void)
drivers/net/hamachi.c +2 -2
@@ -1981,7 +1981,7 @@ static int netdev_ioctl(struct net_devic
 }
 
 
-static void __exit hamachi_remove_one (struct pci_dev *pdev)
+static void __devexit hamachi_remove_one (struct pci_dev *pdev)
 {
 	struct net_device *dev = pci_get_drvdata(pdev);
 
@@ -2011,7 +2011,7 @@ static struct pci_driver hamachi_driver 
 	name:		DRV_NAME,
 	id_table:	hamachi_pci_tbl,
 	probe:		hamachi_init_one,
-	remove:		hamachi_remove_one,
+	remove:		__devexit_p(hamachi_remove_one),
 };
 
 static int __init hamachi_init (void)
drivers/net/rcpci45.c +2 -2
@@ -124,7 +124,7 @@ static struct pci_device_id rcpci45_pci_
 MODULE_DEVICE_TABLE (pci, rcpci45_pci_table);
 MODULE_LICENSE("GPL");
 
-static void __exit
+static void __devexit
 rcpci45_remove_one (struct pci_dev *pdev)
 {
 	struct net_device *dev = pci_get_drvdata (pdev);
@@ -267,7 +267,7 @@ static struct pci_driver rcpci45_driver 
 	name:		"rcpci45",
 	id_table:	rcpci45_pci_table,
 	probe:		rcpci45_init_one,
-	remove:		rcpci45_remove_one,
+	remove:		__devexit_p(rcpci45_remove_one),
 };
 
 static int __init
drivers/sound/i810_audio.c +2 -2
@@ -2938,7 +2938,7 @@ static int __init i810_probe(struct pci_
 	return 0;
 }
 
-static void __exit i810_remove(struct pci_dev *pci_dev)
+static void __devexit i810_remove(struct pci_dev *pci_dev)
 {
 	int i;
 	struct i810_card *card = pci_get_drvdata(pci_dev);
@@ -3098,7 +3098,7 @@ static struct pci_driver i810_pci_driver
 	name:		I810_MODULE_NAME,
 	id_table:	i810_pci_tbl,
 	probe:		i810_probe,
-	remove:		i810_remove,
+	remove:		__devexit_p(i810_remove),
 #ifdef CONFIG_PM
 	suspend:	i810_pm_suspend,
 	resume:		i810_pm_resume,
drivers/sound/trident.c +2 -2
@@ -4149,7 +4149,7 @@ out_release_region:
 	goto out;
 }
 
-static void __exit trident_remove(struct pci_dev *pci_dev)
+static void __devexit trident_remove(struct pci_dev *pci_dev)
 {
 	int i;
 	struct trident_card *card = pci_get_drvdata(pci_dev);
@@ -4202,7 +4202,7 @@ static struct pci_driver trident_pci_dri
 	name:		TRIDENT_MODULE_NAME,
 	id_table:	trident_pci_tbl,
 	probe:		trident_probe,
-	remove:		trident_remove,
+	remove:		__devexit_p(trident_remove),
 	suspend:	trident_suspend,
 	resume:		trident_resume
 };
drivers/sound/via82cxxx_audio.c +3 -3
@@ -311,7 +311,7 @@ static unsigned via_num_cards = 0;
  */
 
 static int via_init_one (struct pci_dev *dev, const struct pci_device_id *id);
-static void via_remove_one (struct pci_dev *pdev);
+static void __devexit via_remove_one (struct pci_dev *pdev);
 
 static ssize_t via_dsp_read(struct file *file, char *buffer, size_t count, loff_t *ppos);
 static ssize_t via_dsp_write(struct file *file, const char *buffer, size_t count, loff_t *ppos);
@@ -365,7 +365,7 @@ static struct pci_driver via_driver = {
 	name:		VIA_MODULE_NAME,
 	id_table:	via_pci_tbl,
 	probe:		via_init_one,
-	remove:		via_remove_one,
+	remove:		__devexit_p(via_remove_one),
 };
 
 
@@ -3271,7 +3271,7 @@ err_out:
 }
 
 
-static void __exit via_remove_one (struct pci_dev *pdev)
+static void __devexit via_remove_one (struct pci_dev *pdev)
 {
 	struct via_info *card;
 
drivers/media/video/bttv-driver.c +2 -2
@@ -2820,7 +2820,7 @@ static void bttv_irq(int irq, void *dev_
  *	Scan for a Bt848 card, request the irq and map the io memory 
  */
 
-static void __devexit bttv_remove(struct pci_dev *pci_dev)
+static void bttv_remove(struct pci_dev *pci_dev)
 {
         u8 command;
         int j;
@@ -3025,7 +3025,7 @@ static struct pci_driver bttv_pci_driver
         name:     "bttv",
         id_table: bttv_pci_tbl,
         probe:    bttv_probe,
-        remove:   __devexit_p(bttv_remove),
+        remove:   bttv_remove,
 };
 
 int bttv_init_module(void)
drivers/net/wireless/orinoco_plx.c +1 -1
@@ -394,7 +394,7 @@ static struct pci_driver orinoco_plx_dri
 	name:"orinoco_plx",
 	id_table:orinoco_plx_pci_id_table,
 	probe:orinoco_plx_init_one,
-	remove:orinoco_plx_remove_one,
+	remove:__devexit_p(orinoco_plx_remove_one),
 	suspend:0,
 	resume:0
 };
drivers/video/radeonfb.c +1 -1
@@ -690,7 +690,7 @@ static struct pci_driver radeonfb_driver
 	name:		"radeonfb",
 	id_table:	radeonfb_pci_table,
 	probe:		radeonfb_pci_register,
-	remove:		radeonfb_pci_unregister,
+	remove:		__devexit_p(radeonfb_pci_unregister),
 };
 
 

-

#1 lore raw

drivers/mtd/maps/elan-104nc.c static struct map_info elan_104nc_map = · line 217

Quoted 3 lines · [email protected] said:
drivers/mtd/maps/elan-104nc.c +1 -1
-static void __exit cleanup_elan_104nc(void) 
+static void cleanup_elan_104nc(void)
 {

Bah. Now it doesn't get dropped from the kernel after init is done either. Anyone for an __initexit section?

(I'll apply it to my tree as soon as my CVS server comes back online though
- it's obviously the right thing to do in the meantime)

--
dwmw2

#2 lore raw
In reply to Andrew Morton
Quoted 4 lines · Andrew Morton

This patch should fix all the remaining .text.exit problems
which have resulted from recent binutils changes. For all
files which are accessible to an x86 build.
...

Thanks for your work, I tried to compile non-modular 2.4.18-pre9 with this patch and as much as possible enabled. The .text.exit errors are now gone with one exception:

drivers/char/char.o(.data+0xacf4): undefined reference to `local symbols in discarded section .text.exit'

cu
Adrian

#3 lore raw
In reply to Andrew Morton
Quoted 8 lines · Adrian Bunk
Quoted 4 lines · Andrew Morton

This patch should fix all the remaining .text.exit problems
which have resulted from recent binutils changes. For all
files which are accessible to an x86 build.
...

Quoted 7 lines

Thanks for your work, I tried to compile non-modular 2.4.18-pre9 with this patch and as much as possible enabled. The .text.exit errors are now gone with one exception:

drivers/char/char.o(.data+0xacf4): undefined reference to `local symbols in discarded section .text.exit'

Well that's odd. Perhaps something is configured differently. Please do this:

make bzImage

Near the end of the build, see the line

ld -m elf_i386 -T <lots of .o files> -o vmlinux

delete all the .o files which appear that command line.

Now, run

ld -m elf_i386 -T arch/i386/vmlinux.lds $(find . -name '*.o') 2> /tmp/1

Now, go through all the junk in /tmp/1 and search for the text "discarded".
It will mention a filename. That's the info we want.

Thanks.

-

#4 lore raw
Quoted 9 lines · Andrew Morton

...

Quoted 2 lines

drivers/char/char.o(.data+0xacf4): undefined reference to `local symbols in discarded section .text.exit'

Well that's odd. Perhaps something is configured differently. Please do this:
...
Now, go through all the junk in /tmp/1 and search for the text "discarded".
It will mention a filename. That's the info we want.

./drivers/char/wdt_pci.o(.data+0x114): undefined reference to `local symbols in discarded section .text.exit'

Quoted 1 line

Thanks.

cu
Adrian

#5 lore raw
In reply to Andrew Morton
Quoted 7 lines · Andrew Morton

This patch should fix all the remaining .text.exit problems
which have resulted from recent binutils changes. For all
files which are accessible to an x86 build.
...

drivers/sound/cs4232.c void __init attach_cs4232(struct address · line 283

Quoted 9 lines
drivers/sound/cs4232.c +1 -1
@@ -277,7 +277,7 @@ void __init attach_cs4232(struct address
 	}
 }
 
-void __exit unload_cs4232(struct address_info *hw_config)
+void unload_cs4232(struct address_info *hw_config)
 {
 	int base = hw_config->io_base, irq = hw_config->irq;
 	int dma1 = hw_config->dma, dma2 = hw_config->dma2;
...

unload_cs4232 is __exit
the only non-__exit caller of unload_cs4232 is cs4232_isapnp_remove the only caller of cs4232_isapnp_remove (cleanup_cs4232) is __exit

Am I right to assume that the following alternative patch is correct, too?

sound/cs4232.c renamed from sound/cs4232.c.old +1 -1
@@ -460,7 +460,7 @@
 	return 0;
 }
 
-int cs4232_isapnp_remove(struct pci_dev *dev, const struct isapnp_device_id *id)
+int __exit cs4232_isapnp_remove(struct pci_dev *dev, const struct isapnp_device_id *id)
 {
 	struct address_info *cfg = (struct address_info*)pci_get_drvdata(dev);
 	if (cfg) unload_cs4232(cfg);

cu
Adrian

#6 lore raw
In reply to Andrew Morton
Quoted 24 lines · Adrian Bunk
Quoted 7 lines · Andrew Morton

This patch should fix all the remaining .text.exit problems
which have resulted from recent binutils changes. For all
files which are accessible to an x86 build.
...

drivers/sound/cs4232.c Tue Feb 12 23:47:28 2002 void __init attach_cs4232(struct address · line 283

Quoted 9 lines
drivers/sound/cs4232.c Tue Feb 12 23:47:28 2002 renamed from drivers/sound/cs4232.c Sun Sep 30 12:26:08 2001 +1 -1
@@ -277,7 +277,7 @@ void __init attach_cs4232(struct address
      }
 }
 
-void __exit unload_cs4232(struct address_info *hw_config)
+void unload_cs4232(struct address_info *hw_config)
 {
      int base = hw_config->io_base, irq = hw_config->irq;
      int dma1 = hw_config->dma, dma2 = hw_config->dma2;
...

unload_cs4232 is __exit
the only non-__exit caller of unload_cs4232 is cs4232_isapnp_remove the only caller of cs4232_isapnp_remove (cleanup_cs4232) is __exit

Quoted 2 lines

Am I right to assume that the following alternative patch is correct, too?

Yes, that's better. Here's a patch against -rc1. It also
fixes wdt_pci.c. I missed all the watchdog cards on the
first pass. Thanks.

drivers/sound/cs4232.c +5 -3
@@ -277,7 +277,7 @@ void __init attach_cs4232(struct address
 	}
 }
 
-void unload_cs4232(struct address_info *hw_config)
+static void __exit unload_cs4232(struct address_info *hw_config)
 {
 	int base = hw_config->io_base, irq = hw_config->irq;
 	int dma1 = hw_config->dma, dma2 = hw_config->dma2;
@@ -460,10 +460,12 @@ static int __init init_cs4232(void)
 	return 0;
 }
 
-int cs4232_isapnp_remove(struct pci_dev *dev, const struct isapnp_device_id *id)
+static int __exit cs4232_isapnp_remove(struct pci_dev *dev,
+			const struct isapnp_device_id *id)
 {
 	struct address_info *cfg = (struct address_info*)pci_get_drvdata(dev);
-	if (cfg) unload_cs4232(cfg);
+	if (cfg)
+		unload_cs4232(cfg);
 	pci_set_drvdata(dev,NULL);
 	dev->deactivate(dev);
 	return 0;
drivers/char/wdt_pci.c +2 -2
@@ -577,7 +577,7 @@ out_reg:
 }
 
 
-static void __exit wdtpci_remove_one (struct pci_dev *pdev)
+static void __devexit wdtpci_remove_one (struct pci_dev *pdev)
 {
 	/* here we assume only one device will ever have
 	 * been picked up and registered by probe function */
@@ -602,7 +602,7 @@ static struct pci_driver wdtpci_driver =
 	name:		"wdt-pci",
 	id_table:	wdtpci_pci_tbl,
 	probe:		wdtpci_init_one,
-	remove:		wdtpci_remove_one,
+	remove:		__devexit_p(wdtpci_remove_one),
 };
 
 

-