Skip to content

[X86] Support i386 PC-relative relocations - #2029

Open
Bhoumik Patidar (BhoumikPatidar) wants to merge 2 commits into
qualcomm:mainfrom
BhoumikPatidar:x86_32_pc_relative_relocations
Open

Bhoumik Patidar (BhoumikPatidar) wants to merge 2 commits into
qualcomm:mainfrom
BhoumikPatidar:x86_32_pc_relative_relocations

Conversation

@BhoumikPatidar

@BhoumikPatidar Bhoumik Patidar (BhoumikPatidar) commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Implement R_386_PC8, R_386_PC16, and R_386_PC32 for i386 ELF32 links.
Use signed range checks for narrow PC-relative relocations. PC8 must fit in a signed 8-bit field, while
PC16 accepts a signed 17-bit result before truncating it to 16 bits, as required by 16-bit real-mode code.
PC32 uses the full 32-bit field.

Resolves #2030
Progress On #1961

Add the relocation layer for i386 links: R_386_NONE, R_386_8, R_386_16, and R_386_32.

Unlike x86-64, i386 uses Elf32_Rel rather than Elf64_Rela. The addend is stored in the field
being relocated, so it must be read and sign-extended from that field width before evaluating S + A.
Normalize the result to the 32-bit ELF address space before checking narrow fields and writing the result
back. This preserves valid full-width 32-bit bit patterns, including addresses with bit 31 set,
while rejecting values that cannot be encoded in 8- or 16-bit fields.

Signed-off-by: Bhoumik Patidar <bpatidar@qti.qualcomm.com>
Implement R_386_PC8, R_386_PC16, and R_386_PC32 for i386 ELF32 links.
Use signed range checks for narrow PC-relative relocations. PC8 must fit in a signed 8-bit field, while
PC16 accepts a signed 17-bit result before truncating it to 16 bits, as required by 16-bit real-mode code.
PC32 uses the full 32-bit field.

Signed-off-by: Bhoumik Patidar <bpatidar@qti.qualcomm.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support i386 PC-relative relocations

2 participants