404
404
] ,
405
405
[ enable_prof="0"]
406
406
)
407
- AC_ARG_ENABLE ( [ prof-libgcc] ,
408
- [ AS_HELP_STRING ( [ --disable-prof-libgcc] ,
409
- [ Do not use libgcc for backtracing] ) ] ,
410
- [ if test "x$enable_prof_libgcc" = "xno" ; then
411
- enable_prof_libgcc="0"
407
+ if test "x$enable_prof" = "x1" ; then
408
+ backtrace_method=""
412
409
else
413
- enable_prof_libgcc="1 "
410
+ backtrace_method="N/A "
414
411
fi
415
- ] ,
416
- [ enable_prof_libgcc="1"]
417
- )
412
+
418
413
AC_ARG_ENABLE ( [ prof-libunwind] ,
419
414
[ AS_HELP_STRING ( [ --enable-prof-libunwind] , [ Use libunwind for backtracing] ) ] ,
420
415
[ if test "x$enable_prof_libunwind" = "xno" ; then
@@ -438,39 +433,90 @@ else
438
433
fi ,
439
434
LUNWIND="-lunwind"
440
435
)
441
- if test "x$enable_prof" = "x1" ; then
442
- LIBS="$LIBS -lm"
443
- AC_DEFINE ( [ JEMALLOC_PROF] , [ ] )
444
- if test "x$enable_prof_libunwind" = "x1" ; then
445
- AC_CHECK_HEADERS ( [ libunwind.h] , , [ enable_prof_libunwind="0"] )
446
- if test "x$LUNWIND" = "x-lunwind" ; then
447
- AC_CHECK_LIB ( [ unwind] , [ backtrace] , [ LIBS="$LIBS $LUNWIND"] ,
448
- [ enable_prof_libunwind="0"] )
449
- else
450
- LIBS="$LIBS $LUNWIND"
451
- fi
452
- if test "x${enable_prof_libunwind}" = "x1" ; then
453
- AC_DEFINE ( [ JEMALLOC_PROF_LIBUNWIND] , [ ] )
454
- fi
436
+ if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then
437
+ AC_CHECK_HEADERS ( [ libunwind.h] , , [ enable_prof_libunwind="0"] )
438
+ if test "x$LUNWIND" = "x-lunwind" ; then
439
+ AC_CHECK_LIB ( [ unwind] , [ backtrace] , [ LIBS="$LIBS $LUNWIND"] ,
440
+ [ enable_prof_libunwind="0"] )
441
+ else
442
+ LIBS="$LIBS $LUNWIND"
443
+ fi
444
+ if test "x${enable_prof_libunwind}" = "x1" ; then
445
+ backtrace_method="libunwind"
446
+ AC_DEFINE ( [ JEMALLOC_PROF_LIBUNWIND] , [ ] )
455
447
fi
456
448
fi
457
- AC_SUBST ( [ enable_prof] )
458
449
459
- dnl If libunwind isn't enabled, try to use libgcc rather than gcc intrinsics
460
- dnl for backtracing.
461
- if test "x$enable_prof" = "x1" -a "x$enable_prof_libgcc" = "x1" ; then
462
- if test "x$enable_prof_libunwind" = "x0" -a "x$GCC" = "xyes" ; then
463
- enable_prof_libgcc="1"
464
- AC_CHECK_HEADERS ( [ unwind.h] , , [ enable_prof_libgcc="0"] )
465
- AC_CHECK_LIB ( [ gcc] , [ _Unwind_Backtrace] , [ LIBS="$LIBS -lgcc"] , [ enable_prof_libgcc="0"] )
466
- if test "x${enable_prof_libgcc}" = "x1" ; then
467
- AC_DEFINE ( [ JEMALLOC_PROF_LIBGCC] , [ ] )
468
- fi
469
- else
470
- enable_prof_libgcc="0"
450
+ AC_ARG_ENABLE ( [ prof-libgcc] ,
451
+ [ AS_HELP_STRING ( [ --disable-prof-libgcc] ,
452
+ [ Do not use libgcc for backtracing] ) ] ,
453
+ [ if test "x$enable_prof_libgcc" = "xno" ; then
454
+ enable_prof_libgcc="0"
455
+ else
456
+ enable_prof_libgcc="1"
457
+ fi
458
+ ] ,
459
+ [ enable_prof_libgcc="1"]
460
+ )
461
+ if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \
462
+ -a "x$GCC" = "xyes" ; then
463
+ AC_CHECK_HEADERS ( [ unwind.h] , , [ enable_prof_libgcc="0"] )
464
+ AC_CHECK_LIB ( [ gcc] , [ _Unwind_Backtrace] , [ LIBS="$LIBS -lgcc"] , [ enable_prof_libgcc="0"] )
465
+ dnl The following is conservative, in that it only has entries for CPUs on
466
+ dnl which jemalloc has been tested.
467
+ AC_MSG_CHECKING ( [ libgcc-based backtracing reliability on ${host_cpu}] )
468
+ case "${host_cpu}" in
469
+ i[ [ 3456] ] 86)
470
+ AC_MSG_RESULT ( [ unreliable] )
471
+ enable_prof_libgcc="0";
472
+ ;;
473
+ x86_64)
474
+ AC_MSG_RESULT ( [ reliable] )
475
+ ;;
476
+ *)
477
+ AC_MSG_RESULT ( [ unreliable] )
478
+ enable_prof_libgcc="0";
479
+ ;;
480
+ esac
481
+ if test "x${enable_prof_libgcc}" = "x1" ; then
482
+ backtrace_method="libgcc"
483
+ AC_DEFINE ( [ JEMALLOC_PROF_LIBGCC] , [ ] )
471
484
fi
485
+ else
486
+ enable_prof_libgcc="0"
487
+ fi
488
+
489
+ AC_ARG_ENABLE ( [ prof-gcc] ,
490
+ [ AS_HELP_STRING ( [ --disable-prof-gcc] ,
491
+ [ Do not use gcc intrinsics for backtracing] ) ] ,
492
+ [ if test "x$enable_prof_gcc" = "xno" ; then
493
+ enable_prof_gcc="0"
494
+ else
495
+ enable_prof_gcc="1"
496
+ fi
497
+ ] ,
498
+ [ enable_prof_gcc="1"]
499
+ )
500
+ if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \
501
+ -a "x$GCC" = "xyes" ; then
502
+ backtrace_method="gcc intrinsics"
503
+ AC_DEFINE ( [ JEMALLOC_PROF_GCC] , [ ] )
504
+ else
505
+ enable_prof_gcc="0"
472
506
fi
473
507
508
+ if test "x$backtrace_method" = "x" ; then
509
+ backtrace_method="none (disabling profiling)"
510
+ enable_prof="0"
511
+ fi
512
+ AC_MSG_CHECKING ( [ configured backtracing method] )
513
+ AC_MSG_RESULT ( [ $backtrace_method] )
514
+ if test "x$enable_prof" = "x1" ; then
515
+ LIBS="$LIBS -lm"
516
+ AC_DEFINE ( [ JEMALLOC_PROF] , [ ] )
517
+ fi
518
+ AC_SUBST ( [ enable_prof] )
519
+
474
520
dnl Enable tiny allocations by default.
475
521
AC_ARG_ENABLE ( [ tiny] ,
476
522
[ AS_HELP_STRING ( [ --disable-tiny] , [ Disable tiny (sub-quantum) allocations] ) ] ,
@@ -810,8 +856,9 @@ AC_MSG_RESULT([cc-silence : ${enable_cc_silence}])
810
856
AC_MSG_RESULT ( [ debug : ${enable_debug}] )
811
857
AC_MSG_RESULT ( [ stats : ${enable_stats}] )
812
858
AC_MSG_RESULT ( [ prof : ${enable_prof}] )
813
- AC_MSG_RESULT ( [ prof-libgcc : ${enable_prof_libgcc}] )
814
859
AC_MSG_RESULT ( [ prof-libunwind : ${enable_prof_libunwind}] )
860
+ AC_MSG_RESULT ( [ prof-libgcc : ${enable_prof_libgcc}] )
861
+ AC_MSG_RESULT ( [ prof-gcc : ${enable_prof_gcc}] )
815
862
AC_MSG_RESULT ( [ tiny : ${enable_tiny}] )
816
863
AC_MSG_RESULT ( [ tcache : ${enable_tcache}] )
817
864
AC_MSG_RESULT ( [ fill : ${enable_fill}] )
0 commit comments