1// weak_undef_test_2.cc -- test handling of weak undefined symbols for gold 2 3// Copyright (C) 2014-2020 Free Software Foundation, Inc. 4// Written by Cary Coutant <ccoutant@google.com>. 5 6// This file is part of gold. 7 8// This program is free software; you can redistribute it and/or modify 9// it under the terms of the GNU General Public License as published by 10// the Free Software Foundation; either version 3 of the License, or 11// (at your option) any later version. 12 13// This program is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17 18// You should have received a copy of the GNU General Public License 19// along with this program; if not, write to the Free Software 20// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21// MA 02110-1301, USA. 22 23// This file tests that we correctly deal with weak undefined symbols 24// when searching archive libraries. If we have a weak undefined symbol, 25// it should not cause us to link an archive library member that defines 26// that symbol. However, if the symbol is also listed in a -u option on 27// the command line, it should cause the archive member to be linked. 28 29 30#include <cstdio> 31 32// This symbol is defined in weak_undef_file3.cc, but we should 33// not load it from the library. 34extern int weak_undef_1 __attribute__ ((weak)); 35 36// This symbol is defined in weak_undef_file4.cc, but is also 37// listed in a -u option on the link command, so we should 38// load it from the library. 39extern int weak_undef_2 __attribute__ ((weak)); 40 41int *p1 = &weak_undef_1; 42 43int *p2 = &weak_undef_2; 44 45int 46main() 47{ 48 int status = 0; 49 50 if (&weak_undef_1 != NULL) 51 { 52 fprintf(stderr, "FAILED weak undef test 1: %s\n", 53 "&weak_undef_1 is not NULL"); 54 status = 1; 55 } 56 57 if (&weak_undef_2 == NULL) 58 { 59 fprintf(stderr, "FAILED weak undef test 2: %s\n", 60 "&weak_undef_2 is NULL"); 61 status = 1; 62 } 63 64 if (p1 != NULL) 65 { 66 fprintf(stderr, "FAILED weak undef test 3: %s\n", 67 "p1 is not NULL"); 68 status = 1; 69 } 70 71 if (p2 == NULL) 72 { 73 fprintf(stderr, "FAILED weak undef test 4: %s\n", 74 "p2 is NULL"); 75 status = 1; 76 } 77 78 return status; 79} 80