Я собираю довольно сложное приложение в двух режимах: отладка и выпуск. Основное отличие, как я вижу, состоит в том, что -O0 против -O3 (я могу предоставить соответствующую часть Makefile, если это необходимо). Я стараюсь избегать генерации Syscall как можно больше, так как я моделирую это приложение в режиме эмуляции Syscall (внизу ОС не работает). Проблема, которую у меня в настоящее время возникает в том, что в режиме выпуска компилятор генерирует дополнительный Socket Syscall, который я предпочитаю не произойти (и который не происходит в режиме отладки). < /p>
Причина, по которой я думаю, что сокет может быть создан, заключается в том, что я использую Pthreads, и две мои потоки общаются через нестабильный Char*. Так что я предполагаю, что, может быть, компилятор пытается реализовать его причудливым способом, когда я устанавливаю флаг -O3? Но я не уверен, является ли это разумное предположение. < /P>
Возможно ли, чтобы Syscall генерируется из -за -O3 флаг? (не имеет слишком большого смысла) />
Редактировать: CTW Код находится в C и C ++ < /p>
Редактировать: код статически связан с следующими общими библиотеками: < /p >
libstdc++.a
libm.a
libglib-2.0.a
-static-libgcc
*special pthreads library*
< /code>
Кроме того, я обнаружил, где в двоичном вызове происходит: < /p>
8c716: db28 blt.n 8c76a
8c718: f8d9 1008 ldr.w r1, [r9, #8]
8c71c: 4620 mov r0, r4
8c71e: 2200 movs r2, #0
8c720: f441 2100 orr.w r1, r1, #524288 ; 0x80000
8c724: f001 e97c blx 8da20
8c728: 4b20 ldr r3, [pc, #128] ; (8c7ac )
8c72a: 681b ldr r3, [r3, #0]
8c72c: f8c9 0004 str.w r0, [r9, #4]
8c730: b943 cbnz r3, 8c744
8c732: 1c43 adds r3, r0, #1
< /code>
Изменить: я узнал, почему это происходит (см. Мой ответ ниже). Если у кого -то есть объяснение, почему компилятор ведет себя так, пожалуйста, поделитесь !!!>
Подробнее здесь: https://stackoverflow.com/questions/236 ... -a-syscall