Subject: [OT?] is there something strange about __builtin_ffs these days?

From: "Robert P. J. Day" <[email-masked]>
Date: Mon, 17 Dec 2007 16:08:49 -0500 (EST)

i'm hoping i'm not abusing this list overly by asking for some help
with debugging an OpenWRT issue.  the trac ticket is here:

https://dev.openwrt.org/ticket/2735

and involves cross-compiling an image for the MIPS-based linksys
WRT54GL router.  i've verified that this error still exists in the
latest svn update of openwrt and, in a nutshell, it involves the claim
that "__builtin_ffs" is undefined:

...
 CC [M]  /home/openwrt/builds/trunk_brcm47xx/build_dir/linux-brcm47xx/spca5xx-le/spca_core.o
/home/openwrt/builds/trunk_brcm47xx/build_dir/linux-brcm47xx/spca5xx-le/spca_core.c:538:5:
  warning: "__builtin_ffs" is not defined
/home/openwrt/builds/trunk_brcm47xx/build_dir/linux-brcm47xx/spca5xx-le/spca_core.c:538:5:
  error: missing binary operator before token "("
...

  that line in the source file is simply:

   #if PUD_SHIFT

i have no idea what the problem is here and, as you can see from the
trac ticket, this seems to have started because of the kernel version
upgrade from 2.6.22 to 2.6.23.  but what about that would affect the
usage of __builtin_ffs?

  does anyone have an idea why something this basic might be going
wrong now?  any suggestions appreciated.  thanks.

rday
--
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
========================================================================

---

From: Thiemo Seufer <[email-masked]>
Date: Mon, 17 Dec 2007 21:45:03 +0000

> wrong now?  any suggestions appreciated.  thanks.

The compiler should never attempt to use __builtin_ffs by itself, because
the kernel makefile adds -ffreestanding to CFLAGS. So either your compiler
is broken, or the makefile of your kernel tree is incorrect, or somewhere
in your kernel tree there's a explicit call to __builtin_ffs (which is
also incorrect, as the compiler may invoke library functions to implement
it.)

Thiemo