133 Commits

Author SHA1 Message Date
Rui Ueyama
912e65ef4b [PECOFF] Fix parameter mapping for /section.
The current mapping for /section one character options is really bogus.
Map to the correct flags.

llvm-svn: 195774
2013-11-26 17:57:05 +00:00
Rui Ueyama
82e366e78f [PECOFF] Do not set the entry address if /noentry option is given.
This is the first step towards DLL creation support. Resource-only DLLs
don't have entry point address.

llvm-svn: 195510
2013-11-22 22:52:15 +00:00
Rui Ueyama
dae2ef47f1 [PECOFF] Move files with ".lib" extension to the end of the input file list.
It's allowed to specify library files *before* object files in the command
line. Object files seems to be processed first, and then their undefined
symbols are resolved from the libraries. This patch implements the compatible
behavior.

llvm-svn: 195295
2013-11-21 01:08:53 +00:00
Rui Ueyama
2a10b6401b [PECOFF] Do not check if library is already added.
llvm-svn: 195289
2013-11-21 00:43:46 +00:00
Rui Ueyama
90bcd114ac Rename allocateString -> allocate.
llvm-svn: 195284
2013-11-21 00:17:31 +00:00
Rui Ueyama
9114439df2 Move member functions to its own cpp file.
llvm-svn: 195281
2013-11-20 23:51:41 +00:00
Rui Ueyama
478d9f9e7d [PECOFF] Avoid using statically initialized std::vector.
Also slightly reduces PECOFFLinkingContext's memory footprint (~128B).

llvm-svn: 194787
2013-11-15 05:45:20 +00:00
Rui Ueyama
e60d6e1b07 [PECOFF] Add /stub option.
llvm-svn: 194757
2013-11-15 00:18:41 +00:00
Rui Ueyama
6ac5dc379b Re-submit r194551: Use empty() instead of size() == 0.
llvm-svn: 194556
2013-11-13 05:19:47 +00:00
Rui Ueyama
e20474d38c Revert "Use empty() instead of size() == 0."
This reverts commit r194551 because it broke the buildbot.

llvm-svn: 194552
2013-11-13 03:30:29 +00:00
Rui Ueyama
2235bff2b9 Use empty() instead of size() == 0.
llvm-svn: 194551
2013-11-13 03:09:20 +00:00
Rui Ueyama
e653f1d12c [PECOFF] Fix use-after-return.
llvm-svn: 194545
2013-11-13 02:21:51 +00:00
Rui Ueyama
41b99dce59 [PECOFF] Rename getSectionAlignment -> getSectionDefaultAlignment.
These fields are for /align option. Section alignment can be set per-section
basis with /section option too. In order to avoid name conflicts, rename the
existing identifiers to become more specific. No functionality change.

llvm-svn: 194160
2013-11-06 19:30:14 +00:00
Rui Ueyama
108b371373 [PECOFF] Add /section option.
/section command line option is to set/reset attributes of the Characteristics
field in the section header. You can set non-default values with this option.
You can make .data section executable with this, for example.

This patch implements the parser of the command line option. The code to use
the parsed values will be committed in a separate patch.

llvm-svn: 194133
2013-11-06 07:31:55 +00:00
Rui Ueyama
589276cd25 [PECOFF] Do not expose _noDefaultLibs. No functionality change.
llvm-svn: 194130
2013-11-06 05:17:00 +00:00
Rui Ueyama
249c7b335e [PECOFF] Do not add the same library to the input graph more than once.
/defaultlib options can be specified implicitly via the .drectve section, and
it's pretty common that multiple object files add the same library, such as
user32.lib, to the input. We shouldn't add the same library multiple times.

llvm-svn: 194129
2013-11-06 05:13:20 +00:00
Rui Ueyama
7e77a294dc [PECOFF] Report error if there's unknown flag in .drectve
Errors in .drectve section were silently ignored. This patch fixes the issue.

llvm-svn: 194110
2013-11-05 23:53:15 +00:00
Rui Ueyama
c74157ca30 Remove redundant std::move().
llvm-svn: 193883
2013-11-01 20:40:33 +00:00
Rui Ueyama
39233f252b [PECOFF] File extension is case-insensitive on Windows.
llvm-svn: 193797
2013-10-31 20:06:48 +00:00
Rui Ueyama
7a1ac04fe2 Use StringRef::startswith_lower().
llvm-svn: 193712
2013-10-30 20:33:51 +00:00
Rui Ueyama
5c8d4dd73f [PECOFF] Suppress startup message of background processes.
llvm-svn: 193646
2013-10-29 19:52:44 +00:00
Chandler Carruth
9204c8319d Rather than rendering an argument to a std::string (which is primarily
intended for debugging and diagnostic output), just inspect the spelling
to check for specific prefixes in drectve section flags.

In addition to being significantly cheaper and not relying on
a debugging interface, this also avoids creating a temporary string and
binding it to StringRef variable. We then went on to access it after the
memory had been deallocated.

This bug too was caught by ASan. I love ASan so much. =]

llvm-svn: 193487
2013-10-27 00:10:43 +00:00
Rui Ueyama
863931c990 [PECOFF] Parse /merge command line option.
/merge:<from>=<to> option makes the linker to combine "from" section to "to"
section. This patch is to parse the option. The actual feature will be
implemented in a subsequent patch.

llvm-svn: 193454
2013-10-26 00:46:57 +00:00
Rui Ueyama
8870301763 [PECOFF] Fix use-after-return.
llvm-svn: 193446
2013-10-25 22:59:40 +00:00
Rui Ueyama
1b64561013 [PECOFF] Fix XML output bug.
We really need a test for the manifest file output, but because it depends
on external commands (CVTRES.EXE and RC.EXE), it's not very easy to write it.

llvm-svn: 193445
2013-10-25 22:36:21 +00:00
Rui Ueyama
b96752ad96 [PECOFF] Do not create a temporary std::string.
llvm-svn: 193444
2013-10-25 22:31:56 +00:00
Rui Ueyama
a694171f34 Make sure the string is NUL-terminated.
The internal byte array of the SmallString filled by createTemporaryFile() is
not guaranteed to be NUL-terminated. We need to call c_str() to handle it
safely.

llvm-svn: 193442
2013-10-25 22:19:54 +00:00
Rui Ueyama
d334b1a326 [PECOFF] Fix doublequote escaping.
llvm-svn: 193424
2013-10-25 18:12:51 +00:00
Rui Ueyama
af8cc282ab [PECOFF] Output error message to diagnostics.
llvm-svn: 193387
2013-10-25 00:58:44 +00:00
Rui Ueyama
7616ab4960 Concatenate strings at compile time.
llvm-svn: 193384
2013-10-25 00:12:09 +00:00
Rui Ueyama
5d32d96f91 [PECOFF] Fix spelling in manifest XML.
llvm-svn: 193375
2013-10-24 22:08:19 +00:00
Rui Ueyama
b32b95d814 [PECOFF] Support embedding resource file into executable.
Instead of making the linker to create a manifest XML file in the same
directory as the resulting binary, you can embed the XML as a part of
resource into the executable.

In order to do that, the linker first creates a resource script file containing
the XML file, compile it into a binary resource file with RC.EXE, and then
convert it to a COFF file with CVTRES.EXE.

llvm-svn: 193298
2013-10-24 01:39:43 +00:00
Rui Ueyama
af589f70d0 [PECOFF] Emit the side-by-side manifest file.
llvm-svn: 193207
2013-10-22 22:58:07 +00:00
Rui Ueyama
9041c3bd5b [PECOFF] Add /manifestdependency command line option.
llvm-svn: 193201
2013-10-22 21:39:04 +00:00
Rui Ueyama
9a02765bc3 [PECOFF] Add /manifestfile command line option.
/manifestfile:<path> specifies an alternative manifest file output path.
Default is "<output-path>.manifest" where <output-path> is the executable's
path.

llvm-svn: 193195
2013-10-22 20:53:07 +00:00
Rui Ueyama
7c5bc2fc2b Factor out into a separate function. No functionality change.
llvm-svn: 193186
2013-10-22 19:01:47 +00:00
Rui Ueyama
23c5a3fbec [PECOFF] /manifestuac option is case insensitive.
llvm-svn: 193173
2013-10-22 17:56:55 +00:00
Rui Ueyama
28d0f60c48 [PECOFF] Fix /manifestuac handling.
uiAccess argument's type is not really boolean. It's string.

llvm-svn: 193171
2013-10-22 17:42:42 +00:00
Alp Toker
fd4c66a5b0 Fix typo in variable name
llvm-svn: 193155
2013-10-22 09:11:45 +00:00
Rui Ueyama
0ae7b0fe0d [PECOFF] Add /manifestuac command line option.
This option is used for the manifest file too.

llvm-svn: 193145
2013-10-22 04:21:29 +00:00
Rui Ueyama
a93033cc89 [PECOFF] Better error handling for /manifest.
llvm-svn: 193143
2013-10-22 04:10:06 +00:00
Rui Ueyama
6defa0a960 [PECOFF] Return false on error. No functionality change.
llvm-svn: 193142
2013-10-22 03:50:58 +00:00
Rui Ueyama
139ae4c931 [PECOFF] Parse /manifest command line option.
The manifest file is an XML file that conveys some information to the loader,
such as whether the executable needs to run as Administrator or not. This patch
is to parse command line option for manifest file.

Actual XML file generation will be done in a separate patch.

llvm-svn: 193141
2013-10-22 03:49:35 +00:00
Rui Ueyama
f1d0d777c9 Revert "Initialize some members where they are declared."
Because MSVC11 doesn't like this new C++11 feature. The last commit
broke the buildbot.

llvm-svn: 193127
2013-10-21 22:37:14 +00:00
Rui Ueyama
1e375f55d5 Initialize some members where they are declared. No functionality change.
llvm-svn: 193122
2013-10-21 22:25:02 +00:00
Rui Ueyama
9b759d9fa2 Simplify WinLinkDriver. No functionality change.
llvm-svn: 193030
2013-10-19 03:34:00 +00:00
Rui Ueyama
f3630fe4be Make undefines check into an assertion.
Dead-strip root symbols can be undefined atoms, but should not really be
nonexistent, because dead-strip root symbols should be added to initial
undefined atoms at startup. Whenever you look up its name in the symbol
table, some type of atom will always exist.

llvm-svn: 192831
2013-10-16 19:21:50 +00:00
Rui Ueyama
c726c1962d Fix a bug that the empty string could be added to dead strip root.
llvm-svn: 192772
2013-10-16 05:06:52 +00:00
Rui Ueyama
9f3a77a9f4 [PECOFF] Add files appear in .drectve to input graph
-- so that command line options to specify new input files, such as
/defaultlib:foo, is handled properly. Such options were ignored before
this patch.

llvm-svn: 192342
2013-10-10 05:39:43 +00:00
Rui Ueyama
53f31af7ea Rename path() -> getPath().
Differential Revision: http://llvm-reviews.chandlerc.com/D1853

llvm-svn: 192167
2013-10-08 04:57:08 +00:00