1 | Notes on Valgrind
|
---|
2 | =================
|
---|
3 |
|
---|
4 | Valgrind is a test harness that includes many tools such as memcheck,
|
---|
5 | which is commonly used to check for memory leaks, etc. The default tool
|
---|
6 | run by Valgrind is memcheck. There are other tools available, but this
|
---|
7 | will focus on memcheck.
|
---|
8 |
|
---|
9 | Valgrind runs programs in a virtual machine, this means OpenSSL unit
|
---|
10 | tests run under Valgrind will take longer than normal.
|
---|
11 |
|
---|
12 | Requirements
|
---|
13 | ------------
|
---|
14 |
|
---|
15 | 1. Platform supported by Valgrind
|
---|
16 | See <http://valgrind.org/info/platforms.html>
|
---|
17 | 2. Valgrind installed on the platform
|
---|
18 | See <http://valgrind.org/downloads/current.html>
|
---|
19 | 3. OpenSSL compiled
|
---|
20 | See [INSTALL.md](INSTALL.md)
|
---|
21 |
|
---|
22 | Running Tests
|
---|
23 | -------------
|
---|
24 |
|
---|
25 | Test behavior can be modified by adjusting environment variables.
|
---|
26 |
|
---|
27 | `EXE_SHELL`
|
---|
28 |
|
---|
29 | This variable is used to specify the shell used to execute OpenSSL test
|
---|
30 | programs. The default wrapper (`util/wrap.pl`) initializes the environment
|
---|
31 | to allow programs to find shared libraries. The variable can be modified
|
---|
32 | to specify a different executable environment.
|
---|
33 |
|
---|
34 | EXE_SHELL=\
|
---|
35 | "`/bin/pwd`/util/wrap.pl valgrind --error-exitcode=1 --leak-check=full -q"
|
---|
36 |
|
---|
37 | This will start up Valgrind with the default checker (`memcheck`).
|
---|
38 | The `--error-exitcode=1` option specifies that Valgrind should exit with an
|
---|
39 | error code of 1 when memory leaks occur.
|
---|
40 | The `--leak-check=full` option specifies extensive memory checking.
|
---|
41 | The `-q` option prints only error messages.
|
---|
42 | Additional Valgrind options may be added to the `EXE_SHELL` variable.
|
---|
43 |
|
---|
44 | `OPENSSL_ia32cap`
|
---|
45 |
|
---|
46 | This variable controls the processor-specific code on Intel processors.
|
---|
47 | By default, OpenSSL will attempt to figure out the capabilities of a
|
---|
48 | processor, and use it to its fullest capability. This variable can be
|
---|
49 | used to control what capabilities OpenSSL uses.
|
---|
50 |
|
---|
51 | As of valgrind-3.15.0 on Linux/x86_64, instructions up to AVX2 are
|
---|
52 | supported. Setting the following disables instructions beyond AVX2:
|
---|
53 |
|
---|
54 | `OPENSSL_ia32cap=":0"`
|
---|
55 |
|
---|
56 | This variable may need to be set to something different based on the
|
---|
57 | processor and Valgrind version you are running tests on. More information
|
---|
58 | may be found in [doc/man3/OPENSSL_ia32cap.pod](doc/man3/OPENSSL_ia32cap.pod).
|
---|
59 |
|
---|
60 | Additional variables (such as `VERBOSE` and `TESTS`) are described in the
|
---|
61 | file [test/README.md](test/README.md).
|
---|
62 |
|
---|
63 | Example command line:
|
---|
64 |
|
---|
65 | $ make test EXE_SHELL="`/bin/pwd`/util/wrap.pl valgrind --error-exitcode=1 \
|
---|
66 | --leak-check=full -q" OPENSSL_ia32cap=":0"
|
---|
67 |
|
---|
68 | If an error occurs, you can then run the specific test via the `TESTS` variable
|
---|
69 | with the `VERBOSE` or `VF` or `VFP` options to gather additional information.
|
---|
70 |
|
---|
71 | $ make test VERBOSE=1 TESTS=test_test EXE_SHELL="`/bin/pwd`/util/wrap.pl \
|
---|
72 | valgrind --error-exitcode=1 --leak-check=full -q" OPENSSL_ia32cap=":0"
|
---|