compile fixes
Subsystems (8)
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.cdrivers/media/video/zr36120.cdrivers/sound/cs4232.cdrivers/sound/mpu401.cdrivers/mtd/maps/elan-104nc.cdrivers/mtd/maps/sbc_gxx.cdrivers/isdn/avmb1/capi.cdrivers/atm/firestream.cdrivers/char/synclink.cdrivers/net/tokenring/abyss.cdrivers/net/tokenring/tmspci.cdrivers/net/hamachi.cdrivers/net/rcpci45.cdrivers/sound/i810_audio.cdrivers/sound/trident.cdrivers/sound/via82cxxx_audio.cdrivers/media/video/bttv-driver.cdrivers/net/wireless/orinoco_plx.cdrivers/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 *hwreturn 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 *dfs_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 fsfunc_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 (strreturn 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_devicereturn 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_setnseloutreturn 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 __devexitrcpci45_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), };
-
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
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
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.
-
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/1and 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
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
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_cs4232is__exit
the only non-__exit caller ofunload_cs4232iscs4232_isapnp_removethe only caller ofcs4232_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), };
-