[PATCH] D64943: [Clang][OpenMP offload] Eliminate use of OpenMP linker script
Sergey Dmitriev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 11 13:05:25 PDT 2019
sdmitriev added a comment.
In D64943#1666693 <https://reviews.llvm.org/D64943#1666693>, @JonChesterfield wrote:
> In D64943#1666679 <https://reviews.llvm.org/D64943#1666679>, @ABataev wrote:
>
> > In D64943#1666678 <https://reviews.llvm.org/D64943#1666678>, @JonChesterfield wrote:
> >
> > > In D64943#1666673 <https://reviews.llvm.org/D64943#1666673>, @ABataev wrote:
> > >
> > > > In D64943#1666658 <https://reviews.llvm.org/D64943#1666658>, @JonChesterfield wrote:
> > > >
> > > > > > OpenMP linker script is known to cause problems for gold and lld linkers on Linux and it will also cause problems for Windows enabling in future
> > > > >
> > > > > What are the known problems with the linker script? I'm wondering if they can be resolved without the overhead of introducing a new tool.
> > > >
> > > >
> > > > They just do not support linker script. And, thus, cannot be used for offloading. Only `ld` supports it.
> > >
> > >
> > > In what respect? I've used linker scripts with both gold and lld, and both instances of --help text claim to support them. In the case of lld, a very complicated script hit a few internal errors, but I believe they've all been fixed since.
> >
> >
> > Hmm, I tried it with gold some time ago and it just did not work for me. The linking failed with diagnostics that some of the commands in the script are unknown.
>
>
> The problem turns out to be the 'insert before' statement. ld and lld support it, gold does not. According to https://bugzilla.redhat.com/show_bug.cgi?id=927573, the recommended workaround is essentially that implemented in this differential. See also https://sourceware.org/bugzilla/show_bug.cgi?id=15373.
A small example that I presented on the OpenMP multi company meeting earlier:
bash-4.2$ cat foo.c
#include <stdio.h>
int main() {
int X = 0;
#pragma omp target map(tofrom: X)
X += 3;
printf("X = %d\n", X);
return 0;
}
bash-4.2$ clang -fopenmp -fopenmp-targets=x86_64-pc-linux-gnu -fuse-ld=gold foo.c
/usr/bin/ld.gold: error: /tmp/a-c699cd.lk:25:8: syntax error, unexpected STRING
/usr/bin/ld.gold: fatal error: unable to parse script file /tmp/a-c699cd.lk
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
bash-4.2$ clang -fopenmp -fopenmp-targets=x86_64-pc-linux-gnu -fuse-ld=lld foo.c
ld.lld: error: unable to INSERT AFTER/BEFORE .data: section not defined
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
bash-4.2$
Also OpenMP linker script will obviously cause problems on Windows once we start enabling offload on Windows.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64943/new/
https://reviews.llvm.org/D64943
More information about the cfe-commits
mailing list