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