llvm-project/lld
Sam Clegg cd01430ff1 [lld][WebAssembly] Allow data symbols to extend past end of segment
This fixes a bug with string merging with string symbols that contain
NULLs, as is the case in the `merge-string.s` test.

The bug only showed when we run with `--relocatable` and then try read
the resulting object back in.  In this case we would end up with string
symbols that extend past the end of the segment in which they live.

The problem comes from the fact that sections which are flagged as
string mergable assume that all strings are NULL terminated.  The
merging algorithm will drop trailing chars that follow a NULL since they
are essentially unreachable.  However, the "size" attribute (in the
symbol table) of such a truncated symbol is not updated resulting a
symbol size that can overlap the end of the segment.

I verified that this can happen in ELF too given the right conditions
and the its harmless enough.  In practice Strings that contain embedded
null should not be part of a mergable section.

Differential Revision: https://reviews.llvm.org/D102281
2021-05-12 13:43:37 -07:00
..
COFF [LLD] [COFF] Fix including the personality function for DWARF EH when linking with --gc-sections 2021-05-12 22:23:01 +03:00
Common [ELF] Simplify isValidCIdentifier. NFC 2021-03-11 09:38:15 -08:00
ELF [ELF][AVR] Add explicit relocation types to getRelExpr 2021-05-12 12:38:27 -07:00
MachO [lld-macho] Implement branch-range-extension thunks 2021-05-12 09:44:58 -07:00
MinGW [LLD] [MinGW] Pass the --demangle and --no-demangle options to the COFF linker 2021-01-07 10:02:19 +02:00
cmake/modules [cmake] Add support for multiple distributions 2021-05-12 11:13:18 -07:00
docs [LLD] Improve --strip-all help text 2021-05-06 12:34:06 +01:00
include/lld [lld] Add missing header guard (NFC) 2021-04-02 11:12:23 +08:00
lib [NFC] Fix "not used" warning 2021-04-26 22:09:23 -07:00
test [lld][WebAssembly] Allow data symbols to extend past end of segment 2021-05-12 13:43:37 -07:00
tools/lld [lld] Delete unused includes. NFC 2021-04-19 10:56:49 -07:00
unittests Use INTERFACE_COMPILE_OPTIONS to disable -Wsuggest-override for any target that links to gtest 2020-07-27 08:37:01 -07:00
utils
wasm [WebAssembly] Add TLS data segment flag: WASM_SEG_FLAG_TLS 2021-05-12 13:31:02 -07:00
.clang-format
.clang-tidy [lld] Add .clang-tidy to customize readability-identifier-naming.{Member,Parameter,Variable}Case => camelBack 2020-03-09 08:26:41 -07:00
.gitignore
CMakeLists.txt [lld] Convert LLVM_CMAKE_PATH to a CMake path 2021-05-05 15:42:55 -05:00
CODE_OWNERS.TXT Add code owners of new MachO port 2020-09-02 19:32:12 -07:00
LICENSE.TXT
README.md [doc] Place sha256 in lld/README.md into backticks 2021-01-12 10:19:40 -08:00

README.md

LLVM Linker (lld)

This directory and its subdirectories contain source code for the LLVM Linker, a modular cross platform linker which is built as part of the LLVM compiler infrastructure project.

lld is open source software. You may freely distribute it under the terms of the license agreement found in LICENSE.txt.

Benchmarking

In order to make sure various developers can evaluate patches over the same tests, we create a collection of self contained programs.

It is hosted at https://s3-us-west-2.amazonaws.com/linker-tests/lld-speed-test.tar.xz

The current sha256 is 10eec685463d5a8bbf08d77f4ca96282161d396c65bd97dc99dbde644a31610f.