diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -855,7 +855,8 @@ config->executeOnly = args.hasFlag(OPT_execute_only, OPT_no_execute_only, false); config->exportDynamic = - args.hasFlag(OPT_export_dynamic, OPT_no_export_dynamic, false); + args.hasFlag(OPT_export_dynamic, OPT_no_export_dynamic, false) && + !args.hasArg(OPT_relocatable); config->filterList = args::getStrings(args, OPT_filter); config->fini = args.getLastArgValue(OPT_fini, "_fini"); config->fixCortexA53Errata843419 = args.hasArg(OPT_fix_cortex_a53_843419); diff --git a/lld/test/ELF/relocatable-export-dynamic.s b/lld/test/ELF/relocatable-export-dynamic.s new file mode 100644 --- /dev/null +++ b/lld/test/ELF/relocatable-export-dynamic.s @@ -0,0 +1,13 @@ +# REQUIRES: x86 + +## If --relocatable is given, --export-dynamic should be ignored. + +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o +# RUN: ld.lld -o %t2.o %t1.o -r --export-dynamic +# RUN: llvm-objdump --section-headers %t2.o | FileCheck %s + +# CHECK-NOT: .dynsym + +.global _start +_start: + ret