[llvm-dev] Got stuck with PC-rel branching
Friedman, Eli via llvm-dev
llvm-dev at lists.llvm.org
Thu Jan 19 10:06:35 PST 2017
On 1/19/2017 9:11 AM, Peter Bel via llvm-dev wrote:
>
> Hi all,
>
> I'm trying to make an LLVM backend for the Adapteva's Epiphany E16 CPU
> (used in Parallella board), using CPU0 and some other backends as
> examples, and I've got stuck with branching.
>
> When I'm printing out asm, all branch labels are printed as they
> should be. But when I'm trying to generate obj file, I'm getting zeros
> instead of PC-related offset in all branch instructions.
>
> In short, what I'm doing:
>
> - Pattern (br bb:$addr) is selected using EpiphanyInstrInfo.td as
> BNONE32(ins jmptarget:$addr), Branch32 class
>
> - Branch32 class is defined in EpiphanyInstrFormats.td with bits<24>
> addr, which should go into bits{31-8} of the MC instruction. Those
> bits remain zeros after relaxation for some reason.
>
> - jmptarget operand has type OPERAND_PCREL, and uses EncoderMethod
> "getJumpTargetOpValue" defined in EpiphanyMCCodeEmitter. If this
> method gets MCExpr, it creates fixup, and I can see this fixup in debug.
>
> - Fixup is called fixup_Epiphany_PCREL24, and is defined in
> EpiphanyFixupKinds and EpiphanyAsmBackend, with FKF_IsPCRel flag.
>
> Can someone please tell me if I am missing something?
>
Are you sure there's actually a problem? On x86, for example:
$ echo "int f(); int g() { return f(); }" | clang -x c - -o /tmp/a.o -c
&& objdump -d /tmp/a.o
/tmp/a.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <g>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: b0 00 mov $0x0,%al
6: e8 00 00 00 00 callq b <g+0xb>
b: 5d pop %rbp
c: c3 retq
It looks like the call isn't calling the right function, but that's
fine: it'll get fixed by the linker.
-Eli
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170119/08c44fc1/attachment.html>
More information about the llvm-dev
mailing list