This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Compilation error on 2.6.29-rc1


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]