Commit Graph

436 Commits

Author SHA1 Message Date
Kostya Serebryany 9aca3b0d2f [asan] re-enable the test for ObjC initialization bug
llvm-svn: 149302
2012-01-30 23:55:46 +00:00
Kostya Serebryany 39ba3f724f [asan] fix issue 35: don't let the optimizer to optimize the test code away.
llvm-svn: 149296
2012-01-30 23:23:26 +00:00
Kostya Serebryany fed83c5755 [asan] ifdef/include cleanup
llvm-svn: 149281
2012-01-30 22:11:04 +00:00
Kostya Serebryany cf2c65aa8e [asan] add a test for __attribute__ no_address_safety_analysis
llvm-svn: 149278
2012-01-30 21:34:59 +00:00
Kostya Serebryany 510850c345 [asan] minor ifdef cleanup
llvm-svn: 149274
2012-01-30 20:55:02 +00:00
Alexey Samsonov 2dcef2d2a8 AddressSanitizer: Enforce default visibility for all libc interceptors
llvm-svn: 149247
2012-01-30 13:42:44 +00:00
Alexander Potapenko 81ebb0aafb Add a mask for "cmpb $imm, (%rdi)" on x86_64
llvm-svn: 149245
2012-01-30 12:49:00 +00:00
Anton Korobeynikov 28037ceacf Proper divmod implementation
llvm-svn: 149242
2012-01-30 10:21:51 +00:00
Anton Korobeynikov b047b04c4c Provide aeabi_mem* functions.
llvm-svn: 149241
2012-01-30 10:21:23 +00:00
Alexander Potapenko f519564d7c Make compiler-rt/trunk/lib/asan compileable with Visual Studio 2008 on Windows.
Patch by Timur Iskhodzhanov (timurrrr@google.com)

To test:
$ cl /c *.c*
in the asan directory.

The code fails to link if you omit the "/c" part but that's one of the
next steps,
as well as a few TODO's I've put into the Windows-specific code.

llvm-svn: 149130
2012-01-27 15:15:04 +00:00
Alexander Potapenko 13d95d5e5a Make compiler-rt/trunk/lib/asan compileable with g++.
Patch by Timur Iskhodzhanov (timurrrr@google.com)

The double-extern thing is
http://llvm.org/bugs/show_bug.cgi?id=11869

And the #include <string[s].h> are only needed on Mac (see comments in
the original code)
and also including them might make strchr/index conflict with the g++
system headers (which don't follow the man pages, ouch!)

llvm-svn: 149129
2012-01-27 10:52:37 +00:00
Alexander Potapenko fabfcd8bea Darwin-specific templates for the output tests.
These should fix the output tests on Mac.

llvm-svn: 149068
2012-01-26 17:40:18 +00:00
Alexander Potapenko 02a71626e3 More accurate atos execution which depends on the file type (EXECUTE, DYLIB) of the binary.
More Linux-like output on Mac (to match more output tests).

llvm-svn: 149064
2012-01-26 17:06:50 +00:00
Alexander Potapenko 98f0c713d9 Fix a bug in AsanProcMaps on Mac: on 64 bits the program was trying to read twice as many segment load commands as the binary actually contained.
llvm-svn: 149063
2012-01-26 17:01:20 +00:00
Alexander Potapenko 1f397fb87f Tune asan_symbolize.py to symbolize 64-bit binaries correctly.
Add the DEBUG flag to test_output.sh

llvm-svn: 148798
2012-01-24 10:44:44 +00:00
Kostya Serebryany 586ade114b [asan] use internal_strcmp before asan_init is done. *may* fix asan issue #30
llvm-svn: 148726
2012-01-23 21:20:05 +00:00
Kostya Serebryany f9418f9679 [asan] test that -fno-optimize-sibling-calls helps to get sane stack traces
llvm-svn: 148714
2012-01-23 18:44:34 +00:00
Alexander Potapenko 046ecc06be Wrap CFStringCreateCopy to prevent copying constant CF strings.
This should fix http://code.google.com/p/address-sanitizer/issues/detail?id=10

llvm-svn: 148696
2012-01-23 10:09:54 +00:00
Alexander Potapenko f9392011c8 Add a test for CFStringCreateCopy.
Normally this function should not create copies of constant strings, but it does when the default CFAllocator
is replaced (e.g. under AddressSanitizer)

This test is related to http://code.google.com/p/address-sanitizer/issues/detail?id=10

llvm-svn: 148695
2012-01-23 10:06:14 +00:00
Evgeniy Stepanov 3f6840745c Make the Android TSD workaround more reliable.
By scanning the thread list backwards.

llvm-svn: 148476
2012-01-19 13:57:45 +00:00
Evgeniy Stepanov d296ad4e16 Workaround the self-cleaning TSD on Android.
llvm-svn: 148475
2012-01-19 13:37:31 +00:00
Alexander Potapenko 62b0d70e56 Remove a debugging Report() call.
llvm-svn: 148474
2012-01-19 13:34:15 +00:00
Alexander Potapenko 3825e9770b Minor fixes of the AsanProcMaps code on Mac:
-- make the load command scan linear (instead of quadratic)
 -- do not create a nested AsanProcMaps instance for each address lookup
 -- more comments

llvm-svn: 148472
2012-01-19 12:44:06 +00:00
Evgeniy Stepanov 84c44a8b8b EHABI-based stack trace on ARM.
The change removes the unused FLAG_fast_unwind, and forces EHABI-based unwind
on ARM, and fast (FP-based) unwind everywhere else.

llvm-svn: 148468
2012-01-19 11:34:18 +00:00
Alexey Samsonov 0ac73fc9f8 AddressSanitizer: return false instead of true for __asan_get_ownership(NULL)
llvm-svn: 148394
2012-01-18 15:26:55 +00:00
Alexander Potapenko 38da9a04f5 Delete sysinfo/* and all references to it.
llvm-svn: 148386
2012-01-18 11:42:30 +00:00
Alexander Potapenko 4257386879 Implement AsanProcMaps for Mac OS. The code from sysinfo/ is not needed anymore and should be cleaned up.
llvm-svn: 148385
2012-01-18 11:16:05 +00:00
Kostya Serebryany 5767f0f113 [asan] workaround for bug http://llvm.org/bugs/show_bug.cgi?id=11763. Do not bark on memcpy(a, a, size).
llvm-svn: 148318
2012-01-17 18:43:52 +00:00
Kostya Serebryany 86d4492627 [asan] fix ReadFileToBuffer to correctly handle files from /proc/ (asan issue 27)
llvm-svn: 148311
2012-01-17 18:00:07 +00:00
Alexey Samsonov 67d508d083 Revert commit 148304
llvm-svn: 148305
2012-01-17 14:01:15 +00:00
Alexey Samsonov 1e310295d0 AddressSanitizer: from this patch, ASan allocator returns false for __asan_get_ownership(NULL) and produce error reports for malloc_usable_size(NULL) and __asan_get_allocated_size(NULL)
llvm-svn: 148304
2012-01-17 13:31:54 +00:00
Alexander Potapenko 2b2e0721d7 Define the bounds of the branch allocator memory space for 32-bit apps.
llvm-svn: 148303
2012-01-17 09:38:54 +00:00
Alexey Samsonov 209c514a1d AddressSanitizer: add support for malloc_usable_size() function
llvm-svn: 148287
2012-01-17 06:39:10 +00:00
Alexey Samsonov 2d3a67b73b AddressSanitizer: create AsanThreadSummary together with AsanThread (in parent thread)
llvm-svn: 148286
2012-01-17 06:35:31 +00:00
Evgeniy Stepanov 1b65b17bf5 [asan] Implement GetObjectNameAndOffset on ARM.
llvm-svn: 148236
2012-01-16 12:45:07 +00:00
Alexey Samsonov 50bf956f29 AddressSanitizer: fix recently introduced lint errors and broken test on Mac.
llvm-svn: 148235
2012-01-16 12:38:09 +00:00
Evgeniy Stepanov 2227207c83 Disable posix_memalign test on Android.
llvm-svn: 148234
2012-01-16 12:19:51 +00:00
Alexander Potapenko bd53f597de This patch adds two methods, __asan_allocate_island and __asan_deallocate_island
and switches our interceptors to using them instead of the default
vm_allocate-based approach used by mach_override_ptr.

To simplify the code, a fixed memory mapping is used for the allocation pool --
note that we can't mmap an arbitrary chunk of memory, because the shadow memory hasn't been mapped yet
(for the reasons discussed in http://code.google.com/p/address-sanitizer/issues/detail?id=24, we cannot map the shadow earlier)

The patch drops the program startup time from several second to half a second,
which speeds up the execution of ASan tests noticeably.
Because of the virtual memory size occupied by the programs it's hard
to speed up the shutdown time, which would've also helped the tests.

llvm-svn: 148116
2012-01-13 16:13:58 +00:00
Alexander Potapenko 9301db4baa Add __asan_mach_override_ptr_custom, which allows to inject a custom memory allocator into mach_override_ptr().
llvm-svn: 148115
2012-01-13 15:31:37 +00:00
Alexander Potapenko 553c208d22 This patch moves the code reading /proc/self/environ into AsanGetEnv
in asan_linux.cc, because /proc is unavailable on Mac.
Instead the Mac version of AsanGetEnv iterates over the array of
environment variables obtained from _NSGetEnviron()

llvm-svn: 148114
2012-01-13 12:59:48 +00:00
Anton Korobeynikov 48cfd55c5d Add some basic mingw support.
Patch by Ruben Van Boxem! 

llvm-svn: 148048
2012-01-12 21:13:48 +00:00
Evgeniy Stepanov 837fe5bcc9 Call asan_init from .preinit_array.
Protected by an #ifdef, disabled by default.

llvm-svn: 147932
2012-01-11 08:17:19 +00:00
Alexey Samsonov 5d5fa5115a Test commit. Minor cleanup in AsanThread
llvm-svn: 147930
2012-01-11 08:07:51 +00:00
Kostya Serebryany 41cdb8614c [asan] remove OS-dependent headers from asan_internal.h
llvm-svn: 147919
2012-01-11 02:39:16 +00:00
Kostya Serebryany 0c8fa7b8ed [asan] remove OS-dependent includes from asan_interceptors.h
llvm-svn: 147916
2012-01-11 02:32:40 +00:00
Kostya Serebryany 1dd51b53b2 [asan] move TSD code into asan_posix.cc
llvm-svn: 147913
2012-01-11 02:21:06 +00:00
Kostya Serebryany 332923be32 [asan] get rid of the scary TSD destructor code. Now, we store the leaky AsanThreadSummary in TSD and never remove it from there.
llvm-svn: 147910
2012-01-11 02:03:16 +00:00
Kostya Serebryany 258d7b4182 [asan] hopefully fix the build on MacOS 10.6 (the code did work on 10.7, where I tested it)
llvm-svn: 147896
2012-01-10 23:36:59 +00:00
Kostya Serebryany a82f0d4950 [asan] move OS-dependent code away from asan_lock.h
llvm-svn: 147878
2012-01-10 21:24:40 +00:00
Kostya Serebryany edb4a8a128 [asan] don't include unistd.h in the headers
llvm-svn: 147811
2012-01-09 23:11:26 +00:00
Kostya Serebryany 3a55cfacf1 [asan] temporary reinstate string.h/strings.h. Removal of those caused a Mac build failulre which I failed to observe before the commit
llvm-svn: 147810
2012-01-09 22:45:05 +00:00
Kostya Serebryany d9cb2f13b3 [asan] don't include string.h and strings.h
llvm-svn: 147809
2012-01-09 22:36:51 +00:00
Kostya Serebryany 65518014e2 [asan] don't use strstr/strncat from libc, use our own versions instead
llvm-svn: 147807
2012-01-09 22:20:49 +00:00
Kostya Serebryany 3ab81d1f26 [asan] fix mac build once more
llvm-svn: 147796
2012-01-09 19:50:06 +00:00
Kostya Serebryany 3e559e87a4 [asan]: fix typo from previous commit
llvm-svn: 147793
2012-01-09 19:41:15 +00:00
Kostya Serebryany ba41e8d2c5 [asan]: fix mac build
llvm-svn: 147792
2012-01-09 19:35:11 +00:00
Kostya Serebryany 5be458ccfd [asan] refactoring: move some common linux/mac code to asan_posix.cc
llvm-svn: 147788
2012-01-09 19:18:27 +00:00
Kostya Serebryany 9fd01e5ea5 [asan] refactoring: move all interceptors to a single file
llvm-svn: 147784
2012-01-09 18:53:15 +00:00
Kostya Serebryany 3f4b9bb4a0 [asan] do not use new/delete for the internal thread structure
llvm-svn: 147674
2012-01-06 19:44:11 +00:00
Kostya Serebryany 25d6c1b3c3 [asan] move more code into OS-specific files
llvm-svn: 147671
2012-01-06 19:11:09 +00:00
Kostya Serebryany adebf0caf5 [asan] cleanup: remove the SIGILL-related code (rt part)
llvm-svn: 147665
2012-01-06 18:02:04 +00:00
Kostya Serebryany 2b08718bba [asan] move more stuff to OS-specific files
llvm-svn: 147647
2012-01-06 02:12:25 +00:00
Rafael Espindola a0fbaeebe6 Fix build on minix. Patch by Ben Gras!
llvm-svn: 147632
2012-01-05 23:59:42 +00:00
Kostya Serebryany 3b7fb102c4 [asan] use dl_iterate_phdr for pre-symbolization on linux instead of parsing /proc/self/maps
llvm-svn: 147628
2012-01-05 23:50:34 +00:00
Kostya Serebryany 78d87d3b4b [asan] move {linux,mac}-specific code from asan_thread.cc to asan_{linux,mac}.cc; also add asan_procmaps.h which I forgot to add on previous commit.
llvm-svn: 147586
2012-01-05 01:07:27 +00:00
Kostya Serebryany cd271f5440 [asan] implement our own /proc/self/maps reader and use it on linux instead of sysinfo.h
llvm-svn: 147581
2012-01-05 00:44:33 +00:00
Kostya Serebryany cc1d7893d6 [asan] remove objdump-based tests in favour of much simpler LLVM-ish tests
llvm-svn: 147514
2012-01-04 02:08:46 +00:00
Bob Wilson bf9a62dcad Fix missing include of int_lib.h and ppc ifdef for FreeBSD.
Patch provided by Ed Schouten!

llvm-svn: 147458
2012-01-03 18:59:25 +00:00
NAKAMURA Takumi e9d3d21988 Happy new year 2012!
llvm-svn: 147395
2012-01-01 08:16:56 +00:00
Kostya Serebryany 10a6b304e1 [asan] build asan-rt with -funwind-tables
llvm-svn: 147341
2011-12-29 17:29:20 +00:00
Kostya Serebryany d2d043be45 [asan] force the __asan_unregister_globals to reside in the runtime library
llvm-svn: 147329
2011-12-28 23:35:46 +00:00
Kostya Serebryany a772096156 [asan] refactoring: don't #include <sys/mman.h> in non-os-specific files
llvm-svn: 147328
2011-12-28 23:28:54 +00:00
Kostya Serebryany 6c4bd806fa [asan] use custom libc-free getenv; a bit of refactoring around mmap calls
llvm-svn: 147326
2011-12-28 22:58:01 +00:00
Kostya Serebryany 5bdf7dcb2d [asan] missing PTHREAD_DESTRUCTOR_ITERATIONS on Android. patch by eugeni.stepanov@gmail.com
llvm-svn: 147322
2011-12-28 20:47:21 +00:00
Kostya Serebryany bab78de8a3 [asan] discover main thread stack limits without pthread. patch by eugeni.stepanov@gmail.com
llvm-svn: 147321
2011-12-28 20:34:30 +00:00
Kostya Serebryany 2b87e403c4 [asan] no ucontext on Android. patch by eugeni.stepanov@gmail.com
llvm-svn: 147320
2011-12-28 20:22:21 +00:00
Kostya Serebryany 76eca5e53a [asan] enable memset/memcpy/memmove interceptors in asan-rt (in addition to those in the compiler module)
llvm-svn: 147319
2011-12-28 19:55:30 +00:00
Kostya Serebryany e4a84c4f1f [asan] better message for parameter overlap bugs
llvm-svn: 147317
2011-12-28 19:24:31 +00:00
Kostya Serebryany 50bc2a71b2 [asan] interceptor for strcat. Patch by samsonov@google.com
llvm-svn: 147316
2011-12-28 19:08:49 +00:00
Kostya Serebryany 6579e355c0 [asan] interceptor for memcmp. Patch by samsonov@google.com
llvm-svn: 147315
2011-12-28 18:56:42 +00:00
Kostya Serebryany 809632e28e [asan] interceptors for strcasecmp and strncasecmp. patch by samsonov@google.com
llvm-svn: 147304
2011-12-28 02:24:50 +00:00
Kostya Serebryany 8b981c2564 The code instrumented with ASan may have its own instance of the
mach_override library.
In this case chances are that functions from it will be called from
mach_override_ptr() during ASan initialization.
This may lead to crashes (if those functions are instrumented) or
incorrect behavior (if the implementations differ).

The attached patch renames mach_override_ptr() into
__asan_mach_override_ptr() and makes the rest of the mach_override
internals hidden.
The corresponding AddressSanitizer bug is
http://code.google.com/p/address-sanitizer/issues/detail?id=22

Patch by glider@google.com

llvm-svn: 147303
2011-12-28 01:08:14 +00:00
Kostya Serebryany 46c70d33d7 [asan] make sure __asan_report_* functions are not inlined (so that they are not optimized away and are kept in the resulting library). Patch by glider@google.com
llvm-svn: 147302
2011-12-28 00:59:39 +00:00
Kostya Serebryany 5469986da0 [asan] remove the test for cfree. 'man cfree' says: 'This function should never be used.' and this function is not found on many OSes we support.
llvm-svn: 147301
2011-12-27 23:42:55 +00:00
Kostya Serebryany dd1386f882 new() has slightly different signature on Android. This patch adds the
llvm-svn: 147300
2011-12-27 23:11:09 +00:00
Kostya Serebryany db32f967b9 [asan] rely on __has_feature(address_sanitizer) instead of the ADDRESS_SANITIZER macro
llvm-svn: 147297
2011-12-27 21:57:12 +00:00
Kostya Serebryany 1b82c281f3 [asan] make sure frame pointers are not omitted when running asan output tests
llvm-svn: 147293
2011-12-27 19:52:54 +00:00
Kostya Serebryany 6bb2f1d5b5 Recently the GCD tests started failing because of the invalid size of
FakeStack on the worker threads.
This patch moves the AsanThread initialization into a separate
procedure that's called when AsanThread objects are called for worker
threads.
Patch by glider@google.com

llvm-svn: 146752
2011-12-16 19:13:35 +00:00
Kostya Serebryany 6d37656c1a [asan] revert r146529: we do need to build asan-rt as a shared library. Will need to find a different way to modify preinit_array
llvm-svn: 146703
2011-12-15 23:08:00 +00:00
Kostya Serebryany 7ce9686921 [asan] added a test to check that a global-buffer-overflow mentioned the module name; revert incorrect change in the test runner
llvm-svn: 146701
2011-12-15 22:57:32 +00:00
Kostya Serebryany 9366d42e91 [asan] fix a bug (issue 19) where dlclose and the following mmap caused a false positive. run-time part.
llvm-svn: 146687
2011-12-15 21:55:34 +00:00
Kostya Serebryany e8a7d2aef8 [asan] regression test for asan issue 19, currently fails.
llvm-svn: 146681
2011-12-15 20:38:14 +00:00
Kostya Serebryany 7fb33a3d40 [asan] poison the internal asan heap memory, just in case. Change Printf to Report when debugging globals.
llvm-svn: 146663
2011-12-15 17:41:30 +00:00
Kostya Serebryany 9bd5208965 [asan] insert __asan_init into ".preinit_array" section. Linux-only.
llvm-svn: 146529
2011-12-14 00:19:03 +00:00
Kostya Serebryany e85da73553 [asan] fix the test runner to detect build breakages; add a test for -pie
llvm-svn: 146528
2011-12-14 00:05:22 +00:00
Kostya Serebryany 1d337a5e06 [asan] fix some more format warnings in sysinfo/sysinfo.cc
llvm-svn: 146526
2011-12-13 23:34:59 +00:00
Kostya Serebryany d47a91ad2a [asan] canonicalise the output for double-free and wrong-free. fixes asan issue 18
llvm-svn: 146501
2011-12-13 19:16:36 +00:00
Kostya Serebryany 0e5704607b build compiler-rt with -fPIC, otherwise the run-time libs will not link with -pie, at least on linux
llvm-svn: 146499
2011-12-13 18:58:47 +00:00
Kostya Serebryany 0698b852ed [asan] fix asan-rt interceptors on Snow Leopard. Patch by glider@google.com
llvm-svn: 146263
2011-12-09 18:18:54 +00:00
Kostya Serebryany 72fde3727e [asan] make use-after-return mode more robust: allow to call instrumented functions while reporting an error
llvm-svn: 146231
2011-12-09 01:49:31 +00:00