diff --git a/arch_aarch64.cc b/arch_aarch64.cc index 5618698ef9..48c39f66b1 100644 --- a/arch_aarch64.cc +++ b/arch_aarch64.cc @@ -294,7 +294,7 @@ void InputSection::scan_relocations(Context &ctx) { // Absolute Local Imported data Imported code { NONE, BASEREL, DYNREL, DYNREL }, // DSO { NONE, BASEREL, DYNREL, DYNREL }, // PIE - { NONE, NONE, DYNREL, PLT }, // PDE + { NONE, NONE, DYNREL, DYNREL }, // PDE }; dispatch(ctx, table, i); break; diff --git a/arch_i386.cc b/arch_i386.cc index 5299fe1e44..e6658c7488 100644 --- a/arch_i386.cc +++ b/arch_i386.cc @@ -349,7 +349,7 @@ void InputSection::scan_relocations(Context &ctx) { // Absolute Local Imported data Imported code { NONE, BASEREL, DYNREL, DYNREL }, // DSO { NONE, BASEREL, DYNREL, DYNREL }, // PIE - { NONE, NONE, DYNREL, PLT }, // PDE + { NONE, NONE, DYNREL, DYNREL }, // PDE }; dispatch(ctx, table, i); break; diff --git a/arch_x86_64.cc b/arch_x86_64.cc index 695b98f082..f6df2d571c 100644 --- a/arch_x86_64.cc +++ b/arch_x86_64.cc @@ -535,7 +535,7 @@ void InputSection::scan_relocations(Context &ctx) { // Absolute Local Imported data Imported code { NONE, BASEREL, DYNREL, DYNREL }, // DSO { NONE, BASEREL, DYNREL, DYNREL }, // PIE - { NONE, NONE, DYNREL, PLT }, // PDE + { NONE, NONE, DYNREL, DYNREL }, // PDE }; dispatch(ctx, table, i); break; diff --git a/test/func-addr.sh b/test/func-addr.sh new file mode 100755 index 0000000000..bbf1bd5f9e --- /dev/null +++ b/test/func-addr.sh @@ -0,0 +1,26 @@ +#!/bin/bash +set -e +cd $(dirname $0) +echo -n "Testing $(basename -s .sh $0) ... " +t=$(pwd)/tmp/$(basename -s .sh $0) +mkdir -p $t + +cat < + +void fn(); +void (*ptr)() = fn; + +int main() { + printf("%d\n", fn == ptr); +} +EOF + +clang -fuse-ld=`pwd`/../mold -o $t/exe $t/b.o $t/a.so +$t/exe | grep -q 1 + +echo OK