SIGILL means illegal instruction and this signal is generated whenever CPU receives the instruction which is illegal.
Now say you have a c program which is getting translated into instructions that can be executed by your processor after the compilation. If your compiler (well, your assembler actually) has a bug or if you manually edit the binary (say a.out) you might create code which does not form legal instructions. If those bytes are given to the processor, it will create a hardware interrupt (Invalid Opcode), which will be cought by the OS kernel and result in a signal SIGILL sent to your process.