Print this page
1235 Use symbol capabilities to eliminate libc_hwcap*

@@ -17,29 +17,1336 @@
 # information: Portions Copyright [yyyy] [name of copyright owner]
 #
 # CDDL HEADER END
 #
 #
-# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright 2016 Joyent, Inc.
+# Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved.
+# Copyright 2013 Garrett D'Amore <garrett@damore.org>
+#
+# Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident "%Z%%M% %I%     %E% SMI"
+
+LIBCBASE=       .
+LIBRARY=        libc.a
+LIBCDIR=        $(SRC)/lib/libc
+LIB_PIC=        libc_pic.a
+VERS=           .1
+CPP=            /usr/lib/cpp
+TARGET_ARCH=    i386
+
+# include comm page definitions
+include $(SRC)/lib/commpage/Makefile.shared.com
+include $(SRC)/lib/commpage/Makefile.shared.targ
+
+VALUES=         values-Xa.o
+
+# objects are grouped by source directory
+
+# Symbol capabilities objects.
+EXTPICS= \
+        $(LIBCDIR)/capabilities/i386-hwcap1/pics/symcap.o \
+        $(LIBCDIR)/capabilities/i386-hwcap2/pics/symcap.o \
+        $(LIBCDIR)/capabilities/i386-hwcap3/pics/symcap.o
+
+# local objects
+STRETS=
+
+CRTOBJS=                        \
+        cerror.o                \
+        cerror64.o
+
+DYNOBJS=                        \
+        _rtbootld.o
+
+FPOBJS=                         \
+        _D_cplx_div.o           \
+        _D_cplx_div_ix.o        \
+        _D_cplx_div_rx.o        \
+        _D_cplx_lr_div.o        \
+        _D_cplx_lr_div_ix.o     \
+        _D_cplx_lr_div_rx.o     \
+        _D_cplx_mul.o           \
+        _F_cplx_div.o           \
+        _F_cplx_div_ix.o        \
+        _F_cplx_div_rx.o        \
+        _F_cplx_lr_div.o        \
+        _F_cplx_lr_div_ix.o     \
+        _F_cplx_lr_div_rx.o     \
+        _F_cplx_mul.o           \
+        _X_cplx_div.o           \
+        _X_cplx_div_ix.o        \
+        _X_cplx_div_rx.o        \
+        _X_cplx_lr_div.o        \
+        _X_cplx_lr_div_ix.o     \
+        _X_cplx_lr_div_rx.o     \
+        _X_cplx_mul.o           \
+        fpgetmask.o             \
+        fpgetround.o            \
+        fpgetsticky.o           \
+        fpsetmask.o             \
+        fpsetround.o            \
+        fpsetsticky.o           \
+        fpstart.o               \
+        ieee.o
+
+FPASMOBJS=                      \
+        __xgetRD.o              \
+        _base_il.o              \
+        _xtoll.o                \
+        _xtoull.o               \
+        fpcw.o
+
+ATOMICOBJS=                     \
+        atomic.o
+
+CHACHAOBJS=                     \
+        chacha.o
+
+XATTROBJS=                      \
+        xattr_common.o
+
+COMOBJS=                        \
+        bcmp.o                  \
+        bcopy.o                 \
+        bsearch.o               \
+        bzero.o                 \
+        qsort.o                 \
+        strtol.o                \
+        strtoul.o               \
+        strtoll.o               \
+        strtoull.o
+
+DTRACEOBJS=                     \
+        dtrace_data.o
+
+SECFLAGSOBJS=                   \
+        secflags.o
+
+GENOBJS=                        \
+        $(COMMPAGE_OBJS)        \
+        _div64.o                \
+        _divdi3.o               \
+        _getsp.o                \
+        _mul64.o                \
+        abs.o                   \
+        alloca.o                \
+        arc4random.o            \
+        arc4random_uniform.o    \
+        byteorder.o             \
+        byteorder64.o           \
+        cuexit.o                \
+        ecvt.o                  \
+        endian.o                \
+        errlst.o                \
+        i386_data.o             \
+        ladd.o                  \
+        ldivide.o               \
+        lmul.o                  \
+        lock.o                  \
+        lshiftl.o               \
+        lsign.o                 \
+        lsub.o                  \
+        makectxt.o              \
+        memccpy.o               \
+        memchr.o                \
+        memcmp.o                \
+        memcpy.o                \
+        memset.o                \
+        new_list.o              \
+        setjmp.o                \
+        siginfolst.o            \
+        siglongjmp.o            \
+        strcat.o                \
+        strchr.o                \
+        strcmp.o                \
+        strcpy.o                \
+        strlen.o                \
+        strncat.o               \
+        strncmp.o               \
+        strncpy.o               \
+        strnlen.o               \
+        strrchr.o               \
+        sync_instruction_memory.o
+
+# sysobjs that contain large-file interfaces
+COMSYSOBJS64=                   \
+        fstatvfs64.o            \
+        getdents64.o            \
+        getrlimit64.o           \
+        lseek64.o               \
+        mmap64.o                \
+        pread64.o               \
+        preadv64.o              \
+        pwrite64.o              \
+        pwritev64.o             \
+        setrlimit64.o           \
+        statvfs64.o
+
+SYSOBJS64=
+
+COMSYSOBJS=                     \
+        __clock_timer.o         \
+        __getloadavg.o          \
+        __rusagesys.o           \
+        __signotify.o           \
+        __sigrt.o               \
+        __time.o                \
+        _lgrp_home_fast.o       \
+        _lgrpsys.o              \
+        _nfssys.o               \
+        _portfs.o               \
+        _pset.o                 \
+        _rpcsys.o               \
+        _sigaction.o            \
+        _so_accept.o            \
+        _so_bind.o              \
+        _so_connect.o           \
+        _so_getpeername.o       \
+        _so_getsockname.o       \
+        _so_getsockopt.o        \
+        _so_listen.o            \
+        _so_recv.o              \
+        _so_recvfrom.o          \
+        _so_recvmsg.o           \
+        _so_send.o              \
+        _so_sendmsg.o           \
+        _so_sendto.o            \
+        _so_setsockopt.o        \
+        _so_shutdown.o          \
+        _so_socket.o            \
+        _so_socketpair.o        \
+        _sockconfig.o           \
+        acct.o                  \
+        acl.o                   \
+        adjtime.o               \
+        alarm.o                 \
+        brk.o                   \
+        chdir.o                 \
+        chroot.o                \
+        cladm.o                 \
+        close.o                 \
+        execve.o                \
+        exit.o                  \
+        facl.o                  \
+        fchdir.o                \
+        fchroot.o               \
+        fdsync.o                \
+        fpathconf.o             \
+        fstatfs.o               \
+        fstatvfs.o              \
+        getcpuid.o              \
+        getdents.o              \
+        getegid.o               \
+        geteuid.o               \
+        getgid.o                \
+        getgroups.o             \
+        gethrtime.o             \
+        getitimer.o             \
+        getmsg.o                \
+        getpid.o                \
+        getpmsg.o               \
+        getppid.o               \
+        getrandom.o             \
+        getrlimit.o             \
+        getuid.o                \
+        gtty.o                  \
+        install_utrap.o         \
+        ioctl.o                 \
+        kaio.o                  \
+        kill.o                  \
+        llseek.o                \
+        lseek.o                 \
+        mmapobjsys.o            \
+        memcntl.o               \
+        mincore.o               \
+        mmap.o                  \
+        modctl.o                \
+        mount.o                 \
+        mprotect.o              \
+        munmap.o                \
+        nice.o                  \
+        ntp_adjtime.o           \
+        ntp_gettime.o           \
+        p_online.o              \
+        pathconf.o              \
+        pause.o                 \
+        pcsample.o              \
+        pipe2.o                 \
+        pollsys.o               \
+        pread.o                 \
+        preadv.o                \
+        priocntlset.o           \
+        processor_bind.o        \
+        processor_info.o        \
+        profil.o                \
+        psecflagsset.o          \
+        putmsg.o                \
+        putpmsg.o               \
+        pwrite.o                \
+        pwritev.o               \
+        read.o                  \
+        readv.o                 \
+        resolvepath.o           \
+        seteguid.o              \
+        setgid.o                \
+        setgroups.o             \
+        setitimer.o             \
+        setreid.o               \
+        setrlimit.o             \
+        setuid.o                \
+        sigaltstk.o             \
+        sigprocmsk.o            \
+        sigsendset.o            \
+        sigsuspend.o            \
+        statfs.o                \
+        statvfs.o               \
+        stty.o                  \
+        sync.o                  \
+        sysconfig.o             \
+        sysfs.o                 \
+        sysinfo.o               \
+        syslwp.o                \
+        times.o                 \
+        ulimit.o                \
+        umask.o                 \
+        umount2.o               \
+        utssys.o                \
+        uucopy.o                \
+        vhangup.o               \
+        waitid.o                \
+        write.o                 \
+        writev.o                \
+        yield.o
+
+SYSOBJS=                        \
+        __clock_gettime.o       \
+        __clock_gettime_sys.o   \
+        __getcontext.o          \
+        __uadmin.o              \
+        _lwp_mutex_unlock.o     \
+        _stack_grow.o           \
+        door.o                  \
+        forkx.o                 \
+        forkallx.o              \
+        getcontext.o            \
+        gettimeofday.o          \
+        lwp_private.o           \
+        nuname.o                \
+        ptrace.o                \
+        syscall.o               \
+        sysi86.o                \
+        tls_get_addr.o          \
+        uadmin.o                \
+        umount.o                \
+        uname.o                 \
+        vforkx.o                \
+        xstat.o
+
+# objects under $(LIBCDIR)/port which contain transitional large file interfaces
+PORTGEN64=                      \
+        _xftw64.o               \
+        attropen64.o            \
+        ftw64.o                 \
+        mkstemp64.o             \
+        nftw64.o                \
+        tell64.o                \
+        truncate64.o
+
+# objects from source under $(LIBCDIR)/port
+PORTFP=                         \
+        __flt_decim.o           \
+        __flt_rounds.o          \
+        __tbl_10_b.o            \
+        __tbl_10_h.o            \
+        __tbl_10_s.o            \
+        __tbl_2_b.o             \
+        __tbl_2_h.o             \
+        __tbl_2_s.o             \
+        __tbl_fdq.o             \
+        __tbl_tens.o            \
+        __x_power.o             \
+        _base_sup.o             \
+        aconvert.o              \
+        decimal_bin.o           \
+        double_decim.o          \
+        econvert.o              \
+        fconvert.o              \
+        file_decim.o            \
+        finite.o                \
+        fp_data.o               \
+        func_decim.o            \
+        gconvert.o              \
+        hex_bin.o               \
+        ieee_globals.o          \
+        pack_float.o            \
+        sigfpe.o                \
+        string_decim.o
+
+PORTGEN=                        \
+        _env_data.o             \
+        _xftw.o                 \
+        a64l.o                  \
+        abort.o                 \
+        addsev.o                \
+        ascii_strcasecmp.o      \
+        ascii_strncasecmp.o     \
+        assert.o                \
+        atof.o                  \
+        atoi.o                  \
+        atol.o                  \
+        atoll.o                 \
+        attrat.o                \
+        attropen.o              \
+        atexit.o                \
+        atfork.o                \
+        basename.o              \
+        calloc.o                \
+        catgets.o               \
+        catopen.o               \
+        cfgetispeed.o           \
+        cfgetospeed.o           \
+        cfree.o                 \
+        cfsetispeed.o           \
+        cfsetospeed.o           \
+        cftime.o                \
+        clock.o                 \
+        closedir.o              \
+        closefrom.o             \
+        confstr.o               \
+        crypt.o                 \
+        csetlen.o               \
+        ctime.o                 \
+        ctime_r.o               \
+        daemon.o                \
+        deflt.o                 \
+        directio.o              \
+        dirname.o               \
+        div.o                   \
+        drand48.o               \
+        dup.o                   \
+        env_data.o              \
+        err.o                   \
+        errno.o                 \
+        euclen.o                \
+        event_port.o            \
+        execvp.o                \
+        explicit_bzero.o        \
+        fattach.o               \
+        fdetach.o               \
+        fdopendir.o             \
+        ffs.o                   \
+        flock.o                 \
+        fls.o                   \
+        fmtmsg.o                \
+        ftime.o                 \
+        ftok.o                  \
+        ftw.o                   \
+        gcvt.o                  \
+        getauxv.o               \
+        getcwd.o                \
+        getdate_err.o           \
+        getdtblsize.o           \
+        getentropy.o            \
+        getenv.o                \
+        getexecname.o           \
+        getgrnam.o              \
+        getgrnam_r.o            \
+        gethostid.o             \
+        gethostname.o           \
+        gethz.o                 \
+        getisax.o               \
+        getloadavg.o            \
+        getlogin.o              \
+        getmntent.o             \
+        getnetgrent.o           \
+        get_nprocs.o            \
+        getopt.o                \
+        getopt_long.o           \
+        getpagesize.o           \
+        getpw.o                 \
+        getpwnam.o              \
+        getpwnam_r.o            \
+        getrusage.o             \
+        getspent.o              \
+        getspent_r.o            \
+        getsubopt.o             \
+        gettxt.o                \
+        getusershell.o          \
+        getut.o                 \
+        getutx.o                \
+        getvfsent.o             \
+        getwd.o                 \
+        getwidth.o              \
+        getxby_door.o           \
+        gtxt.o                  \
+        hsearch.o               \
+        iconv.o                 \
+        imaxabs.o               \
+        imaxdiv.o               \
+        index.o                 \
+        initgroups.o            \
+        insque.o                \
+        isaexec.o               \
+        isastream.o             \
+        isatty.o                \
+        killpg.o                \
+        klpdlib.o               \
+        l64a.o                  \
+        lckpwdf.o               \
+        lconstants.o            \
+        lexp10.o                \
+        lfind.o                 \
+        lfmt.o                  \
+        lfmt_log.o              \
+        llabs.o                 \
+        lldiv.o                 \
+        llog10.o                \
+        lltostr.o               \
+        localtime.o             \
+        lsearch.o               \
+        madvise.o               \
+        malloc.o                \
+        memalign.o              \
+        memmem.o                \
+        mkdev.o                 \
+        mkdtemp.o               \
+        mkfifo.o                \
+        mkstemp.o               \
+        mktemp.o                \
+        mlock.o                 \
+        mlockall.o              \
+        mon.o                   \
+        msync.o                 \
+        munlock.o               \
+        munlockall.o            \
+        ndbm.o                  \
+        nftw.o                  \
+        nlspath_checks.o        \
+        nsparse.o               \
+        nss_common.o            \
+        nss_dbdefs.o            \
+        nss_deffinder.o         \
+        opendir.o               \
+        opt_data.o              \
+        perror.o                \
+        pfmt.o                  \
+        pfmt_data.o             \
+        pfmt_print.o            \
+        pipe.o                  \
+        plock.o                 \
+        poll.o                  \
+        posix_fadvise.o         \
+        posix_fallocate.o       \
+        posix_madvise.o         \
+        posix_memalign.o        \
+        priocntl.o              \
+        privlib.o               \
+        priv_str_xlate.o        \
+        psecflags.o             \
+        psiginfo.o              \
+        psignal.o               \
+        pt.o                    \
+        putpwent.o              \
+        putspent.o              \
+        raise.o                 \
+        rand.o                  \
+        random.o                \
+        rctlops.o               \
+        readdir.o               \
+        readdir_r.o             \
+        realpath.o              \
+        reboot.o                \
+        regexpr.o               \
+        remove.o                \
+        rewinddir.o             \
+        rindex.o                \
+        scandir.o               \
+        seekdir.o               \
+        select.o                \
+        setlabel.o              \
+        setpriority.o           \
+        settimeofday.o          \
+        sh_locks.o              \
+        sigflag.o               \
+        siglist.o               \
+        sigsend.o               \
+        sigsetops.o             \
+        ssignal.o               \
+        stack.o                 \
+        stpcpy.o                \
+        stpncpy.o               \
+        str2sig.o               \
+        strcase_charmap.o       \
+        strchrnul.o             \
+        strcspn.o               \
+        strdup.o                \
+        strerror.o              \
+        strlcat.o               \
+        strlcpy.o               \
+        strndup.o               \
+        strpbrk.o               \
+        strsep.o                \
+        strsignal.o             \
+        strspn.o                \
+        strstr.o                \
+        strtod.o                \
+        strtoimax.o             \
+        strtok.o                \
+        strtok_r.o              \
+        strtoumax.o             \
+        swab.o                  \
+        swapctl.o               \
+        sysconf.o               \
+        syslog.o                \
+        tcdrain.o               \
+        tcflow.o                \
+        tcflush.o               \
+        tcgetattr.o             \
+        tcgetpgrp.o             \
+        tcgetsid.o              \
+        tcsendbreak.o           \
+        tcsetattr.o             \
+        tcsetpgrp.o             \
+        tell.o                  \
+        telldir.o               \
+        tfind.o                 \
+        time_data.o             \
+        time_gdata.o            \
+        timespec_get.o          \
+        tls_data.o              \
+        truncate.o              \
+        tsdalloc.o              \
+        tsearch.o               \
+        ttyname.o               \
+        ttyslot.o               \
+        ualarm.o                \
+        ucred.o                 \
+        valloc.o                \
+        vlfmt.o                 \
+        vpfmt.o                 \
+        waitpid.o               \
+        walkstack.o             \
+        wdata.o                 \
+        xgetwidth.o             \
+        xpg4.o                  \
+        xpg6.o
+
+PORTPRINT_W=                    \
+        doprnt_w.o
+
+PORTPRINT=                      \
+        asprintf.o              \
+        doprnt.o                \
+        fprintf.o               \
+        printf.o                \
+        snprintf.o              \
+        sprintf.o               \
+        vfprintf.o              \
+        vprintf.o               \
+        vsnprintf.o             \
+        vsprintf.o              \
+        vwprintf.o              \
+        wprintf.o
+
+# c89 variants to support 32-bit size of c89 u/intmax_t (32-bit libc only)
+PORTPRINT_C89=                  \
+        vfprintf_c89.o          \
+        vprintf_c89.o           \
+        vsnprintf_c89.o         \
+        vsprintf_c89.o          \
+        vwprintf_c89.o
+
+PORTSTDIO_C89=                  \
+        vscanf_c89.o            \
+        vwscanf_c89.o           \
+
+# portable stdio objects that contain large file interfaces.
+# Note: fopen64 is a special case, as we build it small.
+PORTSTDIO64=                    \
+        fopen64.o               \
+        fpos64.o
+
+PORTSTDIO_W=                    \
+        doscan_w.o
+
+PORTSTDIO=                      \
+        __extensions.o          \
+        _endopen.o              \
+        _filbuf.o               \
+        _findbuf.o              \
+        _flsbuf.o               \
+        _wrtchk.o               \
+        clearerr.o              \
+        ctermid.o               \
+        ctermid_r.o             \
+        cuserid.o               \
+        data.o                  \
+        doscan.o                \
+        fdopen.o                \
+        feof.o                  \
+        ferror.o                \
+        fgetc.o                 \
+        fgets.o                 \
+        fileno.o                \
+        flockf.o                \
+        flush.o                 \
+        fopen.o                 \
+        fpos.o                  \
+        fputc.o                 \
+        fputs.o                 \
+        fread.o                 \
+        fseek.o                 \
+        fseeko.o                \
+        ftell.o                 \
+        ftello.o                \
+        fwrite.o                \
+        getc.o                  \
+        getchar.o               \
+        getline.o               \
+        getpass.o               \
+        gets.o                  \
+        getw.o                  \
+        mse.o                   \
+        popen.o                 \
+        putc.o                  \
+        putchar.o               \
+        puts.o                  \
+        putw.o                  \
+        rewind.o                \
+        scanf.o                 \
+        setbuf.o                \
+        setbuffer.o             \
+        setvbuf.o               \
+        system.o                \
+        tempnam.o               \
+        tmpfile.o               \
+        tmpnam_r.o              \
+        ungetc.o                \
+        vscanf.o                \
+        vwscanf.o               \
+        wscanf.o
+
+PORTI18N=                       \
+        getwchar.o              \
+        putwchar.o              \
+        putws.o                 \
+        strtows.o               \
+        wcsnlen.o               \
+        wcsstr.o                \
+        wcstoimax.o             \
+        wcstol.o                \
+        wcstoul.o               \
+        wcswcs.o                \
+        wmemchr.o               \
+        wmemcmp.o               \
+        wmemcpy.o               \
+        wmemmove.o              \
+        wmemset.o               \
+        wscat.o                 \
+        wschr.o                 \
+        wscmp.o                 \
+        wscpy.o                 \
+        wscspn.o                \
+        wsdup.o                 \
+        wslen.o                 \
+        wsncat.o                \
+        wsncmp.o                \
+        wsncpy.o                \
+        wspbrk.o                \
+        wsprintf.o              \
+        wsrchr.o                \
+        wsscanf.o               \
+        wsspn.o                 \
+        wstod.o                 \
+        wstok.o                 \
+        wstol.o                 \
+        wstoll.o                \
+        wsxfrm.o                \
+        gettext.o               \
+        gettext_gnu.o           \
+        gettext_real.o          \
+        gettext_util.o          \
+        plural_parser.o         \
+        wdresolve.o             \
+        _ctype.o                \
+        isascii.o               \
+        toascii.o
+
+PORTI18N_COND=                  \
+        wcstol_longlong.o       \
+        wcstoul_longlong.o
+
+PORTLOCALE=                     \
+        big5.o                  \
+        btowc.o                 \
+        collate.o               \
+        collcmp.o               \
+        euc.o                   \
+        fnmatch.o               \
+        fgetwc.o                \
+        fgetws.o                \
+        fix_grouping.o          \
+        fputwc.o                \
+        fputws.o                \
+        fwide.o                 \
+        gb18030.o               \
+        gb2312.o                \
+        gbk.o                   \
+        getdate.o               \
+        isdigit.o               \
+        iswctype.o              \
+        ldpart.o                \
+        lmessages.o             \
+        lnumeric.o              \
+        lmonetary.o             \
+        localeconv.o            \
+        localeimpl.o            \
+        mbftowc.o               \
+        mblen.o                 \
+        mbrlen.o                \
+        mbrtowc.o               \
+        mbsinit.o               \
+        mbsnrtowcs.o            \
+        mbsrtowcs.o             \
+        mbstowcs.o              \
+        mbtowc.o                \
+        mskanji.o               \
+        nextwctype.o            \
+        nl_langinfo.o           \
+        none.o                  \
+        regcomp.o               \
+        regfree.o               \
+        regerror.o              \
+        regexec.o               \
+        rune.o                  \
+        runetype.o              \
+        setlocale.o             \
+        setrunelocale.o         \
+        strcasecmp.o            \
+        strcasestr.o            \
+        strcoll.o               \
+        strfmon.o               \
+        strftime.o              \
+        strncasecmp.o           \
+        strptime.o              \
+        strxfrm.o               \
+        table.o                 \
+        timelocal.o             \
+        tolower.o               \
+        towlower.o              \
+        ungetwc.o               \
+        utf8.o                  \
+        wcrtomb.o               \
+        wcscasecmp.o            \
+        wcscoll.o               \
+        wcsftime.o              \
+        wcsnrtombs.o            \
+        wcsrtombs.o             \
+        wcswidth.o              \
+        wcstombs.o              \
+        wcsxfrm.o               \
+        wctob.o                 \
+        wctomb.o                \
+        wctrans.o               \
+        wctype.o                \
+        wcwidth.o               \
+        wscol.o
+
+AIOOBJS=                        \
+        aio.o                   \
+        aio_alloc.o             \
+        posix_aio.o
+
+RTOBJS=                         \
+        clock_timer.o           \
+        mqueue.o                \
+        pos4obj.o               \
+        sched.o                 \
+        sem.o                   \
+        shm.o                   \
+        sigev_thread.o
+
+TPOOLOBJS=                      \
+        thread_pool.o
+
+THREADSOBJS=                    \
+        alloc.o                 \
+        assfail.o               \
+        cancel.o                \
+        c11_thr.o               \
+        door_calls.o            \
+        tmem.o                  \
+        pthr_attr.o             \
+        pthr_barrier.o          \
+        pthr_cond.o             \
+        pthr_mutex.o            \
+        pthr_rwlock.o           \
+        pthread.o               \
+        rwlock.o                \
+        scalls.o                \
+        sema.o                  \
+        sigaction.o             \
+        spawn.o                 \
+        synch.o                 \
+        tdb_agent.o             \
+        thr.o                   \
+        thread_interface.o      \
+        tls.o                   \
+        tsd.o
+
+THREADSMACHOBJS=                \
+        machdep.o
+
+THREADSASMOBJS=                 \
+        asm_subr.o
+
+UNICODEOBJS=                    \
+        u8_textprep.o           \
+        uconv.o
+
+UNWINDMACHOBJS=                 \
+        unwind.o
+
+UNWINDASMOBJS=                  \
+        unwind_frame.o
+
+# objects that implement the transitional large file API
+PORTSYS64=                      \
+        lockf64.o               \
+        stat64.o
+
+PORTSYS=                        \
+        _autofssys.o            \
+        access.o                \
+        acctctl.o               \
+        bsd_signal.o            \
+        chmod.o                 \
+        chown.o                 \
+        corectl.o               \
+        epoll.o                 \
+        eventfd.o               \
+        exacctsys.o             \
+        execl.o                 \
+        execle.o                \
+        execv.o                 \
+        fcntl.o                 \
+        getpagesizes.o          \
+        getpeerucred.o          \
+        inst_sync.o             \
+        issetugid.o             \
+        label.o                 \
+        link.o                  \
+        lockf.o                 \
+        lwp.o                   \
+        lwp_cond.o              \
+        lwp_rwlock.o            \
+        lwp_sigmask.o           \
+        meminfosys.o            \
+        mkdir.o                 \
+        mknod.o                 \
+        msgsys.o                \
+        nfssys.o                \
+        open.o                  \
+        pgrpsys.o               \
+        posix_sigwait.o         \
+        ppriv.o                 \
+        psetsys.o               \
+        rctlsys.o               \
+        readlink.o              \
+        rename.o                \
+        sbrk.o                  \
+        semsys.o                \
+        set_errno.o             \
+        sharefs.o               \
+        shmsys.o                \
+        sidsys.o                \
+        siginterrupt.o          \
+        signal.o                \
+        signalfd.o              \
+        sigpending.o            \
+        sigstack.o              \
+        stat.o                  \
+        symlink.o               \
+        tasksys.o               \
+        time.o                  \
+        time_util.o             \
+        timerfd.o               \
+        ucontext.o              \
+        unlink.o                \
+        ustat.o                 \
+        utimesys.o              \
+        zone.o
+
+PORTREGEX=                      \
+        glob.o                  \
+        regcmp.o                \
+        regex.o                 \
+        wordexp.o
+
+PORTREGEX64=                    \
+        glob64.o
+
+MOSTOBJS=                       \
+        $(STRETS)               \
+        $(CRTOBJS)              \
+        $(DYNOBJS)              \
+        $(FPOBJS)               \
+        $(FPASMOBJS)            \
+        $(ATOMICOBJS)           \
+        $(CHACHAOBJS)           \
+        $(XATTROBJS)            \
+        $(COMOBJS)              \
+        $(DTRACEOBJS)           \
+        $(GENOBJS)              \
+        $(PORTFP)               \
+        $(PORTGEN)              \
+        $(PORTGEN64)            \
+        $(PORTI18N)             \
+        $(PORTI18N_COND)        \
+        $(PORTLOCALE)           \
+        $(PORTPRINT)            \
+        $(PORTPRINT_C89)        \
+        $(PORTPRINT_W)          \
+        $(PORTREGEX)            \
+        $(PORTREGEX64)          \
+        $(PORTSTDIO)            \
+        $(PORTSTDIO64)          \
+        $(PORTSTDIO_C89)        \
+        $(PORTSTDIO_W)          \
+        $(PORTSYS)              \
+        $(PORTSYS64)            \
+        $(AIOOBJS)              \
+        $(RTOBJS)               \
+        $(SECFLAGSOBJS)         \
+        $(TPOOLOBJS)            \
+        $(THREADSOBJS)          \
+        $(THREADSMACHOBJS)      \
+        $(THREADSASMOBJS)       \
+        $(UNICODEOBJS)          \
+        $(UNWINDMACHOBJS)       \
+        $(UNWINDASMOBJS)        \
+        $(COMSYSOBJS)           \
+        $(SYSOBJS)              \
+        $(COMSYSOBJS64)         \
+        $(SYSOBJS64)            \
+        $(VALUES)
+
+TRACEOBJS=                      \
+        plockstat.o
+
+# NOTE: libc.so.1 must be linked with the minimal crti.o and crtn.o
+# modules whose source is provided in the $(SRC)/lib/common directory.
+# This must be done because otherwise the Sun C compiler would insert
+# its own versions of these modules and those versions contain code
+# to call out to C++ initialization functions.  Such C++ initialization
+# functions can call back into libc before thread initialization is
+# complete and this leads to segmentation violations and other problems.
+# Since libc contains no C++ code, linking with the minimal crti.o and
+# crtn.o modules is safe and avoids the problems described above.
+OBJECTS= $(CRTI) $(MOSTOBJS) $(CRTN)
+CRTSRCS= ../../common/i386
+
+LDPASS_OFF=     $(POUND_SIGN)
+
+# include common library definitions
+include ../../Makefile.lib
+
+# we need to override the default SONAME here because we might
+# be building a variant object (still libc.so.1, but different filename)
+SONAME = libc.so.1
+
+CFLAGS += $(CCVERBOSE) $(CTF_FLAGS)
+
+# This is necessary to avoid problems with calling _ex_unwind().
+# We probably don't want any inlining anyway.
+XINLINE = -xinline=
+CFLAGS += $(XINLINE)
+
+CERRWARN += -_gcc=-Wno-parentheses
+CERRWARN += -_gcc=-Wno-switch
+CERRWARN += -_gcc=-Wno-uninitialized
+CERRWARN += -_gcc=-Wno-unused-value
+CERRWARN += -_gcc=-Wno-unused-label
+CERRWARN += -_gcc=-Wno-unused-variable
+CERRWARN += -_gcc=-Wno-type-limits
+CERRWARN += -_gcc=-Wno-char-subscripts
+CERRWARN += -_gcc=-Wno-clobbered
+CERRWARN += -_gcc=-Wno-unused-function
+CERRWARN += -_gcc=-Wno-address
+
+# Setting THREAD_DEBUG = -DTHREAD_DEBUG (make THREAD_DEBUG=-DTHREAD_DEBUG ...)
+# enables ASSERT() checking in the threads portion of the library.
+# This is automatically enabled for DEBUG builds, not for non-debug builds.
+THREAD_DEBUG =
+$(NOT_RELEASE_BUILD)THREAD_DEBUG = -DTHREAD_DEBUG
+
+# Make string literals read-only to save memory.
+CFLAGS += $(XSTRCONST)
+
+ALTPICS= $(TRACEOBJS:%=pics/%)
+
+$(DYNLIB) := BUILD.SO = $(LD) -o $@ -G $(DYNFLAGS) $(PICS) $(ALTPICS) \
+                $(EXTPICS) $(LDLIBS)
+
+MAPFILES =      $(LIBCDIR)/port/mapfile-vers
+
 #
-# lib/libc/i386/Makefile
+# EXTN_CPPFLAGS and EXTN_CFLAGS set in enclosing Makefile
 #
+CFLAGS +=       $(EXTN_CFLAGS)
+CPPFLAGS=       -D_REENTRANT -Di386 $(EXTN_CPPFLAGS) $(THREAD_DEBUG) \
+                -I$(LIBCBASE)/inc -I$(LIBCDIR)/inc $(CPPFLAGS.master)
+ASFLAGS=        $(AS_PICFLAGS) -P -D__STDC__ -D_ASM $(CPPFLAGS) $(i386_AS_XARCH)
 
-LIBCBASE=../i386
+# As a favor to the dtrace syscall provider, libc still calls the
+# old syscall traps that have been obsoleted by the *at() interfaces.
+# Delete this to compile libc using only the new *at() system call traps
+CPPFLAGS += -D_RETAIN_OLD_SYSCALLS
 
-EXTN_CPPFLAGS =
-EXTN_XFLAGS =
+# Inform the run-time linker about libc specialized initialization
+RTLDINFO =      -z rtldinfo=tls_rtldinfo
+DYNFLAGS +=     $(RTLDINFO)
 
-LIBRARY =       libc.a
+# Force libc's internal references to be resolved immediately upon loading
+# in order to avoid critical region problems.  Since almost all libc symbols
+# are marked 'protected' in the mapfiles, this is a minimal set (15 to 20).
+DYNFLAGS +=     -znow
 
-# Special postprocessing for 32-bit fpcw.o: strip the SSE HWCAP attribute
-# from the object file; the internal functions with SSE instructions are
-# called conditionally on systems which have SSE instruction support
-pics/fpcw.o := POST_PROCESS_O += ; \
-        if $(ELFDUMP) -H $@ | grep " SSE "; then \
-                $(ELFEDIT) -e 'cap:hw1 -and -cmp SSE' $@; \
-        fi
+DYNFLAGS +=     -e __rtboot
+DYNFLAGS +=     $(EXTN_DYNFLAGS)
 
-include Makefile.com
+# Inform the kernel about the initial DTrace area (in case
+# libc is being used as the interpreter / runtime linker).
+DTRACE_DATA =   -zdtrace=dtrace_data
+DYNFLAGS +=     $(DTRACE_DATA)
+
+# DTrace needs an executable data segment.
+MAPFILE.NED=
+
+BUILD.s=        $(AS) $(ASFLAGS) $< -o $@
+
+# Override this top level flag so the compiler builds in its native
+# C99 mode.  This has been enabled to support the complex arithmetic
+# added to libc.
+C99MODE=        $(C99_ENABLE)
+
+# libc method of building an archive
+# The "$(GREP) -v ' L '" part is necessary only until
+# lorder is fixed to ignore thread-local variables.
+BUILD.AR= $(RM) $@ ; \
+        $(AR) q $@ `$(LORDER) $(MOSTOBJS:%=$(DIR)/%) | $(GREP) -v ' L ' | $(TSORT)`
+
+# extra files for the clean target
+CLEANFILES +=                   \
+        $(LIBCDIR)/port/gen/errlst.c    \
+        $(LIBCDIR)/port/gen/new_list.c  \
+        assym.h                 \
+        genassym                \
+        crt/_rtld.s             \
+        crt/_rtbootld.s         \
+        pics/_rtbootld.o        \
+        pics/crti.o             \
+        pics/crtn.o             \
+        $(ALTPICS)
+
+CLOBBERFILES += $(LIB_PIC)
+
+# list of C source for lint
+SRCS=                                                   \
+        $(ATOMICOBJS:%.o=$(SRC)/common/atomic/%.c)      \
+        $(XATTROBJS:%.o=$(SRC)/common/xattr/%.c)        \
+        $(COMOBJS:%.o=$(SRC)/common/util/%.c)           \
+        $(DTRACEOBJS:%.o=$(SRC)/common/dtrace/%.c)      \
+        $(PORTFP:%.o=$(LIBCDIR)/port/fp/%.c)                    \
+        $(PORTGEN:%.o=$(LIBCDIR)/port/gen/%.c)                  \
+        $(PORTI18N:%.o=$(LIBCDIR)/port/i18n/%.c)                \
+        $(PORTLOCALE:%.o=$(LIBCDIR)/port/locale/%.c)            \
+        $(PORTPRINT:%.o=$(LIBCDIR)/port/print/%.c)              \
+        $(PORTREGEX:%.o=$(LIBCDIR)/port/regex/%.c)              \
+        $(PORTSTDIO:%.o=$(LIBCDIR)/port/stdio/%.c)              \
+        $(PORTSYS:%.o=$(LIBCDIR)/port/sys/%.c)                  \
+        $(AIOOBJS:%.o=$(LIBCDIR)/port/aio/%.c)                  \
+        $(RTOBJS:%.o=$(LIBCDIR)/port/rt/%.c)                    \
+        $(SECFLAGSOBJS:%.o=$(SRC)/common/secflags/%.c)          \
+        $(TPOOLOBJS:%.o=$(LIBCDIR)/port/tpool/%.c)              \
+        $(THREADSOBJS:%.o=$(LIBCDIR)/port/threads/%.c)          \
+        $(THREADSMACHOBJS:%.o=$(LIBCDIR)/$(MACH)/threads/%.c)   \
+        $(UNICODEOBJS:%.o=$(SRC)/common/unicode/%.c)    \
+        $(UNWINDMACHOBJS:%.o=$(LIBCDIR)/port/unwind/%.c)        \
+        $(FPOBJS:%.o=$(LIBCDIR)/$(MACH)/fp/%.c)                 \
+        $(LIBCBASE)/gen/ecvt.c                          \
+        $(LIBCBASE)/gen/makectxt.c                      \
+        $(LIBCBASE)/gen/siginfolst.c                    \
+        $(LIBCBASE)/gen/siglongjmp.c                    \
+        $(LIBCBASE)/gen/strcmp.c                        \
+        $(LIBCBASE)/gen/sync_instruction_memory.c       \
+        $(LIBCBASE)/sys/ptrace.c                        \
+        $(LIBCBASE)/sys/uadmin.c
+
+# conditional assignments
+$(DYNLIB) := CRTI = crti.o
+$(DYNLIB) := CRTN = crtn.o
+
+# Files which need the threads .il inline template
+TIL=                            \
+        aio.o                   \
+        alloc.o                 \
+        assfail.o               \
+        atexit.o                \
+        atfork.o                \
+        cancel.o                \
+        door_calls.o            \
+        err.o                   \
+        errno.o                 \
+        lwp.o                   \
+        ma.o                    \
+        machdep.o               \
+        posix_aio.o             \
+        pthr_attr.o             \
+        pthr_barrier.o          \
+        pthr_cond.o             \
+        pthr_mutex.o            \
+        pthr_rwlock.o           \
+        pthread.o               \
+        rand.o                  \
+        rwlock.o                \
+        scalls.o                \
+        sched.o                 \
+        sema.o                  \
+        sigaction.o             \
+        sigev_thread.o          \
+        spawn.o                 \
+        stack.o                 \
+        synch.o                 \
+        tdb_agent.o             \
+        thr.o                   \
+        thread_interface.o      \
+        thread_pool.o           \
+        tls.o                   \
+        tsd.o                   \
+        tmem.o                  \
+        unwind.o
+
+THREADS_INLINES = $(LIBCBASE)/threads/i386.il
+$(TIL:%=pics/%) := CFLAGS += $(THREADS_INLINES)
+
+# pics/mul64.o := CFLAGS += $(LIBCBASE)/crt/mul64.il
+
+# large-file-aware components that should be built large
+
+$(COMSYSOBJS64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(SYSOBJS64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(PORTGEN64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(PORTREGEX64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(PORTSTDIO64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(PORTSYS64:%=pics/%) := \
+        CPPFLAGS += -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
+
+$(PORTSTDIO_W:%=pics/%) := \
+        CPPFLAGS += -D_WIDE
+
+$(PORTPRINT_W:%=pics/%) := \
+        CPPFLAGS += -D_WIDE
+
+$(PORTPRINT_C89:%=pics/%) := \
+        CPPFLAGS += -D_C89_INTMAX32
+
+$(PORTSTDIO_C89:%=pics/%) := \
+        CPPFLAGS += -D_C89_INTMAX32
+
+$(PORTI18N_COND:%=pics/%) := \
+        CPPFLAGS += -D_WCS_LONGLONG
+
+pics/arc4random.o :=    CPPFLAGS += -I$(SRC)/common/crypto/chacha
+
+pics/__clock_gettime.o := CPPFLAGS += $(COMMPAGE_CPPFLAGS)
+
+.KEEP_STATE:
+
+all: $(LIBS) $(LIB_PIC)
+
+lint    :=      CPPFLAGS += -I$(LIBCDIR)/$(MACH)/fp
+lint    :=      CPPFLAGS += -D_MSE_INT_H -D_LCONV_C99
+lint    :=      LINTFLAGS += -mn -erroff=E_SUPPRESSION_DIRECTIVE_UNUSED
+
+lint:
+        @echo $(LINT.c) ...
+        @$(LINT.c) $(SRCS) $(LDLIBS)
+
+$(LINTLIB):= SRCS=$(LIBCDIR)/port/llib-lc
+$(LINTLIB):= CPPFLAGS += -D_MSE_INT_H
+$(LINTLIB):= LINTFLAGS=-nvx
+
+# object files that depend on inline template
+$(TIL:%=pics/%): $(LIBCBASE)/threads/i386.il
+# pics/mul64.o: $(LIBCBASE)/crt/mul64.il
+
+# include common libc targets
+include $(LIBCDIR)/Makefile.targ
+
+# We need to strip out all CTF and DOF data from the static library
+$(LIB_PIC) := DIR = pics
+$(LIB_PIC): pics $$(PICS)
+        $(BUILD.AR)
+        $(MCS) -d -n .SUNW_ctf $@ > /dev/null 2>&1
+        $(MCS) -d -n .SUNW_dof $@ > /dev/null 2>&1
+        $(AR) -ts $@ > /dev/null
+        $(POST_PROCESS_A)
+
+$(LIBCBASE)/crt/_rtbootld.s: $(LIBCBASE)/crt/_rtboot.s $(LIBCBASE)/crt/_rtld.c
+        $(CC) $(CPPFLAGS) $(CTF_FLAGS) -O -S $(C_PICFLAGS) \
+            $(LIBCBASE)/crt/_rtld.c -o $(LIBCBASE)/crt/_rtld.s
+        $(CAT) $(LIBCBASE)/crt/_rtboot.s $(LIBCBASE)/crt/_rtld.s > $@
+        $(RM) $(LIBCBASE)/crt/_rtld.s
+
+# partially built from C source
+pics/_rtbootld.o: $(LIBCBASE)/crt/_rtbootld.s
+        $(AS) $(ASFLAGS) $(LIBCBASE)/crt/_rtbootld.s -o $@
+        $(CTFCONVERT_O)
+
+ASSYMDEP_OBJS=                  \
+        _lwp_mutex_unlock.o     \
+        _stack_grow.o           \
+        getcontext.o            \
+        setjmp.o                \
+        tls_get_addr.o          \
+        vforkx.o
+
+$(ASSYMDEP_OBJS:%=pics/%)       :=      CPPFLAGS += -I.
+
+$(ASSYMDEP_OBJS:%=pics/%): assym.h
+
+# assym.h build rules
+
+GENASSYM_C = $(LIBCDIR)/$(MACH)/genassym.c
+
+genassym: $(GENASSYM_C)
+        $(NATIVECC) $(NATIVE_CFLAGS) -I$(LIBCBASE)/inc -I$(LIBCDIR)/inc \
+                -D__EXTENSIONS__ $(CPPFLAGS.native) -o $@ $(GENASSYM_C)
+
+OFFSETS = $(LIBCDIR)/$(MACH)/offsets.in
+
+assym.h: $(OFFSETS) genassym
+        $(OFFSETS_CREATE) <$(OFFSETS) >$@
+        ./genassym >>$@
+
+# derived C source and related explicit dependencies
+$(LIBCDIR)/port/gen/errlst.c + \
+$(LIBCDIR)/port/gen/new_list.c: $(LIBCDIR)/port/gen/errlist $(LIBCDIR)/port/gen/errlist.awk
+        cd $(LIBCDIR)/port/gen; pwd; $(AWK) -f errlist.awk < errlist
+
+pics/errlst.o: $(LIBCDIR)/port/gen/errlst.c
+
+pics/new_list.o: $(LIBCDIR)/port/gen/new_list.c