1 // 2 // libdl 3 // 4 cc_library_static { 5 name: "libdl_static", 6 defaults: ["linux_bionic_supported"], 7 recovery_available: true, 8 9 srcs: [ 10 "libdl.cpp", 11 "libdl_cfi.cpp", 12 ], 13 14 cflags: [ 15 "-Wall", 16 "-Wextra", 17 "-Wunused", 18 "-Werror", 19 ], 20 21 // For private/CFIShadow.h. 22 include_dirs: ["bionic/libc"], 23 24 stl: "none", 25 system_shared_libs: [], 26 27 sanitize: { 28 never: true, 29 }, 30 } 31 32 cc_library { 33 name: "libdl", 34 recovery_available: true, 35 static_ndk_lib: true, 36 37 defaults: ["linux_bionic_supported"], 38 39 // NOTE: --exclude-libs=libgcc.a makes sure that any symbols libdl.so pulls from 40 // libgcc.a are made static to libdl.so. This in turn ensures that libraries that 41 // a) pull symbols from libgcc.a and b) depend on libdl.so will not rely on libdl.so 42 // to provide those symbols, but will instead pull them from libgcc.a. Specifically, 43 // we use this property to make sure libc.so has its own copy of the code from 44 // libgcc.a it uses. 45 // 46 // DO NOT REMOVE --exclude-libs! 47 48 ldflags: [ 49 "-Wl,--exclude-libs=libgcc.a", 50 "-Wl,--exclude-libs=libgcc_stripped.a", 51 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a", 52 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a", 53 "-Wl,--exclude-libs=libclang_rt.builtins-x86-android.a", 54 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a", 55 ], 56 57 // for x86, exclude libgcc_eh.a for the same reasons as above 58 arch: { 59 arm: { 60 version_script: ":libdl.arm.map", 61 pack_relocations: false, 62 ldflags: ["-Wl,--hash-style=both"], 63 }, 64 arm64: { 65 version_script: ":libdl.arm64.map", 66 }, 67 x86: { 68 pack_relocations: false, 69 ldflags: [ 70 "-Wl,--exclude-libs=libgcc_eh.a", 71 "-Wl,--hash-style=both", 72 ], 73 version_script: ":libdl.x86.map", 74 }, 75 x86_64: { 76 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], 77 version_script: ":libdl.x86_64.map", 78 }, 79 }, 80 shared: { 81 whole_static_libs: ["libdl_static"], 82 }, 83 static: { 84 srcs: ["libdl_static.cpp"], 85 }, 86 cflags: [ 87 "-Wall", 88 "-Wextra", 89 "-Wunused", 90 "-Werror", 91 ], 92 stl: "none", 93 94 nocrt: true, 95 system_shared_libs: [], 96 97 // Opt out of native_coverage when opting out of system_shared_libs 98 native_coverage: false, 99 100 // This is placeholder library the actual implementation is (currently) 101 // provided by the linker. 102 shared_libs: ["ld-android"], 103 104 sanitize: { 105 never: true, 106 }, 107 108 stubs: { 109 symbol_file: "libdl.map.txt", 110 versions: ["10000"], 111 }, 112 } 113 114 cc_library { 115 name: "libdl_android", 116 117 defaults: ["linux_bionic_supported"], 118 recovery_available: true, 119 120 // NOTE: --exclude-libs=libgcc.a makes sure that any symbols libdl.so pulls from 121 // libgcc.a are made static to libdl.so. This in turn ensures that libraries that 122 // a) pull symbols from libgcc.a and b) depend on libdl.so will not rely on libdl.so 123 // to provide those symbols, but will instead pull them from libgcc.a. Specifically, 124 // we use this property to make sure libc.so has its own copy of the code from 125 // libgcc.a it uses. 126 // 127 // DO NOT REMOVE --exclude-libs! 128 129 ldflags: [ 130 "-Wl,--exclude-libs=libgcc.a", 131 "-Wl,--exclude-libs=libgcc_stripped.a", 132 "-Wl,--exclude-libs=libclang_rt.builtins-arm-android.a", 133 "-Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a", 134 "-Wl,--exclude-libs=libclang_rt.builtins-x86-android.a", 135 "-Wl,--exclude-libs=libclang_rt.builtins-x86_64-android.a", 136 ], 137 138 // for x86, exclude libgcc_eh.a for the same reasons as above 139 arch: { 140 x86: { 141 ldflags: [ 142 "-Wl,--exclude-libs=libgcc_eh.a", 143 ], 144 }, 145 x86_64: { 146 ldflags: ["-Wl,--exclude-libs=libgcc_eh.a"], 147 }, 148 }, 149 150 srcs: [ "libdl_android.cpp" ], 151 version_script: "libdl_android.map.txt", 152 153 cflags: [ 154 "-Wall", 155 "-Wextra", 156 "-Wunused", 157 "-Werror", 158 ], 159 160 stl: "none", 161 162 nocrt: true, 163 system_shared_libs: [], 164 165 // Opt out of native_coverage when opting out of system_shared_libs 166 native_coverage: false, 167 168 // This is placeholder library the actual implementation is (currently) 169 // provided by the linker. 170 shared_libs: ["ld-android"], 171 172 sanitize: { 173 never: true, 174 }, 175 176 stubs: { 177 symbol_file: "libdl_android.map.txt", 178 versions: ["10000"], 179 }, 180 } 181 182 ndk_library { 183 name: "libdl", 184 symbol_file: "libdl.map.txt", 185 first_version: "9", 186 } 187 188 llndk_library { 189 name: "libdl", 190 symbol_file: "libdl.map.txt", 191 } 192 193 genrule { 194 name: "libdl.arm.map", 195 out: ["libdl.arm.map"], 196 srcs: ["libdl.map.txt"], 197 tool_files: [":bionic-generate-version-script"], 198 cmd: "$(location :bionic-generate-version-script) arm $(in) $(out)", 199 } 200 201 genrule { 202 name: "libdl.arm64.map", 203 out: ["libdl.arm64.map"], 204 srcs: ["libdl.map.txt"], 205 tool_files: [":bionic-generate-version-script"], 206 cmd: "$(location :bionic-generate-version-script) arm64 $(in) $(out)", 207 } 208 209 genrule { 210 name: "libdl.x86.map", 211 out: ["libdl.x86.map"], 212 srcs: ["libdl.map.txt"], 213 tool_files: [":bionic-generate-version-script"], 214 cmd: "$(location :bionic-generate-version-script) x86 $(in) $(out)", 215 } 216 217 genrule { 218 name: "libdl.x86_64.map", 219 out: ["libdl.x86_64.map"], 220 srcs: ["libdl.map.txt"], 221 tool_files: [":bionic-generate-version-script"], 222 cmd: "$(location :bionic-generate-version-script) x86_64 $(in) $(out)", 223 } 224