Skip to content
ckaestne edited this page Mar 28, 2013 · 25 revisions
  • cx23885_input_rx_work_handler imported and exported with different signatures, not detected by linker and not problematic in practice: drivers/media/video/cx23885/cx23885-input and drivers/media/video/cx23885/cx23885-ir

#need to investigate

confirmed bugs:

two drivers export the same method (confirmed):

MlmeThread when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_RT2870 | CONFIG_STAGING & CONFIG_RT2870 & !CONFIG_VT6655
	MlmeThread: (*void) => signed int		if CONFIG_STAGING & CONFIG_RT2870		at l/drivers/staging/rt2870/usb_main_dev:0:0
	MlmeThread: (*void) => signed int		if CONFIG_STAGING & CONFIG_VT6655		at l/drivers/staging/vt6655/device_main:0:0

confirmed bug:

** processing drivers/staging/vt6656 **
parsing
33 files
composing
total composition time: 105
. * RFvRSSITodBm when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_VT6655 | CONFIG_STAGING & CONFIG_VT6655 & !CONFIG_VT6656
	RFvRSSITodBm: (*struct __device_info, unsigned char, *signed long) => void		if CONFIG_STAGING & CONFIG_VT6655		at l/drivers/staging/vt6655/rf:0:0
	RFvRSSITodBm: (*struct __device_info, unsigned char, *signed long) => void		if CONFIG_STAGING & CONFIG_VT6656		at l/drivers/staging/vt6656/rf:0:0
 * PSvEnablePowerSaving when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_VT6655 | CONFIG_STAGING & CONFIG_VT6655 & !CONFIG_VT6656
	PSvEnablePowerSaving: (*void, unsigned short) => void		if CONFIG_STAGING & CONFIG_VT6655		at l/drivers/staging/vt6655/power:0:0
	PSvEnablePowerSaving: (*void, unsigned short) => void		if CONFIG_STAGING & CONFIG_VT6656		at l/drivers/staging/vt6656/power:0:0

incompatable type signatures, no effect at runtime though, because is not checked

** processing drivers/acpi **
parsing44 files
composing
 * acpi_unlock_ac_dir when !CONFIG_ACPI | CONFIG_ACPI & !CONFIG_ACPI_AC | CONFIG_ACPI & CONFIG_ACPI_AC & !CONFIG_ACPI_PROCFS_POWER
	acpi_unlock_ac_dir: (*struct proc_dir_entry) => *void		if CONFIG_ACPI & CONFIG_ACPI_AC & CONFIG_ACPI_PROCFS_POWER		at l/drivers/acpi/ac:0:0
	acpi_unlock_ac_dir: (*struct proc_dir_entry) => void		if CONFIG_ACPI & CONFIG_ACPI_PROCFS_POWER		at l/drivers/acpi/cm_sbs:0:0
 * acpi_unlock_battery_dir when !CONFIG_ACPI | CONFIG_ACPI & !CONFIG_ACPI_PROCFS_POWER | CONFIG_ACPI & CONFIG_ACPI_PROCFS_POWER & !CONFIG_ACPI_BATTERY
	acpi_unlock_battery_dir: (*struct proc_dir_entry) => *void		if CONFIG_ACPI & CONFIG_ACPI_PROCFS_POWER & CONFIG_ACPI_BATTERY		at l/drivers/acpi/battery:0:0
	acpi_unlock_battery_dir: (*struct proc_dir_entry) => void		if CONFIG_ACPI & CONFIG_ACPI_PROCFS_POWER		at l/drivers/acpi/cm_sbs:0:0
total composition time: 476

extern inline (rerun)

** processing drivers/staging/pohmelfs **
parsing9 files
composing
 * pin_inotify_watch when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_INOTIFY & !CONFIG_POHMELFS | CONFIG_STAGING & CONFIG_INOTIFY
	pin_inotify_watch: (*struct inotify_watch) => signed int		if CONFIG_STAGING & !CONFIG_INOTIFY & CONFIG_POHMELFS		at l/drivers/staging/pohmelfs/lock:0:0
	pin_inotify_watch: (*struct inotify_watch) => signed int		if CONFIG_STAGING & !CONFIG_INOTIFY & CONFIG_POHMELFS		at l/drivers/staging/pohmelfs/net:0:0
 * unpin_inotify_watch when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_INOTIFY & !CONFIG_POHMELFS | CONFIG_STAGING & CONFIG_INOTIFY
	unpin_inotify_watch: (*struct inotify_watch) => void		if CONFIG_STAGING & !CONFIG_INOTIFY & CONFIG_POHMELFS		at l/drivers/staging/pohmelfs/lock:0:0
	unpin_inotify_watch: (*struct inotify_watch) => void		if CONFIG_STAGING & !CONFIG_INOTIFY & CONFIG_POHMELFS		at l/drivers/staging/pohmelfs/net:0:0
total composition time: 327
** processing drivers/staging/rtl8192su **
parsing12 files
composing
 * ieee80211_is_valid_mode when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_RTL8192SU
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192SU		at l/drivers/staging/rtl8192su/r8180_93cx6:0:0
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192SU		at l/drivers/staging/rtl8192su/r8192S_Efuse:0:0
** processing drivers/staging/rtl8192e **
parsing8 files
composing
 * ieee80211_is_valid_mode when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_RTL8192E
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192E		at l/drivers/staging/rtl8192e/r8180_93cx6:0:0
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192E		at l/drivers/staging/rtl8192e/r8190_rtl8256:0:0
** processing drivers/staging/rtl8187se/ieee80211 **
parsing11 files
composing
 * ieee80211_is_valid_mode when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_R8187SE
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_R8187SE		at l/drivers/staging/rtl8187se/ieee80211/dot11d:0:0
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_R8187SE		at l/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt:0:0
** processing drivers/staging/rtl8192u **
parsing9 files
composing
 * ieee80211_is_valid_mode when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_RTL8192U
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192U		at l/drivers/staging/rtl8192u/r8180_93cx6:0:0
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_RTL8192U		at l/drivers/staging/rtl8192u/r8190_rtl8256:0:0
** processing drivers/staging/rtl8187se **
parsing6 files
composing
 * ieee80211_is_valid_mode when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_R8187SE
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_R8187SE		at l/drivers/staging/rtl8187se/r8180_core:0:0
	ieee80211_is_valid_mode: (*struct ieee80211_device, signed int) => signed int		if CONFIG_STAGING & CONFIG_R8187SE		at l/drivers/staging/rtl8187se/r8180_dm:0:0

not actual problems:

mismatching types, not a problem in practice

** processing drivers/video/sis **
parsing5 files
composing
 * SiS_SetCH70xxANDOR when !CONFIG_FB_SIS
	SiS_SetCH70xxANDOR: (*struct SiS_Private, unsigned short, unsigned char, unsigned short) => void		if CONFIG_FB_SIS		at l/drivers/video/sis/init301:0:0
	SiS_SetCH70xxANDOR: (*struct SiS_Private, unsigned short, unsigned char, unsigned char) => void		if CONFIG_FB_SIS		at l/drivers/video/sis/sis_main:0:0

looks like incompatible types, but actually they should be considered compatable, void parameter should be filtered (need to normalize signatures)

** processing drivers/usb/host **
parsing20 files
composing
 * xhci_register_pci when !CONFIG_PCI | CONFIG_PCI & !CONFIG_USB_FHCI_HCD & !CONFIG_USB_XHCI_HCD | CONFIG_PCI & CONFIG_USB_FHCI_HCD
	xhci_register_pci: (void) => signed int		if CONFIG_PCI & !CONFIG_USB_FHCI_HCD & CONFIG_USB_XHCI_HCD		at l/drivers/usb/host/xhci-hcd:0:0
	xhci_register_pci: () => signed int		if !CONFIG_PCI & CONFIG_USB & !CONFIG_USB_FHCI_HCD & CONFIG_USB_XHCI_HCD | CONFIG_PCI & !CONFIG_USB_FHCI_HCD & CONFIG_USB_XHCI_HCD		at l/drivers/usb/host/xhci-pci:0:0

need to normalize signatures, are actually equivalent:

** processing drivers/isdn/capi **
parsing7 files
composing
 * capi20_get_manufacturer when !CONFIG_ISDN | CONFIG_ISDN & !CONFIG_ISDN_CAPI | CONFIG_ISDN & CONFIG_ISDN_CAPI & !CONFIG_ISDN_CAPI_CAPI20 & !CONFIG_ISDN_CAPI_CAPIDRV
	capi20_get_manufacturer: (unsigned int, unsigned char[]) => unsigned short		if CONFIG_ISDN & CONFIG_ISDN_CAPI & !CONFIG_ISDN_CAPI_CAPI20 & CONFIG_ISDN_CAPI_CAPIDRV | CONFIG_ISDN & CONFIG_ISDN_CAPI & CONFIG_ISDN_CAPI_CAPI20		at l/drivers/isdn/capi/capi:0:0, l/drivers/isdn/capi/capidrv:0:0
	capi20_get_manufacturer: (unsigned int, *unsigned char) => unsigned short		if CONFIG_ISDN & CONFIG_ISDN_CAPI		at l/drivers/isdn/capi/kcapi:0:0
 * capi20_get_serial when !CONFIG_ISDN | CONFIG_ISDN & !CONFIG_ISDN_CAPI | CONFIG_ISDN & CONFIG_ISDN_CAPI & !CONFIG_ISDN_CAPI_CAPI20
	capi20_get_serial: (unsigned int, unsigned char[]) => unsigned short		if CONFIG_ISDN & CONFIG_ISDN_CAPI & CONFIG_ISDN_CAPI_CAPI20		at l/drivers/isdn/capi/capi:0:0
	capi20_get_serial: (unsigned int, *unsigned char) => unsigned short		if CONFIG_ISDN & CONFIG_ISDN_CAPI		at l/drivers/isdn/capi/kcapi:0:0
total composition time: 282

feature model extraction problem (CONFIG_I2C_SI470X and CONFIG_USB_SI470X may not be both selected; CONFIG_I2C_SI470X_MODULE and CONFIG_USB_SI470X_MODULE may though) :

** processing drivers/media/radio/si470x **
parsing3 files
composing
 * si470x_get_register when !CONFIG_VIDEO_DEV | CONFIG_VIDEO_DEV & !CONFIG_RADIO_SI470X | CONFIG_VIDEO_DEV & CONFIG_RADIO_SI470X & !CONFIG_USB_SI470X | CONFIG_VIDEO_DEV & CONFIG_RADIO_SI470X & CONFIG_USB_SI470X & !CONFIG_I2C_SI470X
	si470x_get_register: (*struct si470x_device, signed int) => signed int		if CONFIG_VIDEO_DEV & CONFIG_RADIO_SI470X & CONFIG_I2C_SI470X		at l/drivers/media/radio/si470x/radio-si470x-i2c:0:0
	si470x_get_register: (*struct si470x_device, signed int) => signed int		if CONFIG_VIDEO_DEV & CONFIG_RADIO_SI470X & CONFIG_USB_SI470X		at l/drivers/media/radio/si470x/radio-si470x-usb:0:0

feature model extraction problem (?): CONFIG_COMEDI can only be selected as module

** processing drivers/staging/comedi/drivers **
parsing119 files
composing
 * v_EepromCs76Read when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_COMEDI | CONFIG_STAGING & CONFIG_COMEDI & !CONFIG_COMEDI_PCI_DRIVERS
	v_EepromCs76Read: (unsigned int, unsigned short, *unsigned short) => void		if CONFIG_STAGING & CONFIG_COMEDI & CONFIG_COMEDI_PCI_DRIVERS		at l/drivers/staging/comedi/drivers/addi_apci_1032:0:0
	v_EepromCs76Read: (unsigned int, unsigned short, *unsigned short) => void		if CONFIG_STAGING & CONFIG_COMEDI & CONFIG_COMEDI_PCI_DRIVERS		at l/drivers/staging/comedi/drivers/addi_apci_1500:0:0

signatures are actually compatible enough (need to normalize?)

** processing drivers/isdn/hardware/eicon **
parsing29 files
composing
 * DIVA_DIDD_Read when !CONFIG_ISDN | CONFIG_ISDN & !CONFIG_CAPI_EICON | CONFIG_ISDN & CONFIG_CAPI_EICON & !CONFIG_ISDN_DIVAS_DIVACAPI | CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI & !CONFIG_ISDN_DIVAS
	DIVA_DIDD_Read: (*struct {Map()}, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI		at l/drivers/isdn/hardware/eicon/capifunc:0:0
	DIVA_DIDD_Read: (*void, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS		at l/drivers/isdn/hardware/eicon/dadapter:0:0
 * DIVA_DIDD_Read when !CONFIG_ISDN | CONFIG_ISDN & !CONFIG_CAPI_EICON | CONFIG_ISDN & CONFIG_CAPI_EICON & !CONFIG_ISDN_DIVAS_DIVACAPI | CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI & !CONFIG_ISDN_DIVAS
	DIVA_DIDD_Read: (*struct {Map()}, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI		at l/drivers/isdn/hardware/eicon/capifunc:0:0
	DIVA_DIDD_Read: (*void, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS		at l/drivers/isdn/hardware/eicon/diva_didd:0:0, l/drivers/isdn/hardware/eicon/divasfunc:0:0
 * DIVA_DIDD_Read when !CONFIG_ISDN | CONFIG_ISDN & !CONFIG_CAPI_EICON | CONFIG_ISDN & CONFIG_CAPI_EICON & !CONFIG_ISDN_DIVAS_DIVACAPI | CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI & !CONFIG_ISDN_DIVAS_MAINT & !CONFIG_ISDN_DIVAS_USERIDI
	DIVA_DIDD_Read: (*struct {Map()}, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_DIVACAPI		at l/drivers/isdn/hardware/eicon/capifunc:0:0
	DIVA_DIDD_Read: (*void, signed int) => void		if CONFIG_ISDN & CONFIG_CAPI_EICON & !CONFIG_ISDN_DIVAS_MAINT & CONFIG_ISDN_DIVAS_USERIDI | CONFIG_ISDN & CONFIG_CAPI_EICON & CONFIG_ISDN_DIVAS_MAINT		at l/drivers/isdn/hardware/eicon/idifunc:0:0, l/drivers/isdn/hardware/eicon/mntfunc:0:0
total composition time: 505

parameter inferred as method (BUG in TypeChef):

** processing mm **
parsing61 files
composing
 * end_io when !CONFIG_X86_32 & !CONFIG_BLOCK | !CONFIG_X86_32 & CONFIG_BLOCK & !CONFIG_SWAP | CONFIG_X86_32
	end_io: (*struct bio, signed int) => void		if CONFIG_BLOCK & CONFIG_SWAP		at l/mm/page_io:0:0
	end_io: (*struct kiocb, signed long long, signed long, *void) => void		if !CONFIG_X86_32 & CONFIG_BLOCK		at l/mm/readahead:0:0, l/mm/shmem:0:0
 * end_io when !CONFIG_X86_32 | CONFIG_X86_32 & !CONFIG_BLOCK | CONFIG_X86_32 & CONFIG_BLOCK & !CONFIG_SWAP
	end_io: (*struct bio, signed int) => void		if CONFIG_BLOCK & CONFIG_SWAP		at l/mm/page_io:0:0
	end_io: (*struct kiocb, signed long long, signed int, *void) => void		if CONFIG_X86_32 & CONFIG_BLOCK		at l/mm/readahead:0:0, l/mm/shmem:0:0
total composition time: 940

weak export, not implemented yet ( BUG in TypeChef, see bug ckaestne/TypeChef#17):

** processing arch/x86/kernel **
parsing76 files
composing
 * mach_reboot_fixups when !CONFIG_X86_REBOOTFIXUPS
	mach_reboot_fixups: (void) => void		if True		at l/arch/x86/kernel/reboot:0:0
	mach_reboot_fixups: (void) => void		if CONFIG_X86_REBOOTFIXUPS		at l/arch/x86/kernel/reboot_fixups_32:0:0
total composition time: 328

there is first a static prototype declaration and subsequently a nonstatic function definition. apparently the static from the prototype has an effect on the actual function, so the function is not exported. (TypeChef bug)

** processing drivers/mtd/devices **
parsing13 files
composing
 * doc_erase when !CONFIG_MTD | CONFIG_MTD & !CONFIG_MTD_DOC2001 | CONFIG_MTD & CONFIG_MTD_DOC2001 & !CONFIG_MTD_DOC2001PLUS
	doc_erase: (*struct mtd_info, *struct erase_info) => signed int		if CONFIG_MTD & CONFIG_MTD_DOC2001		at l/drivers/mtd/devices/doc2001:0:0
	doc_erase: (*struct mtd_info, *struct erase_info) => signed int		if CONFIG_MTD & CONFIG_MTD_DOC2001PLUS		at l/drivers/mtd/devices/doc2001plus:0:0
total composition time: 199

can only be selected as modules, thus it's a feature-model-extraction problem

** processing drivers/staging/hv **
parsing16 files
composing
 * StorVscInitialize when !CONFIG_STAGING | CONFIG_STAGING & !CONFIG_HYPERV | CONFIG_STAGING & CONFIG_HYPERV & !CONFIG_HYPERV_BLOCK | CONFIG_STAGING & CONFIG_HYPERV & CONFIG_HYPERV_BLOCK & !CONFIG_HYPERV_STORAGE
	StorVscInitialize: (*struct hv_driver) => signed int		if CONFIG_STAGING & CONFIG_HYPERV & CONFIG_HYPERV_BLOCK		at l/drivers/staging/hv/BlkVsc:0:0
	StorVscInitialize: (*struct hv_driver) => signed int		if CONFIG_STAGING & CONFIG_HYPERV & CONFIG_HYPERV_STORAGE		at l/drivers/staging/hv/StorVsc:0:0
total composition time: 180

confirmed feature model extraction problem

** processing drivers/usb/gadget **
parsing19 files
composing
 * usb_find_endpoint when !CONFIG_USB_GADGET | CONFIG_USB_GADGET & !CONFIG_USB_AUDIO | CONFIG_USB_GADGET & CONFIG_USB_AUDIO & !CONFIG_USB_CDC_COMPOSITE
	usb_find_endpoint: (**struct usb_descriptor_header, **struct usb_descriptor_header, *struct usb_endpoint_descriptor) => *struct usb_endpoint_descriptor		if CONFIG_USB_GADGET & CONFIG_USB_AUDIO		at l/drivers/usb/gadget/audio:0:0
	usb_find_endpoint: (**struct usb_descriptor_header, **struct usb_descriptor_header, *struct usb_endpoint_descriptor) => *struct usb_endpoint_descriptor		if CONFIG_USB_GADGET & CONFIG_USB_CDC_COMPOSITE		at l/drivers/usb/gadget/cdc2:0:0

function type normalization again

** processing arch/x86/xen **
parsing11 files
composing
 * xen_init_irq_ops when !CONFIG_XEN
	xen_init_irq_ops: (void) => void		if CONFIG_XEN		at l/arch/x86/xen/enlighten:0:0
	xen_init_irq_ops: () => void		if CONFIG_XEN		at l/arch/x86/xen/irq:0:0
total composition time: 213