mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 07:58:23 +08:00
[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:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user