Re: gcc confused about static inline. - route.c
From: Dave Jones <hidden>
Date: 2005-03-28 21:41:03
On Mon, Mar 28, 2005 at 01:23:14PM -0800, cliff white wrote: > > Building the gkernel bits, have this error: > > net/ipv4/route.c: In function `rt_remove_balanced_route': > net/ipv4/route.c:151: sorry, unimplemented: inlining failed in call to 'compare_keys': function body not available > net/ipv4/route.c:540: sorry, unimplemented: called from here > > route.c has this define at line 151 > : > static inline int compare_keys(struct flowi *fl1, struct flowi *fl2); > > function body is defined starting at line 861. > > We are using gcc 3.4.2 right now, is there a way to fix this? > thanks > cliffw Shuffling the order of the functions fixed this for me. Dave Signed-off-by: Dave Jones <redacted> diff -urNp --exclude-from=/home/davej/.exclude linux-10001/init/Makefile linux-10002/init/Makefile
--- linux-2.6.11/net/ipv4/route.c~ 2005-03-24 19:18:24.000000000 -0500
+++ linux-2.6.11/net/ipv4/route.c 2005-03-24 19:19:39.000000000 -0500@@ -520,6 +520,13 @@ static inline u32 rt_score(struct rtable return score; } +static inline int compare_keys(struct flowi *fl1, struct flowi *fl2) +{ + return memcmp(&fl1->nl_u.ip4_u, &fl2->nl_u.ip4_u, sizeof(fl1->nl_u.ip4_u)) == 0 && + fl1->oif == fl2->oif && + fl1->iif == fl2->iif; +} + #ifdef CONFIG_IP_ROUTE_MULTIPATH_CACHED static struct rtable **rt_remove_balanced_route(struct rtable **chain_head, struct rtable *expentry,
@@ -858,13 +865,6 @@ work_done: out: return 0; } -static inline int compare_keys(struct flowi *fl1, struct flowi *fl2) -{ - return memcmp(&fl1->nl_u.ip4_u, &fl2->nl_u.ip4_u, sizeof(fl1->nl_u.ip4_u)) == 0 && - fl1->oif == fl2->oif && - fl1->iif == fl2->iif; -} - static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp) { struct rtable *rth, **rthp;