[llvm-dev] Quick question: How to BuildMI mov64mi32 arbitrary MMB address to memory
K Jelesnianski via llvm-dev
llvm-dev at lists.llvm.org
Sat Sep 22 11:24:48 PDT 2018
Dear All,
I am working on a x86 backend machineFunction pass, where I am trying to
save the hard coded address of an arbitrary machine basic block to memory
in ASM. I know the assembly needed for this but am lost at how to construct
the BuildMI().
Note that these machine basic blocks are not entry's to a function. but in
the middle of the function. so using addGlobalAddress or addExternalSymbol
are no use to me and am trying to avoid having to make a separate jump
table section. Is a jump table section with symbols associated with these
new basic blocks the only option?
In x86 assembly this would look something like:
MOVQ 0x40044540, 0x8(%rsp) # Store address of trampoline basic block
to stack
The BuildMI looks like:
BuildMI(MBB, MBIt, DL, TII->get(X86::MOV64mi32))
.addImm(0x1) // Scale
.addReg(X86::RSP) // Base
.addImm(0x8) // Disp
.addMBB(my_target_mbb); // Source
So far I have looked into the BuildMI API of LLVM and the only one that
looks relevant is addMBB. While my LLVM pass compiles, my linker complains
(and note that I am compiling with -fPIC):
1)
/usr/bin/ld: /tmp/foo-d523b6.o: Unknown temporary symbol
or 2)
/usr/bin/ld: /tmp/foo-d523b6.o: relocation R_X86_64_32S against `.text' can
not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
Any suggestions? Much appreciated for taking a look!
Sincerely,
K Jelesnianski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180922/f830f042/attachment.html>
More information about the llvm-dev
mailing list