4.5. $Super$$ 및 $Sub$$를 사용하여 심볼 정의를 재정의

기존 심볼을 수정할 수 없는 경우가 있습니다. 예를 들어 기존 심볼이 외부 라이브러리나 ROM 코드에 있는 경우에는 수정할 수 없습니다.

이런 경우 $Super$$$Sub$$ 패턴을 사용하여 기존 심볼을 패치할 수 있습니다.

예를 들어 foo() 함수의 정의를 패치하려면 다음 $Super$$foo()$Sub$$foo() 함수를 사용합니다.

$Super$$foo

패치하지 않은 원래의 foo() 함수를 식별합니다. 이것을 사용하여 원래 함수를 직접 호출합니다.

$Sub$$foo

원래의 foo() 함수 대신 호출될 새 함수를 식별합니다. 이것을 사용하여 원래 함수 앞 또는 뒤에 처리를 추가합니다.

Example 4.6에는 ExtraFunc()foo()를 각각 호출하도록 수정된 레거시 함수 foo()가 나와 있습니다. 자세한 내용은 install_directory\Documentation\Specifications\...에 있는 ARM ELF specification, aaelf.pdf를 참조하십시오.

Example 4.6. 

extern void ExtraFunc(void);
extern void $Super$$foo(void):

/* this function will be called instead of the original foo() */
void $Sub$$foo(void)
{
  ExtraFunc();    /* does some extra setup work */
  $Super$$foo();  /* calls the original foo() function */
}
Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential