forked from OSchip/llvm-project
				
			[WebAssembly] Export the stack pointer when using --emit-relocs
This solves the problem that --emit-relocs needs the stack-pointer to be exported, in order to write out any relocations that reference the __stack_pointer symbol by its symbol index. Patch by Nicholas Wilson! Differential Revision: https://reviews.llvm.org/D42237 llvm-svn: 322911
This commit is contained in:
		
							parent
							
								
									84b26b90d1
								
							
						
					
					
						commit
						14ae6e7c5c
					
				| 
						 | 
				
			
			@ -58,6 +58,9 @@ entry:
 | 
			
		|||
; CHECK-NEXT:       - Name:            __wasm_call_ctors
 | 
			
		||||
; CHECK-NEXT:         Kind:            FUNCTION
 | 
			
		||||
; CHECK-NEXT:         Index:           1
 | 
			
		||||
; CHECK-NEXT:       - Name:            __stack_pointer
 | 
			
		||||
; CHECK-NEXT:         Kind:            GLOBAL
 | 
			
		||||
; CHECK-NEXT:         Index:           0
 | 
			
		||||
; CHECK-NEXT:       - Name:            __heap_base
 | 
			
		||||
; CHECK-NEXT:         Kind:            GLOBAL
 | 
			
		||||
; CHECK-NEXT:         Index:           1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -659,9 +659,12 @@ void Writer::calculateExports() {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  for (const Symbol *Sym : DefinedGlobals) {
 | 
			
		||||
    // Can't export the SP right now because it's mutable and mutable globals
 | 
			
		||||
    // cannot be exported.
 | 
			
		||||
    if (Sym == Config->StackPointerSymbol)
 | 
			
		||||
    // Can't export the SP right now because its mutable, and mutuable globals
 | 
			
		||||
    // are yet supported in the official binary format.  However, for
 | 
			
		||||
    // intermediate output we need to export it in case it is the target of any
 | 
			
		||||
    // relocations.
 | 
			
		||||
    // TODO(sbc): Remove this if/when the "mutable global" proposal is accepted.
 | 
			
		||||
    if (Sym == Config->StackPointerSymbol && !Config->EmitRelocs)
 | 
			
		||||
      continue;
 | 
			
		||||
    ExportedSymbols.emplace_back(WasmExportEntry{Sym, BudgeLocalName(Sym)});
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue