From 025b309631e996f48b8367a7a2fa1032fa04a77c Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Fri, 3 Jun 2022 22:18:06 -0700 Subject: [PATCH] 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. --- lld/test/wasm/gc-sections-startstop.s | 89 ----------------------------------- lld/wasm/MarkLive.cpp | 30 ++---------- 2 files changed, 4 insertions(+), 115 deletions(-) delete mode 100644 lld/test/wasm/gc-sections-startstop.s 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: : -# 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: : -# 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: : -# 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(); -- 2.7.4