-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Commit 0048c1f
committed
amend! [llvm][MC][ARM] Don't autoresolve fixups
[llvm][MC][ARM] Don't autoresolve fixups
Removes logic that caused some fixups to be marked as resolved in the
assembler without actually resolving them. Assembler must either resolve
the fixup, reject the code (error out) or defer the resolution to the
linker. In general assembler can resolve offsets in pcrel instructions
if the symbol referred to is in the same section and it cannot make
assumptions about relative position of sections. For example, when LDRD
instruction in arm mode is encountered, fixup_arm_pcrel_10_unscaled is
raised. Prior to #72873 the
assembler would always mark it as resolved without generating a
relocation. The resulting code would likely be incorrect whenever the
label referred to is in a different section.
This patch finishes the series to prevent incorrect code being generated
for pcrel instructions referring to labels in different sections. This
kind of assembly code is very rare and most likely a user error, so both
options (relocation or error) are acceptable. Previously this was
resolved by adding relocations. Here, for VLDR instructions an error is
generated as relocation does not exist for Thumb mode and we wanted the
tool's behaviour to be consistent across modes. In the LDRD case, Thumb
mode does not have a relocation and errors out, but LDRD in Arm mode
generates relocation because its fixup kind is shared with other
instructions.
Patch series:
#72873 - LDRx
#73834 - ADR
this PR - LDRD and VLDR1 parent d331b07 commit 0048c1fCopy full SHA for 0048c1f
File tree
Expand file treeCollapse file tree
0 file changed
+0
-0
lines changedFilter options
Expand file treeCollapse file tree
0 file changed
+0
-0
lines changed
0 commit comments