Print this page
10366 ld(1) should support GNU-style linker sets
10367 ld(1) tests should be a real test suite
10368 want an ld(1) regression test for i386 LD tls transition (10267)


   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source.  A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 #
  12 
  13 #
  14 # Copyright (c) 2012, Joyent, Inc.
  15 #
  16 
  17 #
  18 # This test validates that the -zassert-deflib option of ld(1) works correctly.
  19 # It requires that some cc is in your path and that you have passed in the path
  20 # to the proto area with the new version of libld.so.4. One thing that we have
  21 # to do is be careful with using LD_LIBRARY_PATH. Setting LD_LIBRARY_PATH does
  22 # not change the default search path so we want to make sure that we use a
  23 # different ISA (e.g. 32-bit vs 64-bit) from the binary we're generating.
  24 #
  25 unalias -a
  26 





  27 sh_path=
  28 sh_lib="lib"
  29 sh_lib64="$sh_lib/64"
  30 sh_soname="libld.so.4"
  31 sh_cc="cc"
  32 sh_cflags="-m32"
  33 sh_file="link.c"
  34 sh_arg0=$(basename $0)
  35 
  36 function fatal
  37 {
  38         local msg="$*"
  39         [[ -z "$msg" ]] && msg="failed"
  40         echo "$sh_arg0: $msg" >&2
  41         exit 1
  42 }
  43 
  44 
  45 #
  46 # Validate that everything we need is in our path. That includes having cc
  47 # and the proto area libld.
  48 #
  49 function validate
  50 {
  51         [[ -f $sh_path/$sh_lib/$sh_soname ]] || fatal "missing 32-bit $sh_soname"
  52         [[ -f $sh_path/$sh_lib64/$sh_soname ]] ||
  53             fatal "missing 64-bit $sh_soname"


  56 
  57 #
  58 # $1 is a series of flags to append
  59 # $2 is expected exit status
  60 # $3 is pre-test message
  61 # $4 is the failure message
  62 #
  63 function run
  64 {
  65         local ret
  66 
  67         echo $3
  68         LD_LIBRARY_PATH_64="$sh_path/$sh_lib64" $sh_cc $sh_cflags $sh_file $1
  69         if [[ $? -eq $2 ]]; then
  70                 printf "success\n\n"
  71         else
  72                 fatal $4
  73         fi
  74 }
  75 
  76 sh_path=$1
  77 [[ -z "$1" ]] && fatal "<proto root>"
  78 validate
  79 
  80 run "-Wl,-zassert-deflib" 0 \
  81     "Testing basic compilation succeeds with warnings..." \
  82     "failed to compile with warnings"
  83 
  84 run "-Wl,-zassert-deflib -Wl,-zfatal-warnings" 1 \
  85     "Testing basic compilation fails if warning are fatal..." \
  86     "linking succeeeded, expected failure"
  87 
  88 run "-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
  89     "Testing basic exception with fatal warnings..." \
  90     "linking failed despite exception"
  91 
  92 run "-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
  93     "Testing basic exception with fatal warnings..." \
  94     "linking failed despite exception"
  95 
  96 
  97 run "-Wl,-zassert-deflib=lib.so -Wl,-zfatal-warnings" 1 \




   7 #
   8 # A full copy of the text of the CDDL should have accompanied this
   9 # source.  A copy of the CDDL is also available via the Internet at
  10 # http://www.illumos.org/license/CDDL.
  11 #
  12 
  13 #
  14 # Copyright (c) 2012, Joyent, Inc.
  15 #
  16 
  17 #
  18 # This test validates that the -zassert-deflib option of ld(1) works correctly.
  19 # It requires that some cc is in your path and that you have passed in the path
  20 # to the proto area with the new version of libld.so.4. One thing that we have
  21 # to do is be careful with using LD_LIBRARY_PATH. Setting LD_LIBRARY_PATH does
  22 # not change the default search path so we want to make sure that we use a
  23 # different ISA (e.g. 32-bit vs 64-bit) from the binary we're generating.
  24 #
  25 unalias -a
  26 
  27 if [[ -z $ELF_TESTS ]]; then
  28     print -u2 "Don't know where the test data is rooted";
  29     exit 1;
  30 fi
  31 
  32 sh_path=
  33 sh_lib="lib"
  34 sh_lib64="$sh_lib/64"
  35 sh_soname="libld.so.4"
  36 sh_cc="gcc"
  37 sh_cflags="-m32"
  38 sh_file="${ELF_TESTS}/tests/assert-deflib/link.c"
  39 sh_arg0=$(basename $0)
  40 
  41 function fatal
  42 {
  43         local msg="$*"
  44         [[ -z "$msg" ]] && msg="failed"
  45         echo "$sh_arg0: $msg" >&2
  46         exit 1
  47 }
  48 
  49 
  50 #
  51 # Validate that everything we need is in our path. That includes having cc
  52 # and the proto area libld.
  53 #
  54 function validate
  55 {
  56         [[ -f $sh_path/$sh_lib/$sh_soname ]] || fatal "missing 32-bit $sh_soname"
  57         [[ -f $sh_path/$sh_lib64/$sh_soname ]] ||
  58             fatal "missing 64-bit $sh_soname"


  61 
  62 #
  63 # $1 is a series of flags to append
  64 # $2 is expected exit status
  65 # $3 is pre-test message
  66 # $4 is the failure message
  67 #
  68 function run
  69 {
  70         local ret
  71 
  72         echo $3
  73         LD_LIBRARY_PATH_64="$sh_path/$sh_lib64" $sh_cc $sh_cflags $sh_file $1
  74         if [[ $? -eq $2 ]]; then
  75                 printf "success\n\n"
  76         else
  77                 fatal $4
  78         fi
  79 }
  80 
  81 sh_path=${1:-/}

  82 validate
  83 
  84 run "-Wl,-zassert-deflib" 0 \
  85     "Testing basic compilation succeeds with warnings..." \
  86     "failed to compile with warnings"
  87 
  88 run "-Wl,-zassert-deflib -Wl,-zfatal-warnings" 1 \
  89     "Testing basic compilation fails if warning are fatal..." \
  90     "linking succeeeded, expected failure"
  91 
  92 run "-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
  93     "Testing basic exception with fatal warnings..." \
  94     "linking failed despite exception"
  95 
  96 run "-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
  97     "Testing basic exception with fatal warnings..." \
  98     "linking failed despite exception"
  99 
 100 
 101 run "-Wl,-zassert-deflib=lib.so -Wl,-zfatal-warnings" 1 \