[PATCH] D33436: [ARM] Create relocation for Thumb functions calling ARM fns.

Eric Christopher via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed May 24 11:09:56 PDT 2017


echristo added inline comments.


================
Comment at: test/MC/ARM/thumb-far-jump.s:25
 
-@ CHECK-NOT: 0x0 R_ARM_THM_CALL end 0x0
+@ CHECK: 0x0 R_ARM_THM_CALL end 0x0
 @ CHECK: 0x2004 R_ARM_THM_CALL main2 0x0
----------------
fhahn wrote:
> echristo wrote:
> > I think this is right, but I'm curious how we had it precisely inverted. What's up?
> Without the changes in this patch, no relocations are generated for branches to internal labels that are in range of the branch, which was the case for the branch to `end`. That means `BL` is used for all such branches, even for branches from Thumb to ARM code.
> 
> With this patch, a relocation is always generated when jumping to non Thumb code. But currently isThumbFunc only tracks function symbols, while `end` is a non-function label, meaning a relocation is added even though it is not really necessary because in this case we are branch from Thumb code to Thumb code.
> 
>  As Peter explained, additional relocations for non-function labels shouldn't cause problems, as long as there's no change in execution mode. And unless we are dealing with hand-written assembler that violates the ABI, the execution mode should only be changed by branches to function symbols AFAIK.
Seems reasonable. At any rate I trust you and Peter to figure this one out among you :)


https://reviews.llvm.org/D33436





More information about the llvm-commits mailing list