musl_windows_arm64.go (33196B)
1 // Code generated by 'ccgo -D__environ=environ -export-externs X -hide __syscall0,__syscall1,__syscall2,__syscall3,__syscall4,__syscall5,__syscall6 -nostdinc -nostdlib -o ../musl_windows_arm64.go -pkgname libc -static-locals-prefix _s -Iarch\aarch64 -Iarch/generic -Iobj/src/internal -Isrc/include -Isrc/internal -Iobj/include -Iinclude copyright.c src/ctype/isalnum.c src/ctype/isalpha.c src/ctype/isdigit.c src/ctype/islower.c src/ctype/isprint.c src/ctype/isspace.c src/ctype/isxdigit.c src/env/putenv.c src/env/setenv.c src/env/unsetenv.c src/multibyte/wcrtomb.c src/multibyte/wcsrtombs.c src/multibyte/wcstombs.c src/stdlib/bsearch.c src/string/strchrnul.c src/string/strdup.c', DO NOT EDIT. 2 3 package libc 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 ) 11 12 var _ = math.Pi 13 var _ reflect.Kind 14 var _ atomic.Value 15 var _ unsafe.Pointer 16 17 // musl as a whole is licensed under the following standard MIT license: 18 // 19 // ---------------------------------------------------------------------- 20 // Copyright © 2005-2020 Rich Felker, et al. 21 // 22 // Permission is hereby granted, free of charge, to any person obtaining 23 // a copy of this software and associated documentation files (the 24 // "Software"), to deal in the Software without restriction, including 25 // without limitation the rights to use, copy, modify, merge, publish, 26 // distribute, sublicense, and/or sell copies of the Software, and to 27 // permit persons to whom the Software is furnished to do so, subject to 28 // the following conditions: 29 // 30 // The above copyright notice and this permission notice shall be 31 // included in all copies or substantial portions of the Software. 32 // 33 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 34 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 35 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 36 // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 37 // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 38 // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 39 // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 40 // ---------------------------------------------------------------------- 41 // 42 // Authors/contributors include: 43 // 44 // A. Wilcox 45 // Ada Worcester 46 // Alex Dowad 47 // Alex Suykov 48 // Alexander Monakov 49 // Andre McCurdy 50 // Andrew Kelley 51 // Anthony G. Basile 52 // Aric Belsito 53 // Arvid Picciani 54 // Bartosz Brachaczek 55 // Benjamin Peterson 56 // Bobby Bingham 57 // Boris Brezillon 58 // Brent Cook 59 // Chris Spiegel 60 // Clément Vasseur 61 // Daniel Micay 62 // Daniel Sabogal 63 // Daurnimator 64 // David Carlier 65 // David Edelsohn 66 // Denys Vlasenko 67 // Dmitry Ivanov 68 // Dmitry V. Levin 69 // Drew DeVault 70 // Emil Renner Berthing 71 // Fangrui Song 72 // Felix Fietkau 73 // Felix Janda 74 // Gianluca Anzolin 75 // Hauke Mehrtens 76 // He X 77 // Hiltjo Posthuma 78 // Isaac Dunham 79 // Jaydeep Patil 80 // Jens Gustedt 81 // Jeremy Huntwork 82 // Jo-Philipp Wich 83 // Joakim Sindholt 84 // John Spencer 85 // Julien Ramseier 86 // Justin Cormack 87 // Kaarle Ritvanen 88 // Khem Raj 89 // Kylie McClain 90 // Leah Neukirchen 91 // Luca Barbato 92 // Luka Perkov 93 // M Farkas-Dyck (Strake) 94 // Mahesh Bodapati 95 // Markus Wichmann 96 // Masanori Ogino 97 // Michael Clark 98 // Michael Forney 99 // Mikhail Kremnyov 100 // Natanael Copa 101 // Nicholas J. Kain 102 // orc 103 // Pascal Cuoq 104 // Patrick Oppenlander 105 // Petr Hosek 106 // Petr Skocik 107 // Pierre Carrier 108 // Reini Urban 109 // Rich Felker 110 // Richard Pennington 111 // Ryan Fairfax 112 // Samuel Holland 113 // Segev Finer 114 // Shiz 115 // sin 116 // Solar Designer 117 // Stefan Kristiansson 118 // Stefan O'Rear 119 // Szabolcs Nagy 120 // Timo Teräs 121 // Trutz Behn 122 // Valentin Ochs 123 // Will Dietz 124 // William Haddon 125 // William Pitcock 126 // 127 // Portions of this software are derived from third-party works licensed 128 // under terms compatible with the above MIT license: 129 // 130 // The TRE regular expression implementation (src/regex/reg* and 131 // src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed 132 // under a 2-clause BSD license (license text in the source files). The 133 // included version has been heavily modified by Rich Felker in 2012, in 134 // the interests of size, simplicity, and namespace cleanliness. 135 // 136 // Much of the math library code (src/math/* and src/complex/*) is 137 // Copyright © 1993,2004 Sun Microsystems or 138 // Copyright © 2003-2011 David Schultz or 139 // Copyright © 2003-2009 Steven G. Kargl or 140 // Copyright © 2003-2009 Bruce D. Evans or 141 // Copyright © 2008 Stephen L. Moshier or 142 // Copyright © 2017-2018 Arm Limited 143 // and labelled as such in comments in the individual source files. All 144 // have been licensed under extremely permissive terms. 145 // 146 // The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 147 // The Android Open Source Project and is licensed under a two-clause BSD 148 // license. It was taken from Bionic libc, used on Android. 149 // 150 // The AArch64 memcpy and memset code (src/string/aarch64/*) are 151 // Copyright © 1999-2019, Arm Limited. 152 // 153 // The implementation of DES for crypt (src/crypt/crypt_des.c) is 154 // Copyright © 1994 David Burren. It is licensed under a BSD license. 155 // 156 // The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was 157 // originally written by Solar Designer and placed into the public 158 // domain. The code also comes with a fallback permissive license for use 159 // in jurisdictions that may not recognize the public domain. 160 // 161 // The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 162 // Valentin Ochs and is licensed under an MIT-style license. 163 // 164 // The x86_64 port was written by Nicholas J. Kain and is licensed under 165 // the standard MIT terms. 166 // 167 // The mips and microblaze ports were originally written by Richard 168 // Pennington for use in the ellcc project. The original code was adapted 169 // by Rich Felker for build system and code conventions during upstream 170 // integration. It is licensed under the standard MIT terms. 171 // 172 // The mips64 port was contributed by Imagination Technologies and is 173 // licensed under the standard MIT terms. 174 // 175 // The powerpc port was also originally written by Richard Pennington, 176 // and later supplemented and integrated by John Spencer. It is licensed 177 // under the standard MIT terms. 178 // 179 // All other files which have no copyright comments are original works 180 // produced specifically for use as part of this library, written either 181 // by Rich Felker, the main author of the library, or by one or more 182 // contibutors listed above. Details on authorship of individual files 183 // can be found in the git version control history of the project. The 184 // omission of copyright and license comments in each file is in the 185 // interest of source tree size. 186 // 187 // In addition, permission is hereby granted for all public header files 188 // (include/* and arch/*/bits/*) and crt files intended to be linked into 189 // applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit 190 // the copyright notice and permission notice otherwise required by the 191 // license, and to use these files without any requirement of 192 // attribution. These files include substantial contributions from: 193 // 194 // Bobby Bingham 195 // John Spencer 196 // Nicholas J. Kain 197 // Rich Felker 198 // Richard Pennington 199 // Stefan Kristiansson 200 // Szabolcs Nagy 201 // 202 // all of whom have explicitly granted such permission. 203 // 204 // This file previously contained text expressing a belief that most of 205 // the files covered by the above exception were sufficiently trivial not 206 // to be subject to copyright, resulting in confusion over whether it 207 // negated the permissions granted in the license. In the spirit of 208 // permissive licensing, and of not having licensing issues being an 209 // obstacle to adoption, that text has been removed. 210 const ( /* copyright.c:194:1: */ 211 __musl__copyright__ = 0 212 ) 213 214 const ( /* pthread_impl.h:58:1: */ 215 DT_EXITING = 0 216 DT_JOINABLE = 1 217 DT_DETACHED = 2 218 ) 219 220 type ptrdiff_t = int64 /* <builtin>:3:26 */ 221 222 type size_t = uint64 /* <builtin>:9:23 */ 223 224 type wchar_t = uint16 /* <builtin>:15:24 */ 225 226 type va_list = uintptr /* <builtin>:50:27 */ 227 228 type __locale_struct = struct{ cat [6]uintptr } /* alltypes.h:351:9 */ 229 230 type locale_t = uintptr /* alltypes.h:351:32 */ 231 232 func Xisalnum(tls *TLS, c int32) int32 { /* isalnum.c:3:5: */ 233 return Bool32(func() int32 { 234 if 0 != 0 { 235 return Xisalpha(tls, c) 236 } 237 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) 238 }() != 0 || func() int32 { 239 if 0 != 0 { 240 return Xisdigit(tls, c) 241 } 242 return Bool32(uint32(c)-uint32('0') < uint32(10)) 243 }() != 0) 244 } 245 246 func X__isalnum_l(tls *TLS, c int32, l locale_t) int32 { /* isalnum.c:8:5: */ 247 return Xisalnum(tls, c) 248 } 249 250 func Xisalpha(tls *TLS, c int32) int32 { /* isalpha.c:4:5: */ 251 return Bool32(uint32(c)|uint32(32)-uint32('a') < uint32(26)) 252 } 253 254 func X__isalpha_l(tls *TLS, c int32, l locale_t) int32 { /* isalpha.c:9:5: */ 255 return Xisalpha(tls, c) 256 } 257 258 func Xisdigit(tls *TLS, c int32) int32 { /* isdigit.c:4:5: */ 259 return Bool32(uint32(c)-uint32('0') < uint32(10)) 260 } 261 262 func X__isdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isdigit.c:9:5: */ 263 return Xisdigit(tls, c) 264 } 265 266 func Xislower(tls *TLS, c int32) int32 { /* islower.c:4:5: */ 267 return Bool32(uint32(c)-uint32('a') < uint32(26)) 268 } 269 270 func X__islower_l(tls *TLS, c int32, l locale_t) int32 { /* islower.c:9:5: */ 271 return Xislower(tls, c) 272 } 273 274 func Xisprint(tls *TLS, c int32) int32 { /* isprint.c:4:5: */ 275 return Bool32(uint32(c)-uint32(0x20) < uint32(0x5f)) 276 } 277 278 func X__isprint_l(tls *TLS, c int32, l locale_t) int32 { /* isprint.c:9:5: */ 279 return Xisprint(tls, c) 280 } 281 282 func Xisspace(tls *TLS, c int32) int32 { /* isspace.c:4:5: */ 283 return Bool32(c == ' ' || uint32(c)-uint32('\t') < uint32(5)) 284 } 285 286 func X__isspace_l(tls *TLS, c int32, l locale_t) int32 { /* isspace.c:9:5: */ 287 return Xisspace(tls, c) 288 } 289 290 func Xisxdigit(tls *TLS, c int32) int32 { /* isxdigit.c:3:5: */ 291 return Bool32(func() int32 { 292 if 0 != 0 { 293 return Xisdigit(tls, c) 294 } 295 return Bool32(uint32(c)-uint32('0') < uint32(10)) 296 }() != 0 || uint32(c)|uint32(32)-uint32('a') < uint32(6)) 297 } 298 299 func X__isxdigit_l(tls *TLS, c int32, l locale_t) int32 { /* isxdigit.c:8:5: */ 300 return Xisxdigit(tls, c) 301 } 302 303 type div_t = struct { 304 quot int32 305 rem int32 306 } /* stdlib.h:62:35 */ 307 type ldiv_t = struct { 308 quot int32 309 rem int32 310 } /* stdlib.h:63:36 */ 311 type lldiv_t = struct { 312 quot int64 313 rem int64 314 } /* stdlib.h:64:41 */ 315 316 type ssize_t = int32 /* alltypes.h:73:15 */ 317 318 type intptr_t = int32 /* alltypes.h:78:15 */ 319 320 type off_t = int32 /* alltypes.h:170:16 */ 321 322 type pid_t = int32 /* alltypes.h:243:13 */ 323 324 type uid_t = uint32 /* alltypes.h:253:18 */ 325 326 type gid_t = uint32 /* alltypes.h:258:18 */ 327 328 type useconds_t = uint32 /* alltypes.h:268:18 */ 329 330 func X__putenv(tls *TLS, s uintptr, l size_t, r uintptr) int32 { /* putenv.c:8:5: */ 331 var i size_t 332 var newenv uintptr 333 var tmp uintptr 334 //TODO for (char **e = __environ; *e; e++, i++) 335 var e uintptr 336 i = uint64(0) 337 if !(Environ() != 0) { 338 goto __1 339 } 340 //TODO for (char **e = __environ; *e; e++, i++) 341 e = Environ() 342 __2: 343 if !(*(*uintptr)(unsafe.Pointer(e)) != 0) { 344 goto __4 345 } 346 if !!(Xstrncmp(tls, s, *(*uintptr)(unsafe.Pointer(e)), l+uint64(1)) != 0) { 347 goto __5 348 } 349 tmp = *(*uintptr)(unsafe.Pointer(e)) 350 *(*uintptr)(unsafe.Pointer(e)) = s 351 X__env_rm_add(tls, tmp, r) 352 return 0 353 __5: 354 ; 355 goto __3 356 __3: 357 e += 8 358 i++ 359 goto __2 360 goto __4 361 __4: 362 ; 363 __1: 364 ; 365 if !(Environ() == _soldenv) { 366 goto __6 367 } 368 newenv = Xrealloc(tls, _soldenv, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2))) 369 if !!(newenv != 0) { 370 goto __8 371 } 372 goto oom 373 __8: 374 ; 375 goto __7 376 __6: 377 newenv = Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*(i+uint64(2))) 378 if !!(newenv != 0) { 379 goto __9 380 } 381 goto oom 382 __9: 383 ; 384 if !(i != 0) { 385 goto __10 386 } 387 Xmemcpy(tls, newenv, Environ(), uint64(unsafe.Sizeof(uintptr(0)))*i) 388 __10: 389 ; 390 Xfree(tls, _soldenv) 391 __7: 392 ; 393 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i)*8)) = s 394 *(*uintptr)(unsafe.Pointer(newenv + uintptr(i+uint64(1))*8)) = uintptr(0) 395 *(*uintptr)(unsafe.Pointer(EnvironP())) = AssignPtrUintptr(uintptr(unsafe.Pointer(&_soldenv)), newenv) 396 if !(r != 0) { 397 goto __11 398 } 399 X__env_rm_add(tls, uintptr(0), r) 400 __11: 401 ; 402 return 0 403 oom: 404 Xfree(tls, r) 405 return -1 406 } 407 408 var _soldenv uintptr /* putenv.c:22:14: */ 409 410 func Xputenv(tls *TLS, s uintptr) int32 { /* putenv.c:43:5: */ 411 var l size_t = size_t((int64(X__strchrnul(tls, s, '=')) - int64(s)) / 1) 412 if !(l != 0) || !(int32(*(*int8)(unsafe.Pointer(s + uintptr(l)))) != 0) { 413 return Xunsetenv(tls, s) 414 } 415 return X__putenv(tls, s, l, uintptr(0)) 416 } 417 418 func X__env_rm_add(tls *TLS, old uintptr, new uintptr) { /* setenv.c:5:6: */ 419 //TODO for (size_t i=0; i < env_alloced_n; i++) 420 var i size_t = uint64(0) 421 for ; i < _senv_alloced_n; i++ { 422 if *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) == old { 423 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new 424 Xfree(tls, old) 425 return 426 } else if !(int32(*(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8))) != 0) && new != 0 { 427 *(*uintptr)(unsafe.Pointer(_senv_alloced + uintptr(i)*8)) = new 428 new = uintptr(0) 429 } 430 } 431 if !(new != 0) { 432 return 433 } 434 var t uintptr = Xrealloc(tls, _senv_alloced, uint64(unsafe.Sizeof(uintptr(0)))*(_senv_alloced_n+uint64(1))) 435 if !(t != 0) { 436 return 437 } 438 *(*uintptr)(unsafe.Pointer(AssignPtrUintptr(uintptr(unsafe.Pointer(&_senv_alloced)), t) + uintptr(PostIncUint64(&_senv_alloced_n, 1))*8)) = new 439 } 440 441 var _senv_alloced uintptr /* setenv.c:7:14: */ 442 var _senv_alloced_n size_t /* setenv.c:8:16: */ 443 444 func Xsetenv(tls *TLS, var1 uintptr, value uintptr, overwrite int32) int32 { /* setenv.c:26:5: */ 445 var s uintptr 446 var l1 size_t 447 var l2 size_t 448 449 if !(var1 != 0) || !(int32(AssignUint64(&l1, size_t((int64(X__strchrnul(tls, var1, '='))-int64(var1))/1))) != 0) || *(*int8)(unsafe.Pointer(var1 + uintptr(l1))) != 0 { 450 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 451 return -1 452 } 453 if !(overwrite != 0) && Xgetenv(tls, var1) != 0 { 454 return 0 455 } 456 457 l2 = Xstrlen(tls, value) 458 s = Xmalloc(tls, l1+l2+uint64(2)) 459 if !(s != 0) { 460 return -1 461 } 462 Xmemcpy(tls, s, var1, l1) 463 *(*int8)(unsafe.Pointer(s + uintptr(l1))) = int8('=') 464 Xmemcpy(tls, s+uintptr(l1)+uintptr(1), value, l2+uint64(1)) 465 return X__putenv(tls, s, l1, s) 466 } 467 468 func Xunsetenv(tls *TLS, name uintptr) int32 { /* unsetenv.c:9:5: */ 469 var l size_t = size_t((int64(X__strchrnul(tls, name, '=')) - int64(name)) / 1) 470 if !(l != 0) || *(*int8)(unsafe.Pointer(name + uintptr(l))) != 0 { 471 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 22 472 return -1 473 } 474 if Environ() != 0 { 475 var e uintptr = Environ() 476 var eo uintptr = e 477 for ; *(*uintptr)(unsafe.Pointer(e)) != 0; e += 8 { 478 //TODO if (!strncmp(name, *e, l) && l[*e] == '=') 479 if !(Xstrncmp(tls, name, *(*uintptr)(unsafe.Pointer(e)), l) != 0) && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(e)) + uintptr(l)))) == '=' { 480 X__env_rm_add(tls, *(*uintptr)(unsafe.Pointer(e)), uintptr(0)) 481 } else if eo != e { 482 *(*uintptr)(unsafe.Pointer(PostIncUintptr(&eo, 8))) = *(*uintptr)(unsafe.Pointer(e)) 483 } else { 484 eo += 8 485 } 486 } 487 if eo != e { 488 *(*uintptr)(unsafe.Pointer(eo)) = uintptr(0) 489 } 490 } 491 return 0 492 } 493 494 type wint_t = uint32 /* alltypes.h:21:18 */ 495 496 type wctype_t = uint32 /* alltypes.h:211:23 */ 497 498 type __mbstate_t = struct { 499 __opaque1 uint32 500 __opaque2 uint32 501 } /* alltypes.h:345:9 */ 502 503 type mbstate_t = __mbstate_t /* alltypes.h:345:63 */ 504 505 type tm = struct { 506 tm_sec int32 507 tm_min int32 508 tm_hour int32 509 tm_mday int32 510 tm_mon int32 511 tm_year int32 512 tm_wday int32 513 tm_yday int32 514 tm_isdst int32 515 tm_gmtoff int32 516 tm_zone uintptr 517 } /* wchar.h:138:1 */ 518 519 type uintptr_t = uint32 /* alltypes.h:63:24 */ 520 521 type int8_t = int8 /* alltypes.h:104:25 */ 522 523 type int16_t = int16 /* alltypes.h:109:25 */ 524 525 type int32_t = int32 /* alltypes.h:114:25 */ 526 527 type int64_t = int32 /* alltypes.h:119:25 */ 528 529 type intmax_t = int32 /* alltypes.h:124:25 */ 530 531 type uint8_t = uint8 /* alltypes.h:129:25 */ 532 533 type uint16_t = uint16 /* alltypes.h:134:25 */ 534 535 type uint32_t = uint32 /* alltypes.h:139:25 */ 536 537 type uint64_t = uint32 /* alltypes.h:144:25 */ 538 539 type uintmax_t = uint32 /* alltypes.h:154:25 */ 540 541 type int_fast8_t = int8_t /* stdint.h:22:16 */ 542 type int_fast64_t = int64_t /* stdint.h:23:17 */ 543 544 type int_least8_t = int8_t /* stdint.h:25:17 */ 545 type int_least16_t = int16_t /* stdint.h:26:17 */ 546 type int_least32_t = int32_t /* stdint.h:27:17 */ 547 type int_least64_t = int64_t /* stdint.h:28:17 */ 548 549 type uint_fast8_t = uint8_t /* stdint.h:30:17 */ 550 type uint_fast64_t = uint64_t /* stdint.h:31:18 */ 551 552 type uint_least8_t = uint8_t /* stdint.h:33:18 */ 553 type uint_least16_t = uint16_t /* stdint.h:34:18 */ 554 type uint_least32_t = uint32_t /* stdint.h:35:18 */ 555 type uint_least64_t = uint64_t /* stdint.h:36:18 */ 556 557 type int_fast16_t = int32_t /* stdint.h:1:17 */ 558 type int_fast32_t = int32_t /* stdint.h:2:17 */ 559 type uint_fast16_t = uint32_t /* stdint.h:3:18 */ 560 type uint_fast32_t = uint32_t /* stdint.h:4:18 */ 561 562 // Upper 6 state bits are a negative integer offset to bound-check next byte 563 // equivalent to: ( (b-0x80) | (b+offset) ) & ~0x3f 564 565 // Interval [a,b). Either a must be 80 or b must be c0, lower 3 bits clear. 566 567 // Arbitrary encoding for representing code units instead of characters. 568 569 // Get inline definition of MB_CUR_MAX. 570 571 type lconv = struct { 572 decimal_point uintptr 573 thousands_sep uintptr 574 grouping uintptr 575 int_curr_symbol uintptr 576 currency_symbol uintptr 577 mon_decimal_point uintptr 578 mon_thousands_sep uintptr 579 mon_grouping uintptr 580 positive_sign uintptr 581 negative_sign uintptr 582 int_frac_digits int8 583 frac_digits int8 584 p_cs_precedes int8 585 p_sep_by_space int8 586 n_cs_precedes int8 587 n_sep_by_space int8 588 p_sign_posn int8 589 n_sign_posn int8 590 int_p_cs_precedes int8 591 int_p_sep_by_space int8 592 int_n_cs_precedes int8 593 int_n_sep_by_space int8 594 int_p_sign_posn int8 595 int_n_sign_posn int8 596 _ [2]byte 597 } /* locale.h:24:1 */ 598 599 type _G_fpos64_t = struct { 600 _ [0]uint64 601 __opaque [16]int8 602 } /* stdio.h:54:9 */ 603 604 type fpos_t = _G_fpos64_t /* stdio.h:58:3 */ 605 606 // Support signed or unsigned plain-char 607 608 // Implementation choices... 609 610 // Arbitrary numbers... 611 612 // POSIX/SUS requirements follow. These numbers come directly 613 // from SUS and have nothing to do with the host system. 614 615 type __locale_map = struct { 616 __map uintptr 617 map_size size_t 618 name [24]int8 619 next uintptr 620 } /* alltypes.h:351:9 */ 621 622 type tls_module = struct { 623 next uintptr 624 image uintptr 625 len size_t 626 size size_t 627 align size_t 628 offset size_t 629 } /* libc.h:14:1 */ 630 631 type __libc = struct { 632 can_do_threads int8 633 threaded int8 634 secure int8 635 need_locks int8 636 threads_minus_1 int32 637 auxv uintptr 638 tls_head uintptr 639 tls_size size_t 640 tls_align size_t 641 tls_cnt size_t 642 page_size size_t 643 global_locale struct{ cat [6]uintptr } 644 } /* libc.h:20:1 */ 645 646 type time_t = int32 /* alltypes.h:93:16 */ 647 648 type clockid_t = int32 /* alltypes.h:222:13 */ 649 650 type timespec = struct { 651 tv_sec time_t 652 tv_nsec int32 653 } /* alltypes.h:237:1 */ 654 655 type __pthread = struct { 656 self uintptr 657 dtv uintptr 658 prev uintptr 659 next uintptr 660 sysinfo uintptr_t 661 canary uintptr_t 662 canary2 uintptr_t 663 tid int32 664 errno_val int32 665 detach_state int32 666 cancel int32 667 canceldisable uint8 668 cancelasync uint8 669 tsd_used uint8 /* unsigned char tsd_used: 1, unsigned char dlerror_flag: 1 */ 670 _ [1]byte 671 map_base uintptr 672 map_size size_t 673 stack uintptr 674 stack_size size_t 675 guard_size size_t 676 result uintptr 677 cancelbuf uintptr 678 tsd uintptr 679 robust_list struct { 680 head uintptr 681 off int32 682 _ [4]byte 683 pending uintptr 684 } 685 timer_id int32 686 _ [4]byte 687 locale locale_t 688 killlock [1]int32 689 _ [4]byte 690 dlerror_buf uintptr 691 stdio_locks uintptr 692 canary_at_end uintptr_t 693 _ [4]byte 694 dtv_copy uintptr 695 } /* alltypes.h:281:9 */ 696 697 type pthread_t = uintptr /* alltypes.h:281:26 */ 698 699 type pthread_once_t = int32 /* alltypes.h:287:13 */ 700 701 type pthread_key_t = uint32 /* alltypes.h:292:18 */ 702 703 type pthread_spinlock_t = int32 /* alltypes.h:297:13 */ 704 705 type pthread_mutexattr_t = struct{ __attr uint32 } /* alltypes.h:302:37 */ 706 707 type pthread_condattr_t = struct{ __attr uint32 } /* alltypes.h:307:37 */ 708 709 type pthread_barrierattr_t = struct{ __attr uint32 } /* alltypes.h:312:37 */ 710 711 type pthread_rwlockattr_t = struct{ __attr [2]uint32 } /* alltypes.h:317:40 */ 712 713 type __sigset_t = struct{ __bits [32]uint32 } /* alltypes.h:357:9 */ 714 715 type sigset_t = __sigset_t /* alltypes.h:357:71 */ 716 717 type pthread_attr_t = struct{ __u struct{ __i [9]int32 } } /* alltypes.h:380:147 */ 718 719 type pthread_mutex_t = struct { 720 __u struct { 721 _ [0]uint64 722 __i [6]int32 723 _ [24]byte 724 } 725 } /* alltypes.h:385:157 */ 726 727 type pthread_cond_t = struct { 728 __u struct { 729 _ [0]uint64 730 __i [12]int32 731 } 732 } /* alltypes.h:395:112 */ 733 734 type pthread_rwlock_t = struct { 735 __u struct { 736 _ [0]uint64 737 __i [8]int32 738 _ [32]byte 739 } 740 } /* alltypes.h:405:139 */ 741 742 type pthread_barrier_t = struct { 743 __u struct { 744 _ [0]uint64 745 __i [5]int32 746 _ [20]byte 747 } 748 } /* alltypes.h:410:137 */ 749 750 type sched_param = struct { 751 sched_priority int32 752 __reserved1 int32 753 __reserved2 [2]struct { 754 __reserved1 time_t 755 __reserved2 int32 756 } 757 __reserved3 int32 758 } /* sched.h:19:1 */ 759 760 type timer_t = uintptr /* alltypes.h:217:14 */ 761 762 type clock_t = int32 /* alltypes.h:227:14 */ 763 764 type itimerspec = struct { 765 it_interval struct { 766 tv_sec time_t 767 tv_nsec int32 768 } 769 it_value struct { 770 tv_sec time_t 771 tv_nsec int32 772 } 773 } /* time.h:80:1 */ 774 775 type sigevent = struct { 776 sigev_value struct { 777 _ [0]uint64 778 sival_int int32 779 _ [4]byte 780 } 781 sigev_signo int32 782 sigev_notify int32 783 sigev_notify_function uintptr 784 sigev_notify_attributes uintptr 785 __pad [44]int8 786 _ [4]byte 787 } /* time.h:107:1 */ 788 789 type __ptcb = struct { 790 __f uintptr 791 __x uintptr 792 __next uintptr 793 } /* alltypes.h:281:9 */ 794 795 type sigaltstack = struct { 796 ss_sp uintptr 797 ss_flags int32 798 _ [4]byte 799 ss_size size_t 800 } /* signal.h:44:9 */ 801 802 type stack_t = sigaltstack /* signal.h:44:28 */ 803 804 type greg_t = uint32 /* signal.h:10:23 */ 805 type gregset_t = [34]uint32 /* signal.h:11:23 */ 806 807 type fpregset_t = struct { 808 vregs [32]float64 809 fpsr uint32 810 fpcr uint32 811 } /* signal.h:17:3 */ 812 type sigcontext = struct { 813 fault_address uint32 814 regs [31]uint32 815 sp uint32 816 pc uint32 817 pstate uint32 818 _ [4]byte 819 __reserved [256]float64 820 } /* signal.h:18:9 */ 821 822 type mcontext_t = sigcontext /* signal.h:23:3 */ 823 824 type _aarch64_ctx = struct { 825 magic uint32 826 size uint32 827 } /* signal.h:29:1 */ 828 829 type fpsimd_context = struct { 830 head struct { 831 magic uint32 832 size uint32 833 } 834 fpsr uint32 835 fpcr uint32 836 vregs [32]float64 837 } /* signal.h:33:1 */ 838 839 type esr_context = struct { 840 head struct { 841 magic uint32 842 size uint32 843 } 844 esr uint32 845 } /* signal.h:39:1 */ 846 847 type extra_context = struct { 848 head struct { 849 magic uint32 850 size uint32 851 } 852 datap uint32 853 size uint32 854 __reserved [3]uint32 855 } /* signal.h:43:1 */ 856 857 type sve_context = struct { 858 head struct { 859 magic uint32 860 size uint32 861 } 862 vl uint16 863 __reserved [3]uint16 864 } /* signal.h:49:1 */ 865 866 type __ucontext = struct { 867 uc_flags uint32 868 _ [4]byte 869 uc_link uintptr 870 uc_stack stack_t 871 uc_sigmask sigset_t 872 uc_mcontext mcontext_t 873 } /* signal.h:99:9 */ 874 875 type ucontext_t = __ucontext /* signal.h:105:3 */ 876 877 type sigval = struct { 878 _ [0]uint64 879 sival_int int32 880 _ [4]byte 881 } /* time.h:107:1 */ 882 883 type siginfo_t = struct { 884 si_signo int32 885 si_errno int32 886 si_code int32 887 _ [4]byte 888 __si_fields struct { 889 _ [0]uint64 890 __pad [116]int8 891 _ [4]byte 892 } 893 } /* signal.h:145:3 */ 894 895 type sigaction = struct { 896 __sa_handler struct{ sa_handler uintptr } 897 sa_mask sigset_t 898 sa_flags int32 899 _ [4]byte 900 sa_restorer uintptr 901 } /* signal.h:167:1 */ 902 903 type sig_t = uintptr /* signal.h:251:14 */ 904 905 type sig_atomic_t = int32 /* signal.h:269:13 */ 906 907 type mode_t = uint32 /* alltypes.h:160:18 */ 908 909 type syscall_arg_t = int32 /* syscall.h:22:14 */ 910 911 func a_ll(tls *TLS, p uintptr) int32 { /* atomic_arch.h:2:19: */ 912 var v int32 913 panic(`arch\aarch64\atomic_arch.h:5:2: assembler statements not supported`) 914 return v 915 } 916 917 func a_sc(tls *TLS, p uintptr, v int32) int32 { /* atomic_arch.h:10:19: */ 918 var r int32 919 panic(`arch\aarch64\atomic_arch.h:13:2: assembler statements not supported`) 920 return BoolInt32(!(r != 0)) 921 } 922 923 func a_barrier(tls *TLS) { /* atomic_arch.h:18:20: */ 924 panic(`arch\aarch64\atomic_arch.h:20:2: assembler statements not supported`) 925 } 926 927 func a_ll_p(tls *TLS, p uintptr) uintptr { /* atomic_arch.h:38:20: */ 928 var v uintptr 929 panic(`arch\aarch64\atomic_arch.h:41:2: assembler statements not supported`) 930 return v 931 } 932 933 func a_sc_p(tls *TLS, p uintptr, v uintptr) int32 { /* atomic_arch.h:46:19: */ 934 var r int32 935 panic(`arch\aarch64\atomic_arch.h:49:2: assembler statements not supported`) 936 return BoolInt32(!(r != 0)) 937 } 938 939 func a_ctz_64(tls *TLS, x uint64_t) int32 { /* atomic_arch.h:68:19: */ 940 panic(`arch\aarch64\atomic_arch.h:70:2: assembler statements not supported`) 941 return int32(x) 942 } 943 944 func a_fetch_add(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:46:19: */ 945 var old int32 946 947 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, int32(uint32(old)+uint32(v))) != 0) { 948 old = a_ll(tls, p) 949 } 950 951 return old 952 } 953 954 func a_fetch_and(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:59:19: */ 955 var old int32 956 957 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old&v) != 0) { 958 old = a_ll(tls, p) 959 } 960 961 return old 962 } 963 964 func a_fetch_or(tls *TLS, p uintptr, v int32) int32 { /* atomic.h:72:19: */ 965 var old int32 966 967 for __ccgo := true; __ccgo; __ccgo = !(a_sc(tls, p, old|v) != 0) { 968 old = a_ll(tls, p) 969 } 970 971 return old 972 } 973 974 func a_and(tls *TLS, p uintptr, v int32) { /* atomic.h:151:20: */ 975 a_fetch_and(tls, p, v) 976 } 977 978 func a_or(tls *TLS, p uintptr, v int32) { /* atomic.h:159:20: */ 979 a_fetch_or(tls, p, v) 980 } 981 982 func a_or_64(tls *TLS, p uintptr, v uint64_t) { /* atomic.h:220:20: */ 983 bp := tls.Alloc(8) 984 defer tls.Free(8) 985 986 *(*struct { 987 v uint64_t 988 _ [4]byte 989 })(unsafe.Pointer(bp)) = func() (r struct { 990 v uint64_t 991 _ [4]byte 992 }) { 993 *(*uint64_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&r)) + 0)) = v 994 return r 995 }() 996 if *(*uint32_t)(unsafe.Pointer(bp)) != 0 { 997 a_or(tls, p, int32(*(*uint32_t)(unsafe.Pointer(bp)))) 998 } 999 if *(*uint32_t)(unsafe.Pointer(bp + 1*4)) != 0 { 1000 a_or(tls, p+uintptr(1)*4, int32(*(*uint32_t)(unsafe.Pointer(bp + 1*4)))) 1001 } 1002 } 1003 1004 func a_ctz_32(tls *TLS, x uint32_t) int32 { /* atomic.h:256:19: */ 1005 return int32(_sdebruijn32[x&-x*uint32_t(0x076be629)>>27]) 1006 } 1007 1008 var _sdebruijn32 = [32]int8{ 1009 int8(0), int8(1), int8(23), int8(2), int8(29), int8(24), int8(19), int8(3), int8(30), int8(27), int8(25), int8(11), int8(20), int8(8), int8(4), int8(13), 1010 int8(31), int8(22), int8(28), int8(18), int8(26), int8(10), int8(7), int8(12), int8(21), int8(17), int8(9), int8(6), int8(16), int8(5), int8(15), int8(14), 1011 } /* atomic.h:261:20 */ 1012 1013 type __timer = struct { 1014 timerid int32 1015 _ [4]byte 1016 thread pthread_t 1017 } /* pthread_impl.h:64:1 */ 1018 1019 func __pthread_self(tls *TLS) uintptr { /* pthread_arch.h:1:30: */ 1020 var self uintptr 1021 panic(`arch\aarch64\pthread_arch.h:4:2: assembler statements not supported`) 1022 return self - uintptr(uint64(unsafe.Sizeof(__pthread{}))) 1023 } 1024 1025 func Xwcrtomb(tls *TLS, s uintptr, wc wchar_t, st uintptr) size_t { /* wcrtomb.c:6:8: */ 1026 if !(s != 0) { 1027 return uint64(1) 1028 } 1029 if uint32(wc) < uint32(0x80) { 1030 *(*int8)(unsafe.Pointer(s)) = int8(wc) 1031 return uint64(1) 1032 } else if func() int32 { 1033 if !!(int32(*(*uintptr)(unsafe.Pointer((*__pthread)(unsafe.Pointer(__pthread_self(tls))).locale))) != 0) { 1034 return 4 1035 } 1036 return 1 1037 }() == 1 { 1038 if !(uint32(wc)-uint32(0xdf80) < uint32(0x80)) { 1039 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 1040 return Uint64FromInt32(-1) 1041 } 1042 *(*int8)(unsafe.Pointer(s)) = int8(wc) 1043 return uint64(1) 1044 } else if uint32(wc) < uint32(0x800) { 1045 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xc0 | int32(wc)>>6) 1046 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f) 1047 return uint64(2) 1048 } else if uint32(wc) < uint32(0xd800) || uint32(wc)-uint32(0xe000) < uint32(0x2000) { 1049 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xe0 | int32(wc)>>12) 1050 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f) 1051 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f) 1052 return uint64(3) 1053 } else if uint32(wc)-uint32(0x10000) < uint32(0x100000) { 1054 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0xf0 | int32(wc)>>18) 1055 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>12&0x3f) 1056 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(0x80 | int32(wc)>>6&0x3f) 1057 *(*int8)(unsafe.Pointer(s)) = int8(0x80 | int32(wc)&0x3f) 1058 return uint64(4) 1059 } 1060 *(*int32)(unsafe.Pointer(X___errno_location(tls))) = 84 1061 return Uint64FromInt32(-1) 1062 } 1063 1064 func Xwcsrtombs(tls *TLS, s uintptr, ws uintptr, n size_t, st uintptr) size_t { /* wcsrtombs.c:3:8: */ 1065 bp := tls.Alloc(4) 1066 defer tls.Free(4) 1067 1068 var ws2 uintptr 1069 // var buf [4]int8 at bp, 4 1070 1071 var N size_t = n 1072 var l size_t 1073 if !(s != 0) { 1074 n = uint64(0) 1075 ws2 = *(*uintptr)(unsafe.Pointer(ws)) 1076 for ; *(*wchar_t)(unsafe.Pointer(ws2)) != 0; ws2 += 2 { 1077 if uint32(*(*wchar_t)(unsafe.Pointer(ws2))) >= 0x80 { 1078 l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(ws2)), uintptr(0)) 1079 if !(l+uint64(1) != 0) { 1080 return Uint64FromInt32(-1) 1081 } 1082 n = n + l 1083 } else { 1084 n++ 1085 } 1086 } 1087 return n 1088 } 1089 for n >= uint64(4) { 1090 if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f { 1091 if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) { 1092 *(*int8)(unsafe.Pointer(s)) = int8(0) 1093 *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) 1094 return N - n 1095 } 1096 l = Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) 1097 if !(l+uint64(1) != 0) { 1098 return Uint64FromInt32(-1) 1099 } 1100 s += uintptr(l) 1101 n = n - l 1102 } else { 1103 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) 1104 n-- 1105 } 1106 *(*uintptr)(unsafe.Pointer(ws)) += 2 1107 } 1108 for n != 0 { 1109 if uint32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))))-1 >= 0x7f { 1110 if !(int32(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) != 0) { 1111 *(*int8)(unsafe.Pointer(s)) = int8(0) 1112 *(*uintptr)(unsafe.Pointer(ws)) = uintptr(0) 1113 return N - n 1114 } 1115 l = Xwcrtomb(tls, bp, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) 1116 if !(l+uint64(1) != 0) { 1117 return Uint64FromInt32(-1) 1118 } 1119 if l > n { 1120 return N - n 1121 } 1122 Xwcrtomb(tls, s, *(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws)))), uintptr(0)) 1123 s += uintptr(l) 1124 n = n - l 1125 } else { 1126 *(*int8)(unsafe.Pointer(PostIncUintptr(&s, 1))) = int8(*(*wchar_t)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ws))))) 1127 n-- 1128 } 1129 *(*uintptr)(unsafe.Pointer(ws)) += 2 1130 } 1131 return N 1132 } 1133 1134 func Xwcstombs(tls *TLS, s uintptr, ws uintptr, n size_t) size_t { /* wcstombs.c:4:8: */ 1135 bp := tls.Alloc(8) 1136 defer tls.Free(8) 1137 *(*uintptr)(unsafe.Pointer(bp)) = ws 1138 1139 //TODO return wcsrtombs(s, &(const wchar_t *){ws}, n, 0); 1140 return Xwcsrtombs(tls, s, bp, n, uintptr(0)) 1141 } 1142 1143 func Xbsearch(tls *TLS, key uintptr, base uintptr, nel size_t, width size_t, cmp uintptr) uintptr { /* bsearch.c:3:6: */ 1144 var try uintptr 1145 var sign int32 1146 for nel > uint64(0) { 1147 try = base + uintptr(width*(nel/uint64(2))) 1148 sign = (*struct { 1149 f func(*TLS, uintptr, uintptr) int32 1150 })(unsafe.Pointer(&struct{ uintptr }{cmp})).f(tls, key, try) 1151 if sign < 0 { 1152 nel = nel / uint64(2) 1153 } else if sign > 0 { 1154 base = try + uintptr(width) 1155 nel = nel - (nel/uint64(2) + uint64(1)) 1156 } else { 1157 return try 1158 } 1159 } 1160 return uintptr(0) 1161 } 1162 1163 // Support signed or unsigned plain-char 1164 1165 // Implementation choices... 1166 1167 // Arbitrary numbers... 1168 1169 // POSIX/SUS requirements follow. These numbers come directly 1170 // from SUS and have nothing to do with the host system. 1171 1172 func X__strchrnul(tls *TLS, s uintptr, c int32) uintptr { /* strchrnul.c:10:6: */ 1173 c = int32(uint8(c)) 1174 if !(c != 0) { 1175 return s + uintptr(Xstrlen(tls, s)) 1176 } 1177 var w uintptr 1178 for ; uint64(s)%uint64(unsafe.Sizeof(size_t(0))) != 0; s++ { 1179 if !(int32(*(*int8)(unsafe.Pointer(s))) != 0) || int32(*(*uint8)(unsafe.Pointer(s))) == c { 1180 return s 1181 } 1182 } 1183 var k size_t = Uint64(Uint64FromInt32(-1)) / uint64(255) * size_t(c) 1184 for w = s; !((*(*uint64)(unsafe.Pointer(w))-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^*(*uint64)(unsafe.Pointer(w)) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0) && !((*(*uint64)(unsafe.Pointer(w))^k-Uint64(Uint64FromInt32(-1))/uint64(255)) & ^(*(*uint64)(unsafe.Pointer(w))^k) & (Uint64(Uint64FromInt32(-1))/uint64(255)*uint64(255/2+1)) != 0); w += 8 { 1185 } 1186 s = w 1187 for ; *(*int8)(unsafe.Pointer(s)) != 0 && int32(*(*uint8)(unsafe.Pointer(s))) != c; s++ { 1188 } 1189 return s 1190 } 1191 1192 func Xstrdup(tls *TLS, s uintptr) uintptr { /* strdup.c:4:6: */ 1193 var l size_t = Xstrlen(tls, s) 1194 var d uintptr = Xmalloc(tls, l+uint64(1)) 1195 if !(d != 0) { 1196 return uintptr(0) 1197 } 1198 return Xmemcpy(tls, d, s, l+uint64(1)) 1199 }