| 1 | /* common_test_1_v2.c -- test common symbol sorting |
| 2 | |
| 3 | Copyright (C) 2008-2019 Free Software Foundation, Inc. |
| 4 | Written by Ian Lance Taylor <iant@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 is a test of a common symbol in the main program and a |
| 24 | versioned symbol in a shared library. The common symbol in the |
| 25 | main program should override the shared library symbol. */ |
| 26 | |
| 27 | #include <assert.h> |
| 28 | |
| 29 | /* Common symbols should be sorted by size, largest first, and then by |
| 30 | alignment, largest first. We mix up the names, because gas seems |
| 31 | to sort common symbols roughly by name. */ |
| 32 | |
| 33 | int c9[90]; |
| 34 | int c8[80]; |
| 35 | int c7[70]; |
| 36 | int c6[60]; |
| 37 | int c5[10]; |
| 38 | int c4[20]; |
| 39 | int c3[30]; |
| 40 | int c2[40]; |
| 41 | int c1[50]; |
| 42 | |
| 43 | int a1 __attribute__ ((aligned (1 << 9))); |
| 44 | int a2 __attribute__ ((aligned (1 << 8))); |
| 45 | int a3 __attribute__ ((aligned (1 << 7))); |
| 46 | int a4 __attribute__ ((aligned (1 << 6))); |
| 47 | int a5 __attribute__ ((aligned (1 << 1))); |
| 48 | int a6 __attribute__ ((aligned (1 << 2))); |
| 49 | int a7 __attribute__ ((aligned (1 << 3))); |
| 50 | int a8 __attribute__ ((aligned (1 << 4))); |
| 51 | int a9 __attribute__ ((aligned (1 << 5))); |
| 52 | |
| 53 | int |
| 54 | main (int argc __attribute__ ((unused)), char** argv __attribute__ ((unused))) |
| 55 | { |
| 56 | // After an incremental update, all guarantees about ordering |
| 57 | // are null. |
| 58 | assert (c5 != c4); |
| 59 | assert (c4 != c3); |
| 60 | assert (c3 != c2); |
| 61 | assert (c2 != c1); |
| 62 | assert (c1 != c6); |
| 63 | assert (c6 != c7); |
| 64 | assert (c7 != c8); |
| 65 | assert (c8 != c9); |
| 66 | |
| 67 | assert (&a1 != &a2); |
| 68 | assert (&a2 != &a3); |
| 69 | assert (&a3 != &a4); |
| 70 | assert (&a4 != &a9); |
| 71 | assert (&a9 != &a8); |
| 72 | assert (&a8 != &a7); |
| 73 | assert (&a7 != &a6); |
| 74 | assert (&a6 != &a5); |
| 75 | |
| 76 | return 0; |
| 77 | } |