39 lines · cpp
1//===-- Loader test to check if tls size is read correctly ----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "src/sys/mman/mmap.h"10#include "test/IntegrationTest/test.h"11 12#include <errno.h>13#include <sys/mman.h>14 15constexpr int threadLocalDataSize = 101;16_Thread_local int a[threadLocalDataSize] = {123};17 18TEST_MAIN([[maybe_unused]] int argc, [[maybe_unused]] char **argv,19 [[maybe_unused]] char **envp) {20 ASSERT_TRUE(a[0] == 123);21 22 for (int i = 1; i < threadLocalDataSize; ++i)23 a[i] = i;24 for (int i = 1; i < threadLocalDataSize; ++i)25 ASSERT_TRUE(a[i] == i);26 27 // Call mmap with bad params so that an error value is28 // set in errno. Since errno is implemented using a thread29 // local var, this helps us test setting of errno and30 // reading it back.31 ASSERT_ERRNO_SUCCESS();32 void *addr = LIBC_NAMESPACE::mmap(nullptr, 0, PROT_READ,33 MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);34 ASSERT_TRUE(addr == MAP_FAILED);35 ASSERT_ERRNO_EQ(EINVAL);36 37 return 0;38}39