# Intermediate code generation - Put symbol table in the reader monad and it to the stack or use the state monad for everything. - Add errors handling to the monad stack. # ELF generation - Define SHF_ constants. - Don't ignore relocations where the symbol is not defined in the symbol table. Add it as an external symbol to the symbol table. - Since every function adds a section header use a state monad in the generator and put the headers into the state to reduce the number of returned values in the tuples. - Relocation section header relates to another section (e.g. .rel.text). The index of that section should be passed together with collected relocations. - symstrtab creates 3 section headers and does some math to calculate the offsets and names. Introducing the state monad can help to get rid of magic numbers.