| 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" |