Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 1 | # Check the correctness of the prebuilt ELF files |
| 2 | # |
| 3 | # This check ensures that DT_SONAME matches with the filename, DT_NEEDED |
| 4 | # matches the shared libraries specified in LOCAL_SHARED_LIBRARIES, and all |
| 5 | # undefined symbols in the prebuilt binary can be found in one of the shared |
| 6 | # libraries specified in LOCAL_SHARED_LIBRARIES. |
| 7 | # |
| 8 | # Inputs: |
| 9 | # - LOCAL_ALLOW_UNDEFINED_SYMBOLS |
| 10 | # - LOCAL_BUILT_MODULE |
| 11 | # - LOCAL_IS_HOST_MODULE |
| 12 | # - LOCAL_MODULE_CLASS |
| 13 | # - intermediates |
| 14 | # - my_installed_module_stem |
| 15 | # - my_prebuilt_src_file |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 16 | # - my_check_elf_file_shared_lib_files |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 17 | |
| 18 | ifndef LOCAL_IS_HOST_MODULE |
| 19 | ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),) |
| 20 | check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp |
| 21 | $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem)) |
| 22 | $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS) |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 23 | # PRIVATE_SHARED_LIBRARY_FILES are file paths to built shared libraries. |
| 24 | # In addition to $(my_check_elf_file_shared_lib_files), some file paths are |
| 25 | # added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`. |
| 26 | $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files) |
| 27 | $(check_elf_files_stamp): $(my_prebuilt_src_file) $(my_check_elf_file_shared_lib_files) $(CHECK_ELF_FILE) $(LLVM_READOBJ) |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 28 | @echo Check prebuilt ELF binary: $< |
| 29 | $(hide) mkdir -p $(dir $@) |
| 30 | $(hide) rm -f $@ |
| 31 | $(hide) $(CHECK_ELF_FILE) \ |
| 32 | --skip-bad-elf-magic \ |
| 33 | --skip-unknown-elf-machine \ |
| 34 | $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \ |
| 35 | $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \ |
| 36 | $(if $(PRIVATE_ALLOW_UNDEFINED_SYMBOLS),--allow-undefined-symbols) \ |
| 37 | --llvm-readobj=$(LLVM_READOBJ) \ |
| 38 | $< |
| 39 | $(hide) touch $@ |
| 40 | |
Dan Willemsen | 17315c2 | 2020-04-28 14:30:56 -0700 | [diff] [blame] | 41 | CHECK_ELF_FILES.$(check_elf_files_stamp) := 1 |
| 42 | |
Logan Chien | e87ff2d | 2019-02-14 14:27:33 +0800 | [diff] [blame] | 43 | ifneq ($(strip $(LOCAL_CHECK_ELF_FILES)),false) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 44 | ifneq ($(strip $(BUILD_BROKEN_PREBUILT_ELF_FILES)),true) |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 45 | $(LOCAL_BUILT_MODULE): $(check_elf_files_stamp) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 46 | check-elf-files: $(check_elf_files_stamp) |
| 47 | endif # BUILD_BROKEN_PREBUILT_ELF_FILES |
| 48 | endif # LOCAL_CHECK_ELF_FILES |
| 49 | |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 50 | endif # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS |
| 51 | endif # !LOCAL_IS_HOST_MODULE |