summaryrefslogtreecommitdiffstats
path: root/lld/unittests/DriverTests
Commit message (Collapse)AuthorAgeFilesLines
...
* Remove InputGraph and use std::vector<Node> instead.Rui Ueyama2015-01-151-2/+2
| | | | | | In total we have removed more than 1000 lines! llvm-svn: 226149
* Rename InputElement Node.Rui Ueyama2015-01-151-4/+3
| | | | | | | | | InputElement was named that because it's an element of an InputGraph. It's losing the origin because the InputGraph is now being removed. InputElement's subclass is FileNode, that naming inconsistency needed to be fixed. llvm-svn: 226147
* Remove FileNode::getPath().Rui Ueyama2015-01-151-2/+2
| | | | | | | Previously both FileNode and File keep filename. This patch removed that redundancy. llvm-svn: 226143
* Remove InputGraph::size().Rui Ueyama2015-01-151-2/+4
| | | | llvm-svn: 226140
* [PECOFF] Remove an InputElement placeholder for the entry name.Rui Ueyama2015-01-151-21/+21
| | | | llvm-svn: 226133
* Re-commit r225766, r225767, r225769, r225814, r225816, r225829, and r225832.Rui Ueyama2015-01-152-123/+0
| | | | | | | These changes depended on r225674 and had been rolled back in r225859. Because r225674 has been re-submitted, it's safe to re-submit them. llvm-svn: 226132
* Re-commit r225674: Convert other drivers to use WrapperNode.Rui Ueyama2015-01-151-4/+3
| | | | | | | | The original commit had an issue with Mac OS dylib files. It didn't handle fat binary dylib files correctly. This patch includes a fix. A test for that case has already been committed in r225764. llvm-svn: 226123
* Revert "Convert other drivers to use WrapperNode" and subsequent commits.Rui Ueyama2015-01-143-3/+127
| | | | | | | r225764 broke a basic functionality on Mac OS. This change reverts r225764, r225766, r225767, r225769, r225814, r225816, r225829, and r225832. llvm-svn: 225859
* Remove InputGraph::getNextFile().Rui Ueyama2015-01-132-84/+0
| | | | | | | | | | | | getNextFile used to have a complex logic to determine which file should be processed by the Resolver on next iteration. Now, it is just a sequential accessor to the internal array and provides no sensible feature. This patch also removes InputGraph::getGroupSize and InputGraph:: skipGroup to simplify the code. llvm-svn: 225832
* Remove dead code.Rui Ueyama2015-01-131-24/+0
| | | | | | | Now every InputElement has exactly one File in it, so "expand" method is now no-op. llvm-svn: 225769
* Remove InputGraph::registerObserver.Rui Ueyama2015-01-131-15/+0
| | | | | | | | | | | | PECOFF was the only user of the API, and the reason why we created the API is because, although the driver creates a list of input files, it has no knowledge on what files are being created. It was because everything was hidden behind the InputGraph abstraction. Now the driver knows what that's doing. We no longer need this indirection to get the file list being processed. llvm-svn: 225767
* Convert other drivers to use WrapperNode.Rui Ueyama2015-01-131-4/+3
| | | | llvm-svn: 225764
* Simplify InputGraph API.Rui Ueyama2014-12-141-5/+5
| | | | | | | | | These member functions returns either no_more_files error or a File object. We could simply return a nullptr instead of a no_more_files. This function will be removed soon as a part of InputGraph cleanup. I had to do that step by step. llvm-svn: 224208
* Remove dead code.Rui Ueyama2014-12-141-8/+2
| | | | llvm-svn: 224207
* [ELF] Make -init/-fini options compatible with the gnu linkerSimon Atanasyan2014-12-101-5/+2
| | | | | | | | | | | | | | The LLD linker searches initializer and finalizer function names and emits DT_INIT/DT_FINI dynamic table tags to point to these symbols. The -init/-fini command line options override initializer ("_init") and finalizer ("_fini") function names used by default. Now the -init/-fini options do not affect .init_array/.fini_array sections. The corresponding code has been removed. Differential Revision: http://reviews.llvm.org/D6578 llvm-svn: 223917
* Re-commit r223330: Rewrite InputGraph's GroupRui Ueyama2014-12-103-111/+20
| | | | llvm-svn: 223867
* Revert "Rewrite InputGraph's Group"Rui Ueyama2014-12-043-20/+111
| | | | | | | | This reverts commit r223330 because it broke Darwin and ELF linkers in a way that we couldn't have caught with the existing test cases. llvm-svn: 223373
* Rewrite InputGraph's GroupRui Ueyama2014-12-043-111/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The aim of this patch is to reduce the excessive abstraction from the InputGraph. We found that even a simple thing, such as sorting input files (Mach-O) or adding a new file to the input file list (PE/COFF), is nearly impossible with the InputGraph abstraction, because it hides too much information behind it. As a result, we invented complex interactions between components (e.g. notifyProgress() mechanism) and tricky code to work around that limitation. There were many occasions that we needed to write awkward code. This patch is a first step to make it cleaner. As a first step, this removes Group class from the InputGraph. The grouping feature is now directly handled by the Resolver. notifyProgress is removed since we no longer need that. I could have cleaned it up even more, but in order to keep the patch minimum, I focused on Group. SimpleFileNode class, a container of File objects, is now limited to have only one File. We shold have done this earlier. We used to allow putting multiple File objects to FileNode. Although SimpleFileNode usually has only one file, the Driver class actually used that capability. I modified the Driver class a bit, so that one FileNode is created for each input File. We should now probably remove SimpleFileNode and directly store File objects to the InputGraph in some way, because a container that can contain only one object is useless. This is a TODO. Mach-O input files are now sorted before they are passe to the Resolver. DarwinInputGraph class is no longer needed, so removed. PECOFF still has hacky code to add a new file to the input file list. This will be cleaned up in another patch. llvm-svn: 223330
* [PECOFF] Ignore /maxilkfile option.Rui Ueyama2014-11-251-1/+2
| | | | | | | | | | .ilk file is a file for incremental linking. We don't create nor use that file. /MAXILKFILE is an undocumented option to specify the maximum size of the .ilk file, IIUC. We should just ignore the option. llvm-svn: 222777
* [PECOFF] Create an empty PDB file if debug option is enabled.Rui Ueyama2014-11-251-5/+13
| | | | | | | | | | | | | | | | There are many build files in the wild that depend on the fact that link.exe produces a PDB file if /DEBUG option is given. They fail if the file is not created. This patch is to make LLD create an empty (dummy) file to satisfy such build targets. This doesn't do anything other than "touching" the file. If a target depends on the content of the PDB file, this workaround is no help, of course. Otherwise this patch should help build some stuff. llvm-svn: 222773
* [PECOFF] Enable dead-stripping even if /debug option is given.Rui Ueyama2014-11-201-1/+1
| | | | | | | | | | | | | | | | | | /debug makes MSVC link.exe to not remove unused sections from the resulting executable. We did the same thing before. However, I realized that the removal of associative section depends on the dead-stripping pass in LLD, so we cannot disable that. Or LLD may produce slightly broken executables that have too much data in it (which could result in nasty subtle bugs). This patch is a temporary measure to create correct executable. Currently /debug does not have any real effect for LLD anyway. I'll improve associative section handling in another patch, so that they are removed from output without depending on the dead-stripping pass. llvm-svn: 222483
* Revert "Add support library."Shankar Easwaran2014-11-111-3/+1
| | | | | | This reverts commit r221583. llvm-svn: 221649
* Add support library.Shankar Easwaran2014-11-101-1/+3
| | | | | | | | | The parsing routines in the linker script to parse strings encoded in various formats(hexadecimal, octal, decimal, etc), is needed by the GNU driver too. This library provides helper functions for all flavors and flavors to add helper functions which other flavors may make use of. llvm-svn: 221583
* [PECOFF] Fix /nodefaultlib option.Rui Ueyama2014-10-231-0/+9
| | | | | | | /nodefaultlib argument is a path name, so that needs to be compared case-insensitive way. Also the ".lib" extension should be ignored. llvm-svn: 220508
* Sort include files according to convention.Shankar Easwaran2014-10-187-16/+4
| | | | llvm-svn: 220131
* [PECOFF] Remember DLL names given with /delayload option.Rui Ueyama2014-10-081-1/+13
| | | | | | This is a step toward full support of /delayload. llvm-svn: 219344
* Add support to print version.Shankar Easwaran2014-10-081-1/+1
| | | | | | | | | | | | | | | | | | | Summary: Add support in the universal driver to print the lld version and the repository version. Test Plan: A driver test is added Reviewers: kledzik, ruiu Reviewed By: ruiu Subscribers: llvm-commits Projects: #lld Differential Revision: http://reviews.llvm.org/D5641 llvm-svn: 219277
* [PECOFF] Simplify /machine option handlingRui Ueyama2014-09-241-0/+5
| | | | | | | | /machine:ebc was previously recognized but rejected. Unknown architecture names were handled differently but eventually rejected too. We don't need to distinguish them. llvm-svn: 218344
* [PECOFF] Change export table type.Rui Ueyama2014-09-241-21/+17
| | | | | | | | | This patch changes the type of export table set from std::set to std::vector. The new code is slightly inefficient, but because export table elements are actually mutable, std::vector is better here. No functionality change. llvm-svn: 218343
* [PECOFF] Fix duplicate /export optionsRui Ueyama2014-09-231-2/+2
| | | | | | | | | If two or more /export options are given for the same symbol, we should always print a warning message and use the first one regardless of other parameters. Previously there was a case that the first parameter is not used. llvm-svn: 218342
* Driver: accept /machine:arm for Windows linkerSaleem Abdulrasool2014-09-191-3/+2
| | | | | | | | | Accept /machine:arm as an argument. This is changed to support ARM NT. Although there is no way to differentiate between ARM (Windows CE) and ARM NT (Windows on ARM), since LLVM currently only supports Windows on ARM, simply take /machine:arm to mean Windows on ARM. llvm-svn: 218105
* [mach-o] Let darwin driver infer arch from .o files if -arch not used.Nick Kledzik2014-09-041-30/+40
| | | | | | | | | | | | | | | | Mach-O has a "fat" (or "universal") variant where the same contents built for different architectures are concatenated into one file with a table-of-contents header at the start. But this leaves a dilemma for the linker - which architecture to use. Normally, the linker command line -arch is used to force which slice of any fat files are used. The clang compiler always passes -arch to the linker when invoking it. But some Makefiles invoke the linker directly and don’t specify the -arch option. For those cases, the linker scans all input files in command line order and finds the first non-fat object file. Whatever architecture it is becomes the architecture for the link. llvm-svn: 217189
* Fix unit test now that 'ld' is host specificNick Kledzik2014-09-041-1/+1
| | | | llvm-svn: 217114
* [mach-o] Fix initial live atoms with -dead_stripNick Kledzik2014-08-211-3/+4
| | | | | | | When -dead_strip is used with -exported_symbols_list the initial set of live atoms are those in the export list. llvm-svn: 216213
* [AArch64] Initial ELF/AArch64 SupportChad Rosier2014-08-131-1/+1
| | | | | | | | | | This patch adds the initial ELF/AArch64 support to lld. Only a basic "Hello World" app has been successfully tested for both dynamic and static compiling. Differential Revision: http://reviews.llvm.org/D4778 Patch by Daniel Stewart <stewartd@codeaurora.org>! llvm-svn: 215544
* [PECOFF] Fix /profile option.Rui Ueyama2014-08-111-2/+2
| | | | | | | /profile implies /fixed:no -- so we had to *enable* base relocations rather than disabling it. llvm-svn: 215389
* [PECOFF] Add /profile command line option.Rui Ueyama2014-07-251-0/+11
| | | | llvm-svn: 213984
* [PECOFF] Add the entry point file at the right place.Rui Ueyama2014-07-231-19/+19
| | | | | | | | | The entry point file needs to be processed after all other object files and before all .lib files. It was processed after .lib files. That caused an issue that the entry point function was not resolved from the standard library files. llvm-svn: 213804
* [PECOFF] Fix entry point functions selectionRui Ueyama2014-07-231-25/+1
| | | | | | | | | | | | | | | | | | | | | On Windows there are four "main" functions -- main, wmain, WinMain, or wWinMain. Their parameter types are diffferent. The standard library provides four different entry functions (i.e. {w,}{WinMain,main}CRTStartup) for them. You need to use the right entry routine for your "main" function. If you give an /entry option, the specified name is used unconditionally. Otherwise, the linker needs to select the right one based on user-supplied entry point function. This can be done after the linker reads all the input files. This patch moves the code to determine the entry point function from the driver to a virtual input file. It also implements the correct logic for the entry point function selection. llvm-svn: 213713
* [PECOFF] Invoke cvtres.exe in the driver.Rui Ueyama2014-07-101-19/+0
| | | | | | | | | | | | | | | | | Previously we invoked cvtres.exe for each compiled Windows resource file. The generated files were then concatenated and embedded to the executable. That was not the correct way to merge compiled Windows resource files. If you just concatenate generated files, only the first file would be recognized and the rest would be ignored as trailing garbage. The right way to merge them is to call cvtres.exe with multiple input files. In this patch we do that in the Windows driver. llvm-svn: 212763
* Fix build of DriverTests for config & make.Iain Sandoe2014-07-061-6/+6
| | | | | | | This adjusts the USED library list following recent changes in the object file heirarchy. llvm-svn: 212400
* MachO: rename _outputFileType to avoid shadowing parent field.Tim Northover2014-06-201-5/+5
| | | | llvm-svn: 211367
* Fix test build on windows.Rafael Espindola2014-06-111-1/+1
| | | | llvm-svn: 210714
* Move Simple.h and Alias.h to include/Core.Rui Ueyama2014-06-111-1/+1
| | | | | | | | Because the files in Core actually depend on these files. Differential Revision: http://reviews.llvm.org/D4000 llvm-svn: 210710
* Initial set of MakefilesIain Sandoe2014-06-041-0/+19
| | | | | | | | This provides support for the autoconfing & make build style. The format, style and implementation follows that used within the llvm and clang projects. TODO: implement out-of-source documentation builds. llvm-svn: 210177
* Add observers to Input GraphRui Ueyama2014-05-141-0/+15
| | | | | | | | | | | | | | | | | | | | | | | | Make it possible to add observers to an Input Graph, so that files returned from an Input Graph can be examined before they are passed to Resolver. To implement some PE/COFF features we need to know all the symbols that *can* be solved, including ones in archive files that are not yet to be read. Currently, Resolver only maintains a set of symbols that are already read. It has no knowledge on symbols in skipped files in an archive file. There are many ways to implement that. I chose to apply the observer pattern here because it seems most non-intrusive. We don't want to mess up Resolver with architecture specific features. Even in PE/COFF, the feature that needs this mechanism is minor. So I chose not to modify Resolver, but add a hook to Input Graph. Differential Revision: http://reviews.llvm.org/D3735 llvm-svn: 208753
* [PECOFF] DLL extension can be omitted in .def file.Rui Ueyama2014-05-091-1/+1
| | | | llvm-svn: 208428
* Expand nested input elements.Rui Ueyama2014-05-061-6/+13
| | | | | | | | Previously only the toplevel elements were expanded by expandElements(). Now we recursively call getReplacements() to expand input elements even if they are in, say, in a group. llvm-svn: 208144
* Add a test for notifyProgress().Rui Ueyama2014-05-061-0/+8
| | | | llvm-svn: 208123
* Remove unused variable.Rui Ueyama2014-05-061-1/+0
| | | | llvm-svn: 208121
OpenPOWER on IntegriCloud