1# Expect script for AIX 5.2+ tests 2# Copyright (C) 2009-2016 Free Software Foundation, Inc. 3# 4# This file is part of the GNU Binutils. 5# 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 3 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program; if not, write to the Free Software 18# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 19# MA 02110-1301, USA. 20# 21 22if { ![istarget "powerpc*-*-aix\[5-9\]*"] 23 || [istarget "powerpc*-*-aix5.\[01\]*"] } { 24 return 25} 26 27# Run a run_link_tests-style test for AIX. SIZE selects the target size 28# (32 or 64). The other arguments are elements of a run_link_tests test. 29# 30# Make the following changes before running the test: 31# 32# - Mention SIZE in the test name. 33# - Add "-aSIZE --defsym size=SIZE" to the assembler options. 34# - Add the source directory to any "-bI:" and "-bE:" linker options. 35# - Add "-bSIZE" to the linker options. 36# - Add "-XSIZE" to the archiver options. 37# - Replace "SIZE" with SIZE in TOOLS. 38# - When testing 64-bit targets: 39# - Turn tmpdir/aix-* into tmpdir/aix64-*. 40# - Turn tmpdir/libaix-* into tmpdir/libaix64-*. 41# - Turn -laix* into -laix64*, to compensate for the above. 42proc run_aix_test { size name ldopts asopts sources tools output } { 43 global srcdir subdir 44 45 if { $size == 64 } { 46 regsub -all {tmpdir/aix-} $ldopts {tmpdir/aix64-} ldopts 47 regsub {^aix} $output {aix64} output 48 49 regsub -all -- {-laix-} $ldopts {-laix64-} ldopts 50 regsub {^libaix} $output {libaix64} output 51 } 52 if { [regexp {.a$} $output] } { 53 append ldopts " -X$size" 54 } else { 55 regsub -all {(-b[IE]):} $ldopts "\\1:$srcdir/$subdir/" ldopts 56 append ldopts " -b$size" 57 } 58 regsub -all {SIZE} $tools $size tools 59 run_ld_link_tests [list [list "$name ($size-bit)" \ 60 $ldopts "" \ 61 "$asopts -a$size --defsym size=$size" \ 62 $sources \ 63 $tools \ 64 $output]] 65} 66 67foreach file { "aix-lineno-1.txt" } { 68 remote_upload host "$srcdir/$subdir/$file" "tmpdir/$file" 69} 70 71set aix52tests { 72 {"Absolute branch test 1" 73 "-shared -bI:aix-abs-branch-1.im -bE:aix-abs-branch-1.ex" 74 "" {aix-abs-branch-1.s} 75 {{objdump {-dR} aix-abs-branch-1.dd} {nm {} aix-abs-branch-1.nd}} 76 "aix-abs-branch-1.so"} 77 78 {"Relocations against absolute symbols 1" 79 "-shared -bI:aix-abs-reloc-1.im -bE:aix-abs-reloc-1.ex" 80 {} {aix-abs-reloc-1.s} 81 {{objdump -sRj.data aix-abs-reloc-1.od} {nm {} aix-abs-reloc-1.nd}} 82 "aix-abs-reloc-1.so"} 83 84 {"Core sections test 1" "-shared -bE:aix-core-sec-1.ex" 85 "" {aix-core-sec-1.s} 86 {{objdump -h aix-core-sec-1.hd}} 87 "aix-core-sec-1.so"} 88 89 {"Core sections test 2" "-shared -bE:aix-core-sec-2.ex" 90 "" {aix-core-sec-2.s} 91 {{objdump -h aix-core-sec-2.hd}} 92 "aix-core-sec-2.so"} 93 94 {"Core sections test 3" "-shared -bE:aix-core-sec-3.ex" 95 "" {aix-core-sec-3.s} 96 {{objdump -h aix-core-sec-3.hd}} 97 "aix-core-sec-3.so"} 98 99 {"Duplicate symbol check 1 (rel)" "-r" 100 "" {aix-no-dup-syms-1a.s aix-no-dup-syms-1b.s} 101 {{nm {} aix-no-dup-syms-1-rel.nd} {objdump -r aix-no-dup-syms-1-rel.rd}} 102 "aix-no-dup-syms-1.o"} 103 104 {"Duplicate symbol check 1 (shared)" 105 "-shared --allow-multiple-definition -bI:aix-no-dup-syms-1.im -bE:aix-no-dup-syms-1.ex" 106 "" {aix-no-dup-syms-1a.s aix-no-dup-syms-1b.s} 107 {{nm {} aix-no-dup-syms-1-dso.nd} {objdump -r aix-no-dup-syms-1-dso.rd} 108 {nm -D aix-no-dup-syms-1-dso.dnd} {objdump -R aix-no-dup-syms-1-dso.drd}} 109 "aix-no-dup-syms-1.so"} 110 111 {"Export test 1 (archive)" "" 112 "" {aix-export-1a.s} 113 {} "libaix-export-1.a"} 114 115 {"Export test 1 (object)" "-r" 116 "" {aix-export-1b.s} 117 {} "aix-export-1.o"} 118 119 {"Export test 1 (-bexpall)" 120 "-shared -bexpall tmpdir/aix-export-1.o -Ltmpdir -laix-export-1" 121 "" {} 122 {{objdump -dj.data aix-export-1-all.dd}} 123 "aix-export-1-all.so"} 124 125 {"Export test 1 (-bexpfull)" 126 "-shared -bexpfull tmpdir/aix-export-1.o -Ltmpdir -laix-export-1" 127 "" {} 128 {{objdump -dj.data aix-export-1-full.dd}} 129 "aix-export-1-full.so"} 130 131 {"Export test 2" "-shared -bexpall" 132 {} {aix-export-2.s} 133 {{nm -D aix-export-2.nd}} "aix-export-2.so"} 134 135 {"Garbage collection test 1" 136 "-shared -binitfini:init_function:fini_function -bE:aix-gc-1.ex" 137 "" {aix-gc-1.s} 138 {{objdump {-dz -j.text -j.data} aix-gc-1-SIZE.dd} 139 {nm {} aix-gc-1.nd}} 140 "aix-gc-1.so"} 141 142 {"Glink test 1" 143 "-shared -bE:aix-glink-1.ex --unresolved-symbols=ignore-all" 144 "" {aix-glink-1.s} 145 {{objdump {-D -j.text -j.data} aix-glink-1-SIZE.dd}} 146 "aix-glink-1.so"} 147 148 {"Glink test 2 (part a)" "-shared -bE:aix-glink-2a.ex" 149 "" {aix-glink-2a.s} 150 {} 151 "aix-glink-2a.so"} 152 153 {"Glink test 2 (part b)" "-r" 154 "" {aix-glink-2b.s} 155 {} 156 "aix-glink-2b.ro"} 157 158 {"Glink test 2 (part c)" "-shared -bE:aix-glink-2c.ex" 159 "" {aix-glink-2c.s} 160 {} 161 "aix-glink-2c.so"} 162 163 {"Glink test 2" 164 "-e.main tmpdir/aix-glink-2a.so tmpdir/aix-glink-2b.ro tmpdir/aix-glink-2c.so" 165 "" {aix-glink-2d.s} 166 {{objdump -d aix-glink-2-SIZE.dd}} 167 "aix-glink-2"} 168 169 {"Glink test 3 (shared library a)" 170 "-shared -bexpall" 171 "" {aix-glink-3a.s} 172 {} "aix-glink-3a.so"} 173 174 {"Glink test 3 (shared library b)" 175 "-shared -bexpall" 176 "" {aix-glink-3b.s} 177 {} "aix-glink-3b.so"} 178 179 {"Glink test 3 (main test)" 180 "-bnoautoimp tmpdir/aix-glink-3b.so tmpdir/aix-glink-3a.so" 181 "" {aix-glink-3.s} 182 {{objdump -d aix-glink-3.dd}} 183 "aix-glink-3"} 184 185 {"Line number test 1 (no discards)" "-e.main" 186 "" {aix-lineno-1.s} 187 {{objdump -dS aix-lineno-1a.dd} {nm {} aix-lineno-1a.nd}} 188 "aix-lineno-1a.exe"} 189 190 {"Line number test 1 (discard locals)" "-e.main -x" 191 "" {aix-lineno-1.s} 192 {{objdump -dS aix-lineno-1b.dd} {nm {} aix-lineno-1b.nd}} 193 "aix-lineno-1b.exe"} 194 195 {"Relocatable test 1" "-r" 196 "" {aix-rel-1.s} 197 {{objdump -hr aix-rel-1.od}} "aix-rel-1.ro"} 198 199 {".ref test 1" "-efoo1" 200 "" {aix-ref-1.s} 201 {{objdump -dr aix-ref-1-SIZE.od}} 202 "aix-ref-1"} 203 204 {"Weak test 1 (rel)" "-r" 205 "" {aix-weak-1a.s aix-weak-1b.s} 206 {{nm {} aix-weak-1-rel.nd} {objdump -h aix-weak-1-rel.hd}} 207 "aix-weak-1.o"} 208 209 {"Weak test 1 (shared, nogc)" "-shared -bE:aix-weak-1.ex -bnogc" 210 "" {aix-weak-1a.s aix-weak-1b.s} 211 {{nm {} aix-weak-1-dso.nd} {objdump -h aix-weak-1-dso.hd} 212 {nm -D aix-weak-1-dso.dnd}} 213 "aix-weak-1-nogc.so"} 214 215 {"Weak test 1 (shared, gc)" "-shared -bE:aix-weak-1.ex" 216 "" {aix-weak-1a.s aix-weak-1b.s} 217 {{nm {} aix-weak-1-gcdso.nd} {objdump -h aix-weak-1-gcdso.hd} 218 {nm -D aix-weak-1-gcdso.dnd}} 219 "aix-weak-1-gc.so"} 220 221 {"Weak test 2 (library 1)" "-shared -bE:aix-weak-2a.ex" 222 "" {aix-weak-2a.s} 223 {{nm -D aix-weak-2a.nd}} 224 "aix-weak-2a.so"} 225 226 {"Weak test 2 (library 2)" "-shared -bE:aix-weak-2a.ex" 227 "" {aix-weak-2b.s} 228 {{nm -D aix-weak-2b.nd}} 229 "aix-weak-2b.so"} 230 231 {"Weak test 2 (main library)" 232 "-shared -bE:aix-weak-2c.ex tmpdir/aix-weak-2a.so tmpdir/aix-weak-2b.so" 233 "" {aix-weak-2c.s} 234 {{nm {} aix-weak-2c.nd} {objdump {-sj.data -R} aix-weak-2c.od}} 235 "aix-weak-2c.so"} 236 237 {"Weak test 3 (library)" "-shared -bE:aix-weak-3a.ex" 238 "" {aix-weak-3a.s} 239 {} 240 "aix-weak-3a.so"} 241 242 {"Weak test 3 (main, dynamic)" "-e.main tmpdir/aix-weak-3a.so" 243 "" {aix-weak-3b.s} 244 {{objdump -Dzrj.data aix-weak-3-SIZE.dd}} 245 "aix-weak-3"} 246 247 {"TOC test 1" "-shared -bE:aix-toc-1.ex" 248 "" {aix-toc-1a.s aix-toc-1b.s} 249 {{objdump -dr aix-toc-1-SIZE.dd}} 250 "aix-toc-1.so"} 251} 252 253foreach test $aix52tests { 254 foreach { name ldopts asopts sources tools output } $test { 255 run_aix_test 32 $name $ldopts $asopts $sources $tools $output 256 run_aix_test 64 $name $ldopts $asopts $sources $tools $output 257 } 258} 259 260run_dump_test "aix-glink-1-32" 261run_dump_test "aix-glink-1-64" 262run_dump_test "aix-glink-3-32" 263run_dump_test "aix-glink-3-64" 264run_dump_test "aix-weak-3-32" 265run_dump_test "aix-weak-3-64" 266