/* common_test_1.c -- test common symbol sorting Copyright (C) 2008-2020 Free Software Foundation, Inc. Written by Ian Lance Taylor <iant@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. This is a test of a common symbol in the main program and a versioned symbol in a shared library. The common symbol in the main program should override the shared library symbol. */ #include <assert.h> /* Common symbols should be sorted by size, largest first, and then by alignment, largest first. We mix up the names, because gas seems to sort common symbols roughly by name. */ int c9[90]; int c8[80]; int c7[70]; int c6[60]; int c5[10]; int c4[20]; int c3[30]; int c2[40]; int c1[50]; int a1 __attribute__ ((aligned (1 << 9))); int a2 __attribute__ ((aligned (1 << 8))); int a3 __attribute__ ((aligned (1 << 7))); int a4 __attribute__ ((aligned (1 << 6))); int a5 __attribute__ ((aligned (1 << 1))); int a6 __attribute__ ((aligned (1 << 2))); int a7 __attribute__ ((aligned (1 << 3))); int a8 __attribute__ ((aligned (1 << 4))); int a9 __attribute__ ((aligned (1 << 5))); int main (int argc __attribute__ ((unused)), char** argv __attribute__ ((unused))) { assert (c5 > c4); assert (c4 > c3); assert (c3 > c2); assert (c2 > c1); assert (c1 > c6); assert (c6 > c7); assert (c7 > c8); assert (c8 > c9); assert (&a1 < &a2); assert (&a2 < &a3); assert (&a3 < &a4); assert (&a4 < &a9); assert (&a9 < &a8); assert (&a8 < &a7); assert (&a7 < &a6); assert (&a6 < &a5); return 0; } |