model/libc.cc
author Hajime Tazaki <tazaki@sfc.wide.ad.jp>
Tue, 04 Mar 2014 11:01:04 +0900
changeset 578 71461e470024
parent 451 0d12323b6961
permissions -rw-r--r--
(temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits) by adding -rdynamic to LDFLAGS, the issue is fixed. for the time being, DCE-ed userspace applications require an additional flag (-rdynamic) so that DCE can resolve defined symbols.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     1
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     2
#include "libc.h"
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     3
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     4
struct Libc g_libc;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     5
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     6
// macros stolen from glibc.
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     7
#define weak_alias(name, aliasname) \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
     8
  extern __typeof (name) aliasname __attribute__ ((weak, alias (# name)))
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
     9
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    10
extern "C" {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    11
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    12
// Step 2.  Very dirty trick to force redirection to library functions
289
096bb07cdd73 update DCE macro not to collapse the stack under 32bit environment (this is really dirty workaround)
Hajime Tazaki <tazaki@nict.go.jp>
parents: 265
diff changeset
    13
// This will work only with GCC. Number 128 was picked to be arbitrarily large to allow
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    14
// function calls with a large number of arguments.
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    15
// \see http://tigcc.ticalc.org/doc/gnuexts.html#SEC67___builtin_apply_args
289
096bb07cdd73 update DCE macro not to collapse the stack under 32bit environment (this is really dirty workaround)
Hajime Tazaki <tazaki@nict.go.jp>
parents: 265
diff changeset
    16
// FIXME: 120925: 128 was heuristically picked to pass the test under 32bits environment.
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    17
#define NATIVE DCE
451
0d12323b6961 Bug 1624 - glibc-2.15/2.16 on 32bit oses broke dce-iperf
Hajime Tazaki <tazaki@nict.go.jp>
parents: 367
diff changeset
    18
#define NATIVET DCET
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    19
#define NATIVE_WITH_ALIAS DCE_WITH_ALIAS
185
7ec11ce9a4ad Alexander Afanasyev Adding a couple of more libc exports that allow to run almost an
frederic.urbani@inria.fr
parents: 181
diff changeset
    20
#define NATIVE_WITH_ALIAS2 DCE_WITH_ALIAS2
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    21
578
71461e470024 (temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 451
diff changeset
    22
#define GCC_BT_NUM_ARGS 128
71461e470024 (temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 451
diff changeset
    23
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    24
#define GCC_BUILTIN_APPLY(export_symbol, func_to_call) \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    25
  void export_symbol (...) { \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    26
    void *args =  __builtin_apply_args (); \
578
71461e470024 (temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 451
diff changeset
    27
    void *result = __builtin_apply (g_libc.func_to_call ## _fn, args, GCC_BT_NUM_ARGS); \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    28
    __builtin_return (result); \
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    29
  }
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    30
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    31
#define GCC_BUILTIN_APPLYT(rtype, export_symbol, func_to_call) \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    32
  rtype export_symbol (...) { \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    33
    void *args =  __builtin_apply_args (); \
578
71461e470024 (temporal) Bug 1773 - DCE doesn't run on Fedora 19, Ubuntu 13.10 (64bits)
Hajime Tazaki <tazaki@sfc.wide.ad.jp>
parents: 451
diff changeset
    34
    void *result = __builtin_apply ((void (*) (...)) g_libc.func_to_call ## _fn, args, GCC_BT_NUM_ARGS); \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    35
    __builtin_return (result); \
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    36
  }
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    37
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    38
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    39
#define DCE(name)                                                               \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    40
  GCC_BUILTIN_APPLY (name,name)
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    41
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    42
#define DCET(rtype,name)                                                               \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    43
  GCC_BUILTIN_APPLYT (rtype,name,name)
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    44
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    45
/* From gcc/testsuite/gcc.dg/cpp/vararg2.c */
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    46
/* C99 __VA_ARGS__ versions */
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    47
#define c99_count(...)    _c99_count1 (, ## __VA_ARGS__) /* If only ## worked.*/
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    48
#define _c99_count1(...)  _c99_count2 (__VA_ARGS__,10,9,8,7,6,5,4,3,2,1,0)
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    49
#define _c99_count2(_,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,n,...) n
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    50
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    51
#define FULL_ARGS_0()
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    52
#define FULL_ARGS_1(X0)  X0 a0
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    53
#define FULL_ARGS_2(X0,X1)  X0 a0, X1 a1
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    54
#define FULL_ARGS_3(X0,X1,X2)  X0 a0, X1 a1, X2 a2
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    55
#define FULL_ARGS_4(X0,X1,X2,X3)  X0 a0, X1 a1, X2 a2, X3 a3
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    56
#define FULL_ARGS_5(X0,X1,X2,X3,X4)  X0 a0, X1 a1, X2 a2, X3 a3, X4 a4
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    57
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    58
#define _ARGS_0()
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    59
#define _ARGS_1(X0)  a0
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    60
#define _ARGS_2(X0,X1)   a0, a1
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    61
#define _ARGS_3(X0,X1,X2)  a0, a1, a2
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    62
#define _ARGS_4(X0,X1,X2,X3)  a0, a1, a2, a3
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    63
#define _ARGS_5(X0,X1,X2,X3,X4) a0, a1, a2, a3, a4
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    64
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    65
#define CAT(a, ...) PRIMITIVE_CAT (a, __VA_ARGS__)
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    66
#define PRIMITIVE_CAT(a, ...) a ## __VA_ARGS__
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    67
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    68
#define  FULL_ARGS(...) CAT (FULL_ARGS_,c99_count (__VA_ARGS__)) (__VA_ARGS__)
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    69
#define  ARGS(...) CAT (_ARGS_,c99_count (__VA_ARGS__)) (__VA_ARGS__)
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    70
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    71
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    72
#define DCE_EXPLICIT(name,rtype,...)                                    \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    73
  rtype name (FULL_ARGS (__VA_ARGS__))    \
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    74
  {                                                             \
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    75
    return g_libc.name ## _fn (ARGS (__VA_ARGS__));              \
253
8c86080ced8e improve DCE macro definition in case of __builtin_apply executes during startup
Hajime Tazaki <tazaki@nict.go.jp>
parents: 216
diff changeset
    76
  }
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    77
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    78
#define DCE_WITH_ALIAS(name)                                    \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    79
  GCC_BUILTIN_APPLY (__ ## name,name)                      \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    80
  weak_alias (__ ## name, name);
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    81
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    82
#define DCE_WITH_ALIAS2(name, internal)                 \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    83
  GCC_BUILTIN_APPLY (internal,name)                        \
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    84
  weak_alias (internal, name);
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    85
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    86
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    87
// Note: it looks like that the stdio.h header does
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    88
// not define putc and getc as macros if you include
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    89
// them from C++ so that we do need to define the putc
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    90
// and getc functions anyway.
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    91
#undef putc
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    92
#undef getc
207
e7e165717a73 First changes to support or re-support Ubuntu 10.04.
frederic.urbani@inria.fr
parents: 185
diff changeset
    93
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    94
#include "libc-ns3.h" // do the work
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    95
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    96
// weak_alias (strtol, __strtol_internal);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    97
// weak_alias (wctype_l, __wctype_l);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
    98
// weak_alias (strdup, __strdup);
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
    99
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   100
// void exit(int status)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   101
// {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   102
//   g_libc.exit_fn (status);
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   103
//   int a = 0;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   104
//   while (1)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   105
//     {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   106
//       // loop forever to quiet compiler warning:
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   107
//       // warning: ‘noreturn’ function does return
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   108
//       a++;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   109
//     }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   110
// }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   111
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   112
// void abort(void)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   113
// {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   114
//   g_libc.abort_fn ();
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   115
//   int a = 0;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   116
//   while (1)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   117
//     {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   118
//       // loop forever to quiet compiler warning:
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   119
//       // warning: ‘noreturn’ function does return
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   120
//       a++;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   121
//     }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   122
// }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   123
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   124
char * strpbrk (const char *s, const char *a)
265
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   125
{
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   126
  return g_libc.strpbrk_fn (s,a);
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   127
}
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   128
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   129
char * strstr (const char *u, const char *d)
265
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   130
{
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   131
  return g_libc.strstr_fn (u,d);
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   132
}
bd4f5503456a Add support of wget and thttpd.
frederic.urbani@inria.fr
parents: 253
diff changeset
   133
300
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   134
int snprintf (char *s, size_t si, const char *f, ...)
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   135
{
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   136
  va_list vl;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   137
  va_start (vl, f);
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   138
  int r =  g_libc.vsnprintf_fn (s, si, f, vl);
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   139
  va_end (vl);
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   140
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   141
  return r;
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   142
}
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   143
int vsnprintf (char *s, size_t si, const char *f, va_list v)
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   144
{
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   145
  return g_libc.vsnprintf_fn (s, si, f, v);
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   146
}
65899b480bb9 Add readv, vsnprinf, snprinf, tcgetattr, tcsetattr, statvfs, fstatvfs, pthread_equal.
frederic.urbani@inria.fr
parents: 289
diff changeset
   147
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   148
#include "libc-globals.h"
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   149
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   150
void LIBSETUP (const struct Libc *fn)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   151
{
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   152
  /* The following assignment of fn to g_libc is a bit weird: we perform a copy of the data
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   153
   * structures by hand rather than executing g_libc = fn. This is obviously done on purpose.
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   154
   * The reason is that g_libc = fn would trigger a call to the memcpy function because the
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   155
   * Libc structure is very big. The memcpy function is resolved through the dynamic loader's
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   156
   * symbol lookup mechanism to the local memcpy function and that local memcpy function happens
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   157
   * to be calling g_libc.memcpy_fn which is set to NULL before the data structure is initialized.
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   158
   */
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   159
  const unsigned char *src = (const unsigned char *)fn;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   160
  unsigned char *dst = (unsigned char *)&g_libc;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   161
  unsigned int i;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   162
  for (i = 0; i < sizeof (struct Libc); ++i)
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   163
    {
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   164
      *dst = *src;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   165
      src++;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   166
      dst++;
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   167
    }
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   168
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   169
  setup_global_variables ();
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   170
}
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   171
216
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   172
#ifdef HAVE_GETCPUFEATURES
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   173
// Below there is an exception implementation: because the libm of glibc2.14 call  __get_cpu_features during dlopen,
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   174
// and during dlopen of libm  DCE do not have yet called lib_setup so there we implement __get_cpu_features
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   175
// directly without using the global g_libc variable, we can do it only if our implementation of the method
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   176
// do not interract with any ressouces of DCE or NS3 and do no call any other libc methods ...
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   177
struct cpu_features;
367
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   178
extern const struct cpu_features * dce___get_cpu_features (void);
be749a6bbde0 coding style adapted. check-style.py applied with manuay modification.
Hajime Tazaki <tazaki@nict.go.jp>
parents: 300
diff changeset
   179
const struct cpu_features * __get_cpu_features (void)
216
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   180
{
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   181
  return dce___get_cpu_features ();
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   182
}
50dd0158ab4d Add Fedora 16 64 support.
frederic.urbani@inria.fr
parents: 207
diff changeset
   183
#endif
181
231e0431cf57 Merge with Alexander Afanasyev changes :
frederic.urbani@inria.fr
parents:
diff changeset
   184
} // extern "C"