forked from OSchip/llvm-project
[PECOFF] Default image base address for PE32+ is 0x140000000, not 0x400000.
llvm-svn: 200511
This commit is contained in:
parent
286d1b929d
commit
ea7e9306c1
|
@ -35,9 +35,9 @@ class Group;
|
|||
class PECOFFLinkingContext : public LinkingContext {
|
||||
public:
|
||||
PECOFFLinkingContext()
|
||||
: _baseAddress(0x400000), _stackReserve(1024 * 1024), _stackCommit(4096),
|
||||
_heapReserve(1024 * 1024), _heapCommit(4096), _noDefaultLibAll(false),
|
||||
_sectionDefaultAlignment(4096),
|
||||
: _baseAddress(invalidBaseAddress), _stackReserve(1024 * 1024),
|
||||
_stackCommit(4096), _heapReserve(1024 * 1024), _heapCommit(4096),
|
||||
_noDefaultLibAll(false), _sectionDefaultAlignment(4096),
|
||||
_subsystem(llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN),
|
||||
_machineType(llvm::COFF::IMAGE_FILE_MACHINE_I386), _imageVersion(0, 0),
|
||||
_minOSVersion(6, 0), _nxCompat(true), _largeAddressAware(false),
|
||||
|
@ -108,7 +108,7 @@ public:
|
|||
}
|
||||
|
||||
void setBaseAddress(uint64_t addr) { _baseAddress = addr; }
|
||||
uint64_t getBaseAddress() const { return _baseAddress; }
|
||||
uint64_t getBaseAddress() const;
|
||||
|
||||
void setStackReserve(uint64_t size) { _stackReserve = size; }
|
||||
void setStackCommit(uint64_t size) { _stackCommit = size; }
|
||||
|
@ -250,6 +250,8 @@ protected:
|
|||
virtual std::unique_ptr<File> createUndefinedSymbolFile() const;
|
||||
|
||||
private:
|
||||
enum { invalidBaseAddress = UINT64_MAX };
|
||||
|
||||
// The start address for the program. The default value for the executable is
|
||||
// 0x400000, but can be altered using /base command line option.
|
||||
uint64_t _baseAddress;
|
||||
|
|
|
@ -48,9 +48,9 @@ bool PECOFFLinkingContext::validateImpl(raw_ostream &diagnostics) {
|
|||
}
|
||||
|
||||
// It's an error if the base address is not multiple of 64K.
|
||||
if (_baseAddress & 0xffff) {
|
||||
if (getBaseAddress() & 0xffff) {
|
||||
diagnostics << "Base address have to be multiple of 64K, but got "
|
||||
<< _baseAddress << "\n";
|
||||
<< getBaseAddress() << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -201,8 +201,13 @@ StringRef PECOFFLinkingContext::undecorateSymbol(StringRef name) const {
|
|||
return name.substr(1);
|
||||
}
|
||||
|
||||
Writer &PECOFFLinkingContext::writer() const { return *_writer; }
|
||||
uint64_t PECOFFLinkingContext::getBaseAddress() const {
|
||||
if (_baseAddress == invalidBaseAddress)
|
||||
return is64Bit() ? 0x140000000UL : 0x400000UL;
|
||||
return _baseAddress;
|
||||
}
|
||||
|
||||
Writer &PECOFFLinkingContext::writer() const { return *_writer; }
|
||||
|
||||
void PECOFFLinkingContext::setSectionSetMask(StringRef sectionName,
|
||||
uint32_t newFlags) {
|
||||
|
|
|
@ -27,7 +27,7 @@ CHECK-NEXT: SizeOfInitializedData: 108
|
|||
CHECK-NEXT: SizeOfUninitializedData: 0
|
||||
CHECK-NEXT: AddressOfEntryPoint: 0x2000
|
||||
CHECK-NEXT: BaseOfCode: 0x2000
|
||||
CHECK-NEXT: ImageBase: 0x400000
|
||||
CHECK-NEXT: ImageBase: 0x140000000
|
||||
CHECK-NEXT: SectionAlignment: 4096
|
||||
CHECK-NEXT: FileAlignment: 512
|
||||
CHECK-NEXT: MajorOperatingSystemVersion: 6
|
||||
|
|
Loading…
Reference in New Issue