1 // weak_undef_test_2.cc -- test handling of weak undefined symbols for gold 2 3 // Copyright (C) 2014 Free Software Foundation, Inc. 4 // Written by Cary Coutant <ccoutant (at) 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. 34 extern 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. 39 extern int weak_undef_2 __attribute__ ((weak)); 40 41 int *p1 = &weak_undef_1; 42 43 int *p2 = &weak_undef_2; 44 45 int 46 main() 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