diff options
author | Fangrui Song <i@maskray.me> | 2022-06-03 22:18:06 -0700 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2022-06-03 22:18:06 -0700 |
commit | 025b309631e996f48b8367a7a2fa1032fa04a77c (patch) | |
tree | ae9b8441c517957e5d3e94354937bc7809a8606f | |
parent | 15faac900d3b4fc17a04b3b9de421fab1bbe33db (diff) | |
download | llvm-025b309631e996f48b8367a7a2fa1032fa04a77c.zip llvm-025b309631e996f48b8367a7a2fa1032fa04a77c.tar.gz llvm-025b309631e996f48b8367a7a2fa1032fa04a77c.tar.bz2 |
Revert D126950 "[lld][WebAssembly] Retain data segments referenced via __start/__stop"
This reverts commit dcf3368e33c3a01bd21b692d3be5dc1ecee587f4.
It breaks -DLLVM_ENABLE_ASSERTIONS=on builds. In addition, the description is
incorrect about ld.lld behavior. For wasm, there should be justification to add
the new mode.
-rw-r--r-- | lld/test/wasm/gc-sections-startstop.s | 89 | ||||
-rw-r--r-- | lld/wasm/MarkLive.cpp | 30 |
2 files changed, 4 insertions, 115 deletions
diff --git a/lld/test/wasm/gc-sections-startstop.s b/lld/test/wasm/gc-sections-startstop.s deleted file mode 100644 index f90164d..0000000 --- a/lld/test/wasm/gc-sections-startstop.s +++ /dev/null @@ -1,89 +0,0 @@ -# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj -o %t.o %s -# RUN: wasm-ld %t.o -o %t.wasm -# RUN: llvm-objdump -d --no-show-raw-insn %t.wasm | FileCheck %s - -# FOO_MD symbol is not used directly, but is referenced through __start/__stop_foo_md -foo_md_size: - .functype foo_md_size () -> (i32) - i32.const __stop_foo_md - i32.const __start_foo_md - i32.sub - end_function - -# CHECK: <foo_md_size>: -# CHECK-EMPTY: -# CHECK-NEXT: i32.const [[#STOP_ADDR:]] -# CHECK-NEXT: i32.const [[#STOP_ADDR - 4]] -# CHECK-NEXT: i32.sub - -# All segments in concat_section section are marked as live. -concat_section_size: - .functype concat_section_size () -> (i32) - i32.const __stop_concat_section - i32.const __start_concat_section - i32.sub - end_function - -# CHECK: <concat_section_size>: -# CHECK-EMPTY: -# CHECK-NEXT: i32.const [[#STOP_ADDR:]] -# CHECK-NEXT: i32.const [[#STOP_ADDR - 8]] -# CHECK-NEXT: i32.sub - - -# __start/__stop symbols don't retain invalid C name sections -invalid_name_section_size: - .functype invalid_name_section_size () -> (i32) - i32.const __stop_invalid.dot.name - i32.const __start_invalid.dot.name - i32.sub - end_function - -# CHECK: <invalid_name_section_size>: -# CHECK-EMPTY: -# CHECK-NEXT: i32.const 0 -# CHECK-NEXT: i32.const 0 -# CHECK-NEXT: i32.sub - - - .globl _start -_start: - .functype _start () -> () - call foo_md_size - drop - call concat_section_size - drop - call invalid_name_section_size - drop - end_function - - - .section foo_md,"",@ -FOO_MD: - .asciz "bar" - .size FOO_MD, 4 - - .size __start_foo_md, 4 - .size __stop_foo_md, 4 - - - .section concat_section,"",@ -concat_segment_1: - .asciz "xxx" - .size concat_segment_1, 4 - -concat_segment_2: - .asciz "yyy" - .size concat_segment_2, 4 - - .size __start_concat_section, 4 - .size __stop_concat_section, 4 - - - .section invalid.dot.name,"",@ -invalid_name_section: - .asciz "fizz" - .size invalid_name_section, 5 - - .weak __start_invalid.dot.name - .weak __stop_invalid.dot.name diff --git a/lld/wasm/MarkLive.cpp b/lld/wasm/MarkLive.cpp index c811dd4..3e5d234e 100644 --- a/lld/wasm/MarkLive.cpp +++ b/lld/wasm/MarkLive.cpp @@ -24,7 +24,6 @@ #include "InputElement.h" #include "SymbolTable.h" #include "Symbols.h" -#include "lld/Common/Strings.h" #define DEBUG_TYPE "lld" @@ -42,7 +41,6 @@ public: private: void enqueue(Symbol *sym); - void enqueue(InputChunk *chunk); void enqueueInitFunctions(const ObjFile *sym); void mark(); bool isCallCtorsLive(); @@ -86,12 +84,6 @@ void MarkLive::enqueueInitFunctions(const ObjFile *obj) { } } -void MarkLive::enqueue(InputChunk *chunk) { - LLVM_DEBUG(dbgs() << "markLive: " << chunk->getName() << "\n"); - chunk->live = true; - queue.push_back(chunk); -} - void MarkLive::run() { // Add GC root symbols. if (!config->entry.empty()) @@ -105,24 +97,10 @@ void MarkLive::run() { if (WasmSym::callDtors) enqueue(WasmSym::callDtors); - for (const ObjFile *obj : symtab->objectFiles) { - if (!obj->isLive()) { - continue; - } - // Enqueue constructors in objects explicitly live from the command-line. - enqueueInitFunctions(obj); - - // Enqueue data segments referenced through __start/__stop symbols. - for (InputChunk *segment : obj->segments) { - auto name = segment->name; - if (!isValidCIdentifier(name)) - continue; - if (symtab->find(("__start_" + name).str()) || - symtab->find(("__stop_" + name).str())) { - enqueue(segment); - } - } - } + // Enqueue constructors in objects explicitly live from the command-line. + for (const ObjFile *obj : symtab->objectFiles) + if (obj->isLive()) + enqueueInitFunctions(obj); mark(); |