// weak_undef_test.cc -- test handling of weak undefined symbols for gold

// Copyright 2008 Free Software Foundation, Inc.
// Written by Cary Coutant <ccoutant@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.

// We test that we correctly deal with weak undefined symbols.
// We need to make sure that a weak undefined symbol in the main
// program is resolved to zero by the linker and that no dynamic
// relocation is generated.  We also make sure that a weak undefined
// symbol in a shared library can resolve to a symbol in the main
// program.

// This file will be linked with a shared library that does not
// define the symbol, so that the symbol remains undefined.
// Through the use of LD_LIBRARY_PATH, the program will load
// an alternate shared library that does define the symbol,
// so that we can detect whether the symbol was left for runtime
// resolution.


#include <cstdio>
#include "weak_undef.h"

extern int no_such_symbol_ __attribute__ ((weak));

int *p1 = &no_such_symbol_;

int v2 = 42;

int
main()
{
  int status = 0;
  int v;

  if ((v = t1()) != 2)
    {
      fprintf(stderr, "FAILED weak undef test 1: %s\n",
              "bound to wrong library");
      status = 1;
    }

  if ((v = t2()) != 42)
    {
      fprintf(stderr, "FAILED weak undef test 2: expected %d, got %d\n",
              42, v);
      status = 1;
    }

  if ((v = t3()) != 42)
    {
      fprintf(stderr, "FAILED weak undef test 3: expected %d, got %d\n",
              42, v);
      status = 1;
    }

  if (&no_such_symbol_ != NULL)
    {
      fprintf(stderr, "FAILED weak undef test 4: %s\n",
              "&no_such_symbol_ is not NULL");
      status = 1;
    }

  if (p1 != NULL)
    {
      fprintf(stderr, "FAILED weak undef test 5: %s\n",
              "p1 is not NULL");
      status = 1;
    }

  return status;
}
