summaryrefslogtreecommitdiffstats
path: root/lld/test
Commit message (Collapse)AuthorAgeFilesLines
...
* [COFF] Improve relocation against discarded section errorReid Kleckner2018-11-081-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Reuse the "referenced by" note diagnostic code that we already use for undefined symbols. In my case, it turned this: lld-link: error: relocation against symbol in discarded section: .text lld-link: error: relocation against symbol in discarded section: .text ... Into this: lld-link: error: relocation against symbol in discarded section: .text >>> referenced by libANGLE.lib(CompilerGL.obj):(.SCOVP$M) >>> referenced by libANGLE.lib(CompilerGL.obj):(.SCOVP$M) ... lld-link: error: relocation against symbol in discarded section: .text >>> referenced by obj/third_party/angle/libGLESv2/entry_points_egl_ext.obj:(.SCOVP$M) >>> referenced by obj/third_party/angle/libGLESv2/entry_points_egl_ext.obj:(.SCOVP$M) ... I think the new output is more useful. Reviewers: ruiu, pcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54240 llvm-svn: 346427
* [LLD] Fix Microsoft precompiled headers cross-compile on LinuxAlexandre Ganea2018-11-081-2/+5
| | | | | | Differential revision: https://reviews.llvm.org/D54122 llvm-svn: 346403
* [lld][NFC] Use explicit --symbols instead of -t in tests using llvm-readelf.Jordan Rupprecht2018-11-064-5/+5
| | | | llvm-svn: 346260
* [WebAssembly] Support creation and import of shared memoriesDerek Schuff2018-11-062-0/+27
| | | | | | | | | Used for WebAssembly threads proposal. Add a flag --shared-memory which sets the IS_SHARED bit in WasmLimits Differential Revision: https://reviews.llvm.org/D54130 llvm-svn: 346248
* [lld][NFC] Update tests to use -S instead of -s when using llvm-readelf.Jordan Rupprecht2018-11-0513-15/+15
| | | | | | | | | | | | | | Summary: llvm-readobj/readelf accepts both -s and -S as aliases for --sections. However with GNU readelf only -S means --section, and -s means --symbols. I would like to make llvm-readelf more compatible. Reviewers: MaskRay, espindola Reviewed By: MaskRay Subscribers: emaste, arichardson, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D54118 llvm-svn: 346164
* Disable precomp test on Linux until I fix it.Alexandre Ganea2018-11-051-0/+2
| | | | llvm-svn: 346163
* [COFF][LLD] Add link support for Microsoft precompiled headers OBJsAlexandre Ganea2018-11-055-0/+37
| | | | | | | | | | | This change allows for link-time merging of debugging information from Microsoft precompiled types OBJs compiled with cl.exe /Z7 /Yc and /Yu. This fixes llvm.org/PR34278 Differential Revision: https://reviews.llvm.org/D45213 llvm-svn: 346154
* Handle OUTPUT_FORMAT arguments in quotation marksGalina Kistanova2018-11-031-0/+6
| | | | llvm-svn: 346068
* [DWARF] Fix typo, .gnu_index -> .gdb_indexFangrui Song2018-11-023-3/+3
| | | | llvm-svn: 346040
* Reland "Change the timestamp of llvmcache-foo file to meet the thinLTO ↵Fangrui Song2018-11-022-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prune policy" Summary: It is difficult to touch a file with a relative mtime across different OSes as POSIX touch -d is rigid. While we may construct relative timestamps with `date`, POSIX date is inadequate to do so as various OSes' date do not agree on a common format (OpenBSD uses `date -r seconds`, FreeBSD uses `date -v-2M` while GNU accepts `-d '-2 min'`) Just use python os.utime() Original description: The case may randomly fail if we test it with command " while llvm-lit tools/lld/test/ELF/lto/cache.ll; do true; done". It is because the llvmcache-foo file is younger than llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6. But due to timestamp precision reason their timestamp is the same. Given the same timestamp, the file prune policy is to remove bigger size file first, so mostly foo file is removed for its bigger size. And the files size is under threshold after deleting foo file. That's what test case expect. However sometimes, the precision is enough to measure that timestamp of llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6 are smaller than foo, so llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6 are deleted first. Since the files size is still above the file size threshold after deleting the 2 files, the foo file is also deleted. And then the test case fails, because it expect only one file should be deleted instead of 3. The fix is to change the timestamp of llvmcache-foo file to meet the thinLTO prune policy. The same fix is applied to llvm code at https://reviews.llvm.org/D52452. Patch by Luo Yuanke. Reviewers: ruiu, craig.topper, smaslov, Jianping, espindola, LuoYuanke, tejohnson Reviewed By: tejohnson Subscribers: sbc100, krytarowski, aheejin, llvm-commits, dexonsmith, steven_wu, arichardson, inglorion, emaste, bjope, rupprecht Differential Revision: https://reviews.llvm.org/D54039 llvm-svn: 346006
* Revert "Change the timestamp of llvmcache-foo file to meet the thinLTO ↵Teresa Johnson2018-11-022-8/+0
| | | | | | | | | | | | | | | prune policy" This reverts commit r345977. A few bots failing because the invocation of "touch" is not accepted on a couple other OSes. Specifically the -d argument is not accepted or requires a different format. http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/27103/steps/test_lld/logs/stdio http://lab.llvm.org:8011/builders/lld-x86_64-freebsd/builds/24974/steps/test_lld/logs/stdio llvm-svn: 345980
* Change the timestamp of llvmcache-foo file to meet the thinLTO prune policyTeresa Johnson2018-11-022-0/+8
| | | | | | | | | | | | | | | | | | | | | | Summary: The case may randomly fail if we test it with command " while llvm-lit tools/lld/test/ELF/lto/cache.ll; do true; done". It is because the llvmcache-foo file is younger than llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6. But due to timestamp precision reason their timestamp is the same. Given the same timestamp, the file prune policy is to remove bigger size file first, so mostly foo file is removed for its bigger size. And the files size is under threshold after deleting foo file. That's what test case expect. However sometimes, the precision is enough to measure that timestamp of llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6 are smaller than foo, so llvmcache-349F039B8EB076D412007D82778442BED3148C4E and llvmcache-A8107945C65C2B2BBEE8E61AA604C311D60D58D6 are deleted first. Since the files size is still above the file size threshold after deleting the 2 files, the foo file is also deleted. And then the test case fails, because it expect only one file should be deleted instead of 3. The fix is to change the timestamp of llvmcache-foo file to meet the thinLTO prune policy. The same fix is applied to llvm code at https://reviews.llvm.org/D52452. Patch by Luo Yuanke. Reviewers: ruiu, craig.topper, smaslov, Jianping, espindola, LuoYuanke Subscribers: rupprecht, bjope, emaste, inglorion, arichardson, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D53123 llvm-svn: 345977
* [ELF] Change sh_link of .rel{,a}.plt to make GNU strip happyFangrui Song2018-11-013-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | Summary: D52830 sets sh_link to .symtab in static link, which breaks executable stripped by GNU strip. It may also be odd that .rela.plt (SHF_ALLOC) points to .symtab (non-SHF_ALLOC). Change the logic on pcc's suggestion. Before: % clang -fuse-ld=lld -static -xc =(printf 'int main(){}') # or gcc % strip a.out; ./a.out unexpected reloc type in static binary[1] 61634 segmentation fault ./a.out Reviewers: ruiu, grimar, emaste, espindola Reviewed By: ruiu Subscribers: pcc, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53993 llvm-svn: 345899
* [ELF] - Do not crash when -r output uses linker script with `/DISCARD/`George Rimar2018-11-011-0/+21
| | | | | | | | | | | | This is https://bugs.llvm.org/show_bug.cgi?id=39493. We crashed previously because did not handle /DISCARD/ properly when -r was used. I think it is uncommon to use scripts with -r, though I see nothing wrong to handle the /DISCARD/ so that we will not crash at least. Differential revision: https://reviews.llvm.org/D53864 llvm-svn: 345819
* [WebAssembly] Remove duplicate function. NFC.Sam Clegg2018-11-013-7/+7
| | | | | | Differential Revision: https://reviews.llvm.org/D53963 llvm-svn: 345806
* [WedAssembly] Add -s and -S alias for --strip-all and --strip-debugSam Clegg2018-10-312-0/+14
| | | | llvm-svn: 345767
* [ELF] Fallback to sh_link=0 if neither .dynsym nor .symtab existsFangrui Song2018-10-301-7/+9
| | | | | | | | | | | | | | Summary: .rela.plt may only contain R_*_{,I}RELATIVE relocations and not need a symbol table link. bfd/gold fallbacks to sh_link=0 in this case. Without this patch, ld.lld --strip-all caused lld to dereference a null pointer. Reviewers: ruiu, grimar, espindola Reviewed By: ruiu Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53881 llvm-svn: 345648
* [PPC64] Handle powerpc64 in OUTPUT_FORMAT.Sean Fertile2018-10-301-0/+8
| | | | | | Differential Revision: https://reviews.llvm.org/D53652 llvm-svn: 345604
* [FIX][AArch64] lld test changeDiogo N. Sampaio2018-10-301-9/+9
| | | | | | | | Adding AArch64 UDF, in rL345581, breaks some lld test files, due different decoding llvm-svn: 345592
* AMDGPU: Switch some lld tests to v2Konstantin Zhuravlyov2018-10-293-5/+5
| | | | | | Differential Revision: https://reviews.llvm.org/D53526 llvm-svn: 345530
* [ELF] Add --{,no-}call-graph-profile-sort (enabled by default)Fangrui Song2018-10-251-11/+14
| | | | | | | | | | | | | | Summary: Add an option to disable sorting sections with call graph profile Reviewers: ruiu, Bigcheese, espindola Reviewed By: Bigcheese Subscribers: grimar, emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53683 llvm-svn: 345332
* [ELF] Don't check if symbols in .llvm.call-graph-profile are unorderableFangrui Song2018-10-251-34/+0
| | | | | | | | | | | | | | Summary: There are too many reasonable cases that would be considered unorderable. Reviewers: ruiu, espindola, Bigcheese Reviewed By: ruiu Subscribers: grimar, emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53669 llvm-svn: 345322
* Remove full stops from error messages for consistency.Rui Ueyama2018-10-254-4/+4
| | | | llvm-svn: 345294
* Include input section name and output section name in an error message.Rui Ueyama2018-10-241-1/+1
| | | | | | Differential Revision: https://reviews.llvm.org/D53645 llvm-svn: 345172
* Remove a global variable that we can live without.Rui Ueyama2018-10-231-0/+8
| | | | | | | | | | Out::DebugInfo was used only by GdbIndex class to determine if we need to create a .gdb_index section, but we can do the same check without it. Added a test that this patch doesn't change the existing behavior. llvm-svn: 345058
* Don't mess up RelIplt symbols during relocatable processingDimitry Andric2018-10-231-0/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: During upgrading of the FreeBSD source tree with lld 7.0.0, I noticed that it started complaining about `crt1.o` having an "index past the end of the symbol table". Such a symbol table looks approximately like this, viewed with `readelf -s` (note the `Ndx` field being messed up): ``` Symbol table '.symtab' contains 4 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 2: 00000000 0 NOTYPE WEAK HIDDEN RSV[0xffff] __rel_iplt_end 3: 00000000 0 NOTYPE WEAK HIDDEN RSV[0xffff] __rel_iplt_start ``` At first, it seemed that recent ifunc relocation work had caused this: <https://reviews.freebsd.org/rS339351>, but it turned out that it was due to incorrect processing of the object files by lld, when using `-r` (a.k.a. --relocatable). Bisecting showed that rL324421 ("Convert a use of Config->Static") was the commit where this new behavior began. Simply reverting it solved the issue, and the `__rel_iplt` symbols had an index of `UND` again. Looking at Rafael's commit message, I think he simply missed the possibility of `--relocatable` being in effect, so I have added an additional check for it. I also added a simple regression test case. Reviewers: grimar, ruiu, emaste, espindola Reviewed By: ruiu Subscribers: arichardson, krytarowski, llvm-commits Differential Revision: https://reviews.llvm.org/D53515 llvm-svn: 345002
* [ELF] Split up emulation.s per backendShoaib Meenai2018-10-236-436/+448
| | | | | | | | | | | | emulation.s is testing multiple architectures, which means it needs all the corresponding backends enabled, which might not be true for all developers (for example, I don't have PPC or MIPS enabled). Rather than marking the entire test as unsupported for such developers, split it up per backend to get better testing granularity. Differential Revision: https://reviews.llvm.org/D53544 llvm-svn: 344986
* [ELF] Actually fix test from r344976Shoaib Meenai2018-10-231-6/+1
| | | | | | | I don't think the offsets and flags are particularly relevant to the test; the machine type is what matters. llvm-svn: 344984
* [ELF] Fix test from r344976Shoaib Meenai2018-10-231-1/+1
| | | | | | | | | Turns out I wasn't actually running this test locally, since I don't build the PPC and MIPS backends. Whoops. Perhaps this test should be split up per-architecture? llvm-svn: 344980
* [ELF] Handle elf32-littlearm in OUTPUT_FORMATShoaib Meenai2018-10-221-1/+30
| | | | | | | | | We need this to support 32-bit ARM. Add test cases for emulation handling for this architecture as well. Differential Revision: https://reviews.llvm.org/D53539 llvm-svn: 344976
* [ELF] Don't warn on two legitimate cases when reading .llvm.call-graph-profileFangrui Song2018-10-222-7/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Before, superfluous warnings were emitted for the following two cases: 1) When from symbol was in a discarded section. The profile should be thought of as affiliated to the section. It makes sense to ignore the profile if the section is discarded. 2) When to symbol was in a shared object. The object file containing the profile may not know about the to symbol, which can reside in another object file (useful profile) or a shared object (not useful as symbols in the shared object are fixed and unorderable). It makes sense to ignore the profile from the object file. Note, the warning when to symbol was undefined was suppressed in D53044, which is still useful for --symbol-ordering-file= This patch silences the warnings. The check is actually more relaxed (no warnings if either From or To is not Defined) for simplicity and I don't see a compelling reason to warn on more cases. Reviewers: ruiu, davidxl, espindola, Bigcheese Reviewed By: ruiu Subscribers: emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53470 llvm-svn: 344974
* Add OUTPUT_FORMAT linker script directive support.Rui Ueyama2018-10-224-10/+29
| | | | | | | | | | | | | | | | | | | | | | This patch adds a support for OUTPUT_FORMAT linker script directive. Since I'm not 100% confident with BFD names you can use in the directive for all architectures, I added only a few in this patch. We can add other names for other archtiectures later. We still do not support triple-style OUTPUT_FORMAT directive, namely, OUTPUT_FORMAT(bfdname, big, little). If you pass -EL (little endian) or -EB (big endian) to the linker, GNU linkers pick up big or little as a BFD name, correspondingly, so that you can use a single linker script for bi-endian processor. I'm not sure if we really need to support that, so I'll leave it alone for now. Note that -m takes precedence over OUTPUT_FORAMT, but we always parse a BFD name given to OUTPUT_FORMAT for error checking. You cannot write an invalid name in the OUTPUT_FORMAT directive. Differential Revision: https://reviews.llvm.org/D53495 llvm-svn: 344952
* Fix typo in a test file name.Rui Ueyama2018-10-221-0/+0
| | | | llvm-svn: 344899
* [COFF] Fix error handling on duplicates for import library symbolsMartin Storsjo2018-10-191-0/+43
| | | | | | | | | Normally one wouldn't run into that case, but it is possible with a little creative ordering of special libraries. Differential Revision: https://reviews.llvm.org/D53388 llvm-svn: 344776
* [PPC64] Fix offset checks on rel24 call relocations.Sean Fertile2018-10-181-0/+66
| | | | | | | | | | | | Adjusted the range check on a call instruction from 24 bits signed to 26 bits signed. While the instruction only encodes 24 bits, the target is assumed to be 4 byte aligned, and the value that is encoded in the instruction gets shifted left by 2 to form the offset. Also added a check that the offset is indeed at least 4 byte aligned. Differential Revision: https://reviews.llvm.org/D53401 llvm-svn: 344747
* [NewPM] teach -passes= to emit meaningful error messagesFedor Sergeev2018-10-171-2/+2
| | | | | | | | | | | | | | All the PassBuilder::parse interfaces now return descriptive StringError instead of a plain bool. It allows to make -passes/aa-pipeline parsing errors context-specific and thus less confusing. TODO: ideally we should also make suggestions for misspelled pass names, but that requires some extensions to PassBuilder. Reviewed By: philip.pfaffe, chandlerc Differential Revision: https://reviews.llvm.org/D53246 llvm-svn: 344685
* Reland "[PPC64] Add split - stack support."Sean Fertile2018-10-165-0/+455
| | | | | | | | | | | | | | Recommitting https://reviews.llvm.org/rL344544 after fixing undefined behavior from left-shifting a negative value. Original commit message: This support is slightly different then the X86_64 implementation in that calls to __morestack don't need to get rewritten to calls to __moresatck_non_split when a split-stack caller calls a non-split-stack callee. Instead the size of the stack frame requested by the caller is adjusted prior to the call to __morestack. The size the stack-frame will be adjusted by is tune-able through a new --split-stack-adjust-size option. llvm-svn: 344622
* Revert "[PPC64] Add split - stack support."Sean Fertile2018-10-155-455/+0
| | | | | | | | This reverts commit https://reviews.llvm.org/rL344544, which causes failures on a undefined behaviour sanitizer bot --> lld/ELF/Arch/PPC64.cpp:849:35: runtime error: left shift of negative value -1 llvm-svn: 344551
* [PPC64] Add split - stack support.Sean Fertile2018-10-155-0/+455
| | | | | | | | | | | | | This support is slightly different then the X86_64 implementation in that calls to __morestack don't need to get rewritten to calls to __moresatck_non_split when a split-stack caller calls a non-split-stack callee. Instead the size of the stack frame requested by the caller is adjusted prior to the call to __morestack. The size the stack-frame will be adjusted by is tune-able through a new --split-stack-adjust-size option. Differential Revision: https://reviews.llvm.org/D52099 llvm-svn: 344544
* [ELF][HEXAGON] Let input determine e_flag.Sid Manning2018-10-151-0/+7
| | | | | | Differential Revision: https://reviews.llvm.org/D53204 llvm-svn: 344518
* [LLD][ELF] - Check options before processing the -v/-version options.George Rimar2018-10-151-0/+3
| | | | | | | | | | | | | | | This is https://bugs.llvm.org/show_bug.cgi?id=39289. Currently both gold and bfd report errors about invalid options values even with -v/-versions. But LLD does not. This makes complicated to check the options available when LLD is used. Patch makes LLD behavior to be consistent with GNU linkers. Differential revision: https://reviews.llvm.org/D53278 llvm-svn: 344514
* Better support for POSIX paths in PDBs.Zachary Turner2018-10-122-17/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This a resubmission of a patch which was previously reverted due to breaking several lld tests. The issues causing those failures have been fixed, so the patch is now resubmitted. ---Original Commit Message--- While it doesn't make a *ton* of sense for POSIX paths to be in PDBs, it's possible to occur in real scenarios involving cross compilation. The tools need to be able to handle this, because certain types of debugging scenarios are possible without a running process and so don't necessarily require you to be on a Windows system. These include post-mortem debugging and binary forensics (e.g. using a debugger to disassemble functions and examine symbols without running the process). There's changes in clang, LLD, and lldb in this patch. After this the cross-platform disassembly and source-list tests pass on Linux. Furthermore, the behavior of LLD can now be summarized by a much simpler rule than before: Unless you specify /pdbsourcepath and /pdbaltpath, the PDB ends up with paths that are valid within the context of the machine that the link is performed on. Differential Revision: https://reviews.llvm.org/D53149 llvm-svn: 344377
* [lld] Add more complete support for the INCLUDE command.Rui Ueyama2018-10-123-0/+85
| | | | | | | | | | | | | Patch by Ian Tessier. This change adds INCLUDE support to the MEMORY and SECTION commands, and to output sections, as per: https://sourceware.org/binutils/docs/ld/File-Commands.html#File-Commands Differential Revision: https://reviews.llvm.org/D52951 llvm-svn: 344368
* Make YAML quote forward slashes.Zachary Turner2018-10-124-7/+7
| | | | | | | | | | | | | | | | | If you have the string /usr/bin, prior to this patch it would not be quoted by our YAML serializer. But a string like C:\src would be, due to the presence of a backslash. This makes the quoting rules of basically every single file path different depending on the path syntax (posix vs. Windows). While technically not required by the YAML specification to quote forward slashes, when the behavior of paths is inconsistent it makes it difficult to portably write FileCheck lines that will work with either kind of path. Differential Revision: https://reviews.llvm.org/D53169 llvm-svn: 344359
* Revert "Make YAML quote forward slashes."Zachary Turner2018-10-124-7/+7
| | | | | | | | | | This reverts commit b86c16ad8c97dadc1f529da72a5bb74e9eaed344. This is being reverted because I forgot to write a useful commit message, so I'm going to resubmit it with an actual commit message. llvm-svn: 344358
* Make YAML quote forward slashes.Zachary Turner2018-10-124-7/+7
| | | | llvm-svn: 344357
* [ELF] Fix link failure with Android compressed relocation support.Eli Friedman2018-10-111-0/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Android uses a compressed relocation format, which means the size of the relocation section isn't predictable based on the number of relocations, and can vary if the layout changes in any way. To deal with this, the linker normally runs multiple passes until the layout converges. The layout should converge if the size of the compressed relocation section increases monotonically: if the size of an encoded offset increases by one byte, the larget value which can be encoded is multiplied by 128, so the representable offsets grow much faster than the size of the section itself. The problem here is that there is no code to ensure the size of the section doesn't decrease. If the size of the relocation section decreases, the relative offsets can increase due to alignment restrictions, so that can force the size of the relocation section to increase again. The end result is an infinite loop; the loop gets cut off after 10 iterations with the message "thunk creation not converged". To avoid this issue, this patch adds padding to the end of the relocation section if its size would decrease. The extra padding is harmless because of the way the format is defined: decoding stops after it reaches the number of relocations specified in the section's header. Differential Revision: https://reviews.llvm.org/D53003 llvm-svn: 344300
* [COFF] Set proper pointer size alignment for LocalImportChunkMartin Storsjo2018-10-111-0/+24
| | | | | | | | | | | When these are accessed with load/store instructions on ARM64, it becomes strictly necessary to have them properly aligned. This fixes PR39228. Differential Revision: https://reviews.llvm.org/D53128 llvm-svn: 344264
* [ELF] - Set sh_info and sh_link for .rela.plt sections.George Rimar2018-10-114-7/+12
| | | | | | | | | | | | | | | | | | | | This is https://bugs.llvm.org/show_bug.cgi?id=37538, Currently, LLD may set both sh_link and sh_info for .rela.plt section to zero when we have only .rela.iplt section part used. ELF spec (https://docs.oracle.com/cd/E19683-01/816-1386/chapter6-94076/index.html) says that for SHT_REL and SHT_RELA, sh_link references the associated symbol table and sh_info the "section to which the relocation applies." When we set the sh_link field, for the regular case we use the .dynsym index. For .rela.iplt sections, it is unclear what is the associated symbol table, because R_*_RELATIVE relocations do not use symbol names and we might have no .dynsym section at all so this patch uses .symtab section index. Differential revision: https://reviews.llvm.org/D52830 llvm-svn: 344226
* [ELF] Don't warn on undefined symbols if UnresolvedPolicy::Ignore is usedFangrui Song2018-10-102-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Add a condition UnresolvedPolicy::Ignore to elf::warnUnorderedSymbol to suppress Sym->isUndefined() warnings from both 1) --symbol-ordering-file= 2) .llvm.call-graph-profile If --unresolved-symbols=ignore-all is used, no "undefined symbol" error/warning is emitted. It makes sense to not warn unorderable symbols. Otherwise, If an executable is linked, the default policy UnresolvedPolicy::ErrorOrWarn will issue a "undefined symbol" error. The unorderable symbol warning is redundant. If a shared object is linked, it is possible that only part of object files are used and some symbols are left undefined. The warning is not very necessary. In particular for .llvm.call-graph-profile, when linking a shared object, a call graph profile may contain undefined symbols. This case generated a warning before but it will be suppressed by this patch. Reviewers: ruiu, davidxl, espindola Reviewed By: ruiu Subscribers: grimar, emaste, arichardson, llvm-commits Differential Revision: https://reviews.llvm.org/D53044 llvm-svn: 344195
OpenPOWER on IntegriCloud