Commit Graph

20 Commits

Author SHA1 Message Date
Luca Boccassi
82749180b2 libbpf: allow to use packaged version
Add a new CMake option, LIBBPF_EMBEDDED, to switch between the
embedded version and the system version (searched via pkg-config)
of libbpf. Set the embedded version as the default.

Signed-off-by: Luca Boccassi <bluca@debian.org>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2021-01-21 10:26:25 -03:00
Andrii Nakryiko
7290d08b4a libbpf: Update libbpf submodule reference to latest master
Pull in latest libbpf changes, containing split BTF APIs.

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Cc: kernel-team@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-11-11 08:43:44 -03:00
Andrii Nakryiko
c35b7fa52c libbpf: Update to latest libbpf version
Pull in BTF writer APIs.

Committer testing:

  $ rm -rf build
  $ mkdir build
  $ cd build
  $ cmake ..
  -- The C compiler identification is GNU 10.2.1
  -- Check for working C compiler: /usr/lib64/ccache/cc
  -- Check for working C compiler: /usr/lib64/ccache/cc - works
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Checking availability of DWARF and ELF development libraries
  -- Looking for dwfl_module_build_id in elf
  -- Looking for dwfl_module_build_id in elf - found
  -- Found dwarf.h header: /usr/include
  -- Found elfutils/libdw.h header: /usr/include
  -- Found libdw library: /usr/lib64/libdw.so
  -- Found libelf library: /usr/lib64/libelf.so
  -- Checking availability of DWARF and ELF development libraries - done
  -- Found ZLIB: /usr/lib64/libz.so (found version "1.2.11")
  -- Submodule update
  From https://github.com/libbpf/libbpf
   * [new branch]                        libbpf-0.1.1-xdp-bug-fix -> origin/libbpf-0.1.1-xdp-bug-fix
     583bddce6b93bafa..b6dd2f2b7df4d3bd  master     -> origin/master
   * [new tag]                           v0.1.1     -> v0.1.1
   * [new tag]                           v0.0.8     -> v0.0.8
   * [new tag]                           v0.0.9     -> v0.0.9
   * [new tag]                           v0.1.0     -> v0.1.0
  Submodule path 'lib/bpf': checked out 'ff797cc905d9c5fe9acab92d2da127342b20f80f'
  -- Submodule update - done
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT
  -- Performing Test HAVE_REALLOCARRAY_SUPPORT - Success
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /home/acme/git/pahole/build
  $
  $ cd ..
  $ ./btfdiff vmlinux
  $
  $ cat fullcircle
  #!/bin/bash
  # SPDX-License-Identifier: GPL-2.0-only
  # Copyright © 2019 Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
  # Use pfunct to produce compilable output from a object, then do a codiff -s
  # To see if the type information generated from source code generated
  # from type information in a file compiled from the original source code matches.

  if [ $# -eq 0 ] ; then
  	echo "Usage: fullcircle <filename_with_type_info>"
  	exit 1
  fi

  file=$1

  nr_cus=$(readelf -wi ${file} | grep DW_TAG_compile_unit | wc -l)
  if [ $nr_cus -gt 1 ]; then
  	exit 0
  fi

  c_output=$(mktemp /tmp/fullcircle.XXXXXX.c)
  o_output=$(mktemp /tmp/fullcircle.XXXXXX.o)
  pfunct_bin=${PFUNCT-"pfunct"}
  codiff_bin=${CODIFF-"codiff"}

  # See how your DW_AT_producer looks like and find the
  # right regexp to get after the GCC version string, this one
  # seems good enough for Red Hat/Fedora/CentOS that look like:
  #
  #   DW_AT_producer    : (indirect string, offset: 0x3583): GNU C89 8.2.1 20181215 (Red Hat 8.2.1-6) -mno-sse -mno-mmx
  #
  # So we need from -mno-sse onwards

  CFLAGS=$(readelf -wi $file | grep -w DW_AT_producer | sed -r      's/.*\)( -[[:alnum:]]+.*)+/\1/g')

  # Check if we managed to do the sed or if this is something like GNU AS
  [ "${CFLAGS/DW_AT_producer/}" != "${CFLAGS}" ] && exit

  ${pfunct_bin} --compile $file > $c_output
  gcc $CFLAGS -c -g $c_output -o $o_output
  ${codiff_bin} -q -s $file $o_output

  rm -f $c_output $o_output
  exit 0
  [acme@five pahole]$ cp ~/git/build/bpf-next-v5.9.0-rc8+/net/ipv4/tcp_ipv4.o  .
  [acme@five pahole]$ readelf -SW tcp_ipv4.o  | grep BTF
  [acme@five pahole]$ pahole -J tcp_ipv4.o
  [acme@five pahole]$ readelf -SW tcp_ipv4.o  | grep BTF
    [105] .BTF              PROGBITS        0000000000000000 0fcf68 03ff6e 00      0   0  1
  [acme@five pahole]$ ./fullcircle tcp_ipv4.o
  [acme@five pahole]$ pahole -F btf -C tcp_sock tcp_ipv4.o
  struct tcp_sock {
  	struct inet_connection_sock inet_conn;           /*     0  1376 */
  	/* --- cacheline 21 boundary (1344 bytes) was 32 bytes ago --- */
  	u16                        tcp_header_len;       /*  1376     2 */
  	u16                        gso_segs;             /*  1378     2 */
  	__be32                     pred_flags;           /*  1380     4 */
  	u64                        bytes_received;       /*  1384     8 */
  	u32                        segs_in;              /*  1392     4 */
  	u32                        data_segs_in;         /*  1396     4 */
  	u32                        rcv_nxt;              /*  1400     4 */
  	u32                        copied_seq;           /*  1404     4 */
  	/* --- cacheline 22 boundary (1408 bytes) --- */
  	u32                        rcv_wup;              /*  1408     4 */
  	u32                        snd_nxt;              /*  1412     4 */
  	u32                        segs_out;             /*  1416     4 */
  	u32                        data_segs_out;        /*  1420     4 */
  	u64                        bytes_sent;           /*  1424     8 */
  	u64                        bytes_acked;          /*  1432     8 */
  	u32                        dsack_dups;           /*  1440     4 */
  	u32                        snd_una;              /*  1444     4 */
  	u32                        snd_sml;              /*  1448     4 */
  	u32                        rcv_tstamp;           /*  1452     4 */
  	u32                        lsndtime;             /*  1456     4 */
  	u32                        last_oow_ack_time;    /*  1460     4 */
  	u32                        compressed_ack_rcv_nxt; /*  1464     4 */
  	u32                        tsoffset;             /*  1468     4 */
  	/* --- cacheline 23 boundary (1472 bytes) --- */
  	struct list_head           tsq_node;             /*  1472    16 */
  	struct list_head           tsorted_sent_queue;   /*  1488    16 */
  	u32                        snd_wl1;              /*  1504     4 */
  	u32                        snd_wnd;              /*  1508     4 */
  	u32                        max_window;           /*  1512     4 */
  	u32                        mss_cache;            /*  1516     4 */
  	u32                        window_clamp;         /*  1520     4 */
  	u32                        rcv_ssthresh;         /*  1524     4 */
  	struct tcp_rack            rack;                 /*  1528    24 */

  	/* XXX last struct has 2 bytes of padding */

  	/* --- cacheline 24 boundary (1536 bytes) was 16 bytes ago --- */
  	u16                        advmss;               /*  1552     2 */
  	u8                         compressed_ack;       /*  1554     1 */
  	u8                         dup_ack_counter:2;    /*  1555: 0  1 */
  	u8                         tlp_retrans:1;        /*  1555: 2  1 */
  	u8                         unused:5;             /*  1555: 3  1 */
  	u32                        chrono_start;         /*  1556     4 */
  	u32                        chrono_stat[3];       /*  1560    12 */
  	u8                         chrono_type:2;        /*  1572: 0  1 */
  	u8                         rate_app_limited:1;   /*  1572: 2  1 */
  	u8                         fastopen_connect:1;   /*  1572: 3  1 */
  	u8                         fastopen_no_cookie:1; /*  1572: 4  1 */
  	u8                         is_sack_reneg:1;      /*  1572: 5  1 */
  	u8                         fastopen_client_fail:2; /*  1572: 6  1 */
  	u8                         nonagle:4;            /*  1573: 0  1 */
  	u8                         thin_lto:1;           /*  1573: 4  1 */
  	u8                         recvmsg_inq:1;        /*  1573: 5  1 */
  	u8                         repair:1;             /*  1573: 6  1 */
  	u8                         frto:1;               /*  1573: 7  1 */
  	u8                         repair_queue;         /*  1574     1 */
  	u8                         save_syn:2;           /*  1575: 0  1 */
  	u8                         syn_data:1;           /*  1575: 2  1 */
  	u8                         syn_fastopen:1;       /*  1575: 3  1 */
  	u8                         syn_fastopen_exp:1;   /*  1575: 4  1 */
  	u8                         syn_fastopen_ch:1;    /*  1575: 5  1 */
  	u8                         syn_data_acked:1;     /*  1575: 6  1 */
  	u8                         is_cwnd_limited:1;    /*  1575: 7  1 */
  	u32                        tlp_high_seq;         /*  1576     4 */
  	u32                        tcp_tx_delay;         /*  1580     4 */
  	u64                        tcp_wstamp_ns;        /*  1584     8 */
  	u64                        tcp_clock_cache;      /*  1592     8 */
  	/* --- cacheline 25 boundary (1600 bytes) --- */
  	u64                        tcp_mstamp;           /*  1600     8 */
  	u32                        srtt_us;              /*  1608     4 */
  	u32                        mdev_us;              /*  1612     4 */
  	u32                        mdev_max_us;          /*  1616     4 */
  	u32                        rttvar_us;            /*  1620     4 */
  	u32                        rtt_seq;              /*  1624     4 */
  	struct minmax              rtt_min;              /*  1628    24 */
  	u32                        packets_out;          /*  1652     4 */
  	u32                        retrans_out;          /*  1656     4 */
  	u32                        max_packets_out;      /*  1660     4 */
  	/* --- cacheline 26 boundary (1664 bytes) --- */
  	u32                        max_packets_seq;      /*  1664     4 */
  	u16                        urg_data;             /*  1668     2 */
  	u8                         ecn_flags;            /*  1670     1 */
  	u8                         keepalive_probes;     /*  1671     1 */
  	u32                        reordering;           /*  1672     4 */
  	u32                        reord_seen;           /*  1676     4 */
  	u32                        snd_up;               /*  1680     4 */
  	struct tcp_options_received rx_opt;              /*  1684    24 */
  	u32                        snd_ssthresh;         /*  1708     4 */
  	u32                        snd_cwnd;             /*  1712     4 */
  	u32                        snd_cwnd_cnt;         /*  1716     4 */
  	u32                        snd_cwnd_clamp;       /*  1720     4 */
  	u32                        snd_cwnd_used;        /*  1724     4 */
  	/* --- cacheline 27 boundary (1728 bytes) --- */
  	u32                        snd_cwnd_stamp;       /*  1728     4 */
  	u32                        prior_cwnd;           /*  1732     4 */
  	u32                        prr_delivered;        /*  1736     4 */
  	u32                        prr_out;              /*  1740     4 */
  	u32                        delivered;            /*  1744     4 */
  	u32                        delivered_ce;         /*  1748     4 */
  	u32                        lost;                 /*  1752     4 */
  	u32                        app_limited;          /*  1756     4 */
  	u64                        first_tx_mstamp;      /*  1760     8 */
  	u64                        delivered_mstamp;     /*  1768     8 */
  	u32                        rate_delivered;       /*  1776     4 */
  	u32                        rate_interval_us;     /*  1780     4 */
  	u32                        rcv_wnd;              /*  1784     4 */
  	u32                        write_seq;            /*  1788     4 */
  	/* --- cacheline 28 boundary (1792 bytes) --- */
  	u32                        notsent_lowat;        /*  1792     4 */
  	u32                        pushed_seq;           /*  1796     4 */
  	u32                        lost_out;             /*  1800     4 */
  	u32                        sacked_out;           /*  1804     4 */
  	struct hrtimer             pacing_timer;         /*  1808    64 */

  	/* XXX last struct has 4 bytes of padding */

  	/* --- cacheline 29 boundary (1856 bytes) was 16 bytes ago --- */
  	struct hrtimer             compressed_ack_timer; /*  1872    64 */

  	/* XXX last struct has 4 bytes of padding */

  	/* --- cacheline 30 boundary (1920 bytes) was 16 bytes ago --- */
  	struct sk_buff *           lost_skb_hint;        /*  1936     8 */
  	struct sk_buff *           retransmit_skb_hint;  /*  1944     8 */
  	struct rb_root             out_of_order_queue;   /*  1952     8 */
  	struct sk_buff *           ooo_last_skb;         /*  1960     8 */
  	struct tcp_sack_block      duplicate_sack[1];    /*  1968     8 */
  	struct tcp_sack_block      selective_acks[4];    /*  1976    32 */
  	/* --- cacheline 31 boundary (1984 bytes) was 24 bytes ago --- */
  	struct tcp_sack_block      recv_sack_cache[4];   /*  2008    32 */
  	struct sk_buff *           highest_sack;         /*  2040     8 */
  	/* --- cacheline 32 boundary (2048 bytes) --- */
  	int                        lost_cnt_hint;        /*  2048     4 */
  	u32                        prior_ssthresh;       /*  2052     4 */
  	u32                        high_seq;             /*  2056     4 */
  	u32                        retrans_stamp;        /*  2060     4 */
  	u32                        undo_marker;          /*  2064     4 */
  	int                        undo_retrans;         /*  2068     4 */
  	u64                        bytes_retrans;        /*  2072     8 */
  	u32                        total_retrans;        /*  2080     4 */
  	u32                        urg_seq;              /*  2084     4 */
  	unsigned int               keepalive_time;       /*  2088     4 */
  	unsigned int               keepalive_intvl;      /*  2092     4 */
  	int                        linger2;              /*  2096     4 */
  	u8                         bpf_sock_ops_cb_flags; /*  2100     1 */

  	/* XXX 1 byte hole, try to pack */

  	u16                        timeout_rehash;       /*  2102     2 */
  	u32                        rcv_ooopack;          /*  2104     4 */
  	u32                        rcv_rtt_last_tsecr;   /*  2108     4 */
  	/* --- cacheline 33 boundary (2112 bytes) --- */
  	struct {
  		u32                rtt_us;               /*  2112     4 */
  		u32                seq;                  /*  2116     4 */
  		u64                time;                 /*  2120     8 */
  	} rcv_rtt_est;                                   /*  2112    16 */
  	struct {
  		u32                space;                /*  2128     4 */
  		u32                seq;                  /*  2132     4 */
  		u64                time;                 /*  2136     8 */
  	} rcvq_space;                                    /*  2128    16 */
  	struct {
  		u32                probe_seq_start;      /*  2144     4 */
  		u32                probe_seq_end;        /*  2148     4 */
  	} mtu_probe;                                     /*  2144     8 */
  	u32                        mtu_info;             /*  2152     4 */
  	bool                       is_mptcp;             /*  2156     1 */
  	bool                       syn_smc;              /*  2157     1 */

  	/* XXX 2 bytes hole, try to pack */

  	const struct tcp_sock_af_ops  * af_specific;     /*  2160     8 */
  	struct tcp_md5sig_info *   md5sig_info;          /*  2168     8 */
  	/* --- cacheline 34 boundary (2176 bytes) --- */
  	struct tcp_fastopen_request * fastopen_req;      /*  2176     8 */
  	struct request_sock *      fastopen_rsk;         /*  2184     8 */
  	struct saved_syn *         saved_syn;            /*  2192     8 */

  	/* size: 2200, cachelines: 35, members: 140 */
  	/* sum members: 2193, holes: 2, sum holes: 3 */
  	/* sum bitfield members: 32 bits (4 bytes) */
  	/* paddings: 3, sum paddings: 10 */
  	/* last cacheline: 24 bytes */
  };
  $ pahole -F btf -C tcp_sock tcp_ipv4.o  > tcp_sock.o.before
  $

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-10-08 14:36:51 -03:00
Arnaldo Carvalho de Melo
e8f43a4963 libbpf: Get latest libbpf
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2020-02-03 08:43:10 +01:00
Arnaldo Carvalho de Melo
95517e1d99 libbpf: Get latest libbpf
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-10-21 17:31:15 -03:00
Andrii Nakryiko
7005757fd5 libbpf: Sync in latest libbpf sources
Get latest changes and fixes for libbpf. Most importantly it pulls in
enum fwd resolution in btf_dedup().

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-03-29 15:53:13 -03:00
Andrii Nakryiko
3bd8da5202 libbpf: update reference to bring in btf_dedup fixes
Latest version of libbpf has btf_dedup() fixes preventing it from stucking
in a loop on allyesconfig kernels.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: andrii.nakryiko@gmail.com
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
[ Fixed up to get the right upstream commit, the originally submitted wasn't at the github repo ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-03-06 10:37:03 -03:00
Andrii Nakryiko
c234b6ca6e libbpf: Pull latest libbpf
Bring in latest changes from libbpf which allow to use btf__dedup() for
big binaries (e.g., linux kernel image).

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Cc: kernel-team@fb.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-02-18 09:49:38 -03:00
Andrii Nakryiko
21507cd3e9 pahole: add libbpf as submodule under lib/bpf
This change allows to use libbpf definitions and APIs from pahole.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Martin KaFai Lau <kafai@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2019-02-11 12:56:40 -03:00
Arnaldo Carvalho de Melo
b4d6de9b6f [LICENSE]: Add COPYING file and add missing license info on some files
Thanks to Otavio Salvador for bringing up this issue.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-12-17 14:15:42 -02:00
Arnaldo Carvalho de Melo
2c01420b51 [CMAKE]: Add linux.blacklist.cu to the install targets
Also updating the manifest and lib/Makefile to find it in
/usr/share/dwarves/runtime.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-12-06 17:43:20 -02:00
Arnaldo Carvalho de Melo
948addc787 [CTRACER]: Remove ctracer_jprobes.c, not used anymore
Now that ctracer generates systemtap scripts lets drop this file, its
misleading for casual readers.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-11-23 23:04:47 -02:00
Arnaldo Carvalho de Melo
390e2c64f4 [CTRACER]: Implement support for blacklisting CUs
In the Linux kernel, currently the only target, we can't probe the
functions in kernel/{kprobe,relay}.c.

When systemtap starts supporting uprobes, there may be other cases that
require blacklisting CUs.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-11-17 18:10:58 -02:00
Arnaldo Carvalho de Melo
78ca65d6e1 [CTRACER]: Move the class and mini_class definition to ctracer_classes.h
Now that we keep base type typedefs we need their definition in both the ostra
converter and the kernel collector, so moving them to a separate file and
including gets us the typedef definitions.

This paves the way for atomic_t and other types being also collected, once I
get some pluggable data dictionary definiton on how to collect non-base types
to avoid making all of ctracer kernel specific.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-11-13 11:46:45 -02:00
Arnaldo Carvalho de Melo
320607ff19 [CTRACER_LIB]: Check if the object is NULL in ctracer__method_hook
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-11-12 13:20:46 -02:00
Arnaldo Carvalho de Melo
5e9c2f5d86 [CTRACER]: Generate systemtap script + mini-struct collector kernel module
It generates these files:

http://oops.ghostprotocols.net:81/acme/dwarves/callgraphs/ctracer_methods.struct.sock.stp
http://oops.ghostprotocols.net:81/acme/dwarves/callgraphs/ctracer_collector.struct.sock.c

And from the collector + a relay source lib the ctracer.ko module that is
where we collect the traces + relayfs.

Run it and then with some manual collection + sorting on the relayfs files we
get this after running "make callgraph"

http://oops.ghostprotocols.net:81/acme/dwarves/callgraphs/sock.callgraph/

Further work is required to further integrate this with systemtap.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-11-11 16:39:03 -02:00
Arnaldo Carvalho de Melo
53f1dc9860 [RPM]: 1.0, finally!
Fixing problems found in the fedora packaging review. There are still problems,
but lets get what works out of the door so that it gets into a distro and we
can see what is more important to work on from now on.

The OLS paper will be included as soon as it is published by the OLS organizers.

Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-05-22 13:51:58 -03:00
Arnaldo Carvalho de Melo
262a5d24ea [LIB]: Introduce conf_fprintf
So that we can go on adding more config knobs without requiring adding new
parameters to lots of functions.

Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-04-28 16:13:35 -03:00
Arnaldo Carvalho de Melo
ce9d7e11fe [CTRACER]: Lots of improvements
1. We now use relayfs
2. ostra-cg is shipped and used in the Makefile
3. README.ctracer has all the details

I followed README.ctracer and the result, in my workstation, was this one:
http://oops.ghostprotocols.net:81/acme/dwarves/callgraphs/acme_eating_his_dog_food/6.html

I've started on the 6th page as it is more interesting, having tcp and netlink
callchains, don't be disappointed by some pages having just one level of
nesting, that is just the lack of containers and aliases (to follow tcp_sock,
skb->sk, etc) from the OSTRA days, but it's getting there! :-)

Ah, it is collecting all the base types in the specified struct by doing a
struct "view", i.e. trimming the struct to have just members that are
"reducible" to basic types (int, long, char, signed and unsigned), then
reorganizing it with the code introduced in pahole --reorganize to get it to
the best layout possible, reducing the size of the entry probe points trace
entries.

Updated rpms are available at the usual place:

http://oops.ghostprotocols.net:81/acme/dwarves/rpm/

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-02-02 15:15:27 -02:00
Arnaldo Carvalho de Melo
6bf2d2d770 [CTRACER]: Move the jprobes init code to lib/ctracer_jprobes.c
So that we don't have to do all the code emission inside ctracer.c, add
a Makefile too that uses the kernel rpm files shipped by your distro to
easily build a module for your workstation, see README.ctracer, that was
updated to describe the steps needed to have ctracer running in your
machine.

Now to polish the relay code.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-01-27 18:38:07 -02:00