diff --git a/core/check_elf_file.mk b/core/check_elf_file.mk
index 584facc..b5be81f 100644
--- a/core/check_elf_file.mk
+++ b/core/check_elf_file.mk
@@ -10,8 +10,6 @@
 # - LOCAL_BUILT_MODULE
 # - LOCAL_IS_HOST_MODULE
 # - LOCAL_MODULE_CLASS
-# - TARGET_MAX_PAGE_SIZE_SUPPORTED
-# - TARGET_NO_BIONIC_PAGE_SIZE_MACRO
 # - intermediates
 # - my_installed_module_stem
 # - my_prebuilt_src_file
@@ -28,15 +26,6 @@
 # In addition to $(my_check_elf_file_shared_lib_files), some file paths are
 # added by `resolve-shared-libs-for-elf-file-check` from `core/main.mk`.
 $(check_elf_files_stamp): PRIVATE_SHARED_LIBRARY_FILES := $(my_check_elf_file_shared_lib_files)
-# For different page sizes to work, we must support a larger max page size
-# as well as properly reflect page size at runtime. Limit this check, since many
-# devices set the max page size (for future proof) than actually use the
-# larger page size.
-ifeq ($(strip $(TARGET_NO_BIONIC_PAGE_SIZE_MACRO)),true)
-$(check_elf_files_stamp): PRIVATE_MAX_PAGE_SIZE_OPT := --max-page-size=$(TARGET_MAX_PAGE_SIZE_SUPPORTED)
-else
-$(check_elf_files_stamp): PRIVATE_MAX_PAGE_SIZE_OPT :=
-endif
 $(check_elf_files_stamp): $(my_prebuilt_src_file) $(my_check_elf_file_shared_lib_files) $(CHECK_ELF_FILE) $(LLVM_READOBJ)
 	@echo Check prebuilt ELF binary: $<
 	$(hide) mkdir -p $(dir $@)
@@ -44,7 +33,6 @@
 	$(hide) $(CHECK_ELF_FILE) \
 	    --skip-bad-elf-magic \
 	    --skip-unknown-elf-machine \
-	    $(PRIVATE_MAX_PAGE_SIZE_OPT) \
 	    $(if $(PRIVATE_SONAME),--soname $(PRIVATE_SONAME)) \
 	    $(foreach l,$(PRIVATE_SHARED_LIBRARY_FILES),--shared-lib $(l)) \
 	    $(foreach l,$(PRIVATE_SYSTEM_SHARED_LIBRARIES),--system-shared-lib $(l)) \
diff --git a/tools/check_elf_file.py b/tools/check_elf_file.py
index bed3366..51ec23b 100755
--- a/tools/check_elf_file.py
+++ b/tools/check_elf_file.py
@@ -67,7 +67,7 @@
 
 ELF = collections.namedtuple(
   'ELF',
-  ('alignments', 'dt_soname', 'dt_needed', 'imported', 'exported', 'header'))
+  ('dt_soname', 'dt_needed', 'imported', 'exported', 'header'))
 
 
 def _get_os_name():
@@ -195,8 +195,7 @@
   @classmethod
   def _read_llvm_readobj(cls, elf_file_path, header, llvm_readobj):
     """Run llvm-readobj and parse the output."""
-    cmd = [llvm_readobj, '--program-headers', '--dynamic-table',
-           '--dyn-symbols', elf_file_path]
+    cmd = [llvm_readobj, '--dynamic-table', '--dyn-symbols', elf_file_path]
     out = subprocess.check_output(cmd, text=True)
     lines = out.splitlines()
     return cls._parse_llvm_readobj(elf_file_path, header, lines)
@@ -206,56 +205,9 @@
   def _parse_llvm_readobj(cls, elf_file_path, header, lines):
     """Parse the output of llvm-readobj."""
     lines_it = iter(lines)
-    alignments = cls._parse_program_headers(lines_it)
     dt_soname, dt_needed = cls._parse_dynamic_table(elf_file_path, lines_it)
     imported, exported = cls._parse_dynamic_symbols(lines_it)
-    return ELF(alignments, dt_soname, dt_needed, imported, exported, header)
-
-
-  _PROGRAM_HEADERS_START_PATTERN = 'ProgramHeaders ['
-  _PROGRAM_HEADERS_END_PATTERN = ']'
-  _PROGRAM_HEADER_START_PATTERN = 'ProgramHeader {'
-  _PROGRAM_HEADER_TYPE_PATTERN = re.compile('^\\s+Type:\\s+(.*)$')
-  _PROGRAM_HEADER_ALIGN_PATTERN = re.compile('^\\s+Alignment:\\s+(.*)$')
-  _PROGRAM_HEADER_END_PATTERN = '}'
-
-
-  @classmethod
-  def _parse_program_headers(cls, lines_it):
-    """Parse the dynamic table section."""
-    alignments = []
-
-    if not cls._find_prefix(cls._PROGRAM_HEADERS_START_PATTERN, lines_it):
-      raise ELFError()
-
-    for line in lines_it:
-      # Parse each program header
-      if line.strip() == cls._PROGRAM_HEADER_START_PATTERN:
-        p_align = None
-        p_type = None
-        for line in lines_it:
-          if line.strip() == cls._PROGRAM_HEADER_END_PATTERN:
-            if not p_align:
-              raise ELFError("Could not parse alignment from program header!")
-            if not p_type:
-              raise ELFError("Could not parse type from program header!")
-
-            if p_type.startswith("PT_LOAD "):
-              alignments.append(int(p_align))
-            break
-
-          match = cls._PROGRAM_HEADER_TYPE_PATTERN.match(line)
-          if match:
-            p_type = match.group(1)
-
-          match = cls._PROGRAM_HEADER_ALIGN_PATTERN.match(line)
-          if match:
-            p_align = match.group(1)
-
-      if line == cls._PROGRAM_HEADERS_END_PATTERN:
-        break
-
-    return alignments
+    return ELF(dt_soname, dt_needed, imported, exported, header)
 
 
   _DYNAMIC_SECTION_START_PATTERN = 'DynamicSection ['
@@ -482,19 +434,6 @@
 
       sys.exit(2)
 
-  def check_max_page_size(self, max_page_size):
-    for alignment in self._file_under_test.alignments:
-      if alignment % max_page_size != 0:
-        self._error(f'Load segment has alignment {alignment} but '
-                    f'{max_page_size} required.')
-        self._note()
-        self._note('Fix suggestions:')
-        self._note(f'  use linker flag "-Wl,-z,max-page-size={max_page_size}" '
-                   f'when compiling this lib')
-
-        # TODO: instead of exiting immediately, we may want to collect the
-        # errors from all checks and emit them at once
-        sys.exit(2)
 
   @staticmethod
   def _find_symbol(lib, name, version):
@@ -575,8 +514,6 @@
                       help='Ignore the input file with unknown machine ID')
   parser.add_argument('--allow-undefined-symbols', action='store_true',
                       help='Ignore unresolved undefined symbols')
-  parser.add_argument('--max-page-size', action='store', type=int,
-                      help='Required page size alignment support')
 
   # Other options
   parser.add_argument('--llvm-readobj',
@@ -605,9 +542,6 @@
 
   checker.check_dt_needed(args.system_shared_lib)
 
-  if args.max_page_size:
-    checker.check_max_page_size(args.max_page_size)
-
   if not args.allow_undefined_symbols:
     checker.check_symbols()
 
