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 22 if { ![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. 42 proc 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 67 foreach file { "aix-lineno-1.txt" } { 68 remote_upload host "$srcdir/$subdir/$file" "tmpdir/$file" 69 } 70 71 set 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 253 foreach 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 260 run_dump_test "aix-glink-1-32" 261 run_dump_test "aix-glink-1-64" 262 run_dump_test "aix-glink-3-32" 263 run_dump_test "aix-glink-3-64" 264 run_dump_test "aix-weak-3-32" 265 run_dump_test "aix-weak-3-64" 266