https://sourceware.org/bugzilla/show_bug.cgi?id=27973
Bug ID: 27973 Summary: ld x86: Allow direct access to protected function symbols Product: binutils Version: unspecified Status: UNCONFIRMED Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: i at maskray dot me Target Milestone: --- // a.c __attribute__((visibility("protected"))) void *foo () { return (void *)foo; } // This roughly maps to: .globl foo .protected foo .type foo, @function foo: leaq foo(%rip), %rax % gcc -fpic -shared -fuse-ld=bfd a.s /usr/bin/ld.bfd: /tmp/ccWPJCLw.o: relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object /usr/bin/ld.bfd: final link failed: bad value collect2: error: ld returned 1 exit status The diagnostic was probably added circa 2016/2017 to make copy relocations on protected data symbols work with glibc. It should not apply to function symbols. The "copy relocations on protected data symbols" scheme has some fragile support with GNU ld and glibc on x86 (acked by multiple glibc maintainers). It definitely did not work before circa 2016, and should not work in the future. This scheme does not work with gold or LLD. GNU ld for non-x86 architectures don't work. I think no software will break if we drop the fragile glibc support. -- You are receiving this mail because: You are on the CC list for the bug.