@@ -392,7 +392,7 @@ static int setup_at_exit_wrapper(ThreadState *thr, uptr pc, void(*f)(),
392
392
393
393
#if !SANITIZER_ANDROID
394
394
TSAN_INTERCEPTOR (int , atexit, void (*f)()) {
395
- if (cur_thread ()->in_symbolizer )
395
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
396
396
return 0 ;
397
397
// We want to setup the atexit callback even if we are in ignored lib
398
398
// or after fork.
@@ -402,7 +402,7 @@ TSAN_INTERCEPTOR(int, atexit, void (*f)()) {
402
402
#endif
403
403
404
404
TSAN_INTERCEPTOR (int , __cxa_atexit, void (*f)(void *a), void *arg, void *dso) {
405
- if (cur_thread ()->in_symbolizer )
405
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
406
406
return 0 ;
407
407
SCOPED_TSAN_INTERCEPTOR (__cxa_atexit, f, arg, dso);
408
408
return setup_at_exit_wrapper (thr, pc, (void (*)())f, arg, dso);
@@ -448,7 +448,7 @@ static void on_exit_wrapper(int status, void *arg) {
448
448
}
449
449
450
450
TSAN_INTERCEPTOR (int , on_exit, void (*f)(int , void *), void *arg) {
451
- if (cur_thread ()->in_symbolizer )
451
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
452
452
return 0 ;
453
453
SCOPED_TSAN_INTERCEPTOR (on_exit, f, arg);
454
454
AtExitCtx *ctx = (AtExitCtx*)InternalAlloc (sizeof (AtExitCtx));
@@ -659,7 +659,7 @@ TSAN_INTERCEPTOR(void, _longjmp, uptr *env, int val) {
659
659
660
660
#if !SANITIZER_MAC
661
661
TSAN_INTERCEPTOR (void *, malloc, uptr size) {
662
- if (cur_thread ()->in_symbolizer )
662
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
663
663
return InternalAlloc (size);
664
664
void *p = 0 ;
665
665
{
@@ -676,7 +676,7 @@ TSAN_INTERCEPTOR(void*, __libc_memalign, uptr align, uptr sz) {
676
676
}
677
677
678
678
TSAN_INTERCEPTOR (void *, calloc, uptr size, uptr n) {
679
- if (cur_thread ()->in_symbolizer )
679
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
680
680
return InternalCalloc (size, n);
681
681
void *p = 0 ;
682
682
{
@@ -688,7 +688,7 @@ TSAN_INTERCEPTOR(void*, calloc, uptr size, uptr n) {
688
688
}
689
689
690
690
TSAN_INTERCEPTOR (void *, realloc, void *p, uptr size) {
691
- if (cur_thread ()->in_symbolizer )
691
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
692
692
return InternalRealloc (p, size);
693
693
if (p)
694
694
invoke_free_hook (p);
@@ -703,7 +703,7 @@ TSAN_INTERCEPTOR(void*, realloc, void *p, uptr size) {
703
703
TSAN_INTERCEPTOR (void , free, void *p) {
704
704
if (p == 0 )
705
705
return ;
706
- if (cur_thread ()->in_symbolizer )
706
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
707
707
return InternalFree (p);
708
708
invoke_free_hook (p);
709
709
SCOPED_INTERCEPTOR_RAW (free, p);
@@ -713,7 +713,7 @@ TSAN_INTERCEPTOR(void, free, void *p) {
713
713
TSAN_INTERCEPTOR (void , cfree, void *p) {
714
714
if (p == 0 )
715
715
return ;
716
- if (cur_thread ()->in_symbolizer )
716
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
717
717
return InternalFree (p);
718
718
invoke_free_hook (p);
719
719
SCOPED_INTERCEPTOR_RAW (cfree, p);
@@ -827,18 +827,27 @@ TSAN_INTERCEPTOR(void*, memalign, uptr align, uptr sz) {
827
827
828
828
#if !SANITIZER_MAC
829
829
TSAN_INTERCEPTOR (void *, aligned_alloc, uptr align, uptr sz) {
830
+ if (UNLIKELY (cur_thread ()->in_symbolizer ))
831
+ return InternalAlloc (sz, nullptr , align);
830
832
SCOPED_INTERCEPTOR_RAW (aligned_alloc , align, sz);
831
833
return user_aligned_alloc (thr, pc, align, sz);
832
834
}
833
835
834
836
TSAN_INTERCEPTOR (void *, valloc, uptr sz) {
837
+ if (UNLIKELY (cur_thread ()->in_symbolizer ))
838
+ return InternalAlloc (sz, nullptr , GetPageSizeCached ());
835
839
SCOPED_INTERCEPTOR_RAW (valloc , sz);
836
840
return user_valloc (thr, pc, sz);
837
841
}
838
842
#endif
839
843
840
844
#if SANITIZER_LINUX
841
845
TSAN_INTERCEPTOR (void *, pvalloc, uptr sz) {
846
+ if (UNLIKELY (cur_thread ()->in_symbolizer )) {
847
+ uptr PageSize = GetPageSizeCached ();
848
+ sz = sz ? RoundUpTo (sz, PageSize) : PageSize;
849
+ return InternalAlloc (sz, nullptr , PageSize);
850
+ }
842
851
SCOPED_INTERCEPTOR_RAW (pvalloc, sz);
843
852
return user_pvalloc (thr, pc, sz);
844
853
}
@@ -849,6 +858,13 @@ TSAN_INTERCEPTOR(void*, pvalloc, uptr sz) {
849
858
850
859
#if !SANITIZER_MAC
851
860
TSAN_INTERCEPTOR (int , posix_memalign, void **memptr, uptr align, uptr sz) {
861
+ if (UNLIKELY (cur_thread ()->in_symbolizer )) {
862
+ void *p = InternalAlloc (sz, nullptr , align);
863
+ if (!p)
864
+ return errno_ENOMEM;
865
+ *memptr = p;
866
+ return 0 ;
867
+ }
852
868
SCOPED_INTERCEPTOR_RAW (posix_memalign, memptr, align, sz);
853
869
return user_posix_memalign (thr, pc, memptr, align, sz);
854
870
}
@@ -2069,7 +2085,7 @@ TSAN_INTERCEPTOR(int, getaddrinfo, void *node, void *service,
2069
2085
}
2070
2086
2071
2087
TSAN_INTERCEPTOR (int , fork, int fake) {
2072
- if (cur_thread ()->in_symbolizer )
2088
+ if (UNLIKELY ( cur_thread ()->in_symbolizer ) )
2073
2089
return REAL (fork )(fake);
2074
2090
SCOPED_INTERCEPTOR_RAW (fork , fake);
2075
2091
ForkBefore (thr, pc);
0 commit comments