aboutsummaryrefslogtreecommitdiffstats
path: root/make/stub_includes/platform/glibc-compat-symbols.h
blob: fc1954388a23ef6bd575c0fb7a9f50f8099532c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef __GLIBC_COMPAT_SYMBOLS_H__
#define __GLIBC_COMPAT_SYMBOLS_H__ 1
 
/**
 *
 * Note: Patching a specific glibc symbol version is only required if *not* statically linking glibc,
 *       which should be preferred.
 *
 * Note: JogAmp's minimum GLIBC is 2.4 due to '__stack_chk_fail' (stack overflow checking)
 *   
 *   GLIBC 2.4 - March 2006  - Standard for LSB 4.0, Used in SLES 10
 *   
 * We could add compile/link option '-fno-stack-protector', however stack protection seems reasonable
 * and a pre 2006 distribution a bit too 'far fetched' for our multimedia bindings anyway.
 *
 * Check build-in macro definitions via 'gcc -dM -E - < /dev/null'
 */
#if defined(__linux__) /* Actually we like to test whether we link against GLIBC .. */
    #if defined(__GNUC__)
        #if defined(__aarch64__)
           /* glibc 2.17 is the first glibc version that support aarch64
              however memcpy is not versioned for aarch64 */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__arm__)
           /** On recent toolchain memcpy is no more versioned for arm 
           #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
            */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__PPC64__)
	   /* PPC64 has multiple versions of memcpy from glibc 2.3 and onwards
	    * while PPC64LE only has one (introduced in glibc 2.17). PPC64LE is
	    * the more common of the two now so skip versioning. */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__amd64__)
           #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.2.5");
        #else
           #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.0");
        #endif /*__amd64__*/
    #elif defined(__clang__)
        #if defined(__aarch64__)
           /* glibc 2.17 is the first glibc version that support aarch64
              however memcpy is not versioned for aarch64 */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__arm__)
           /** On recent toolchain memcpy is no more versioned for arm 
           #define GLIBC_COMPAT_SYMBOL(FFF) __asm__(".symver " #FFF "," #FFF "@GLIBC_2.4");
            */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__PPC64__)
	   /* PPC64 has multiple versions of memcpy from glibc 2.3 and onwards
	    * while PPC64LE only has one (introduced in glibc 2.17). PPC64LE is
	    * the more common of the two now so skip versioning. */
           #define GLIBC_COMPAT_SYMBOL(FFF)
        #elif defined(__amd64__)
           #define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.2.5");
        #else
           #define GLIBC_COMPAT_SYMBOL(FFF) asm(".symver " #FFF "," #FFF "@GLIBC_2.0");
        #endif /*__amd64__*/
    #else
        #warning GLIBC_COMPAT_SYMBOL not supported with current compiler on GNU/Linux
        #define GLIBC_COMPAT_SYMBOL(FFF)
    #endif
#else
    #warning GLIBC_COMPAT_SYMBOL not supported with target OS
    #define GLIBC_COMPAT_SYMBOL(FFF)
#endif

GLIBC_COMPAT_SYMBOL(memcpy)
 
#endif /*__GLIBC_COMPAT_SYMBOLS_H__*/