From: Vicente S. <vi...@ya...> - 2016-01-12 23:16:00
|
Hello. I've been using SDCC (PIC port) for some time and using gputils to assemble and link. Gplink has an option to remove dead sections -O2. It crashed when using this option, but recently i've repported the bug and it has been quickly fixed. (See details here: https://sourceforge.net/p/gputils/bugs/286/ ) The problem is -O2 removes code only from entire sections not used, and SDCC generates only one code section for all functions of each file. So code is only removed if no function of a file is used. This is not very useful, normally you have some libraries and use part of the functions of that files, all unused functions should be removed. This could be possible if each file had it's own code section. I have done some test with real projects (adding a code section for each function manually to the resulting asm) and i've seen very big memory savings after linking (up to 20%, very project dependent). I suggest adding a new Option for the SDCC PIC port to create a code section for each function in every compiled file. I think it should be very easy to implement this option, it just adds a line for each function in the output file, i propose the following format (the one i used in my tests): function_name (.c file function) -> _function_name (.asm file function) -> code_function_name (.asm file code section) Just add "code" prefix to each generated asm function name and add new section line before the function start label, an example here: -------------------------------------------------- ;*** ; pBlock Stats: dbName = C ;*** ;entry: _serial_hw_init ;Function start ; 2 exit points ;has an exit ;; Starting pCode block code_serial_hw_init code ;Function start _serial_hw_init ;Function start ; 2 exit points ; .line 695; "src/serial/serial_hw.c" pin_mode_input(SERIAL_HW_RX0); BANKSEL _TRISB BSF _TRISB,5 |