t_static_destructor.sh revision 1.2
11.2Skamil#	$NetBSD: t_static_destructor.sh,v 1.2 2018/03/24 00:26:51 kamil Exp $
21.1Skamil#
31.1Skamil# Copyright (c) 2017 The NetBSD Foundation, Inc.
41.1Skamil# All rights reserved.
51.1Skamil#
61.1Skamil# This code is derived from software contributed to The NetBSD Foundation
71.1Skamil# by Kamil Rytarowski.
81.1Skamil#
91.1Skamil# Redistribution and use in source and binary forms, with or without
101.1Skamil# modification, are permitted provided that the following conditions
111.1Skamil# are met:
121.1Skamil# 1. Redistributions of source code must retain the above copyright
131.1Skamil#    notice, this list of conditions and the following disclaimer.
141.1Skamil# 2. Redistributions in binary form must reproduce the above copyright
151.1Skamil#    notice, this list of conditions and the following disclaimer in the
161.1Skamil#    documentation and/or other materials provided with the distribution.
171.1Skamil#
181.1Skamil# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
191.1Skamil# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
201.1Skamil# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
211.1Skamil# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
221.1Skamil# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
231.1Skamil# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
241.1Skamil# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
251.1Skamil# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
261.1Skamil# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
271.1Skamil# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
281.1Skamil# POSSIBILITY OF SUCH DAMAGE.
291.1Skamil#
301.1Skamil
311.1Skamilatf_test_case static_destructor
321.1Skamilstatic_destructor_head() {
331.1Skamil	atf_set "descr" "compile and run \"hello world\""
341.1Skamil	atf_set "require.progs" "c++"
351.1Skamil}
361.1Skamil
371.2Skamilatf_test_case static_destructor_profile
381.2Skamilstatic_destructor_profile_head() {
391.2Skamil	atf_set "descr" "compile and run \"hello world\" with profiling option"
401.2Skamil	atf_set "require.progs" "c++"
411.2Skamil}
421.2Skamil
431.2Skamilatf_test_case static_destructor_static
441.2Skamilstatic_destructor_static_head() {
451.2Skamil	atf_set "descr" "compile and run \"hello world\" with static option"
461.2Skamil	atf_set "require.progs" "c++"
471.2Skamil}
481.2Skamil
491.1Skamilatf_test_case static_destructor_pic
501.1Skamilstatic_destructor_pic_head() {
511.1Skamil	atf_set "descr" "compile and run PIC \"hello world\""
521.1Skamil	atf_set "require.progs" "c++"
531.1Skamil}
541.1Skamil
551.2Skamilatf_test_case static_destructor_pic_32
561.2Skamilstatic_destructor_pic_32_head() {
571.2Skamil	atf_set "descr" "compile and run 32-bit PIC \"hello world\""
581.2Skamil	atf_set "require.progs" "c++"
591.2Skamil}
601.2Skamil
611.2Skamilatf_test_case static_destructor_pic_profile
621.2Skamilstatic_destructor_pic_profile_head() {
631.2Skamil	atf_set "descr" "compile and run PIC \"hello world\" with profiling option"
641.2Skamil	atf_set "require.progs" "c++"
651.2Skamil}
661.2Skamil
671.2Skamilatf_test_case static_destructor_pic_profile_32
681.2Skamilstatic_destructor_pic_profile_32_head() {
691.2Skamil	atf_set "descr" "compile and run 32-bit PIC \"hello world\" with profiling option"
701.2Skamil	atf_set "require.progs" "c++"
711.2Skamil}
721.2Skamil
731.2Skamilatf_test_case static_destructor_profile_32
741.2Skamilstatic_destructor_profile_32_head() {
751.2Skamil	atf_set "descr" "compile and run 32-bit \"hello world\" with profiling option"
761.2Skamil	atf_set "require.progs" "c++"
771.2Skamil}
781.2Skamil
791.1Skamilatf_test_case static_destructor_pie
801.1Skamilstatic_destructor_pie_head() {
811.1Skamil	atf_set "descr" "compile and run position independent (PIE) \"hello world\""
821.1Skamil	atf_set "require.progs" "c++"
831.1Skamil}
841.1Skamil
851.1Skamilatf_test_case static_destructor32
861.1Skamilstatic_destructor32_head() {
871.1Skamil	atf_set "descr" "compile and run \"hello world\" for/in netbsd32 emulation"
881.1Skamil	atf_set "require.progs" "c++ file diff cat"
891.1Skamil}
901.1Skamil
911.1Skamilstatic_destructor_body() {
921.1Skamil	cat > test.cpp << EOF
931.1Skamil#include <iostream>
941.1Skamilstruct A {
951.1Skamil	int i;
961.1Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
971.1Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
981.1Skamil};
991.1Skamilstruct B {
1001.1Skamil	A *m_a;
1011.1Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
1021.1Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
1031.1Skamil};
1041.1Skamilint main(void) {struct B b;return 0;}
1051.1SkamilEOF
1061.1Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -o hello test.cpp
1071.1Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
1081.1Skamil}
1091.1Skamil
1101.2Skamilstatic_destructor_profile_body() {
1111.2Skamil	cat > test.cpp << EOF
1121.2Skamil#include <iostream>
1131.2Skamilstruct A {
1141.2Skamil	int i;
1151.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
1161.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
1171.2Skamil};
1181.2Skamilstruct B {
1191.2Skamil	A *m_a;
1201.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
1211.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
1221.2Skamil};
1231.2Skamilint main(void) {struct B b;return 0;}
1241.2SkamilEOF
1251.2Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -pg -o hello test.cpp
1261.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
1271.2Skamil}
1281.2Skamil
1291.2Skamilstatic_destructor_profile_32_body() {
1301.2Skamil	# check whether this arch is 64bit
1311.2Skamil	if ! c++ -dM -E - < /dev/null | fgrep -q _LP64; then
1321.2Skamil		atf_skip "this is not a 64 bit architecture"
1331.2Skamil	fi
1341.2Skamil	if ! c++ -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then
1351.2Skamil		atf_skip "c++ -m32 not supported on this architecture"
1361.2Skamil	else
1371.2Skamil		if fgrep -q _LP64 ./def32; then
1381.2Skamil			atf_fail "c++ -m32 does not generate netbsd32 binaries"
1391.2Skamil		fi
1401.2Skamil	fi
1411.2Skamil
1421.2Skamil	cat > test.cpp << EOF
1431.2Skamil#include <iostream>
1441.2Skamilstruct A {
1451.2Skamil	int i;
1461.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
1471.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
1481.2Skamil};
1491.2Skamilstruct B {
1501.2Skamil	A *m_a;
1511.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
1521.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
1531.2Skamil};
1541.2Skamilint main(void) {struct B b;return 0;}
1551.2SkamilEOF
1561.2Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -m32 -pg -o hello test.cpp
1571.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
1581.2Skamil}
1591.2Skamil
1601.2Skamil
1611.2Skamilstatic_destructor_static_body() {
1621.2Skamil	cat > test.cpp << EOF
1631.2Skamil#include <iostream>
1641.2Skamilstruct A {
1651.2Skamil	int i;
1661.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
1671.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
1681.2Skamil};
1691.2Skamilstruct B {
1701.2Skamil	A *m_a;
1711.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
1721.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
1731.2Skamil};
1741.2Skamilint main(void) {struct B b;return 0;}
1751.2SkamilEOF
1761.2Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -static -o hello test.cpp
1771.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
1781.2Skamil}
1791.2Skamil
1801.1Skamilstatic_destructor_pic_body() {
1811.1Skamil	cat > test.cpp << EOF
1821.1Skamil#include <cstdlib>
1831.1Skamilint callpic(void);
1841.1Skamilint main(void) {callpic();exit(0);}
1851.1SkamilEOF
1861.1Skamil	cat > pic.cpp << EOF
1871.1Skamil#include <iostream>
1881.1Skamilstruct A {
1891.1Skamil	int i;
1901.1Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
1911.1Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
1921.1Skamil};
1931.1Skamilstruct B {
1941.1Skamil	A *m_a;
1951.1Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
1961.1Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
1971.1Skamil};
1981.1Skamilint callpic(void) {struct B b;}
1991.1SkamilEOF
2001.1Skamil
2011.1Skamil	atf_check -s exit:0 -o ignore -e ignore \
2021.1Skamil	    c++ -fPIC -shared -o libtest.so pic.cpp
2031.1Skamil	atf_check -s exit:0 -o ignore -e ignore \
2041.1Skamil	    c++ -o hello test.cpp -L. -ltest
2051.1Skamil
2061.1Skamil	export LD_LIBRARY_PATH=.
2071.1Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
2081.1Skamil}
2091.1Skamil
2101.2Skamilstatic_destructor_pic_32_body() {
2111.2Skamil	# check whether this arch is 64bit
2121.2Skamil	if ! c++ -dM -E - < /dev/null | fgrep -q _LP64; then
2131.2Skamil		atf_skip "this is not a 64 bit architecture"
2141.2Skamil	fi
2151.2Skamil	if ! c++ -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then
2161.2Skamil		atf_skip "c++ -m32 not supported on this architecture"
2171.2Skamil	else
2181.2Skamil		if fgrep -q _LP64 ./def32; then
2191.2Skamil			atf_fail "c++ -m32 does not generate netbsd32 binaries"
2201.2Skamil		fi
2211.2Skamil	fi
2221.2Skamil
2231.2Skamil	cat > test.cpp << EOF
2241.2Skamil#include <cstdlib>
2251.2Skamilint callpic(void);
2261.2Skamilint main(void) {callpic();exit(0);}
2271.2SkamilEOF
2281.2Skamil	cat > pic.cpp << EOF
2291.2Skamil#include <iostream>
2301.2Skamilstruct A {
2311.2Skamil	int i;
2321.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
2331.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
2341.2Skamil};
2351.2Skamilstruct B {
2361.2Skamil	A *m_a;
2371.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
2381.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
2391.2Skamil};
2401.2Skamilint callpic(void) {struct B b;}
2411.2SkamilEOF
2421.2Skamil
2431.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
2441.2Skamil	    c++ -m32 -fPIC -shared -o libtest.so pic.cpp
2451.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
2461.2Skamil	    c++ -m32 -o hello test.cpp -L. -ltest
2471.2Skamil
2481.2Skamil	export LD_LIBRARY_PATH=.
2491.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
2501.2Skamil}
2511.2Skamil
2521.2Skamilstatic_destructor_pic_profile_body() {
2531.2Skamil	cat > test.cpp << EOF
2541.2Skamil#include <cstdlib>
2551.2Skamilint callpic(void);
2561.2Skamilint main(void) {callpic();exit(0);}
2571.2SkamilEOF
2581.2Skamil	cat > pic.cpp << EOF
2591.2Skamil#include <iostream>
2601.2Skamilstruct A {
2611.2Skamil	int i;
2621.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
2631.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
2641.2Skamil};
2651.2Skamilstruct B {
2661.2Skamil	A *m_a;
2671.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
2681.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
2691.2Skamil};
2701.2Skamilint callpic(void) {struct B b;}
2711.2SkamilEOF
2721.2Skamil
2731.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
2741.2Skamil	    c++ -pg -fPIC -shared -o libtest.so pic.cpp
2751.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
2761.2Skamil	    c++ -pg -o hello test.cpp -L. -ltest
2771.2Skamil
2781.2Skamil	export LD_LIBRARY_PATH=.
2791.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
2801.2Skamil}
2811.2Skamil
2821.2Skamilstatic_destructor_pic_profile_32_body() {
2831.2Skamil	# check whether this arch is 64bit
2841.2Skamil	if ! c++ -dM -E - < /dev/null | fgrep -q _LP64; then
2851.2Skamil		atf_skip "this is not a 64 bit architecture"
2861.2Skamil	fi
2871.2Skamil	if ! c++ -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then
2881.2Skamil		atf_skip "c++ -m32 not supported on this architecture"
2891.2Skamil	else
2901.2Skamil		if fgrep -q _LP64 ./def32; then
2911.2Skamil			atf_fail "c++ -m32 does not generate netbsd32 binaries"
2921.2Skamil		fi
2931.2Skamil	fi
2941.2Skamil
2951.2Skamil	cat > test.cpp << EOF
2961.2Skamil#include <cstdlib>
2971.2Skamilint callpic(void);
2981.2Skamilint main(void) {callpic();exit(0);}
2991.2SkamilEOF
3001.2Skamil	cat > pic.cpp << EOF
3011.2Skamil#include <iostream>
3021.2Skamilstruct A {
3031.2Skamil	int i;
3041.2Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
3051.2Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
3061.2Skamil};
3071.2Skamilstruct B {
3081.2Skamil	A *m_a;
3091.2Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
3101.2Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
3111.2Skamil};
3121.2Skamilint callpic(void) {struct B b;}
3131.2SkamilEOF
3141.2Skamil
3151.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
3161.2Skamil	    c++ -m32 -pg -fPIC -shared -o libtest.so pic.cpp
3171.2Skamil	atf_check -s exit:0 -o ignore -e ignore \
3181.2Skamil	    c++ -m32 -pg -o hello test.cpp -L. -ltest
3191.2Skamil
3201.2Skamil	export LD_LIBRARY_PATH=.
3211.2Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
3221.2Skamil}
3231.2Skamil
3241.1Skamilstatic_destructor_pie_body() {
3251.1Skamil	# check whether this arch supports -pie
3261.1Skamil	if ! c++ -pie -dM -E - < /dev/null 2>/dev/null >/dev/null; then
3271.1Skamil		atf_skip "c++ -pie not supported on this architecture"
3281.1Skamil	fi
3291.1Skamil	cat > test.cpp << EOF
3301.1Skamil#include <iostream>
3311.1Skamilstruct A {
3321.1Skamil	int i;
3331.1Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
3341.1Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
3351.1Skamil};
3361.1Skamilstruct B {
3371.1Skamil	A *m_a;
3381.1Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
3391.1Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
3401.1Skamil};
3411.1Skamilint main(void) {struct B b;return 0;}
3421.1SkamilEOF
3431.1Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -fpie -pie -o hello test.cpp
3441.1Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
3451.1Skamil}
3461.1Skamil
3471.1Skamilstatic_destructor32_body() {
3481.1Skamil	# check whether this arch is 64bit
3491.1Skamil	if ! c++ -dM -E - < /dev/null | fgrep -q _LP64; then
3501.1Skamil		atf_skip "this is not a 64 bit architecture"
3511.1Skamil	fi
3521.1Skamil	if ! c++ -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then
3531.1Skamil		atf_skip "c++ -m32 not supported on this architecture"
3541.1Skamil	else
3551.1Skamil		if fgrep -q _LP64 ./def32; then
3561.1Skamil			atf_fail "c++ -m32 does not generate netbsd32 binaries"
3571.1Skamil		fi
3581.1Skamil	fi
3591.1Skamil
3601.1Skamil	cat > test.cpp << EOF
3611.1Skamil#include <iostream>
3621.1Skamilstruct A {
3631.1Skamil	int i;
3641.1Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
3651.1Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
3661.1Skamil};
3671.1Skamilstruct B {
3681.1Skamil	A *m_a;
3691.1Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
3701.1Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
3711.1Skamil};
3721.1Skamilint main(void) {struct B b;return 0;}
3731.1SkamilEOF
3741.1Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -o hello32 -m32 test.cpp
3751.1Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -o hello64 test.cpp
3761.1Skamil	file -b ./hello32 > ./ftype32
3771.1Skamil	file -b ./hello64 > ./ftype64
3781.1Skamil	if diff ./ftype32 ./ftype64 >/dev/null; then
3791.1Skamil		atf_fail "generated binaries do not differ"
3801.1Skamil	fi
3811.1Skamil	echo "32bit binaries on this platform are:"
3821.1Skamil	cat ./ftype32
3831.1Skamil	echo "While native (64bit) binaries are:"
3841.1Skamil	cat ./ftype64
3851.1Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello32
3861.1Skamil
3871.1Skamil	# do another test with static 32bit binaries
3881.1Skamil	cat > test.cpp << EOF
3891.1Skamil#include <iostream>
3901.1Skamilstruct A {
3911.1Skamil	int i;
3921.1Skamil	A(int i):i(i){std::cout << "CTOR A" << std::endl;}
3931.1Skamil	~A() {std::cout << "DTOR A:" << i << std::endl;}
3941.1Skamil};
3951.1Skamilstruct B {
3961.1Skamil	A *m_a;
3971.1Skamil	B(){static A s_a(10);m_a=&s_a;std::cout << "CTOR B" << std::endl;}
3981.1Skamil	~B(){std::cout << "DTOR B:" << (*m_a).i << std::endl;(*m_a).i = 20;}
3991.1Skamil};
4001.1Skamilint main(void) {struct B b;return 0;}
4011.1SkamilEOF
4021.1Skamil	atf_check -s exit:0 -o ignore -e ignore c++ -o hello -m32 \
4031.1Skamil	    -static test.cpp
4041.1Skamil	atf_check -s exit:0 -o inline:"CTOR A\nCTOR B\nDTOR B:10\nDTOR A:20\n" ./hello
4051.1Skamil}
4061.1Skamil
4071.1Skamilatf_init_test_cases()
4081.1Skamil{
4091.1Skamil
4101.1Skamil	atf_add_test_case static_destructor
4111.2Skamil	atf_add_test_case static_destructor_profile
4121.1Skamil	atf_add_test_case static_destructor_pic
4131.1Skamil	atf_add_test_case static_destructor_pie
4141.1Skamil	atf_add_test_case static_destructor32
4151.2Skamil	atf_add_test_case static_destructor_static
4161.2Skamil	atf_add_test_case static_destructor_pic_32
4171.2Skamil	atf_add_test_case static_destructor_pic_profile
4181.2Skamil	atf_add_test_case static_destructor_pic_profile_32
4191.2Skamil	atf_add_test_case static_destructor_profile_32
4201.1Skamil}
421