D92633 added -f[no-]direct-access-external-data to supersede -m[no-]pie-copy-relocations.
(The option works for -fpie but is a no-op for -fno-pic and -fpic.)
This patch makes -fno-pic -fno-direct-access-external-data drop dso_local from
global variable declarations. This usually causes the backend to emit a GOT
indirection for external data access. With a GOT relocation, the subsequent
-no-pie link will not have copy relocation even if the data symbol turns out to
be defined by a shared object.
// a.c extern int var; int foo() { return var; } clang a.c -S -o - => movl var, %eax clang -fno-direct-access-external-data a.c -S -o - => movq var@GOTPCREL, %rax; movl (%rax), %eax // The same as -fpie or -fpic