질문;
4.10.1절 중에
#define get_current() (current_thread_info()->task)
#define current get_current()
에서 왜 굳이 한줄로 사용할 수 있는 매크로를 두 줄로 정의하는 건가요?
답신;
current 매크로를 귀찮게(?) 두 번 캐스팅하는 이유는,
#define get_current() (current_thread_info()->task)
#define current get_current()
current_thread_info()의 세부 구현부가 CPU 아키텍처 별로 다르기 때문입니다.
예를 들어 32비트 기반의 Arm 아키텍처에서 current_thread_info 선언부는 다음과 같은데요.
https://elixir.bootlin.com/linux/v4.19.30/source/arch/arm/include/asm/thread_info.h#L86
static inline struct thread_info *current_thread_info(void) __attribute_const__;
static inline struct thread_info *current_thread_info(void)
{
return (struct thread_info *)
(current_stack_pointer & ~(THREAD_SIZE - 1));
}
64비트 기반의 Arm 아키텍처는 아래와 같습니다.
https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/thread_info.h#L22
#define current_thread_info() ((struct thread_info *)current)
최근 덧글