3 # This file and its contents are supplied under the terms of the
4 # Common Development and Distribution License ("CDDL"), version 1.0.
5 # You may only use this file in accordance with the terms of version
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.
14 # Copyright (c) 2012, Joyent, Inc.
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.
30 sh_soname
="libld.so.4"
34 sh_arg0
=$
(basename $0)
39 [[ -z "$msg" ]] && msg
="failed"
40 echo "$sh_arg0: $msg" >&2
46 # Validate that everything we need is in our path. That includes having cc
47 # and the proto area libld.
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"
54 which $sh_cc >/dev
/null || fatal
"cc not in path"
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
68 LD_LIBRARY_PATH_64
="$sh_path/$sh_lib64" $sh_cc $sh_cflags $sh_file $1
69 if [[ $?
-eq $2 ]]; then
77 [[ -z "$1" ]] && fatal
"<proto root>"
80 run
"-Wl,-zassert-deflib" 0 \
81 "Testing basic compilation succeeds with warnings..." \
82 "failed to compile with warnings"
84 run
"-Wl,-zassert-deflib -Wl,-zfatal-warnings" 1 \
85 "Testing basic compilation fails if warning are fatal..." \
86 "linking succeeeded, expected failure"
88 run
"-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
89 "Testing basic exception with fatal warnings..." \
90 "linking failed despite exception"
92 run
"-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings" 0 \
93 "Testing basic exception with fatal warnings..." \
94 "linking failed despite exception"
97 run
"-Wl,-zassert-deflib=lib.so -Wl,-zfatal-warnings" 1 \
98 "Testing invalid library name..." \
99 "ld should not allow invalid library name"
101 run
"-Wl,-zassert-deflib=libf -Wl,-zfatal-warnings" 1 \
102 "Testing invalid library name..." \
103 "ld should not allow invalid library name"
105 run
"-Wl,-zassert-deflib=libf.s -Wl,-zfatal-warnings" 1 \
106 "Testing invalid library name..." \
107 "ld should not allow invalid library name"
109 run
"-Wl,-zassert-deflib=libc.so -Wl,-zfatal-warnings -lelf" 1 \
110 "Errors even if one library is under exception path..." \
111 "one exception shouldn't stop another"
113 args
="-Wl,-zassert-deflib=libc.so -Wl,-zassert-deflib=libelf.so"
114 args
="$args -Wl,-zfatal-warnings -lelf"
117 "Multiple exceptions work..." \
118 "multiple exceptions don't work"
120 args
="-Wl,-zassert-deflib=libc.so -Wl,-zassert-deflib=libelfe.so"
121 args
="$args -Wl,-zfatal-warnings -lelf"
124 "Exceptions only catch the specific library" \
125 "exceptions caught the wrong library"
127 args
="-Wl,-zassert-deflib=libc.so -Wl,-zassert-deflib=libel.so"
128 args
="$args -Wl,-zfatal-warnings -lelf"
131 "Exceptions only catch the specific library" \
132 "exceptions caught the wrong library"