// two_file_test_2_tls.cc -- a two file test case for gold, with a TLS symbol

// Copyright (C) 2006-2021 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.

// This file is part of gold.

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
// MA 02110-1301, USA.

// This tests references between files.  This is file 2, and
// two_file_test_1.cc is file 1.  See file 1 for details.

#include "two_file_test.h"

// 1  Code in file 1 calls code in file 2.

__thread int tls1 = 123;

int
t1_2()
{
  return tls1;
}

bool
t1a()
{
  return t1_2() == 123;
}

// 2  Code in file 1 refers to global data in file 2.

int v2 = 456;

// 3 Code in file 1 referes to common symbol in file 2.  This is
// initialized at runtime to 789.

int v3;

// 4  Code in file 1 refers to offset within global data in file 2.

char v4[] = "Hello, world";

// 5 Code in file 1 refers to offset within common symbol in file 2.
// This is initialized at runtime to a copy of v4.

char v5[13];

// 6  Data in file 1 refers to global data in file 2.  This reuses v2.

// 7  Data in file 1 refers to common symbol in file 2.  This reuses v3.

// 8 Data in file 1 refers to offset within global data in file 2.
// This reuses v4.

// 9 Data in file 1 refers to offset within common symbol in file 2.
// This reuses v5.

// 10 Data in file 1 refers to function in file 2.

int
f10()
{
  return 135;
}

// 11 Pass function pointer from file 1 to file 2.

int
f11b(int (*pfn)())
{
  return (*pfn)();
}

// 12 Compare address of function for equality in both files.

bool
(*f12())()
{
  return &t12;
}

// 13 Compare address of inline function for equality in both files.

void
(*f13())()
{
  return &f13i;
}

// 14 Compare string constants in file 1 and file 2.

const char*
f14()
{
  return TEST_STRING_CONSTANT;
}

// 15 Compare wide string constants in file 1 and file 2.

const wchar_t*
f15()
{
  return TEST_WIDE_STRING_CONSTANT;
}

// 17 File 1 checks array of string constants defined in file 2.

const char* t17data[T17_COUNT] =
{
  "a", "b", "c", "d", "e"
};

// 18 File 1 checks string constants referenced directly in file 2.

const char*
f18(int i)
{
  switch (i)
    {
    case 0:
      return "a";
    case 1:
      return "b";
    case 2:
      return "c";
    case 3:
      return "d";
    case 4:
      return "e";
    default:
      return 0;
    }
}
