diff --git a/extract-files.py b/extract-files.py index 0e344c3..6a71696 100755 --- a/extract-files.py +++ b/extract-files.py @@ -5,6 +5,8 @@ # from extract_utils.fixups_blob import ( + BlobFixupCtx, + File, blob_fixup, blob_fixups_user_type, ) @@ -16,6 +18,12 @@ from extract_utils.main import ( ExtractUtils, ExtractUtilsModule, ) +from extract_utils.tools import ( + llvm_objdump_path, +) +from extract_utils.utils import ( + run_cmd, +) namespace_imports = [ 'hardware/qcom-caf/sm8150', @@ -24,6 +32,33 @@ namespace_imports = [ 'vendor/xiaomi/sm6150-common', ] + +def blob_fixup_graphic_buffer_size( + ctx: BlobFixupCtx, + file: File, + file_path: str, + *args, + **kwargs, +): + for line in run_cmd( + [ + llvm_objdump_path, + '--disassemble-all', + file_path, + ] + ).splitlines(): + line = line.split(maxsplit=5) + if len(line) != 6: + continue + + # The size of GraphicBuffer changed from 0x100 to 0xd30 + offset, _, instruction, register, value, _ = line + if instruction == 'mov' and register[:-1] == 'w0' and value == '#0x100': + with open(file_path, 'rb+') as f: + f.seek(int(offset[:-1], 16)) + f.write(b'\x00\xa6\x81\x52') # AArch64 mov w0, #0xd30 + + lib_fixups: lib_fixups_user_type = { **lib_fixups, } @@ -41,6 +76,8 @@ blob_fixups: blob_fixups_user_type = { .binary_regex_replace(b'libmegface.so', b'libfacedet.so') .binary_regex_replace(b'libMegviiFacepp-0.5.2.so', b'libFaceDetectpp-0.5.2.so') .binary_regex_replace(b'megviifacepp_0_5_2_model', b'facedetectpp_0_5_2_model'), + 'vendor/lib64/camera/components/com.vidhance.node.eis.so': blob_fixup() + .call(blob_fixup_graphic_buffer_size), ('vendor/lib64/libalLDC.so', 'vendor/lib64/libalhLDC.so'): blob_fixup() .clear_symbol_version('AHardwareBuffer_allocate') .clear_symbol_version('AHardwareBuffer_describe')