If you have more than 1 ulp file (*.s) then the main code (entry point) has to be in the alphabetically first file. If it isn't then it all compiles correctly but it doesn't run. My workaround is to name the main file with an underscore as first character.
So if you have a program in ulp.s and utility in crc.s it won't work. Change ulp.s to _ulp.s and it works.
If you have more than 1 ulp file (*.s) then the main code (entry point) has to be in the alphabetically first file. If it isn't then it all compiles correctly but it doesn't run. My workaround is to name the main file with an underscore as first character.
So if you have a program in ulp.s and utility in crc.s it won't work. Change ulp.s to _ulp.s and it works.
BTW esp-idf doesn't have this restriction.