• Ulf Magnusson's avatar
    kconfig: Don't leak symbol names during parsing · 26e47a3c
    Ulf Magnusson authored
    Prior to this fix, zconf.y did not free symbol names from zconf.l in
    these contexts:
    
    	- After T_CONFIG ('config LEAKED')
    	- After T_MENUCONFIG ('menuconfig LEAKED')
    	- After T_SELECT ('select LEAKED')
    	- After T_IMPLY ('imply LEAKED')
    	- After T_DEFAULT in a choice ('default LEAKED')
    
    All of these come in the form of T_WORD tokens, which always have their
    associated string allocated on the heap in zconf.l and need to be freed.
    
    Fix by introducing a new nonterminal 'nonconst_symbol' which takes a
    T_WORD, fetches the symbol, and then frees the T_WORD string. The
    already existing 'symbol' nonterminal works the same way but also
    accepts T_WORD_QUOTE, corresponding to a constant symbol. T_WORD_QUOTE
    should not be accepted in any of the contexts above, so the 'symbol'
    nonterminal can't be reused here.
    
    Fetching the symbol in 'nonconst_symbol' also removes a bunch of
    sym_lookup() calls from actions.
    
    Summary from Valgrind on 'menuconfig' (ARCH=x86) before the fix:
    
    	LEAK SUMMARY:
    	   definitely lost: 711,571 bytes in 37,756 blocks
    	   ...
    
    Summary after the fix:
    
    	LEAK SUMMARY:
    	   definitely lost: 387,504 bytes in 15,545 blocks
               ...
    Signed-off-by: default avatarUlf Magnusson <ulfalizer@gmail.com>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    26e47a3c
zconf.y 15.7 KB