1 1.13 riastrad # $NetBSD: t_hello.sh,v 1.13 2025/04/16 01:52:42 riastradh Exp $ 2 1.1 jruoho # 3 1.1 jruoho # Copyright (c) 2011 The NetBSD Foundation, Inc. 4 1.1 jruoho # All rights reserved. 5 1.1 jruoho # 6 1.1 jruoho # Redistribution and use in source and binary forms, with or without 7 1.1 jruoho # modification, are permitted provided that the following conditions 8 1.1 jruoho # are met: 9 1.1 jruoho # 1. Redistributions of source code must retain the above copyright 10 1.1 jruoho # notice, this list of conditions and the following disclaimer. 11 1.1 jruoho # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 jruoho # notice, this list of conditions and the following disclaimer in the 13 1.1 jruoho # documentation and/or other materials provided with the distribution. 14 1.1 jruoho # 15 1.1 jruoho # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 jruoho # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 jruoho # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 jruoho # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 jruoho # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 jruoho # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 jruoho # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 jruoho # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 jruoho # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 jruoho # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 jruoho # POSSIBILITY OF SUCH DAMAGE. 26 1.1 jruoho # 27 1.1 jruoho 28 1.1 jruoho atf_test_case hello 29 1.1 jruoho hello_head() { 30 1.1 jruoho atf_set "descr" "compile and run \"hello world\"" 31 1.1 jruoho atf_set "require.progs" "cc" 32 1.1 jruoho } 33 1.1 jruoho 34 1.5 martin atf_test_case hello_profile 35 1.8 mrg hello_profile_head() { 36 1.5 martin atf_set "descr" "compile and run \"hello world\" with profiling option" 37 1.5 martin atf_set "require.progs" "cc" 38 1.5 martin } 39 1.5 martin 40 1.1 jruoho atf_test_case hello_pic 41 1.1 jruoho hello_pic_head() { 42 1.1 jruoho atf_set "descr" "compile and run PIC \"hello world\"" 43 1.1 jruoho atf_set "require.progs" "cc" 44 1.1 jruoho } 45 1.1 jruoho 46 1.2 martin atf_test_case hello_pie 47 1.2 martin hello_pie_head() { 48 1.3 gson atf_set "descr" "compile and run position independent (PIE) \"hello world\"" 49 1.2 martin atf_set "require.progs" "cc" 50 1.2 martin } 51 1.2 martin 52 1.1 jruoho atf_test_case hello32 53 1.1 jruoho hello32_head() { 54 1.1 jruoho atf_set "descr" "compile and run \"hello world\" for/in netbsd32 emulation" 55 1.1 jruoho atf_set "require.progs" "cc file diff cat" 56 1.1 jruoho } 57 1.1 jruoho 58 1.1 jruoho hello_body() { 59 1.1 jruoho cat > test.c << EOF 60 1.1 jruoho #include <stdio.h> 61 1.1 jruoho #include <stdlib.h> 62 1.1 jruoho int main(void) {printf("hello world\n");exit(0);} 63 1.1 jruoho EOF 64 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore cc -o hello test.c 65 1.1 jruoho atf_check -s exit:0 -o inline:"hello world\n" ./hello 66 1.1 jruoho } 67 1.1 jruoho 68 1.5 martin hello_profile_body() { 69 1.13 riastrad case `uname -m` in 70 1.13 riastrad riscv) atf_expect_fail "PR port-riscv/59301:" \ 71 1.13 riastrad " riscv: missing MKPROFILE=yes support" 72 1.13 riastrad ;; 73 1.13 riastrad esac 74 1.13 riastrad 75 1.5 martin cat > test.c << EOF 76 1.5 martin #include <stdio.h> 77 1.5 martin #include <stdlib.h> 78 1.5 martin int main(void) {printf("hello world\n");exit(0);} 79 1.5 martin EOF 80 1.12 skrll atf_check -s exit:0 -o ignore -e ignore cc -static -o hello -pg test.c 81 1.5 martin atf_check -s exit:0 -o inline:"hello world\n" ./hello 82 1.7 maya atf_check -s exit:0 -o ignore -e ignore cc -o hello2 -fprofile-generate test.c 83 1.7 maya atf_check -s exit:0 -o inline:"hello world\n" ./hello2 84 1.5 martin } 85 1.5 martin 86 1.1 jruoho hello_pic_body() { 87 1.1 jruoho cat > test.c << EOF 88 1.1 jruoho #include <stdlib.h> 89 1.4 kamil int callpic(void); 90 1.1 jruoho int main(void) {callpic();exit(0);} 91 1.1 jruoho EOF 92 1.1 jruoho cat > pic.c << EOF 93 1.1 jruoho #include <stdio.h> 94 1.4 kamil int callpic(void) {printf("hello world\n");return 0;} 95 1.1 jruoho EOF 96 1.1 jruoho 97 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore \ 98 1.4 kamil cc -fPIC -shared -o libtest.so pic.c 99 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore \ 100 1.1 jruoho cc -o hello test.c -L. -ltest 101 1.1 jruoho 102 1.1 jruoho export LD_LIBRARY_PATH=. 103 1.1 jruoho atf_check -s exit:0 -o inline:"hello world\n" ./hello 104 1.1 jruoho } 105 1.1 jruoho 106 1.2 martin hello_pie_body() { 107 1.2 martin # check whether this arch supports -pie 108 1.2 martin if ! cc -pie -dM -E - < /dev/null 2>/dev/null >/dev/null; then 109 1.2 martin atf_skip "cc -pie not supported on this architecture" 110 1.2 martin fi 111 1.2 martin cat > test.c << EOF 112 1.2 martin #include <stdio.h> 113 1.2 martin #include <stdlib.h> 114 1.2 martin int main(void) {printf("hello world\n");exit(0);} 115 1.2 martin EOF 116 1.2 martin atf_check -s exit:0 -o ignore -e ignore cc -fpie -pie -o hello test.c 117 1.2 martin atf_check -s exit:0 -o inline:"hello world\n" ./hello 118 1.2 martin } 119 1.2 martin 120 1.1 jruoho hello32_body() { 121 1.1 jruoho # check whether this arch is 64bit 122 1.1 jruoho if ! cc -dM -E - < /dev/null | fgrep -q _LP64; then 123 1.1 jruoho atf_skip "this is not a 64 bit architecture" 124 1.1 jruoho fi 125 1.1 jruoho if ! cc -m32 -dM -E - < /dev/null 2>/dev/null > ./def32; then 126 1.1 jruoho atf_skip "cc -m32 not supported on this architecture" 127 1.1 jruoho else 128 1.1 jruoho if fgrep -q _LP64 ./def32; then 129 1.1 jruoho atf_fail "cc -m32 does not generate netbsd32 binaries" 130 1.1 jruoho fi 131 1.1 jruoho fi 132 1.1 jruoho 133 1.1 jruoho cat > test.c << EOF 134 1.1 jruoho #include <stdio.h> 135 1.1 jruoho #include <stdlib.h> 136 1.1 jruoho int main(void) {printf("hello world\n");exit(0);} 137 1.1 jruoho EOF 138 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore cc -o hello32 -m32 test.c 139 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore cc -o hello64 test.c 140 1.1 jruoho file -b ./hello32 > ./ftype32 141 1.1 jruoho file -b ./hello64 > ./ftype64 142 1.1 jruoho if diff ./ftype32 ./ftype64 >/dev/null; then 143 1.1 jruoho atf_fail "generated binaries do not differ" 144 1.1 jruoho fi 145 1.1 jruoho echo "32bit binaries on this platform are:" 146 1.1 jruoho cat ./ftype32 147 1.1 jruoho echo "While native (64bit) binaries are:" 148 1.1 jruoho cat ./ftype64 149 1.1 jruoho atf_check -s exit:0 -o inline:"hello world\n" ./hello32 150 1.1 jruoho 151 1.1 jruoho # do another test with static 32bit binaries 152 1.1 jruoho cat > test.c << EOF 153 1.1 jruoho #include <stdio.h> 154 1.1 jruoho #include <stdlib.h> 155 1.1 jruoho int main(void) {printf("hello static world\n");exit(0);} 156 1.1 jruoho EOF 157 1.1 jruoho atf_check -s exit:0 -o ignore -e ignore cc -o hello -m32 \ 158 1.1 jruoho -static test.c 159 1.1 jruoho atf_check -s exit:0 -o inline:"hello static world\n" ./hello 160 1.6 martin 161 1.6 martin # and another test with profile 32bit binaries 162 1.6 martin cat > test.c << EOF 163 1.6 martin #include <stdio.h> 164 1.6 martin #include <stdlib.h> 165 1.6 martin int main(void) {printf("hello 32bit profile world\n");exit(0);} 166 1.6 martin EOF 167 1.6 martin atf_check -s exit:0 -o ignore -e ignore cc -o hello -m32 \ 168 1.6 martin -pg test.c 169 1.6 martin atf_check -s exit:0 -o inline:"hello 32bit profile world\n" ./hello 170 1.1 jruoho } 171 1.1 jruoho 172 1.1 jruoho atf_init_test_cases() 173 1.1 jruoho { 174 1.1 jruoho 175 1.1 jruoho atf_add_test_case hello 176 1.5 martin atf_add_test_case hello_profile 177 1.1 jruoho atf_add_test_case hello_pic 178 1.2 martin atf_add_test_case hello_pie 179 1.1 jruoho atf_add_test_case hello32 180 1.1 jruoho } 181