xref: /aosp_15_r20/build/bazel/tests/bionic/verify_bionic_outputs.sh (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker#!/bin/bash
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Copyright 2021 Google Inc. All rights reserved.
4*7594170eSAndroid Build Coastguard Worker#
5*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*7594170eSAndroid Build Coastguard Worker#
11*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*7594170eSAndroid Build Coastguard Worker# limitations under the License.
16*7594170eSAndroid Build Coastguard Worker
17*7594170eSAndroid Build Coastguard Workerset -euo pipefail
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard Workersource "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
20*7594170eSAndroid Build Coastguard Worker
21*7594170eSAndroid Build Coastguard WorkerNM="$1"
22*7594170eSAndroid Build Coastguard WorkerREADELF="$2"
23*7594170eSAndroid Build Coastguard Worker
24*7594170eSAndroid Build Coastguard Worker# This should be abstracted to a unit-test library when it has more uses.
25*7594170eSAndroid Build Coastguard Workerfunction assert_contains_regex() {
26*7594170eSAndroid Build Coastguard Worker    local needle="$1"
27*7594170eSAndroid Build Coastguard Worker    local haystack="$2"
28*7594170eSAndroid Build Coastguard Worker    local message="${3:-Expected regexp "$needle" not found in\n"$haystack"}"
29*7594170eSAndroid Build Coastguard Worker    echo "${haystack}" | grep "${needle}" && return 0
30*7594170eSAndroid Build Coastguard Worker
31*7594170eSAndroid Build Coastguard Worker    echo -e "$message"
32*7594170eSAndroid Build Coastguard Worker    exit 1
33*7594170eSAndroid Build Coastguard Worker}
34*7594170eSAndroid Build Coastguard Worker
35*7594170eSAndroid Build Coastguard Worker# Test that a library is a static library.
36*7594170eSAndroid Build Coastguard Workerfunction test_is_static_library() {
37*7594170eSAndroid Build Coastguard Worker    local filepath="$(readlink -f $1)"; shift
38*7594170eSAndroid Build Coastguard Worker    local metadata="$($READELF -h ${filepath})"
39*7594170eSAndroid Build Coastguard Worker    assert_contains_regex "Type:.*REL (Relocatable file)" "${metadata}"
40*7594170eSAndroid Build Coastguard Worker}
41*7594170eSAndroid Build Coastguard Worker
42*7594170eSAndroid Build Coastguard Worker# Test that a library is a shared library.
43*7594170eSAndroid Build Coastguard Workerfunction test_is_shared_library() {
44*7594170eSAndroid Build Coastguard Worker    local filepath="$(readlink -f $1)"; shift
45*7594170eSAndroid Build Coastguard Worker    local metadata="$($READELF -h ${filepath})"
46*7594170eSAndroid Build Coastguard Worker    assert_contains_regex "Type:.*DYN (Shared object file)" "${metadata}"
47*7594170eSAndroid Build Coastguard Worker}
48*7594170eSAndroid Build Coastguard Worker
49*7594170eSAndroid Build Coastguard Worker# Test that the shared library contains a symbol
50*7594170eSAndroid Build Coastguard Workerfunction test_shared_library_symbols() {
51*7594170eSAndroid Build Coastguard Worker    local filepath="$(readlink -f $1)"; shift
52*7594170eSAndroid Build Coastguard Worker    local symbols=("$@"); shift
53*7594170eSAndroid Build Coastguard Worker    local nm_output="$($NM -D "${filepath}")"
54*7594170eSAndroid Build Coastguard Worker    for symbol in "${symbols[@]}"; do
55*7594170eSAndroid Build Coastguard Worker        assert_contains_regex "${symbol}" "${nm_output}"
56*7594170eSAndroid Build Coastguard Worker    done
57*7594170eSAndroid Build Coastguard Worker}
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Worker# Test file contents of //bionic/linker:ld-android
60*7594170eSAndroid Build Coastguard Workerfunction test_ld-android() {
61*7594170eSAndroid Build Coastguard Worker    local shared_library="$(rlocation __main__/bionic/linker/ld-android/ld-android.so)"
62*7594170eSAndroid Build Coastguard Worker    local static_library="$(rlocation __main__/bionic/linker/libld-android_bp2build_cc_library_static.a)"
63*7594170eSAndroid Build Coastguard Worker
64*7594170eSAndroid Build Coastguard Worker    test_is_shared_library "${shared_library}"
65*7594170eSAndroid Build Coastguard Worker    test_is_static_library "${static_library}"
66*7594170eSAndroid Build Coastguard Worker
67*7594170eSAndroid Build Coastguard Worker    symbols=(
68*7594170eSAndroid Build Coastguard Worker        __loader_add_thread_local_dtor
69*7594170eSAndroid Build Coastguard Worker        __loader_android_create_namespace
70*7594170eSAndroid Build Coastguard Worker        __loader_android_dlopen_ext
71*7594170eSAndroid Build Coastguard Worker        __loader_android_dlwarning
72*7594170eSAndroid Build Coastguard Worker        __loader_android_get_application_target_sdk_version
73*7594170eSAndroid Build Coastguard Worker        __loader_android_get_exported_namespace
74*7594170eSAndroid Build Coastguard Worker        __loader_android_get_LD_LIBRARY_PATH
75*7594170eSAndroid Build Coastguard Worker        __loader_android_init_anonymous_namespace
76*7594170eSAndroid Build Coastguard Worker        __loader_android_link_namespaces
77*7594170eSAndroid Build Coastguard Worker        __loader_android_link_namespaces_all_libs
78*7594170eSAndroid Build Coastguard Worker        __loader_android_set_application_target_sdk_version
79*7594170eSAndroid Build Coastguard Worker        __loader_android_update_LD_LIBRARY_PATH
80*7594170eSAndroid Build Coastguard Worker        __loader_cfi_fail
81*7594170eSAndroid Build Coastguard Worker        __loader_dladdr
82*7594170eSAndroid Build Coastguard Worker        __loader_dlclose
83*7594170eSAndroid Build Coastguard Worker        __loader_dlerror
84*7594170eSAndroid Build Coastguard Worker        __loader_dl_iterate_phdr
85*7594170eSAndroid Build Coastguard Worker        __loader_dlopen
86*7594170eSAndroid Build Coastguard Worker        __loader_dlsym
87*7594170eSAndroid Build Coastguard Worker        __loader_dlvsym
88*7594170eSAndroid Build Coastguard Worker        __loader_remove_thread_local_dtor
89*7594170eSAndroid Build Coastguard Worker        __loader_shared_globals
90*7594170eSAndroid Build Coastguard Worker        _db_dlactivity
91*7594170eSAndroid Build Coastguard Worker    )
92*7594170eSAndroid Build Coastguard Worker
93*7594170eSAndroid Build Coastguard Worker    test_shared_library_symbols "${shared_library}" "${symbols[@]}"
94*7594170eSAndroid Build Coastguard Worker}
95*7594170eSAndroid Build Coastguard Worker
96*7594170eSAndroid Build Coastguard Workerfunction test_libdl_android() {
97*7594170eSAndroid Build Coastguard Worker    local shared_library="$(rlocation __main__/bionic/libdl/libdl_android/libdl_android.so)"
98*7594170eSAndroid Build Coastguard Worker    local static_library="$(rlocation __main__/bionic/libdl/liblibdl_android_bp2build_cc_library_static.a)"
99*7594170eSAndroid Build Coastguard Worker
100*7594170eSAndroid Build Coastguard Worker    test_is_shared_library "${shared_library}"
101*7594170eSAndroid Build Coastguard Worker    test_is_static_library "${static_library}"
102*7594170eSAndroid Build Coastguard Worker
103*7594170eSAndroid Build Coastguard Worker    symbols=(
104*7594170eSAndroid Build Coastguard Worker        android_create_namespace
105*7594170eSAndroid Build Coastguard Worker        android_dlwarning
106*7594170eSAndroid Build Coastguard Worker        android_get_exported_namespace
107*7594170eSAndroid Build Coastguard Worker        android_get_LD_LIBRARY_PATH
108*7594170eSAndroid Build Coastguard Worker        android_init_anonymous_namespace
109*7594170eSAndroid Build Coastguard Worker        android_link_namespaces
110*7594170eSAndroid Build Coastguard Worker        android_set_application_target_sdk_version
111*7594170eSAndroid Build Coastguard Worker        android_update_LD_LIBRARY_PATH
112*7594170eSAndroid Build Coastguard Worker    )
113*7594170eSAndroid Build Coastguard Worker
114*7594170eSAndroid Build Coastguard Worker    test_shared_library_symbols "${shared_library}" "${symbols[@]}"
115*7594170eSAndroid Build Coastguard Worker}
116*7594170eSAndroid Build Coastguard Worker
117*7594170eSAndroid Build Coastguard Workerfunction test_libc() {
118*7594170eSAndroid Build Coastguard Worker    local shared_library="$(rlocation __main__/bionic/libc/libc/libc.so)"
119*7594170eSAndroid Build Coastguard Worker    local static_library="$(rlocation __main__/bionic/libc/liblibc_bp2build_cc_library_static.a)"
120*7594170eSAndroid Build Coastguard Worker
121*7594170eSAndroid Build Coastguard Worker    test_is_shared_library "${shared_library}"
122*7594170eSAndroid Build Coastguard Worker    test_is_static_library "${static_library}"
123*7594170eSAndroid Build Coastguard Worker
124*7594170eSAndroid Build Coastguard Worker    symbols=(
125*7594170eSAndroid Build Coastguard Worker        __libc_get_static_tls_bounds
126*7594170eSAndroid Build Coastguard Worker        __libc_register_thread_exit_callback
127*7594170eSAndroid Build Coastguard Worker        __libc_iterate_dynamic_tls
128*7594170eSAndroid Build Coastguard Worker        __libc_register_dynamic_tls_listeners
129*7594170eSAndroid Build Coastguard Worker        android_reset_stack_guards
130*7594170eSAndroid Build Coastguard Worker        ffsl
131*7594170eSAndroid Build Coastguard Worker        ffsll
132*7594170eSAndroid Build Coastguard Worker        pidfd_getfd
133*7594170eSAndroid Build Coastguard Worker        pidfd_open
134*7594170eSAndroid Build Coastguard Worker        pidfd_send_signal
135*7594170eSAndroid Build Coastguard Worker        process_madvise
136*7594170eSAndroid Build Coastguard Worker        _Unwind_Backtrace  # apex llndk
137*7594170eSAndroid Build Coastguard Worker        _Unwind_DeleteException  # apex llndk
138*7594170eSAndroid Build Coastguard Worker        _Unwind_Find_FDE  # apex llndk
139*7594170eSAndroid Build Coastguard Worker        _Unwind_FindEnclosingFunction  # apex llndk
140*7594170eSAndroid Build Coastguard Worker        _Unwind_GetCFA  # apex llndk
141*7594170eSAndroid Build Coastguard Worker        _Unwind_GetDataRelBase  # apex llndk
142*7594170eSAndroid Build Coastguard Worker        _Unwind_GetGR  # apex llndk
143*7594170eSAndroid Build Coastguard Worker        _Unwind_GetIP  # apex llndk
144*7594170eSAndroid Build Coastguard Worker        _Unwind_GetIPInfo  # apex llndk
145*7594170eSAndroid Build Coastguard Worker        _Unwind_GetLanguageSpecificData  # apex llndk
146*7594170eSAndroid Build Coastguard Worker        _Unwind_GetRegionStart  # apex llndk
147*7594170eSAndroid Build Coastguard Worker        _Unwind_GetTextRelBase  # apex llndk
148*7594170eSAndroid Build Coastguard Worker        _Unwind_RaiseException  # apex llndk
149*7594170eSAndroid Build Coastguard Worker        _Unwind_Resume  # apex llndk
150*7594170eSAndroid Build Coastguard Worker        _Unwind_Resume_or_Rethrow  # apex llndk
151*7594170eSAndroid Build Coastguard Worker        _Unwind_SetGR  # apex llndk
152*7594170eSAndroid Build Coastguard Worker        _Unwind_SetIP  # apex llndk
153*7594170eSAndroid Build Coastguard Worker    )
154*7594170eSAndroid Build Coastguard Worker
155*7594170eSAndroid Build Coastguard Worker    test_shared_library_symbols "${shared_library}" "${symbols[@]}"
156*7594170eSAndroid Build Coastguard Worker}
157*7594170eSAndroid Build Coastguard Worker
158*7594170eSAndroid Build Coastguard Workertest_ld-android
159*7594170eSAndroid Build Coastguard Workertest_libdl_android
160*7594170eSAndroid Build Coastguard Workertest_libc
161