createFiles(args)
readDefsym
readerLinkerScript(*mb)
...
readMemory
readMemoryAssignment("ORIGIN", "org", "o") // eagerly evaluated
target = getTarget();
link(args)
writeResult<ELFT>()
...
finalizeSections()
script->processSymbolAssignments()
addSymbol(cmd) // with this patch, evaluated herereadMemoryAssignment eagerly evaluates ORIGIN/LENGTH and returns an uint64_t.
This patch postpones the evaluation to make
- --defsym and symbol assignments
- CONSTANT(COMMONPAGESIZE) (requires a non-null lld::elf::target)
work. If the expression somehow requires interaction with memory
regions, the circular dependency may cause the expression to evaluate to
a strange value. See the new test added to memory-err.s
It calls std::function(nullptr_t) constructor.
Such Expr will fail during evaluation (exception: std::bad_function_call).
You should probably use return [] { return 0; };