mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 06:10:12 +00:00
[lld][WebAssembly] Fix static linking of -fPIC code with external undefined data
Reviewers: ruiu, sbc100 Reviewed By: sbc100 Subscribers: dschuff, jgravelle-google, aheejin, sunfish, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68991 llvm-svn: 374913
This commit is contained in:
parent
311dbb1bd7
commit
1ab27c74d4
@ -12,6 +12,7 @@ declare i32 @ret32(float)
|
||||
declare i32 @missing_function(float)
|
||||
@global_float = global float 1.0
|
||||
@hidden_float = hidden global float 2.0
|
||||
@missing_float = extern_weak global float
|
||||
|
||||
@ret32_ptr = global i32 (float)* @ret32, align 4
|
||||
|
||||
@ -27,6 +28,10 @@ define i32 ()* @getaddr_hidden() {
|
||||
ret i32 ()* @hidden_func;
|
||||
}
|
||||
|
||||
define float* @getaddr_missing_float() {
|
||||
ret float* @missing_float
|
||||
}
|
||||
|
||||
define hidden i32 @hidden_func() {
|
||||
ret i32 1
|
||||
}
|
||||
@ -83,16 +88,24 @@ entry:
|
||||
; CHECK-NEXT: Opcode: I32_CONST
|
||||
; CHECK-NEXT: Value: 1
|
||||
|
||||
; GOT.mem.global_float
|
||||
; GOT.mem.missing_float
|
||||
; CHECK-NEXT: - Index: 4
|
||||
; CHECK-NEXT: Type: I32
|
||||
; CHECK-NEXT: Mutable: false
|
||||
; CHECK-NEXT: InitExpr:
|
||||
; CHECK-NEXT: Opcode: I32_CONST
|
||||
; CHECK-NEXT: Value: 0
|
||||
|
||||
; GOT.mem.global_float
|
||||
; CHECK-NEXT: - Index: 5
|
||||
; CHECK-NEXT: Type: I32
|
||||
; CHECK-NEXT: Mutable: false
|
||||
; CHECK-NEXT: InitExpr:
|
||||
; CHECK-NEXT: Opcode: I32_CONST
|
||||
; CHECK-NEXT: Value: 1024
|
||||
|
||||
; GOT.mem.ret32_ptr
|
||||
; CHECK-NEXT: - Index: 5
|
||||
; CHECK-NEXT: - Index: 6
|
||||
; CHECK-NEXT: Type: I32
|
||||
; CHECK-NEXT: Mutable: false
|
||||
; CHECK-NEXT: InitExpr:
|
||||
@ -100,7 +113,7 @@ entry:
|
||||
; CHECK-NEXT: Value: 1032
|
||||
|
||||
; __memory_base
|
||||
; CHECK-NEXT: - Index: 6
|
||||
; CHECK-NEXT: - Index: 7
|
||||
; CHECK-NEXT: Type: I32
|
||||
; CHECK-NEXT: Mutable: false
|
||||
; CHECK-NEXT: InitExpr:
|
||||
|
@ -273,8 +273,12 @@ void GlobalSection::writeBody() {
|
||||
global.InitExpr.Opcode = WASM_OPCODE_I32_CONST;
|
||||
if (auto *d = dyn_cast<DefinedData>(sym))
|
||||
global.InitExpr.Value.Int32 = d->getVirtualAddress();
|
||||
else if (auto *f = cast<FunctionSymbol>(sym))
|
||||
else if (auto *f = dyn_cast<FunctionSymbol>(sym))
|
||||
global.InitExpr.Value.Int32 = f->getTableIndex();
|
||||
else {
|
||||
assert(isa<UndefinedData>(sym));
|
||||
global.InitExpr.Value.Int32 = 0;
|
||||
}
|
||||
writeGlobal(os, global);
|
||||
}
|
||||
for (const DefinedData *sym : dataAddressGlobals) {
|
||||
|
Loading…
Reference in New Issue
Block a user