Commit Graph

62 Commits

Author SHA1 Message Date
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
Rui Ueyama
2b59074ac8 [PECOFF] Fixed a bug which caused DataDirectoryChunk to write to a wrong offset in the file buffer
Patch by Ron Ofir.

llvm-svn: 187219
2013-07-26 17:30:33 +00:00
Rui Ueyama
fbf5763708 [PECOFF] Support -tsaware:no command line option.
llvm-svn: 186957
2013-07-23 17:17:19 +00:00
Rui Ueyama
6a41fca856 [PECOFF] Support -fixed command line option to disable base relocations.
llvm-svn: 186911
2013-07-23 01:29:50 +00:00
Rui Ueyama
8e6c8f850d [PECOFF][Driver] Add -base command line option.
llvm-svn: 186739
2013-07-20 00:45:00 +00:00
Rui Ueyama
b0b1d590ab [WinLink] Add /LargeAddressAware command line option.
llvm-svn: 186428
2013-07-16 17:20:38 +00:00
Rui Ueyama
8f7ddf733b [PECOFF][Writer] Replace magic numbers with sizeof().
This is a follow up patch for r186336.

Reviewers: LegalizeAdulthood

CC: silvas, llvm-commits

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

llvm-svn: 186384
2013-07-16 06:21:39 +00:00
Rui Ueyama
eb1e1ace85 [PECOFF][Writer] Follow up patch for r186336.
- Make a const reference instead of copying an object
- Fix a comment

llvm-svn: 186355
2013-07-15 22:20:10 +00:00
Rui Ueyama
e6be3d5505 [PECOFF][Writer] s/dyn_cast/cast/ where we don't expect null return value.
llvm-svn: 186353
2013-07-15 22:15:32 +00:00
Rui Ueyama
49a2394095 [PECOFF][Writer] Refactoring: Move private methods below public ones.
llvm-svn: 186352
2013-07-15 21:35:15 +00:00
Rui Ueyama
8ac2ec4043 [PECOFF] Fix comment.
llvm-svn: 186346
2013-07-15 21:00:53 +00:00
Rui Ueyama
341a2b4b5d [PECOFF][Writer] Emit .reloc section.
Emit .reloc section. This is the first step to support DLL creation. The
executable doesn't need .reloc section, but the DLL does.

Reviewers: Bigcheese

CC: llvm-commits

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

llvm-svn: 186336
2013-07-15 18:43:01 +00:00
Rui Ueyama
c8a53795ab [PECOFF] Support linking against DLL.
This patch adds a new pass, IdataPass, to transform shared atom references
to real references and to construct the .idata section data. With this patch
lld can produce a working Hello World program by linking it against
kernel32.dll and user32.dll.

Reviewers: Bigcheese

CC: llvm-commits

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

llvm-svn: 186071
2013-07-11 08:46:21 +00:00
Rui Ueyama
a3635b7b3b [PECOFF][Writer] Fixed a bug that an empty section is emit to the section header.
llvm-svn: 186066
2013-07-11 05:43:38 +00:00
Rui Ueyama
cf68e2a1b1 [PECOFF][Writer] Compute the size of a chunk each time it's added rather than all at once.
Contents of ".reloc" section depends on the addresses of other sections, so
the section cannot be created until all the other sections are created and get
their memory addresses (RVAs). That means that computation of section size
needs to be at least two pass.

Techynically there's no reason to compute it all at once, but instead we can
compute the address of a section as added to the output file. Doing so helps
us to create ".reloc" section.

llvm-svn: 185902
2013-07-09 04:44:18 +00:00
Rui Ueyama
4eca75df00 [PECOFF][Writer] Fix SizeOfImage header. It should include the first unmapped page.
llvm-svn: 185534
2013-07-03 12:55:56 +00:00
Rui Ueyama
18c67a158b [PECOFF][Writer] Separate AtomChunk from SectionChunk.
The optional data directory header contains addresses to some atoms such
as the import address table in data section. Such fields can naturally
be set by relocation if we make the optional data driectory as an atom.

Currently we assume that atoms are always in a section, so we can't create
a file header with atoms. This patch separates section chunk from atom
chunk, to allow atom-based file header.

llvm-svn: 185521
2013-07-03 08:15:00 +00:00
Rui Ueyama
6c7ac57235 Add "explicit" to ctors where appropriate.
llvm-svn: 185517
2013-07-03 07:32:40 +00:00
Rui Ueyama
9319db2ce9 [PECOFF][Writer] Set SizeOfInitializedData file header.
llvm-svn: 185310
2013-07-01 08:06:48 +00:00
Rui Ueyama
60c7481654 [PECOFF][Writer] Add setter methods that sets the import address table location to file header.
llvm-svn: 185309
2013-07-01 07:59:17 +00:00
Rui Ueyama
da513290de [PECOFF][Writer] Do not emit the empty section as Windows loader rejects such executable.
llvm-svn: 185308
2013-07-01 07:32:12 +00:00
Rui Ueyama
3bad6dd278 Remove extra ';'
llvm-svn: 185247
2013-06-29 04:28:44 +00:00
Rui Ueyama
e9dd5f98cf [PECOFF][Writer] Fix wrong section header.
llvm-svn: 185205
2013-06-28 20:10:36 +00:00
Rui Ueyama
95609be563 [PECOFF][Writer] Remove duplicated code by moving it to parent class.
llvm-svn: 185200
2013-06-28 19:59:54 +00:00
Rui Ueyama
11ccc91f0a [PECOFF][Writer] Support DIR32NB and REL32 relocation types.
llvm-svn: 185133
2013-06-28 04:40:52 +00:00
Rui Ueyama
4251055a66 [PECOFF][Writer] Fix a bug that the contents of .data and .rdata were swapped.
llvm-svn: 185130
2013-06-28 04:15:37 +00:00
Rui Ueyama
d059f360a3 [PECOFF][Writer] Use a constant instead of a magic number.
llvm-svn: 185128
2013-06-28 03:52:41 +00:00
Rui Ueyama
ee8b55d6a8 [PECOFF][Writer] Fix DLLCharacteristic flag in image header.
llvm-svn: 185102
2013-06-27 21:03:44 +00:00
Rui Ueyama
d95a155af6 [PECOFF] Connect defined atoms with layout before/after edges.
Reviewers: shankarke

CC: llvm-commits

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

llvm-svn: 184085
2013-06-17 16:59:54 +00:00
Rui Ueyama
8d10164326 [lld][PECOFF] Support IMAGE_REL_I386_DIR32 relocation.
With this patch, it can now resolve relocations in the same output file.
"Hello world" program does not still work because call to the DLL routine
is not supported yet.

Reviewers: Bigcheese

CC: llvm-commits

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

llvm-svn: 184063
2013-06-16 17:25:17 +00:00
Rui Ueyama
c26eabe32b [lld] Move AtomLayout from ELF to Core so that it can be used by non-ELF writers.
Summary: I'm planning to use AtomLayout in WriterPECOFF.

Reviewers: Bigcheese

CC: llvm-commits

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

llvm-svn: 184062
2013-06-16 17:25:14 +00:00