1# Expect script for common symbol override. 2# 3# Copyright (C) 2011-2020 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# These targets do not default to linking with shared libraries. 45if { [istarget "mips*vr4100*-*-elf*"] \ 46 || [istarget "mips*vr4300*-*-elf*"] \ 47 || [istarget "mips*vr5000*-*-elf*"] } { 48 append LFLAGS " -call_shared" 49} 50 51# Set the pointer size according to the ELF flavor. 52set AFLAGS "" 53if [is_elf64 "tmpdir/libcomm-data.so"] { 54 append AFLAGS " --defsym ELF64=1" 55} 56# HPUX targets use a different .comm syntax. 57if [istarget "*-*-hpux*"] { 58 append AFLAGS " --defsym HPUX=1" 59} 60 61set testname "Common symbol override test" 62 63# Define a global symbol. 64run_ld_link_tests [list \ 65 [list \ 66 "$testname (auxiliary shared object build)" \ 67 "$LFLAGS -shared" "" \ 68 "$AFLAGS_PIC" \ 69 { comm-data1.s } \ 70 { \ 71 { readelf -s comm-data1.sd } \ 72 } \ 73 "libcomm-data.so" \ 74 ] \ 75 [list \ 76 "libpr26580-1.so" \ 77 "$LFLAGS -shared" "" \ 78 "$AFLAGS_PIC $AFLAGS" \ 79 { pr26580-b.s } \ 80 { } \ 81 "libpr26580-1.so" \ 82 ] \ 83] 84 85# bfin-elf does not currently support copy relocs. 86setup_xfail "bfin-*-*" 87clear_xfail "bfin-*-linux-uclibc*" 88 89# Verify that a common symbol has been converted to an undefined 90# reference to the global symbol of the same name defined above 91# and that the debug reference has been dropped. 92run_ld_link_tests [list \ 93 [list \ 94 "$testname" \ 95 "$LFLAGS -T comm-data2.ld -Ltmpdir -lcomm-data" "" \ 96 "$AFLAGS" \ 97 { comm-data2.s } \ 98 [list \ 99 [list readelf -s comm-data2.sd] \ 100 [list readelf -r comm-data2.rd] \ 101 [list readelf "-x .debug_foo" comm-data2.xd]] \ 102 "comm-data" \ 103 ] \ 104 [list \ 105 "$testname 3a" \ 106 "-static" "" \ 107 "" \ 108 { comm-data3a.s comm-data3b.s } \ 109 { \ 110 { readelf -s comm-data3.sd } \ 111 } \ 112 "comm-data3a" \ 113 ] \ 114 [list \ 115 "$testname 3b" \ 116 "-static" "" \ 117 "" \ 118 { comm-data3b.s comm-data3a.s } \ 119 { \ 120 { readelf -s comm-data3.sd } \ 121 } \ 122 "comm-data3b" \ 123 ] \ 124 [list \ 125 "pr26580-1" \ 126 "$LFLAGS --as-needed -Ltmpdir -lpr26580-1" "" \ 127 "$AFLAGS" \ 128 { pr26580-a.s } \ 129 { {readelf -s pr26580-1.sd} } \ 130 "pr26580-1" \ 131 ] \ 132 [list \ 133 "pr26580-2" \ 134 "$LFLAGS --no-as-needed -Ltmpdir -lpr26580-1" "" \ 135 "$AFLAGS" \ 136 { pr26580-a.s } \ 137 { {readelf -s pr26580-2.sd} } \ 138 "pr26580-2" \ 139 ] \ 140] 141