Click and 2.4.9 kernel bug in compiling + fix
Brecht Vermeulen
brecht.vermeulen at rug.ac.be
Wed Feb 20 02:59:09 EST 2002
Hi,
I had problems compiling click with linux kernel 2.4.9.
It was in the configure script, at the
checking whether -fpermissive is required test
the answer was 'yes' because the program :
#line 3654 "configure"
#include "confdefs.h"
#define __KERNEL__
#define MODULE
#define _FEATURES_H
#define new xxx_new
#define this xxx_this
#define delete xxx_delete
#define class xxx_class
#define virtual xxx_virtual
#include <linux/skbuff.h>
int main() {
; return 0; }
didn't compile:
In file included from /usr/src/linux/include/linux/highmem.h:5,
from /usr/src/linux/include/linux/skbuff.h:27,
from configure:3999:
/usr/src/linux/include/asm/pgalloc.h: In function `void
flush_tlb_mm(mm_struct *)':
/usr/src/linux/include/asm/pgalloc.h:173: parse error before `::'
/usr/src/linux/include/asm/pgalloc.h: In function `void
flush_tlb_range(mm_struct *, long unsigned int, long unsigned int)':
/usr/src/linux/include/asm/pgalloc.h:187: parse error before `::'
and the next test, 'is -fpermissive allowed' did return 'no' , same
problem while compiling, so the warning was printed that the kernel
module couldn't be builded because the header files were not adapted to
C++.
I did some lookup work and arrived in include/asm/pgalloc.h
at
__flush_tlb();
which is defined in pgtable.h as
#define __flush_tlb()
\
do {
\
unsigned int tmpreg;
\
\
__asm__ __volatile__(
\
"movl %%cr3, %0; # flush TLB \n"
\
"movl %0, %%cr3; \n"
\
: "=r" (tmpreg)
\
:: "memory"); \
} while (0)
to solve the problem I have changed :: in : : based on a similar thing
in the 2.2.18 patch for rwlock.h. But I don't know what this means and
if this is the correct solution (and why hasn't nobody else had this
problem before ?
best regards,
Brecht
More information about the click
mailing list