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 |
Steven Moreland | 52c2371 | 2024-05-31 22:29:25 +0000 | [diff] [blame] | 10 | # - LOCAL_IGNORE_MAX_PAGE_SIZE |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 11 | # - LOCAL_BUILT_MODULE |
| 12 | # - LOCAL_IS_HOST_MODULE |
| 13 | # - LOCAL_MODULE_CLASS |
Steven Moreland | 52c2371 | 2024-05-31 22:29:25 +0000 | [diff] [blame] | 14 | # - TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE |
| 15 | # - TARGET_MAX_PAGE_SIZE_SUPPORTED |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 16 | # - intermediates |
| 17 | # - my_installed_module_stem |
| 18 | # - my_prebuilt_src_file |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 19 | # - my_check_elf_file_shared_lib_files |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame] | 20 | # - my_system_shared_libraries |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 21 | |
| 22 | ifndef LOCAL_IS_HOST_MODULE |
| 23 | ifneq ($(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES EXECUTABLES NATIVE_TESTS),) |
| 24 | check_elf_files_stamp := $(intermediates)/check_elf_files.timestamp |
| 25 | $(check_elf_files_stamp): PRIVATE_SONAME := $(if $(filter $(LOCAL_MODULE_CLASS),SHARED_LIBRARIES),$(my_installed_module_stem)) |
| 26 | $(check_elf_files_stamp): PRIVATE_ALLOW_UNDEFINED_SYMBOLS := $(LOCAL_ALLOW_UNDEFINED_SYMBOLS) |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame] | 27 | $(check_elf_files_stamp): PRIVATE_SYSTEM_SHARED_LIBRARIES := $(my_system_shared_libraries) |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 28 | # PRIVATE_SHARED_LIBRARY_FILES are file paths to built shared libraries. |
| 29 | # In addition to $(my_check_elf_file_shared_lib_files), some file paths are |
| 30 | # added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`. |
| 31 | $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files) |
Steven Moreland | 52c2371 | 2024-05-31 22:29:25 +0000 | [diff] [blame] | 32 | |
| 33 | # For different page sizes to work, we must support a larger max page size |
| 34 | # as well as properly reflect page size at runtime. Limit this check, since many |
| 35 | # devices set the max page size (for future proof) than actually use the |
| 36 | # larger page size. |
| 37 | ifeq ($(strip $(TARGET_CHECK_PREBUILT_MAX_PAGE_SIZE)),true) |
| 38 | ifeq ($(strip $(LOCAL_IGNORE_MAX_PAGE_SIZE)),true) |
| 39 | $(check_elf_files_stamp): PRIVATE_MAX_PAGE_SIZE := |
| 40 | else |
| 41 | $(check_elf_files_stamp): PRIVATE_MAX_PAGE_SIZE := $(TARGET_MAX_PAGE_SIZE_SUPPORTED) |
| 42 | endif |
| 43 | else |
| 44 | $(check_elf_files_stamp): PRIVATE_MAX_PAGE_SIZE := |
| 45 | endif |
| 46 | |
Logan Chien | b1c11de | 2019-02-14 20:52:21 +0800 | [diff] [blame] | 47 | $(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] | 48 | @echo Check prebuilt ELF binary: $< |
| 49 | $(hide) mkdir -p $(dir $@) |
| 50 | $(hide) rm -f $@ |
| 51 | $(hide) $(CHECK_ELF_FILE) \ |
| 52 | --skip-bad-elf-magic \ |
| 53 | --skip-unknown-elf-machine \ |
Steven Moreland | 52c2371 | 2024-05-31 22:29:25 +0000 | [diff] [blame] | 54 | $(if $(PRIVATE_MAX_PAGE_SIZE),--max-page-size=$(PRIVATE_MAX_PAGE_SIZE)) \ |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 55 | $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \ |
| 56 | $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \ |
Logan Chien | 751a987 | 2019-12-16 15:55:16 -0800 | [diff] [blame] | 57 | $(foreach l,$(PRIVATE_SYSTEM_SHARED_LIBRARIES),--system-shared-lib $(l)) \ |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 58 | $(if $(PRIVATE_ALLOW_UNDEFINED_SYMBOLS),--allow-undefined-symbols) \ |
| 59 | --llvm-readobj=$(LLVM_READOBJ) \ |
| 60 | $< |
| 61 | $(hide) touch $@ |
| 62 | |
Dan Willemsen | 17315c2 | 2020-04-28 14:30:56 -0700 | [diff] [blame] | 63 | CHECK_ELF_FILES.$(check_elf_files_stamp) := 1 |
| 64 | |
Logan Chien | e87ff2d | 2019-02-14 14:27:33 +0800 | [diff] [blame] | 65 | ifneq ($(strip $(LOCAL_CHECK_ELF_FILES)),false) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 66 | ifneq ($(strip $(BUILD_BROKEN_PREBUILT_ELF_FILES)),true) |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 67 | $(LOCAL_BUILT_MODULE): $(check_elf_files_stamp) |
Logan Chien | 2a88075 | 2019-09-17 09:45:09 -0700 | [diff] [blame] | 68 | check-elf-files: $(check_elf_files_stamp) |
| 69 | endif # BUILD_BROKEN_PREBUILT_ELF_FILES |
| 70 | endif # LOCAL_CHECK_ELF_FILES |
| 71 | |
Logan Chien | 0e53d88 | 2018-11-06 17:32:40 +0800 | [diff] [blame] | 72 | endif # SHARED_LIBRARIES, EXECUTABLES, NATIVE_TESTS |
| 73 | endif # !LOCAL_IS_HOST_MODULE |