<div dir="ltr">It sounds like LLVM isn't generating PIC code. Adding `llc -relocation-model=static` makes it generate assembly that probably uses this relocation:<div><a href="https://godbolt.org/z/Kx5h6n">https://godbolt.org/z/Kx5h6n</a><br></div><div><br></div><div>I think clang usually configures LLVM to generate PIC code for Win x64.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Nov 7, 2020 at 8:07 PM Andrei Damian via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I'm using LLVM (10.0.1) in a project I'm working on. Unfortunately, I've<br>
encountered a problem a few days ago I could not find a solution yet.<br>
I'm using LLVM in combination with the Microsoft's compiler and the <br>
platform I'm<br>
targeting is also MSVC x64.<br>
<br>
When linking a generated .obj file with code from another cpp into the <br>
dll, the<br>
linker complains as follows:<br>
<br>
```<br>
s.obj : error LNK2017: 'ADDR32' relocation to '.rdata' invalid without<br>
/LARGEADDRESSAWARE:NO<br>
LINK : fatal error LNK1165: link failed because of fixup errors<br>
```<br>
which is funny because as far as I can tell, that flag should have no <br>
effect on<br>
x64 anyway. If I add it to the linker command, it says it's ignored.<br>
<br>
I've noticed this happens when I use a global constant, eg. a string, <br>
but not<br>
always - for some inputs it triggers the error, for some it doesn't.<br>
<br>
The bat that links into exe looks like:<br>
```<br>
@call set path=C:\Program Files (x86)\Microsoft Visual<br>
Studio\2019\Enterprise\VC\Auxiliary\Build;%path%<br>
call vcvarsall.bat x64<br>
cl /EHsc /DEBUG /Z7 /LD s.obj code.cpp<br>
```<br>
<br>
and the IR: <a href="https://godbolt.org/z/dcrzoq" rel="noreferrer" target="_blank">https://godbolt.org/z/dcrzoq</a><br>
<br>
Researching a bit I could find an issue on Rust's Github that seems to <br>
have been<br>
solved by time, and the statement `default rel` for an assembler to be <br>
inserted<br>
at the beginning of the ASM file, which I'm not sure how would be related.<br>
<br>
The only workaround I could find is to allocate the string on stack and set<br>
every element one by one, but it polutes the IR and it makes LLVM not to <br>
be able<br>
to optimize the thing into the readonly section, from what I noticed.<br>
<br>
I kindly request your help, thanks.<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>