Add method to run fortified versions of funcs.

Add a way to turn fortify off for the files that test fortify functions.

This method involves simply compiling the same file with fortify off and
changing the test name slightly.

It's not very pretty, and it assumes that only these few files test
functions that can be fortified.

Bug: 15195631
Change-Id: Iba9db1d508b7d28a1d6968019cb70fe08864827b
diff --git a/tests/Android.mk b/tests/Android.mk
index 3a0d6ee..af8283f 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -86,11 +86,14 @@
     stack_unwinding_test.cpp \
     stdatomic_test.cpp \
     stdint_test.cpp \
+    stdio_nofortify_test.cpp \
     stdio_test.cpp \
     stdio_ext_test.cpp \
     stdlib_test.cpp \
+    string_nofortify_test.cpp \
     string_test.cpp \
     string_posix_strerror_r_test.cpp \
+    strings_nofortify_test.cpp \
     strings_test.cpp \
     stubs_test.cpp \
     sstream_test.cpp \
@@ -117,6 +120,7 @@
     time_test.cpp \
     uchar_test.cpp \
     uniqueptr_test.cpp \
+    unistd_nofortify_test.cpp \
     unistd_test.cpp \
     utmp_test.cpp \
     wchar_test.cpp \
diff --git a/tests/stdio_nofortify_test.cpp b/tests/stdio_nofortify_test.cpp
new file mode 100644
index 0000000..9bdcb03
--- /dev/null
+++ b/tests/stdio_nofortify_test.cpp
@@ -0,0 +1,12 @@
+
+#ifdef _FORTIFY_SOURCE
+#undef _FORTIFY_SOURCE
+#endif
+
+#define NOFORTIFY
+
+#include "stdio_test.cpp"
+
+#if defined(_FORTIFY_SOURCE)
+#error "_FORTIFY_SOURCE has been redefined, fix the code to remove this redefinition."
+#endif
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp
index afb1511..58109a9 100644
--- a/tests/stdio_test.cpp
+++ b/tests/stdio_test.cpp
@@ -31,14 +31,20 @@
 
 #include "TemporaryFile.h"
 
-TEST(stdio, flockfile_18208568_stderr) {
+#if defined(NOFORTIFY)
+#define STDIO_TEST stdio_nofortify
+#else
+#define STDIO_TEST stdio
+#endif
+
+TEST(STDIO_TEST, flockfile_18208568_stderr) {
   // Check that we have a _recursive_ mutex for flockfile.
   flockfile(stderr);
   feof(stderr); // We don't care about the result, but this needs to take the lock.
   funlockfile(stderr);
 }
 
-TEST(stdio, flockfile_18208568_regular) {
+TEST(STDIO_TEST, flockfile_18208568_regular) {
   // We never had a bug for streams other than stdin/stdout/stderr, but test anyway.
   FILE* fp = fopen("/dev/null", "w");
   ASSERT_TRUE(fp != NULL);
@@ -48,7 +54,7 @@
   fclose(fp);
 }
 
-TEST(stdio, tmpfile_fileno_fprintf_rewind_fgets) {
+TEST(STDIO_TEST, tmpfile_fileno_fprintf_rewind_fgets) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -73,7 +79,7 @@
   fclose(fp);
 }
 
-TEST(stdio, dprintf) {
+TEST(STDIO_TEST, dprintf) {
   TemporaryFile tf;
 
   int rc = dprintf(tf.fd, "hello\n");
@@ -91,7 +97,7 @@
   fclose(tfile);
 }
 
-TEST(stdio, getdelim) {
+TEST(STDIO_TEST, getdelim) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -126,7 +132,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getdelim_invalid) {
+TEST(STDIO_TEST, getdelim_invalid) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -151,7 +157,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getdelim_directory) {
+TEST(STDIO_TEST, getdelim_directory) {
   FILE* fp = fopen("/proc", "r");
   ASSERT_TRUE(fp != NULL);
   char* word_read;
@@ -160,7 +166,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getline) {
+TEST(STDIO_TEST, getline) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -202,7 +208,7 @@
   fclose(fp);
 }
 
-TEST(stdio, getline_invalid) {
+TEST(STDIO_TEST, getline_invalid) {
   FILE* fp = tmpfile();
   ASSERT_TRUE(fp != NULL);
 
@@ -227,7 +233,7 @@
   fclose(fp);
 }
 
-TEST(stdio, printf_ssize_t) {
+TEST(STDIO_TEST, printf_ssize_t) {
   // http://b/8253769
   ASSERT_EQ(sizeof(ssize_t), sizeof(long int));
   ASSERT_EQ(sizeof(ssize_t), sizeof(size_t));
@@ -240,20 +246,20 @@
 }
 
 // https://code.google.com/p/android/issues/detail?id=64886
-TEST(stdio, snprintf_a) {
+TEST(STDIO_TEST, snprintf_a) {
   char buf[BUFSIZ];
   EXPECT_EQ(23, snprintf(buf, sizeof(buf), "<%a>", 9990.235));
   EXPECT_STREQ("<0x1.3831e147ae148p+13>", buf);
 }
 
-TEST(stdio, snprintf_lc) {
+TEST(STDIO_TEST, snprintf_lc) {
   char buf[BUFSIZ];
   wint_t wc = L'a';
   EXPECT_EQ(3, snprintf(buf, sizeof(buf), "<%lc>", wc));
   EXPECT_STREQ("<a>", buf);
 }
 
-TEST(stdio, snprintf_ls) {
+TEST(STDIO_TEST, snprintf_ls) {
   char buf[BUFSIZ];
   wchar_t* ws = NULL;
   EXPECT_EQ(8, snprintf(buf, sizeof(buf), "<%ls>", ws));
@@ -265,7 +271,7 @@
   EXPECT_STREQ("<hi>", buf);
 }
 
-TEST(stdio, snprintf_n) {
+TEST(STDIO_TEST, snprintf_n) {
 #if defined(__BIONIC__)
   // http://b/14492135
   char buf[32];
@@ -278,7 +284,7 @@
 #endif
 }
 
-TEST(stdio, snprintf_smoke) {
+TEST(STDIO_TEST, snprintf_smoke) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "a");
@@ -401,7 +407,7 @@
   EXPECT_STREQ(minus_inf, buf) << fmt_plus;
 }
 
-TEST(stdio, snprintf_inf_nan) {
+TEST(STDIO_TEST, snprintf_inf_nan) {
   CheckInfNan(snprintf, "%a", "%+a", "-inf", "inf", "+inf", "-nan", "nan", "+nan");
   CheckInfNan(snprintf, "%A", "%+A", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN");
   CheckInfNan(snprintf, "%e", "%+e", "-inf", "inf", "+inf", "-nan", "nan", "+nan");
@@ -412,7 +418,7 @@
   CheckInfNan(snprintf, "%G", "%+G", "-INF", "INF", "+INF", "-NAN", "NAN", "+NAN");
 }
 
-TEST(stdio, wsprintf_inf_nan) {
+TEST(STDIO_TEST, wsprintf_inf_nan) {
   CheckInfNan(swprintf, L"%a", L"%+a", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan");
   CheckInfNan(swprintf, L"%A", L"%+A", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN");
   CheckInfNan(swprintf, L"%e", L"%+e", L"-inf", L"inf", L"+inf", L"-nan", L"nan", L"+nan");
@@ -423,19 +429,19 @@
   CheckInfNan(swprintf, L"%G", L"%+G", L"-INF", L"INF", L"+INF", L"-NAN", L"NAN", L"+NAN");
 }
 
-TEST(stdio, snprintf_d_INT_MAX) {
+TEST(STDIO_TEST, snprintf_d_INT_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%d", INT_MAX);
   EXPECT_STREQ("2147483647", buf);
 }
 
-TEST(stdio, snprintf_d_INT_MIN) {
+TEST(STDIO_TEST, snprintf_d_INT_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%d", INT_MIN);
   EXPECT_STREQ("-2147483648", buf);
 }
 
-TEST(stdio, snprintf_ld_LONG_MAX) {
+TEST(STDIO_TEST, snprintf_ld_LONG_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%ld", LONG_MAX);
 #if __LP64__
@@ -445,7 +451,7 @@
 #endif
 }
 
-TEST(stdio, snprintf_ld_LONG_MIN) {
+TEST(STDIO_TEST, snprintf_ld_LONG_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%ld", LONG_MIN);
 #if __LP64__
@@ -455,19 +461,19 @@
 #endif
 }
 
-TEST(stdio, snprintf_lld_LLONG_MAX) {
+TEST(STDIO_TEST, snprintf_lld_LLONG_MAX) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%lld", LLONG_MAX);
   EXPECT_STREQ("9223372036854775807", buf);
 }
 
-TEST(stdio, snprintf_lld_LLONG_MIN) {
+TEST(STDIO_TEST, snprintf_lld_LLONG_MIN) {
   char buf[BUFSIZ];
   snprintf(buf, sizeof(buf), "%lld", LLONG_MIN);
   EXPECT_STREQ("-9223372036854775808", buf);
 }
 
-TEST(stdio, snprintf_e) {
+TEST(STDIO_TEST, snprintf_e) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "%e", 1.5);
@@ -477,7 +483,7 @@
   EXPECT_STREQ("1.500000e+00", buf);
 }
 
-TEST(stdio, snprintf_negative_zero_5084292) {
+TEST(STDIO_TEST, snprintf_negative_zero_5084292) {
   char buf[BUFSIZ];
 
   snprintf(buf, sizeof(buf), "%e", -0.0);
@@ -498,7 +504,7 @@
   EXPECT_STREQ("-0X0P+0", buf);
 }
 
-TEST(stdio, snprintf_utf8_15439554) {
+TEST(STDIO_TEST, snprintf_utf8_15439554) {
   locale_t cloc = newlocale(LC_ALL, "C.UTF-8", 0);
   locale_t old_locale = uselocale(cloc);
 
@@ -522,7 +528,7 @@
   freelocale(cloc);
 }
 
-TEST(stdio, fprintf_failures_7229520) {
+TEST(STDIO_TEST, fprintf_failures_7229520) {
   // http://b/7229520
   FILE* fp;
 
@@ -545,7 +551,7 @@
   ASSERT_EQ(-1, fclose(fp));
 }
 
-TEST(stdio, popen) {
+TEST(STDIO_TEST, popen) {
   FILE* fp = popen("cat /proc/version", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -557,7 +563,7 @@
   ASSERT_EQ(0, pclose(fp));
 }
 
-TEST(stdio, getc) {
+TEST(STDIO_TEST, getc) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
   ASSERT_EQ('L', getc(fp));
@@ -568,14 +574,14 @@
   fclose(fp);
 }
 
-TEST(stdio, putc) {
+TEST(STDIO_TEST, putc) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
   ASSERT_EQ(EOF, putc('x', fp));
   fclose(fp);
 }
 
-TEST(stdio, sscanf) {
+TEST(STDIO_TEST, sscanf) {
   char s1[123];
   int i1;
   double d1;
@@ -586,7 +592,7 @@
   ASSERT_DOUBLE_EQ(1.23, d1);
 }
 
-TEST(stdio, cantwrite_EBADF) {
+TEST(STDIO_TEST, cantwrite_EBADF) {
   // If we open a file read-only...
   FILE* fp = fopen("/proc/version", "r");
 
@@ -626,7 +632,7 @@
 
 // Tests that we can only have a consistent and correct fpos_t when using
 // f*pos functions (i.e. fpos doesn't get inside a multi byte character).
-TEST(stdio, consistent_fpos_t) {
+TEST(STDIO_TEST, consistent_fpos_t) {
   ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
   uselocale(LC_GLOBAL_LOCALE);
 
@@ -690,7 +696,7 @@
 }
 
 // Exercise the interaction between fpos and seek.
-TEST(stdio, fpos_t_and_seek) {
+TEST(STDIO_TEST, fpos_t_and_seek) {
   ASSERT_STREQ("C.UTF-8", setlocale(LC_CTYPE, "C.UTF-8"));
   uselocale(LC_GLOBAL_LOCALE);
 
@@ -750,7 +756,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen) {
+TEST(STDIO_TEST, fmemopen) {
   char buf[16];
   memset(buf, 0, sizeof(buf));
   FILE* fp = fmemopen(buf, sizeof(buf), "r+");
@@ -770,7 +776,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen_NULL) {
+TEST(STDIO_TEST, fmemopen_NULL) {
   FILE* fp = fmemopen(nullptr, 128, "r+");
   ASSERT_NE(EOF, fputs("xyz\n", fp));
 
@@ -784,7 +790,7 @@
   fclose(fp);
 }
 
-TEST(stdio, fmemopen_EINVAL) {
+TEST(STDIO_TEST, fmemopen_EINVAL) {
   char buf[16];
 
   // Invalid size.
@@ -798,7 +804,7 @@
   ASSERT_EQ(EINVAL, errno);
 }
 
-TEST(stdio, open_memstream) {
+TEST(STDIO_TEST, open_memstream) {
   char* p = nullptr;
   size_t size = 0;
   FILE* fp = open_memstream(&p, &size);
@@ -810,7 +816,7 @@
   free(p);
 }
 
-TEST(stdio, open_memstream_EINVAL) {
+TEST(STDIO_TEST, open_memstream_EINVAL) {
 #if defined(__BIONIC__)
   char* p;
   size_t size;
@@ -829,7 +835,7 @@
 #endif
 }
 
-TEST(stdio, fdopen_CLOEXEC) {
+TEST(STDIO_TEST, fdopen_CLOEXEC) {
   int fd = open("/proc/version", O_RDONLY);
   ASSERT_TRUE(fd != -1);
 
@@ -850,7 +856,7 @@
   close(fd);
 }
 
-TEST(stdio, freopen_CLOEXEC) {
+TEST(STDIO_TEST, freopen_CLOEXEC) {
   FILE* fp = fopen("/proc/version", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -871,7 +877,7 @@
 
 // https://code.google.com/p/android/issues/detail?id=81155
 // http://b/18556607
-TEST(stdio, fread_unbuffered_pathological_performance) {
+TEST(STDIO_TEST, fread_unbuffered_pathological_performance) {
   FILE* fp = fopen("/dev/zero", "r");
   ASSERT_TRUE(fp != NULL);
 
@@ -900,7 +906,7 @@
   }
 }
 
-TEST(stdio, fread_EOF) {
+TEST(STDIO_TEST, fread_EOF) {
   std::string digits("0123456789");
   FILE* fp = fmemopen(&digits[0], digits.size(), "r");
 
@@ -934,11 +940,11 @@
   fclose(fp);
 }
 
-TEST(stdio, fread_from_write_only_stream_slow_path) {
+TEST(STDIO_TEST, fread_from_write_only_stream_slow_path) {
   test_fread_from_write_only_stream(1);
 }
 
-TEST(stdio, fread_from_write_only_stream_fast_path) {
+TEST(STDIO_TEST, fread_from_write_only_stream_fast_path) {
   test_fread_from_write_only_stream(64*1024);
 }
 
@@ -967,16 +973,16 @@
   fclose(fp);
 }
 
-TEST(stdio, fwrite_after_fread_slow_path) {
+TEST(STDIO_TEST, fwrite_after_fread_slow_path) {
   test_fwrite_after_fread(16);
 }
 
-TEST(stdio, fwrite_after_fread_fast_path) {
+TEST(STDIO_TEST, fwrite_after_fread_fast_path) {
   test_fwrite_after_fread(64*1024);
 }
 
 // http://b/19172514
-TEST(stdio, fread_after_fseek) {
+TEST(STDIO_TEST, fread_after_fseek) {
   TemporaryFile tf;
 
   FILE* fp = fopen(tf.filename, "w+");
@@ -1014,7 +1020,7 @@
 }
 
 // https://code.google.com/p/android/issues/detail?id=184847
-TEST(stdio, fread_EOF_184847) {
+TEST(STDIO_TEST, fread_EOF_184847) {
   TemporaryFile tf;
   char buf[6] = {0};
 
diff --git a/tests/string_nofortify_test.cpp b/tests/string_nofortify_test.cpp
new file mode 100644
index 0000000..1c0be35
--- /dev/null
+++ b/tests/string_nofortify_test.cpp
@@ -0,0 +1,12 @@
+
+#ifdef _FORTIFY_SOURCE
+#undef _FORTIFY_SOURCE
+#endif
+
+#define NOFORTIFY
+
+#include "string_test.cpp"
+
+#if defined(_FORTIFY_SOURCE)
+#error "_FORTIFY_SOURCE has been redefined, fix the code to remove this redefinition."
+#endif
diff --git a/tests/string_test.cpp b/tests/string_test.cpp
index 842e1c7..96b4143 100644
--- a/tests/string_test.cpp
+++ b/tests/string_test.cpp
@@ -26,6 +26,12 @@
 
 #include "buffer_tests.h"
 
+#if defined(NOFORTIFY)
+#define STRING_TEST string_nofortify
+#else
+#define STRING_TEST string
+#endif
+
 #if defined(__BIONIC__)
 #define STRLCPY_SUPPORTED
 #define STRLCAT_SUPPORTED
@@ -45,7 +51,7 @@
   return 0;
 }
 
-TEST(string, strerror) {
+TEST(STRING_TEST, strerror) {
   // Valid.
   ASSERT_STREQ("Success", strerror(0));
   ASSERT_STREQ("Operation not permitted", strerror(1));
@@ -63,7 +69,7 @@
 #endif // __BIONIC__
 
 // glibc's strerror isn't thread safe, only its strsignal.
-TEST(string, strerror_concurrent) {
+TEST(STRING_TEST, strerror_concurrent) {
 #if defined(__BIONIC__)
   const char* strerror1001 = strerror(1001);
   ASSERT_STREQ("Unknown error 1001", strerror1001);
@@ -80,7 +86,7 @@
 #endif // __BIONIC__
 }
 
-TEST(string, gnu_strerror_r) {
+TEST(STRING_TEST, gnu_strerror_r) {
   char buf[256];
 
   // Note that glibc doesn't necessarily write into the buffer.
@@ -110,7 +116,7 @@
   ASSERT_EQ(0, errno);
 }
 
-TEST(string, strsignal) {
+TEST(STRING_TEST, strsignal) {
   // A regular signal.
   ASSERT_STREQ("Hangup", strsignal(1));
 
@@ -130,7 +136,7 @@
   return reinterpret_cast<void*>(equal);
 }
 
-TEST(string, strsignal_concurrent) {
+TEST(STRING_TEST, strsignal_concurrent) {
   const char* strsignal1001 = strsignal(1001);
   ASSERT_STREQ("Unknown signal 1001", strsignal1001);
 
@@ -243,7 +249,7 @@
 template<class Character>
 size_t StringTestState<Character>::alignments_size = sizeof(alignments)/sizeof(size_t);
 
-TEST(string, strcat) {
+TEST(STRING_TEST, strcat) {
   StringTestState<char> state(SMALL);
   for (size_t i = 1; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -264,7 +270,7 @@
 }
 
 // one byte target with "\0" source
-TEST(string, strcpy2) {
+TEST(STRING_TEST, strcpy2) {
   char buf[1];
   char* orig = strdup("");
   ASSERT_EQ(buf, strcpy(buf, orig));
@@ -273,7 +279,7 @@
 }
 
 // multibyte target where we under fill target
-TEST(string, strcpy3) {
+TEST(STRING_TEST, strcpy3) {
   char buf[10];
   char* orig = strdup("12345");
   memset(buf, 'A', sizeof(buf));
@@ -287,7 +293,7 @@
 }
 
 // multibyte target where we fill target exactly
-TEST(string, strcpy4) {
+TEST(STRING_TEST, strcpy4) {
   char buf[10];
   char* orig = strdup("123456789");
   memset(buf, 'A', sizeof(buf));
@@ -297,7 +303,7 @@
 }
 
 // one byte target with "\0" source
-TEST(string, stpcpy2) {
+TEST(STRING_TEST, stpcpy2) {
   char buf[1];
   char* orig = strdup("");
   ASSERT_EQ(buf, stpcpy(buf, orig));
@@ -306,7 +312,7 @@
 }
 
 // multibyte target where we under fill target
-TEST(string, stpcpy3) {
+TEST(STRING_TEST, stpcpy3) {
   char buf[10];
   char* orig = strdup("12345");
   memset(buf, 'A', sizeof(buf));
@@ -320,7 +326,7 @@
 }
 
 // multibyte target where we fill target exactly
-TEST(string, stpcpy4) {
+TEST(STRING_TEST, stpcpy4) {
   char buf[10];
   char* orig = strdup("123456789");
   memset(buf, 'A', sizeof(buf));
@@ -329,7 +335,7 @@
   free(orig);
 }
 
-TEST(string, strcat2) {
+TEST(STRING_TEST, strcat2) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -342,7 +348,7 @@
   ASSERT_EQ('A',  buf[9]);
 }
 
-TEST(string, strcat3) {
+TEST(STRING_TEST, strcat3) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -352,7 +358,7 @@
   ASSERT_STREQ("a01234567", buf);
 }
 
-TEST(string, strncat2) {
+TEST(STRING_TEST, strncat2) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -365,7 +371,7 @@
   ASSERT_EQ('A',  buf[9]);
 }
 
-TEST(string, strncat3) {
+TEST(STRING_TEST, strncat3) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -378,7 +384,7 @@
   ASSERT_EQ('A',  buf[9]);
 }
 
-TEST(string, strncat4) {
+TEST(STRING_TEST, strncat4) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -388,7 +394,7 @@
   ASSERT_STREQ("a01234567", buf);
 }
 
-TEST(string, strncat5) {
+TEST(STRING_TEST, strncat5) {
   char buf[10];
   memset(buf, 'A', sizeof(buf));
   buf[0] = 'a';
@@ -398,14 +404,14 @@
   ASSERT_STREQ("a01234567", buf);
 }
 
-TEST(string, strchr_with_0) {
+TEST(STRING_TEST, strchr_with_0) {
   char buf[10];
   const char* s = "01234";
   memcpy(buf, s, strlen(s) + 1);
   EXPECT_TRUE(strchr(buf, '\0') == (buf + strlen(s)));
 }
 
-TEST(string, strchr_multiple) {
+TEST(STRING_TEST, strchr_multiple) {
   char str[128];
   memset(str, 'a', sizeof(str) - 1);
   str[sizeof(str)-1] = '\0';
@@ -423,7 +429,7 @@
   }
 }
 
-TEST(string, strchr) {
+TEST(STRING_TEST, strchr) {
   int seek_char = 'R';
 
   StringTestState<char> state(SMALL);
@@ -454,14 +460,14 @@
   }
 }
 
-TEST(string, strchrnul) {
+TEST(STRING_TEST, strchrnul) {
   const char* s = "01234222";
   EXPECT_TRUE(strchrnul(s, '2') == &s[2]);
   EXPECT_TRUE(strchrnul(s, '8') == (s + strlen(s)));
   EXPECT_TRUE(strchrnul(s, '\0') == (s + strlen(s)));
 }
 
-TEST(string, strcmp) {
+TEST(STRING_TEST, strcmp) {
   StringTestState<char> state(SMALL);
   for (size_t i = 1; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -496,7 +502,7 @@
   }
 }
 
-TEST(string, stpcpy) {
+TEST(STRING_TEST, stpcpy) {
   StringTestState<char> state(SMALL);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
     size_t pos = random() % state.MAX_LEN;
@@ -520,7 +526,7 @@
   }
 }
 
-TEST(string, strcpy) {
+TEST(STRING_TEST, strcpy) {
   StringTestState<char> state(SMALL);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
     size_t pos = random() % state.MAX_LEN;
@@ -544,7 +550,7 @@
   }
 }
 
-TEST(string, strlcat) {
+TEST(STRING_TEST, strlcat) {
 #if defined(STRLCAT_SUPPORTED)
   StringTestState<char> state(SMALL);
   for (size_t i = 0; i < state.n; i++) {
@@ -573,7 +579,7 @@
 #endif
 }
 
-TEST(string, strlcpy) {
+TEST(STRING_TEST, strlcpy) {
 #if defined(STRLCPY_SUPPORTED)
   StringTestState<char> state(SMALL);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -605,7 +611,7 @@
 #endif
 }
 
-TEST(string, strncat) {
+TEST(STRING_TEST, strncat) {
   StringTestState<char> state(SMALL);
   for (size_t i = 1; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -629,7 +635,7 @@
   }
 }
 
-TEST(string, strncmp) {
+TEST(STRING_TEST, strncmp) {
   StringTestState<char> state(SMALL);
   for (size_t i = 1; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -664,7 +670,7 @@
   }
 }
 
-TEST(string, stpncpy) {
+TEST(STRING_TEST, stpncpy) {
   StringTestState<char> state(SMALL);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
     memset(state.ptr1, 'J', state.MAX_LEN);
@@ -699,7 +705,7 @@
   }
 }
 
-TEST(string, strncpy) {
+TEST(STRING_TEST, strncpy) {
   StringTestState<char> state(SMALL);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
     // Choose a random value to fill the string, except \0 (string terminator),
@@ -736,7 +742,7 @@
   }
 }
 
-TEST(string, strrchr) {
+TEST(STRING_TEST, strrchr) {
   int seek_char = 'M';
   StringTestState<char> state(SMALL);
   for (size_t i = 1; i < state.n; i++) {
@@ -766,7 +772,7 @@
   }
 }
 
-TEST(string, memchr) {
+TEST(STRING_TEST, memchr) {
   int seek_char = 'N';
   StringTestState<char> state(SMALL);
   for (size_t i = 0; i < state.n; i++) {
@@ -787,7 +793,7 @@
   }
 }
 
-TEST(string, memchr_zero) {
+TEST(STRING_TEST, memchr_zero) {
   uint8_t* buffer;
   ASSERT_EQ(0, posix_memalign(reinterpret_cast<void**>(&buffer), 64, 64));
   memset(buffer, 10, 64);
@@ -795,7 +801,7 @@
   ASSERT_TRUE(NULL == memchr(buffer, 10, 0));
 }
 
-TEST(string, memrchr) {
+TEST(STRING_TEST, memrchr) {
   int seek_char = 'P';
   StringTestState<char> state(SMALL);
   for (size_t i = 0; i < state.n; i++) {
@@ -816,7 +822,7 @@
   }
 }
 
-TEST(string, memcmp) {
+TEST(STRING_TEST, memcmp) {
   StringTestState<char> state(SMALL);
   for (size_t i = 0; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -836,7 +842,7 @@
   }
 }
 
-TEST(string, wmemcmp) {
+TEST(STRING_TEST, wmemcmp) {
   StringTestState<wchar_t> state(SMALL);
 
   for (size_t i = 0; i < state.n; i++) {
@@ -858,7 +864,7 @@
   }
 }
 
-TEST(string, memcpy) {
+TEST(STRING_TEST, memcpy) {
   StringTestState<char> state(LARGE);
   int rand = 4;
   for (size_t i = 0; i < state.n - 1; i++) {
@@ -878,7 +884,7 @@
   }
 }
 
-TEST(string, memset) {
+TEST(STRING_TEST, memset) {
   StringTestState<char> state(LARGE);
   char ch = 'P';
   for (size_t i = 0; i < state.n - 1; i++) {
@@ -898,7 +904,7 @@
   }
 }
 
-TEST(string, memmove) {
+TEST(STRING_TEST, memmove) {
   StringTestState<char> state(LARGE);
   for (size_t i = 0; i < state.n - 1; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -917,7 +923,7 @@
   }
 }
 
-TEST(string, memmove_cache_size) {
+TEST(STRING_TEST, memmove_cache_size) {
   size_t len = 600000;
   int max_alignment = 31;
   int alignments[] = {0, 5, 11, 29, 30};
@@ -955,7 +961,7 @@
 
 #define MEMMOVE_DATA_SIZE (1024*1024*3)
 
-TEST(string, memmove_check) {
+TEST(STRING_TEST, memmove_check) {
   char* buffer = reinterpret_cast<char*>(malloc(MEMMOVE_DATA_SIZE));
   ASSERT_TRUE(buffer != NULL);
 
@@ -996,7 +1002,7 @@
   }
 }
 
-TEST(string, bcopy) {
+TEST(STRING_TEST, bcopy) {
   StringTestState<char> state(LARGE);
   for (size_t i = 0; i < state.n; i++) {
     for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
@@ -1013,7 +1019,7 @@
   }
 }
 
-TEST(string, bzero) {
+TEST(STRING_TEST, bzero) {
   StringTestState<char> state(LARGE);
   for (state.BeginIterations(); state.HasNextIteration(); state.NextIteration()) {
     memset(state.ptr1, 'R', state.MAX_LEN);
@@ -1039,11 +1045,11 @@
   ASSERT_TRUE(memcmp(src, dst, len) == 0);
 }
 
-TEST(string, memcpy_align) {
+TEST(STRING_TEST, memcpy_align) {
   RunSrcDstBufferAlignTest(LARGE, DoMemcpyTest);
 }
 
-TEST(string, memcpy_overread) {
+TEST(STRING_TEST, memcpy_overread) {
   RunSrcDstBufferOverreadTest(DoMemcpyTest);
 }
 
@@ -1055,11 +1061,11 @@
   ASSERT_TRUE(memcmp(src, dst, len) == 0);
 }
 
-TEST(string, memmove_align) {
+TEST(STRING_TEST, memmove_align) {
   RunSrcDstBufferAlignTest(LARGE, DoMemmoveTest);
 }
 
-TEST(string, memmove_overread) {
+TEST(STRING_TEST, memmove_overread) {
   RunSrcDstBufferOverreadTest(DoMemmoveTest);
 }
 
@@ -1074,7 +1080,7 @@
   }
 }
 
-TEST(string, memset_align) {
+TEST(STRING_TEST, memset_align) {
   RunSingleBufferAlignTest(LARGE, DoMemsetTest);
 }
 
@@ -1086,11 +1092,11 @@
   }
 }
 
-TEST(string, strlen_align) {
+TEST(STRING_TEST, strlen_align) {
   RunSingleBufferAlignTest(LARGE, DoStrlenTest);
 }
 
-TEST(string, strlen_overread) {
+TEST(STRING_TEST, strlen_overread) {
   RunSingleBufferOverreadTest(DoStrlenTest);
 }
 
@@ -1105,11 +1111,11 @@
   }
 }
 
-TEST(string, strcpy_align) {
+TEST(STRING_TEST, strcpy_align) {
   RunSrcDstBufferAlignTest(LARGE, DoStrcpyTest);
 }
 
-TEST(string, strcpy_overread) {
+TEST(STRING_TEST, strcpy_overread) {
   RunSrcDstBufferOverreadTest(DoStrcpyTest);
 }
 
@@ -1126,7 +1132,7 @@
 }
 #endif
 
-TEST(string, strlcpy_align) {
+TEST(STRING_TEST, strlcpy_align) {
 #if defined(STRLCPY_SUPPORTED)
   RunSrcDstBufferAlignTest(LARGE, DoStrlcpyTest);
 #else
@@ -1134,7 +1140,7 @@
 #endif
 }
 
-TEST(string, strlcpy_overread) {
+TEST(STRING_TEST, strlcpy_overread) {
 #if defined(STRLCPY_SUPPORTED)
   RunSrcDstBufferOverreadTest(DoStrlcpyTest);
 #else
@@ -1154,11 +1160,11 @@
   }
 }
 
-TEST(string, stpcpy_align) {
+TEST(STRING_TEST, stpcpy_align) {
   RunSrcDstBufferAlignTest(LARGE, DoStpcpyTest);
 }
 
-TEST(string, stpcpy_overread) {
+TEST(STRING_TEST, stpcpy_overread) {
   RunSrcDstBufferOverreadTest(DoStpcpyTest);
 }
 
@@ -1214,11 +1220,11 @@
   }
 }
 
-TEST(string, strcat_align) {
+TEST(STRING_TEST, strcat_align) {
   RunSrcDstBufferAlignTest(MEDIUM, DoStrcatTest, LargeSetIncrement);
 }
 
-TEST(string, strcat_overread) {
+TEST(STRING_TEST, strcat_overread) {
   RunSrcDstBufferOverreadTest(DoStrcatTest);
 }
 
@@ -1262,7 +1268,7 @@
 }
 #endif
 
-TEST(string, strlcat_align) {
+TEST(STRING_TEST, strlcat_align) {
 #if defined(STRLCAT_SUPPORTED)
   RunSrcDstBufferAlignTest(MEDIUM, DoStrlcatTest, LargeSetIncrement);
 #else
@@ -1270,7 +1276,7 @@
 #endif
 }
 
-TEST(string, strlcat_overread) {
+TEST(STRING_TEST, strlcat_overread) {
 #if defined(STRLCAT_SUPPORTED)
   RunSrcDstBufferOverreadTest(DoStrlcatTest);
 #else
@@ -1323,11 +1329,11 @@
   }
 }
 
-TEST(string, strcmp_align) {
+TEST(STRING_TEST, strcmp_align) {
   RunCmpBufferAlignTest(MEDIUM, DoStrcmpTest, DoStrcmpFailTest, LargeSetIncrement);
 }
 
-TEST(string, strcmp_overread) {
+TEST(STRING_TEST, strcmp_overread) {
   RunCmpBufferOverreadTest(DoStrcmpTest, DoStrcmpFailTest);
 }
 
@@ -1355,11 +1361,11 @@
   ASSERT_NE(0, memcmp(buf1, buf2, len));
 }
 
-TEST(string, memcmp_align) {
+TEST(STRING_TEST, memcmp_align) {
   RunCmpBufferAlignTest(MEDIUM, DoMemcmpTest, DoMemcmpFailTest, LargeSetIncrement);
 }
 
-TEST(string, memcmp_overread) {
+TEST(STRING_TEST, memcmp_overread) {
   RunCmpBufferOverreadTest(DoMemcmpTest, DoMemcmpFailTest);
 }
 
@@ -1381,11 +1387,11 @@
   }
 }
 
-TEST(string, strchr_align) {
+TEST(STRING_TEST, strchr_align) {
   RunSingleBufferAlignTest(MEDIUM, DoStrchrTest);
 }
 
-TEST(string, strchr_overread) {
+TEST(STRING_TEST, strchr_overread) {
   RunSingleBufferOverreadTest(DoStrchrTest);
 }
 
@@ -1396,7 +1402,7 @@
   ASSERT_EQ(0, errno) << in;
 }
 
-TEST(string, __gnu_basename) {
+TEST(STRING_TEST, __gnu_basename) {
   TestBasename("", "");
   TestBasename("/usr/lib", "lib");
   TestBasename("/usr/", "");
@@ -1408,7 +1414,7 @@
   TestBasename("//usr//lib//", "");
 }
 
-TEST(string, strnlen_147048) {
+TEST(STRING_TEST, strnlen_147048) {
   // https://code.google.com/p/android/issues/detail?id=147048
   char stack_src[64] = {0};
   EXPECT_EQ(0U, strnlen(stack_src, 1024*1024*1024));
@@ -1418,11 +1424,11 @@
   delete[] heap_src;
 }
 
-TEST(string, strnlen_74741) {
+TEST(STRING_TEST, strnlen_74741) {
   ASSERT_EQ(4U, strnlen("test", SIZE_MAX));
 }
 
-TEST(string, mempcpy) {
+TEST(STRING_TEST, mempcpy) {
   char dst[6];
   ASSERT_EQ(&dst[4], reinterpret_cast<char*>(mempcpy(dst, "hello", 4)));
 }
diff --git a/tests/strings_nofortify_test.cpp b/tests/strings_nofortify_test.cpp
new file mode 100644
index 0000000..36eee75
--- /dev/null
+++ b/tests/strings_nofortify_test.cpp
@@ -0,0 +1,12 @@
+
+#ifdef _FORTIFY_SOURCE
+#undef _FORTIFY_SOURCE
+#endif
+
+#define NOFORTIFY
+
+#include "strings_test.cpp"
+
+#if defined(_FORTIFY_SOURCE)
+#error "_FORTIFY_SOURCE has been redefined, fix the code to remove this redefinition."
+#endif
diff --git a/tests/strings_test.cpp b/tests/strings_test.cpp
index 823aa4f..1716843 100644
--- a/tests/strings_test.cpp
+++ b/tests/strings_test.cpp
@@ -20,7 +20,13 @@
 #include <locale.h>
 #include <strings.h>
 
-TEST(strings, ffs) {
+#if defined(NOFORTIFY)
+#define STRINGS_TEST strings_nofortify
+#else
+#define STRINGS_TEST strings
+#endif
+
+TEST(STRINGS_TEST, ffs) {
   ASSERT_EQ( 0, ffs(0x00000000));
   ASSERT_EQ( 1, ffs(0x00000001));
   ASSERT_EQ( 6, ffs(0x00000020));
@@ -32,13 +38,13 @@
   ASSERT_EQ(32, ffs(0x80000000));
 }
 
-TEST(strings, strcasecmp) {
+TEST(STRINGS_TEST, strcasecmp) {
   ASSERT_EQ(0, strcasecmp("hello", "HELLO"));
   ASSERT_LT(strcasecmp("hello1", "hello2"), 0);
   ASSERT_GT(strcasecmp("hello2", "hello1"), 0);
 }
 
-TEST(strings, strcasecmp_l) {
+TEST(STRINGS_TEST, strcasecmp_l) {
   locale_t l = newlocale(LC_ALL, "C", 0);
   ASSERT_EQ(0, strcasecmp_l("hello", "HELLO", l));
   ASSERT_LT(strcasecmp_l("hello1", "hello2", l), 0);
@@ -46,14 +52,14 @@
   freelocale(l);
 }
 
-TEST(strings, strncasecmp) {
+TEST(STRINGS_TEST, strncasecmp) {
   ASSERT_EQ(0, strncasecmp("hello", "HELLO", 3));
   ASSERT_EQ(0, strncasecmp("abcXX", "ABCYY", 3));
   ASSERT_LT(strncasecmp("hello1", "hello2", 6), 0);
   ASSERT_GT(strncasecmp("hello2", "hello1", 6), 0);
 }
 
-TEST(strings, strncasecmp_l) {
+TEST(STRINGS_TEST, strncasecmp_l) {
   locale_t l = newlocale(LC_ALL, "C", 0);
   ASSERT_EQ(0, strncasecmp_l("hello", "HELLO", 3, l));
   ASSERT_EQ(0, strncasecmp_l("abcXX", "ABCYY", 3, l));
diff --git a/tests/unistd_nofortify_test.cpp b/tests/unistd_nofortify_test.cpp
new file mode 100644
index 0000000..29966e9
--- /dev/null
+++ b/tests/unistd_nofortify_test.cpp
@@ -0,0 +1,12 @@
+
+#ifdef _FORTIFY_SOURCE
+#undef _FORTIFY_SOURCE
+#endif
+
+#define NOFORTIFY
+
+#include "unistd_test.cpp"
+
+#if defined(_FORTIFY_SOURCE)
+#error "_FORTIFY_SOURCE has been redefined, fix the code to remove this redefinition."
+#endif
diff --git a/tests/unistd_test.cpp b/tests/unistd_test.cpp
index 5e06b1f..5f412ce 100644
--- a/tests/unistd_test.cpp
+++ b/tests/unistd_test.cpp
@@ -35,6 +35,14 @@
 
 #include "private/get_cpu_count_from_string.h"
 
+#if defined(NOFORTIFY)
+#define UNISTD_TEST unistd_nofortify
+#define UNISTD_DEATHTEST unistd_nofortify_DeathTest
+#else
+#define UNISTD_TEST unistd
+#define UNISTD_DEATHTEST unistd_DeathTest
+#endif
+
 static void* get_brk() {
   return sbrk(0);
 }
@@ -44,7 +52,7 @@
   return reinterpret_cast<void*>((addr + mask) & ~mask);
 }
 
-TEST(unistd, brk) {
+TEST(UNISTD_TEST, brk) {
   void* initial_break = get_brk();
 
   // The kernel aligns the break to a page.
@@ -57,7 +65,7 @@
   ASSERT_EQ(get_brk(), new_break);
 }
 
-TEST(unistd, brk_ENOMEM) {
+TEST(UNISTD_TEST, brk_ENOMEM) {
   ASSERT_EQ(-1, brk(reinterpret_cast<void*>(-1)));
   ASSERT_EQ(ENOMEM, errno);
 }
@@ -70,7 +78,7 @@
 #define SBRK_MAX PTRDIFF_MAX
 #endif
 
-TEST(unistd, sbrk_ENOMEM) {
+TEST(UNISTD_TEST, sbrk_ENOMEM) {
 #if defined(__BIONIC__) && !defined(__LP64__)
   // There is no way to guarantee that all overflow conditions can be tested
   // without manipulating the underlying values of the current break.
@@ -141,7 +149,7 @@
 #endif
 }
 
-TEST(unistd, truncate) {
+TEST(UNISTD_TEST, truncate) {
   TemporaryFile tf;
   ASSERT_EQ(0, close(tf.fd));
   ASSERT_EQ(0, truncate(tf.filename, 123));
@@ -151,7 +159,7 @@
   ASSERT_EQ(123, sb.st_size);
 }
 
-TEST(unistd, truncate64) {
+TEST(UNISTD_TEST, truncate64) {
   TemporaryFile tf;
   ASSERT_EQ(0, close(tf.fd));
   ASSERT_EQ(0, truncate64(tf.filename, 123));
@@ -161,7 +169,7 @@
   ASSERT_EQ(123, sb.st_size);
 }
 
-TEST(unistd, ftruncate) {
+TEST(UNISTD_TEST, ftruncate) {
   TemporaryFile tf;
   ASSERT_EQ(0, ftruncate(tf.fd, 123));
   ASSERT_EQ(0, close(tf.fd));
@@ -171,7 +179,7 @@
   ASSERT_EQ(123, sb.st_size);
 }
 
-TEST(unistd, ftruncate64) {
+TEST(UNISTD_TEST, ftruncate64) {
   TemporaryFile tf;
   ASSERT_EQ(0, ftruncate64(tf.fd, 123));
   ASSERT_EQ(0, close(tf.fd));
@@ -181,7 +189,7 @@
   ASSERT_EQ(123, sb.st_size);
 }
 
-TEST(unistd, ftruncate_negative) {
+TEST(UNISTD_TEST, ftruncate_negative) {
   TemporaryFile tf;
   errno = 0;
   ASSERT_EQ(-1, ftruncate(tf.fd, -123));
@@ -193,7 +201,7 @@
   g_pause_test_flag = true;
 }
 
-TEST(unistd, pause) {
+TEST(UNISTD_TEST, pause) {
   ScopedSignalHandler handler(SIGALRM, PauseTestSignalHandler);
 
   alarm(1);
@@ -202,7 +210,7 @@
   ASSERT_TRUE(g_pause_test_flag);
 }
 
-TEST(unistd, read) {
+TEST(UNISTD_TEST, read) {
   int fd = open("/proc/version", O_RDONLY);
   ASSERT_TRUE(fd != -1);
 
@@ -216,7 +224,7 @@
   close(fd);
 }
 
-TEST(unistd, read_EBADF) {
+TEST(UNISTD_TEST, read_EBADF) {
   // read returns ssize_t which is 64-bits on LP64, so it's worth explicitly checking that
   // our syscall stubs correctly return a 64-bit -1.
   char buf[1];
@@ -224,7 +232,7 @@
   ASSERT_EQ(EBADF, errno);
 }
 
-TEST(unistd, syscall_long) {
+TEST(UNISTD_TEST, syscall_long) {
   // Check that syscall(3) correctly returns long results.
   // https://code.google.com/p/android/issues/detail?id=73952
   // We assume that the break is > 4GiB, but this is potentially flaky.
@@ -232,11 +240,11 @@
   ASSERT_EQ(p, static_cast<uintptr_t>(syscall(__NR_brk, 0)));
 }
 
-TEST(unistd, alarm) {
+TEST(UNISTD_TEST, alarm) {
   ASSERT_EQ(0U, alarm(0));
 }
 
-TEST(unistd, _exit) {
+TEST(UNISTD_TEST, _exit) {
   int pid = fork();
   ASSERT_NE(-1, pid) << strerror(errno);
 
@@ -250,21 +258,21 @@
   ASSERT_EQ(99, WEXITSTATUS(status));
 }
 
-TEST(unistd, getenv_unsetenv) {
+TEST(UNISTD_TEST, getenv_unsetenv) {
   ASSERT_EQ(0, setenv("test-variable", "hello", 1));
   ASSERT_STREQ("hello", getenv("test-variable"));
   ASSERT_EQ(0, unsetenv("test-variable"));
   ASSERT_TRUE(getenv("test-variable") == NULL);
 }
 
-TEST(unistd, unsetenv_EINVAL) {
+TEST(UNISTD_TEST, unsetenv_EINVAL) {
   EXPECT_EQ(-1, unsetenv(""));
   EXPECT_EQ(EINVAL, errno);
   EXPECT_EQ(-1, unsetenv("a=b"));
   EXPECT_EQ(EINVAL, errno);
 }
 
-TEST(unistd, setenv_EINVAL) {
+TEST(UNISTD_TEST, setenv_EINVAL) {
   EXPECT_EQ(-1, setenv(NULL, "value", 0));
   EXPECT_EQ(EINVAL, errno);
   EXPECT_EQ(-1, setenv(NULL, "value", 1));
@@ -279,7 +287,7 @@
   EXPECT_EQ(EINVAL, errno);
 }
 
-TEST(unistd, setenv) {
+TEST(UNISTD_TEST, setenv) {
   ASSERT_EQ(0, unsetenv("test-variable"));
 
   char a[] = "a";
@@ -305,7 +313,7 @@
   ASSERT_EQ(0, unsetenv("test-variable"));
 }
 
-TEST(unistd, putenv) {
+TEST(UNISTD_TEST, putenv) {
   ASSERT_EQ(0, unsetenv("a"));
 
   char* s1 = strdup("a=b");
@@ -326,7 +334,7 @@
   free(s2);
 }
 
-TEST(unistd, clearenv) {
+TEST(UNISTD_TEST, clearenv) {
   extern char** environ;
 
   // Guarantee that environ is not initially empty...
@@ -391,11 +399,11 @@
   close(fd);
 }
 
-TEST(unistd, fdatasync) {
+TEST(UNISTD_TEST, fdatasync) {
   TestFsyncFunction(fdatasync);
 }
 
-TEST(unistd, fsync) {
+TEST(UNISTD_TEST, fsync) {
   TestFsyncFunction(fsync);
 }
 
@@ -429,11 +437,11 @@
   }
 }
 
-TEST(unistd, getpid_caching_and_fork) {
+TEST(UNISTD_TEST, getpid_caching_and_fork) {
   TestGetPidCachingWithFork(fork);
 }
 
-TEST(unistd, getpid_caching_and_vfork) {
+TEST(UNISTD_TEST, getpid_caching_and_vfork) {
   TestGetPidCachingWithFork(vfork);
 }
 
@@ -442,7 +450,7 @@
   return 123;
 }
 
-TEST(unistd, getpid_caching_and_clone) {
+TEST(UNISTD_TEST, getpid_caching_and_clone) {
   pid_t parent_pid = getpid();
   ASSERT_EQ(syscall(__NR_getpid), parent_pid);
 
@@ -467,7 +475,7 @@
   return NULL;
 }
 
-TEST(unistd, getpid_caching_and_pthread_create) {
+TEST(UNISTD_TEST, getpid_caching_and_pthread_create) {
   pid_t parent_pid = getpid();
 
   pthread_t t;
@@ -480,13 +488,13 @@
   ASSERT_EQ(NULL, result);
 }
 
-class unistd_DeathTest : public BionicDeathTest {};
+class UNISTD_DEATHTEST : public BionicDeathTest {};
 
-TEST_F(unistd_DeathTest, abort) {
+TEST_F(UNISTD_DEATHTEST, abort) {
   ASSERT_EXIT(abort(), testing::KilledBySignal(SIGABRT), "");
 }
 
-TEST(unistd, sethostname) {
+TEST(UNISTD_TEST, sethostname) {
   // The permissions check happens before the argument check, so this will
   // fail for a different reason if you're running as root than if you're
   // not, but it'll fail either way. Checking that we have the symbol is about
@@ -494,7 +502,7 @@
   ASSERT_EQ(-1, sethostname("", -1));
 }
 
-TEST(unistd, gethostname) {
+TEST(UNISTD_TEST, gethostname) {
   char hostname[HOST_NAME_MAX + 1];
   memset(hostname, 0, sizeof(hostname));
 
@@ -517,7 +525,7 @@
   ASSERT_EQ(ENAMETOOLONG, errno);
 }
 
-TEST(unistd, pathconf_fpathconf) {
+TEST(UNISTD_TEST, pathconf_fpathconf) {
   TemporaryFile tf;
   long rc = 0L;
   // As a file system's block size is always power of 2, the configure values
@@ -538,7 +546,7 @@
 }
 
 
-TEST(unistd, _POSIX_macros_smoke) {
+TEST(UNISTD_TEST, _POSIX_macros_smoke) {
   // Make a tight verification of _POSIX_* / _POSIX2_* / _XOPEN_* macros, to prevent change by mistake.
   // Verify according to POSIX.1-2008.
   EXPECT_EQ(200809L, _POSIX_VERSION);
@@ -677,7 +685,7 @@
       << ret <<", Error Message: " << strerror(errno);
 }
 
-TEST(unistd, sysconf) {
+TEST(UNISTD_TEST, sysconf) {
   VERIFY_SYSCONF_POSIX_VERSION(_SC_ADVISORY_INFO);
   VERIFY_SYSCONF_POSITIVE(_SC_ARG_MAX);
   VERIFY_SYSCONF_POSITIVE(_SC_BC_BASE_MAX);
@@ -824,14 +832,14 @@
 #endif // defined(__BIONIC__)
 }
 
-TEST(unistd, get_cpu_count_from_string) {
+TEST(UNISTD_TEST, get_cpu_count_from_string) {
   ASSERT_EQ(0, GetCpuCountFromString(" "));
   ASSERT_EQ(1, GetCpuCountFromString("0"));
   ASSERT_EQ(40, GetCpuCountFromString("0-39"));
   ASSERT_EQ(4, GetCpuCountFromString("0, 1-2, 4\n"));
 }
 
-TEST(unistd, sysconf_SC_NPROCESSORS_ONLN) {
+TEST(UNISTD_TEST, sysconf_SC_NPROCESSORS_ONLN) {
   std::string line;
   ASSERT_TRUE(android::base::ReadFileToString("/sys/devices/system/cpu/online", &line));
   long online_cpus = 0;
@@ -846,7 +854,7 @@
   ASSERT_EQ(online_cpus, sysconf(_SC_NPROCESSORS_ONLN));
 }
 
-TEST(unistd, dup2_same) {
+TEST(UNISTD_TEST, dup2_same) {
   // POSIX says of dup2:
   // If fildes2 is already a valid open file descriptor ...
   // [and] fildes is equal to fildes2 ... dup2() shall return