>Gcc is now working on aarch64 but the kernel does not compile because of
>some idiomatic clang code that is not supported by gcc (at least gcc-6)
>
>To define constants, it uses:
>
>static const uintmax_t
>FOO = __BIT(9),
>BAR = FOO;
>
>While this is nice, specially for the debugger, it produces an error
>in gcc. While fixing these is easy, gcc also complains about using the
>constants as switch labels. Thus it is better to just nukem all and
>rewrite them as:
>
>#define FOO __BIT(9)
>#define BAR FOO
>
>Should I go ahead and do it, or there is a smarter solution?

Yes, please!
I tested with below script in my environment (clang), there seems to be no 
problem.


perl -i.old a64armreg_conv.pl aarch64/include/armreg.h

# a64armreg_conv.pl
while (<>) {
        if (m#^static\s+(const\s*)?uintmax_t\s*(//.*)?$#) {
        } elsif (m#^\s*(\w+)\s*=\s*(.*?)[,;]\s*//(.*)$#) {
                print "#define $1       $2      //$3\n";
        } elsif (m#^\s*(\w+)\s*=\s*(.*?)[,;]\s*$#) {
                print "#define $1       $2\n";
        } else {
                print;
        }
}

-- 
ryo shimizu

Reply via email to