"""Schema for the JSON produced by llvm-readobj --elf-output-style=JSON.""" import typing HoleKind: typing.TypeAlias = typing.Literal[ "ARM64_RELOC_BRANCH26", "ARM64_RELOC_GOT_LOAD_PAGE21", "ARM64_RELOC_GOT_LOAD_PAGEOFF12", "ARM64_RELOC_PAGE21", "ARM64_RELOC_PAGEOFF12", "ARM64_RELOC_UNSIGNED", "IMAGE_REL_AMD64_REL32", "IMAGE_REL_ARM64_BRANCH26", "IMAGE_REL_ARM64_PAGEBASE_REL21", "IMAGE_REL_ARM64_PAGEOFFSET_12A", "IMAGE_REL_ARM64_PAGEOFFSET_12L", "IMAGE_REL_I386_DIR32", "IMAGE_REL_I386_REL32", "R_AARCH64_ABS64", "R_AARCH64_ADR_GOT_PAGE", "R_AARCH64_ADR_PREL_PG_HI21", "R_AARCH64_CALL26", "R_AARCH64_JUMP26", "R_AARCH64_ADD_ABS_LO12_NC", "R_AARCH64_LD64_GOT_LO12_NC", "R_AARCH64_MOVW_UABS_G0_NC", "R_AARCH64_MOVW_UABS_G1_NC", "R_AARCH64_MOVW_UABS_G2_NC", "R_AARCH64_MOVW_UABS_G3", "R_X86_64_64", "R_X86_64_GOTPCREL", "R_X86_64_GOTPCRELX", "R_X86_64_PC32", "R_X86_64_REX_GOTPCRELX", "X86_64_RELOC_BRANCH", "X86_64_RELOC_GOT", "X86_64_RELOC_GOT_LOAD", "X86_64_RELOC_SIGNED", "X86_64_RELOC_UNSIGNED", ] class COFFRelocation(typing.TypedDict): """A COFF object file relocation record.""" Type: dict[typing.Literal["Value"], HoleKind] Symbol: str Offset: int class ELFRelocation(typing.TypedDict): """An ELF object file relocation record.""" Addend: int Offset: int Symbol: dict[typing.Literal["Value"], str] Type: dict[typing.Literal["Value"], HoleKind] class MachORelocation(typing.TypedDict): """A Mach-O object file relocation record.""" Offset: int Section: typing.NotRequired[dict[typing.Literal["Value"], str]] Symbol: typing.NotRequired[dict[typing.Literal["Value"], str]] Type: dict[typing.Literal["Value"], HoleKind] class _COFFSymbol(typing.TypedDict): Name: str Value: int class _ELFSymbol(typing.TypedDict): Name: dict[typing.Literal["Name"], str] Value: int class _MachOSymbol(typing.TypedDict): Name: dict[typing.Literal["Name"], str] Value: int class COFFSection(typing.TypedDict): """A COFF object file section.""" Characteristics: dict[ typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]] ] Number: int RawDataSize: int Relocations: list[dict[typing.Literal["Relocation"], COFFRelocation]] SectionData: typing.NotRequired[dict[typing.Literal["Bytes"], list[int]]] Symbols: list[dict[typing.Literal["Symbol"], _COFFSymbol]] class ELFSection(typing.TypedDict): """An ELF object file section.""" Flags: dict[typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]]] Index: int Info: int Relocations: list[dict[typing.Literal["Relocation"], ELFRelocation]] SectionData: dict[typing.Literal["Bytes"], list[int]] Symbols: list[dict[typing.Literal["Symbol"], _ELFSymbol]] Type: dict[typing.Literal["Name"], str] class MachOSection(typing.TypedDict): """A Mach-O object file section.""" Address: int Attributes: dict[typing.Literal["Flags"], list[dict[typing.Literal["Name"], str]]] Index: int Name: dict[typing.Literal["Value"], str] Relocations: typing.NotRequired[ list[dict[typing.Literal["Relocation"], MachORelocation]] ] SectionData: typing.NotRequired[dict[typing.Literal["Bytes"], list[int]]] Symbols: typing.NotRequired[list[dict[typing.Literal["Symbol"], _MachOSymbol]]]