Home | History | Annotate | Download | only in libc
      1 // Define the common source files for all the libc instances
      2 // =========================================================
      3 libc_common_src_files = [
      4     "async_safe/async_safe_log.cpp",
      5     "bionic/ether_aton.c",
      6     "bionic/ether_ntoa.c",
      7     "bionic/fts.c",
      8     "bionic/initgroups.c",
      9     "bionic/isatty.c",
     10     "bionic/pututline.c",
     11     "bionic/sched_cpualloc.c",
     12     "bionic/sched_cpucount.c",
     13     "bionic/sigblock.c",
     14     "bionic/siginterrupt.c",
     15     "bionic/sigsetmask.c",
     16     "stdio/fread.c",
     17     "stdio/parsefloat.c",
     18     "stdio/refill.c",
     19     "stdio/stdio.cpp",
     20     "stdio/stdio_ext.cpp",
     21     "stdio/vfscanf.c",
     22     "stdio/vfwscanf.c",
     23     "stdlib/atexit.c",
     24     "stdlib/exit.c",
     25 ]
     26 
     27 // Various kinds of cruft.
     28 // ========================================================
     29 libc_common_src_files += [
     30     "bionic/ndk_cruft.cpp",
     31 ]
     32 
     33 libc_common_src_files_32 = [
     34     "bionic/legacy_32_bit_support.cpp",
     35     "bionic/time64.c",
     36 ]
     37 
     38 libc_common_flags = [
     39     "-D_LIBC=1",
     40     "-Wall",
     41     "-Wextra",
     42     "-Wunused",
     43     "-Wno-deprecated-declarations",
     44     "-Wframe-larger-than=2048",
     45 
     46     // Try to catch typical 32-bit assumptions that break with 64-bit pointers.
     47     "-Werror=pointer-to-int-cast",
     48     "-Werror=int-to-pointer-cast",
     49     "-Werror=type-limits",
     50     "-Werror",
     51 ]
     52 
     53 // Define some common cflags
     54 // ========================================================
     55 cc_defaults {
     56     name: "libc_defaults",
     57     defaults: ["linux_bionic_supported"],
     58     cflags: libc_common_flags,
     59     asflags: libc_common_flags,
     60     conlyflags: ["-std=gnu99"],
     61     cppflags: [],
     62     include_dirs: [
     63         "bionic/libc/async_safe/include",
     64         "external/jemalloc/include",
     65     ],
     66 
     67     stl: "none",
     68     system_shared_libs: [],
     69     sanitize: {
     70         never: true,
     71     },
     72     native_coverage: false,
     73     clang: true,
     74 }
     75 
     76 // ANDROIDMK TRANSLATION ERROR: unsupported directive
     77 // ifeq ($(strip $(DEBUG_BIONIC_LIBC)),true)
     78 //libc_common_cflags += ["-DDEBUG"]
     79 // ANDROIDMK TRANSLATION ERROR: unsupported directive
     80 // endif
     81 
     82 // ========================================================
     83 // libc_stack_protector.a - stack protector code
     84 // ========================================================
     85 //
     86 // Code that implements the stack protector (or that runs
     87 // before TLS has been set up) needs to be compiled with
     88 // -fno-stack-protector, since it accesses the stack canary
     89 // TLS slot.
     90 
     91 cc_library_static {
     92 
     93     srcs: [
     94         "bionic/__libc_init_main_thread.cpp",
     95         "bionic/__stack_chk_fail.cpp",
     96     ],
     97     arch: {
     98         arm64: {
     99             srcs: ["arch-arm64/bionic/__set_tls.c"],
    100         },
    101         x86: {
    102             srcs: ["arch-x86/bionic/__set_tls.cpp"],
    103         },
    104         x86_64: {
    105             srcs: ["arch-x86_64/bionic/__set_tls.c"],
    106         },
    107     },
    108 
    109     defaults: ["libc_defaults"],
    110     cflags: ["-fno-stack-protector"],
    111     name: "libc_stack_protector",
    112 }
    113 
    114 // libc_init_static.cpp also needs to be built without stack protector,
    115 // because it's responsible for setting up TLS for static executables.
    116 // This isn't the case for dynamic executables because the dynamic linker
    117 // has already set up the main thread's TLS.
    118 
    119 cc_library_static {
    120     name: "libc_init_static",
    121     defaults: ["libc_defaults"],
    122     srcs: ["bionic/libc_init_static.cpp"],
    123     cflags: ["-fno-stack-protector"],
    124 }
    125 
    126 cc_library_static {
    127     name: "libc_init_dynamic",
    128     defaults: ["libc_defaults"],
    129     srcs: ["bionic/libc_init_dynamic.cpp"],
    130     cflags: ["-fno-stack-protector"],
    131 }
    132 
    133 // ========================================================
    134 // libc_tzcode.a - upstream 'tzcode' code
    135 // ========================================================
    136 
    137 cc_library_static {
    138 
    139     defaults: ["libc_defaults"],
    140     srcs: [
    141         "tzcode/**/*.c",
    142         "tzcode/bionic.cpp",
    143         "upstream-openbsd/lib/libc/time/wcsftime.c", // tzcode doesn't include wcsftime, so we use the OpenBSD one.
    144     ],
    145 
    146     cflags: [
    147         "-Wno-unused-parameter",
    148         // Don't use ridiculous amounts of stack.
    149         "-DALL_STATE",
    150         // Include tzsetwall, timelocal, timegm, time2posix, and posix2time.
    151         "-DSTD_INSPIRED",
    152         // Obviously, we want to be thread-safe.
    153         "-DTHREAD_SAFE",
    154         // The name of the tm_gmtoff field in our struct tm.
    155         "-DTM_GMTOFF=tm_gmtoff",
    156         // Where we store our tzdata.
    157         "-DTZDIR=\"/system/usr/share/zoneinfo\"",
    158         // Include `tzname`, `timezone`, and `daylight` globals.
    159         "-DHAVE_POSIX_DECLS=0",
    160         "-DUSG_COMPAT=1",
    161         // Use the empty string (instead of "   ") as the timezone abbreviation
    162         // fallback.
    163         "-DWILDABBR=\"\"",
    164         "-DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU",
    165         "-Dlint",
    166     ],
    167 
    168     local_include_dirs: ["tzcode/"],
    169     name: "libc_tzcode",
    170 }
    171 
    172 // ========================================================
    173 // libc_dns.a - modified NetBSD DNS code
    174 // ========================================================
    175 
    176 cc_library_static {
    177 
    178     defaults: ["libc_defaults"],
    179     srcs: [
    180         "dns/**/*.c",
    181 
    182         "upstream-netbsd/lib/libc/isc/ev_streams.c",
    183         "upstream-netbsd/lib/libc/isc/ev_timers.c",
    184         "upstream-netbsd/lib/libc/resolv/mtctxres.c",
    185     ],
    186 
    187     cflags: [
    188         "-DANDROID_CHANGES",
    189         "-DINET6",
    190         "-Wno-unused-parameter",
    191         "-include netbsd-compat.h",
    192         "-Wframe-larger-than=66000",
    193     ],
    194 
    195     local_include_dirs: [
    196         "dns/include",
    197         "private",
    198         "upstream-netbsd/lib/libc/include",
    199         "upstream-netbsd/android/include",
    200     ],
    201 
    202     name: "libc_dns",
    203 }
    204 
    205 // ========================================================
    206 // libc_freebsd.a - upstream FreeBSD C library code
    207 // ========================================================
    208 //
    209 // These files are built with the freebsd-compat.h header file
    210 // automatically included.
    211 
    212 cc_library_static {
    213     defaults: ["libc_defaults"],
    214     srcs: [
    215         "upstream-freebsd/lib/libc/gen/ldexp.c",
    216         "upstream-freebsd/lib/libc/gen/sleep.c",
    217         "upstream-freebsd/lib/libc/gen/usleep.c",
    218         "upstream-freebsd/lib/libc/stdlib/getopt_long.c",
    219         "upstream-freebsd/lib/libc/stdlib/qsort.c",
    220         "upstream-freebsd/lib/libc/stdlib/quick_exit.c",
    221         "upstream-freebsd/lib/libc/string/wcpcpy.c",
    222         "upstream-freebsd/lib/libc/string/wcpncpy.c",
    223         "upstream-freebsd/lib/libc/string/wcscasecmp.c",
    224         "upstream-freebsd/lib/libc/string/wcscat.c",
    225         "upstream-freebsd/lib/libc/string/wcschr.c",
    226         "upstream-freebsd/lib/libc/string/wcscmp.c",
    227         "upstream-freebsd/lib/libc/string/wcscpy.c",
    228         "upstream-freebsd/lib/libc/string/wcscspn.c",
    229         "upstream-freebsd/lib/libc/string/wcsdup.c",
    230         "upstream-freebsd/lib/libc/string/wcslcat.c",
    231         "upstream-freebsd/lib/libc/string/wcslen.c",
    232         "upstream-freebsd/lib/libc/string/wcsncasecmp.c",
    233         "upstream-freebsd/lib/libc/string/wcsncat.c",
    234         "upstream-freebsd/lib/libc/string/wcsncmp.c",
    235         "upstream-freebsd/lib/libc/string/wcsncpy.c",
    236         "upstream-freebsd/lib/libc/string/wcsnlen.c",
    237         "upstream-freebsd/lib/libc/string/wcspbrk.c",
    238         "upstream-freebsd/lib/libc/string/wcsrchr.c",
    239         "upstream-freebsd/lib/libc/string/wcsspn.c",
    240         "upstream-freebsd/lib/libc/string/wcstok.c",
    241         "upstream-freebsd/lib/libc/string/wmemchr.c",
    242         "upstream-freebsd/lib/libc/string/wmemcmp.c",
    243         "upstream-freebsd/lib/libc/string/wmemmove.c",
    244         "upstream-freebsd/lib/libc/string/wmemset.c",
    245     ],
    246     arch: {
    247         arm64: {
    248             exclude_srcs: [
    249                 "upstream-freebsd/lib/libc/string/wmemmove.c",
    250             ],
    251         },
    252         x86: {
    253             exclude_srcs: [
    254                 "upstream-freebsd/lib/libc/string/wcschr.c",
    255                 "upstream-freebsd/lib/libc/string/wcscmp.c",
    256                 "upstream-freebsd/lib/libc/string/wcslen.c",
    257                 "upstream-freebsd/lib/libc/string/wcsrchr.c",
    258             ],
    259             atom: {
    260                 exclude_srcs: [
    261                     "upstream-freebsd/lib/libc/string/wmemcmp.c",
    262                 ],
    263             },
    264             ssse3: {
    265                 exclude_srcs: [
    266                     "upstream-freebsd/lib/libc/string/wcscat.c",
    267                     "upstream-freebsd/lib/libc/string/wcscpy.c",
    268                 ],
    269             },
    270             sse4: {
    271                 exclude_srcs: [
    272                     "upstream-freebsd/lib/libc/string/wmemcmp.c",
    273                 ],
    274             },
    275         },
    276     },
    277 
    278     cflags: [
    279         "-Wno-sign-compare",
    280         "-Wno-uninitialized",
    281         "-include freebsd-compat.h",
    282     ],
    283 
    284     local_include_dirs: [
    285         "upstream-freebsd/android/include",
    286     ],
    287 
    288     name: "libc_freebsd",
    289 }
    290 
    291 cc_library_static {
    292     defaults: ["libc_defaults"],
    293     srcs: [
    294         "upstream-freebsd/lib/libc/stdlib/realpath.c",
    295     ],
    296 
    297     cflags: [
    298         "-Wno-sign-compare",
    299         "-include freebsd-compat.h",
    300         "-Wframe-larger-than=15000",
    301     ],
    302 
    303     local_include_dirs: [
    304         "upstream-freebsd/android/include",
    305     ],
    306 
    307     name: "libc_freebsd_large_stack",
    308 }
    309 
    310 // ========================================================
    311 // libc_netbsd.a - upstream NetBSD C library code
    312 // ========================================================
    313 //
    314 // These files are built with the netbsd-compat.h header file
    315 // automatically included.
    316 
    317 cc_library_static {
    318 
    319     defaults: ["libc_defaults"],
    320     srcs: [
    321         "upstream-netbsd/common/lib/libc/stdlib/random.c",
    322         "upstream-netbsd/lib/libc/gen/nice.c",
    323         "upstream-netbsd/lib/libc/gen/popen.c",
    324         "upstream-netbsd/lib/libc/gen/psignal.c",
    325         "upstream-netbsd/lib/libc/gen/utime.c",
    326         "upstream-netbsd/lib/libc/gen/utmp.c",
    327         "upstream-netbsd/lib/libc/inet/nsap_addr.c",
    328         "upstream-netbsd/lib/libc/regex/regcomp.c",
    329         "upstream-netbsd/lib/libc/regex/regerror.c",
    330         "upstream-netbsd/lib/libc/regex/regexec.c",
    331         "upstream-netbsd/lib/libc/regex/regfree.c",
    332         "upstream-netbsd/lib/libc/stdlib/bsearch.c",
    333         "upstream-netbsd/lib/libc/stdlib/div.c",
    334         "upstream-netbsd/lib/libc/stdlib/drand48.c",
    335         "upstream-netbsd/lib/libc/stdlib/erand48.c",
    336         "upstream-netbsd/lib/libc/stdlib/jrand48.c",
    337         "upstream-netbsd/lib/libc/stdlib/lcong48.c",
    338         "upstream-netbsd/lib/libc/stdlib/ldiv.c",
    339         "upstream-netbsd/lib/libc/stdlib/lldiv.c",
    340         "upstream-netbsd/lib/libc/stdlib/lrand48.c",
    341         "upstream-netbsd/lib/libc/stdlib/mrand48.c",
    342         "upstream-netbsd/lib/libc/stdlib/nrand48.c",
    343         "upstream-netbsd/lib/libc/stdlib/_rand48.c",
    344         "upstream-netbsd/lib/libc/stdlib/rand_r.c",
    345         "upstream-netbsd/lib/libc/stdlib/reallocarr.c",
    346         "upstream-netbsd/lib/libc/stdlib/seed48.c",
    347         "upstream-netbsd/lib/libc/stdlib/srand48.c",
    348         "upstream-netbsd/lib/libc/string/memccpy.c",
    349         "upstream-netbsd/lib/libc/string/strcasestr.c",
    350         "upstream-netbsd/lib/libc/string/strcoll.c",
    351         "upstream-netbsd/lib/libc/string/strxfrm.c",
    352     ],
    353     multilib: {
    354         lib32: {
    355             // LP32 cruft
    356             srcs: ["upstream-netbsd/common/lib/libc/hash/sha1/sha1.c"],
    357         },
    358     },
    359     cflags: [
    360         "-Wno-sign-compare",
    361         "-Wno-uninitialized",
    362         "-Wno-unused-parameter",
    363         "-DPOSIX_MISTAKE",
    364         "-include netbsd-compat.h",
    365     ],
    366 
    367     local_include_dirs: [
    368         "upstream-netbsd/android/include",
    369         "upstream-netbsd/lib/libc/include",
    370     ],
    371 
    372     name: "libc_netbsd",
    373 }
    374 
    375 // ========================================================
    376 // libc_openbsd_ndk.a - upstream OpenBSD C library code
    377 // that can be safely included in the libc_ndk.a (doesn't
    378 // contain any troublesome global data or constructors).
    379 // ========================================================
    380 //
    381 // These files are built with the openbsd-compat.h header file
    382 // automatically included.
    383 
    384 cc_library_static {
    385     name: "libc_openbsd_ndk",
    386     defaults: ["libc_defaults"],
    387     srcs: [
    388         "upstream-openbsd/lib/libc/compat-43/killpg.c",
    389         "upstream-openbsd/lib/libc/gen/alarm.c",
    390         "upstream-openbsd/lib/libc/gen/ctype_.c",
    391         "upstream-openbsd/lib/libc/gen/daemon.c",
    392         "upstream-openbsd/lib/libc/gen/err.c",
    393         "upstream-openbsd/lib/libc/gen/errx.c",
    394         "upstream-openbsd/lib/libc/gen/fnmatch.c",
    395         "upstream-openbsd/lib/libc/gen/ftok.c",
    396         "upstream-openbsd/lib/libc/gen/getprogname.c",
    397         "upstream-openbsd/lib/libc/gen/isctype.c",
    398         "upstream-openbsd/lib/libc/gen/setprogname.c",
    399         "upstream-openbsd/lib/libc/gen/time.c",
    400         "upstream-openbsd/lib/libc/gen/tolower_.c",
    401         "upstream-openbsd/lib/libc/gen/toupper_.c",
    402         "upstream-openbsd/lib/libc/gen/verr.c",
    403         "upstream-openbsd/lib/libc/gen/verrx.c",
    404         "upstream-openbsd/lib/libc/gen/vwarn.c",
    405         "upstream-openbsd/lib/libc/gen/vwarnx.c",
    406         "upstream-openbsd/lib/libc/gen/warn.c",
    407         "upstream-openbsd/lib/libc/gen/warnx.c",
    408         "upstream-openbsd/lib/libc/locale/btowc.c",
    409         "upstream-openbsd/lib/libc/locale/mbrlen.c",
    410         "upstream-openbsd/lib/libc/locale/mbstowcs.c",
    411         "upstream-openbsd/lib/libc/locale/mbtowc.c",
    412         "upstream-openbsd/lib/libc/locale/wcscoll.c",
    413         "upstream-openbsd/lib/libc/locale/wcstoimax.c",
    414         "upstream-openbsd/lib/libc/locale/wcstol.c",
    415         "upstream-openbsd/lib/libc/locale/wcstoll.c",
    416         "upstream-openbsd/lib/libc/locale/wcstombs.c",
    417         "upstream-openbsd/lib/libc/locale/wcstoul.c",
    418         "upstream-openbsd/lib/libc/locale/wcstoull.c",
    419         "upstream-openbsd/lib/libc/locale/wcstoumax.c",
    420         "upstream-openbsd/lib/libc/locale/wcsxfrm.c",
    421         "upstream-openbsd/lib/libc/locale/wctob.c",
    422         "upstream-openbsd/lib/libc/locale/wctomb.c",
    423         "upstream-openbsd/lib/libc/net/base64.c",
    424         "upstream-openbsd/lib/libc/net/htonl.c",
    425         "upstream-openbsd/lib/libc/net/htons.c",
    426         "upstream-openbsd/lib/libc/net/inet_lnaof.c",
    427         "upstream-openbsd/lib/libc/net/inet_makeaddr.c",
    428         "upstream-openbsd/lib/libc/net/inet_netof.c",
    429         "upstream-openbsd/lib/libc/net/inet_ntoa.c",
    430         "upstream-openbsd/lib/libc/net/inet_ntop.c",
    431         "upstream-openbsd/lib/libc/net/inet_pton.c",
    432         "upstream-openbsd/lib/libc/net/ntohl.c",
    433         "upstream-openbsd/lib/libc/net/ntohs.c",
    434         "upstream-openbsd/lib/libc/net/res_random.c",
    435         "upstream-openbsd/lib/libc/stdio/fflush.c",
    436         "upstream-openbsd/lib/libc/stdio/fgetln.c",
    437         "upstream-openbsd/lib/libc/stdio/fgets.c",
    438         "upstream-openbsd/lib/libc/stdio/fgetwc.c",
    439         "upstream-openbsd/lib/libc/stdio/fgetws.c",
    440         "upstream-openbsd/lib/libc/stdio/flags.c",
    441         "upstream-openbsd/lib/libc/stdio/fmemopen.c",
    442         "upstream-openbsd/lib/libc/stdio/fpurge.c",
    443         "upstream-openbsd/lib/libc/stdio/fputs.c",
    444         "upstream-openbsd/lib/libc/stdio/fputwc.c",
    445         "upstream-openbsd/lib/libc/stdio/fputws.c",
    446         "upstream-openbsd/lib/libc/stdio/fvwrite.c",
    447         "upstream-openbsd/lib/libc/stdio/fwalk.c",
    448         "upstream-openbsd/lib/libc/stdio/fwide.c",
    449         "upstream-openbsd/lib/libc/stdio/fwrite.c",
    450         "upstream-openbsd/lib/libc/stdio/getdelim.c",
    451         "upstream-openbsd/lib/libc/stdio/gets.c",
    452         "upstream-openbsd/lib/libc/stdio/makebuf.c",
    453         "upstream-openbsd/lib/libc/stdio/mktemp.c",
    454         "upstream-openbsd/lib/libc/stdio/open_memstream.c",
    455         "upstream-openbsd/lib/libc/stdio/open_wmemstream.c",
    456         "upstream-openbsd/lib/libc/stdio/perror.c",
    457         "upstream-openbsd/lib/libc/stdio/puts.c",
    458         "upstream-openbsd/lib/libc/stdio/rget.c",
    459         "upstream-openbsd/lib/libc/stdio/setvbuf.c",
    460         "upstream-openbsd/lib/libc/stdio/tempnam.c",
    461         "upstream-openbsd/lib/libc/stdio/tmpnam.c",
    462         "upstream-openbsd/lib/libc/stdio/ungetc.c",
    463         "upstream-openbsd/lib/libc/stdio/ungetwc.c",
    464         "upstream-openbsd/lib/libc/stdio/vasprintf.c",
    465         "upstream-openbsd/lib/libc/stdio/vdprintf.c",
    466         "upstream-openbsd/lib/libc/stdio/vsscanf.c",
    467         "upstream-openbsd/lib/libc/stdio/vswprintf.c",
    468         "upstream-openbsd/lib/libc/stdio/vswscanf.c",
    469         "upstream-openbsd/lib/libc/stdio/wbuf.c",
    470         "upstream-openbsd/lib/libc/stdio/wsetup.c",
    471         "upstream-openbsd/lib/libc/stdlib/abs.c",
    472         "upstream-openbsd/lib/libc/stdlib/atoi.c",
    473         "upstream-openbsd/lib/libc/stdlib/atol.c",
    474         "upstream-openbsd/lib/libc/stdlib/atoll.c",
    475         "upstream-openbsd/lib/libc/stdlib/getenv.c",
    476         "upstream-openbsd/lib/libc/stdlib/getsubopt.c",
    477         "upstream-openbsd/lib/libc/stdlib/insque.c",
    478         "upstream-openbsd/lib/libc/stdlib/imaxabs.c",
    479         "upstream-openbsd/lib/libc/stdlib/imaxdiv.c",
    480         "upstream-openbsd/lib/libc/stdlib/labs.c",
    481         "upstream-openbsd/lib/libc/stdlib/llabs.c",
    482         "upstream-openbsd/lib/libc/stdlib/lsearch.c",
    483         "upstream-openbsd/lib/libc/stdlib/reallocarray.c",
    484         "upstream-openbsd/lib/libc/stdlib/remque.c",
    485         "upstream-openbsd/lib/libc/stdlib/setenv.c",
    486         "upstream-openbsd/lib/libc/stdlib/strtoimax.c",
    487         "upstream-openbsd/lib/libc/stdlib/strtol.c",
    488         "upstream-openbsd/lib/libc/stdlib/strtoll.c",
    489         "upstream-openbsd/lib/libc/stdlib/strtoul.c",
    490         "upstream-openbsd/lib/libc/stdlib/strtoull.c",
    491         "upstream-openbsd/lib/libc/stdlib/strtoumax.c",
    492         "upstream-openbsd/lib/libc/stdlib/system.c",
    493         "upstream-openbsd/lib/libc/stdlib/tfind.c",
    494         "upstream-openbsd/lib/libc/stdlib/tsearch.c",
    495         "upstream-openbsd/lib/libc/string/strcasecmp.c",
    496         "upstream-openbsd/lib/libc/string/strcspn.c",
    497         "upstream-openbsd/lib/libc/string/strdup.c",
    498         "upstream-openbsd/lib/libc/string/strndup.c",
    499         "upstream-openbsd/lib/libc/string/strpbrk.c",
    500         "upstream-openbsd/lib/libc/string/strsep.c",
    501         "upstream-openbsd/lib/libc/string/strspn.c",
    502         "upstream-openbsd/lib/libc/string/strstr.c",
    503         "upstream-openbsd/lib/libc/string/strtok.c",
    504         "upstream-openbsd/lib/libc/string/wmemcpy.c",
    505         "upstream-openbsd/lib/libc/string/wcslcpy.c",
    506         "upstream-openbsd/lib/libc/string/wcsstr.c",
    507         "upstream-openbsd/lib/libc/string/wcswidth.c",
    508     ],
    509 
    510     cflags: [
    511         "-Wno-sign-compare",
    512         "-Wno-uninitialized",
    513         "-Wno-unused-parameter",
    514         "-include openbsd-compat.h",
    515     ],
    516 
    517     local_include_dirs: [
    518         "private",
    519         "stdio",
    520         "upstream-openbsd/android/include",
    521         "upstream-openbsd/lib/libc/include",
    522         "upstream-openbsd/lib/libc/gdtoa/",
    523     ],
    524 }
    525 
    526 cc_library_static {
    527     name: "libc_openbsd_large_stack",
    528     defaults: ["libc_defaults"],
    529     srcs: [
    530         "upstream-openbsd/lib/libc/stdio/vfprintf.c",
    531         "upstream-openbsd/lib/libc/stdio/vfwprintf.c",
    532     ],
    533     cflags: [
    534         "-include openbsd-compat.h",
    535         "-Wno-sign-compare",
    536         "-Wframe-larger-than=5000",
    537     ],
    538 
    539     local_include_dirs: [
    540         "stdio",
    541         "upstream-openbsd/android/include",
    542         "upstream-openbsd/lib/libc/include",
    543         "upstream-openbsd/lib/libc/gdtoa/",
    544     ],
    545 }
    546 
    547 // ========================================================
    548 // libc_openbsd.a - upstream OpenBSD C library code
    549 // ========================================================
    550 //
    551 // These files are built with the openbsd-compat.h header file
    552 // automatically included.
    553 cc_library_static {
    554     defaults: ["libc_defaults"],
    555     srcs: [
    556         // These two depend on getentropy_linux.c, which isn't in libc_ndk.a.
    557         "upstream-openbsd/lib/libc/crypt/arc4random.c",
    558         "upstream-openbsd/lib/libc/crypt/arc4random_uniform.c",
    559 
    560         // May be overriden by per-arch optimized versions
    561         "upstream-openbsd/lib/libc/string/memchr.c",
    562         "upstream-openbsd/lib/libc/string/memmove.c",
    563         "upstream-openbsd/lib/libc/string/memrchr.c",
    564         "upstream-openbsd/lib/libc/string/stpcpy.c",
    565         "upstream-openbsd/lib/libc/string/stpncpy.c",
    566         "upstream-openbsd/lib/libc/string/strcat.c",
    567         "upstream-openbsd/lib/libc/string/strcpy.c",
    568         "upstream-openbsd/lib/libc/string/strlcat.c",
    569         "upstream-openbsd/lib/libc/string/strlcpy.c",
    570         "upstream-openbsd/lib/libc/string/strncat.c",
    571         "upstream-openbsd/lib/libc/string/strncmp.c",
    572         "upstream-openbsd/lib/libc/string/strncpy.c",
    573     ],
    574 
    575     arch: {
    576         arm: {
    577             exclude_srcs: [
    578                 "upstream-openbsd/lib/libc/string/strcpy.c",
    579             ],
    580             cortex_a7: {
    581                 exclude_srcs: [
    582                     "upstream-openbsd/lib/libc/string/memmove.c",
    583                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    584                     "upstream-openbsd/lib/libc/string/strcat.c",
    585                 ],
    586             },
    587             cortex_a53: {
    588                 exclude_srcs: [
    589                     "upstream-openbsd/lib/libc/string/memmove.c",
    590                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    591                     "upstream-openbsd/lib/libc/string/strcat.c",
    592                 ],
    593             },
    594             cortex_a53_a57: {
    595                 exclude_srcs: [
    596                     "upstream-openbsd/lib/libc/string/memmove.c",
    597                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    598                     "upstream-openbsd/lib/libc/string/strcat.c",
    599                 ],
    600             },
    601             cortex_a8: {
    602                 exclude_srcs: [
    603                     "upstream-openbsd/lib/libc/string/memmove.c",
    604                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    605                     "upstream-openbsd/lib/libc/string/strcat.c",
    606                 ],
    607             },
    608             cortex_a9: {
    609                 exclude_srcs: [
    610                     "upstream-openbsd/lib/libc/string/memmove.c",
    611                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    612                     "upstream-openbsd/lib/libc/string/strcat.c",
    613                 ],
    614             },
    615             cortex_a15: {
    616                 exclude_srcs: [
    617                     "upstream-openbsd/lib/libc/string/memmove.c",
    618                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    619                     "upstream-openbsd/lib/libc/string/strcat.c",
    620                 ],
    621             },
    622             cortex_a73: {
    623                 exclude_srcs: [
    624                     "upstream-openbsd/lib/libc/string/memmove.c",
    625                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    626                     "upstream-openbsd/lib/libc/string/strcat.c",
    627                 ],
    628             },
    629             denver: {
    630                 exclude_srcs: [
    631                     "upstream-openbsd/lib/libc/string/memmove.c",
    632                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    633                     "upstream-openbsd/lib/libc/string/strcat.c",
    634                 ],
    635             },
    636             krait: {
    637                 exclude_srcs: [
    638                     "upstream-openbsd/lib/libc/string/memmove.c",
    639                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    640                     "upstream-openbsd/lib/libc/string/strcat.c",
    641                 ],
    642             },
    643             kryo: {
    644                 exclude_srcs: [
    645                     "upstream-openbsd/lib/libc/string/memmove.c",
    646                     "upstream-openbsd/lib/libc/string/stpcpy.c",
    647                     "upstream-openbsd/lib/libc/string/strcat.c",
    648                 ],
    649             },
    650         },
    651         arm64: {
    652             exclude_srcs: [
    653                 "upstream-openbsd/lib/libc/string/memchr.c",
    654                 "upstream-openbsd/lib/libc/string/memmove.c",
    655                 "upstream-openbsd/lib/libc/string/stpcpy.c",
    656                 "upstream-openbsd/lib/libc/string/strcpy.c",
    657                 "upstream-openbsd/lib/libc/string/strncmp.c",
    658             ],
    659         },
    660         mips: {
    661             exclude_srcs: [
    662                 "upstream-openbsd/lib/libc/string/memchr.c",
    663                 "upstream-openbsd/lib/libc/string/memmove.c",
    664                 "upstream-openbsd/lib/libc/string/strcpy.c",
    665                 "upstream-openbsd/lib/libc/string/strncmp.c",
    666             ],
    667         },
    668         mips64: {
    669             exclude_srcs: [
    670                 "upstream-openbsd/lib/libc/string/memchr.c",
    671                 "upstream-openbsd/lib/libc/string/memmove.c",
    672                 "upstream-openbsd/lib/libc/string/strcpy.c",
    673                 "upstream-openbsd/lib/libc/string/strncmp.c",
    674             ],
    675         },
    676         x86: {
    677             exclude_srcs: [
    678                 "upstream-openbsd/lib/libc/string/memchr.c",
    679                 "upstream-openbsd/lib/libc/string/memmove.c",
    680                 "upstream-openbsd/lib/libc/string/memrchr.c",
    681                 "upstream-openbsd/lib/libc/string/stpcpy.c",
    682                 "upstream-openbsd/lib/libc/string/stpncpy.c",
    683                 "upstream-openbsd/lib/libc/string/strcat.c",
    684                 "upstream-openbsd/lib/libc/string/strcpy.c",
    685                 "upstream-openbsd/lib/libc/string/strncmp.c",
    686                 "upstream-openbsd/lib/libc/string/strncpy.c",
    687             ],
    688             ssse3: {
    689                 exclude_srcs: [
    690                     "upstream-openbsd/lib/libc/string/strlcat.c",
    691                     "upstream-openbsd/lib/libc/string/strlcpy.c",
    692                     "upstream-openbsd/lib/libc/string/strncat.c",
    693                 ],
    694             },
    695         },
    696 
    697         x86_64: {
    698             exclude_srcs: [
    699                 "upstream-openbsd/lib/libc/string/memmove.c",
    700                 "upstream-openbsd/lib/libc/string/stpcpy.c",
    701                 "upstream-openbsd/lib/libc/string/stpncpy.c",
    702                 "upstream-openbsd/lib/libc/string/strcat.c",
    703                 "upstream-openbsd/lib/libc/string/strcpy.c",
    704                 "upstream-openbsd/lib/libc/string/strlcat.c",
    705                 "upstream-openbsd/lib/libc/string/strlcpy.c",
    706                 "upstream-openbsd/lib/libc/string/strncat.c",
    707                 "upstream-openbsd/lib/libc/string/strncmp.c",
    708                 "upstream-openbsd/lib/libc/string/strncpy.c",
    709             ],
    710         },
    711     },
    712 
    713     cflags: [
    714         "-Wno-sign-compare",
    715         "-Wno-uninitialized",
    716         "-Wno-unused-parameter",
    717         "-include openbsd-compat.h",
    718     ],
    719 
    720     local_include_dirs: [
    721         "private",
    722         "upstream-openbsd/android/include",
    723     ],
    724 
    725     name: "libc_openbsd",
    726 }
    727 
    728 // ========================================================
    729 // libc_gdtoa.a - upstream OpenBSD C library gdtoa code
    730 // ========================================================
    731 //
    732 // These files are built with the openbsd-compat.h header file
    733 // automatically included.
    734 
    735 cc_library_static {
    736     defaults: ["libc_defaults"],
    737     srcs: [
    738         "upstream-openbsd/android/gdtoa_support.cpp",
    739         "upstream-openbsd/lib/libc/gdtoa/dmisc.c",
    740         "upstream-openbsd/lib/libc/gdtoa/dtoa.c",
    741         "upstream-openbsd/lib/libc/gdtoa/gdtoa.c",
    742         "upstream-openbsd/lib/libc/gdtoa/gethex.c",
    743         "upstream-openbsd/lib/libc/gdtoa/gmisc.c",
    744         "upstream-openbsd/lib/libc/gdtoa/hd_init.c",
    745         "upstream-openbsd/lib/libc/gdtoa/hdtoa.c",
    746         "upstream-openbsd/lib/libc/gdtoa/hexnan.c",
    747         "upstream-openbsd/lib/libc/gdtoa/ldtoa.c",
    748         "upstream-openbsd/lib/libc/gdtoa/misc.c",
    749         "upstream-openbsd/lib/libc/gdtoa/smisc.c",
    750         "upstream-openbsd/lib/libc/gdtoa/strtod.c",
    751         "upstream-openbsd/lib/libc/gdtoa/strtodg.c",
    752         "upstream-openbsd/lib/libc/gdtoa/strtof.c",
    753         "upstream-openbsd/lib/libc/gdtoa/strtord.c",
    754         "upstream-openbsd/lib/libc/gdtoa/sum.c",
    755         "upstream-openbsd/lib/libc/gdtoa/ulp.c",
    756     ],
    757     multilib: {
    758         lib64: {
    759             srcs: ["upstream-openbsd/lib/libc/gdtoa/strtorQ.c"],
    760         },
    761     },
    762 
    763     cflags: [
    764         "-Wno-sign-compare",
    765         "-Wno-uninitialized",
    766         "-include openbsd-compat.h",
    767     ],
    768 
    769     local_include_dirs: [
    770         "private",
    771         "upstream-openbsd/android/include",
    772         "upstream-openbsd/lib/libc/include",
    773     ],
    774 
    775     name: "libc_gdtoa",
    776 }
    777 
    778 // ========================================================
    779 // libc_bionic.a - home-grown C library code
    780 // ========================================================
    781 
    782 cc_library_static {
    783     defaults: ["libc_defaults"],
    784     srcs: [
    785         // The following implementations depend on pthread data, so we can't
    786         // include them in libc_ndk.a.
    787         "bionic/__cxa_thread_atexit_impl.cpp",
    788         "bionic/fork.cpp",
    789 
    790         // The data that backs getauxval is initialized in the libc init
    791         // functions which are invoked by the linker. If this file is included
    792         // in libc_ndk.a, only one of the copies of the global data will be
    793         // initialized, resulting in nullptr dereferences.
    794         "bionic/getauxval.cpp",
    795 
    796         // These four require getauxval, which isn't available on older
    797         // platforms.
    798         "bionic/getentropy_linux.c",
    799         "bionic/sysconf.cpp",
    800         "bionic/vdso.cpp",
    801         "bionic/setjmp_cookie.cpp",
    802 
    803         // The following must not be statically linked into libc_ndk.a, because
    804         // debuggerd will look for the abort message in libc.so's copy.
    805         "bionic/android_set_abort_message.cpp",
    806 
    807         "bionic/__memcpy_chk.cpp",
    808         "bionic/__strcat_chk.cpp",
    809         "bionic/__strcpy_chk.cpp",
    810         "bionic/strchr.cpp",
    811         "bionic/strnlen.c",
    812         "bionic/strrchr.cpp",
    813     ],
    814 
    815     arch: {
    816         arm: {
    817             srcs: [
    818                 "arch-arm/generic/bionic/memcmp.S",
    819                 "arch-arm/generic/bionic/memcpy.S",
    820                 "arch-arm/generic/bionic/memset.S",
    821                 "arch-arm/generic/bionic/strcmp.S",
    822                 "arch-arm/generic/bionic/strcpy.S",
    823                 "arch-arm/generic/bionic/strlen.c",
    824 
    825                 "arch-arm/bionic/atomics_arm.c",
    826                 "arch-arm/bionic/__bionic_clone.S",
    827                 "arch-arm/bionic/_exit_with_stack_teardown.S",
    828                 "arch-arm/bionic/libgcc_compat.c",
    829                 "arch-arm/bionic/popcount_tab.c",
    830                 "arch-arm/bionic/__restore.S",
    831                 "arch-arm/bionic/setjmp.S",
    832                 "arch-arm/bionic/syscall.S",
    833                 "arch-arm/bionic/vfork.S",
    834             ],
    835             exclude_srcs: [
    836                 "bionic/__memcpy_chk.cpp",
    837             ],
    838             cortex_a7: {
    839                 srcs: [
    840                     "arch-arm/cortex-a7/bionic/memset.S",
    841                     "arch-arm/cortex-a7/bionic/memcpy.S",
    842                     "arch-arm/cortex-a7/bionic/__strcat_chk.S",
    843                     "arch-arm/cortex-a7/bionic/__strcpy_chk.S",
    844 
    845                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    846                     "arch-arm/cortex-a15/bionic/strcat.S",
    847                     "arch-arm/cortex-a15/bionic/strcmp.S",
    848                     "arch-arm/cortex-a15/bionic/strcpy.S",
    849                     "arch-arm/cortex-a15/bionic/strlen.S",
    850 
    851                     "arch-arm/denver/bionic/memmove.S",
    852                 ],
    853                 exclude_srcs: [
    854                     "arch-arm/generic/bionic/memcpy.S",
    855                     "arch-arm/generic/bionic/memset.S",
    856                     "arch-arm/generic/bionic/strcmp.S",
    857                     "arch-arm/generic/bionic/strcpy.S",
    858                     "arch-arm/generic/bionic/strlen.c",
    859                     "bionic/__strcat_chk.cpp",
    860                     "bionic/__strcpy_chk.cpp",
    861                 ],
    862             },
    863             cortex_a53: {
    864                 srcs: [
    865                     "arch-arm/cortex-a53/bionic/memcpy.S",
    866                     "arch-arm/cortex-a53/bionic/__strcat_chk.S",
    867                     "arch-arm/cortex-a53/bionic/__strcpy_chk.S",
    868 
    869                     "arch-arm/cortex-a7/bionic/memset.S",
    870 
    871                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    872                     "arch-arm/cortex-a15/bionic/strcat.S",
    873                     "arch-arm/cortex-a15/bionic/strcmp.S",
    874                     "arch-arm/cortex-a15/bionic/strcpy.S",
    875                     "arch-arm/cortex-a15/bionic/strlen.S",
    876 
    877                     "arch-arm/denver/bionic/memmove.S",
    878                 ],
    879                 exclude_srcs: [
    880                     "arch-arm/generic/bionic/memcpy.S",
    881                     "arch-arm/generic/bionic/memset.S",
    882                     "arch-arm/generic/bionic/strcmp.S",
    883                     "arch-arm/generic/bionic/strcpy.S",
    884                     "arch-arm/generic/bionic/strlen.c",
    885                     "bionic/__strcat_chk.cpp",
    886                     "bionic/__strcpy_chk.cpp",
    887                 ],
    888             },
    889             cortex_a53_a57: {
    890                 srcs: [
    891                     "arch-arm/cortex-a15/bionic/memcpy.S",
    892                     "arch-arm/cortex-a15/bionic/memset.S",
    893                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    894                     "arch-arm/cortex-a15/bionic/strcat.S",
    895                     "arch-arm/cortex-a15/bionic/__strcat_chk.S",
    896                     "arch-arm/cortex-a15/bionic/strcmp.S",
    897                     "arch-arm/cortex-a15/bionic/strcpy.S",
    898                     "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
    899                     "arch-arm/cortex-a15/bionic/strlen.S",
    900 
    901                     "arch-arm/denver/bionic/memmove.S",
    902                 ],
    903                 exclude_srcs: [
    904                     "arch-arm/generic/bionic/memcpy.S",
    905                     "arch-arm/generic/bionic/memset.S",
    906                     "arch-arm/generic/bionic/strcmp.S",
    907                     "arch-arm/generic/bionic/strcpy.S",
    908                     "arch-arm/generic/bionic/strlen.c",
    909                     "bionic/__strcat_chk.cpp",
    910                     "bionic/__strcpy_chk.cpp",
    911                 ],
    912             },
    913             cortex_a8: {
    914                 srcs: [
    915                     "arch-arm/cortex-a15/bionic/memcpy.S",
    916                     "arch-arm/cortex-a15/bionic/memset.S",
    917                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    918                     "arch-arm/cortex-a15/bionic/strcat.S",
    919                     "arch-arm/cortex-a15/bionic/__strcat_chk.S",
    920                     "arch-arm/cortex-a15/bionic/strcmp.S",
    921                     "arch-arm/cortex-a15/bionic/strcpy.S",
    922                     "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
    923                     "arch-arm/cortex-a15/bionic/strlen.S",
    924 
    925                     "arch-arm/denver/bionic/memmove.S",
    926                 ],
    927                 exclude_srcs: [
    928                     "arch-arm/generic/bionic/memcpy.S",
    929                     "arch-arm/generic/bionic/memset.S",
    930                     "arch-arm/generic/bionic/strcmp.S",
    931                     "arch-arm/generic/bionic/strcpy.S",
    932                     "arch-arm/generic/bionic/strlen.c",
    933                     "bionic/__strcat_chk.cpp",
    934                     "bionic/__strcpy_chk.cpp",
    935                 ],
    936             },
    937             cortex_a9: {
    938                 srcs: [
    939                     "arch-arm/cortex-a9/bionic/memcpy.S",
    940                     "arch-arm/cortex-a9/bionic/memset.S",
    941                     "arch-arm/cortex-a9/bionic/stpcpy.S",
    942                     "arch-arm/cortex-a9/bionic/strcat.S",
    943                     "arch-arm/cortex-a9/bionic/__strcat_chk.S",
    944                     "arch-arm/cortex-a9/bionic/strcmp.S",
    945                     "arch-arm/cortex-a9/bionic/strcpy.S",
    946                     "arch-arm/cortex-a9/bionic/__strcpy_chk.S",
    947                     "arch-arm/cortex-a9/bionic/strlen.S",
    948 
    949                     "arch-arm/denver/bionic/memmove.S",
    950                 ],
    951                 exclude_srcs: [
    952                     "arch-arm/generic/bionic/memcpy.S",
    953                     "arch-arm/generic/bionic/memset.S",
    954                     "arch-arm/generic/bionic/strcmp.S",
    955                     "arch-arm/generic/bionic/strcpy.S",
    956                     "arch-arm/generic/bionic/strlen.c",
    957                     "bionic/__strcat_chk.cpp",
    958                     "bionic/__strcpy_chk.cpp",
    959                 ],
    960             },
    961             cortex_a15: {
    962                 srcs: [
    963                     "arch-arm/cortex-a15/bionic/memcpy.S",
    964                     "arch-arm/cortex-a15/bionic/memset.S",
    965                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    966                     "arch-arm/cortex-a15/bionic/strcat.S",
    967                     "arch-arm/cortex-a15/bionic/__strcat_chk.S",
    968                     "arch-arm/cortex-a15/bionic/strcmp.S",
    969                     "arch-arm/cortex-a15/bionic/strcpy.S",
    970                     "arch-arm/cortex-a15/bionic/__strcpy_chk.S",
    971                     "arch-arm/cortex-a15/bionic/strlen.S",
    972 
    973                     "arch-arm/denver/bionic/memmove.S",
    974                 ],
    975                 exclude_srcs: [
    976                     "arch-arm/generic/bionic/memcpy.S",
    977                     "arch-arm/generic/bionic/memset.S",
    978                     "arch-arm/generic/bionic/strcmp.S",
    979                     "arch-arm/generic/bionic/strcpy.S",
    980                     "arch-arm/generic/bionic/strlen.c",
    981                     "bionic/__strcat_chk.cpp",
    982                     "bionic/__strcpy_chk.cpp",
    983                 ],
    984             },
    985             cortex_a73: {
    986                 srcs: [
    987                     "arch-arm/cortex-a7/bionic/memset.S",
    988 
    989                     "arch-arm/denver/bionic/memcpy.S",
    990                     "arch-arm/denver/bionic/memmove.S",
    991                     "arch-arm/denver/bionic/__strcat_chk.S",
    992                     "arch-arm/denver/bionic/__strcpy_chk.S",
    993 
    994                     "arch-arm/krait/bionic/strcmp.S",
    995 
    996                     "arch-arm/cortex-a15/bionic/stpcpy.S",
    997                     "arch-arm/cortex-a15/bionic/strcat.S",
    998                     "arch-arm/cortex-a15/bionic/strcpy.S",
    999                     "arch-arm/cortex-a15/bionic/strlen.S",
   1000                 ],
   1001                 exclude_srcs: [
   1002                     "arch-arm/generic/bionic/memcpy.S",
   1003                     "arch-arm/generic/bionic/memset.S",
   1004                     "arch-arm/generic/bionic/strcmp.S",
   1005                     "arch-arm/generic/bionic/strcpy.S",
   1006                     "arch-arm/generic/bionic/strlen.c",
   1007                     "bionic/__strcat_chk.cpp",
   1008                     "bionic/__strcpy_chk.cpp",
   1009                 ],
   1010             },
   1011             denver: {
   1012                 srcs: [
   1013                     "arch-arm/denver/bionic/memcpy.S",
   1014                     "arch-arm/denver/bionic/memmove.S",
   1015                     "arch-arm/denver/bionic/memset.S",
   1016                     "arch-arm/denver/bionic/__strcat_chk.S",
   1017                     "arch-arm/denver/bionic/__strcpy_chk.S",
   1018 
   1019                     // Use cortex-a15 versions of strcat/strcpy/strlen.
   1020                     "arch-arm/cortex-a15/bionic/stpcpy.S",
   1021                     "arch-arm/cortex-a15/bionic/strcat.S",
   1022                     "arch-arm/cortex-a15/bionic/strcmp.S",
   1023                     "arch-arm/cortex-a15/bionic/strcpy.S",
   1024                     "arch-arm/cortex-a15/bionic/strlen.S",
   1025                 ],
   1026                 exclude_srcs: [
   1027                     "arch-arm/generic/bionic/memcpy.S",
   1028                     "arch-arm/generic/bionic/memset.S",
   1029                     "arch-arm/generic/bionic/strcmp.S",
   1030                     "arch-arm/generic/bionic/strcpy.S",
   1031                     "arch-arm/generic/bionic/strlen.c",
   1032                     "bionic/__strcat_chk.cpp",
   1033                     "bionic/__strcpy_chk.cpp",
   1034                 ],
   1035             },
   1036             krait: {
   1037                 srcs: [
   1038                     "arch-arm/krait/bionic/memcpy.S",
   1039                     "arch-arm/krait/bionic/memset.S",
   1040                     "arch-arm/krait/bionic/strcmp.S",
   1041                     "arch-arm/krait/bionic/__strcat_chk.S",
   1042                     "arch-arm/krait/bionic/__strcpy_chk.S",
   1043 
   1044                     // Use cortex-a15 versions of strcat/strcpy/strlen.
   1045                     "arch-arm/cortex-a15/bionic/stpcpy.S",
   1046                     "arch-arm/cortex-a15/bionic/strcat.S",
   1047                     "arch-arm/cortex-a15/bionic/strcpy.S",
   1048                     "arch-arm/cortex-a15/bionic/strlen.S",
   1049 
   1050                     "arch-arm/denver/bionic/memmove.S",
   1051                 ],
   1052                 exclude_srcs: [
   1053                     "arch-arm/generic/bionic/memcpy.S",
   1054                     "arch-arm/generic/bionic/memset.S",
   1055                     "arch-arm/generic/bionic/strcmp.S",
   1056                     "arch-arm/generic/bionic/strcpy.S",
   1057                     "arch-arm/generic/bionic/strlen.c",
   1058                     "bionic/__strcat_chk.cpp",
   1059                     "bionic/__strcpy_chk.cpp",
   1060                 ],
   1061             },
   1062             kryo: {
   1063                 srcs: [
   1064                     "arch-arm/kryo/bionic/memcpy.S",
   1065                     "arch-arm/cortex-a7/bionic/memset.S",
   1066                     "arch-arm/krait/bionic/strcmp.S",
   1067                     "arch-arm/krait/bionic/__strcat_chk.S",
   1068                     "arch-arm/krait/bionic/__strcpy_chk.S",
   1069 
   1070                     // Use cortex-a15 versions of strcat/strcpy/strlen.
   1071                     "arch-arm/cortex-a15/bionic/stpcpy.S",
   1072                     "arch-arm/cortex-a15/bionic/strcat.S",
   1073                     "arch-arm/cortex-a15/bionic/strcpy.S",
   1074                     "arch-arm/cortex-a15/bionic/strlen.S",
   1075 
   1076                     "arch-arm/denver/bionic/memmove.S",
   1077                 ],
   1078                 exclude_srcs: [
   1079                     "arch-arm/generic/bionic/memcpy.S",
   1080                     "arch-arm/generic/bionic/memset.S",
   1081                     "arch-arm/generic/bionic/strcmp.S",
   1082                     "arch-arm/generic/bionic/strcpy.S",
   1083                     "arch-arm/generic/bionic/strlen.c",
   1084                     "bionic/__strcat_chk.cpp",
   1085                     "bionic/__strcpy_chk.cpp",
   1086                 ],
   1087             },
   1088         },
   1089         arm64: {
   1090             srcs: [
   1091                 "arch-arm64/generic/bionic/memchr.S",
   1092                 "arch-arm64/generic/bionic/memcmp.S",
   1093                 "arch-arm64/generic/bionic/memcpy.S",
   1094                 "arch-arm64/generic/bionic/memmove.S",
   1095                 "arch-arm64/generic/bionic/memset.S",
   1096                 "arch-arm64/generic/bionic/stpcpy.S",
   1097                 "arch-arm64/generic/bionic/strchr.S",
   1098                 "arch-arm64/generic/bionic/strcmp.S",
   1099                 "arch-arm64/generic/bionic/strcpy.S",
   1100                 "arch-arm64/generic/bionic/strlen.S",
   1101                 "arch-arm64/generic/bionic/strncmp.S",
   1102                 "arch-arm64/generic/bionic/strnlen.S",
   1103                 "arch-arm64/generic/bionic/wmemmove.S",
   1104 
   1105                 "arch-arm64/bionic/__bionic_clone.S",
   1106                 "arch-arm64/bionic/_exit_with_stack_teardown.S",
   1107                 "arch-arm64/bionic/setjmp.S",
   1108                 "arch-arm64/bionic/syscall.S",
   1109                 "arch-arm64/bionic/vfork.S",
   1110             ],
   1111             exclude_srcs: [
   1112                 "bionic/__memcpy_chk.cpp",
   1113                 "bionic/strchr.cpp",
   1114                 "bionic/strnlen.c",
   1115             ],
   1116             denver64: {
   1117                 srcs: [
   1118                     "arch-arm64/denver64/bionic/memcpy.S",
   1119                     "arch-arm64/denver64/bionic/memset.S",
   1120                 ],
   1121                 exclude_srcs: [
   1122                     "arch-arm64/generic/bionic/memcpy.S",
   1123                     "arch-arm64/generic/bionic/memset.S",
   1124                 ],
   1125             },
   1126             cortex_a53: {
   1127                 srcs: [
   1128                     "arch-arm64/cortex-a53/bionic/memmove.S",
   1129                 ],
   1130                 exclude_srcs: [
   1131                     "arch-arm64/generic/bionic/memmove.S",
   1132                 ],
   1133             },
   1134             cortex_a73: {
   1135                 srcs: [
   1136                     "arch-arm64/cortex-a53/bionic/memmove.S",
   1137                 ],
   1138                 exclude_srcs: [
   1139                     "arch-arm64/generic/bionic/memmove.S",
   1140                 ],
   1141             },
   1142         },
   1143 
   1144         mips: {
   1145             srcs: [
   1146                 "arch-mips/string/memcmp.c",
   1147                 "arch-mips/string/memcpy.c",
   1148                 "arch-mips/string/memset.S",
   1149                 "arch-mips/string/strcmp.S",
   1150                 "arch-mips/string/strncmp.S",
   1151                 "arch-mips/string/strlen.c",
   1152                 "arch-mips/string/strnlen.c",
   1153                 "arch-mips/string/strchr.c",
   1154                 "arch-mips/string/strcpy.c",
   1155                 "arch-mips/string/memchr.c",
   1156                 "arch-mips/string/memmove.c",
   1157 
   1158                 "arch-mips/bionic/__bionic_clone.S",
   1159                 "arch-mips/bionic/cacheflush.cpp",
   1160                 "arch-mips/bionic/_exit_with_stack_teardown.S",
   1161                 "arch-mips/bionic/libgcc_compat.c",
   1162                 "arch-mips/bionic/setjmp.S",
   1163                 "arch-mips/bionic/syscall.S",
   1164                 "arch-mips/bionic/vfork.S",
   1165             ],
   1166             exclude_srcs: [
   1167                 "bionic/strchr.cpp",
   1168                 "bionic/strnlen.c",
   1169             ],
   1170         },
   1171         mips64: {
   1172             srcs: [
   1173                 "arch-mips/string/memcmp.c",
   1174                 "arch-mips/string/memcpy.c",
   1175                 "arch-mips/string/memset.S",
   1176                 "arch-mips/string/strcmp.S",
   1177                 "arch-mips/string/strncmp.S",
   1178                 "arch-mips/string/strlen.c",
   1179                 "arch-mips/string/strnlen.c",
   1180                 "arch-mips/string/strchr.c",
   1181                 "arch-mips/string/strcpy.c",
   1182                 "arch-mips/string/memchr.c",
   1183                 "arch-mips/string/memmove.c",
   1184 
   1185                 "arch-mips64/bionic/__bionic_clone.S",
   1186                 "arch-mips64/bionic/_exit_with_stack_teardown.S",
   1187                 "arch-mips64/bionic/setjmp.S",
   1188                 "arch-mips64/bionic/syscall.S",
   1189                 "arch-mips64/bionic/vfork.S",
   1190                 "arch-mips64/bionic/stat.cpp",
   1191             ],
   1192             exclude_srcs: [
   1193                 "bionic/strchr.cpp",
   1194                 "bionic/strnlen.c",
   1195             ],
   1196         },
   1197 
   1198         x86: {
   1199             srcs: [
   1200                 "arch-x86/generic/string/memcmp.S",
   1201                 "arch-x86/generic/string/strcmp.S",
   1202                 "arch-x86/generic/string/strncmp.S",
   1203                 "arch-x86/generic/string/strcat.S",
   1204                 "arch-x86/atom/string/sse2-memchr-atom.S",
   1205                 "arch-x86/atom/string/sse2-memrchr-atom.S",
   1206                 "arch-x86/atom/string/sse2-strchr-atom.S",
   1207                 "arch-x86/atom/string/sse2-strnlen-atom.S",
   1208                 "arch-x86/atom/string/sse2-strrchr-atom.S",
   1209                 "arch-x86/atom/string/sse2-wcschr-atom.S",
   1210                 "arch-x86/atom/string/sse2-wcsrchr-atom.S",
   1211                 "arch-x86/atom/string/sse2-wcslen-atom.S",
   1212                 "arch-x86/atom/string/sse2-wcscmp-atom.S",
   1213                 "arch-x86/silvermont/string/sse2-memcpy-slm.S",
   1214                 "arch-x86/silvermont/string/sse2-memmove-slm.S",
   1215                 "arch-x86/silvermont/string/sse2-memset-slm.S",
   1216                 "arch-x86/silvermont/string/sse2-stpcpy-slm.S",
   1217                 "arch-x86/silvermont/string/sse2-stpncpy-slm.S",
   1218                 "arch-x86/silvermont/string/sse2-strcpy-slm.S",
   1219                 "arch-x86/silvermont/string/sse2-strlen-slm.S",
   1220                 "arch-x86/silvermont/string/sse2-strncpy-slm.S",
   1221 
   1222                 "arch-x86/bionic/__bionic_clone.S",
   1223                 "arch-x86/bionic/_exit_with_stack_teardown.S",
   1224                 "arch-x86/bionic/libgcc_compat.c",
   1225                 "arch-x86/bionic/__restore.S",
   1226                 "arch-x86/bionic/setjmp.S",
   1227                 "arch-x86/bionic/syscall.S",
   1228                 "arch-x86/bionic/vfork.S",
   1229             ],
   1230 
   1231             exclude_srcs: [
   1232                 "bionic/strchr.cpp",
   1233                 "bionic/strnlen.c",
   1234                 "bionic/strrchr.cpp",
   1235             ],
   1236             atom: {
   1237                 srcs: [
   1238                     "arch-x86/atom/string/sse2-memset-atom.S",
   1239                     "arch-x86/atom/string/sse2-strlen-atom.S",
   1240                     "arch-x86/atom/string/ssse3-memcmp-atom.S",
   1241                     "arch-x86/atom/string/ssse3-memcpy-atom.S",
   1242                     "arch-x86/atom/string/ssse3-memmove-atom.S",
   1243                     "arch-x86/atom/string/ssse3-strcpy-atom.S",
   1244                     "arch-x86/atom/string/ssse3-strncpy-atom.S",
   1245                     "arch-x86/atom/string/ssse3-wmemcmp-atom.S",
   1246                 ],
   1247                 exclude_srcs: [
   1248                     "arch-x86/generic/string/memcmp.S",
   1249                     "arch-x86/silvermont/string/sse2-memcpy-slm.S",
   1250                     "arch-x86/silvermont/string/sse2-memmove-slm.S",
   1251                     "arch-x86/silvermont/string/sse2-memset-slm.S",
   1252                     "arch-x86/silvermont/string/sse2-strcpy-slm.S",
   1253                     "arch-x86/silvermont/string/sse2-strlen-slm.S",
   1254                     "arch-x86/silvermont/string/sse2-strncpy-slm.S",
   1255                 ],
   1256             },
   1257             ssse3: {
   1258                 srcs: [
   1259                     "arch-x86/atom/string/ssse3-strncat-atom.S",
   1260                     "arch-x86/atom/string/ssse3-strlcat-atom.S",
   1261                     "arch-x86/atom/string/ssse3-strlcpy-atom.S",
   1262                     "arch-x86/atom/string/ssse3-strcat-atom.S",
   1263                     "arch-x86/atom/string/ssse3-strcmp-atom.S",
   1264                     "arch-x86/atom/string/ssse3-strncmp-atom.S",
   1265                     "arch-x86/atom/string/ssse3-wcscat-atom.S",
   1266                     "arch-x86/atom/string/ssse3-wcscpy-atom.S",
   1267                 ],
   1268                 exclude_srcs: [
   1269                     "arch-x86/generic/string/strcmp.S",
   1270                     "arch-x86/generic/string/strncmp.S",
   1271                     "arch-x86/generic/string/strcat.S",
   1272                 ],
   1273             },
   1274             sse4: {
   1275                 srcs: [
   1276                     "arch-x86/silvermont/string/sse4-memcmp-slm.S",
   1277                     "arch-x86/silvermont/string/sse4-wmemcmp-slm.S",
   1278                 ],
   1279                 exclude_srcs: [
   1280                     "arch-x86/generic/string/memcmp.S",
   1281                 ],
   1282             },
   1283         },
   1284         x86_64: {
   1285             srcs: [
   1286                 "arch-x86_64/string/sse2-memcpy-slm.S",
   1287                 "arch-x86_64/string/sse2-memmove-slm.S",
   1288                 "arch-x86_64/string/sse2-memset-slm.S",
   1289                 "arch-x86_64/string/sse2-stpcpy-slm.S",
   1290                 "arch-x86_64/string/sse2-stpncpy-slm.S",
   1291                 "arch-x86_64/string/sse2-strcat-slm.S",
   1292                 "arch-x86_64/string/sse2-strcpy-slm.S",
   1293                 "arch-x86_64/string/sse2-strlcat-slm.S",
   1294                 "arch-x86_64/string/sse2-strlcpy-slm.S",
   1295                 "arch-x86_64/string/sse2-strlen-slm.S",
   1296                 "arch-x86_64/string/sse2-strncat-slm.S",
   1297                 "arch-x86_64/string/sse2-strncpy-slm.S",
   1298                 "arch-x86_64/string/sse4-memcmp-slm.S",
   1299                 "arch-x86_64/string/ssse3-strcmp-slm.S",
   1300                 "arch-x86_64/string/ssse3-strncmp-slm.S",
   1301 
   1302                 "arch-x86_64/bionic/__bionic_clone.S",
   1303                 "arch-x86_64/bionic/_exit_with_stack_teardown.S",
   1304                 "arch-x86_64/bionic/__restore_rt.S",
   1305                 "arch-x86_64/bionic/setjmp.S",
   1306                 "arch-x86_64/bionic/syscall.S",
   1307                 "arch-x86_64/bionic/vfork.S",
   1308             ],
   1309         },
   1310     },
   1311 
   1312     cppflags: ["-Wold-style-cast"],
   1313     include_dirs: ["bionic/libstdc++/include"],
   1314     name: "libc_bionic",
   1315 }
   1316 
   1317 genrule {
   1318     name: "generated_android_ids",
   1319     out: ["generated_android_ids.h"],
   1320     srcs: [":android_filesystem_config_header"],
   1321     tool_files: ["fs_config_generator.py"],
   1322     cmd: "$(location fs_config_generator.py) aidarray $(in) > $(out)",
   1323 }
   1324 
   1325 // ========================================================
   1326 // libc_bionic_ndk.a- The portions of libc_bionic that can
   1327 // be safely used in libc_ndk.a (no troublesome global data
   1328 // or constructors).
   1329 // ========================================================
   1330 cc_library_static {
   1331     defaults: ["libc_defaults"],
   1332     srcs: [
   1333         "bionic/NetdClientDispatch.cpp",
   1334         "bionic/__bionic_get_shell_path.cpp",
   1335         "bionic/__cmsg_nxthdr.cpp",
   1336         "bionic/__errno.cpp",
   1337         "bionic/__gnu_basename.cpp",
   1338         "bionic/__libc_current_sigrtmax.cpp",
   1339         "bionic/__libc_current_sigrtmin.cpp",
   1340         "bionic/__set_errno.cpp",
   1341         "bionic/abort.cpp",
   1342         "bionic/accept.cpp",
   1343         "bionic/accept4.cpp",
   1344         "bionic/access.cpp",
   1345         "bionic/arpa_inet.cpp",
   1346         "bionic/assert.cpp",
   1347         "bionic/atof.cpp",
   1348         "bionic/bionic_arc4random.cpp",
   1349         "bionic/bionic_netlink.cpp",
   1350         "bionic/bionic_systrace.cpp",
   1351         "bionic/bionic_time_conversions.cpp",
   1352         "bionic/brk.cpp",
   1353         "bionic/c16rtomb.cpp",
   1354         "bionic/c32rtomb.cpp",
   1355         "bionic/chmod.cpp",
   1356         "bionic/chown.cpp",
   1357         "bionic/clearenv.cpp",
   1358         "bionic/clock.cpp",
   1359         "bionic/clock_getcpuclockid.cpp",
   1360         "bionic/clock_nanosleep.cpp",
   1361         "bionic/clone.cpp",
   1362         "bionic/close.cpp",
   1363         "bionic/connect.cpp",
   1364         "bionic/ctype.cpp",
   1365         "bionic/dirent.cpp",
   1366         "bionic/dup2.cpp",
   1367         "bionic/environ.cpp",
   1368         "bionic/epoll_create.cpp",
   1369         "bionic/epoll_pwait.cpp",
   1370         "bionic/epoll_wait.cpp",
   1371         "bionic/error.cpp",
   1372         "bionic/eventfd_read.cpp",
   1373         "bionic/eventfd_write.cpp",
   1374         "bionic/exec.cpp",
   1375         "bionic/faccessat.cpp",
   1376         "bionic/fchmod.cpp",
   1377         "bionic/fchmodat.cpp",
   1378         "bionic/ffs.cpp",
   1379         "bionic/fgetxattr.cpp",
   1380         "bionic/flistxattr.cpp",
   1381         "bionic/flockfile.cpp",
   1382         "bionic/fortify.cpp",
   1383         "bionic/fpclassify.cpp",
   1384         "bionic/fsetxattr.cpp",
   1385         "bionic/ftruncate.cpp",
   1386         "bionic/ftw.cpp",
   1387         "bionic/futimens.cpp",
   1388         "bionic/getcwd.cpp",
   1389         "bionic/getdomainname.cpp",
   1390         "bionic/gethostname.cpp",
   1391         "bionic/getpagesize.cpp",
   1392         "bionic/getpgrp.cpp",
   1393         "bionic/getpid.cpp",
   1394         "bionic/getpriority.cpp",
   1395         "bionic/gettid.cpp",
   1396         "bionic/grp_pwd.cpp",
   1397         "bionic/ifaddrs.cpp",
   1398         "bionic/inotify_init.cpp",
   1399         "bionic/ioctl.cpp",
   1400         "bionic/langinfo.cpp",
   1401         "bionic/lchown.cpp",
   1402         "bionic/lfs64_support.cpp",
   1403         "bionic/libc_init_common.cpp",
   1404         "bionic/libgen.cpp",
   1405         "bionic/link.cpp",
   1406         "bionic/locale.cpp",
   1407         "bionic/lockf.cpp",
   1408         "bionic/lstat.cpp",
   1409         "bionic/malloc_info.cpp",
   1410         "bionic/mblen.cpp",
   1411         "bionic/mbrtoc16.cpp",
   1412         "bionic/mbrtoc32.cpp",
   1413         "bionic/memmem.cpp",
   1414         "bionic/mempcpy.cpp",
   1415         "bionic/mkdir.cpp",
   1416         "bionic/mkfifo.cpp",
   1417         "bionic/mknod.cpp",
   1418         "bionic/mntent.cpp",
   1419         "bionic/mremap.cpp",
   1420         "bionic/net_if.cpp",
   1421         "bionic/netdb.cpp",
   1422         "bionic/netinet_in.cpp",
   1423         "bionic/nl_types.cpp",
   1424         "bionic/open.cpp",
   1425         "bionic/pathconf.cpp",
   1426         "bionic/pause.cpp",
   1427         "bionic/pipe.cpp",
   1428         "bionic/poll.cpp",
   1429         "bionic/posix_fadvise.cpp",
   1430         "bionic/posix_fallocate.cpp",
   1431         "bionic/posix_madvise.cpp",
   1432         "bionic/posix_timers.cpp",
   1433         "bionic/ptrace.cpp",
   1434         "bionic/pty.cpp",
   1435         "bionic/raise.cpp",
   1436         "bionic/rand.cpp",
   1437         "bionic/readlink.cpp",
   1438         "bionic/reboot.cpp",
   1439         "bionic/recv.cpp",
   1440         "bionic/rename.cpp",
   1441         "bionic/rmdir.cpp",
   1442         "bionic/scandir.cpp",
   1443         "bionic/sched_getaffinity.cpp",
   1444         "bionic/sched_getcpu.cpp",
   1445         "bionic/semaphore.cpp",
   1446         "bionic/send.cpp",
   1447         "bionic/setegid.cpp",
   1448         "bionic/seteuid.cpp",
   1449         "bionic/setpgrp.cpp",
   1450         "bionic/sigaction.cpp",
   1451         "bionic/sigaddset.cpp",
   1452         "bionic/sigdelset.cpp",
   1453         "bionic/sigemptyset.cpp",
   1454         "bionic/sigfillset.cpp",
   1455         "bionic/sighold.cpp",
   1456         "bionic/sigignore.cpp",
   1457         "bionic/sigismember.cpp",
   1458         "bionic/signal.cpp",
   1459         "bionic/signalfd.cpp",
   1460         "bionic/sigpause.cpp",
   1461         "bionic/sigpending.cpp",
   1462         "bionic/sigprocmask.cpp",
   1463         "bionic/sigqueue.cpp",
   1464         "bionic/sigrelse.cpp",
   1465         "bionic/sigset.cpp",
   1466         "bionic/sigsuspend.cpp",
   1467         "bionic/sigtimedwait.cpp",
   1468         "bionic/sigwait.cpp",
   1469         "bionic/sigwaitinfo.cpp",
   1470         "bionic/socket.cpp",
   1471         "bionic/stat.cpp",
   1472         "bionic/statvfs.cpp",
   1473         "bionic/stdlib_l.cpp",
   1474         "bionic/strchrnul.cpp",
   1475         "bionic/strerror.cpp",
   1476         "bionic/strerror_r.cpp",
   1477         "bionic/string_l.cpp",
   1478         "bionic/strings_l.cpp",
   1479         "bionic/strsignal.cpp",
   1480         "bionic/strtold.cpp",
   1481         "bionic/symlink.cpp",
   1482         "bionic/sync_file_range.cpp",
   1483         "bionic/sys_msg.cpp",
   1484         "bionic/sys_sem.cpp",
   1485         "bionic/sys_shm.cpp",
   1486         "bionic/sys_siglist.c",
   1487         "bionic/sys_signame.c",
   1488         "bionic/sys_time.cpp",
   1489         "bionic/sysinfo.cpp",
   1490         "bionic/syslog.cpp",
   1491         "bionic/system_properties.cpp",
   1492         "bionic/tdestroy.cpp",
   1493         "bionic/termios.cpp",
   1494         "bionic/thread_private.cpp",
   1495         "bionic/tmpfile.cpp",
   1496         "bionic/umount.cpp",
   1497         "bionic/unlink.cpp",
   1498         "bionic/wait.cpp",
   1499         "bionic/wchar.cpp",
   1500         "bionic/wchar_l.cpp",
   1501         "bionic/wcstod.cpp",
   1502         "bionic/wctype.cpp",
   1503         "bionic/wmempcpy.cpp",
   1504     ],
   1505 
   1506     multilib: {
   1507         lib32: {
   1508             // LP32 cruft
   1509             srcs: ["bionic/mmap.cpp"],
   1510         },
   1511     },
   1512     product_variables: {
   1513         treble: {
   1514             cflags: ["-D__ANDROID_TREBLE__"],
   1515         },
   1516     },
   1517     cppflags: ["-Wold-style-cast"],
   1518     local_include_dirs: ["stdio"],
   1519     include_dirs: ["bionic/libstdc++/include"],
   1520     name: "libc_bionic_ndk",
   1521     generated_headers: ["generated_android_ids"],
   1522 }
   1523 
   1524 // ========================================================
   1525 // libc_pthread.a - pthreads parts that previously lived in
   1526 // libc_bionic.a. Relocated to their own library because
   1527 // they can't be included in libc_ndk.a (as they layout of
   1528 // pthread_t has changed over the years and has ABI
   1529 // compatibility issues).
   1530 // ========================================================
   1531 
   1532 cc_library_static {
   1533     defaults: ["libc_defaults"],
   1534     srcs: [
   1535         "bionic/pthread_atfork.cpp",
   1536         "bionic/pthread_attr.cpp",
   1537         "bionic/pthread_barrier.cpp",
   1538         "bionic/pthread_cond.cpp",
   1539         "bionic/pthread_create.cpp",
   1540         "bionic/pthread_detach.cpp",
   1541         "bionic/pthread_equal.cpp",
   1542         "bionic/pthread_exit.cpp",
   1543         "bionic/pthread_getcpuclockid.cpp",
   1544         "bionic/pthread_getschedparam.cpp",
   1545         "bionic/pthread_gettid_np.cpp",
   1546         "bionic/pthread_internal.cpp",
   1547         "bionic/pthread_join.cpp",
   1548         "bionic/pthread_key.cpp",
   1549         "bionic/pthread_kill.cpp",
   1550         "bionic/pthread_mutex.cpp",
   1551         "bionic/pthread_once.cpp",
   1552         "bionic/pthread_rwlock.cpp",
   1553         "bionic/pthread_self.cpp",
   1554         "bionic/pthread_setname_np.cpp",
   1555         "bionic/pthread_setschedparam.cpp",
   1556         "bionic/pthread_sigmask.cpp",
   1557         "bionic/pthread_spinlock.cpp",
   1558     ],
   1559 
   1560     cppflags: ["-Wold-style-cast"],
   1561     include_dirs: ["bionic/libstdc++/include"],
   1562     name: "libc_pthread",
   1563 }
   1564 
   1565 // ========================================================
   1566 // libc_syscalls.a
   1567 // ========================================================
   1568 
   1569 cc_library_static {
   1570     defaults: ["libc_defaults"],
   1571     arch: {
   1572         arm: {
   1573             srcs: ["arch-arm/syscalls/**/*.S"],
   1574         },
   1575         arm64: {
   1576             srcs: ["arch-arm64/syscalls/**/*.S"],
   1577         },
   1578         mips: {
   1579             srcs: ["arch-mips/syscalls/**/*.S"],
   1580         },
   1581         mips64: {
   1582             srcs: ["arch-mips64/syscalls/**/*.S"],
   1583         },
   1584         x86: {
   1585             srcs: ["arch-x86/syscalls/**/*.S"],
   1586         },
   1587         x86_64: {
   1588             srcs: ["arch-x86_64/syscalls/**/*.S"],
   1589         },
   1590     },
   1591     name: "libc_syscalls",
   1592 }
   1593 
   1594 // ========================================================
   1595 // libc_aeabi.a
   1596 // This is an LP32 ARM-only library that needs to be built with -fno-builtin
   1597 // to avoid infinite recursion. For the other architectures we just build an
   1598 // empty library to keep this makefile simple.
   1599 // ========================================================
   1600 
   1601 cc_library_static {
   1602     defaults: ["libc_defaults"],
   1603     arch: {
   1604         arm: {
   1605             srcs: ["arch-arm/bionic/__aeabi.c"],
   1606         },
   1607     },
   1608     name: "libc_aeabi",
   1609     cflags: ["-fno-builtin"],
   1610 }
   1611 
   1612 // ========================================================
   1613 // libc_ndk.a
   1614 // Compatibility library for the NDK. This library contains
   1615 // all the parts of libc that are safe to statically link.
   1616 // We can't safely statically link things that can only run
   1617 // on a certain version of the OS. Examples include
   1618 // anything that talks to netd (a large portion of the DNS
   1619 // code) and anything that is dependent on the layout of a
   1620 // data structure that has changed across releases (such as
   1621 // pthread_t).
   1622 // ========================================================
   1623 
   1624 cc_library_static {
   1625     name: "libc_ndk",
   1626     defaults: ["libc_defaults"],
   1627     srcs: libc_common_src_files + ["bionic/malloc_common.cpp"],
   1628     multilib: {
   1629         lib32: {
   1630             srcs: libc_common_src_files_32,
   1631         },
   1632     },
   1633     arch: {
   1634         arm: {
   1635             srcs: [
   1636                 "arch-arm/bionic/exidx_dynamic.c",
   1637                 "arch-common/bionic/crtbegin_so.c",
   1638                 "arch-arm/bionic/atexit_legacy.c",
   1639                 "arch-common/bionic/crtend_so.S",
   1640             ],
   1641             whole_static_libs: ["libc_aeabi"],
   1642         },
   1643     },
   1644 
   1645     cflags: [
   1646         "-fvisibility=hidden",
   1647         "-DLIBC_STATIC",
   1648     ],
   1649 
   1650     whole_static_libs: [
   1651         "libc_bionic_ndk",
   1652         "libc_freebsd",
   1653         "libc_freebsd_large_stack",
   1654         "libc_gdtoa",
   1655         "libc_malloc",
   1656         "libc_netbsd",
   1657         "libc_openbsd_large_stack",
   1658         "libc_openbsd_ndk",
   1659         "libc_stack_protector",
   1660         "libc_syscalls",
   1661         "libc_tzcode",
   1662         "libm",
   1663         "libjemalloc",
   1664         "libstdc++",
   1665     ],
   1666 }
   1667 
   1668 // ========================================================
   1669 // libc_common.a
   1670 // ========================================================
   1671 
   1672 cc_library_static {
   1673     defaults: ["libc_defaults"],
   1674     srcs: libc_common_src_files,
   1675     multilib: {
   1676         lib32: {
   1677             srcs: libc_common_src_files_32,
   1678         },
   1679     },
   1680     name: "libc_common",
   1681 
   1682     whole_static_libs: [
   1683         "libc_bionic",
   1684         "libc_bionic_ndk",
   1685         "libc_dns",
   1686         "libc_freebsd",
   1687         "libc_freebsd_large_stack",
   1688         "libc_gdtoa",
   1689         "libc_malloc",
   1690         "libc_netbsd",
   1691         "libc_openbsd",
   1692         "libc_openbsd_large_stack",
   1693         "libc_openbsd_ndk",
   1694         "libc_pthread",
   1695         "libc_stack_protector",
   1696         "libc_syscalls",
   1697         "libc_tzcode",
   1698         "libstdc++",
   1699     ],
   1700 
   1701     arch: {
   1702         arm: {
   1703             whole_static_libs: ["libc_aeabi"],
   1704         },
   1705     },
   1706 }
   1707 
   1708 // ========================================================
   1709 // libc_nomalloc.a
   1710 // ========================================================
   1711 //
   1712 // This is a version of the static C library that does not
   1713 // include malloc. It's useful in situations when the user wants
   1714 // to provide their own malloc implementation, or wants to
   1715 // explicitly disallow the use of malloc, such as in the
   1716 // dynamic linker.
   1717 
   1718 cc_library_static {
   1719     name: "libc_nomalloc",
   1720 
   1721     defaults: ["libc_defaults"],
   1722 
   1723     arch: {
   1724         arm: {
   1725             srcs: ["arch-arm/bionic/exidx_static.c"],
   1726         },
   1727     },
   1728 
   1729     cflags: ["-DLIBC_STATIC"],
   1730 
   1731     whole_static_libs: [
   1732         "libc_common",
   1733         "libc_init_static",
   1734     ],
   1735 }
   1736 
   1737 // ========================================================
   1738 // libc_malloc.a: the _prefixed_ malloc functions (like dlcalloc).
   1739 // ========================================================
   1740 cc_library_static {
   1741     defaults: ["libc_defaults"],
   1742     srcs: ["bionic/jemalloc_wrapper.cpp"],
   1743     cflags: ["-fvisibility=hidden"],
   1744 
   1745     name: "libc_malloc",
   1746 }
   1747 
   1748 // ========================================================
   1749 // libc.a + libc.so
   1750 // ========================================================
   1751 cc_library {
   1752     defaults: ["libc_defaults"],
   1753     name: "libc",
   1754     product_variables: {
   1755         platform_sdk_version: {
   1756             asflags: ["-DPLATFORM_SDK_VERSION=%d"],
   1757         },
   1758     },
   1759     static: {
   1760         srcs: [
   1761             "bionic/dl_iterate_phdr_static.cpp",
   1762             "bionic/icu_static.cpp",
   1763             "bionic/malloc_common.cpp",
   1764             "bionic/libc_init_static.cpp",
   1765         ],
   1766         cflags: ["-DLIBC_STATIC"],
   1767         whole_static_libs: ["libc_init_static"],
   1768     },
   1769     shared: {
   1770         srcs: [
   1771             "arch-common/bionic/crtbegin_so.c",
   1772             "arch-common/bionic/crtbrand.S",
   1773             "bionic/icu.cpp",
   1774             "bionic/malloc_common.cpp",
   1775             "bionic/NetdClient.cpp",
   1776             "arch-common/bionic/crtend_so.S",
   1777         ],
   1778         whole_static_libs: ["libc_init_dynamic"],
   1779     },
   1780 
   1781     required: ["tzdata"],
   1782 
   1783     // Leave the symbols in the shared library so that stack unwinders can produce
   1784     // meaningful name resolution.
   1785     strip: {
   1786         keep_symbols: true,
   1787     },
   1788 
   1789     // Do not pack libc.so relocations; see http://b/20645321 for details.
   1790     pack_relocations: false,
   1791 
   1792     // WARNING: The only library libc.so should depend on is libdl.so!  If you add other libraries,
   1793     // make sure to add -Wl,--exclude-libs=libgcc.a to the LOCAL_LDFLAGS for those libraries.  This
   1794     // ensures that symbols that are pulled into those new libraries from libgcc.a are not declared
   1795     // external; if that were the case, then libc would not pull those symbols from libgcc.a as it
   1796     // should, instead relying on the external symbols from the dependent libraries.  That would
   1797     // create a "cloaked" dependency on libgcc.a in libc though the libraries, which is not what
   1798     // you wanted!
   1799 
   1800     shared_libs: ["libdl"],
   1801     whole_static_libs: ["libc_common", "libjemalloc"],
   1802 
   1803     nocrt: true,
   1804 
   1805     arch: {
   1806         arm: {
   1807             //TODO: This is to work around b/24465209. Remove after root cause is fixed
   1808             ldflags: ["-Wl,--hash-style=both"],
   1809 
   1810             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1811             version_script: "libc.arm.map",
   1812 
   1813             shared: {
   1814                 srcs: [
   1815                     "arch-arm/bionic/exidx_dynamic.c",
   1816 
   1817                     // special for arm
   1818                     "arch-arm/bionic/atexit_legacy.c",
   1819                 ],
   1820                 // special for arm
   1821                 cflags: ["-DCRT_LEGACY_WORKAROUND"],
   1822             },
   1823             static: {
   1824                 srcs: ["arch-arm/bionic/exidx_static.c"],
   1825             },
   1826         },
   1827         arm64: {
   1828             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1829             version_script: "libc.arm64.map",
   1830         },
   1831         mips: {
   1832             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1833             version_script: "libc.mips.map",
   1834         },
   1835         mips64: {
   1836             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1837             version_script: "libc.mips64.map",
   1838         },
   1839         x86: {
   1840             //TODO: This is to work around b/24465209. Remove after root cause is fixed
   1841             ldflags: ["-Wl,--hash-style=both"],
   1842 
   1843             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1844             version_script: "libc.x86.map",
   1845         },
   1846         x86_64: {
   1847             // Don't re-export new/delete and friends, even if the compiler really wants to.
   1848             version_script: "libc.x86_64.map",
   1849         },
   1850     },
   1851 }
   1852 
   1853 // ========================================================
   1854 // libstdc++.so + libstdc++.a
   1855 // ========================================================
   1856 cc_library {
   1857     defaults: ["libc_defaults"],
   1858     include_dirs: ["bionic/libstdc++/include"],
   1859     srcs: [
   1860         "bionic/__cxa_guard.cpp",
   1861         "bionic/__cxa_pure_virtual.cpp",
   1862         "bionic/new.cpp",
   1863     ],
   1864     name: "libstdc++",
   1865     system_shared_libs: ["libc"],
   1866 		static_libs: ["libasync_safe"],
   1867 
   1868     //TODO (dimitry): This is to work around b/24465209. Remove after root cause is fixed
   1869     arch: {
   1870         arm: {
   1871             ldflags: ["-Wl,--hash-style=both"],
   1872             version_script: "libstdc++.arm.map",
   1873         },
   1874         arm64: {
   1875             version_script: "libstdc++.arm64.map",
   1876         },
   1877         mips: {
   1878             version_script: "libstdc++.mips.map",
   1879         },
   1880         mips64: {
   1881             version_script: "libstdc++.mips64.map",
   1882         },
   1883         x86: {
   1884             ldflags: ["-Wl,--hash-style=both"],
   1885             version_script: "libstdc++.x86.map",
   1886         },
   1887         x86_64: {
   1888             version_script: "libstdc++.x86_64.map",
   1889         },
   1890     },
   1891 }
   1892 
   1893 cc_defaults {
   1894     name: "crt_defaults",
   1895     defaults: ["linux_bionic_supported"],
   1896     vendor_available: true,
   1897 
   1898     no_default_compiler_flags: true,
   1899 
   1900     arch: {
   1901         arm: {
   1902             local_include_dirs: ["arch-arm/include"],
   1903         },
   1904         arm64: {
   1905             local_include_dirs: ["arch-arm64/include"],
   1906         },
   1907         mips: {
   1908             local_include_dirs: ["arch-mips/include"],
   1909         },
   1910         mips64: {
   1911             local_include_dirs: ["arch-mips64/include"],
   1912         },
   1913         x86: {
   1914             local_include_dirs: ["arch-x86/include"],
   1915         },
   1916         x86_64: {
   1917             local_include_dirs: ["arch-x86_64/include"],
   1918         },
   1919     },
   1920     clang: false,
   1921 }
   1922 
   1923 cc_defaults {
   1924     name: "crt_so_defaults",
   1925 
   1926     vendor_available: true,
   1927     arch: {
   1928         mips: {
   1929             cflags: ["-fPIC"],
   1930         },
   1931         mips64: {
   1932             cflags: ["-fPIC"],
   1933         },
   1934         x86: {
   1935             cflags: ["-fPIC"],
   1936         },
   1937         x86_64: {
   1938             cflags: ["-fPIC"],
   1939         },
   1940     },
   1941 }
   1942 
   1943 // crt obj files
   1944 cc_object {
   1945     name: "crtbrand",
   1946     // crtbrand.c needs <stdint.h> and a #define for the platform SDK version.
   1947     local_include_dirs: ["include"],
   1948     product_variables: {
   1949         platform_sdk_version: {
   1950             asflags: ["-DPLATFORM_SDK_VERSION=%d"],
   1951         },
   1952     },
   1953     srcs: ["arch-common/bionic/crtbrand.S"],
   1954 
   1955     defaults: [
   1956         "crt_defaults",
   1957         "crt_so_defaults",
   1958     ],
   1959 }
   1960 
   1961 cc_object {
   1962     name: "crtbegin_so1",
   1963     local_include_dirs: ["include"],
   1964     srcs: ["arch-common/bionic/crtbegin_so.c"],
   1965 
   1966     defaults: [
   1967         "crt_defaults",
   1968         "crt_so_defaults",
   1969     ],
   1970 }
   1971 
   1972 cc_object {
   1973     name: "crtbegin_so",
   1974 
   1975     defaults: [
   1976         "crt_defaults",
   1977         "crt_so_defaults",
   1978     ],
   1979     objs: [
   1980         "crtbegin_so1",
   1981         "crtbrand",
   1982     ],
   1983 }
   1984 
   1985 cc_object {
   1986     name: "crtend_so",
   1987     local_include_dirs: ["include"],
   1988     srcs: ["arch-common/bionic/crtend_so.S"],
   1989 
   1990     defaults: [
   1991         "crt_defaults",
   1992         "crt_so_defaults",
   1993     ],
   1994 }
   1995 
   1996 cc_object {
   1997     name: "crtbegin_static1",
   1998     local_include_dirs: ["include"],
   1999     srcs: ["arch-common/bionic/crtbegin.c"],
   2000 
   2001     arch: {
   2002         mips: {
   2003             srcs: [
   2004                 "arch-mips/bionic/crtbegin.c",
   2005             ],
   2006             exclude_srcs: [
   2007                 "arch-common/bionic/crtbegin.c",
   2008             ],
   2009         },
   2010         mips64: {
   2011             srcs: [
   2012                 "arch-mips64/bionic/crtbegin.c",
   2013             ],
   2014             exclude_srcs: [
   2015                 "arch-common/bionic/crtbegin.c",
   2016             ],
   2017         },
   2018     },
   2019 
   2020     defaults: ["crt_defaults"],
   2021 }
   2022 
   2023 cc_object {
   2024     name: "crtbegin_static",
   2025 
   2026     objs: [
   2027         "crtbegin_static1",
   2028         "crtbrand",
   2029     ],
   2030     defaults: ["crt_defaults"],
   2031 }
   2032 
   2033 cc_object {
   2034     name: "crtbegin_dynamic1",
   2035     local_include_dirs: ["include"],
   2036     srcs: ["arch-common/bionic/crtbegin.c"],
   2037 
   2038     arch: {
   2039         mips: {
   2040             srcs: [
   2041                 "arch-mips/bionic/crtbegin.c",
   2042             ],
   2043             exclude_srcs: [
   2044                 "arch-common/bionic/crtbegin.c",
   2045             ],
   2046         },
   2047         mips64: {
   2048             srcs: [
   2049                 "arch-mips64/bionic/crtbegin.c",
   2050             ],
   2051             exclude_srcs: [
   2052                 "arch-common/bionic/crtbegin.c",
   2053             ],
   2054         },
   2055     },
   2056     defaults: ["crt_defaults"],
   2057 }
   2058 
   2059 cc_object {
   2060     name: "crtbegin_dynamic",
   2061 
   2062     objs: [
   2063         "crtbegin_dynamic1",
   2064         "crtbrand",
   2065     ],
   2066     defaults: ["crt_defaults"],
   2067 }
   2068 
   2069 cc_object {
   2070     // We rename crtend.o to crtend_android.o to avoid a
   2071     // name clash between gcc and bionic.
   2072     name: "crtend_android",
   2073     local_include_dirs: ["include"],
   2074     srcs: ["arch-common/bionic/crtend.S"],
   2075 
   2076     defaults: ["crt_defaults"],
   2077 }
   2078 
   2079 preprocessed_ndk_headers {
   2080     name: "common_libc",
   2081     from: "include",
   2082     to: "",
   2083     license: "NOTICE",
   2084 }
   2085 
   2086 ndk_headers {
   2087     name: "libc_uapi",
   2088     from: "kernel/uapi",
   2089     to: "",
   2090     srcs: [
   2091         "kernel/uapi/asm-generic/**/*.h",
   2092         "kernel/uapi/drm/**/*.h",
   2093         "kernel/uapi/linux/**/*.h",
   2094         "kernel/uapi/misc/**/*.h",
   2095         "kernel/uapi/mtd/**/*.h",
   2096         "kernel/uapi/rdma/**/*.h",
   2097         "kernel/uapi/scsi/**/*.h",
   2098         "kernel/uapi/sound/**/*.h",
   2099         "kernel/uapi/video/**/*.h",
   2100         "kernel/uapi/xen/**/*.h",
   2101     ],
   2102     license: "NOTICE",
   2103 }
   2104 
   2105 ndk_headers {
   2106     name: "libc_kernel_android_uapi_linux",
   2107     from: "kernel/android/uapi/linux",
   2108     to: "linux",
   2109     srcs: ["kernel/android/uapi/linux/**/*.h"],
   2110     license: "NOTICE",
   2111 }
   2112 
   2113 ndk_headers {
   2114     name: "libc_kernel_android_scsi",
   2115     from: "kernel/android/scsi/scsi",
   2116     to: "scsi",
   2117     srcs: ["kernel/android/scsi/**/*.h"],
   2118     license: "NOTICE",
   2119 }
   2120 
   2121 ndk_headers {
   2122     name: "libc_asm_arm",
   2123     from: "kernel/uapi/asm-arm",
   2124     to: "arm-linux-androideabi",
   2125     srcs: ["kernel/uapi/asm-arm/**/*.h"],
   2126     license: "NOTICE",
   2127 }
   2128 
   2129 ndk_headers {
   2130     name: "libc_asm_arm64",
   2131     from: "kernel/uapi/asm-arm64",
   2132     to: "aarch64-linux-android",
   2133     srcs: ["kernel/uapi/asm-arm64/**/*.h"],
   2134     license: "NOTICE",
   2135 }
   2136 
   2137 ndk_headers {
   2138     name: "libc_asm_mips",
   2139     from: "kernel/uapi/asm-mips",
   2140     to: "mipsel-linux-android",
   2141     srcs: ["kernel/uapi/asm-mips/**/*.h"],
   2142     license: "NOTICE",
   2143 }
   2144 
   2145 ndk_headers {
   2146     name: "libc_asm_mips64",
   2147     from: "kernel/uapi/asm-mips",
   2148     to: "mips64el-linux-android",
   2149     srcs: ["kernel/uapi/asm-mips/**/*.h"],
   2150     license: "NOTICE",
   2151 }
   2152 
   2153 ndk_headers {
   2154     name: "libc_asm_x86",
   2155     from: "kernel/uapi/asm-x86",
   2156     to: "i686-linux-android",
   2157     srcs: ["kernel/uapi/asm-x86/**/*.h"],
   2158     license: "NOTICE",
   2159 }
   2160 
   2161 ndk_headers {
   2162     name: "libc_asm_x86_64",
   2163     from: "kernel/uapi/asm-x86",
   2164     to: "x86_64-linux-android",
   2165     srcs: ["kernel/uapi/asm-x86/**/*.h"],
   2166     license: "NOTICE",
   2167 }
   2168 
   2169 ndk_headers {
   2170     name: "libc_machine_arm",
   2171     from: "arch-arm/include",
   2172     to: "arm-linux-androideabi",
   2173     srcs: ["arch-arm/include/**/*.h"],
   2174     license: "NOTICE",
   2175 }
   2176 
   2177 ndk_headers {
   2178     name: "libc_machine_arm64",
   2179     from: "arch-arm64/include",
   2180     to: "aarch64-linux-android",
   2181     srcs: ["arch-arm64/include/**/*.h"],
   2182     license: "NOTICE",
   2183 }
   2184 
   2185 ndk_headers {
   2186     name: "libc_machine_mips",
   2187     from: "arch-mips/include",
   2188     to: "mipsel-linux-android",
   2189     srcs: ["arch-mips/include/**/*.h"],
   2190     license: "NOTICE",
   2191 }
   2192 
   2193 ndk_headers {
   2194     name: "libc_machine_mips64",
   2195     from: "arch-mips/include",
   2196     to: "mips64el-linux-android",
   2197     srcs: ["arch-mips/include/**/*.h"],
   2198     license: "NOTICE",
   2199 }
   2200 
   2201 ndk_headers {
   2202     name: "libc_machine_x86",
   2203     from: "arch-x86/include",
   2204     to: "i686-linux-android",
   2205     srcs: ["arch-x86/include/**/*.h"],
   2206     license: "NOTICE",
   2207 }
   2208 
   2209 ndk_headers {
   2210     name: "libc_machine_x86_64",
   2211     from: "arch-x86_64/include",
   2212     to: "x86_64-linux-android",
   2213     srcs: ["arch-x86_64/include/**/*.h"],
   2214     license: "NOTICE",
   2215 }
   2216 
   2217 ndk_library {
   2218     name: "libc",
   2219     symbol_file: "libc.map.txt",
   2220     first_version: "9",
   2221 }
   2222 
   2223 llndk_library {
   2224     name: "libc",
   2225     symbol_file: "libc.map.txt",
   2226     export_headers_as_system: true,
   2227     export_preprocessed_headers: ["include"],
   2228     arch: {
   2229         arm: {
   2230             export_include_dirs: [
   2231                 "arch-arm/include",
   2232                 "kernel/uapi",
   2233                 "kernel/uapi/asm-arm",
   2234                 "kernel/android/uapi",
   2235             ],
   2236         },
   2237         arm64: {
   2238             export_include_dirs: [
   2239                 "arch-arm64/include",
   2240                 "kernel/uapi",
   2241                 "kernel/uapi/asm-arm64",
   2242                 "kernel/android/uapi",
   2243             ],
   2244         },
   2245         mips: {
   2246             export_include_dirs: [
   2247                 "arch-mips/include",
   2248                 "kernel/uapi",
   2249                 "kernel/uapi/asm-mips",
   2250                 "kernel/android/uapi",
   2251             ],
   2252         },
   2253         mips64: {
   2254             export_include_dirs: [
   2255                 "arch-mips64/include",
   2256                 "kernel/uapi",
   2257                 "kernel/uapi/asm-mips",
   2258                 "kernel/android/uapi",
   2259             ],
   2260         },
   2261         x86: {
   2262             export_include_dirs: [
   2263                 "arch-x86/include",
   2264                 "kernel/uapi",
   2265                 "kernel/uapi/asm-x86",
   2266                 "kernel/android/uapi",
   2267             ],
   2268         },
   2269         x86_64: {
   2270             export_include_dirs: [
   2271                 "arch-x86_64/include",
   2272                 "kernel/uapi",
   2273                 "kernel/uapi/asm-x86",
   2274                 "kernel/android/uapi",
   2275             ],
   2276         },
   2277     },
   2278 }
   2279 
   2280 ndk_library {
   2281     name: "libstdc++",
   2282     symbol_file: "libstdc++.map.txt",
   2283     first_version: "9",
   2284 }
   2285 
   2286 subdirs = ["*"]
   2287