Bug 18942 - change to include/linux/netdevice.h prevents compilation for ARM architecture with AEABI enabled
Summary: change to include/linux/netdevice.h prevents compilation for ARM architecture...
Status: RESOLVED INVALID
Alias: None
Product: Platform Specific/Hardware
Classification: Unclassified
Component: ARM (show other bugs)
Hardware: All Linux
: P1 blocking
Assignee: linux-arm-kernel@lists.arm.linux.org.uk
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-22 08:39 UTC by Ilya A. Volynets-Evenbakh
Modified: 2012-08-13 16:40 UTC (History)
1 user (show)

See Also:
Kernel Version: 2.6.35.4
Subsystem:
Regression: No
Bisected commit-id:


Attachments

Description Ilya A. Volynets-Evenbakh 2010-09-22 08:39:02 UTC
I am trying to compile the latest kernel, and am running into the following error:
In file included from include/linux/icmpv6.h:173,
                 from include/linux/ipv6.h:220,
                 from include/net/ipv6.h:16,
                 from include/linux/sunrpc/clnt.h:25,
                 from include/linux/nfs_fs.h:48,
                 from init/do_mounts.c:20:
include/linux/netdevice.h:1005: error: width of 'reg_state' exceeds its type
include/linux/netdevice.h:1010: error: width of 'rtnl_link_state' exceeds its type


There was a change not too long ago, which converted reg_state to a bitfield, which apparently doesn't work when -mabi=aapcs.
I tested it with a gcc versions 4.2.0, 4.4.2, and 4.4.4 and it holds true for all of them.

Here is simple test case:
struct test {
        enum { NETREG_UNINITIALIZED=0,
        } reg_state:16;
};

int main(int argc, char** argv)
{
        struct test tt;
        tt.reg_state=NETREG_UNINITIALIZED;
        return 0;
}

Compiles without -mabi=aapcs option, fails with.
Comment 1 Andrew Morton 2010-09-22 09:02:15 UTC
(switched to email.  Please respond via emailed reply-to-all, not via the
bugzilla web interface).

On Wed, 22 Sep 2010 08:39:05 GMT bugzilla-daemon@bugzilla.kernel.org wrote:

> https://bugzilla.kernel.org/show_bug.cgi?id=18942
> 
>            Summary: change to include/linux/netdevice.h prevents
>                     compilation for ARM architecture with AEABI enabled
>            Product: Platform Specific/Hardware
>            Version: 2.5
>     Kernel Version: 2.6.35.4
>           Platform: All
>         OS/Version: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: blocking
>           Priority: P1
>          Component: ARM
>         AssignedTo: linux-arm-kernel@lists.arm.linux.org.uk
>         ReportedBy: ilya@total-knowledge.com
>         Regression: No
> 
> 
> I am trying to compile the latest kernel, and am running into the following
> error:
> In file included from include/linux/icmpv6.h:173,
>                  from include/linux/ipv6.h:220,
>                  from include/net/ipv6.h:16,
>                  from include/linux/sunrpc/clnt.h:25,
>                  from include/linux/nfs_fs.h:48,
>                  from init/do_mounts.c:20:
> include/linux/netdevice.h:1005: error: width of 'reg_state' exceeds its type
> include/linux/netdevice.h:1010: error: width of 'rtnl_link_state' exceeds its
> type
> 
> 
> There was a change not too long ago, which converted reg_state to a bitfield,
> which apparently doesn't work when -mabi=aapcs.
> I tested it with a gcc versions 4.2.0, 4.4.2, and 4.4.4 and it holds true for
> all of them.
> 
> Here is simple test case:
> struct test {
>         enum { NETREG_UNINITIALIZED=0,
>         } reg_state:16;
> };
> 
> int main(int argc, char** argv)
> {
>         struct test tt;
>         tt.reg_state=NETREG_UNINITIALIZED;
>         return 0;
> }
> 
> Compiles without -mabi=aapcs option, fails with.
> 

Bummer.  I guess that this abi requires that enums have `int' width for
some reason?

Does -mabi=aapcs actually get used, officially?  All I can see in
Linus's tree is

z:/usr/src/linux-2.6.36-rc5> grep -r aapcs .
./arch/arm/Makefile:CFLAGS_ABI  :=-mabi=aapcs-linux -mno-thumb-interwork
Comment 2 Ilya A. Volynets-Evenbakh 2010-09-22 09:32:44 UTC
Good question. Closer look at my tree revealed it was patched to replace aapcs-linux with aapcs, because old MontaVista compiler used originally
didn't support it. I'll drop that patch from my tree.

Note You need to log in before you can comment on or make changes to this bug.