blob: a79f2638e9f35db550f08002de9e167607e79ae7 [file] [log] [blame]
David Benjamin96628432017-01-19 19:05:47 -05001/* Copyright (c) 2016, Google Inc.
2 *
3 * Permission to use, copy, modify, and/or distribute this software for any
4 * purpose with or without fee is hereby granted, provided that the above
5 * copyright notice and this permission notice appear in all copies.
6 *
7 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
David Benjamin6ce93cc2018-10-31 14:48:23 -050015#include <stdio.h>
David Benjamin632d1122018-09-06 17:33:53 -050016#include <string.h>
17
David Benjamin96628432017-01-19 19:05:47 -050018#include <gtest/gtest.h>
19
David Benjamin6ce93cc2018-10-31 14:48:23 -050020#include <openssl/cpu.h>
David Benjamin632d1122018-09-06 17:33:53 -050021#include <openssl/rand.h>
22
David Benjamin54efa1a2018-12-15 18:58:43 -060023#include "abi_test.h"
David Benjaminafd88c22017-04-26 11:02:43 -040024#include "gtest_main.h"
David Benjamin6ce93cc2018-10-31 14:48:23 -050025#include "../internal.h"
26
27#if (defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)) && \
28 !defined(OPENSSL_STATIC_ARMCAP)
29#include <openssl/arm_arch.h>
30#define TEST_ARM_CPUS
31#endif
David Benjamin6b0edfb2017-02-04 11:12:51 -050032
David Benjamin6b0edfb2017-02-04 11:12:51 -050033
David Benjamin96628432017-01-19 19:05:47 -050034int main(int argc, char **argv) {
David Benjamin96628432017-01-19 19:05:47 -050035 testing::InitGoogleTest(&argc, argv);
David Benjaminafd88c22017-04-26 11:02:43 -040036 bssl::SetupGoogleTest();
David Benjamin632d1122018-09-06 17:33:53 -050037
David Benjamin17d553d2018-12-21 17:58:36 -060038 bool unwind_tests = true;
David Benjamin632d1122018-09-06 17:33:53 -050039 for (int i = 1; i < argc; i++) {
David Benjamin17d553d2018-12-21 17:58:36 -060040#if !defined(OPENSSL_WINDOWS)
David Benjamin632d1122018-09-06 17:33:53 -050041 if (strcmp(argv[i], "--fork_unsafe_buffering") == 0) {
42 RAND_enable_fork_unsafe_buffering(-1);
43 }
David Benjamin632d1122018-09-06 17:33:53 -050044#endif
45
David Benjamin6ce93cc2018-10-31 14:48:23 -050046#if defined(TEST_ARM_CPUS)
David Benjamin6ce93cc2018-10-31 14:48:23 -050047 if (strncmp(argv[i], "--cpu=", 6) == 0) {
48 const char *cpu = argv[i] + 6;
49 uint32_t armcap;
50 if (strcmp(cpu, "none") == 0) {
51 armcap = 0;
52 } else if (strcmp(cpu, "neon") == 0) {
53 armcap = ARMV7_NEON;
54 } else if (strcmp(cpu, "crypto") == 0) {
55 armcap = ARMV7_NEON | ARMV8_AES | ARMV8_SHA1 | ARMV8_SHA256 | ARMV8_PMULL;
56 } else {
57 fprintf(stderr, "Unknown CPU: %s\n", cpu);
58 exit(1);
59 }
60
61 uint32_t *armcap_ptr = OPENSSL_get_armcap_pointer_for_test();
62 if ((armcap & *armcap_ptr) != armcap) {
63 fprintf(stderr,
64 "Host CPU does not support features for testing CPU '%s'.\n",
65 cpu);
66 exit(89);
67 }
David Benjamin46e12b02018-11-16 16:37:46 -060068 printf("Simulating CPU '%s'\n", cpu);
David Benjamin6ce93cc2018-10-31 14:48:23 -050069 *armcap_ptr = armcap;
70 }
David Benjamin6ce93cc2018-10-31 14:48:23 -050071#endif // TEST_ARM_CPUS
72
David Benjamin17d553d2018-12-21 17:58:36 -060073 if (strcmp(argv[i], "--no_unwind_tests") == 0) {
74 unwind_tests = false;
75 }
76 }
77
78 if (unwind_tests) {
79 abi_test::EnableUnwindTests();
80 }
81
Adam Langley732b70e2020-03-30 09:11:22 -070082 return RUN_ALL_TESTS();
David Benjamin96628432017-01-19 19:05:47 -050083}