Previously, Config->InitialMemory/MaxMemory were hooked up to some commandline args but had no effect at all.
Details
Diff Detail
- Repository
- rLLD LLVM Linker
- Build Status
Buildable 15975 Build 15975: arc lint + arc unit
Event Timeline
Code looks good. I have concerns about adding flags that don't have current users. Can you point to at least one before we add this?
Good question - it's not so much adding a flag, as fixing an existing broken flag, but you're right. I'm not aware of any current users, but I was planning to use it myself in my own projects, to help catching any memory leaks.
lld/trunk/wasm/Writer.cpp | ||
---|---|---|
611 ↗ | (On Diff #138343) | This can be Config->InitMemory % WasmPageSize != 0 |
612 ↗ | (On Diff #138343) | Something like error: -initial-memory=<value>: value is not aligned to 4096 bytes is more common style of an error message. |
615 ↗ | (On Diff #138343) | This else looks odd because if there is an error in the first if, the control reaches here, but if there is an error in the second if, it doesn't. Maybe we should just set it unconditionally. We won't use a value if there's an error because we'll exit before we use a dummy value. |
lld/trunk/wasm/Writer.cpp | ||
---|---|---|
611 ↗ | (On Diff #138343) | OK, it's just copied from the block above however where the same idiom is used. Should compile down to the same thing. |
612 ↗ | (On Diff #138343) | OK, I'll tidy that in a future commit. Thanks. |
615 ↗ | (On Diff #138343) | You say we'll exit before we use a dummy value - but I don't think exit is no-return? In particular, if exit returns then we'll carry on to the MaxMemory block below, which uses MemoryPtr, so we have to leave this block with a "safe" value for MemoryPtr. That was my logic anyway. |
lld/trunk/wasm/Writer.cpp | ||
---|---|---|
615 ↗ | (On Diff #138343) | I mean error() counts the number of errors we've seen and before calling write(), we first check if the counter is zero, and if not, we return without calling that function (which will result in existing from the program.) So we do not really care too much about a wrong value in Config. And with this code, a wrong value could still be set to MemoryPtr. If the first error test passes but the second test succeeds, this line is executed. That's inconsistent. |