1). Declaring `extern int func_entry(int) __attribute__((far))' without `-mlong-calls' is okay. 2). Declaring `extern int func_entry(int) __attribute__((long_call))' without `-mlong-calls' is not okay. 3). Declaring `extern char func_entry[]' and `typedef int (*FUNC_ENTRY)(int) __attribute__((far))', and calling it by ` ((FUNC_ENTRY)func_entry)(para) ' without `-mlong-calls' is not okay either, even if this usage is semantically equal to usage 1. I am not sure either this is a bug of gcc or this is a misusage of __attribute__((far))/__attribute__((long_call)).