1*55d6cb5dSRichard Lowe#!/bin/ksh 2*55d6cb5dSRichard Lowe# 3*55d6cb5dSRichard Lowe# This file and its contents are supplied under the terms of the 4*55d6cb5dSRichard Lowe# Common Development and Distribution License ("CDDL"), version 1.0. 5*55d6cb5dSRichard Lowe# You may only use this file in accordance with the terms of version 6*55d6cb5dSRichard Lowe# 1.0 of the CDDL. 7*55d6cb5dSRichard Lowe# 8*55d6cb5dSRichard Lowe# A full copy of the text of the CDDL should have accompanied this 9*55d6cb5dSRichard Lowe# source. A copy of the CDDL is also available via the Internet at 10*55d6cb5dSRichard Lowe# http://www.illumos.org/license/CDDL. 11*55d6cb5dSRichard Lowe# 12*55d6cb5dSRichard Lowe 13*55d6cb5dSRichard Lowe# Copyright 2021, Richard Lowe. 14*55d6cb5dSRichard Lowe 15*55d6cb5dSRichard LoweTESTDIR=$(dirname $0) 16*55d6cb5dSRichard Lowe 17*55d6cb5dSRichard Lowetmpdir=/tmp/test.$$ 18*55d6cb5dSRichard Lowemkdir $tmpdir 19*55d6cb5dSRichard Lowecd $tmpdir 20*55d6cb5dSRichard Lowe 21*55d6cb5dSRichard Lowecleanup() { 22*55d6cb5dSRichard Lowe cd / 23*55d6cb5dSRichard Lowe rm -fr $tmpdir 24*55d6cb5dSRichard Lowe} 25*55d6cb5dSRichard Lowe 26*55d6cb5dSRichard Lowetrap 'cleanup' EXIT 27*55d6cb5dSRichard Lowe 28*55d6cb5dSRichard Loweif [[ $PWD != $tmpdir ]]; then 29*55d6cb5dSRichard Lowe print -u2 "Failed to create temporary directory: $tmpdir" 30*55d6cb5dSRichard Lowe exit 1; 31*55d6cb5dSRichard Lowefi 32*55d6cb5dSRichard Lowe 33*55d6cb5dSRichard Lowemake -f ${TESTDIR}/Makefile.test SRCDIR=${TESTDIR} 34*55d6cb5dSRichard Loweif (( $? != 0 )); then 35*55d6cb5dSRichard Lowe print -u2 "FAIL: Failed to link" 36*55d6cb5dSRichard Lowe exit 1; 37*55d6cb5dSRichard Lowefi 38*55d6cb5dSRichard Lowe 39*55d6cb5dSRichard Loweelfdump -sN.symtab libtest.so | awk '$9 ~ /(bss|data)_symbol/ { 40*55d6cb5dSRichard Lowe if ($5 != "LOCL") { 41*55d6cb5dSRichard Lowe exit 1; 42*55d6cb5dSRichard Lowe } 43*55d6cb5dSRichard Lowe}' 44*55d6cb5dSRichard Lowe 45*55d6cb5dSRichard Loweif (( $? != 0 )); then 46*55d6cb5dSRichard Lowe print -u2 "FAIL: libtest.so COMDAT symbols not reduced to local" 47*55d6cb5dSRichard Lowe exit 1; 48*55d6cb5dSRichard Lowefi 49*55d6cb5dSRichard Lowe 50*55d6cb5dSRichard Loweelfdump -sN.symtab libothertest.so | awk '$9 ~ /(bss|data)_symbol/ { 51*55d6cb5dSRichard Lowe if ($5 != "LOCL") { 52*55d6cb5dSRichard Lowe exit 1; 53*55d6cb5dSRichard Lowe } 54*55d6cb5dSRichard Lowe}' 55*55d6cb5dSRichard Lowe 56*55d6cb5dSRichard Loweif (( $? != 0 )); then 57*55d6cb5dSRichard Lowe print -u2 "FAIL: libothertest.so COMDAT symbols not reduced to local" 58*55d6cb5dSRichard Lowe exit 1; 59*55d6cb5dSRichard Lowefi 60*55d6cb5dSRichard Lowe 61*55d6cb5dSRichard Loweelfdump -s libnoref.so | grep -q _symbol 62*55d6cb5dSRichard Loweif (( $? == 0 )); then 63*55d6cb5dSRichard Lowe print -u2 "FAIL: unreferenced symbols survive into output object" 64*55d6cb5dSRichard Lowe exit 1; 65*55d6cb5dSRichard Lowefi 66*55d6cb5dSRichard Lowe 67*55d6cb5dSRichard Lowe./test 68*55d6cb5dSRichard Loweif (( $? != 0 )); then 69*55d6cb5dSRichard Lowe print -u2 "FAIL: Failed to execute ./test" 70*55d6cb5dSRichard Lowe exit 1; 71*55d6cb5dSRichard Lowefi 72