forked from OSchip/llvm-project
				
			COFF: Set Load Configuration entry in Data Directory.
Load Configuration field points to a structure containing information for SEH. That data strucutre is not created by the linker but provided by an external file. What we have to do is just to set __load_config_used address to the header. llvm-svn: 242427
This commit is contained in:
		
							parent
							
								
									d2c1d91ed0
								
							
						
					
					
						commit
						afad42f9ea
					
				| 
						 | 
					@ -485,6 +485,12 @@ template <typename PEHeaderTy> void Writer::writeHeader() {
 | 
				
			||||||
      Dir[TLS_TABLE].Size = 40;
 | 
					      Dir[TLS_TABLE].Size = 40;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  if (Symbol *Sym = Symtab->find("__load_config_used")) {
 | 
				
			||||||
 | 
					    if (Defined *B = dyn_cast<Defined>(Sym->Body)) {
 | 
				
			||||||
 | 
					      Dir[LOAD_CONFIG_TABLE].RelativeVirtualAddress = B->getRVA();
 | 
				
			||||||
 | 
					      Dir[LOAD_CONFIG_TABLE].Size = 64;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Write section table
 | 
					  // Write section table
 | 
				
			||||||
  for (OutputSection *Sec : OutputSections) {
 | 
					  for (OutputSection *Sec : OutputSections) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					# RUN: yaml2obj < %s > %t.obj
 | 
				
			||||||
 | 
					# RUN: lld -flavor link2 /out:%t.exe %t.obj /entry:main /subsystem:console
 | 
				
			||||||
 | 
					# RUN: llvm-readobj -file-headers %t.exe | FileCheck %s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CHECK: LoadConfigTableRVA: 0x1000
 | 
				
			||||||
 | 
					# CHECK: LoadConfigTableSize: 0x40
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					header:
 | 
				
			||||||
 | 
					  Machine:         IMAGE_FILE_MACHINE_I386
 | 
				
			||||||
 | 
					  Characteristics: []
 | 
				
			||||||
 | 
					sections:
 | 
				
			||||||
 | 
					  - Name:            .text
 | 
				
			||||||
 | 
					    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
 | 
				
			||||||
 | 
					    Alignment:       4
 | 
				
			||||||
 | 
					    SectionData:     B82A000000C3
 | 
				
			||||||
 | 
					symbols:
 | 
				
			||||||
 | 
					  - Name:            .text
 | 
				
			||||||
 | 
					    Value:           0
 | 
				
			||||||
 | 
					    SectionNumber:   1
 | 
				
			||||||
 | 
					    SimpleType:      IMAGE_SYM_TYPE_NULL
 | 
				
			||||||
 | 
					    ComplexType:     IMAGE_SYM_DTYPE_NULL
 | 
				
			||||||
 | 
					    StorageClass:    IMAGE_SYM_CLASS_STATIC
 | 
				
			||||||
 | 
					    SectionDefinition:
 | 
				
			||||||
 | 
					      Length:          6
 | 
				
			||||||
 | 
					      NumberOfRelocations: 0
 | 
				
			||||||
 | 
					      NumberOfLinenumbers: 0
 | 
				
			||||||
 | 
					      CheckSum:        0
 | 
				
			||||||
 | 
					      Number:          0
 | 
				
			||||||
 | 
					  - Name:            _main
 | 
				
			||||||
 | 
					    Value:           0
 | 
				
			||||||
 | 
					    SectionNumber:   1
 | 
				
			||||||
 | 
					    SimpleType:      IMAGE_SYM_TYPE_NULL
 | 
				
			||||||
 | 
					    ComplexType:     IMAGE_SYM_DTYPE_NULL
 | 
				
			||||||
 | 
					    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
 | 
				
			||||||
 | 
					  - Name:            __load_config_used
 | 
				
			||||||
 | 
					    Value:           0
 | 
				
			||||||
 | 
					    SectionNumber:   1
 | 
				
			||||||
 | 
					    SimpleType:      IMAGE_SYM_TYPE_NULL
 | 
				
			||||||
 | 
					    ComplexType:     IMAGE_SYM_DTYPE_NULL
 | 
				
			||||||
 | 
					    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
		Loading…
	
		Reference in New Issue