lkml.org 
[lkml]   [2004]   [May]   [12]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateWed, 12 May 2004 10:59:24 -0700
FromStephen Hemminger <>
SubjectGCC nested functions?
I used GCC nested functions in the (not released) bridge sysfs interface for 2.6.6.
It seemed like a nice way to express the sysfs related interface without doing
lots of code copying (or worse lots of macros).

The code in question looks like:
static ssize_t store_bridge_parm(struct class_device *cd,
                                 const char *buf, size_t len,
                                 void (*store)(struct net_bridge *, unsigned long))
{
        struct net_bridge *br = to_bridge(cd);
        char *endp;
        unsigned long val;
        if (!capable(CAP_NET_ADMIN))
                return -EPERM;
        val = simple_strtoul(buf, &endp, 0);
        if (endp == buf)
                return -EINVAL;
        spin_lock_bh(&br->lock);
        store(br, val);
        spin_unlock_bh(&br->lock);
        return len;
}
...
static ssize_t store_forward_delay(struct class_device *cd, const char *buf,
                                   size_t len)
{
        void store(struct net_bridge *br, unsigned long val)
        {
                unsigned long delay = clock_t_to_jiffies(val);
                br->forward_delay = delay;
                if (br_is_root_bridge(br))
                        br->bridge_forward_delay = delay;
        }
        return store_bridge_parm(cd, buf, len, store);
}

This works fine for GCC 2.95 and 3.X for i386 and x86_64 architectures, but the ia64
(cross compiler) pukes with:

 In function `store_forward_delay':
: undefined reference to `__ia64_trampoline'

Redoing it as separate functions is easy enough, but the questions are:
	- Are gcc nested functions allowed in the kernel?  If not where should
	  this restriction be put in Documentation? CodingStyles?
	- Or is gcc on ia64 just too stupid? or do some more support routines
	  need to exist in arch/ia64?
	- Do other architectures (sparc, ppc) have similar problems?

Thanks.



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:03    [from the cache]
©2003-2008