forked from OSchip/llvm-project
[lld][WebAssembly] Fix memory size in dylink section for -pie exectuables
This field to represents the amount of static data needed by an dynamic library or executable it should not include things like heap or stack areas, which in the case of `-pie` are not determined until runtime (e.g. __stack_pointer is imported). Differential Revision: https://reviews.llvm.org/D90261
This commit is contained in:
parent
f6c9f6eccd
commit
84129150ce
|
@ -1,5 +1,5 @@
|
|||
; RUN: llc -relocation-model=pic -mattr=+mutable-globals -filetype=obj %s -o %t.o
|
||||
; RUN: wasm-ld --no-gc-sections --allow-undefined -pie -o %t.wasm %t.o
|
||||
; RUN: wasm-ld --no-gc-sections --allow-undefined --experimental-pic -pie -o %t.wasm %t.o
|
||||
; RUN: obj2yaml %t.wasm | FileCheck %s
|
||||
|
||||
target triple = "wasm32-unknown-emscripten"
|
||||
|
@ -30,6 +30,15 @@ define void @_start() {
|
|||
ret void
|
||||
}
|
||||
|
||||
; CHECK: Sections:
|
||||
; CHECK-NEXT: - Type: CUSTOM
|
||||
; CHECK-NEXT: Name: dylink
|
||||
; CHECK-NEXT: MemorySize: 16
|
||||
; CHECK-NEXT: MemoryAlignment: 2
|
||||
; CHECK-NEXT: TableSize: 1
|
||||
; CHECK-NEXT: TableAlignment: 0
|
||||
; CHECK-NEXT: Needed: []
|
||||
|
||||
; CHECK: - Type: IMPORT
|
||||
; CHECK-NEXT: Imports:
|
||||
; CHECK-NEXT: - Module: env
|
||||
|
|
|
@ -293,10 +293,10 @@ void Writer::layoutMemory() {
|
|||
if (WasmSym::dataEnd)
|
||||
WasmSym::dataEnd->setVirtualAddress(memoryPtr);
|
||||
|
||||
log("mem: static data = " + Twine(memoryPtr - dataStart));
|
||||
|
||||
if (config->shared) {
|
||||
out.dylinkSec->memSize = memoryPtr;
|
||||
uint64_t staticDataSize = memoryPtr - dataStart;
|
||||
log("mem: static data = " + Twine(staticDataSize));
|
||||
if (config->isPic) {
|
||||
out.dylinkSec->memSize = staticDataSize;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -323,7 +323,6 @@ void Writer::layoutMemory() {
|
|||
Twine(maxMemorySetting));
|
||||
memoryPtr = config->initialMemory;
|
||||
}
|
||||
out.dylinkSec->memSize = memoryPtr;
|
||||
out.memorySec->numMemoryPages =
|
||||
alignTo(memoryPtr, WasmPageSize) / WasmPageSize;
|
||||
log("mem: total pages = " + Twine(out.memorySec->numMemoryPages));
|
||||
|
|
Loading…
Reference in New Issue