92 Commits

Author SHA1 Message Date
Rui Ueyama
a5e09c84ca [PECOFF] Implement /merge option.
/MERGE:foo=bar command line option merges section foo to section bar. If
section bar does not exist, foo is just renamed as bar.

llvm-svn: 195856
2013-11-27 18:03:34 +00:00
Rui Ueyama
3e873b0578 [PECOFF] Add a generic section writer.
Instead of having multiple SectionChunks for each section (.text, .data,
.rdata and .bss), we could have one chunk writer that can emit any sections.
This patch does that -- removing all section-sepcific chunk writers and
replace them with one "generic" writer.

This change should simplify the code because it eliminates similar-but-
slightly-different classes.

It also fixes an issue in the previous design. Before this patch, we could
emit only limited set of sections (i.e. .text, .data, .rdata and .bss). With
this patch, we can emit any sections.

llvm-svn: 195797
2013-11-27 00:55:45 +00:00
Rui Ueyama
57b4da5874 Revert "WriterPECOFF"
This reverts accidental commit r195794.

llvm-svn: 195795
2013-11-27 00:25:17 +00:00
Rui Ueyama
6dc6d18f7a WriterPECOFF
llvm-svn: 195794
2013-11-27 00:23:31 +00:00
Rui Ueyama
69cec146c7 [PECOFF] String pointed by StringRef is not always NUL-terminated.
In order not to overrun a StringRef and copy the trailing garbage, we need to
set the maximum length to be copied by strncpy.

llvm-svn: 195688
2013-11-25 21:33:01 +00:00
Rui Ueyama
6194109c29 [PECOFF] Set ordinals to linker internal atoms.
This patch won't change the output because the layout of linker internal
atoms is forced by layout-{before,after} references. Ordinals of the linker
internal atoms are not currently used. (That's why it's working even if there
are atoms having the same ordinals.)

llvm-svn: 195610
2013-11-25 05:38:20 +00:00
Rui Ueyama
2e36c8de3f [PECOFF] Change sectionChoice attribute.
Change the attribute from sectionBasedOnContent to sectionCustomRequired
because its the right attribute for atoms read from COFF files to have.
COFF atoms should basically be emitted to the section having the same name
as input. Permissions/attributes should not affect that.

There's no functionality change because the writer doesn't yet use the
section name. The writer will be modified in a following patch, so that atoms
are written to its customSectionName()'s section.

llvm-svn: 195595
2013-11-25 04:12:24 +00:00
Rui Ueyama
4eb61120b5 Do not inline large member functions.
This should improve code readability as the class definitions are now
more readable than before.

llvm-svn: 195159
2013-11-19 22:12:26 +00:00
Rui Ueyama
9a4fd7e582 Fix Windows buildbot on which size_t is not unsinged long.
llvm-svn: 194793
2013-11-15 08:08:29 +00:00
Rui Ueyama
dbce022caf [PECOFF] Minimum size of DOS stub is 64 byte.
llvm-svn: 194791
2013-11-15 08:00:22 +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
5fe806e7a4 Move DOS stub data to PECOFFLinkingContext for /stub option.
llvm-svn: 194754
2013-11-14 23:54:24 +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
450f422b49 [PECOFF] Remove unnecessary assertion.
Bugs that would be caught by this assertion would also be caught by
RoundTripYAMLPass test. We've enabled the pass for PECOFF, so we can remove
this.

llvm-svn: 193886
2013-11-01 21:11:43 +00:00
Rui Ueyama
c74157ca30 Remove redundant std::move().
llvm-svn: 193883
2013-11-01 20:40:33 +00:00
Rui Ueyama
1d1debf126 [PECOFF] Change data directory atom structure.
The data directory in the PE/COFF header consisted of list of data directory
atoms. This patch changes it -- now there's only one data directory entry that
contains former data directories. That's easier to handle in the writer as well
as to write to/read from YAML/Native files. The main purpose of this refactoring
is to enable RoundTrip tests for PE/COFF.

There's no functionality change.

llvm-svn: 193854
2013-11-01 05:51:15 +00:00
Rui Ueyama
bad4565be0 Revert "[PECOFF] Add atoms to the PassManager file"
This reverts commit r193479.

The atoms are already added to the file, so re-adding them caused the YAML
writer to write the same atoms twice. That made the YAML reader to fail with
"duplicate atom name" error.

This is not the only error we've got for RoundTripYAMLPass for PECOFF, so we
cannot enable the test yet. More fixes will come.

Differential Revision: http://llvm-reviews.chandlerc.com/D2069

llvm-svn: 193762
2013-10-31 16:59:49 +00:00
Rui Ueyama
1e6d8ac59b Remove unused variable.
llvm-svn: 193266
2013-10-23 20:31:55 +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
f47fa51c69 Fill the atom gap with INT 3 instead of NOP.
INT 3 (machine code 0xCC) will raise an interrupt when executed. That is better
for filling the gap than NOP because we want to stop the execution immediately
when the control reached to non-code address.

llvm-svn: 192945
2013-10-18 03:23:33 +00:00
Rui Ueyama
cf671439be Fill gap in .text with NOP.
llvm-svn: 192930
2013-10-17 22:45:16 +00:00
Shankar Easwaran
a96f3a3da4 [lld][InputGraph] Change the Resolver to use inputGraph
Changes :-

a) Functionality in InputGraph to insert Input elements at any position
b) Functionality in the Resolver to use nextFile
c) Move the functionality of assigning file ordinals to InputGraph
d) Changes all inputs to MemoryBuffers
e) Remove LinkerInput, InputFiles, ReaderArchive

llvm-svn: 192081
2013-10-07 02:47:09 +00:00
Rui Ueyama
98f269f9d1 [PECOFF] Add /swaprun:{cd,net} options.
llvm-svn: 191276
2013-09-24 04:20:37 +00:00
Rui Ueyama
c0a6d43c92 [PECOFF] Add /allowisolation command line option.
llvm-svn: 191227
2013-09-23 21:22:01 +00:00
Rui Ueyama
6907b3df70 [PECOFF] Add /allowbind command line option.
llvm-svn: 191224
2013-09-23 20:44:20 +00:00
Ron Ofir
b7d3e6b76b [lld][PECOFF] Fix data directory entry RVA of base relocations section
Summary:
This patch changes WriterPECOFF to actually write down the address instead of ignoring it.
Also, it changes the order of adding the BaseReloc chunk as otherwise the address wasn't set yet.

I think a better way of doing it would be to change DataDirectoryAtom to create a Reference
instead of using a number, and to change IdataPass accordingly, but I'm not sure how to do that.

Reviewers: ruiu

Reviewed By: ruiu

CC: llvm-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1743

llvm-svn: 191220
2013-09-23 20:21:24 +00:00
Rui Ueyama
9149181ae9 [PECOFF] Add /align command line option.
llvm-svn: 191218
2013-09-23 19:52:35 +00:00
Rui Ueyama
c532036aeb Whitespace and extra parentheses.
llvm-svn: 191217
2013-09-23 19:52:31 +00:00
Ron Ofir
41dcb848a7 [lld][PECOFF] Calculate SizeOfHeaders field instead of using a hard-coded value
Summary: This patch changes WritePECOFF to calculate the value of the SizeOfHeaders PE header field instead of just using 512.

Reviewers: rui314, ruiu

Reviewed By: ruiu

CC: llvm-commits, ruiu

Differential Revision: http://llvm-reviews.chandlerc.com/D1708

llvm-svn: 191212
2013-09-23 18:08:51 +00:00
Rui Ueyama
1bddfc1fc7 [PECOFF][Driver] Support /version command line option
llvm-svn: 190986
2013-09-19 02:37:36 +00:00
Rui Ueyama
ccd21fe418 [PECOFF] Fix base relocation block alignment
Base relocation block should be aligned on a 32-bit boundary. While the PECOFF
spec mentions only aligning the blocks, and not padding them, link.exe seems
to add an extra IMAGE_REL_I386_ABSOLUTE entry (just a zeroed WORD) in order to
pad the blocks.

Patch by Ron Ofir.

llvm-svn: 190951
2013-09-18 18:36:39 +00:00
Rui Ueyama
0742ce9cf7 [PECOFF] Make helper functions private.
llvm-svn: 190949
2013-09-18 18:15:18 +00:00
Rui Ueyama
e0e28d059b [PECOFF] Take into account all sections when setting size fields in the PE header
This patch changes lld to go through all sections while calculating the size
for SizeOfCode, SizeOfInitializedData and SizeOfUninitializedData fields in the
PE header, instead of using only a small set of hard-coded sections.

This only really changes SizeOfInitializedData which didn't include .reloc
section before this patch.

Patch by Ron Ofir.

llvm-svn: 190799
2013-09-16 17:39:26 +00:00
Rui Ueyama
d5e4f637ef [PECOFF] Add DISCARDABLE characteristic to .reloc section
This patch sets the IMAGE_SCN_MEM_DISCARDABLE characteristic to the base
relocations section in order to match MS PECOFF specification.

Patch by Ron Ofir.

llvm-svn: 190798
2013-09-16 17:35:13 +00:00
Rui Ueyama
98896ed1b5 [PECOFF] Add a field for machine type to PECOFFLinkingContext.
So that we can determine what the target architecture is. Adding this
field does not mean that we are going to support non-i386 architectures
soon; there are many things to do to support them, and I'm focusing on
i386 now. But this is the first step toward multi architecture support.

llvm-svn: 190627
2013-09-12 19:46:53 +00:00
Rui Ueyama
0826dd23c6 [PECOFF] Don't add RVAs to base relocations table.
Patch by Ron Ofir.

llvm-svn: 190210
2013-09-06 22:09:02 +00:00
Rui Ueyama
030fe96ff3 [PECOFF] Align section contents as specified by the object file's section header.
llvm-svn: 190120
2013-09-06 04:06:58 +00:00
Rui Ueyama
5a383d10ac [PECOFF] Add helper functions for debugging
llvm-svn: 189570
2013-08-29 07:17:47 +00:00
Rui Ueyama
c7ef7a8dd7 [PECOFF] Add Support for entry point symbol name
Patch by Jesús Serrano García.

llvm-svn: 189267
2013-08-26 19:55:09 +00:00
Rui Ueyama
72165ec8c3 Separates /fixed (no .reloc section) and /dynamicbase (enable ASLR)
in order to match link.exe's behaviour.

Patch by Ron Ofir.

llvm-svn: 189159
2013-08-24 00:39:10 +00:00
Rui Ueyama
43e5fd224a [PECOFF] Fixed base images now have the IMAGE_FILE_RELOCS_STRIPPED flag
Patch by Ron Ofir.

llvm-svn: 188187
2013-08-12 18:11:35 +00:00
Rui Ueyama
0ca149fce9 Rename TargetInfo -> LinkingContext.
Also change some local variable names: "ti" -> "context" and
"_targetInfo" -> "_context".

Differential Revision: http://llvm-reviews.chandlerc.com/D1301

llvm-svn: 187823
2013-08-06 22:31:59 +00:00
Rui Ueyama
8a14aa1bd9 [PECOFF] Relocations now take into account the address which is stored at the relocation site
Patch by Ron Ofir.

llvm-svn: 187664
2013-08-02 18:40:50 +00:00
Rui Ueyama
3361fa49f5 [PECOFF] Add a comment about .bss section.
llvm-svn: 187505
2013-07-31 17:45:48 +00:00
Rui Ueyama
a0016db818 Fix comment.
llvm-svn: 187461
2013-07-30 23:20:10 +00:00
Rui Ueyama
dcf09476ff [PECOFF] Emit BSS section.
llvm-svn: 187460
2013-07-30 22:56:46 +00:00
Rui Ueyama
3939101d6f [PATCH] [PECOFF] Fill size field of IMAGE_DATA_DIRECTORY
Patch by Ron Ofir.

llvm-svn: 187262
2013-07-26 22:33:28 +00:00
Rui Ueyama
d5b49de621 [PECOFF] Don't set IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE if "-fixed" is provided
Based on Ron Ofir's patch.

llvm-svn: 187221
2013-07-26 17:30:39 +00:00
Rui Ueyama
9c3ece328f [PECOFF] Replace magic number with llvm::COFF::DataDirectoryIndex value
Patch by Ron Ofir.

llvm-svn: 187220
2013-07-26 17:30:36 +00:00