Problem including <asm/timex.h> (linux-kernel-headers 2.6.17)
Hi,
I am trying to prepare packages for the new MaxDB release 7.5.00.38 and
am having problems with a new piece of code in there.
The code in question looks like this and is known to work on Suse SLES9:
...
#ifdef LINUX
# include <sys/time.h>
typedef SAPDB_UInt8 u64;
# include <asm/param.h>
# include <asm/types.h>
# include <asm/timex.h>
# define HAS_GET_CYCLES
#endif
...
However when I try to compile this with linux-kernel-headers
(2.6.17.10-3) on my amd64 box I only get a host of error messages
starting like this:
RTESys_MicroTime.c fast
In file included from /usr/include/asm-x86_64/vsyscall.h:4,
from /usr/include/asm/vsyscall.h:8,
from /usr/include/asm-x86_64/timex.h:11,
from /usr/include/asm/timex.h:8,
from RTESys_MicroTime.c:76:
/usr/include/linux/seqlock.h:76: error: expected '=', ',', ';\
', 'asm' or '__attribute__' before 'unsigned'
/usr/include/linux/seqlock.h:91: error: expected '=', ',', ';\
', 'asm' or '__attribute__' before 'int'
In file included from /usr/include/linux/cpumask.h:86,
from /usr/include/asm-x86_64/processor.h:23,
from /usr/include/asm/processor.h:8,
from /usr/include/asm-x86_64/timex.h:14,
from /usr/include/asm/timex.h:8,
from RTESys_MicroTime.c:76:
/usr/include/linux/bitmap.h: In function 'bitmap_zero':
/usr/include/linux/bitmap.h:128: error: 'BITS_PER_LONG' undeclared \
(first use in this function)
/usr/include/linux/bitmap.h:128: error: (Each undeclared identifier is \
reported only once
... (I can provide the full output if required)
>From looking at the header files in /usr/include it seems that a lot of
types and macros used in those headers are only available to the kernel
(protected by #ifdef __KERNEL__) and to me it seems that <asm/timex.h>
cannot be successfully included by a user-space application.
I have no experience in this area, so I am just wondering: are
user-space applications not supposed to include any headers below
/usr/include/asm or is this a problem with the header files?
In any case, what MaxDB seems to try to do, is to use get_cycles() from
<asm/timex.h> for its internal timers. Is this a problem, and has it
been working for upstream just by accident, or is this ok and I should
try and get it to work on Debian?
Thanks for any help,
Martin.
Reply to: