1# Expect script for common symbol override. 2# 3# Copyright (C) 2011-2016 Free Software Foundation, Inc. 4# 5# This file is part of the GNU Binutils. 6# 7# This program is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 3 of the License, or 10# (at your option) any later version. 11# 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16# 17# You should have received a copy of the GNU General Public License 18# along with this program; if not, write to the Free Software 19# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 20# MA 02110-1301, USA. 21# 22 23# 24# Written by Maciej W. Rozycki <macro@codesourcery.com> 25# 26 27# This test is for ELF shared-library targets. 28if { ![is_elf_format] || ![check_shared_lib_support] } { 29 return 30} 31 32# This target requires extra GAS options when building code for shared 33# libraries. 34set AFLAGS_PIC "" 35if [istarget "tic6x-*-*"] { 36 append AFLAGS_PIC " -mpic -mpid=near" 37} 38# This target requires a non-default emulation for successful shared 39# library/executable builds. 40set LFLAGS "" 41if [istarget "tic6x-*-*"] { 42 append LFLAGS " -melf32_tic6x_le" 43} 44 45set testname "Common symbol override test" 46 47# Define a global symbol. 48run_ld_link_tests [list \ 49 [list \ 50 "$testname (auxiliary shared object build)" \ 51 "$LFLAGS -shared" "" \ 52 "$AFLAGS_PIC" \ 53 { comm-data1.s } \ 54 { \ 55 { readelf -s comm-data1.sd } \ 56 } \ 57 "libcomm-data.so" \ 58 ] \ 59] 60 61# Set the pointer size according to the ELF flavor. 62set AFLAGS "" 63if [is_elf64 "tmpdir/libcomm-data.so"] { 64 append AFLAGS " --defsym ELF64=1" 65} 66# HPUX targets use a different .comm syntax. 67if [istarget "*-*-hpux*"] { 68 append AFLAGS " --defsym HPUX=1" 69} 70 71# bfin does not currently support copy relocs. 72setup_xfail "bfin-*-*" 73 74setup_xfail "arm*-*-*" "ld/13802" 75 76# List targets here that keep copy relocs rather than eliminating 77# them where possible in favour to dynamic relocs in the relevant 78# loadable sections; see also the "-z nocopyreloc" command-line 79# option and the ELIMINATE_COPY_RELOCS macro some backends use. 80set copy_reloc [expr [istarget mn10300-*-*] || [istarget vax-*-*]] 81 82# Verify that a common symbol has been converted to an undefined 83# reference to the global symbol of the same name defined above 84# and that the debug reference has been dropped. 85run_ld_link_tests [list \ 86 [list \ 87 "$testname" \ 88 "$LFLAGS -T comm-data2.ld -Ltmpdir -lcomm-data" "" \ 89 "$AFLAGS" \ 90 { comm-data2.s } \ 91 [list \ 92 [list readelf -s \ 93 [expr { $copy_reloc ? "comm-data2r.sd" : "comm-data2.sd"}]] \ 94 [list readelf -r \ 95 [expr { $copy_reloc ? "comm-data2r.rd" : "comm-data2.rd"}]] \ 96 [list readelf "-x .debug_foo" \ 97 [expr { $copy_reloc ? "comm-data2r.xd" : "comm-data2.xd"}]]] \ 98 "comm-data" \ 99 ] \ 100 [list \ 101 "$testname 3a" \ 102 "-static" "" \ 103 "" \ 104 { comm-data3a.s comm-data3b.s } \ 105 { \ 106 { readelf -s comm-data3.sd } \ 107 } \ 108 "comm-data3a" \ 109 ] \ 110 [list \ 111 "$testname 3b" \ 112 "-static" "" \ 113 "" \ 114 { comm-data3b.s comm-data3a.s } \ 115 { \ 116 { readelf -s comm-data3.sd } \ 117 } \ 118 "comm-data3b" \ 119 ] \ 120] 121