version 1.40.2.3, 2017/12/03 11:39:20 |
version 1.41, 2013/02/02 14:03:38 |
|
|
__asm(".weak " _C_LABEL_STRING(#sym)); |
__asm(".weak " _C_LABEL_STRING(#sym)); |
|
|
#if __GNUC_PREREQ__(4, 0) |
#if __GNUC_PREREQ__(4, 0) |
#define __weak __attribute__((__weak__)) |
|
#else |
|
#define __weak |
|
#endif |
|
|
|
#if __GNUC_PREREQ__(4, 0) |
|
#define __weak_reference(sym) __attribute__((__weakref__(#sym))) |
#define __weak_reference(sym) __attribute__((__weakref__(#sym))) |
#else |
#else |
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym)) |
#define __weak_reference(sym) ; __asm(".weak " _C_LABEL_STRING(#sym)) |
|
|
|
|
#endif /* !__STDC__ */ |
#endif /* !__STDC__ */ |
|
|
#if __arm__ |
|
#define __ifunc(name, resolver) \ |
|
__asm(".globl " _C_LABEL_STRING(#name) "\n" \ |
|
".type " _C_LABEL_STRING(#name) ", %gnu_indirect_function\n" \ |
|
_C_LABEL_STRING(#name) " = " _C_LABEL_STRING(#resolver)) |
|
#define __hidden_ifunc(name, resolver) \ |
|
__asm(".globl " _C_LABEL_STRING(#name) "\n" \ |
|
".hidden " _C_LABEL_STRING(#name) "\n" \ |
|
".type " _C_LABEL_STRING(#name) ", %gnu_indirect_function\n" \ |
|
_C_LABEL_STRING(#name) " = " _C_LABEL_STRING(#resolver)) |
|
#else |
|
#define __ifunc(name, resolver) \ |
|
__asm(".globl " _C_LABEL_STRING(#name) "\n" \ |
|
".type " _C_LABEL_STRING(#name) ", @gnu_indirect_function\n" \ |
|
_C_LABEL_STRING(#name) " = " _C_LABEL_STRING(#resolver)) |
|
#define __hidden_ifunc(name, resolver) \ |
|
__asm(".globl " _C_LABEL_STRING(#name) "\n" \ |
|
".hidden " _C_LABEL_STRING(#name) "\n" \ |
|
".type " _C_LABEL_STRING(#name) ", @gnu_indirect_function\n" \ |
|
_C_LABEL_STRING(#name) " = " _C_LABEL_STRING(#resolver)) |
|
#endif |
|
|
|
#if __STDC__ |
#if __STDC__ |
#define __SECTIONSTRING(_sec, _str) \ |
#define __SECTIONSTRING(_sec, _str) \ |
__asm(".pushsection " #_sec "\n" \ |
__asm(".pushsection " #_sec "\n" \ |
|
|
#ifndef __lint__ |
#ifndef __lint__ |
#define __link_set_make_entry(set, sym) \ |
#define __link_set_make_entry(set, sym) \ |
static void const * const __link_set_##set##_sym_##sym \ |
static void const * const __link_set_##set##_sym_##sym \ |
__section("link_set_" #set) __used = (const void *)&sym |
__section("link_set_" #set) __used = (void *)&sym |
#define __link_set_make_entry2(set, sym, n) \ |
#define __link_set_make_entry2(set, sym, n) \ |
static void const * const __link_set_##set##_sym_##sym##_##n \ |
static void const * const __link_set_##set##_sym_##sym##_##n \ |
__section("link_set_" #set) __used = (const void *)&sym[n] |
__section("link_set_" #set) __used = (void *)&sym[n] |
#else |
#else |
#define __link_set_make_entry(set, sym) \ |
#define __link_set_make_entry(set, sym) \ |
extern void const * const __link_set_##set##_sym_##sym |
extern void const * const __link_set_##set##_sym_##sym |
|
|
#define __link_set_add_data2(set, sym, n) __link_set_make_entry2(set, sym, n) |
#define __link_set_add_data2(set, sym, n) __link_set_make_entry2(set, sym, n) |
#define __link_set_add_bss2(set, sym, n) __link_set_make_entry2(set, sym, n) |
#define __link_set_add_bss2(set, sym, n) __link_set_make_entry2(set, sym, n) |
|
|
|
#define __link_set_decl(set, ptype) \ |
|
extern ptype * const __start_link_set_##set[] __dso_hidden; \ |
|
extern ptype * const __stop_link_set_##set[] __dso_hidden \ |
|
|
#define __link_set_start(set) (__start_link_set_##set) |
#define __link_set_start(set) (__start_link_set_##set) |
#define __link_set_end(set) (__stop_link_set_##set) |
#define __link_set_end(set) (__stop_link_set_##set) |
|
|
#define __link_set_decl(set, ptype) \ |
|
extern ptype * const __link_set_start(set)[] __dso_hidden; \ |
|
__asm__(".hidden " __STRING(__stop_link_set_##set)); \ |
|
extern ptype * const __link_set_end(set)[] __weak __dso_hidden |
|
|
|
#define __link_set_count(set) \ |
#define __link_set_count(set) \ |
(__link_set_end(set) - __link_set_start(set)) |
(__link_set_end(set) - __link_set_start(set)) |
|
|