On 18.12.2008 19:33, Myles Watson wrote:
On Thu, Dec 18, 2008 at 11:08 AM, Marc Jones marcj303@gmail.com wrote:
On Thu, Dec 18, 2008 at 10:22 AM, Myles Watson mylesgw@gmail.com wrote:
On Thu, Dec 18, 2008 at 7:52 AM, Jordan Crouse <jordan@cosmicpenguin.net
wrote:
Myles Watson wrote:
On Thu, Dec 18, 2008 at 3:18 AM, Carl-Daniel Hailfinger < c-d.hailfinger.devel.2006@gmx.net> wrote:
Bao, Zheng found a bug which killed SATA booting on my board.
This happened because we do not error out on implicit function declarations. The linker has no way of checking whether the implicitly assumed function signature is identical to the real signature, so mismatches can occur and these mismatches are practically impossible to debug because the code looks completely correct.
Adding -Werror-implicit-function-declaration to our CFLAGS would solve this problem nicely, but a lot of files in the tree need to be fixed.
I think this is a great idea. Isn't the correct order to fix all the warnings, then make it an error?
Yeah - the unfortunate thing about changes like this is that you end up being responsible for fixing the errors.. :)
Carl-Daniel - if you post a list of offending files, we'll all help clear them up. Dumping the log through grep "implicit declaration of function" should suffice.
I'm attaching a patch which I thought was trivial, but breaks things all over the place. I'm not sure how this will need to be done. It looks like a problem with romcc vs. CAR.
Try this patch. It passes abuild.
Regards, Carl-Daniel
Fix implicit declarations of pci_read_config8 and pci_write_config8 in the following files: src/mainboard/intel/jarrell/reset.c src/mainboard/supermicro/x6dai_g/reset.c src/mainboard/supermicro/x6dhe_g2/reset.c src/mainboard/supermicro/x6dhe_g/reset.c src/mainboard/supermicro/x6dhr_ig2/reset.c src/mainboard/supermicro/x6dhr_ig/reset.c
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dai_g/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dai_g/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dai_g/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0 Index: LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0 Index: LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g2/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g2/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhe_g2/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0 Index: LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0 Index: LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig2/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig2/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/supermicro/x6dhr_ig2/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0 Index: LinuxBIOSv2-implicit_declarations/src/mainboard/intel/jarrell/reset.c =================================================================== --- LinuxBIOSv2-implicit_declarations/src/mainboard/intel/jarrell/reset.c (Revision 3829) +++ LinuxBIOSv2-implicit_declarations/src/mainboard/intel/jarrell/reset.c (Arbeitskopie) @@ -3,6 +3,8 @@ #include <device/pci_ids.h> #ifndef __ROMCC__ #include <device/device.h> +#include <device/pci.h> +#include <device/pci_ops.h> #define PCI_ID(VENDOR_ID, DEVICE_ID) \ ((((DEVICE_ID) & 0xFFFF) << 16) | ((VENDOR_ID) & 0xFFFF)) #define PCI_DEV_INVALID 0