1 /* initpri2.c -- test mixing init_array and ctor priorities. 2 3 Copyright (C) 2011-2014 Free Software Foundation, Inc. 4 Copied from the gcc configury, where the test was contributed by 5 H.J. Lu <hongjiu.lu (at) intel.com>. 6 7 This file is part of gold. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 22 MA 02110-1301, USA. */ 23 24 /* This tests that the linker correctly combines .ctor and .init_array 25 sections when both have priorities. */ 26 27 #include <stdlib.h> 28 29 static int count; 30 31 static void 32 init1005 (void) 33 { 34 if (count != 0) 35 abort (); 36 count = 1005; 37 } 38 void (*const init_array1005[]) (void) 39 __attribute__ ((section (".init_array.01005"), aligned (sizeof (void *)))) 40 = { init1005 }; 41 static void 42 fini1005 (void) 43 { 44 if (count != 1005) 45 abort (); 46 } 47 void (*const fini_array1005[]) (void) 48 __attribute__ ((section (".fini_array.01005"), aligned (sizeof (void *)))) 49 = { fini1005 }; 50 51 static void 52 ctor1007 (void) 53 { 54 if (count != 1005) 55 abort (); 56 count = 1007; 57 } 58 void (*const ctors1007[]) (void) 59 __attribute__ ((section (".ctors.64528"), aligned (sizeof (void *)))) 60 = { ctor1007 }; 61 static void 62 dtor1007 (void) 63 { 64 if (count != 1007) 65 abort (); 66 count = 1005; 67 } 68 void (*const dtors1007[]) (void) 69 __attribute__ ((section (".dtors.64528"), aligned (sizeof (void *)))) 70 = { dtor1007 }; 71 72 static void 73 init65530 (void) 74 { 75 if (count != 1007) 76 abort (); 77 count = 65530; 78 } 79 void (*const init_array65530[]) (void) 80 __attribute__ ((section (".init_array.65530"), aligned (sizeof (void *)))) 81 = { init65530 }; 82 static void 83 fini65530 (void) 84 { 85 if (count != 65530) 86 abort (); 87 count = 1007; 88 } 89 void (*const fini_array65530[]) (void) 90 __attribute__ ((section (".fini_array.65530"), aligned (sizeof (void *)))) 91 = { fini65530 }; 92 93 static void 94 ctor65535 (void) 95 { 96 if (count != 65530) 97 abort (); 98 count = 65535; 99 } 100 void (*const ctors65535[]) (void) 101 __attribute__ ((section (".ctors"), aligned (sizeof (void *)))) 102 = { ctor65535 }; 103 static void 104 dtor65535 (void) 105 { 106 if (count != 65535) 107 abort (); 108 count = 65530; 109 } 110 void (*const dtors65535[]) (void) 111 __attribute__ ((section (".dtors"), aligned (sizeof (void *)))) 112 = { dtor65535 }; 113 114 int 115 main (void) 116 { 117 return 0; 118 } 119