El bit de overflow del registro de la CPU se activa si la última operación que entrara a la ALU hubiese producido un error, eso no tiene que ver nada con una llamada a una función en C.
Si la última operación que hiciese la ALU dio overflow entonces ese bit estará activo sino no. Si por ejemplo supones una variable x= (1 << 31) si justo antes de meter y sacar de la pila el contenido de las banderas realizas y=x * x; eso te dará overflow (x e y son ints 32 bits).
Esto se debe a que cuando tu pongas ese código si supones x en el registro %ebx y que el registro %eax está sin utilizar podría hacer un código similar a este:
Código C:
Ver original// cdecl assembly
movl %ebx, %eax // Copio x en otro registro
imull %eax, %eax // x*x y lo guardo y lo guaro en %eax
Si tu en este momento compruebas e imull (multiplicación de enteros con signo) provocó overflow el bit de signo estará activado.
Si tu llamas a scanf y haces eso compruebas que lo último que la última instrucción máquina que modificara la ALU no diera lugar a overflow, yo no tengo ni idea de cual será pero seguro que no es una que provoca overflow.