boringssl/util
David Benjamin 17d553d299 Add a CFI tester to CHECK_ABI.
This uses the x86 trap flag and libunwind to test CFI works at each
instruction. For now, it just uses the system one out of pkg-config and
disables unwind tests if unavailable. We'll probably want to stick a
copy into //third_party and perhaps try the LLVM one later.

This tester caught two bugs in P-256 CFI annotations already:
I47b5f9798b3bcee1748e537b21c173d312a14b42 and
I9f576d868850312d6c14d1386f8fbfa85021b347

An earlier design used PTRACE_SINGLESTEP with libunwind's remote
unwinding features. ptrace is a mess around stop signals (see group-stop
discussion in ptrace(2)) and this is 10x faster, so I went with it. The
question of which is more future-proof is complex:

- There are two libunwinds with the same API,
  https://www.nongnu.org/libunwind/ and LLVM's. This currently uses the
  system nongnu.org for convenience. In future, LLVM's should be easier
  to bundle (less complex build) and appears to even support Windows,
  but I haven't tested this.  Moreover, setting the trap flag keeps the
  test single-process, which is less complex on Windows. That suggests
  the trap flag design and switching to LLVM later. However...

- Not all architectures have a trap flag settable by userspace. As far
  as I can tell, ARMv8's PSTATE.SS can only be set from the kernel. If
  we stick with nongnu.org libunwind, we can use PTRACE_SINGLESTEP and
  remote unwinding. Or we implement it for LLVM. Another thought is for
  the ptracer to bounce SIGTRAP back into the process, to share the
  local unwinding code.

- ARMv7 has no trap flag at all and PTRACE_SINGLESTEP fails. Debuggers
  single-step by injecting breakpoints instead. However, ARMv8's trap
  flag seems to work in both AArch32 and AArch64 modes, so we may be
  able to condition it on a 64-bit kernel.

Sadly, neither strategy works with Intel SDE. Adding flags to cpucap
vectors as we do with ARM would help, but it would not emulate CPUs
newer than the host CPU. For now, I've just had SDE tests disable these.

Annoyingly, CMake does not allow object libraries to have dependencies,
so make test_support a proper static library. Rename the target to
test_support_lib to avoid
https://gitlab.kitware.com/cmake/cmake/issues/17785

Update-Note: This adds a new optional test dependency, but it's disabled
by default (define BORINGSSL_HAVE_LIBUNWIND), so consumers do not need
to do anything. We'll probably want to adjust this in the future.

Bug: 181
Change-Id: I817263d7907aff0904a9cee83f8b26747262cc0c
Reviewed-on: https://boringssl-review.googlesource.com/c/33966
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
2019-01-03 22:01:55 +00:00
..
ar Support Windows-style ar files. 2018-11-27 22:06:15 +00:00
bot Update SDE and add the Windows version. 2019-01-03 21:01:33 +00:00
fipstools Better handle AVX-512 assembly syntax. 2018-10-15 23:31:23 +00:00
testresult Move JSON test results code into a common module. 2018-11-16 20:13:31 +00:00
32-bit-toolchain.cmake
all_tests.go Add a CFI tester to CHECK_ABI. 2019-01-03 22:01:55 +00:00
all_tests.json Add some RAND_bytes tests. 2018-09-06 23:54:57 +00:00
BUILD.toplevel Add support for building ppc64le with bazel 2018-07-16 17:48:12 +00:00
check_filenames.go Add a tool to check for filename collisions. 2018-05-31 19:02:43 +00:00
check_imported_libraries.go
convert_comments.go Maintain comment alignment when converting. 2017-08-02 22:00:50 +00:00
convert_wycheproof.go Add new curve/hash ECDSA combinations from Wycheproof. 2018-08-10 18:26:06 +00:00
diff_asm.go
doc.config Add chacha.h to the list of documented headers. 2017-10-12 15:27:34 +00:00
doc.css
doc.go Fix doc.go error capitalization. 2018-09-14 20:47:26 +00:00
embed_test_data.go Escape backslashes in crypto test data. 2018-08-08 18:36:11 +00:00
generate_build_files.py Drop NEON assembly for HRSS. 2018-12-13 17:43:07 +00:00
generate-asm-lcov.py
generate-coverage.sh
godeps.go Use Go modules with delocate. 2018-09-17 22:19:52 +00:00
make_errors.go Fix up make_errors.go. 2017-11-01 16:32:56 +00:00
make_prefix_headers.go Make Windows symbol-prefixing work. 2018-11-27 22:13:22 +00:00
read_symbols.go Make symbol-prefixing work on 32-bit x86. 2018-11-27 22:35:17 +00:00
run_android_tests.go Add missing files to run_android_test.go. 2017-04-06 15:54:06 +00:00
whitespace.txt No-op commit to kick the bots. 2018-08-09 23:09:23 +00:00