llvm-project/llvm/lib/Object
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
..
Archive.cpp static const char *const foo => const char foo[] 2020-12-01 10:33:18 -08:00
ArchiveWriter.cpp [llvm-ar][Object] Fix detection of need for 64-bit archive symbol tables 2020-10-26 12:29:28 +00:00
Binary.cpp [NFC] Reordering parameters in getFile and getFileOrSTDIN 2021-03-25 09:47:49 -04:00
CMakeLists.txt [FaultsMaps][llvm-objdump] Move FaultMapParser to Object/. Remove CodeGen dependency from llvm-objdump 2021-01-27 10:39:59 -08:00
COFFImportFile.cpp
COFFModuleDefinition.cpp
COFFObjectFile.cpp [llvm] Use llvm::sort (NFC) 2021-01-17 10:39:45 -08:00
Decompressor.cpp
ELF.cpp [llvm-readelf] Support dumping the BB address map section with --bb-addr-map. 2021-03-08 16:20:11 -08:00
ELFObjectFile.cpp [AMDGPU] gfx90a support 2021-02-17 16:01:32 -08:00
Error.cpp Error.h - GenericBinaryError - pass Twine arg by reference not value. 2020-06-27 10:12:20 +01:00
FaultMapParser.cpp [FaultsMaps][llvm-objdump] Move FaultMapParser to Object/. Remove CodeGen dependency from llvm-objdump 2021-01-27 10:39:59 -08:00
IRObjectFile.cpp
IRSymtab.cpp [IRSymTab] Set FB_used on llvm.compiler.used symbols 2021-03-03 16:22:30 -08:00
MachOObjectFile.cpp [Object][MachO] Handle end iterator in getSymbolType() 2021-03-17 15:06:45 -07:00
MachOUniversal.cpp [llvm-lipo] Add support for bitcode files 2020-08-25 21:11:18 -07:00
MachOUniversalWriter.cpp [llvm-objcopy][NFC] replace class Buffer/MemBuffer/FileBuffer with streams. 2021-03-10 23:50:04 +03:00
Minidump.cpp
ModuleSymbolTable.cpp [MC] Untangle MCContext and MCObjectFileInfo 2021-05-05 10:03:02 -07:00
Object.cpp
ObjectFile.cpp Recommit: [llvm-readelf/obj] - Allow dumping of ELF header even if some elements are corrupt. 2020-11-09 12:53:53 +03:00
RecordStreamer.cpp [MC] Support .symver *, *, remove 2021-03-06 15:23:02 -08:00
RecordStreamer.h [MC] Support .symver *, *, remove 2021-03-06 15:23:02 -08:00
RelocationResolver.cpp [WebAssembly] Add new relocation for location relative data 2021-03-08 11:34:10 -08:00
SymbolSize.cpp [llvm] Use *::empty (NFC) 2021-01-16 09:40:55 -08:00
SymbolicFile.cpp Recommit: [llvm-readelf/obj] - Allow dumping of ELF header even if some elements are corrupt. 2020-11-09 12:53:53 +03:00
TapiFile.cpp [llvm/Object] Reimplment basic_symbol_iterator in TapiFile 2020-06-12 00:03:32 -07:00
TapiUniversal.cpp [TextAPI] move source code files out of subdirectory, NFC 2021-04-05 10:24:42 -07:00
WasmObjectFile.cpp [lld][WebAssembly] Allow data symbols to extend past end of segment 2021-05-12 13:43:37 -07:00
WindowsMachineFlag.cpp
WindowsResource.cpp
XCOFFObjectFile.cpp [XCOFF][llvm-dwarfdump] llvm-dwarfdump support for XCOFF 2021-03-17 21:21:51 -04:00