123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- # These functions are based on the following code:
- # https://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_gcc_func_attribute.m4,
- # which is licensed under the following terms:
- #
- # Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
- #
- # Copying and distribution of this file, with or without modification, are
- # permitted in any medium without royalty provided the copyright notice
- # and this notice are preserved. This file is offered as-is, without any
- # warranty.
- #
- C_FUNC_ATTRIBUTES = {
- 'alias': '''
- int foo(void) { return 0; }
- int bar(void) __attribute__((alias("foo")));''',
- 'aligned':
- 'int foo(void) __attribute__((aligned(32)));',
- 'alloc_size':
- 'void *foo(int a) __attribute__((alloc_size(1)));',
- 'always_inline':
- 'inline __attribute__((always_inline)) int foo(void) { return 0; }',
- 'artificial':
- 'inline __attribute__((artificial)) int foo(void) { return 0; }',
- 'cold':
- 'int foo(void) __attribute__((cold));',
- 'const':
- 'int foo(void) __attribute__((const));',
- 'constructor':
- 'int foo(void) __attribute__((constructor));',
- 'constructor_priority':
- 'int foo( void ) __attribute__((__constructor__(65535/2)));',
- 'deprecated':
- 'int foo(void) __attribute__((deprecated("")));',
- 'destructor':
- 'int foo(void) __attribute__((destructor));',
- 'dllexport':
- '__declspec(dllexport) int foo(void) { return 0; }',
- 'dllimport':
- '__declspec(dllimport) int foo(void);',
- 'error':
- 'int foo(void) __attribute__((error("")));',
- 'externally_visible':
- 'int foo(void) __attribute__((externally_visible));',
- 'fallthrough': '''
- int foo( void ) {
- switch (0) {
- case 1: __attribute__((fallthrough));
- case 2: break;
- }
- return 0;
- };''',
- 'flatten':
- 'int foo(void) __attribute__((flatten));',
- 'format':
- 'int foo(const char * p, ...) __attribute__((format(printf, 1, 2)));',
- 'format_arg':
- 'char * foo(const char * p) __attribute__((format_arg(1)));',
- 'gnu_inline':
- 'inline __attribute__((gnu_inline)) int foo(void) { return 0; }',
- 'hot':
- 'int foo(void) __attribute__((hot));',
- 'ifunc':
- ('int my_foo(void) { return 0; }'
- 'static int (*resolve_foo(void))(void) { return my_foo; }'
- 'int foo(void) __attribute__((ifunc("resolve_foo")));'),
- 'leaf':
- '__attribute__((leaf)) int foo(void) { return 0; }',
- 'malloc':
- 'int *foo(void) __attribute__((malloc));',
- 'noclone':
- 'int foo(void) __attribute__((noclone));',
- 'noinline':
- '__attribute__((noinline)) int foo(void) { return 0; }',
- 'nonnull':
- 'int foo(char * p) __attribute__((nonnull(1)));',
- 'noreturn':
- 'int foo(void) __attribute__((noreturn));',
- 'nothrow':
- 'int foo(void) __attribute__((nothrow));',
- 'optimize':
- '__attribute__((optimize(3))) int foo(void) { return 0; }',
- 'packed':
- 'struct __attribute__((packed)) foo { int bar; };',
- 'pure':
- 'int foo(void) __attribute__((pure));',
- 'returns_nonnull':
- 'int *foo(void) __attribute__((returns_nonnull));',
- 'unused':
- 'int foo(void) __attribute__((unused));',
- 'used':
- 'int foo(void) __attribute__((used));',
- 'visibility': '''
- int foo_def(void) __attribute__((visibility("default")));
- int foo_hid(void) __attribute__((visibility("hidden")));
- int foo_int(void) __attribute__((visibility("internal")));''',
- 'visibility:default':
- 'int foo(void) __attribute__((visibility("default")));',
- 'visibility:hidden':
- 'int foo(void) __attribute__((visibility("hidden")));',
- 'visibility:internal':
- 'int foo(void) __attribute__((visibility("internal")));',
- 'visibility:protected':
- 'int foo(void) __attribute__((visibility("protected")));',
- 'warning':
- 'int foo(void) __attribute__((warning("")));',
- 'warn_unused_result':
- 'int foo(void) __attribute__((warn_unused_result));',
- 'weak':
- 'int foo(void) __attribute__((weak));',
- 'weakref': '''
- static int foo(void) { return 0; }
- static int var(void) __attribute__((weakref("foo")));''',
- }
- CXX_FUNC_ATTRIBUTES = {
- # Alias must be applied to the mangled name in C++
- 'alias':
- ('extern "C" {'
- 'int foo(void) { return 0; }'
- '}'
- 'int bar(void) __attribute__((alias("foo")));'
- ),
- 'ifunc':
- ('extern "C" {'
- 'int my_foo(void) { return 0; }'
- 'static int (*resolve_foo(void))(void) { return my_foo; }'
- '}'
- 'int foo(void) __attribute__((ifunc("resolve_foo")));'),
- }
|