|
Message-ID: <20171215172353.GL1627@brightrain.aerifal.cx> Date: Fri, 15 Dec 2017 12:23:53 -0500 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: [PATCH] split __libc_start_main.c into two files (Wasm) On Fri, Dec 15, 2017 at 01:04:14PM +0000, Nicholas Wilson wrote: > Hi, > > On 15 December 2017 12:33, Szabolcs Nagy wrote: > > why is exit ugly? > > halting execution should not be complicated on whatever platform > > In WebAssembly, the runtime environment is (typically) a webpage. > It's not clear what exit() would be expected to do to the webpage or > Wasm module. The Wasm interpreter offered by browsers doesn't offer > a way to cleanly exit/terminate a running WebAssembly function; the > "trap" instruction to abort is the closest you could get. > > If you have some existing C code that you want to compile/port to > WebAssembly, whatever the code previously expects to happen on > exit() won't happen. It will need to be changed when ported to the > web, the semantics of a Unix process and a web page are unavoidably > different. For brand-new code specifically targeting a web page, you > wouldn't deliberately add a dependency on exit(), because it's not > clearly meaningful for a webpage. > > So, it's "ugly" to me because the lifecycle of the webpage is an > awkward fit for exit(). We could bodge in some emulation, but it's > just ugly to pull in the emulation when we don't expect it to be > used. My preference is "you should only link in the hacks you rely > on". > > It's not too bad - we will have to implement exit() emulation for > legacy code, so I could live with it being linked in to every > application. I just dislike hacks, and don't enjoy seeing them > bundled into my own applications! I don't see this as ugly at all -- the obvious behavior for exit is for it to just go into a "halted" state. This is what you generally expect on embedded C implementations with no OS, or if pid 1 exits on a unix-like system. If you don't yet support thread creation, all it has to do is something like for(;;) wait_for_something(); or similar. Once you have threads, you may need some nontrivial work to ensure that all threads enter a halted state, or it might just be as simple as stopping the interpreter. None of this should involve significant size/cost. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.