afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# CDDL HEADER START
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# The contents of this file are subject to the terms of the
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# Common Development and Distribution License (the "License").
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# You may not use this file except in compliance with the License.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# or http://www.opensolaris.org/os/licensing.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# See the License for the specific language governing permissions
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# and limitations under the License.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# When distributing Covered Code, include this CDDL HEADER in each
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# If applicable, add the following below this CDDL HEADER, with the
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# fields enclosed by brackets "[]" replaced with your own identifying
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# information: Portions Copyright [yyyy] [name of copyright owner]
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# CDDL HEADER END
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# Copyright (c) 2011, Joyent Inc. All rights reserved.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# Use is subject to license terms.
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# This test verifies that we only use the first entry of a file with a given
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi# name in the library path
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiif [ $# != 1 ]; then
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi echo expected one argument: '<'dtrace-path'>'
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi exit 2
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchifi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchifirstinc=${TMPDIR:-/tmp}/firstinc.$$
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchisecondinc=${TMPDIR:-/tmp}/secondinc.$$
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiexpexit=23
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchisetup_include()
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi{
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi mkdir $firstinc
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi mkdir $secondinc
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi cat > $firstinc/lib.d <<EOF
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiinline int foobar = $expexit;
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#pragma D binding "1.0" foobar
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert MustacchiEOF
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi cat > $secondinc/lib.d <<EOF
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiinline int foobar = 42;
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi#pragma D binding "1.0" foobar
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert MustacchiEOF
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi}
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiclean()
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi{
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi rm -rf $firstinc
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi rm -rf $secondinc
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi}
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchifail()
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi{
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi echo "$@"
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi clean
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi exit 1
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi}
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchisetup_include
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchidtrace -L$firstinc -L$secondinc -e -n 'BEGIN{ exit(foobar) }'
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi[[ $? != 0 ]] && fail "Failed to compile with same file in include path twice"
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchidtrace -L$firstinc -L$secondinc -n 'BEGIN{ exit(foobar) }'
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchistatus=$?
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchi[[ $status != $expexit ]] && fail "Exited with unexpected status code: $status"
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiclean
afab0816ecb604f0099a09ad8ee398f0d7b77b1cRobert Mustacchiexit 0