Compilation error on 2.6.29-rc1
Wenji Huang
wenji.huang@oracle.com
Mon Jan 12 07:47:00 GMT 2009
Wenji Huang wrote:
> Hi,
>
> There will be compilation error executing stap script on 2.6.29-rc1.
> $ uname -r
> 2.6.29-rc1
> $ sudo stap -vve 'probe begin{print("hello")}'
> SystemTap translator/driver (version 0.8/0.131 git branch master, commit
> dc38c256 + changes)
> Copyright (C) 2005-2008 Red Hat, Inc. and others
> This is free software; see the source for copying conditions.
> Session arch: i686 release: 2.6.29-rc1
> Created temporary directory "/tmp/stapKwFGzV"
> Searched '/usr/local/share/systemtap/tapset/i686/*.stp', found 2
> Searched '/usr/local/share/systemtap/tapset/*.stp', found 45
> Pass 1: parsed user script and 47 library script(s) in
> 1040usr/130sys/1916real ms.
> Pass 2: analyzed script: 1 probe(s), 0 function(s), 0 embed(s), 0
> global(s) in 20usr/10sys/101real ms.
> Pass 3: translated to C into
> "/tmp/stapKwFGzV/stap_fde82e4fd6036a280f89069499515efe_182.c" in
> 10usr/10sys/40real ms.
> Running make -C "/lib/modules/2.6.29-rc1/build" M="/tmp/stapKwFGzV"
> modules >/dev/null
> In file included from
> /usr/local/share/systemtap/runtime/transport/transport.c:22,
> from /usr/local/share/systemtap/runtime/print.c:17,
> from /usr/local/share/systemtap/runtime/runtime.h:84,
> from
> /tmp/stapKwFGzV/stap_fde82e4fd6036a280f89069499515efe_182.c:41:
> /usr/local/share/systemtap/runtime/transport/symbols.c:124:33: macro
> "swap" passed 3 arguments, but takes just 2
> /usr/local/share/systemtap/runtime/transport/symbols.c:130:28: macro
> "swap" passed 3 arguments, but takes just 2
> /usr/local/share/systemtap/runtime/transport/symbols.c:137:33: macro
> "swap" passed 3 arguments, but takes just 2
> make[1]: ***
> [/tmp/stapKwFGzV/stap_fde82e4fd6036a280f89069499515efe_182.o] Error 1
> make: *** [_module_/tmp/stapKwFGzV] Error 2
> Pass 4: compiled C into "stap_fde82e4fd6036a280f89069499515efe_182.ko"
> in 6710usr/4200sys/16992real ms.
> Pass 4: compilation failed. Try again with another '--vp 0001' option.
> Running rm -rf /tmp/stapKwFGzV
>
> Seems it's caused by kernel change
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b53907c0100a353a7ac53bed260e735e5ccbbbcc
>
>
>
> Regards,
> Wenji
Need similar update on runtime code.
diff --git a/runtime/transport/symbols.c b/runtime/transport/symbols.c
index 6e3bef1..72f9ad8 100644
--- a/runtime/transport/symbols.c
+++ b/runtime/transport/symbols.c
@@ -92,8 +92,8 @@ static void generic_swap(void *a, void *b, int size)
* @base: pointer to data to sort
* @num: number of elements
* @size: size of each element
- * @cmp: pointer to comparison function
- * @swap: pointer to swap function or NULL
+ * @cmp_func: pointer to comparison function
+ * @swap_func: pointer to swap function or NULL
*
* This function does a heapsort on the given array. You may provide a
* swap function optimized to your element type.
@@ -104,37 +104,37 @@ static void generic_swap(void *a, void *b, int size)
* it less suitable for kernel use.
*/
void _stp_sort(void *_base, size_t num, size_t size,
- int (*cmp) (const void *, const void *), void (*swap)
(void *, void *, int size))
+ int (*cmp_func) (const void *, const void *), void
(*swap_func) (void *, void *, int size))
{
char *base = (char*) _base;
/* pre-scale counters for performance */
int i = (num / 2 - 1) * size, n = num * size, c, r;
- if (!swap)
- swap = (size == 4 ? u32_swap : generic_swap);
+ if (!swap_func)
+ swap_func = (size == 4 ? u32_swap : generic_swap);
/* heapify */
for (; i >= 0; i -= size) {
for (r = i; r * 2 + size < n; r = c) {
c = r * 2 + size;
- if (c < n - size && cmp(base + c, base + c +
size) < 0)
+ if (c < n - size && cmp_func(base + c, base + c
+ size) < 0)
c += size;
- if (cmp(base + r, base + c) >= 0)
+ if (cmp_func(base + r, base + c) >= 0)
break;
- swap(base + r, base + c, size);
+ swap_func(base + r, base + c, size);
}
}
/* sort */
for (i = n - size; i >= 0; i -= size) {
- swap(base, base + i, size);
+ swap_func(base, base + i, size);
for (r = 0; r * 2 + size < i; r = c) {
c = r * 2 + size;
- if (c < i - size && cmp(base + c, base + c +
size) < 0)
+ if (c < i - size && cmp_func(base + c, base + c
+ size) < 0)
c += size;
- if (cmp(base + r, base + c) >= 0)
+ if (cmp_func(base + r, base + c) >= 0)
break;
- swap(base + r, base + c, size);
+ swap_func(base + r, base + c, size);
}
}
}
It works well on 2.6.29/26.
Regards,
Wenji
More information about the Systemtap
mailing list