Changeset 1289


Ignore:
Timestamp:
Mar 15, 2004, 2:50:57 AM (21 years ago)
Author:
bird
Message:

o Logging and strict features.
o #967: TLS implementation.

Location:
trunk/src/emx
Files:
2 added
4 deleted
72 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/emx/Makefile

    • Property cvs2svn:cvs-rev changed from 1.45 to 1.46
    r1288 r1289  
    105105CFLAGS.omf  = -Zomf
    106106CFLAGS.prof = -pg
    107 CFLAGS.log  = -DDEBUG_LOGGING
     107CFLAGS.log  = -DDEBUG_LOGGING -D__LIBC_STRICT
    108108# The object files are put in subdirectory objectformat-targetkind,
    109109# we decompose object file name back and pick appropiate $CFLAGS
  • TabularUnified trunk/src/emx/include/386/builtin.h

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    3939  __asm__ __volatile__ ("cli");
    4040}
     41
     42/**
     43 * Atomically sets a bit and return the old one.
     44 *
     45 * @returns 1 if the bit was set, 0 if it was clear.
     46 * @param   pv      Pointer to base of bitmap.
     47 * @param   uBit    Bit in question.
     48 */
     49static __inline__ int __atomic_set_bit(__volatile__ void *pv, unsigned uBit)
     50{
     51    int rc;
     52    __asm__ __volatile__("lock btsl %2, %1\n\t"
     53                         "sbbl %0,%0"
     54                         : "=r" (rc),
     55                           "=m" (*(__volatile__ unsigned *)pv)
     56                         : "r" (uBit)
     57                         : "memory");
     58    return rc;
     59}
     60
     61
     62/**
     63 * Atomically clears a bit.
     64 *
     65 * @param   pv      Pointer to base of bitmap.
     66 * @param   uBit    Bit in question.
     67 */
     68static __inline__ void __atomic_clear_bit(__volatile__ void *pv, unsigned uBit)
     69{
     70    __asm__ __volatile__("lock btrl %1, %0"
     71                         : "=m" (*(__volatile__ unsigned *)pv)
     72                         : "r" (uBit));
     73}
     74
     75
     76/**
     77 * Atomically (er?) tests if a bit is set.
     78 *
     79 * @returns non zero if the bit was set.
     80 * @returns 0 if the bit was clear.
     81 * @param   pv      Pointer to base of bitmap.
     82 * @param   uBit    Bit in question.
     83 */
     84static __inline__ int __atomic_test_bit(const __volatile__ void *pv, unsigned uBit)
     85{
     86    __asm__ __volatile__("btl %0, %1\n\t"
     87                         "sbbl %0, %0\t\n"
     88                         : "=r" (uBit)
     89                         : "m"  (*(const __volatile__ unsigned *)pv));
     90    return uBit;
     91}
     92
     93
     94/**
     95 * Atomically increments a 32-bit unsigned value.
     96 *
     97 * @param   pu      Pointer to the value to increment.
     98 */
     99static __inline__ void __atomic_increment(__volatile__ unsigned *pu)
     100{
     101    __asm__ __volatile__("lock incl %0"
     102                         : "=m" (*pu));
     103}
     104
     105/**
     106 * Atomically decrements a 32-bit unsigned value.
     107 *
     108 * @param   pu      Pointer to the value to decrement.
     109 */
     110static __inline__ void __atomic_decrement(__volatile__ unsigned *pu)
     111{
     112    __asm__ __volatile__("lock decl %0"
     113                         : "=m" (*pu));
     114}
     115
     116/**
     117 * Atomically increments a 32-bit unsigned value if less than max.
     118 *
     119 * @returns 0 if incremented.
     120 * @returns *pu + 1 when not updated.
     121 * @param   pu      Pointer to the value to increment.
     122 * @param   uMax    *pu must not be above this value.
     123 */
     124static __inline__ int __atomic_increment_max(__volatile__ unsigned *pu, unsigned uMax)
     125{
     126    unsigned rc;
     127    __asm__ __volatile__("movl  %1, %%eax\n"
     128                         "1:\n\t"
     129                         "lea   1(%%eax), %0\n\t"
     130                         "cmpl  %0, %2\n\t"
     131                         "jna   2f\n\t"
     132                         "jmp   4f\n"
     133                         "2:\n\t"
     134                         "lock  cmpxchgl %0, %1\n\t"
     135                         "jz    3f\n\t"
     136                         "jmp   1b\n"
     137                         "3:"
     138                         "xorl  %0, %0\n\t"
     139                         "4:"
     140                         : "=r" (rc),
     141                           "=m" (pu)
     142                         : "r"  (uMax)
     143                         : "%eax");
     144    return rc;
     145}
     146
     147
     148/**
     149 * Atomically decrements a 32-bit unsigned value if greater than a min.
     150 *
     151 * @returns 0 if incremented.
     152 * @returns *pu + 1 when not updated.
     153 * @param   pu      Pointer to the value to decrement.
     154 * @param   uMin    *pu must not be below this value.
     155 */
     156static __inline__ int __atomic_increment_min(__volatile__ unsigned *pu, unsigned uMin)
     157{
     158    unsigned rc;
     159    __asm__ __volatile__("movl  %1, %%eax\n"
     160                         "1:\n\t"
     161                         "lea   -1(%%eax), %0\n\t"
     162                         "cmpl  %0, %2\n\t"
     163                         "jnb   2f\n\t"
     164                         "jmp   4f\n"
     165                         "2:\n\t"
     166                         "lock  cmpxchgl %0, %1\n\t"
     167                         "jz    3f\n\t"
     168                         "jmp   1b\n"
     169                         "3:"
     170                         "xorl  %0, %0\n\t"
     171                         "4:"
     172                         : "=r" (rc),
     173                           "=m" (*pu)
     174                         : "r"  (uMin)
     175                         : "%eax");
     176    return rc;
     177}
     178
    41179
    42180#define __ROTATE_FUN(F,I,T) \
  • TabularUnified trunk/src/emx/include/emx/syscalls.h

    • Property cvs2svn:cvs-rev changed from 1.9 to 1.10
    r1288 r1289  
    7878  unsigned short env_count;
    7979  unsigned short env_size;
    80   unsigned short mode;
    81   unsigned short mode2;         /* Present only if (mode & 0x8000) */
     80  unsigned       mode;
    8281};
    8382
  • TabularUnified trunk/src/emx/include/sys/process.h

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    2828#define P_NOCLOSE    0x2000
    2929#define P_NOSESSION  0x4000
    30 
    31 /* Note: 0x8000 is used internally. */
    3230
    3331#define P_QUOTE      0x10000
  • TabularUnified trunk/src/emx/src/lib/libc.def

    • Property cvs2svn:cvs-rev changed from 1.50 to 1.51
    r1288 r1289  
    1414;
    1515; Imports which are freqently used may of course be moved to an low ordinal
    16 ; number to save 5 cpu cycles every now and then ;-)
     16; number to save 5 cpu cycles every now and then ;-) However the general idea
     17; is just to sort them and assign fresh ordinals when a libc version goes out
     18; of development.
    1719;
    1820
    1921EXPORTS
    2022; data
    21     "___digits" @1
    22     "___locale" @2
    23     "___default_hash" @3
     23    "___default_hash" @1
     24    "___digits" @2
     25    "___locale" @3
    2426    "___locale_collate" @4
    2527    "___locale_ctype" @5
    2628    "___locale_lconv" @6
    2729    "___locale_time" @7
    28     "___stderrp" @8
    29     "___stdinp" @9
    30     "___stdoutp" @10
    31     "__atexit_n" @11
    32     "__atexit_v" @12
    33     "__fmode_bin" @13
    34     "__mb_cur_max" @14
    35     "__org_environ" @15
    36     "__osmajor" @16
    37     "__osminor" @17
    38     "__pipe_size" @18
    39     "__rand48_add" @19
    40     "__rand48_mult" @20
    41     "__rand48_seed" @21
    42     "__std_daylight" @22
    43     "__std_environ" @23
    44     "__std_timezone" @24
    45     "__std_tzname" @25
    46     "__streamv_rmutex" @26
    47     "__streamvec_head" @27
    48 ; fixme "" @28
    49     "__tmpidx" @29
    50     "__tzi" @30
    51     "__tzset_flag" @31
    52     "__um_high_heap" @32
    53     "__um_low_heap" @33
    54     "__um_regular_heap" @34
    55     "__um_tiled_heap" @35
    56     "__emx_optarg" @36
    57     "__emx_opterr" @37
    58     "__emx_optind" @38
    59     "__emx_optmode" @39
    60     "__emx_optopt" @40
    61     "__emx_optswchar" @41
    62     "_optarg" @42
    63     "_opterr" @43
    64     "_optind" @44
    65     "_optopt" @45
    66     "_optreset" @46
    67     "___progname" @47
    68     "_error_message_count" @48
    69     "_error_one_per_line" @49
    70     "_error_print_progname" @50
     30    "___progname" @8
     31    "___stderrp" @9
     32    "___stdinp" @10
     33    "___stdoutp" @11
     34    "__atexit_n" @12
     35    "__atexit_v" @13
     36    "__emx_optarg" @14
     37    "__emx_opterr" @15
     38    "__emx_optind" @16
     39    "__emx_optmode" @17
     40    "__emx_optopt" @18
     41    "__emx_optswchar" @19
     42    "__fmode_bin" @20
     43    "__mb_cur_max" @21
     44    "__org_environ" @22
     45    "__osmajor" @23
     46    "__osminor" @24
     47    "__pipe_size" @25
     48    "__rand48_add" @26
     49    "__rand48_mult" @27
     50    "__rand48_seed" @28
     51    "__std_daylight" @29
     52    "__std_environ" @30
     53    "__std_timezone" @31
     54    "__std_tzname" @32
     55    "__streamv_rmutex" @33
     56    "__streamvec_head" @34
     57    "__tmpidx" @35
     58    "__tzi" @36
     59    "__tzset_flag" @37
     60    "__um_high_heap" @38
     61    "__um_low_heap" @39
     62    "__um_regular_heap" @40
     63    "__um_tiled_heap" @41
     64    "_error_message_count" @42
     65    "_error_one_per_line" @43
     66    "_error_print_progname" @44
     67    "_optarg" @45
     68    "_opterr" @46
     69    "_optind" @47
     70    "_optopt" @48
     71    "_optreset" @49
    7172
    7273
    73 ; code - and const
    74     "__CRT_init" @101
    75     "__CRT_term" @102
    76     "__HUGE_VAL" @103
    77     "__LHUGE_VAL" @104
    78 ; fixme    "___alloc_thread" @105
    79     "___atod" @106
    80     "___chdir" @107
    81     "___chmod" @108
    82     "___chsize" @109
    83     "___close" @110
    84     "___convert_codepage" @111
    85     "___ctordtorInit1" @112
    86     "___ctordtorTerm1" @113
    87     "___do_Unicode" @114
    88     "___dtoa" @115
    89     "___dup" @116
    90     "___dup2" @117
    91 ; fixme    "___endthread" @118
    92     "___exit" @119
    93     "___fcntl" @120
    94     "___findfirst" @121
    95     "___findnext" @122
    96     "___fmutex_release_internal" @123
    97     "___fmutex_request_internal" @124
    98     "___fork" @125
    99     "___fpclassify" @126
    100     "___fpclassifyf" @127
    101     "___fpclassifyl" @128
    102     "___from_ucs" @129
    103     "___fstat" @130
    104     "___ftime" @131
    105     "___ftruncate" @132
    106     "___getcwd" @133
    107     "___gnu_basename" @134
    108     "___imphandle" @135
    109     "___init" @136
    110     "___init_app" @137
    111     "___init_dll" @138
    112 ; fixme    "___initthread" @139
    113     "___ioctl1" @140
    114     "___ioctl2" @141
    115     "___isfinite" @142
    116     "___isfinitef" @143
    117     "___isfinitel" @144
    118     "___isnan" @145
    119     "___isnanf" @146
    120     "___isnanl" @147
    121     "___isnormal" @148
    122     "___isnormalf" @149
    123     "___isnormall" @150
    124     "___libc_FH" @151
    125     "___libc_FHAllocate" @152
    126     "___libc_FHClose" @153
    127     "___libc_FHEnsureHandles" @154
    128     "___libc_HasHighMem" @155
    129     "___libc_HeapEndVoting" @156
    130     "___libc_HeapGetResult" @157
    131     "___libc_HeapVote" @158
    132     "___libc_HimemDefaultAlloc" @159
    133     "___libc_HimemDefaultRelease" @160
    134     "___lseek" @161
    135     "___mkdir" @162
    136 ; fixme    "___newthread" @163
    137     "___open" @164
    138     "___pipe" @165
    139     "___read" @166
    140     "___read_kbd" @167
    141     "___remove_zeros" @168
    142     "___rmdir" @169
    143     "___select" @170
    144     "___settime" @171
    145     "___signbit" @172
    146     "___signbitf" @173
    147     "___signbitl" @174
    148     "___small_atod" @175
    149     "___small_dtoa" @176
    150     "___smutex_request_internal" @177
    151     "___spawnve" @178
    152     "___stat" @179
    153     "___swchar" @180
    154     "___threadid" @181
    155     "___to_ucs" @182
    156     "___ttyname" @183
    157     "___ulimit" @184
    158     "___unwind2" @185
    159     "___utimes" @186
    160     "___wait" @187
    161     "___waitpid" @188
    162     "___write" @189
    163     "__abspath" @190
    164     "__assert" @191
    165     "__beginthread" @192
    166     "__bi_add_bb" @193
    167     "__bi_cmp_bb" @194
    168     "__bi_cmp_pow2" @195
    169     "__bi_div_add_back" @196
    170     "__bi_div_estimate" @197
    171     "__bi_div_rem_bb" @198
    172     "__bi_div_rem_bw" @199
    173     "__bi_div_rem_pow2" @200
    174     "__bi_div_subtract" @201
    175     "__bi_fls" @202
    176     "__bi_hdiv_rem_b" @203
    177     "__bi_mul_bb" @204
    178     "__bi_mul_bw" @205
    179     "__bi_pow5" @206
    180     "__bi_set_b" @207
    181     "__bi_set_d" @208
    182     "__bi_set_w" @209
    183     "__bi_shl_b" @210
    184     "__bi_shl_w" @211
    185     "__bi_shr_b" @212
    186     "__bi_sub_mul_bw" @213
    187     "__bi_wdiv_rem_pow2" @214
    188     "__chdir2" @215
    189     "__clear87" @216
    190     "__closestream" @217
    191     "__compute_dst_table" @218
    192     "__const_HALF" @219
    193     "__const_M_ONE" @220
    194     "__const_NAN" @221
    195     "__const_ONE" @222
    196     "__const_TWO" @223
    197     "__const_ZERO" @224
    198     "__control87" @225
    199     "__core" @226
    200     "__crlf" @227
    201     "__day" @228
    202     "__defext" @229
    203     "__dorand48" @230
    204     "__dt_free" @231
    205     "__dt_read" @232
    206     "__dt_sort" @233
    207     "__dt_split" @234
    208     "__ea_free" @235
    209     "__ea_get" @236
    210     "__ea_put" @237
    211     "__ea_remove" @238
    212     "__ea_set_errno" @239
    213     "__ea_write" @240
    214     "__ead_add" @241
    215     "__ead_clear" @242
    216     "__ead_copy" @243
    217     "__ead_count" @244
    218     "__ead_create" @245
    219     "__ead_delete" @246
    220     "__ead_destroy" @247
    221     "__ead_enum" @248
    222     "__ead_fea2list_size" @249
    223     "__ead_fea2list_to_fealist" @250
    224     "__ead_fealist_to_fea2list" @251
    225     "__ead_find" @252
    226     "__ead_get_fea2list" @253
    227     "__ead_get_flags" @254
    228     "__ead_get_name" @255
    229     "__ead_get_value" @256
    230     "__ead_make_index" @257
    231     "__ead_name_len" @258
    232     "__ead_read" @259
    233     "__ead_replace" @260
    234     "__ead_size_buffer" @261
    235     "__ead_sort" @262
    236     "__ead_use_fea2list" @263
    237     "__ead_value_size" @264
    238     "__ead_write" @265
    239     "__emxload_connect" @266
    240     "__emxload_disconnect" @267
    241     "__emxload_do_connect" @268
    242     "__emxload_do_disconnect" @269
    243     "__emxload_do_receive" @270
    244     "__emxload_do_request" @271
    245     "__emxload_do_wait" @272
    246     "__emxload_env" @273
    247     "__emxload_list_get" @274
    248     "__emxload_list_start" @275
    249     "__emxload_prog" @276
    250     "__emxload_request" @277
    251     "__emxload_stop" @278
    252     "__emxload_this" @279
    253     "__emxload_unload" @280
    254     "__endbuf1" @281
    255     "__endthread" @282
    256     "__envargs" @283
    257     "__errno" @284
    258     "__errno_fun" @285
    259     "__execname" @286
    260     "__exit" @287
    261     "__exit_streams" @288
    262     "__fassign" @289
    263     "__fbuf" @290
    264     "__fcloseall" @291
    265     "__fflush_nolock" @292
    266     "__filesys" @293
    267     "__fill" @294
    268     "__flush" @295
    269     "__flushstream" @296
    270     "__fmutex_checked_close" @297
    271     "__fmutex_checked_create" @298
    272     "__fmutex_checked_open" @299
    273     "___collate_range_cmp" @300
    274     "_toupper" @301
    275     "__fmutex_close" @302
    276     "__fmutex_create" @303
    277     "__fmutex_dummy" @304
    278     "__fmutex_open" @305
    279     "__fnexplode" @306
    280     "__fnexplodefree" @307
    281     "__fngetdrive" @308
    282     "__fnisabs" @309
    283     "__fnisrel" @310
    284     "__fnlwr" @311
    285     "__fnlwr2" @312
    286     "__fnslashify" @313
    287     "__fpreset" @314
    288     "__fseek_hdr" @315
    289     "__fseek_nolock" @316
    290     "__fsetmode" @317
    291     "__fsopen" @318
    292     "__ftell_nolock" @319
    293     "__fullpath" @320
    294     "__fwrite_nolock" @321
    295     "__fxam" @322
    296     "__fxaml" @323
    297     "__getcwd1" @324
    298     "__getcwd2" @325
    299     "__getdrive" @326
    300     "__getext" @327
    301     "__getext2" @328
    302     "__getname" @329
    303     "__getpass1" @330
    304     "__getpass2" @331
    305     "__gettid" @332
    306     "__getvol" @333
    307     "__std_glob" @334
    308     "__std_globfree" @335
    309     "__gmt2loc" @336
    310     "__std_gmtime_r" @337
    311     "__hcalloc" @338
    312     "__heap_walk" @339
    313     "__heapchk" @340
    314     "__heapmin" @341
    315     "__heapset" @342
    316     "__hinitheap" @343
    317     "__hmalloc" @344
    318     "__hrealloc" @345
    319     "__imphandle" @346
    320     "__init1_tmp" @347
    321     "__init_streams" @348
    322     "__input" @349
    323     "__int86" @350
    324     "__isterm" @351
    325     "__lcalloc" @352
    326     "__libc_16to32" @353
    327     "__libc_32to16" @354
    328     "__libc_thunk1" @355
    329     "__linitheap" @356
    330     "__lmalloc" @357
    331     "__loc2gmt" @358
    332     "__std_localtime_r" @359
    333     "__lrealloc" @360
    334     "__makepath" @361
    335     "__memcount" @362
    336     "__memdif" @363
    337     "__memrchr" @364
    338     "__memswap" @365
    339     "__mfclose" @366
    340     "__mfopen" @367
    341     "__mheap" @368
    342     "__mktime" @369
    343     "__month_day_leap" @370
    344     "__month_day_non_leap" @371
    345     "__msize" @372
    346     "__newstream" @373
    347     "__openstream" @374
    348     "__os2_bad" @375
    349     "__output" @376
    350     "__path" @377
    351     "__read_kbd" @378
    352     "__remext" @379
    353     "__response" @380
    354     "__rfnlwr" @381
    355     "__rmtmp" @382
    356     "__rmutex_checked_close" @383
    357     "__rmutex_checked_create" @384
    358     "__rmutex_checked_open" @385
    359     "__rmutex_close" @386
    360     "__rmutex_create" @387
    361     "__rmutex_dummy" @388
    362     "__rmutex_fork" @389
    363     "__rmutex_open" @390
    364     "__scrsize" @391
    365     "__searchenv" @392
    366     "__seek_hdr" @393
    367     "__setdummymore" @394
    368     "__setmore" @395
    369     "__sfnlwr" @396
    370     "__sleep2" @397
    371     "__splitargs" @398
    372     "__splitpath" @399
    373     "__status87" @400
    374     "__std_abort" @401
    375     "__std_abs" @402
    376     "__std_access" @403
    377     "__std_acos" @404
    378     "__std_acosl" @405
    379     "__std_asctime" @406
    380     "__std_asin" @407
    381     "__std_asinl" @408
    382     "__std_atan" @409
    383     "__std_atan2" @410
    384     "__std_atan2l" @411
    385     "__std_atanl" @412
    386     "__std_atexit" @413
    387     "__std_atof" @414
    388     "__std_atofl" @415
    389     "__std_atoi" @416
    390     "__std_atol" @417
    391     "__std_atoll" @418
    392     "__std_basename" @419
    393     "__std_bcmp" @420
    394     "__std_bcopy" @421
    395     "__std_brk" @422
    396     "__std_bsearch" @423
    397     "__std_bzero" @424
    398     "__std_calloc" @425
    399     "__std_cbrt" @426
    400     "__std_cbrtl" @427
    401     "__std_ceil" @428
    402     "__std_ceill" @429
    403     "__std_cfgetispeed" @430
    404     "__std_cfgetospeed" @431
    405     "__std_cfsetispeed" @432
    406     "__std_cfsetospeed" @433
    407     "__std_cfsetspeed" @434
    408     "__std_chdir" @435
    409     "__std_chdrive" @436
    410     "__std_chmod" @437
    411     "__std_chsize" @438
    412     "__std_clearerr" @439
    413     "__std_clock" @440
    414     "__std_close" @441
    415     "__std_closedir" @442
    416     "__std_copysign" @443
    417     "__std_copysignf" @444
    418     "__std_copysignl" @445
    419     "__std_cos" @446
    420     "__std_cosh" @447
    421     "__std_coshl" @448
    422     "__std_cosl" @449
    423     "__std_creat" @450
    424     "__std_ctime" @451
    425     "__std_cuserid" @452
    426     "__std_difftime" @453
    427     "__std_dirname" @454
    428     "__std_div" @455
    429     "__std_drand48" @456
    430     "__std_dup" @457
    431     "__std_dup2" @458
    432     "__std_endpwent" @459
    433     "__std_eof" @460
    434     "__std_erand48" @461
    435     "__std_execl" @462
    436     "__std_execle" @463
    437     "__std_execlp" @464
    438     "__std_execlpe" @465
    439     "__std_execv" @466
    440     "__std_execve" @467
    441     "__std_execvp" @468
    442     "__std_execvpe" @469
    443     "__std_exit" @470
    444     "__std_exp" @471
    445     "__std_expand" @472
    446     "__std_expl" @473
    447     "__std_fabs" @474
    448     "__std_fabsl" @475
    449     "__std_fclose" @476
    450     "__std_fcntl" @477
    451     "__std_fdopen" @478
    452     "__std_feof" @479
    453     "__std_ferror" @480
    454     "__std_fflush" @481
    455     "__std_ffs" @482
    456     "__std_fgetc" @483
    457     "__std_fgetchar" @484
    458     "__std_fgetpos" @485
    459     "__std_fgets" @486
    460     "__std_filelength" @487
    461     "__std_fileno" @488
    462     "__std_flock" @489
    463     "__std_floor" @490
    464     "__std_floorl" @491
    465     "__std_flushall" @492
    466     "__std_fmod" @493
    467     "__std_fmodl" @494
    468     "__std_fnmatch" @495
    469     "__std_fopen" @496
    470     "__std_fork" @497
    471     "__std_fpathconf" @498
    472     "__std_fprintf" @499
    473     "__std_fputc" @500
    474     "__std_fputchar" @501
    475     "__std_fputs" @502
    476     "__std_fread" @503
    477     "__std_free" @504
    478     "__std_freopen" @505
    479     "__std_frexp" @506
    480     "__std_frexpl" @507
    481     "__std_fscanf" @508
    482     "__std_fseek" @509
    483     "__std_fseeko" @510
    484     "__std_fsetpos" @511
    485     "__std_fstat" @512
    486     "__std_fsync" @513
    487     "__std_ftell" @514
    488     "__std_ftello" @515
    489     "__std_ftime" @516
    490     "__std_ftruncate" @517
    491     "__std_ftw" @518
    492     "__std_fwrite" @519
    493     "__std_gcvt" @520
    494     "__std_getchar" @521
    495     "__std_getcwd" @522
    496     "__std_getegid" @523
    497     "__std_getenv" @524
    498     "__std_geteuid" @525
    499     "__std_getgid" @526
    500     "__std_getgrgid" @527
    501     "__std_getgrnam" @528
    502     "__std_getgroups" @529
    503     "__std_getlogin" @530
    504     "__std_getopt" @531
    505     "__std_getpagesize" @532
    506     "__std_getpass" @533
    507     "__std_getpgrp" @534
    508     "__std_getpid" @535
    509     "__std_getppid" @536
    510     "__std_getpw" @537
    511     "__std_getpwent" @538
    512     "__std_getpwnam" @539
    513     "__std_getpwuid" @540
    514     "__std_gets" @541
    515     "__std_gettimeofday" @542
    516     "__std_getuid" @543
    517     "__std_getw" @544
    518     "__std_getwd" @545
    519     "__std_gmtime" @546
    520     "__std_hypot" @547
    521     "__std_hypotl" @548
    522     "__std_index" @549
    523     "__std_ioctl" @550
    524     "__std_isatty" @551
    525     "__std_jrand48" @552
    526     "__std_kill" @553
    527     "__std_labs" @554
    528     "__std_lcong48" @555
    529     "__std_ldexp" @556
    530     "__std_ldexpl" @557
    531     "__std_ldiv" @558
    532     "__std_lltoa" @559
    533     "__std_localeconv" @560
    534     "__std_localtime" @561
    535     "__std_lockf" @562
    536     "__std_log" @563
    537     "__std_log10" @564
    538     "__std_log10l" @565
    539     "__std_logl" @566
    540     "__std_longjmp" @567
    541     "__std_lrand48" @568
    542     "__std_lseek" @569
    543     "__std_lstat" @570
    544     "__std_ltoa" @571
    545     "__std_malloc" @572
    546     "__std_mblen" @573
    547     "__std_mbstowcs" @574
    548     "__std_mbtowc" @575
    549     "__std_memccpy" @576
    550     "__std_memchr" @577
    551     "__std_memcmp" @578
    552     "__std_memcpy" @579
    553     "__std_memicmp" @580
    554     "__std_memmove" @581
    555     "__std_memset" @582
    556     "__std_mkdir" @583
    557     "__std_mkstemp" @584
    558     "__std_mktemp" @585
    559     "__std_mktime" @586
    560     "__std_modf" @587
    561     "__std_modfl" @588
    562     "__std_mrand48" @589
    563     "__std_nextafter" @590
    564     "__std_nextafterf" @591
    565     "__std_nextafterl" @592
    566     "__std_nrand48" @593
    567     "__std_open" @594
    568     "__std_opendir" @595
    569     "__std_pathconf" @596
    570     "__std_pause" @597
    571     "__std_pclose" @598
    572     "__std_perror" @599
    573     "__std_pipe" @600
    574     "__std_popen" @601
    575     "__std_posix_memalign" @602
    576     "__std_pow" @603
    577     "__std_powl" @604
    578     "__std_printf" @605
    579     "__std_putchar" @606
    580     "__std_putenv" @607
    581     "__std_puts" @608
    582     "__std_putw" @609
    583     "__std_qsort" @610
    584     "__std_qsort_r" @611
    585     "__std_raise" @612
    586     "__std_rand" @613
    587     "__std_read" @614
    588     "__std_readdir" @615
    589     "__std_readdir_r" @616
    590     "__std_readv" @617
    591     "__std_realloc" @618
    592     "__std_remove" @619
    593     "__std_rename" @620
    594     "__std_rewind" @621
    595     "__std_rewinddir" @622
    596     "__std_rindex" @623
    597     "__std_rint" @624
    598     "__std_rintl" @625
    599     "__std_rmdir" @626
    600     "__std_sbrk" @627
    601     "__std_scanf" @628
    602     "__std_seed48" @629
    603     "__std_seekdir" @630
    604     "__std_select" @631
    605     "__std_setbuf" @632
    606     "__std_setbuffer" @633
    607     "__std_setenv" @634
    608     "__std_setgid" @635
    609     "__std_setjmp" @636
    610     "__std_setlocale" @637
    611     "__std_setmode" @638
    612     "__std_setpgid" @639
    613     "__std_setpwent" @640
    614     "__std_setsid" @641
    615     "__std_settimeofday" @642
    616     "__std_setuid" @643
    617     "__std_setvbuf" @644
    618     "__std_sigaction" @645
    619     "__std_sigaddset" @646
    620     "__std_sigdelset" @647
    621     "__std_sigemptyset" @648
    622     "__std_sigfillset" @649
    623     "__std_sigismember" @650
    624     "__std_siglongjmp" @651
    625     "__std_signal" @652
    626     "__std_sigpending" @653
    627     "__std_sigprocmask" @654
    628     "__std_sigsetjmp" @655
    629     "__std_sigsuspend" @656
    630     "__std_sin" @657
    631     "__std_sinh" @658
    632     "__std_sinhl" @659
    633     "__std_sinl" @660
    634     "__std_sleep" @661
    635     "__std_snprintf" @662
    636     "__std_sopen" @663
    637     "__std_spawnl" @664
    638     "__std_spawnle" @665
    639     "__std_spawnlp" @666
    640     "__std_spawnlpe" @667
    641     "__std_spawnv" @668
    642     "__std_spawnve" @669
    643     "__std_spawnvp" @670
    644     "__std_spawnvpe" @671
    645     "__std_sprintf" @672
    646     "__std_sqrt" @673
    647     "__std_sqrtl" @674
    648     "__std_srand" @675
    649     "__std_srand48" @676
    650     "__std_sscanf" @677
    651     "__std_stat" @678
    652     "__std_strcat" @679
    653     "__std_strchr" @680
    654     "__std_strcmp" @681
    655     "__std_strcoll" @682
    656     "__std_strcpy" @683
    657     "__std_strcspn" @684
    658     "__std_strdup" @685
    659     "__std_strerror" @686
    660     "__std_strftime" @687
    661     "__std_stricmp" @688
    662     "__std_strlen" @689
    663     "__std_strlwr" @690
    664     "__std_strncat" @691
    665     "__std_strncmp" @692
    666     "__std_strncpy" @693
    667     "__std_strnicmp" @694
    668     "__std_strnset" @695
    669     "__std_strpbrk" @696
    670     "__std_strptime" @697
    671     "__std_strrchr" @698
    672     "__std_strrev" @699
    673     "__std_strset" @700
    674     "__std_strspn" @701
    675     "__std_strstr" @702
    676     "__std_strtod" @703
    677     "__std_strtof" @704
    678     "__std_strtok" @705
    679     "__std_strtol" @706
    680     "__std_strtold" @707
    681     "__std_strtoll" @708
    682     "__std_strtoul" @709
    683     "__std_strtoull" @710
    684     "__std_strupr" @711
    685     "__std_strxfrm" @712
    686     "__std_swab" @713
    687     "__std_sys_errlist" @714
    688     "__std_sys_nerr" @715
    689     "__std_sysconf" @716
    690     "__std_system" @717
    691     "__std_tan" @718
    692     "__std_tanh" @719
    693     "__std_tanhl" @720
    694     "__std_tanl" @721
    695     "__std_tcdrain" @722
    696     "__std_tcflow" @723
    697     "__std_tcflush" @724
    698     "__std_tcgetattr" @725
    699     "__std_tcgetpgrp" @726
    700     "__std_tcsendbreak" @727
    701     "__std_tcsetattr" @728
    702     "__std_tcsetpgrp" @729
    703     "__std_tell" @730
    704     "__std_telldir" @731
    705     "__std_tempnam" @732
    706     "__std_time" @733
    707     "__std_times" @734
    708     "__std_tmpfile" @735
    709     "__std_tmpnam" @736
    710     "__std_trunc" @737
    711     "__std_truncate" @738
    712     "__std_truncl" @739
    713     "__std_ttyname" @740
    714     "__std_tzset" @741
    715     "__std_ulimit" @742
    716     "__std_ulltoa" @743
    717     "__std_ultoa" @744
    718     "__std_umask" @745
    719     "__std_uname" @746
    720     "__std_ungetc" @747
    721     "__std_unlink" @748
    722     "__std_unsetenv" @749
    723     "__std_utime" @750
    724     "__std_utimes" @751
    725     "__std_vfprintf" @752
    726     "__std_vfscanf" @753
    727     "__std_vprintf" @754
    728     "__std_vscanf" @755
    729     "__std_vsnprintf" @756
    730     "__std_vsprintf" @757
    731     "__std_vsscanf" @758
    732     "__std_wait" @759
    733     "__std_waitpid" @760
    734     "__std_wcstombs" @761
    735     "__std_wctomb" @762
    736     "__std_write" @763
    737     "__std_writev" @764
    738     "__stream_read" @765
    739     "__stream_write" @766
    740     "__strncpy" @767
    741     "__swchar" @768
    742     "__sys_dump_heap_objs" @769
    743     "_sys_exception" @770
    744     "__tcalloc" @771
    745     "__tfree" @772
    746     "__theapmin" @773
    747 ; fixme    "__thread" @774
    748     "__threadstore" @775
    749     "__tmalloc" @776
    750     "__tmpbuf1" @777
    751     "__tmpidx_lock" @778
    752     "__tmpidx_unlock" @779
    753     "__tmpidxnam" @780
    754     "__trealloc" @781
    755     "__trslash" @782
    756     "__uaddmem" @783
    757     "__ucalloc" @784
    758     "__uclose" @785
    759     "__ucreate" @786
    760     "__ucreate2" @787
    761     "__udefault" @788
    762     "__udestroy" @789
    763     "__uflags" @790
    764     "__uheap_type" @791
    765     "__uheap_walk" @792
    766     "__uheap_walk2" @793
    767     "__uheapchk" @794
    768     "__uheapmin" @795
    769     "__uheapset" @796
    770     "__uldiv" @797
    771     "__um_addmem_nolock" @798
    772     "__um_alloc_no_lock" @799
    773     "__um_crumb_free_maybe_lock" @800
    774     "__um_default_alloc" @801
    775     "__um_default_expand" @802
    776     "__um_default_release" @803
    777     "__um_default_shrink" @804
    778     "__um_find_bucket" @805
    779     "__um_free_maybe_lock" @806
    780     "__um_init_default_regular_heap" @807
    781     "__um_init_default_tiled_heap" @808
    782     "__um_lump_alloc" @809
    783     "__um_lump_coalesce_free" @810
    784     "__um_lump_free_maybe_lock" @811
    785     "__um_lump_link_heap" @812
    786     "__um_lump_make_free" @813
    787     "__um_lump_unlink_bucket" @814
    788     "__um_lump_unlink_heap" @815
    789     "__um_realloc" @816
    790     "__um_seg_addmem" @817
    791     "__um_seg_setmem" @818
    792     "__um_walk_error" @819
    793     "__um_walk_no_lock" @820
    794     "__umalloc" @821
    795     "__ungetc_nolock" @822
    796     "__uopen" @823
    797     "__ustats" @824
    798     "__utcalloc" @825
    799     "__utdefault" @826
    800     "__utmalloc" @827
    801     "__vsopen" @828
    802     "__wildcard" @829
    803     "__year_day" @830
    804     "_heapsort" @831
    805     "_initstate" @832
    806     "_isalnum" @833
    807     "_isalpha" @834
    808     "_isascii" @835
    809     "_iscntrl" @836
    810     "_isdigit" @837
    811     "_isgraph" @838
    812     "_islower" @839
    813     "_isprint" @840
    814     "_ispunct" @841
    815     "_isspace" @842
    816     "_isupper" @843
    817     "_isxdigit" @844
    818     "_lchmod" @845
    819     "_mergesort" @846
    820     "_radixsort" @847
    821     "_random" @848
    822     "_setstate" @849
    823     "_sig_info" @850
    824     "_sradixsort" @851
    825     "_srandom" @852
    826     "_srandomdev" @853
    827     "_stpcpy" @854
    828     "_strcasestr" @855
    829     "_strlcat" @856
    830     "_strlcpy" @857
    831     "_strnstr" @858
    832     "_strsep" @859
    833     "_toascii" @860
    834     "_tolower" @861
    835     "__std_asctime_r" @862
    836     "__std_ctime_r" @863
    837     "__std_strerror_r" @864
    838     "__err" @865
    839     "_errc" @866
    840     "_err_set_exit" @867
    841     "_err_set_file" @868
    842     "_errx" @869
    843     "__emx_getopt" @870
    844     "_getopt_long" @871
    845     "__getprogname" @872
    846     "_setprogname" @873
    847     "_verr" @874
    848     "_verrc" @875
    849     "_verrx" @876
    850     "_vwarn" @877
    851     "_vwarnc" @878
    852     "_vwarnx" @879
    853     "__warn" @880
    854     "_warnc" @881
    855     "_warnx" @882
    856     "__std_imaxabs" @883
    857     "__std_imaxdiv" @884
    858     "__std_strtoimax" @885
    859     "__std_strtoumax" @886
    860     "__std_hcreate" @887
    861     "__std_hdestroy" @888
    862     "__std_hsearch" @889
    863     "__std_insque" @890
    864     "__std_lfind" @891
    865     "__std_lsearch" @892
    866     "__std_remque" @893
    867     "__std_tdelete" @894
    868     "__std_tfind" @895
    869     "__std_tsearch" @896
    870     "__std_twalk" @897
    871     "___addel" @898
    872     "___add_ovflpage" @899
    873     "___big_delete" @900
    874     "___big_insert" @901
    875     "___big_keydata" @902
    876     "___big_return" @903
    877     "___big_split" @904
    878     "___buf_free" @905
    879     "___buf_init" @906
    880     "___call_hash" @907
    881     "_dbm_clearerr" @908
    882     "_dbm_close" @909
    883     "_dbm_delete" @910
    884     "_dbm_dirfno" @911
    885     "_dbm_error" @912
    886     "_dbm_fetch" @913
    887     "_dbm_firstkey" @914
    888     "_dbm_nextkey" @915
    889     "_dbm_open" @916
    890     "_dbm_store" @917
    891     "___split_page" @918
    892     "___delpair" @919
    893     "___expand_table" @920
    894     "___find_bigpair" @921
    895     "___find_last_page" @922
    896     "___free_ovflpage" @923
    897     "___get_buf" @924
    898     "___get_page" @925
    899     "___hash_open" @926
    900     "___ibitmap" @927
    901     "___log2" @928
    902     "___put_page" @929
    903     "___reclaim_buf" @930
    904     "_reallocf" @931
    905     "___bt_close" @932
    906     "___bt_cmp" @933
    907     "___bt_defcmp" @934
    908     "___bt_defpfx" @935
    909     "___bt_delete" @936
    910     "___bt_dleaf" @937
    911     "___bt_dmpage" @938
    912     "___bt_dnpage" @939
    913     "___bt_dpage" @940
    914     "___bt_dump" @941
    915     "___bt_fd" @942
    916     "___bt_free" @943
    917     "___bt_get" @944
    918     "___bt_new" @945
    919     "___bt_open" @946
    920     "___bt_pgin" @947
    921     "___bt_pgout" @948
    922     "___bt_put" @949
    923     "___bt_ret" @950
    924     "___bt_search" @951
    925     "___bt_seq" @952
    926     "___bt_setcur" @953
    927     "___bt_split" @954
    928     "___bt_sync" @955
    929     "___ovfl_delete" @956
    930     "___ovfl_get" @957
    931     "___ovfl_put" @958
    932     "_mpool_close" @959
    933     "_mpool_filter" @960
    934     "_mpool_get" @961
    935     "_mpool_new" @962
    936     "_mpool_open" @963
    937     "_mpool_put" @964
    938     "_mpool_sync" @965
    939     "___rec_close" @966
    940     "___rec_delete" @967
    941     "___rec_dleaf" @968
    942     "___rec_fd" @969
    943     "___rec_fmap" @970
    944     "___rec_fpipe" @971
    945     "___rec_get" @972
    946     "___rec_iput" @973
    947     "___rec_open" @974
    948     "___rec_put" @975
    949     "___rec_ret" @976
    950     "___rec_search" @977
    951     "___rec_seq" @978
    952     "___rec_sync" @979
    953     "___rec_vmap" @980
    954     "___rec_vpipe" @981
    955     "_dbopen" @982
    956     "___dbpanic" @983
    957     "_regcomp" @984
    958     "_regerror" @985
    959     "_regexec" @986
    960     "_regfree" @987
    961     "_isblank" @988
    962     "_ishexnumber" @989
    963     "_isnumber" @990
    964     "___istype" @991
    965     "___tolower" @992
    966     "___toupper" @993
    967     "___locale_C" @994
    968     "___mempcpy" @995
    969     "_posix_spawn" @996
    970     "_posix_spawnattr_destroy" @997
    971     "_posix_spawnattr_getflags" @998
    972     "_posix_spawnattr_getpgroup" @999
    973     "_posix_spawnattr_getschedparam" @1000
    974     "_posix_spawnattr_getschedpolicy" @1001
    975     "_posix_spawnattr_getsigdefault" @1002
    976     "_posix_spawnattr_getsigmask" @1003
    977     "_posix_spawnattr_init" @1004
    978     "_posix_spawnattr_setflags" @1005
    979     "_posix_spawnattr_setpgroup" @1006
    980     "_posix_spawnattr_setschedparam" @1007
    981     "_posix_spawnattr_setschedpolicy" @1008
    982     "_posix_spawnattr_setsigdefault" @1009
    983     "_posix_spawnattr_setsigmask" @1010
    984     "_posix_spawn_file_actions_addclose" @1011
    985     "_posix_spawn_file_actions_adddup2" @1012
    986     "_posix_spawn_file_actions_addopen" @1013
    987     "_posix_spawn_file_actions_destroy" @1014
    988     "_posix_spawn_file_actions_init" @1015
    989     "_posix_spawnp" @1016
    990     "___posix_spawn_file_actions_realloc" @1017
    991     "___spawni" @1018
    992     "_strsignal" @1019
    993     "___error" @1020
    994     "___error_at_line" @1021
    995     "_sys_nsig" @1022
    996     "_sys_siglist" @1023
    997     "_sys_signame" @1024
    998     "__std_realpath" @1025
    999     "___argz_add" @1026
    1000     "___argz_add_sep" @1027
    1001     "___argz_append" @1028
    1002     "___argz_count" @1029
    1003     "___argz_create" @1030
    1004     "___argz_create_sep" @1031
    1005     "_argz_delete" @1032
    1006     "___argz_extract" @1033
    1007     "___argz_insert" @1034
    1008     "___argz_next" @1035
    1009     "___argz_replace" @1036
    1010     "___argz_stringify" @1037
    1011     "___strndup" @1038
    1012     "___strnlen" @1039
    1013     "___libc_LogEnter" @1040
    1014     "___libc_LogLeave" @1041
    1015     "___libc_LogMsg" @1042
     74; GCC322 code and const (starts at 100)
     75    "__Unwind_DeleteException" @100
     76    "__Unwind_Find_FDE" @101
     77    "__Unwind_ForcedUnwind" @102
     78    "__Unwind_GetDataRelBase" @103
     79    "__Unwind_GetGR" @104
     80    "__Unwind_GetIP" @105
     81    "__Unwind_GetLanguageSpecificData" @106
     82    "__Unwind_GetRegionStart" @107
     83    "__Unwind_GetTextRelBase" @108
     84    "__Unwind_RaiseException" @109
     85    "__Unwind_Resume" @110
     86    "__Unwind_SetGR" @111
     87    "__Unwind_SetIP" @112
     88    "___absvdi2" @113
     89    "___absvsi2" @114
     90    "___addvdi3" @115
     91    "___addvsi3" @116
     92    "___ashldi3" @117
     93    "___ashrdi3" @118
     94    "___clear_cache" @119
     95    "___clz_tab" @120
     96    "___cmpdi2" @121
     97    "___deregister_frame" @122
     98    "___deregister_frame_info" @123
     99    "___deregister_frame_info_bases" @124
     100    "___divdi3" @125
     101    "___ffsdi2" @126
     102    "___fixdfdi" @127
     103    "___fixsfdi" @128
     104    "___fixunsdfdi" @129
     105    "___fixunsdfsi" @130
     106    "___fixunssfdi" @131
     107    "___fixunssfsi" @132
     108    "___fixunsxfdi" @133
     109    "___fixunsxfsi" @134
     110    "___fixxfdi" @135
     111    "___floatdidf" @136
     112    "___floatdisf" @137
     113    "___floatdixf" @138
     114    "___frame_state_for" @139
     115    "___lshrdi3" @140
     116    "___moddi3" @141
     117    "___muldi3" @142
     118    "___mulvdi3" @143
     119    "___mulvsi3" @144
     120    "___negdi2" @145
     121    "___negvdi2" @146
     122    "___negvsi2" @147
     123    "___register_frame" @148
     124    "___register_frame_info" @149
     125    "___register_frame_info_bases" @150
     126    "___register_frame_info_table" @151
     127    "___register_frame_info_table_bases" @152
     128    "___register_frame_table" @153
     129    "___subvdi3" @154
     130    "___subvsi3" @155
     131    "___ucmpdi2" @156
     132    "___udiv_w_sdiv" @157
     133    "___udivdi3" @158
     134    "___udivmoddi4" @159
     135    "___umoddi3" @160
     136    "__alloca" @161
    1016137
    1017     ; Same as gcc322.dll
    1018     "__Unwind_DeleteException" @1043
    1019     "__Unwind_Find_FDE" @1044
    1020     "__Unwind_ForcedUnwind" @1045
    1021     "__Unwind_GetDataRelBase" @1046
    1022     "__Unwind_GetGR" @1047
    1023     "__Unwind_GetIP" @1048
    1024     "__Unwind_GetLanguageSpecificData" @1049
    1025     "__Unwind_GetRegionStart" @1050
    1026     "__Unwind_GetTextRelBase" @1051
    1027     "__Unwind_RaiseException" @1052
    1028     "__Unwind_Resume" @1053
    1029     "__Unwind_SetGR" @1054
    1030     "__Unwind_SetIP" @1055
    1031     "___absvdi2" @1056
    1032     "___absvsi2" @1057
    1033     "___addvdi3" @1058
    1034     "___addvsi3" @1059
    1035     "___ashldi3" @1060
    1036     "___ashrdi3" @1061
    1037     "___clear_cache"                            @1062
    1038     "___clz_tab"                                @1063
    1039     "___cmpdi2"                                 @1064
    1040     "___deregister_frame"                       @1065
    1041     "___deregister_frame_info"                  @1066
    1042     "___deregister_frame_info_bases"            @1067
    1043     "___divdi3"                                 @1068
    1044     "___ffsdi2"                                 @1069
    1045     "___fixdfdi"                                @1070
    1046     "___fixsfdi"                                @1071
    1047     "___fixunsdfdi"                             @1072
    1048     "___fixunsdfsi"                             @1073
    1049     "___fixunssfdi"                             @1074
    1050     "___fixunssfsi"                             @1075
    1051     "___fixunsxfdi"                             @1076
    1052     "___fixunsxfsi"                             @1077
    1053     "___fixxfdi"                                @1078
    1054     "___floatdidf"                              @1079
    1055     "___floatdisf"                              @1080
    1056     "___floatdixf"                              @1081
    1057     "___frame_state_for"                        @1082
    1058     "___lshrdi3"                                @1083
    1059     "___moddi3"                                 @1084
    1060     "___muldi3"                                 @1085
    1061     "___mulvdi3"                                @1086
    1062     "___mulvsi3"                                @1087
    1063     "___negdi2"                                 @1088
    1064     "___negvdi2"                                @1089
    1065     "___negvsi2"                                @1090
    1066     "___register_frame"                         @1091
    1067     "___register_frame_info"                    @1092
    1068     "___register_frame_info_bases"              @1093
    1069     "___register_frame_info_table"              @1094
    1070     "___register_frame_info_table_bases"        @1095
    1071     "___register_frame_table"                   @1096
    1072     "___subvdi3"                                @1097
    1073     "___subvsi3"                                @1098
    1074     "___ucmpdi2"                                @1099
    1075     "___udiv_w_sdiv"                            @1100
    1076     "___udivdi3"                                @1101
    1077     "___udivmoddi4"                             @1102
    1078     "___umoddi3"                                @1103
    1079     "__alloca"                                  @1104
    1080     "__std_usleep" @1105
     138; LIBC code - and const
     139    "__CRT_init" @162
     140    "__CRT_term" @163
     141    "__HUGE_VAL" @164
     142    "__LHUGE_VAL" @165
     143    "___add_ovflpage" @166
     144    "___addel" @167
     145    "___argz_add" @168
     146    "___argz_add_sep" @169
     147    "___argz_append" @170
     148    "___argz_count" @171
     149    "___argz_create" @172
     150    "___argz_create_sep" @173
     151    "___argz_extract" @174
     152    "___argz_insert" @175
     153    "___argz_next" @176
     154    "___argz_replace" @177
     155    "___argz_stringify" @178
     156    "___atod" @179
     157    "___big_delete" @180
     158    "___big_insert" @181
     159    "___big_keydata" @182
     160    "___big_return" @183
     161    "___big_split" @184
     162    "___bt_close" @185
     163    "___bt_cmp" @186
     164    "___bt_defcmp" @187
     165    "___bt_defpfx" @188
     166    "___bt_delete" @189
     167    "___bt_dleaf" @190
     168    "___bt_dmpage" @191
     169    "___bt_dnpage" @192
     170    "___bt_dpage" @193
     171    "___bt_dump" @194
     172    "___bt_fd" @195
     173    "___bt_free" @196
     174    "___bt_get" @197
     175    "___bt_new" @198
     176    "___bt_open" @199
     177    "___bt_pgin" @200
     178    "___bt_pgout" @201
     179    "___bt_put" @202
     180    "___bt_ret" @203
     181    "___bt_search" @204
     182    "___bt_seq" @205
     183    "___bt_setcur" @206
     184    "___bt_split" @207
     185    "___bt_sync" @208
     186    "___buf_free" @209
     187    "___buf_init" @210
     188    "___call_hash" @211
     189    "___chdir" @212
     190    "___chmod" @213
     191    "___chsize" @214
     192    "___close" @215
     193    "___collate_range_cmp" @216
     194    "___convert_codepage" @217
     195    "___ctordtorInit1" @218
     196    "___ctordtorTerm1" @219
     197    "___dbpanic" @220
     198    "___delpair" @221
     199    "___do_Unicode" @222
     200    "___dtoa" @223
     201    "___dup" @224
     202    "___dup2" @225
     203    "___error" @226
     204    "___error_at_line" @227
     205    "___exit" @228
     206    "___expand_table" @229
     207    "___fcntl" @230
     208    "___find_bigpair" @231
     209    "___find_last_page" @232
     210    "___findfirst" @233
     211    "___findnext" @234
     212    "___fmutex_release_internal" @235
     213    "___fmutex_request_internal" @236
     214    "___fork" @237
     215    "___fpclassify" @238
     216    "___fpclassifyf" @239
     217    "___fpclassifyl" @240
     218    "___free_ovflpage" @241
     219    "___from_ucs" @242
     220    "___fstat" @243
     221    "___ftime" @244
     222    "___ftruncate" @245
     223    "___get_buf" @246
     224    "___get_page" @247
     225    "___getcwd" @248
     226    "___gnu_basename" @249
     227    "___hash_open" @250
     228    "___ibitmap" @251
     229    "___imphandle" @252
     230    "___init" @253
     231    "___init_app" @254
     232    "___init_dll" @255
     233    "___ioctl1" @256
     234    "___ioctl2" @257
     235    "___isfinite" @258
     236    "___isfinitef" @259
     237    "___isfinitel" @260
     238    "___isnan" @261
     239    "___isnanf" @262
     240    "___isnanl" @263
     241    "___isnormal" @264
     242    "___isnormalf" @265
     243    "___isnormall" @266
     244    "___istype" @267
     245    "___libc_Back_threadCleanup" @268
     246    "___libc_Back_threadEnd" @269
     247    "___libc_Back_threadInit" @270
     248    "___libc_Back_threadStartup" @271
     249    "___libc_FH" @272
     250    "___libc_FHAllocate" @273
     251    "___libc_FHClose" @274
     252    "___libc_FHEnsureHandles" @275
     253    "___libc_HasHighMem" @276
     254    "___libc_HeapEndVoting" @277
     255    "___libc_HeapGetResult" @278
     256    "___libc_HeapVote" @279
     257    "___libc_HimemDefaultAlloc" @280
     258    "___libc_HimemDefaultRelease" @281
     259    "___libc_LogAssert" @282
     260    "___libc_LogEnter" @283
     261    "___libc_LogGroupInit" @284
     262    "___libc_LogInit" @285
     263    "___libc_LogLeave" @286
     264    "___libc_LogMsg" @287
     265    "___libc_LogRaw" @288
     266    "___libc_StrictMemoryR" @289
     267    "___libc_StrictMemoryRW" @290
     268    "___libc_StrictStringR" @291
     269    "___libc_TLSAlloc" @292
     270    "___libc_TLSFree" @293
     271    "___libc_TLSGet" @294
     272    "___libc_TLSSet" @295
     273    "___locale_C" @296
     274    "___log2" @297
     275    "___lseek" @298
     276    "___mempcpy" @299
     277    "___mkdir" @300
     278    "___open" @301
     279    "___ovfl_delete" @302
     280    "___ovfl_get" @303
     281    "___ovfl_put" @304
     282    "___pipe" @305
     283    "___posix_spawn_file_actions_realloc" @306
     284    "___put_page" @307
     285    "___read" @308
     286    "___read_kbd" @309
     287    "___rec_close" @310
     288    "___rec_delete" @311
     289    "___rec_dleaf" @312
     290    "___rec_fd" @313
     291    "___rec_fmap" @314
     292    "___rec_fpipe" @315
     293    "___rec_get" @316
     294    "___rec_iput" @317
     295    "___rec_open" @318
     296    "___rec_put" @319
     297    "___rec_ret" @320
     298    "___rec_search" @321
     299    "___rec_seq" @322
     300    "___rec_sync" @323
     301    "___rec_vmap" @324
     302    "___rec_vpipe" @325
     303    "___reclaim_buf" @326
     304    "___remove_zeros" @327
     305    "___rmdir" @328
     306    "___select" @329
     307    "___settime" @330
     308    "___signbit" @331
     309    "___signbitf" @332
     310    "___signbitl" @333
     311    "___small_atod" @334
     312    "___small_dtoa" @335
     313    "___smutex_request_internal" @336
     314    "___spawni" @337
     315    "___spawnve" @338
     316    "___split_page" @339
     317    "___stat" @340
     318    "___strndup" @341
     319    "___strnlen" @342
     320    "___swchar" @343
     321    "___threadid" @344
     322    "___to_ucs" @345
     323    "___tolower" @346
     324    "___toupper" @347
     325    "___ttyname" @348
     326    "___ulimit" @349
     327    "___unwind2" @350
     328    "___utimes" @351
     329    "___wait" @352
     330    "___waitpid" @353
     331    "___write" @354
     332    "__abspath" @355
     333    "__assert" @356
     334    "__beginthread" @357
     335    "__bi_add_bb" @358
     336    "__bi_cmp_bb" @359
     337    "__bi_cmp_pow2" @360
     338    "__bi_div_add_back" @361
     339    "__bi_div_estimate" @362
     340    "__bi_div_rem_bb" @363
     341    "__bi_div_rem_bw" @364
     342    "__bi_div_rem_pow2" @365
     343    "__bi_div_subtract" @366
     344    "__bi_fls" @367
     345    "__bi_hdiv_rem_b" @368
     346    "__bi_mul_bb" @369
     347    "__bi_mul_bw" @370
     348    "__bi_pow5" @371
     349    "__bi_set_b" @372
     350    "__bi_set_d" @373
     351    "__bi_set_w" @374
     352    "__bi_shl_b" @375
     353    "__bi_shl_w" @376
     354    "__bi_shr_b" @377
     355    "__bi_sub_mul_bw" @378
     356    "__bi_wdiv_rem_pow2" @379
     357    "__chdir2" @380
     358    "__clear87" @381
     359    "__closestream" @382
     360    "__compute_dst_table" @383
     361    "__const_HALF" @384
     362    "__const_M_ONE" @385
     363    "__const_NAN" @386
     364    "__const_ONE" @387
     365    "__const_TWO" @388
     366    "__const_ZERO" @389
     367    "__control87" @390
     368    "__core" @391
     369    "__crlf" @392
     370    "__day" @393
     371    "__defext" @394
     372    "__dorand48" @395
     373    "__dt_free" @396
     374    "__dt_read" @397
     375    "__dt_sort" @398
     376    "__dt_split" @399
     377    "__ea_free" @400
     378    "__ea_get" @401
     379    "__ea_put" @402
     380    "__ea_remove" @403
     381    "__ea_set_errno" @404
     382    "__ea_write" @405
     383    "__ead_add" @406
     384    "__ead_clear" @407
     385    "__ead_copy" @408
     386    "__ead_count" @409
     387    "__ead_create" @410
     388    "__ead_delete" @411
     389    "__ead_destroy" @412
     390    "__ead_enum" @413
     391    "__ead_fea2list_size" @414
     392    "__ead_fea2list_to_fealist" @415
     393    "__ead_fealist_to_fea2list" @416
     394    "__ead_find" @417
     395    "__ead_get_fea2list" @418
     396    "__ead_get_flags" @419
     397    "__ead_get_name" @420
     398    "__ead_get_value" @421
     399    "__ead_make_index" @422
     400    "__ead_name_len" @423
     401    "__ead_read" @424
     402    "__ead_replace" @425
     403    "__ead_size_buffer" @426
     404    "__ead_sort" @427
     405    "__ead_use_fea2list" @428
     406    "__ead_value_size" @429
     407    "__ead_write" @430
     408    "__emx_getopt" @431
     409    "__emxload_connect" @432
     410    "__emxload_disconnect" @433
     411    "__emxload_do_connect" @434
     412    "__emxload_do_disconnect" @435
     413    "__emxload_do_receive" @436
     414    "__emxload_do_request" @437
     415    "__emxload_do_wait" @438
     416    "__emxload_env" @439
     417    "__emxload_list_get" @440
     418    "__emxload_list_start" @441
     419    "__emxload_prog" @442
     420    "__emxload_request" @443
     421    "__emxload_stop" @444
     422    "__emxload_this" @445
     423    "__emxload_unload" @446
     424    "__endbuf1" @447
     425    "__endthread" @448
     426    "__envargs" @449
     427    "__err" @450
     428    "__errno" @451
     429    "__errno_fun" @452
     430    "__execname" @453
     431    "__exit" @454
     432    "__exit_streams" @455
     433    "__fassign" @456
     434    "__fbuf" @457
     435    "__fcloseall" @458
     436    "__fflush_nolock" @459
     437    "__filesys" @460
     438    "__fill" @461
     439    "__flush" @462
     440    "__flushstream" @463
     441    "__fmutex_checked_close" @464
     442    "__fmutex_checked_create" @465
     443    "__fmutex_checked_open" @466
     444    "__fmutex_close" @467
     445    "__fmutex_create" @468
     446    "__fmutex_dummy" @469
     447    "__fmutex_open" @470
     448    "__fnexplode" @471
     449    "__fnexplodefree" @472
     450    "__fngetdrive" @473
     451    "__fnisabs" @474
     452    "__fnisrel" @475
     453    "__fnlwr" @476
     454    "__fnlwr2" @477
     455    "__fnslashify" @478
     456    "__fpreset" @479
     457    "__fseek_hdr" @480
     458    "__fseek_nolock" @481
     459    "__fsetmode" @482
     460    "__fsopen" @483
     461    "__ftell_nolock" @484
     462    "__fullpath" @485
     463    "__fwrite_nolock" @486
     464    "__fxam" @487
     465    "__fxaml" @488
     466    "__getcwd1" @489
     467    "__getcwd2" @490
     468    "__getdrive" @491
     469    "__getext" @492
     470    "__getext2" @493
     471    "__getname" @494
     472    "__getpass1" @495
     473    "__getpass2" @496
     474    "__getprogname" @497
     475    "__gettid" @498
     476    "__getvol" @499
     477    "__gmt2loc" @500
     478    "__hcalloc" @501
     479    "__heap_walk" @502
     480    "__heapchk" @503
     481    "__heapmin" @504
     482    "__heapset" @505
     483    "__hinitheap" @506
     484    "__hmalloc" @507
     485    "__hrealloc" @508
     486    "__imphandle" @509
     487    "__init1_tmp" @510
     488    "__init_streams" @511
     489    "__input" @512
     490    "__int86" @513
     491    "__isterm" @514
     492    "__lcalloc" @515
     493    "__libc_16to32" @516
     494    "__libc_32to16" @517
     495    "__libc_thunk1" @518
     496    "__linitheap" @519
     497    "__lmalloc" @520
     498    "__loc2gmt" @521
     499    "__lrealloc" @522
     500    "__makepath" @523
     501    "__memcount" @524
     502    "__memdif" @525
     503    "__memrchr" @526
     504    "__memswap" @527
     505    "__mfclose" @528
     506    "__mfopen" @529
     507    "__mheap" @530
     508    "__mktime" @531
     509    "__month_day_leap" @532
     510    "__month_day_non_leap" @533
     511    "__msize" @534
     512    "__newstream" @535
     513    "__openstream" @536
     514    "__os2_bad" @537
     515    "__output" @538
     516    "__path" @539
     517    "__read_kbd" @540
     518    "__remext" @541
     519    "__response" @542
     520    "__rfnlwr" @543
     521    "__rmtmp" @544
     522    "__rmutex_checked_close" @545
     523    "__rmutex_checked_create" @546
     524    "__rmutex_checked_open" @547
     525    "__rmutex_close" @548
     526    "__rmutex_create" @549
     527    "__rmutex_dummy" @550
     528    "__rmutex_fork" @551
     529    "__rmutex_open" @552
     530    "__scrsize" @553
     531    "__searchenv" @554
     532    "__seek_hdr" @555
     533    "__setdummymore" @556
     534    "__setmore" @557
     535    "__sfnlwr" @558
     536    "__sleep2" @559
     537    "__splitargs" @560
     538    "__splitpath" @561
     539    "__status87" @562
     540    "__std_abort" @563
     541    "__std_abs" @564
     542    "__std_access" @565
     543    "__std_acos" @566
     544    "__std_acosl" @567
     545    "__std_asctime" @568
     546    "__std_asctime_r" @569
     547    "__std_asin" @570
     548    "__std_asinl" @571
     549    "__std_atan" @572
     550    "__std_atan2" @573
     551    "__std_atan2l" @574
     552    "__std_atanl" @575
     553    "__std_atexit" @576
     554    "__std_atof" @577
     555    "__std_atofl" @578
     556    "__std_atoi" @579
     557    "__std_atol" @580
     558    "__std_atoll" @581
     559    "__std_basename" @582
     560    "__std_bcmp" @583
     561    "__std_bcopy" @584
     562    "__std_brk" @585
     563    "__std_bsearch" @586
     564    "__std_bzero" @587
     565    "__std_calloc" @588
     566    "__std_cbrt" @589
     567    "__std_cbrtl" @590
     568    "__std_ceil" @591
     569    "__std_ceill" @592
     570    "__std_cfgetispeed" @593
     571    "__std_cfgetospeed" @594
     572    "__std_cfsetispeed" @595
     573    "__std_cfsetospeed" @596
     574    "__std_cfsetspeed" @597
     575    "__std_chdir" @598
     576    "__std_chdrive" @599
     577    "__std_chmod" @600
     578    "__std_chsize" @601
     579    "__std_clearerr" @602
     580    "__std_clock" @603
     581    "__std_close" @604
     582    "__std_closedir" @605
     583    "__std_copysign" @606
     584    "__std_copysignf" @607
     585    "__std_copysignl" @608
     586    "__std_cos" @609
     587    "__std_cosh" @610
     588    "__std_coshl" @611
     589    "__std_cosl" @612
     590    "__std_creat" @613
     591    "__std_ctime" @614
     592    "__std_ctime_r" @615
     593    "__std_cuserid" @616
     594    "__std_difftime" @617
     595    "__std_dirname" @618
     596    "__std_div" @619
     597    "__std_drand48" @620
     598    "__std_dup" @621
     599    "__std_dup2" @622
     600    "__std_endpwent" @623
     601    "__std_eof" @624
     602    "__std_erand48" @625
     603    "__std_execl" @626
     604    "__std_execle" @627
     605    "__std_execlp" @628
     606    "__std_execlpe" @629
     607    "__std_execv" @630
     608    "__std_execve" @631
     609    "__std_execvp" @632
     610    "__std_execvpe" @633
     611    "__std_exit" @634
     612    "__std_exp" @635
     613    "__std_expand" @636
     614    "__std_expl" @637
     615    "__std_fabs" @638
     616    "__std_fabsl" @639
     617    "__std_fclose" @640
     618    "__std_fcntl" @641
     619    "__std_fdopen" @642
     620    "__std_feof" @643
     621    "__std_ferror" @644
     622    "__std_fflush" @645
     623    "__std_ffs" @646
     624    "__std_fgetc" @647
     625    "__std_fgetchar" @648
     626    "__std_fgetpos" @649
     627    "__std_fgets" @650
     628    "__std_filelength" @651
     629    "__std_fileno" @652
     630    "__std_flock" @653
     631    "__std_floor" @654
     632    "__std_floorl" @655
     633    "__std_flushall" @656
     634    "__std_fmod" @657
     635    "__std_fmodl" @658
     636    "__std_fnmatch" @659
     637    "__std_fopen" @660
     638    "__std_fork" @661
     639    "__std_fpathconf" @662
     640    "__std_fprintf" @663
     641    "__std_fputc" @664
     642    "__std_fputchar" @665
     643    "__std_fputs" @666
     644    "__std_fread" @667
     645    "__std_free" @668
     646    "__std_freopen" @669
     647    "__std_frexp" @670
     648    "__std_frexpl" @671
     649    "__std_fscanf" @672
     650    "__std_fseek" @673
     651    "__std_fseeko" @674
     652    "__std_fsetpos" @675
     653    "__std_fstat" @676
     654    "__std_fsync" @677
     655    "__std_ftell" @678
     656    "__std_ftello" @679
     657    "__std_ftime" @680
     658    "__std_ftruncate" @681
     659    "__std_ftw" @682
     660    "__std_fwrite" @683
     661    "__std_gcvt" @684
     662    "__std_getchar" @685
     663    "__std_getcwd" @686
     664    "__std_getegid" @687
     665    "__std_getenv" @688
     666    "__std_geteuid" @689
     667    "__std_getgid" @690
     668    "__std_getgrgid" @691
     669    "__std_getgrnam" @692
     670    "__std_getgroups" @693
     671    "__std_getlogin" @694
     672    "__std_getopt" @695
     673    "__std_getpagesize" @696
     674    "__std_getpass" @697
     675    "__std_getpgrp" @698
     676    "__std_getpid" @699
     677    "__std_getppid" @700
     678    "__std_getpw" @701
     679    "__std_getpwent" @702
     680    "__std_getpwnam" @703
     681    "__std_getpwuid" @704
     682    "__std_gets" @705
     683    "__std_gettimeofday" @706
     684    "__std_getuid" @707
     685    "__std_getw" @708
     686    "__std_getwd" @709
     687    "__std_glob" @710
     688    "__std_globfree" @711
     689    "__std_gmtime" @712
     690    "__std_gmtime_r" @713
     691    "__std_hcreate" @714
     692    "__std_hdestroy" @715
     693    "__std_hsearch" @716
     694    "__std_hypot" @717
     695    "__std_hypotl" @718
     696    "__std_imaxabs" @719
     697    "__std_imaxdiv" @720
     698    "__std_index" @721
     699    "__std_insque" @722
     700    "__std_ioctl" @723
     701    "__std_isatty" @724
     702    "__std_jrand48" @725
     703    "__std_kill" @726
     704    "__std_labs" @727
     705    "__std_lcong48" @728
     706    "__std_ldexp" @729
     707    "__std_ldexpl" @730
     708    "__std_ldiv" @731
     709    "__std_lfind" @732
     710    "__std_lltoa" @733
     711    "__std_localeconv" @734
     712    "__std_localtime" @735
     713    "__std_localtime_r" @736
     714    "__std_lockf" @737
     715    "__std_log" @738
     716    "__std_log10" @739
     717    "__std_log10l" @740
     718    "__std_logl" @741
     719    "__std_longjmp" @742
     720    "__std_lrand48" @743
     721    "__std_lsearch" @744
     722    "__std_lseek" @745
     723    "__std_lstat" @746
     724    "__std_ltoa" @747
     725    "__std_malloc" @748
     726    "__std_mblen" @749
     727    "__std_mbstowcs" @750
     728    "__std_mbtowc" @751
     729    "__std_memccpy" @752
     730    "__std_memchr" @753
     731    "__std_memcmp" @754
     732    "__std_memcpy" @755
     733    "__std_memicmp" @756
     734    "__std_memmove" @757
     735    "__std_memset" @758
     736    "__std_mkdir" @759
     737    "__std_mkstemp" @760
     738    "__std_mktemp" @761
     739    "__std_mktime" @762
     740    "__std_modf" @763
     741    "__std_modfl" @764
     742    "__std_mrand48" @765
     743    "__std_nextafter" @766
     744    "__std_nextafterf" @767
     745    "__std_nextafterl" @768
     746    "__std_nrand48" @769
     747    "__std_open" @770
     748    "__std_opendir" @771
     749    "__std_pathconf" @772
     750    "__std_pause" @773
     751    "__std_pclose" @774
     752    "__std_perror" @775
     753    "__std_pipe" @776
     754    "__std_popen" @777
     755    "__std_posix_memalign" @778
     756    "__std_pow" @779
     757    "__std_powl" @780
     758    "__std_printf" @781
     759    "__std_putchar" @782
     760    "__std_putenv" @783
     761    "__std_puts" @784
     762    "__std_putw" @785
     763    "__std_qsort" @786
     764    "__std_qsort_r" @787
     765    "__std_raise" @788
     766    "__std_rand" @789
     767    "__std_read" @790
     768    "__std_readdir" @791
     769    "__std_readdir_r" @792
     770    "__std_readv" @793
     771    "__std_realloc" @794
     772    "__std_realpath" @795
     773    "__std_remove" @796
     774    "__std_remque" @797
     775    "__std_rename" @798
     776    "__std_rewind" @799
     777    "__std_rewinddir" @800
     778    "__std_rindex" @801
     779    "__std_rint" @802
     780    "__std_rintl" @803
     781    "__std_rmdir" @804
     782    "__std_sbrk" @805
     783    "__std_scanf" @806
     784    "__std_seed48" @807
     785    "__std_seekdir" @808
     786    "__std_select" @809
     787    "__std_setbuf" @810
     788    "__std_setbuffer" @811
     789    "__std_setenv" @812
     790    "__std_setgid" @813
     791    "__std_setjmp" @814
     792    "__std_setlocale" @815
     793    "__std_setmode" @816
     794    "__std_setpgid" @817
     795    "__std_setpwent" @818
     796    "__std_setsid" @819
     797    "__std_settimeofday" @820
     798    "__std_setuid" @821
     799    "__std_setvbuf" @822
     800    "__std_sigaction" @823
     801    "__std_sigaddset" @824
     802    "__std_sigdelset" @825
     803    "__std_sigemptyset" @826
     804    "__std_sigfillset" @827
     805    "__std_sigismember" @828
     806    "__std_siglongjmp" @829
     807    "__std_signal" @830
     808    "__std_sigpending" @831
     809    "__std_sigprocmask" @832
     810    "__std_sigsetjmp" @833
     811    "__std_sigsuspend" @834
     812    "__std_sin" @835
     813    "__std_sinh" @836
     814    "__std_sinhl" @837
     815    "__std_sinl" @838
     816    "__std_sleep" @839
     817    "__std_snprintf" @840
     818    "__std_sopen" @841
     819    "__std_spawnl" @842
     820    "__std_spawnle" @843
     821    "__std_spawnlp" @844
     822    "__std_spawnlpe" @845
     823    "__std_spawnv" @846
     824    "__std_spawnve" @847
     825    "__std_spawnvp" @848
     826    "__std_spawnvpe" @849
     827    "__std_sprintf" @850
     828    "__std_sqrt" @851
     829    "__std_sqrtl" @852
     830    "__std_srand" @853
     831    "__std_srand48" @854
     832    "__std_sscanf" @855
     833    "__std_stat" @856
     834    "__std_strcat" @857
     835    "__std_strchr" @858
     836    "__std_strcmp" @859
     837    "__std_strcoll" @860
     838    "__std_strcpy" @861
     839    "__std_strcspn" @862
     840    "__std_strdup" @863
     841    "__std_strerror" @864
     842    "__std_strerror_r" @865
     843    "__std_strftime" @866
     844    "__std_stricmp" @867
     845    "__std_strlen" @868
     846    "__std_strlwr" @869
     847    "__std_strncat" @870
     848    "__std_strncmp" @871
     849    "__std_strncpy" @872
     850    "__std_strnicmp" @873
     851    "__std_strnset" @874
     852    "__std_strpbrk" @875
     853    "__std_strptime" @876
     854    "__std_strrchr" @877
     855    "__std_strrev" @878
     856    "__std_strset" @879
     857    "__std_strspn" @880
     858    "__std_strstr" @881
     859    "__std_strtod" @882
     860    "__std_strtof" @883
     861    "__std_strtoimax" @884
     862    "__std_strtok" @885
     863    "__std_strtol" @886
     864    "__std_strtold" @887
     865    "__std_strtoll" @888
     866    "__std_strtoul" @889
     867    "__std_strtoull" @890
     868    "__std_strtoumax" @891
     869    "__std_strupr" @892
     870    "__std_strxfrm" @893
     871    "__std_swab" @894
     872    "__std_sys_errlist" @895
     873    "__std_sys_nerr" @896
     874    "__std_sysconf" @897
     875    "__std_system" @898
     876    "__std_tan" @899
     877    "__std_tanh" @900
     878    "__std_tanhl" @901
     879    "__std_tanl" @902
     880    "__std_tcdrain" @903
     881    "__std_tcflow" @904
     882    "__std_tcflush" @905
     883    "__std_tcgetattr" @906
     884    "__std_tcgetpgrp" @907
     885    "__std_tcsendbreak" @908
     886    "__std_tcsetattr" @909
     887    "__std_tcsetpgrp" @910
     888    "__std_tdelete" @911
     889    "__std_tell" @912
     890    "__std_telldir" @913
     891    "__std_tempnam" @914
     892    "__std_tfind" @915
     893    "__std_time" @916
     894    "__std_times" @917
     895    "__std_tmpfile" @918
     896    "__std_tmpnam" @919
     897    "__std_trunc" @920
     898    "__std_truncate" @921
     899    "__std_truncl" @922
     900    "__std_tsearch" @923
     901    "__std_ttyname" @924
     902    "__std_twalk" @925
     903    "__std_tzset" @926
     904    "__std_ulimit" @927
     905    "__std_ulltoa" @928
     906    "__std_ultoa" @929
     907    "__std_umask" @930
     908    "__std_uname" @931
     909    "__std_ungetc" @932
     910    "__std_unlink" @933
     911    "__std_unsetenv" @934
     912    "__std_usleep" @935
     913    "__std_utime" @936
     914    "__std_utimes" @937
     915    "__std_vfprintf" @938
     916    "__std_vfscanf" @939
     917    "__std_vprintf" @940
     918    "__std_vscanf" @941
     919    "__std_vsnprintf" @942
     920    "__std_vsprintf" @943
     921    "__std_vsscanf" @944
     922    "__std_wait" @945
     923    "__std_waitpid" @946
     924    "__std_wcstombs" @947
     925    "__std_wctomb" @948
     926    "__std_write" @949
     927    "__std_writev" @950
     928    "__stream_read" @951
     929    "__stream_write" @952
     930    "__strncpy" @953
     931    "__swchar" @954
     932    "__sys_dump_heap_objs" @955
     933    "__tcalloc" @956
     934    "__tfree" @957
     935    "__theapmin" @958
     936    "__threadstore" @959
     937    "__tmalloc" @960
     938    "__tmpbuf1" @961
     939    "__tmpidx_lock" @962
     940    "__tmpidx_unlock" @963
     941    "__tmpidxnam" @964
     942    "__trealloc" @965
     943    "__trslash" @966
     944    "__uaddmem" @967
     945    "__ucalloc" @968
     946    "__uclose" @969
     947    "__ucreate" @970
     948    "__ucreate2" @971
     949    "__udefault" @972
     950    "__udestroy" @973
     951    "__uflags" @974
     952    "__uheap_type" @975
     953    "__uheap_walk" @976
     954    "__uheap_walk2" @977
     955    "__uheapchk" @978
     956    "__uheapmin" @979
     957    "__uheapset" @980
     958    "__uldiv" @981
     959    "__um_addmem_nolock" @982
     960    "__um_alloc_no_lock" @983
     961    "__um_crumb_free_maybe_lock" @984
     962    "__um_default_alloc" @985
     963    "__um_default_expand" @986
     964    "__um_default_release" @987
     965    "__um_default_shrink" @988
     966    "__um_find_bucket" @989
     967    "__um_free_maybe_lock" @990
     968    "__um_init_default_regular_heap" @991
     969    "__um_init_default_tiled_heap" @992
     970    "__um_lump_alloc" @993
     971    "__um_lump_coalesce_free" @994
     972    "__um_lump_free_maybe_lock" @995
     973    "__um_lump_link_heap" @996
     974    "__um_lump_make_free" @997
     975    "__um_lump_unlink_bucket" @998
     976    "__um_lump_unlink_heap" @999
     977    "__um_realloc" @1000
     978    "__um_seg_addmem" @1001
     979    "__um_seg_setmem" @1002
     980    "__um_walk_error" @1003
     981    "__um_walk_no_lock" @1004
     982    "__umalloc" @1005
     983    "__ungetc_nolock" @1006
     984    "__uopen" @1007
     985    "__ustats" @1008
     986    "__utcalloc" @1009
     987    "__utdefault" @1010
     988    "__utmalloc" @1011
     989    "__vsopen" @1012
     990    "__warn" @1013
     991    "__wildcard" @1014
     992    "__year_day" @1015
     993    "_argz_delete" @1016
     994    "_dbm_clearerr" @1017
     995    "_dbm_close" @1018
     996    "_dbm_delete" @1019
     997    "_dbm_dirfno" @1020
     998    "_dbm_error" @1021
     999    "_dbm_fetch" @1022
     1000    "_dbm_firstkey" @1023
     1001    "_dbm_nextkey" @1024
     1002    "_dbm_open" @1025
     1003    "_dbm_store" @1026
     1004    "_dbopen" @1027
     1005    "_err_set_exit" @1028
     1006    "_err_set_file" @1029
     1007    "_errc" @1030
     1008    "_errx" @1031
     1009    "_getopt_long" @1032
     1010    "_heapsort" @1033
     1011    "_initstate" @1034
     1012    "_isalnum" @1035
     1013    "_isalpha" @1036
     1014    "_isascii" @1037
     1015    "_isblank" @1038
     1016    "_iscntrl" @1039
     1017    "_isdigit" @1040
     1018    "_isgraph" @1041
     1019    "_ishexnumber" @1042
     1020    "_islower" @1043
     1021    "_isnumber" @1044
     1022    "_isprint" @1045
     1023    "_ispunct" @1046
     1024    "_isspace" @1047
     1025    "_isupper" @1048
     1026    "_isxdigit" @1049
     1027    "_lchmod" @1050
     1028    "_mergesort" @1051
     1029    "_mpool_close" @1052
     1030    "_mpool_filter" @1053
     1031    "_mpool_get" @1054
     1032    "_mpool_new" @1055
     1033    "_mpool_open" @1056
     1034    "_mpool_put" @1057
     1035    "_mpool_sync" @1058
     1036    "_posix_spawn" @1059
     1037    "_posix_spawn_file_actions_addclose" @1060
     1038    "_posix_spawn_file_actions_adddup2" @1061
     1039    "_posix_spawn_file_actions_addopen" @1062
     1040    "_posix_spawn_file_actions_destroy" @1063
     1041    "_posix_spawn_file_actions_init" @1064
     1042    "_posix_spawnattr_destroy" @1065
     1043    "_posix_spawnattr_getflags" @1066
     1044    "_posix_spawnattr_getpgroup" @1067
     1045    "_posix_spawnattr_getschedparam" @1068
     1046    "_posix_spawnattr_getschedpolicy" @1069
     1047    "_posix_spawnattr_getsigdefault" @1070
     1048    "_posix_spawnattr_getsigmask" @1071
     1049    "_posix_spawnattr_init" @1072
     1050    "_posix_spawnattr_setflags" @1073
     1051    "_posix_spawnattr_setpgroup" @1074
     1052    "_posix_spawnattr_setschedparam" @1075
     1053    "_posix_spawnattr_setschedpolicy" @1076
     1054    "_posix_spawnattr_setsigdefault" @1077
     1055    "_posix_spawnattr_setsigmask" @1078
     1056    "_posix_spawnp" @1079
     1057    "_radixsort" @1080
     1058    "_random" @1081
     1059    "_reallocf" @1082
     1060    "_regcomp" @1083
     1061    "_regerror" @1084
     1062    "_regexec" @1085
     1063    "_regfree" @1086
     1064    "_setprogname" @1087
     1065    "_setstate" @1088
     1066    "_sig_info" @1089
     1067    "_sradixsort" @1090
     1068    "_srandom" @1091
     1069    "_srandomdev" @1092
     1070    "_stpcpy" @1093
     1071    "_strcasestr" @1094
     1072    "_strlcat" @1095
     1073    "_strlcpy" @1096
     1074    "_strnstr" @1097
     1075    "_strsep" @1098
     1076    "_strsignal" @1099
     1077    "_sys_exception" @1100
     1078    "_sys_nsig" @1101
     1079    "_sys_siglist" @1102
     1080    "_sys_signame" @1103
     1081    "_toascii" @1104
     1082    "_tolower" @1105
     1083    "_toupper" @1106
     1084    "_verr" @1107
     1085    "_verrc" @1108
     1086    "_verrx" @1109
     1087    "_vwarn" @1110
     1088    "_vwarnc" @1111
     1089    "_vwarnx" @1112
     1090    "_warnc" @1113
     1091    "_warnx" @1114
    10811092
    1082     "___libc_Back_threadCleanup" @1106
    1083     "___libc_Back_threadEnd" @1107
    1084     "___libc_Back_threadInit" @1108
    1085     "___libc_Back_threadStartup" @1109
    1086     "___libc_TLSAlloc" @1110
    1087     "___libc_TLSFree" @1111
    1088     "___libc_TLSGet" @1112
    1089     "___libc_TLSSet" @1113
  • TabularUnified trunk/src/emx/src/lib/process/beginthr.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    1313#include <InnoTekLIBC/thread.h>
    1414#include <InnoTekLIBC/backend.h>
    15 
     15#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_THREAD
     16#include <InnoTekLIBC/logstrict.h>
    1617
    1718/**
     
    2223static void _System threadWrapper(__LIBC_PTHREAD pThrd)
    2324{
     25    LIBCLOG_ENTER("pThrd=%p\n", pThrd);
    2426    int                         tid;
    2527    EXCEPTIONREGISTRATIONRECORD reg;
     
    2729
    2830    __libc_Back_threadStartup(&reg);
     31    LIBCLOG_MSG("calling thread function %p with arg %p\n", pThrd->u.startup.pfnStart, pThrd->u.startup.pvArg);
    2932    pThrd->u.startup.pfnStart(pThrd->u.startup.pvArg);
     33    LIBCLOG_MSG("thread function returned\n");
    3034
    3135    FS_SAVE_LOAD();
     
    3337    __libc_threadFree(pThrd);
    3438    __libc_Back_threadEnd(&reg);
     39    LIBCLOG_MSG("calling DosExit(%s, 0)\n", tid == 1 ? "EXIT_PROCESS" : "EXIT_THREAD");
    3540    for (;;)
    3641        DosExit(tid == 1 ? EXIT_PROCESS : EXIT_THREAD, 0);
     
    4045int _beginthread(void (*pfnStart)(void *), void *pvStack, unsigned cbStack, void *pvArg)
    4146{
     47    LIBCLOG_ENTER("pfnStart=%p pvStart=%p cbStack=%d pvArg=%p\n", pfnStart, pvStack, cbStack, pvArg);
    4248    APIRET          rc;
    4349    TID             tid;
     
    5258    {
    5359        errno = ENOMEM;
    54         return -1;
     60        LIBCLOG_RETURN_INT(-1);
    5561    }
    5662
     
    6874    FS_RESTORE();
    6975    if (!rc)
    70         return tid;
     76        LIBCLOG_RETURN_INT((int)tid);
    7177
    7278    /*
    7379     * Set errno and cleanup.
    7480     */
     81    LIBC_ASSERTM_FAILED("DosCreateThread failed with rc=%u cbStack=%u\n", rc, (unsigned)cbStack);
    7582    if (rc == ERROR_NOT_ENOUGH_MEMORY)
    7683        errno = ENOMEM;
     
    8087        errno = EINVAL;
    8188    __libc_threadFree(pThrd);
    82     return -1;
     89    LIBCLOG_RETURN_INT(-1);
    8390}
    8491
     
    8693void _endthread(void)
    8794{
     95    LIBCLOG_ENTER("\n");
    8896    __LIBC_PTHREAD  pThrd = __libc_threadCurrent();
    8997    int             tid;
     
    93101    tid = _gettid();
    94102    __libc_threadFree(pThrd);
     103    LIBCLOG_MSG("calling DosExit(%s, 0)\n", tid == 1 ? "EXIT_PROCESS" : "EXIT_THREAD");
    95104    for (;;)
    96105        DosExit(tid == 1 ? EXIT_PROCESS : EXIT_THREAD, 0);
  • TabularUnified trunk/src/emx/src/lib/process/execl.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    810int _STD(execl) (const char *name, const char *arg0, ...)
    911{
    10   int result;
     12    LIBCLOG_ENTER("name=%s arg0=%s ...\n", name, arg0);
     13    int result;
    1114
    12   /* Note: Passing `arg0' to spawnv() is not portable. */
     15    /* Note: Passing `arg0' to spawnv() is not portable. */
    1316
    14   result = spawnv (P_OVERLAY, name, (char * const *) &arg0);
    15   return result;
     17    result = spawnv(P_OVERLAY, name, (char * const *) &arg0);
     18    LIBCLOG_RETURN_INT(result);
    1619}
  • TabularUnified trunk/src/emx/src/lib/process/execle.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(execle) (const char *name, const char *arg0, ...)
     10int _STD(execle)(const char *name, const char *arg0, ...)
    911{
    10   va_list arg_ptr;
    11   char * const *env_ptr;
    12   int result;
     12    LIBCLOG_ENTER("name=%s arg0=%s ...\n", name, arg0);
     13    va_list arg_ptr;
     14    char * const *env_ptr;
     15    int rc;
    1316
    14   va_start (arg_ptr, arg0);
    15   while (va_arg (arg_ptr, char *) != NULL)
    16     /* do nothing */;
    17   env_ptr = va_arg (arg_ptr, char * const *);
    18   va_end (arg_ptr);
     17    va_start(arg_ptr, arg0);
     18    while (va_arg(arg_ptr, char *) != NULL)
     19        /* do nothing */;
     20    env_ptr = va_arg(arg_ptr, char * const *);
     21    va_end(arg_ptr);
    1922
    20   /* Note: Passing `&arg0' to spawnve() is not portable. */
     23    /* Note: Passing `&arg0' to spawnve() is not portable. */
    2124
    22   result = spawnve (P_OVERLAY, name, (char * const *)&arg0, env_ptr);
    23   return result;
     25    rc = spawnve(P_OVERLAY, name, (char * const *)&arg0, env_ptr);
     26    LIBCLOG_RETURN_INT(rc);
    2427}
  • TabularUnified trunk/src/emx/src/lib/process/execlp.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(execlp) (const char *name, const char *arg0, ...)
     10int _STD(execlp)(const char *name, const char *arg0, ...)
    911{
    10   int result;
     12    LIBCLOG_ENTER("name=%s arg0=%s ...\n", name, arg0);
     13    int rc;
    1114
    12   /* Note: Passing `&arg0' to spawnvp() is not portable. */
     15    /* Note: Passing `&arg0' to spawnvp() is not portable. */
    1316
    14   result = spawnvp (P_OVERLAY, name, (char * const *)&arg0);
    15   return result;
     17    rc = spawnvp(P_OVERLAY, name, (char * const *)&arg0);
     18    LIBCLOG_RETURN_INT(rc);
    1619}
  • TabularUnified trunk/src/emx/src/lib/process/execlpe.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(execlpe) (const char *name, const char *arg0, ...)
     10int _STD(execlpe)(const char *name, const char *arg0, ...)
    911{
    10   va_list arg_ptr;
    11   char * const *env_ptr;
    12   int result;
     12    LIBCLOG_ENTER("name=%s arg0=%s ...\n", name, arg0);
     13    va_list arg_ptr;
     14    char * const *env_ptr;
     15    int rc;
    1316
    14   va_start (arg_ptr, arg0);
    15   while (va_arg (arg_ptr, char *) != NULL)
    16     /* do nothing */;
    17   env_ptr = va_arg (arg_ptr, char * const *);
    18   va_end (arg_ptr);
     17    va_start(arg_ptr, arg0);
     18    while (va_arg(arg_ptr, char *) != NULL)
     19        /* do nothing */;
     20    env_ptr = va_arg(arg_ptr, char * const *);
     21    va_end(arg_ptr);
    1922
    20   /* Note: Passing `&arg0' to spawnvpe() is not portable. */
    21 
    22   result = spawnvpe (P_OVERLAY, name, (char * const *)&arg0, env_ptr);
    23   return result;
     23    /* Note: Passing `&arg0' to spawnvpe() is not portable. */
     24    rc = spawnvpe(P_OVERLAY, name, (char * const *)&arg0, env_ptr);
     25    LIBCLOG_RETURN_INT(rc);
    2426}
  • TabularUnified trunk/src/emx/src/lib/process/execv.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <process.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(execv) (const char *name, char * const argv[])
     8int _STD(execv)(const char *name, char * const argv[])
    79{
    8   return spawnv (P_OVERLAY, name, argv);
     10    LIBCLOG_ENTER("name=%s argv=%p\n", name, argv);
     11    int rc = spawnv(P_OVERLAY, name, argv);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/execve.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <process.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(execve) (const char *name, char * const argv[], char * const envp[])
     8int _STD(execve)(const char *name, char * const argv[], char * const envp[])
    79{
    8   return spawnve (P_OVERLAY, name, argv, envp);
     10    LIBCLOG_ENTER("name=%s argv=%p envp=%p\n", name, argv, envp);
     11    int rc = spawnve(P_OVERLAY, name, argv, envp);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/execvp.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <process.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(execvp) (const char *name, char * const argv[])
     8int _STD(execvp)(const char *name, char * const argv[])
    79{
    8   return spawnvp (P_OVERLAY, name, argv);
     10    LIBCLOG_ENTER("name=%s argv=%s\n", name, argv);
     11    int rc = spawnvp(P_OVERLAY, name, argv);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/execvpe.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <process.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(execvpe) (const char *name, char * const argv[], char * const envp[])
     8int _STD(execvpe)(const char *name, char * const argv[], char * const envp[])
    79{
    8   return spawnvpe (P_OVERLAY, name, argv, envp);
     10    LIBCLOG_ENTER("name=%s argv=%s envp=%s\n", name, argv, envp);
     11    int rc = spawnvpe(P_OVERLAY, name, argv, envp);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/fmutex.c

    • Property cvs2svn:cvs-rev changed from 1.5 to 1.6
    r1288 r1289  
    1111#include <sys/fmutex.h>
    1212#include <sys/smutex.h>
     13#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_MUTEX
     14#include <InnoTekLIBC/logstrict.h>
    1315
    1416/* These functions are available even in single-thread libraries. */
    1517
    1618
    17 unsigned _fmutex_create (_fmutex *sem, unsigned flags)
    18 {
    19   unsigned rc;
    20   FS_VAR();
    21   sem->fs = _FMS_AVAILABLE;
    22   sem->flags = flags;
    23   sem->padding[0] = 'f';
    24   sem->padding[1] = 'm';
    25   FS_SAVE_LOAD();
    26   rc = DosCreateEventSem (NULL, (PHEV)&sem->hev,
    27                           (flags & _FMC_SHARED) ? DC_SEM_SHARED : 0,
     19unsigned _fmutex_create(_fmutex *sem, unsigned flags)
     20{
     21    LIBCLOG_ENTER("sem=%p flags=%#x\n", sem, flags);
     22    unsigned rc;
     23    FS_VAR();
     24    sem->fs         = _FMS_AVAILABLE;
     25    sem->flags      = flags;
     26    sem->padding[0] = 'f';
     27    sem->padding[1] = 'm';
     28    FS_SAVE_LOAD();
     29    rc = DosCreateEventSem(NULL, (PHEV)&sem->hev,
     30                           (flags & _FMC_SHARED) ? DC_SEM_SHARED : 0,
    2831                           FALSE);
    29   FS_RESTORE();
    30   return rc;
    31 }
    32 
    33 
    34 unsigned _fmutex_open (_fmutex *sem)
    35 {
    36   unsigned rc;
    37   FS_VAR();
    38   FS_SAVE_LOAD();
    39   rc = DosOpenEventSem (NULL, (PHEV)&sem->hev);
    40   FS_RESTORE();
    41   return rc;
    42 }
    43 
    44 
    45 unsigned _fmutex_close (_fmutex *sem)
    46 {
    47   unsigned rc;
    48   FS_VAR();
    49   FS_SAVE_LOAD();
    50   rc = DosCloseEventSem (sem->hev);
    51   FS_RESTORE();
    52   return rc;
    53 }
    54 
    55 
    56 unsigned __fmutex_request_internal (_fmutex *sem, unsigned flags,
    57                                     signed char fs)
    58 {
    59   ULONG rc, count;
    60   PTIB  pTib;
    61   PPIB  pPib;
    62 
    63   if (fs == _FMS_UNINIT)
    64     return ERROR_INVALID_HANDLE;
    65 
    66   if (flags & _FMR_NOWAIT)
    67     {
    68       if (fs == _FMS_OWNED_HARD)
     32    FS_RESTORE();
     33    LIBCLOG_RETURN_UINT(rc);
     34}
     35
     36
     37unsigned _fmutex_open(_fmutex *sem)
     38{
     39    LIBCLOG_ENTER("sem=%p\n", sem);
     40    unsigned rc;
     41    FS_VAR();
     42    FS_SAVE_LOAD();
     43    rc = DosOpenEventSem(NULL, (PHEV)&sem->hev);
     44    FS_RESTORE();
     45    LIBCLOG_RETURN_UINT(rc);
     46}
     47
     48
     49unsigned _fmutex_close(_fmutex *sem)
     50{
     51    LIBCLOG_ENTER("sem=%p\n", sem);
     52    unsigned rc;
     53    FS_VAR();
     54    FS_SAVE_LOAD();
     55    rc = DosCloseEventSem(sem->hev);
     56    FS_RESTORE();
     57    LIBCLOG_RETURN_UINT(rc);
     58}
     59
     60
     61unsigned __fmutex_request_internal(_fmutex *sem, unsigned flags, signed char fs)
     62{
     63    LIBCLOG_ENTER("sem=%p flags=%#x fs=%#x\n", sem, flags, (int)fs);
     64    ULONG rc, count;
     65    PTIB  pTib;
     66    PPIB  pPib;
     67
     68    if (fs == _FMS_UNINIT)
     69    {
     70        LIBC_ASSERTM_FAILED("Invalid handle, fs == _FMS_UNINIT\n");
     71        LIBCLOG_RETURN_UINT(ERROR_INVALID_HANDLE);
     72    }
     73
     74    if (flags & _FMR_NOWAIT)
     75    {
     76        if (fs == _FMS_OWNED_HARD)
    6977        {
    70           if (__cxchg (&sem->fs, _FMS_OWNED_HARD) == _FMS_AVAILABLE)
    71             return 0;
     78            if (__cxchg(&sem->fs, _FMS_OWNED_HARD) == _FMS_AVAILABLE)
     79                LIBCLOG_RETURN_UINT(0);
    7280        }
    73       return ERROR_MUTEX_OWNED;
    74     }
    75 
    76   for (;;)
    77     {
    78       FS_VAR();
    79       FS_SAVE_LOAD();
    80       rc = DosResetEventSem (sem->hev, &count);
    81       FS_RESTORE();
    82       if (rc != 0 && rc != ERROR_ALREADY_RESET)
    83         return rc;
    84       if (__cxchg (&sem->fs, _FMS_OWNED_HARD) == _FMS_AVAILABLE)
    85         return 0;
    86       FS_SAVE_LOAD();
    87 
    88       do
     81        LIBCLOG_RETURN_UINT(ERROR_MUTEX_OWNED);
     82    }
     83
     84    for (;;)
     85    {
     86        FS_VAR();
     87        FS_SAVE_LOAD();
     88        rc = DosResetEventSem(sem->hev, &count);
     89        FS_RESTORE();
     90        if (rc != 0 && rc != ERROR_ALREADY_RESET)
     91            LIBCLOG_RETURN_UINT(rc);
     92        if (__cxchg(&sem->fs, _FMS_OWNED_HARD) == _FMS_AVAILABLE)
     93            LIBCLOG_RETURN_UINT(0);
     94        FS_SAVE_LOAD();
     95
     96        do
    8997        {
    90           rc = DosWaitEventSem (sem->hev, sem->flags & _FMC_SHARED ? SEM_INDEFINITE_WAIT : 3000);
    91           if (rc == ERROR_INTERRUPT)
     98            rc = DosWaitEventSem (sem->hev, sem->flags & _FMC_SHARED ? SEM_INDEFINITE_WAIT : 3000);
     99            if (rc == ERROR_INTERRUPT)
    92100            {
    93               /*
    94                * An interrupt occured, this might be a bug in the wait, or
    95                * more likely someone is killing us. If we're dying/exiting or
    96                * something along those lines, we return to the caller no matter
    97                * what flags it specified.
    98                */
    99               if (!(flags & _FMR_IGNINT))
    100                   break;
    101               DosGetInfoBlocks(&pTib, &pPib);
    102               if (pPib->pib_flstatus & (0x40/*dying*/ | 0x04/*exiting all*/ | 0x02/*Exiting Thread 1*/ | 0x01/* ExitList */))
    103                   break;
    104               rc = ERROR_TIMEOUT;
     101                /*
     102                 * An interrupt occured, this might be a bug in the wait, or
     103                 * more likely someone is killing us. If we're dying/exiting or
     104                 * something along those lines, we return to the caller no matter
     105                 * what flags it specified.
     106                 */
     107                if (!(flags & _FMR_IGNINT))
     108                    break;
     109                DosGetInfoBlocks(&pTib, &pPib);
     110                if (pPib->pib_flstatus & (0x40/*dying*/ | 0x04/*exiting all*/ | 0x02/*Exiting Thread 1*/ | 0x01/* ExitList */))
     111                    break;
     112                rc = ERROR_TIMEOUT;
    105113            }
    106           if (rc == ERROR_TIMEOUT && !(sem->flags & _FMC_SHARED))
     114            if (rc == ERROR_TIMEOUT && !(sem->flags & _FMC_SHARED))
    107115            {
    108               /*
    109                * Deadlock detection - if this is the only thread of the
    110                * process we should just kill our selves.
    111                * ASSUME thread ids are reused and upper thread limit or 4k.
    112                */
    113               int iThread;
    114               DosGetInfoBlocks(&pTib, &pPib);
    115               for (iThread = 1; iThread < 4096; iThread++)
     116                /*
     117                 * Deadlock detection - if this is the only thread of the
     118                 * process we should just kill our selves.
     119                 * ASSUME thread ids are reused and upper thread limit or 4k.
     120                 */
     121                int iThread;
     122                DosGetInfoBlocks(&pTib, &pPib);
     123                for (iThread = 1; iThread < 4096; iThread++)
    116124                {
    117                   if (   iThread != pTib->tib_ptib2->tib2_ultid
    118                       && !DosVerifyPidTid(pPib->pib_ulpid, iThread))
    119                       break;
     125                    if (iThread != pTib->tib_ptib2->tib2_ultid
     126                        && !DosVerifyPidTid(pPib->pib_ulpid, iThread))
     127                        break;
    120128                }
    121               if (iThread >= 4096)
     129                if (iThread >= 4096)
    122130                { /* No other threads! */
    123                   ULONG ul;
    124                   DosWrite((HFILE)2/*stderr*/, "\r\n!!!deadlock!!!\r\r", 18, &ul);
    125                   __asm__ __volatile__ ("movl $0xdead10cc, %%eax; movl $0xdead10cc, %%edx; movl %0, %%ecx; int $3" : : "m" (sem) : "%eax", "%edx", "%ecx");
    126                   rc = ERROR_SEM_OWNER_DIED;
    127                   break;
     131                    ULONG ul;
     132                    DosWrite((HFILE)2/*stderr*/, "\r\n!!!deadlock!!!\r\r", 18, &ul);
     133                    __asm__ __volatile__("movl $0xdead10cc, %%eax; movl $0xdead10cc, %%edx; movl %0, %%ecx; int $3" : : "m" (sem) : "%eax", "%edx", "%ecx");
     134                    rc = ERROR_SEM_OWNER_DIED;
     135                    break;
    128136                }
    129137            }
    130138        } while (rc == ERROR_TIMEOUT);
    131       FS_RESTORE();
    132       if (rc != 0)
    133         return rc;
    134     }
    135 }
    136 
    137 
    138 unsigned __fmutex_release_internal (_fmutex *sem)
    139 {
    140   ULONG rc;
    141   FS_VAR();
    142 
    143   FS_SAVE_LOAD();
    144   rc = DosPostEventSem (sem->hev);
    145   if (rc != 0 && rc != ERROR_ALREADY_POSTED)
    146     {
    147       FS_RESTORE();
    148       return rc;
    149     }
    150 
    151   /* Give up our time slice to give other threads a chance.  Without
    152      doing so, a thread which continuously requests and releases a
    153      _fmutex semaphore may prevent all other threads requesting the
    154      _fmutex semaphore from running, forever.
    155 
    156      Why?  Without DosSleep, the thread will keep the CPU for the rest
    157      of the time slice.  It may request (and get) the semaphore again
    158      in the same time slice, perhaps multiple times.  Assume that the
    159      semaphore is still owned at the end of the time slice.  In one of
    160      the next time slices, all the other threads blocking on the
    161      semaphore will wake up for a short while only to see that the
    162      semaphore is owned; they will all go sleeping again.  The thread
    163      which owns the semaphore will get the CPU again.  And may happen
    164      to own the semaphore again at the end of the time slice.  And so
    165      on.  DosSleep reduces that problem a bit.
    166 
    167      Even with DosSleep(0), assignment of time slices to threads
    168      requesting a _fmutex semaphore can be quite unbalanced: The more
    169      frequently a thread requests a _fmutex semaphore, the more CPU
    170      time it will get.  In consequence, a thread which only rarely
    171      needs the resource protected by the _fmutex semaphore will get
    172      much less CPU time than threads competing heavily for the
    173      resource.
    174 
    175      DosSleep(1) would make _fmutex semaphores behave a bit better,
    176      but would also give up way too much CPU time (in the average,
    177      half a time slice (or one and a half?) per call of this
    178      function).
    179 
    180      DosReleaseMutexSem does a better job; it gives the time slice to
    181      the thread which has waited longest on the semaphore (if all the
    182      threads have the same priority).
    183 
    184      Unfortunately, we cannot use an HMTX instead of an HEV because
    185      only the owner (the thread which got assigned ownership by
    186      DosRequestMutexSem) can release the HMTX with DosReleaseMutexSem.
    187      If we could, that would take advantage of the FIFO of blocked
    188      threads maintained by the kernel for each HMTX.
    189 
    190      Using an HMTX would require the first thread requesting an owned
    191      _fmutex semaphore to request the HMTX on behalf of the thread
    192      owning the _fmutex semaphore. */
    193 
    194   DosSleep (0);
    195   FS_RESTORE();
    196   return 0;
    197 }
    198 
    199 
    200 void _fmutex_dummy (_fmutex *sem)
    201 {
    202   sem->fs = _FMS_AVAILABLE;
    203   sem->hev = 0;
    204 }
     139        FS_RESTORE();
     140        if (rc != 0)
     141            LIBCLOG_RETURN_UINT(rc);
     142    }
     143}
     144
     145
     146unsigned __fmutex_release_internal(_fmutex *sem)
     147{
     148    LIBCLOG_ENTER("sem=%p\n", sem);
     149    ULONG rc;
     150    FS_VAR();
     151
     152    FS_SAVE_LOAD();
     153    rc = DosPostEventSem(sem->hev);
     154    if (rc != 0 && rc != ERROR_ALREADY_POSTED)
     155    {
     156        FS_RESTORE();
     157        LIBCLOG_RETURN_UINT(rc);
     158    }
     159
     160    /* Give up our time slice to give other threads a chance.  Without
     161       doing so, a thread which continuously requests and releases a
     162       _fmutex semaphore may prevent all other threads requesting the
     163       _fmutex semaphore from running, forever.
     164
     165       Why?  Without DosSleep, the thread will keep the CPU for the rest
     166       of the time slice.  It may request (and get) the semaphore again
     167       in the same time slice, perhaps multiple times.  Assume that the
     168       semaphore is still owned at the end of the time slice.  In one of
     169       the next time slices, all the other threads blocking on the
     170       semaphore will wake up for a short while only to see that the
     171       semaphore is owned; they will all go sleeping again.  The thread
     172       which owns the semaphore will get the CPU again.  And may happen
     173       to own the semaphore again at the end of the time slice.  And so
     174       on.  DosSleep reduces that problem a bit.
     175
     176       Even with DosSleep(0), assignment of time slices to threads
     177       requesting a _fmutex semaphore can be quite unbalanced: The more
     178       frequently a thread requests a _fmutex semaphore, the more CPU
     179       time it will get.  In consequence, a thread which only rarely
     180       needs the resource protected by the _fmutex semaphore will get
     181       much less CPU time than threads competing heavily for the
     182       resource.
     183
     184       DosSleep(1) would make _fmutex semaphores behave a bit better,
     185       but would also give up way too much CPU time (in the average,
     186       half a time slice (or one and a half?) per call of this
     187       function).
     188
     189       DosReleaseMutexSem does a better job; it gives the time slice to
     190       the thread which has waited longest on the semaphore (if all the
     191       threads have the same priority).
     192
     193       Unfortunately, we cannot use an HMTX instead of an HEV because
     194       only the owner (the thread which got assigned ownership by
     195       DosRequestMutexSem) can release the HMTX with DosReleaseMutexSem.
     196       If we could, that would take advantage of the FIFO of blocked
     197       threads maintained by the kernel for each HMTX.
     198
     199       Using an HMTX would require the first thread requesting an owned
     200       _fmutex semaphore to request the HMTX on behalf of the thread
     201       owning the _fmutex semaphore. */
     202
     203    DosSleep(0);
     204    FS_RESTORE();
     205    LIBCLOG_RETURN_UINT(0);
     206}
     207
     208
     209void _fmutex_dummy(_fmutex *sem)
     210{
     211    LIBCLOG_ENTER("sem=%p\n", sem);
     212    sem->fs  = _FMS_AVAILABLE;
     213    sem->hev = 0;
     214    LIBCLOG_RETURN_VOID();
     215}
  • TabularUnified trunk/src/emx/src/lib/process/fmutex2.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    55#include <sys/builtin.h>
    66#include <sys/fmutex.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_MUTEX
     8#include <InnoTekLIBC/logstrict.h>
    79
    810/* These functions call abort() and therefore must not be linked in
    911   when building emx.dll. */
    1012
    11 void _fmutex_checked_close (_fmutex *sem)
     13void _fmutex_checked_close(_fmutex *sem)
    1214{
    13   if (_fmutex_close (sem) != 0)
    14     abort ();
     15    LIBCLOG_ENTER("sem=%p\n", sem);
     16    if (_fmutex_close(sem) != 0)
     17    {
     18        LIBC_ASSERT_FAILED();
     19        abort();
     20    }
     21    LIBCLOG_RETURN_VOID();
    1522}
    1623
    1724
    18 void _fmutex_checked_create (_fmutex *sem, unsigned flags)
     25void _fmutex_checked_create(_fmutex *sem, unsigned flags)
    1926{
    20   if (_fmutex_create (sem, flags) != 0)
    21     abort ();
     27    LIBCLOG_ENTER("sem=%p flags=%#x\n", sem, flags);
     28    if (_fmutex_create(sem, flags) != 0)
     29    {
     30        LIBC_ASSERT_FAILED();
     31        abort();
     32    }
     33    LIBCLOG_RETURN_VOID();
    2234}
    2335
    2436
    25 void _fmutex_checked_open (_fmutex *sem)
     37void _fmutex_checked_open(_fmutex *sem)
    2638{
    27   if (_fmutex_open (sem) != 0)
    28     abort ();
     39    LIBCLOG_ENTER("sem=%p\n", sem);
     40    if (_fmutex_open(sem) != 0)
     41    {
     42        LIBC_ASSERT_FAILED();
     43        abort();
     44    }
     45    LIBCLOG_RETURN_VOID();
    2946}
  • TabularUnified trunk/src/emx/src/lib/process/fork.c

    • Property cvs2svn:cvs-rev changed from 1.5 to 1.6
    r1288 r1289  
    44#include <process.h>
    55#include <emx/syscalls.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     7#include <InnoTekLIBC/logstrict.h>
    68
    7 extern void _rmutex_fork (void);
     9extern void _rmutex_fork(void);
    810
    9 int _STD(fork) (void)
     11int _STD(fork)(void)
    1012{
    11   int pid;
    12 
    13   pid = __fork ();
    14   if (pid == 0)
    15     _rmutex_fork ();
    16   return pid;
     13    LIBCLOG_ENTER("\n");
     14    int pid = __fork();
     15    if (pid == 0)
     16        _rmutex_fork();
     17    LIBCLOG_RETURN_INT(pid);
    1718}
  • TabularUnified trunk/src/emx/src/lib/process/rmutex.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    99#include <sys/fmutex.h>
    1010#include <sys/rmutex.h>
     11#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_MUTEX
     12#include <InnoTekLIBC/logstrict.h>
    1113
    1214/* These functions are available even in single-thread libraries. */
    13 
    1415
    1516static _rmutex *_rmutex_head;   /* Initialized to NULL */
    1617static _rmutex *_rmutex_tail;   /* Initialized to NULL */
    1718
    18 static void _rmutex_add (_rmutex *sem)
    19 {
    20   sem->prev = NULL;
    21   if (_rmutex_head == NULL)
    22     _rmutex_tail = sem;
    23   else
    24     _rmutex_head->prev = sem;
    25   sem->next = _rmutex_head;
    26   _rmutex_head = sem;
    27 }
    28 
    29 
    30 static void _rmutex_remove (_rmutex *sem)
    31 {
    32   if (sem->prev == NULL)
    33     _rmutex_head = sem->next;
    34   else
    35     sem->prev->next = sem->next;
    36   if (sem->next == NULL)
    37     _rmutex_tail = sem->prev;
    38   else
    39     sem->next->prev = sem->prev;
    40 }
    41 
    42 
    43 unsigned _rmutex_create (_rmutex *sem, unsigned flags)
    44 {
    45   unsigned rc;
    46 
    47   rc = _fmutex_create (&sem->fm, flags);
    48   if (rc == 0)
     19static void _rmutex_add(_rmutex *sem)
     20{
     21    sem->prev = NULL;
     22    if (_rmutex_head == NULL)
     23        _rmutex_tail = sem;
     24    else
     25        _rmutex_head->prev = sem;
     26    sem->next = _rmutex_head;
     27    _rmutex_head = sem;
     28}
     29
     30
     31static void _rmutex_remove(_rmutex *sem)
     32{
     33    if (sem->prev == NULL)
     34        _rmutex_head = sem->next;
     35    else
     36        sem->prev->next = sem->next;
     37    if (sem->next == NULL)
     38        _rmutex_tail = sem->prev;
     39    else
     40        sem->next->prev = sem->prev;
     41}
     42
     43
     44unsigned _rmutex_create(_rmutex *sem, unsigned flags)
     45{
     46    LIBCLOG_ENTER("sem=%p flags=%#x\n", sem, flags);
     47    unsigned rc;
     48
     49    rc = _fmutex_create (&sem->fm, flags);
     50    if (rc == 0)
    4951    {
    5052#if !defined (NDEBUG)
    51       _rmutex *p;
    52       for (p = _rmutex_head; p != NULL; p = p->next)
    53         if (sem == p)
    54           abort ();
     53        _rmutex *p;
     54        for (p = _rmutex_head; p != NULL; p = p->next)
     55            if (sem == p)
     56            {
     57                LIBC_ASSERT_FAILED();
     58                abort();
     59            }
    5560#endif
    56       sem->count = 1;
    57       sem->flags = (unsigned char)flags;
    58       if (flags & _FMC_SHARED)
    59         {
    60           /* Shared _rmutex semaphores cannot be registered -- that
    61              would mess up the doubly-linked list. */
    62 
    63           sem->next = NULL;
    64           sem->prev = NULL;
    65         }
    66       else
    67         _rmutex_add (sem);
    68     }
    69   return rc;
    70 }
    71 
    72 
    73 unsigned _rmutex_open (_rmutex *sem)
    74 {
    75   unsigned rc;
    76 
    77   rc = _fmutex_open (&sem->fm);
    78   if (rc == 0)
     61        sem->count = 1;
     62        sem->flags = (unsigned char)flags;
     63        if (flags & _FMC_SHARED)
     64        {
     65            /* Shared _rmutex semaphores cannot be registered -- that
     66               would mess up the doubly-linked list. */
     67
     68            sem->next = NULL;
     69            sem->prev = NULL;
     70        }
     71        else
     72            _rmutex_add(sem);
     73    }
     74    LIBCLOG_RETURN_UINT(rc);
     75}
     76
     77
     78unsigned _rmutex_open(_rmutex *sem)
     79{
     80    LIBCLOG_ENTER("sem=%p\n", sem);
     81    unsigned rc;
     82
     83    rc = _fmutex_open(&sem->fm);
     84    if (rc == 0)
    7985    {
    8086#if !defined (NDEBUG)
    81       _rmutex *p;
    82       for (p = _rmutex_head; p != NULL; p = p->next)
    83         if (sem == p)
    84           break;
    85       if (p == NULL)
    86         abort ();
     87        _rmutex *p;
     88        for (p = _rmutex_head; p != NULL; p = p->next)
     89            if (sem == p)
     90                break;
     91        if (p == NULL)
     92        {
     93            LIBC_ASSERT_FAILED();
     94            abort();
     95        }
    8796#endif
    88       if (sem->count == USHRT_MAX)
    89         abort ();
    90       sem->count += 1;
    91     }
    92   return rc;
    93 }
    94 
    95 
    96 unsigned _rmutex_close (_rmutex *sem)
    97 {
    98   unsigned rc;
    99 
    100   rc = _fmutex_close (&sem->fm);
    101 
    102   /* If it can't be closed, it probably wasn't created or opened.
    103      Avoid messing up the doubly-linked list.  Shared semaphores
    104      haven't been added to the list. */
    105 
    106   if (rc == 0 && !(sem->flags & _FMC_SHARED))
    107     {
    108       if (sem->count == 0)
    109         abort ();
    110       sem->count -= 1;
    111       if (sem->count == 0)
    112         _rmutex_remove (sem);
    113     }
    114   return rc;
    115 }
    116 
    117 
    118 void _rmutex_dummy (_rmutex *sem)
    119 {
    120   sem->prev = NULL;
    121   sem->next = NULL;
    122   sem->flags = 0;
    123   sem->count = 0;
    124   _fmutex_dummy (&sem->fm);
    125 }
    126 
    127 
    128 void _rmutex_checked_close (_rmutex *sem)
    129 {
    130   if (_rmutex_close (sem) != 0)
    131     abort ();
    132 }
    133 
    134 
    135 void _rmutex_checked_create (_rmutex *sem, unsigned flags)
    136 {
    137   if (_rmutex_create (sem, flags) != 0)
    138     abort ();
    139 }
    140 
    141 
    142 void _rmutex_checked_open (_rmutex *sem)
    143 {
    144   if (_rmutex_open (sem) != 0)
    145     abort ();
    146 }
    147 
    148 
    149 void _rmutex_fork (void);
    150 void _rmutex_fork (void)
    151 {
    152   _rmutex *p;
    153   unsigned i;
    154 
    155   for (p = _rmutex_head; p != NULL; p = p->next)
    156     {
    157       if (p->flags & _FMC_SHARED)
    158         _fmutex_checked_open (&p->fm);
    159       else
    160         _fmutex_checked_create (&p->fm, p->flags);
    161 
    162       /* This is important for the _rmutex semaphores of heaps! */
    163 
    164       for (i = 1; i < p->count; ++i)
    165         _fmutex_checked_open (&p->fm);
    166 
    167       /* Even if the semaphore was owned by the parent process, it's
    168          available now in the child process.  This might cause
    169          problems due to inconsistent data structures -- resolving
    170          this problem (by making sure that all _rmutex semaphores are
    171          available when calling fork()) is left to the application. */
    172     }
    173 }
     97        if (sem->count == USHRT_MAX)
     98        {
     99            LIBC_ASSERT_FAILED();
     100            abort();
     101        }
     102        sem->count += 1;
     103    }
     104    LIBCLOG_RETURN_UINT(rc);
     105}
     106
     107
     108unsigned _rmutex_close(_rmutex *sem)
     109{
     110    LIBCLOG_ENTER("sem=%p\n", sem);
     111    unsigned rc;
     112
     113    rc = _fmutex_close(&sem->fm);
     114
     115    /* If it can't be closed, it probably wasn't created or opened.
     116       Avoid messing up the doubly-linked list.  Shared semaphores
     117       haven't been added to the list. */
     118
     119    if (rc == 0 && !(sem->flags & _FMC_SHARED))
     120    {
     121        if (sem->count == 0)
     122        {
     123            LIBC_ASSERT_FAILED();
     124            abort();
     125        }
     126        sem->count -= 1;
     127        if (sem->count == 0)
     128            _rmutex_remove(sem);
     129    }
     130    LIBCLOG_RETURN_UINT(rc);
     131}
     132
     133
     134void _rmutex_dummy(_rmutex *sem)
     135{
     136    LIBCLOG_ENTER("sem=%p\n", sem);
     137    sem->prev = NULL;
     138    sem->next = NULL;
     139    sem->flags = 0;
     140    sem->count = 0;
     141    _fmutex_dummy(&sem->fm);
     142    LIBCLOG_RETURN_VOID();
     143}
     144
     145
     146void _rmutex_checked_close(_rmutex *sem)
     147{
     148    LIBCLOG_ENTER("sem=%p\n", sem);
     149    if (_rmutex_close(sem) != 0)
     150    {
     151        LIBC_ASSERT_FAILED();
     152        abort();
     153    }
     154    LIBCLOG_RETURN_VOID();
     155}
     156
     157
     158void _rmutex_checked_create(_rmutex *sem, unsigned flags)
     159{
     160    LIBCLOG_ENTER("sem=%p flags=%d\n", sem, flags);
     161    if (_rmutex_create(sem, flags) != 0)
     162    {
     163        LIBC_ASSERT_FAILED();
     164        abort();
     165    }
     166    LIBCLOG_RETURN_VOID();
     167}
     168
     169
     170void _rmutex_checked_open(_rmutex *sem)
     171{
     172    LIBCLOG_ENTER("sem=%p\n", sem);
     173    if (_rmutex_open(sem) != 0)
     174    {
     175        LIBC_ASSERT_FAILED();
     176        abort();
     177    }
     178    LIBCLOG_RETURN_VOID();
     179}
     180
     181
     182void _rmutex_fork(void);
     183void _rmutex_fork(void)
     184{
     185    LIBCLOG_ENTER("\n");
     186    _rmutex *p;
     187    unsigned i;
     188
     189    for (p = _rmutex_head; p != NULL; p = p->next)
     190    {
     191        if (p->flags & _FMC_SHARED)
     192            _fmutex_checked_open(&p->fm);
     193        else
     194            _fmutex_checked_create(&p->fm, p->flags);
     195
     196        /* This is important for the _rmutex semaphores of heaps! */
     197
     198        for (i = 1; i < p->count; ++i)
     199            _fmutex_checked_open(&p->fm);
     200
     201        /* Even if the semaphore was owned by the parent process, it's
     202           available now in the child process.  This might cause
     203           problems due to inconsistent data structures -- resolving
     204           this problem (by making sure that all _rmutex semaphores are
     205           available when calling fork()) is left to the application. */
     206    }
     207    LIBCLOG_RETURN_VOID();
     208}
  • TabularUnified trunk/src/emx/src/lib/process/sigaddse.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    44#include <signal.h>
    55#include <errno.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SIGNAL
     7#include <InnoTekLIBC/logstrict.h>
    68
    79int _STD(sigaddset) (sigset_t *set, int sig)
    810{
    9   if (sig < 1 || sig >= NSIG)
     11    LIBCLOG_ENTER("set=%p sig=%d\n", set, sig);
     12    int rc;
     13    if (sig < 1 || sig >= NSIG)
    1014    {
    11       errno = EINVAL;
    12       return -1;
     15        LIBC_ASSERTM_FAILED("invalid signal number %d\n", sig);
     16        errno = EINVAL;
     17        LIBCLOG_RETURN_INT(-1);
    1318    }
    14   return __sigaddset (set, sig);
     19    rc = __sigaddset(set, sig);
     20    LIBCLOG_RETURN_INT(rc);
    1521}
  • TabularUnified trunk/src/emx/src/lib/process/sigdelse.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    44#include <signal.h>
    55#include <errno.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SIGNAL
     7#include <InnoTekLIBC/logstrict.h>
    68
    7 int _STD(sigdelset) (sigset_t *set, int sig)
     9int _STD(sigdelset)(sigset_t *set, int sig)
    810{
    9   if (sig < 1 || sig >= NSIG)
     11    LIBCLOG_ENTER("set=%p sig=%d\n", set, sig);
     12    int rc;
     13    if (sig < 1 || sig >= NSIG)
    1014    {
    11       errno = EINVAL;
    12       return -1;
     15        LIBC_ASSERTM_FAILED("invalid signal number %d\n", sig);
     16        errno = EINVAL;
     17        LIBCLOG_RETURN_INT(-1);
    1318    }
    14   return __sigdelset (set, sig);
     19    rc = __sigdelset(set, sig);
     20    LIBCLOG_RETURN_INT(rc);
    1521}
  • TabularUnified trunk/src/emx/src/lib/process/sigempty.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <signal.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SIGNAL
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(sigemptyset) (sigset_t *set)
     8int _STD(sigemptyset)(sigset_t *set)
    79{
    8   return __sigemptyset (set);
     10    LIBCLOG_ENTER("set=%p\n", set);
     11    int rc = __sigemptyset(set);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/sigfills.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    33#include "libc-alias.h"
    44#include <signal.h>
     5#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SIGNAL
     6#include <InnoTekLIBC/logstrict.h>
    57
    6 int _STD(sigfillset) (sigset_t *set)
     8int _STD(sigfillset)(sigset_t *set)
    79{
    8   return __sigfillset (set);
     10    LIBCLOG_ENTER("set=%p\n", set);
     11    int rc = __sigfillset(set);
     12    LIBCLOG_RETURN_INT(rc);
    913}
  • TabularUnified trunk/src/emx/src/lib/process/sigismem.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    44#include <signal.h>
    55#include <errno.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SIGNAL
     7#include <InnoTekLIBC/logstrict.h>
    68
    7 int _STD(sigismember) (const sigset_t *set, int sig)
     9int _STD(sigismember)(const sigset_t *set, int sig)
    810{
    9   if (sig < 1 || sig >= NSIG)
     11    LIBCLOG_ENTER("set=%p sig=%d\n", set, sig);
     12    int rc;
     13    if (sig < 1 || sig >= NSIG)
    1014    {
    11       errno = EINVAL;
    12       return -1;
     15        LIBC_ASSERTM_FAILED("invalid signal number %d\n", sig);
     16        errno = EINVAL;
     17        LIBCLOG_RETURN_INT(-1);
    1318    }
    14   return __sigismember (set, sig);
     19    rc = __sigismember(set, sig);
     20    LIBCLOG_RETURN_INT(rc);
    1521}
  • TabularUnified trunk/src/emx/src/lib/process/smutex.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    77#include <sys/builtin.h>
    88#include <sys/smutex.h>
     9#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_MUTEX
     10#include <InnoTekLIBC/logstrict.h>
    911
    1012
    11 void __smutex_request_internal (volatile _smutex *sem)
     13void __smutex_request_internal(volatile _smutex *sem)
    1214{
    13   FS_VAR();
    14   FS_SAVE_LOAD();
    15   do
     15    LIBCLOG_ENTER("sem=%p\n", sem);
     16    FS_VAR();
     17    FS_SAVE_LOAD();
     18    do
    1619    {
    17       DosSleep (1);
    18     } while (__cxchg (sem, 1) != 0);
    19   FS_RESTORE();
     20        DosSleep(1);
     21    } while (__cxchg(sem, 1) != 0);
     22    FS_RESTORE();
     23    LIBCLOG_RETURN_VOID();
    2024}
  • TabularUnified trunk/src/emx/src/lib/process/spawnl.c

    • Property cvs2svn:cvs-rev changed from 1.6 to 1.7
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(spawnl) (int mode, const char *name, const char *arg0, ...)
     10int _STD(spawnl)(int mode, const char *name, const char *arg0, ...)
    911{
    10   int result;
    11 
    12   /* Note: Passing `&arg0' to spawnv() is not portable. */
    13 
    14   result = spawnv (mode, name, (char * const *)&arg0);
    15   return result;
     12    LIBCLOG_ENTER("mode=%#x name=%s arg0=%s ...\n", mode, name, arg0);
     13    /* Note: Passing `&arg0' to spawnv() is not portable. */
     14    int rc = spawnv (mode, name, (char * const *)&arg0);
     15    LIBCLOG_RETURN_INT(rc);
    1616}
  • TabularUnified trunk/src/emx/src/lib/process/spawnle.c

    • Property cvs2svn:cvs-rev changed from 1.6 to 1.7
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(spawnle) (int mode, const char *name, const char *arg0, ...)
     10int _STD(spawnle)(int mode, const char *name, const char *arg0, ...)
    911{
    10   va_list arg_ptr;
    11   char * const *env_ptr;
    12   int result;
     12    LIBCLOG_ENTER("mode=%#x name=%s arg0=%s ...\n", mode, name, arg0);
     13    va_list arg_ptr;
     14    char * const *env_ptr;
     15    int rc;
    1316
    14   va_start (arg_ptr, arg0);
    15   while (va_arg (arg_ptr, char *) != NULL)
    16     /* do nothing */;
    17   env_ptr = va_arg (arg_ptr, char * const *);
    18   va_end (arg_ptr);
     17    va_start(arg_ptr, arg0);
     18    while (va_arg(arg_ptr, char *) != NULL)
     19        /* do nothing */;
     20    env_ptr = va_arg(arg_ptr, char * const *);
     21    va_end(arg_ptr);
    1922
    20   /* Note: Passing `&arg0' to spawnve() is not portable. */
    21 
    22   result = spawnve (mode, name, (char * const *)&arg0, env_ptr);
    23   return result;
     23    /* Note: Passing `&arg0' to spawnve() is not portable. */
     24    rc = spawnve(mode, name, (char * const *)&arg0, env_ptr);
     25    LIBCLOG_RETURN_INT(rc);
    2426}
  • TabularUnified trunk/src/emx/src/lib/process/spawnlp.c

    • Property cvs2svn:cvs-rev changed from 1.6 to 1.7
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(spawnlp) (int mode, const char *name, const char *arg0, ...)
     10int _STD(spawnlp)(int mode, const char *name, const char *arg0, ...)
    911{
    10   int result;
    11 
    12   /* Note: Passing `&arg0' to spawnvp() is not portable. */
    13 
    14   result = spawnvp (mode, name, (char * const *)&arg0);
    15   return result;
     12    LIBCLOG_ENTER("mode=%#x name=%s arg0=%s ...\n", mode, name, arg0);
     13    /* Note: Passing `&arg0' to spawnvp() is not portable. */
     14    int rc = spawnvp(mode, name, (char * const *)&arg0);
     15    LIBCLOG_RETURN_INT(rc);
    1616}
  • TabularUnified trunk/src/emx/src/lib/process/spawnlpe.c

    • Property cvs2svn:cvs-rev changed from 1.7 to 1.8
    r1288 r1289  
    55#include <stdarg.h>
    66#include <process.h>
     7#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     8#include <InnoTekLIBC/logstrict.h>
    79
    8 int _STD(spawnlpe) (int mode, const char *name, const char *arg0, ...)
     10int _STD(spawnlpe)(int mode, const char *name, const char *arg0, ...)
    911{
    10   va_list arg_ptr;
    11   char * const *env_ptr;
    12   int result;
     12    LIBCLOG_ENTER("mode=%#x name=%s arg0=%s ...\n", mode, name, arg0);
     13    va_list arg_ptr;
     14    char * const *env_ptr;
     15    int rc;
    1316
    14   va_start (arg_ptr, arg0);
    15   while (va_arg (arg_ptr, char *) != NULL)
    16     /* do nothing */;
    17   env_ptr = va_arg (arg_ptr, char * const *);
    18   va_end (arg_ptr);
     17    va_start(arg_ptr, arg0);
     18    while (va_arg(arg_ptr, char *) != NULL)
     19        /* do nothing */;
     20    env_ptr = va_arg(arg_ptr, char * const *);
     21    va_end(arg_ptr);
    1922
    20   /* Note: Passing `&arg0' to spawnvpe() is not portable. */
     23    /* Note: Passing `&arg0' to spawnvpe() is not portable. */
    2124
    22   result = spawnvpe (mode, name, (char * const *)&arg0, env_ptr);
    23   return result;
     25    rc = spawnvpe(mode, name, (char * const *)&arg0, env_ptr);
     26    LIBCLOG_RETURN_INT(rc);
    2427}
  • TabularUnified trunk/src/emx/src/lib/process/spawnv.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    44#include <stddef.h>
    55#include <process.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     7#include <InnoTekLIBC/logstrict.h>
    68
    7 int _STD(spawnv) (int mode, const char *name, char * const argv[])
     9int _STD(spawnv)(int mode, const char *name, char * const argv[])
    810{
    9   return spawnve (mode, name, argv, NULL);
     11    LIBCLOG_ENTER("mode=%#x name=%s arg=%p\n", mode, name, argv);
     12    int rc = spawnve (mode, name, argv, NULL);
     13    LIBCLOG_RETURN_INT(rc);
    1014}
  • TabularUnified trunk/src/emx/src/lib/process/spawnve.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    77#include <errno.h>
    88#include <alloca.h>
     9#include <sys/syslimits.h>
    910#include <emx/startup.h>
    1011#include <emx/syscalls.h>
     12#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     13#include <InnoTekLIBC/logstrict.h>
    1114
    12 int _STD(spawnve) (int mode, const char *name, char * const argv[],
    13   char * const envp[])
     15int _STD(spawnve)(int mode, const char *name, char * const argv[], char * const envp[])
    1416{
    15   struct _new_proc np;
    16   int i, size, n;
    17   const char * const *p;
    18   char *d;
    19   char exe[512];
     17    LIBCLOG_ENTER("mode=%#x name=%s argv=%p envp=%p\n", mode, name, argv, envp);
     18    struct _new_proc np;
     19    int i, size, n, rc;
     20    const char * const *p;
     21    char *d;
     22    char exe[PATH_MAX];
    2023
    21   /* Kludge alert: Unfortunately, the `mode' member was made only 16
    22      bits wide originally.  Bit 15 is used to indicate that the
    23      `mode2' member is used, which holds the upper 16 bits of MODE.
    24      This allows using emx 0.8 applications with emx 0.9 as emx
    25      doesn't look at `mode2' unless bit 15 of `mode' is set.  Of
    26      course, this fails if an (old) application program sets bit 15 of
    27      MODE. */
     24    /*
     25     * Init the syscall struct np.
     26     */
     27    /* mode */
     28    np.mode = mode;
     29    /* exe name */
     30    if (strlen(name) >= sizeof(exe) - 4)
     31    {
     32        LIBC_ASSERTM_FAILED("name is too long, %d bytes: %s\n", strlen(name), name);
     33        errno = ENAMETOOLONG;
     34        LIBCLOG_RETURN_INT(-1);
     35    }
     36    strcpy(exe, name);
     37    _defext(exe, "exe");
     38    LIBCLOG_MSG("exe=%s\n", exe);
     39    np.fname_off = (unsigned long)exe;
    2840
    29   np.mode = (unsigned short)(mode | 0x8000);
    30   np.mode2 = (unsigned short)((unsigned)mode >> 16);
     41    /* calc environment size */
     42    if (envp == NULL)
     43        envp = environ;
     44    size = 1; n = 0;
     45    for (p = (const char * const *)envp; *p != NULL; ++p)
     46    {
     47        ++n;
     48        size += 1 + strlen(*p);
     49    }
     50    d = alloca(size);
     51    LIBCLOG_MSG("environment: %d bytes %d entries block=%p\n", size, n, d);
     52    np.env_count = n; np.env_size = size;
     53    np.env_off = (unsigned long)d;
    3154
    32   if (envp == NULL) envp = environ;
    33   if (strlen (name) >= sizeof (exe) - 4)
     55    /* copy environment */
     56    for (p = (const char * const *)envp; *p != NULL; ++p)
    3457    {
    35       errno = ENAMETOOLONG;
    36       return -1;
     58        i = strlen(*p);
     59        memcpy(d, *p, i + 1);
     60        d += i + 1;
    3761    }
    38   strcpy (exe, name);
    39   _defext (exe, "exe");
    40   np.fname_off = (unsigned long)exe;
    41   size = 1; n = 0;
    42   for (p = (const char * const *)envp; *p != NULL; ++p)
     62    *d = 0;
     63
     64    /* calc argument size */
     65    size = 0; n = 0;
     66    for (p = (const char * const *)argv; *p != NULL; ++p)
    4367    {
    44       ++n; size += 1 + strlen (*p);
     68        ++n;
     69        size += 2 + strlen(*p);
    4570    }
    46   d = alloca (size);
    47   np.env_count = n; np.env_size = size;
    48   np.env_off = (unsigned long)d;
    49   for (p = (const char * const *)envp; *p != NULL; ++p)
     71    d = alloca(size);
     72    LIBCLOG_MSG("arguments: %d bytes %d entries block=%p\n", size, n, d);
     73    np.arg_count = n; np.arg_size = size;
     74    np.arg_off = (unsigned long)d;
     75
     76    /* copy arguments */
     77    for (p = (const char * const *)argv; *p != NULL; ++p)
    5078    {
    51       i = strlen (*p);
    52       memcpy (d, *p, i+1);
    53       d += i+1;
     79        i = strlen(*p);
     80        *(unsigned char *)d++ = _ARG_NONZERO;
     81        memcpy(d, *p, i + 1);
     82        d += i + 1;
    5483    }
    55   *d = 0;
    56   size = 0; n = 0;
    57   for (p = (const char * const *)argv; *p != NULL; ++p)
    58     {
    59       ++n; size += 2 + strlen (*p);
    60     }
    61   d = alloca (size);
    62   np.arg_count = n; np.arg_size = size;
    63   np.arg_off = (unsigned long)d;
    64   for (p = (const char * const *)argv; *p != NULL; ++p)
    65     {
    66       i = strlen (*p);
    67       *d++ = _ARG_NONZERO;
    68       memcpy (d, *p, i+1);
    69       d += i+1;
    70     }
    71   i = __spawnve (&np);
    72   return i;
     84
     85    /*
     86     * Call syscall.
     87     */
     88    rc = __spawnve(&np);
     89    LIBCLOG_RETURN_INT(rc);
    7390}
  • TabularUnified trunk/src/emx/src/lib/process/spawnvp.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    44#include <stddef.h>
    55#include <process.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     7#include <InnoTekLIBC/logstrict.h>
    68
    79int _STD(spawnvp) (int mode, const char *name, char * const argv[])
    810{
    9   return spawnvpe (mode, name, argv, NULL);
     11    LIBCLOG_ENTER("mode=%#x name=%s argv=%p\n", mode, name, argv);
     12    int rc = spawnvpe (mode, name, argv, NULL);
     13    LIBCLOG_RETURN_INT(rc);
    1014}
  • TabularUnified trunk/src/emx/src/lib/process/spawnvpe.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    66#include <string.h>
    77#include <errno.h>
     8#include <sys/syslimits.h>
     9#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     10#include <InnoTekLIBC/logstrict.h>
    811
    9 int _STD(spawnvpe) (int mode, const char *name, char * const argv[],
    10   char * const envp[])
     12int _STD(spawnvpe)(int mode, const char *name, char * const argv[], char * const envp[])
    1113{
    12   char exe[512];
    13   char path[512];
     14    LIBCLOG_ENTER("mode=%#x name=%s argv=%p envp=%p\n", mode, name, argv, envp);
     15    char    exe[PATH_MAX];
     16    char    path[PATH_MAX];
     17    int     rc;
    1418
    15   if (strlen (name) >= sizeof (exe) - 4)
     19    if (strlen(name) >= sizeof(exe) - 4)
    1620    {
    17       errno = ENAMETOOLONG;
    18       return -1;
     21        LIBC_ASSERTM_FAILED("name is too long, %d bytes: %s\n", strlen(name), name);
     22        errno = ENAMETOOLONG;
     23        LIBCLOG_RETURN_INT(-1);
    1924    }
    20   strcpy (exe, name);
    21   _defext (exe, "exe");
    22   if (_path (path, exe) != 0)
    23     return -1;
    24   return spawnve (mode, path, argv, envp);
     25    strcpy(exe, name);
     26    _defext(exe, "exe");
     27    if (!_path(path, exe))
     28        LIBCLOG_RETURN_INT(-1);
     29    rc = spawnve(mode, path, argv, envp);
     30    LIBCLOG_RETURN_INT(rc);
    2531}
  • TabularUnified trunk/src/emx/src/lib/process/system.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    77#include <io.h>
    88#include <errno.h>
     9#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     10#include <InnoTekLIBC/logstrict.h>
    911
    10 int _STD(system) (const char *name)
     12int _STD(system)(const char *name)
    1113{
    12   int rc;
    13   const char *sh, *base, *opt;
     14    LIBCLOG_ENTER("name=%s\n", name);
     15    int rc;
     16    const char *sh, *base, *opt;
    1417
    15   sh = getenv ("EMXSHELL");
    16   if (sh == NULL)
    17     sh = getenv ("COMSPEC");
    18   if (sh == NULL)
     18    sh = getenv("EMXSHELL");
     19    if (sh == NULL)
     20        sh = getenv("COMSPEC");
     21    if (sh == NULL)
    1922    {
    20       errno = ENOENT;
    21       return -1;
     23        errno = ENOENT;
     24        LIBCLOG_RETURN_INT(-1);
    2225    }
    23   if (name == NULL)   /* Check for command interpreter */
    24     return access (sh, 0) == 0;
    25   if (*name == 0)
    26     rc = spawnlp (P_WAIT, sh, sh, (char *)0);
    27   else
     26    LIBCLOG_MSG("using shell: %s\n", sh);
     27    if (name == NULL)   /* Check for command interpreter */
    2828    {
    29       base = _getname (sh);
    30       if (stricmp (base, "cmd.exe") == 0
    31        || stricmp (base, "4os2.exe") == 0
    32        || stricmp (base, "command.com") == 0
    33        || stricmp (base, "4dos.com") == 0)
    34         opt = "/c";
    35       else
    36         opt = "-c";
    37       rc = spawnlp (P_WAIT, sh, sh, opt, name, (char *)0);
     29        LIBCLOG_MSG("check shell access\n");
     30        rc = access(sh, 0) == 0;
     31        LIBCLOG_RETURN_INT(rc);
    3832    }
    39   return rc;
     33    if (*name == 0)
     34        rc = spawnlp(P_WAIT, sh, sh, (char *)0);
     35    else
     36    {
     37        base = _getname(sh);
     38        if (stricmp(base, "cmd.exe") == 0
     39            || stricmp(base, "4os2.exe") == 0
     40            || stricmp(base, "command.com") == 0
     41            || stricmp(base, "4dos.com") == 0)
     42            opt = "/c";
     43        else
     44            opt = "-c";
     45        rc = spawnlp(P_WAIT, sh, sh, opt, name, (char *)0);
     46    }
     47    LIBCLOG_RETURN_INT(rc);
    4048}
  • TabularUnified trunk/src/emx/src/lib/process/thread_internals.c

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.2
    r1288 r1289  
    3636#include <InnoTekLIBC/thread.h>
    3737#include <InnoTekLIBC/backend.h>
     38#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_THREAD
     39#include <InnoTekLIBC/logstrict.h>
    3840
    3941
     
    6264__LIBC_PTHREAD __libc_threadCurrentSlow(void)
    6365{
     66    LIBCLOG_ENTER("\n");
    6467    if (!*__libc_gpTLS)
    6568    {
     
    8386
    8487        *__libc_gpTLS = pThrd;
     88        LIBCLOG_MSG("Created thread block %p\n", pThrd);
    8589    }
    8690
    87     return *__libc_gpTLS;
     91    LIBCLOG_RETURN_P(*__libc_gpTLS);
    8892}
    8993
     
    9195__LIBC_PTHREAD __libc_threadAlloc(void)
    9296{
     97    LIBCLOG_ENTER("\n");
    9398    /*
    9499     * No need to use the pre allocated here since the current thread will
     
    98103    if (pThrd)
    99104        threadInit(pThrd);
    100     return pThrd;
     105    LIBCLOG_RETURN_P(pThrd);
    101106}
    102107
     
    104109void  __libc_threadFree(__LIBC_PTHREAD pThrd)
    105110{
     111    LIBCLOG_ENTER("pThrd=%p\n", pThrd);
    106112    /*
    107113     * Clean up members.
     
    116122    else
    117123        __lxchg(&gfPreAllocThrd, 0);
     124    LIBCLOG_RETURN_VOID();
    118125}
    119126
  • TabularUnified trunk/src/emx/src/lib/process/threadst.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    44#include <stdlib.h>
    55#include <InnoTekLIBC/thread.h>
     6#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_THREAD
     7#include <InnoTekLIBC/logstrict.h>
    68
    79/**
    810 * @obsolete
    911 */
    10 void **_threadstore (void)
     12void **_threadstore(void)
    1113{
    12   return &__libc_threadCurrent()->pvThreadStoreVar;
     14    LIBCLOG_ENTER("\n");
     15    void **ppv = &__libc_threadCurrent()->pvThreadStoreVar;
     16    LIBCLOG_RETURN_P(ppv);
    1317}
  • TabularUnified trunk/src/emx/src/lib/process/wait.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    66#include <errno.h>
    77#include <emx/syscalls.h>
     8#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     9#include <InnoTekLIBC/logstrict.h>
    810
    9 int _STD(wait) (int *status)
     11int _STD(wait)(int *status)
    1012{
    11   int dummy;
     13    LIBCLOG_ENTER("status=%p\n", status);
     14    int dummy;
     15    int rc;
    1216
    13   if (status == NULL)
    14     status = &dummy;
    15   return __wait (status);
     17    if (status == NULL)
     18        status = &dummy;
     19    rc = __wait(status);
     20    LIBCLOG_RETURN_MSG(rc,"ret %d (%#x). *status=%#x\n", rc, rc, *status);
    1621}
  • TabularUnified trunk/src/emx/src/lib/process/waitpid.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    11/* waitpid.c (emx+gcc) -- Copyright (c) 1993-1996 by Eberhard Mattes */
     2
    23
    34#include "libc-alias.h"
     
    67#include <errno.h>
    78#include <emx/syscalls.h>
     9#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_PROCESS
     10#include <InnoTekLIBC/logstrict.h>
    811
    9 int _STD(waitpid) (int pid, int *status, int options)
     12int _STD(waitpid)(int pid, int *status, int options)
    1013{
    11   int dummy;
     14    LIBCLOG_ENTER("pid=%d status=%p options=%#x\n", pid, status, options);
     15    int dummy;
     16    int rc;
    1217
    13   if (status == NULL)
    14     status = &dummy;
    15   return __waitpid (pid, status, options);
     18    if (status == NULL)
     19        status = &dummy;
     20    rc = __waitpid(pid, status, options);
     21    LIBCLOG_RETURN_MSG(rc,"ret %d (%#x). *status=%#x\n", rc, rc, *status);
    1622}
  • TabularUnified trunk/src/emx/src/lib/startup/exit.c

    • Property cvs2svn:cvs-rev changed from 1.5 to 1.6
    r1288 r1289  
    11/* exit.c (emx+gcc) -- Copyright (c) 1990-1998 by Eberhard Mattes */
     2
    23
    34#include "libc-alias.h"
    45#include <stdlib.h>
    56#include <emx/startup.h>
    6 #include <emx/libclog.h>
     7#define __LIBC_LOG_GROUP  __LIBC_LOG_GRP_INITTERM
     8#include <InnotekLIBC/logstrict.h>
    79
    810void (*_atexit_v[64])(void);
  • TabularUnified trunk/src/emx/src/lib/startup/startup.c

    • Property cvs2svn:cvs-rev changed from 1.10 to 1.11
    r1288 r1289  
    99#include <emx/syscalls.h>
    1010#include <emx/startup.h>
    11 #include <emx/libclog.h>
     11#define __LIBC_LOG_GROUP    __LIBC_LOG_GRP_INITTERM
     12#include <InnoTekLIBC/logstrict.h>
    1213
    1314extern int __crtinit1__;
  • TabularUnified trunk/src/emx/src/lib/sys/__spawnve.c

    • Property cvs2svn:cvs-rev changed from 1.5 to 1.6
    r1288 r1289  
    4646
    4747  mode = np->mode;
    48   if (np->mode & 0x8000)
    49     mode |= np->mode2 << 16;
    50 
    5148  switch (mode & 0xff)
    5249    {
  • TabularUnified trunk/src/emx/src/lib/sys/usleep.c

    • Property cvs2svn:cvs-rev changed from 1.1 to 1.2
    r1288 r1289  
    2626 */
    2727
    28 
    2928/*******************************************************************************
    3029*   Header Files                                                               *
     
    3332#include <unistd.h>
    3433#include <errno.h>
     34#define __LIBC_LOG_GROUP    __LIBC_LOG_GRP_PROCESS
     35#include <InnoTekLIBC/logstrict.h>
     36
    3537#define INCL_BASE
    3638#define INCL_FSMACROS
    3739#include <os2.h>
    38 #include <emx/libclog.h>
    3940
    4041
  • TabularUnified trunk/src/emx/src/libsocket/_getsockhandle.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/socket.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/_impsockhandle.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3434#include <sys/fcntl.h>
    3535#include <emx/io.h>
    36 #include <emx/libclog.h>
     36#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     37#include <InnoTekLIBC/logstrict.h>
    3738#include "socket.h"
    3839
  • TabularUnified trunk/src/emx/src/libsocket/accept.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/bind.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/bsdselect.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    3434#include <sys/time.h>
    3535#include <emx/io.h>
    36 #include <emx/libclog.h>
     36#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     37#include <InnoTekLIBC/logstrict.h>
    3738#include "socket.h"
    3839
  • TabularUnified trunk/src/emx/src/libsocket/connect.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/getpeername.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/getsockname.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/getsockopt.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/herror.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    99#include <sys/types.h>
    1010#include <netdb.h>
    11 #include <emx/libclog.h>
     11#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     12#include <InnoTekLIBC/logstrict.h>
    1213
    1314extern int h_errno;
  • TabularUnified trunk/src/emx/src/libsocket/listen.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/os2_ioctl.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3434#include <sys/fcntl.h>
    3535#include <emx/io.h>
    36 #include <emx/libclog.h>
     36#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     37#include <InnoTekLIBC/logstrict.h>
    3738#include "socket.h"
    3839
  • TabularUnified trunk/src/emx/src/libsocket/os2_select.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/recv.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/recvfrom.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/recvmsg.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/send.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/sendmsg.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/sendto.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/setsockopt.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/shutdown.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/so_cancel.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/so_ioctl.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    3535#include <sys/ioccom.h>
    3636#include <emx/io.h>
    37 #include <emx/libclog.h>
     37#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     38#include <InnoTekLIBC/logstrict.h>
    3839#include "socket.h"
    3940
  • TabularUnified trunk/src/emx/src/libsocket/so_readv.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/so_writev.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/soabort.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/sock_errno.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    1818#include <sys/fcntl.h>
    1919#include <emx/io.h>
    20 #include <emx/libclog.h>
     20#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     21#include <InnoTekLIBC/logstrict.h>
    2122#include "socket.h"
    2223
  • TabularUnified trunk/src/emx/src/libsocket/socket.c

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
  • TabularUnified trunk/src/emx/src/libsocket/socketops.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    5050#include <sys/filio.h>
    5151#include <emx/io.h>
    52 #include <emx/libclog.h>
     52#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     53#include <InnoTekLIBC/logstrict.h>
    5354#include "socket.h"
    5455
  • TabularUnified trunk/src/emx/src/libsocket/socketpair.c

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r1288 r1289  
    2828#include <sys/fcntl.h>
    2929#include <emx/io.h>
    30 #include <emx/libclog.h>
     30#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     31#include <InnoTekLIBC/logstrict.h>
    3132#include "socket.h"
    3233
  • TabularUnified trunk/src/emx/src/libsocket/soclose.c

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r1288 r1289  
    3333#include <sys/fcntl.h>
    3434#include <emx/io.h>
    35 #include <emx/libclog.h>
     35#define __LIBC_LOG_GROUP __LIBC_LOG_GRP_SOCKET
     36#include <InnoTekLIBC/logstrict.h>
    3637#include "socket.h"
    3738
Note: See TracChangeset for help on using the changeset viewer.