llvm-project/llvm/tools
Tobias Edler von Koch 90df1f48d5 LTO: Pass SF_Executable flag through to InputFile::Symbol
Summary:
The linker needs to be able to determine whether a symbol is text or data to
handle the case of a common being overridden by a strong definition in an
archive. If the archive contains a text member of the same name as the common,
that function is discarded. However, if the archive contains a data member of
the same name, that strong definition overrides the common. This is a behavior
of ld.bfd, which the Qualcomm linker also supports in LTO.

Here's a test case to illustrate:

####

cat > 1.c << \!
int blah;
!

cat > 2.c << \!
int blah() {
  return 0;
}
!

cat > 3.c << \!
int blah = 20;
!

clang -c 1.c
clang -c 2.c
clang -c 3.c

ar cr lib.a 2.o 3.o
ld 1.o lib.a -t

####

The correct output is:

1.o
(lib.a)3.o

Thanks to Shankar Easwaran and Hemant Kulkarni for the test case!

Reviewers: mehdi_amini, rafael, pcc, davide

Reviewed By: pcc

Subscribers: davide, llvm-commits, inglorion

Differential Revision: https://reviews.llvm.org/D31901

llvm-svn: 300205
2017-04-13 16:24:14 +00:00
..
bugpoint Module::getOrInsertFunction is using C-style vararg instead of variadic templates. 2017-04-11 15:01:18 +00:00
bugpoint-passes [CMake] bugpoint-passes depends on intrinsics_gen 2016-11-19 02:20:59 +00:00
dsymutil Spelling mistakes in comments. NFCI. 2017-03-30 12:59:53 +00:00
gold Re-apply r299168 and r299169 now that the libdeps are fixed. 2017-03-31 04:47:07 +00:00
llc Revert "Feature generic option to setup start/stop-after/before" 2017-04-01 01:26:24 +00:00
lli Module::getOrInsertFunction is using C-style vararg instead of variadic templates. 2017-04-11 15:01:18 +00:00
llvm-ar [llvm-ar] Remove unneeded std::, NFCI. 2017-04-05 15:05:05 +00:00
llvm-as [CMake] llvm-as depends on intrinsics_gen 2016-11-19 02:15:04 +00:00
llvm-as-fuzzer Remove every uses of getGlobalContext() in LLVM (but the C API) 2016-04-14 21:59:01 +00:00
llvm-bcanalyzer Bitcode: Remove reader support for MODULE_CODE_PURGEVALS. 2017-04-03 17:58:48 +00:00
llvm-c-test Spelling mistakes in comments. NFCI. 2017-03-30 12:59:53 +00:00
llvm-cat Avoid some string copies, NFC 2017-04-11 22:11:46 +00:00
llvm-config [CMake] Use variable interpolation instead of string concatenation 2017-03-22 12:06:11 +00:00
llvm-cov Use the new member accessors of llvm::enumerate. 2017-03-13 16:32:08 +00:00
llvm-cxxdump Make the Error class constructor protected 2016-11-11 04:28:40 +00:00
llvm-cxxfilt c++filt: support COFF import thunks 2017-03-22 21:15:19 +00:00
llvm-diff [IR] Redesign the case iterator in SwitchInst to actually be an iterator 2017-04-12 07:27:28 +00:00
llvm-dis [CMake] llvm-dis depends on intrinsics_gen 2016-11-19 02:31:14 +00:00
llvm-dwarfdump Fix a bugs with using some Mach-O command line flags like "-arch armv7m". 2016-12-16 22:54:02 +00:00
llvm-dwp [llvm-dwp] - Reuse object::Decompressor class 2017-01-13 15:58:55 +00:00
llvm-extract [llvm-extract] Add option for recursive extraction 2017-04-06 20:51:40 +00:00
llvm-go [llvm-go] parameterize $GOPATH construction 2016-07-27 03:21:51 +00:00
llvm-jitlistener Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-link Remove unused lambda capture 2017-03-13 21:46:14 +00:00
llvm-lto Add support for -fno-builtin to LTO and ThinLTO to libLTO 2017-03-28 18:55:44 +00:00
llvm-lto2 LTO: Pass SF_Executable flag through to InputFile::Symbol 2017-04-13 16:24:14 +00:00
llvm-mc [DWARFv5] llvm-mc support for new unit header. 2017-02-28 23:40:46 +00:00
llvm-mc-assemble-fuzzer llvm-mc-fuzzer: add support for assembly 2017-02-27 06:22:17 +00:00
llvm-mc-disassemble-fuzzer llvm-mc-fuzzer: add support for assembly 2017-02-27 06:22:17 +00:00
llvm-mcmarkup Search for llvm-symbolizer binary in the same directory as argv[0], before 2016-06-09 00:53:21 +00:00
llvm-modextract llvm-modextract: Call keep() on the output stream before exiting. 2016-12-01 23:13:11 +00:00
llvm-nm Add a warning when the llvm-nm -print-size flag is used on a Mach-O file as 2017-01-25 21:33:38 +00:00
llvm-objdump Add the rest of the error checking for Mach-O dyld compact bind entry errors 2017-03-20 19:46:55 +00:00
llvm-opt-report [llvm-opt-report] Fix context-sensitive lines where nothing happened 2017-01-07 20:21:17 +00:00
llvm-pdbdump Remove some unused private fields. 2017-04-13 02:28:17 +00:00
llvm-profdata Resubmit r297897: [PGO] Value profile for size of memory intrinsic calls 2017-03-16 21:15:48 +00:00
llvm-readobj [llvm-readobj] Only print the real size of the note 2017-04-05 18:55:50 +00:00
llvm-rtdyld Apply clang-tidy's 'performance-faster-string-find' check to LLVM. 2016-11-30 10:01:11 +00:00
llvm-shlib Add check for BSD when setting LIB_NAMES for GNU ld 2017-03-26 05:58:48 +00:00
llvm-size llvm-size: remove leading dash in '-radix' option 2016-12-23 23:55:08 +00:00
llvm-split [CMake] llvm-split depends on intrinsics_gen 2016-11-18 23:20:38 +00:00
llvm-stress Allow DataLayout to specify addrspace for allocas. 2017-04-10 22:27:50 +00:00
llvm-strings llvm-strings: remove default for -Wcovered-switch-default 2017-01-21 02:52:29 +00:00
llvm-symbolizer Add a verbose/human readable mode to llvm-symbolizer to investigate discriminators and other line table/backtrace features 2017-01-31 22:19:38 +00:00
llvm-xray [XRay][tools] Remove some assertions in llvm-xray graph 2017-03-31 01:56:45 +00:00
lto Spelling mistakes in comments. NFCI. 2017-03-30 12:59:53 +00:00
msbuild Create msbuild only when using MSVC 2017-03-16 20:24:14 +00:00
obj2yaml [WebAssembly] Improve support for WebAssembly binary format 2017-03-30 19:44:09 +00:00
opt [ThinLTO] Add support for emitting minimized bitcode for thin link 2017-03-23 19:47:39 +00:00
sancov [sancov] Fix broken links and displaced coloring in coverage-report-server.py 2017-03-20 14:06:04 +00:00
sanstats [CMake] sanstats depends on intrinsics_gen 2016-11-18 23:30:39 +00:00
verify-uselistorder [CMake] verify-uselistorder depends on intrinsics_gen 2016-11-18 23:30:58 +00:00
xcode-toolchain [CMake] Minor fix to regex in r279152 2016-08-18 21:36:36 +00:00
yaml2obj [yaml2obj] Factor out error handling code. 2017-04-05 15:18:16 +00:00
CMakeLists.txt Fixup r271533, or check-clang didn't find llvm-lto as the target. 2016-06-02 20:39:24 +00:00
LLVMBuild.txt Add llvm-modextract tool. 2016-11-29 21:54:33 +00:00