13#define __UCONCAT(a, b) #a b 
   14#define _UCONCAT(a, b) __UCONCAT(a, b) 
   15#define UCONCAT(b) _UCONCAT(__USER_LABEL_PREFIX__, b) 
   18#define cstr(x) __attribute__((null_terminated_string_arg(x))) 
   19#define ro(...) __attribute__((access(read_only, __VA_ARGS__))) 
   20#define rw(...) __attribute__((access(read_write, __VA_ARGS__))) 
   21#define wo(...) __attribute__((access(write_only, __VA_ARGS__))) 
   29#define inline inline __attribute__((always_inline)) 
   31extern char *(*String_Strcat)(
char *dest, 
const char *src) cstr(1) cstr(2) rw(1) ro(2);
 
   33extern const 
char *(*_FP_String_Strchr)(const 
char *str, 
char c) __asm__ (UCONCAT("String_Strchr")) cstr(1) ro(1);
 
   35static inline __attribute__((pure)) cstr(1) ro(1) const 
char *String_Strchr(const 
char *str, 
char c) {
 
   36    return _FP_String_Strchr(str, c);
 
   39extern int (*_FP_String_Strcmp)(
const char *str1, 
const char *str2) __asm__ (UCONCAT(
"String_Strcmp")) cstr(1) cstr(2) ro(1) ro(2);
 
   41static inline __attribute__((pure)) cstr(1) cstr(2) ro(1) ro(2) 
int String_Strcmp(const 
char *str1, const 
char *str2) {
 
   42    return _FP_String_Strcmp(str1, str2);
 
   45extern char *(*String_Strcpy)(
char *destination, 
const char *source) cstr(2) wo(1) ro(2);
 
   47extern 
unsigned int (*_FP_String_Strlen)(const 
char *str) __asm__ (UCONCAT("String_Strlen")) cstr(1) ro(1);
 
   49static inline __attribute__((pure)) cstr(1) ro(1) 
unsigned int String_Strlen(const 
char *str) {
 
   50    return _FP_String_Strlen(str);