[PATCH] D126950: [lld][WebAssembly] Retain data segments referenced via __start/__stop
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 3 10:10:01 PDT 2022
sbc100 added inline comments.
================
Comment at: lld/wasm/MarkLive.cpp:121
+ if (symtab->find(("__start_" + name).str()) ||
+ symtab->find(("__stop_" + name).str())) {
+ enqueueWholeChunk(segment);
----------------
kateinoigakukun wrote:
> sbc100 wrote:
> > So, does this mean that if I reference the symbol `__start_data`, then all the normal data segment in my whole program will be included (non will be GC'd)?
> >
> > Is this how ELF works? It seems like a shame to loose the ability to GC data segments just because i want to know where my data starts and/or stops. I suppose we have other symbols such as `_edata` which can be used to get the start/end of the static data region without disabling GC?
> > So, does this mean that if I reference the symbol __start_data, then all the normal data segment in my whole program will be included (non will be GC'd)?
>
> Yes, I agree that's unfortunate situation...
>
> > Is this how ELF works?
>
> To be precise, according to https://lld.llvm.org/ELF/start-stop-gc, whether `__start`/`__stop` symbols retain all input data segments is controlled by `-z start-stop-gc` / `-z nostart-stop-gc`.
>
> The latest ELF lld defaults to `-z start-stop-gc`, but GNU ld defaults to `-z nostart-stop-gc` to be conservative.
>
> So, how about adding the option in wasm-ld also? If it's reasonable, which behavior should be defaulted?
Yes, adding start-stop-gc as part of this change makes sense to me.
So simplify this you could split out of the moving of the getOutputDataSegmentName function amd land that first? It seems like a good refactoring anyway.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126950/new/
https://reviews.llvm.org/D126950
More information about the llvm-commits
mailing list