Changeset 1586
- Timestamp:
- 05/16/10 21:34:48 (3 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 3 edited
-
configure.in (modified) (6 diffs)
-
lib/Makefile.am (modified) (4 diffs)
-
lib/bpf-jit (added)
-
lib/bpf-jit/bpf-jit.cc (added)
-
lib/bpf-jit/bpf-jit.h (added)
-
lib/bpf-jit/bpf-opcodes.c (added)
-
lib/trace.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/configure.in
r1545 r1586 55 55 if test "$GCC" = "yes"; then 56 56 CFLAGS="$CFLAGS -Wall -Wextra -Wmissing-prototypes -O2" 57 CXXFLAGS="$CXXFLAGS -Wall -Wextra -O2" 57 58 # We assume that gcc knows about -fvisibility and friends, as I can't see 58 59 # a good easy way of testing for it here. … … 60 61 LIBCFLAGS="$LIBCFLAGS -DLT_BUILDING_DLL=1" 61 62 LIBCFLAGS="$LIBCFLAGS -fvisibility=hidden" 63 LIBCXXFLAGS="$CXXFLAGS" 64 LIBCXXFLAGS="$CXXFLAGS -DLT_BUILDING_DLL=1" 65 LIBCXXFLAGS="$CXXFLAGS -fvisibility=hidden" 62 66 fi 63 67 … … 277 281 AC_SEARCH_LIBS(mvprintw, ncurses, [], [ AC_MSG_ERROR([NCurses library not available]) ]) 278 282 283 AC_ARG_WITH([llvm], 284 [AC_HELP_STRING([--with-llvm], 285 [support Just In Time compiler])], 286 use_llvm="yes", 287 use_llvm="check") 288 289 AC_PATH_PROG(llvm_config, llvm-config) 290 291 if (test "$use_llvm" != "no"); then 292 AC_PATH_PROG(LLVM_CONFIG, llvm-config, no) 293 if test "$LLVM_CONFIG" = "no" ; then 294 AC_MSG_NOTICE([Unable to find llvm-config. JIT support disabled.]) 295 JIT=no 296 else 297 LIBCXXFLAGS="`$LLVM_CONFIG --cxxflags` $CXXFLAGS" 298 ADD_LIBS="$ADD_LIBS `$LLVM_CONFIG --libs all`"; 299 LDFLAGS="`$LLVM_CONFIG --ldflags` $LDFLAGS"; 300 JIT=yes 301 AC_DEFINE(HAVE_LLVM, 1, [Set to 1 if you have LLVM installed]) 302 fi 303 fi 304 305 279 306 AM_CONDITIONAL([HAVE_BPF_CAPTURE], [test "$ac_cv_have_decl_BIOCSETIF" = yes ]) 280 307 AM_CONDITIONAL([HAVE_DAG], [test "$libtrace_dag" = true]) … … 287 314 AM_CONDITIONAL([HAVE_NETPACKET_PACKET_H], [test "$libtrace_netpacket_packet_h" = true]) 288 315 AM_CONDITIONAL([HAVE_LIBGDC], [test "$ac_cv_header_gdc_h" = yes]) 316 AM_CONDITIONAL([HAVE_LLVM], [test "x$LLVM_CONFIG" != "xno" ]) 289 317 290 318 # Check for miscellaneous programs … … 305 333 AC_SUBST([HAVE_BPF_CAPTURE]) 306 334 AC_SUBST([HAVE_LIBGDC]) 335 AC_SUBST([HAVE_LLVM]) 307 336 AC_SUBST([LIBCFLAGS]) 337 AC_SUBST([LIBCXXFLAGS]) 308 338 dnl and finally, output our Makefiles 309 339 AC_OUTPUT … … 334 364 AC_MSG_NOTICE([Compiled with DAG live capture support: No]) 335 365 fi 366 reportopt "Compiled with LLVM BPF JIT support" $JIT 336 367 reportopt "Building man pages/documentation" $libtrace_doxygen 337 368 -
trunk/lib/Makefile.am
r1545 r1586 3 3 4 4 AM_CFLAGS=@LIBCFLAGS@ 5 AM_CXXFLAGS=@LIBCXXFLAGS@ 5 6 6 7 extra_DIST = format_template.c … … 46 47 EXTRA_DIST=format_dag24.c format_dag25.c 47 48 49 if HAVE_LLVM 50 BPFJITSOURCE=bpf-jit/bpf-jit.cc 51 else 52 BPFJITSOURCE= 53 endif 54 55 48 56 libtrace_la_SOURCES = trace.c common.h \ 49 57 format_erf.c format_pcap.c format_legacy.c \ … … 56 64 protocols_transport.c protocols.h \ 57 65 $(DAGSOURCE) format_erf.h \ 66 $(BPFJITSOURCE) \ 58 67 $(LIBTRACEIO_ZLIB) $(LIBTRACEIO_BZLIB) $(LIBTRACEIO_LZO) \ 59 68 ior-peek.c ior-stdio.c ior-thread.c \ … … 74 83 dagopts.c: 75 84 cp @DAG_TOOLS_DIR@/dagopts.c . 85 86 if HAVE_LLVM 87 # Rules to build the llvm .cc file from a C description of each opcode. 88 bpf-jit/bpf-opcodes.llvm.bc: bpf-jit/bpf-opcodes.c 89 `$(LLVM_CONFIG) --bindir`/llvm-gcc -std=c99 -c -O0 -emit-llvm $< -o $@ 90 91 bpf-jit/bpf-opcodes.llvm.cc: bpf-jit/bpf-opcodes.llvm.bc 92 `$(LLVM_CONFIG) --bindir`/llc -f -march=cpp -cppgen=module $< -o $@ 93 94 bpf-jit/bpf-jit.cc: bpf-jit/bpf-opcodes.llvm.cc 95 96 EXTRA_DIST+=bpf-jit/bpf-opcodes.c 97 BUILT_SOURCES=bpf-jit/bpf-opcodes.llvm.cc 98 endif 99 CLEANFILES=bpf-jit/bpf-opcodes.llvm.cc bpf-jit/bpf-opcodes.llvm.bc -
trunk/lib/trace.c
r1528 r1586 1103 1103 filter->filter.bf_len = bf_len; 1104 1104 filter->filterstring = NULL; 1105 filter->jitfilter = NULL; 1105 1106 /* "flag" indicates that the filter member is valid */ 1106 1107 filter->flag = 1; … … 1119 1120 malloc(sizeof(libtrace_filter_t)); 1120 1121 filter->filterstring = strdup(filterstring); 1122 filter->jitfilter = NULL; 1121 1123 filter->flag = 0; 1122 1124 return filter; … … 1133 1135 if (filter->flag) 1134 1136 pcap_freecode(&filter->filter); 1137 #ifdef HAVE_LLVM 1138 if (filter->jitfilter) 1139 destroy_program(filter->jitfilter); 1140 #endif 1135 1141 free(filter); 1136 1142 #else … … 1257 1263 } 1258 1264 1265 /* If we're jitting, we may need to JIT the BPF code now too */ 1266 #if HAVE_LLVM 1267 if (!filter->jitfilter) { 1268 filter->jitfilter = compile_program(filter->filter.bf_insns, filter->filter.bf_len); 1269 } 1270 #endif 1271 1259 1272 assert(filter->flag); 1273 /* Now execute the filter */ 1274 #if HAVE_LLVM 1275 ret=filter->jitfilter->bpf_run((unsigned char *)linkptr, clen); 1276 #else 1260 1277 ret=bpf_filter(filter->filter.bf_insns,(u_char*)linkptr,(unsigned int)clen,(unsigned int)clen); 1278 #endif 1261 1279 1262 1280 /* If we copied the packet earlier, make sure that we free it */
Note: See TracChangeset
for help on using the changeset viewer.
