Информации, конечно, маловато для осмысленного совета, но вот что бы я сделал:
0) для очистки совести и исключения бага gcc отключил бы оптимизации -O0, скорее всего проблема как была так и останется, и можно будет проглядеть неоптимизированный код этой функции и убедится, что гцц ничего не наврал;
1) вместо восьми nop (малейшее значение при котором перестает работать), выдал бы 7 nop и 1 int 3 (0xCC). или много-много int 3 и посмотрел кто на них наступает, на эти «нопы» и что там за ними следует, куда там потом управление после этих нопов должно попасть (может там мусор какой-то?)