Home | History | Annotate | Download | only in ld-powerpc
      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