| |||
| Home > Accessing and managing symbols with armlink > Using $Super$$ and $Sub$$ to patch symbol definitions | |||
There are situations where an existing symbol cannot be modified
because, for example, it is located in an external library or in
ROM code. In such cases you can use the $Super$$ and $Sub$$ patterns
to patch an existing symbol.
To patch the definition of the function foo():
$Super$$fooIdentifies the original unpatched function foo().
Use this to call the original function directly.
$Sub$$fooIdentifies
the new function that is called instead of the original function foo(). Use
this to add processing before or after the original function.
The $Sub$$ and $Super$$ mechanism
only works at static link time, $Super$$ references
cannot be imported or exported into the dynamic symbol table.
The following example shows how to insert a call to the function ExtraFunc() before
the call to the legacy function foo().
Example 9. Using $Super$$ and $Sub$$
extern void ExtraFunc(void); extern void $Super$$foo(void): /* this function is called instead of the original foo() */ void $Sub$$foo(void) { ExtraFunc(); /* does some extra setup work */ $Super$$foo(); /* calls the original foo() function */
/* To avoid calling the original foo() function
* omit the $Super$$foo(); function call.
*/
}