Date: Tue, 16 Oct 2018 16:45:21 +0000 (UTC) From: Leandro Lupori <luporl@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r339383 - in projects/power8_bringup_hacks: . contrib/elftoolchain/elfcopy lib/csu/aarch64 lib/csu/amd64 lib/csu/arm lib/csu/common lib/csu/i386 lib/csu/mips lib/csu/powerpc lib/csu/pow... Message-ID: <201810161645.w9GGjLGR007311@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: luporl Date: Tue Oct 16 16:45:21 2018 New Revision: 339383 URL: https://svnweb.freebsd.org/changeset/base/339383 Log: Merge power8_bringup_hacks with HEAD. Added: projects/power8_bringup_hacks/lib/csu/amd64/reloc.c - copied unchanged from r339382, head/lib/csu/amd64/reloc.c projects/power8_bringup_hacks/lib/csu/i386/reloc.c - copied unchanged from r339382, head/lib/csu/i386/reloc.c projects/power8_bringup_hacks/lib/libc/amd64/string/bcopy.c - copied unchanged from r339382, head/lib/libc/amd64/string/bcopy.c projects/power8_bringup_hacks/share/man/man4/iavf.4 - copied unchanged from r339382, head/share/man/man4/iavf.4 projects/power8_bringup_hacks/sys/dev/ixl/iavf.h - copied unchanged from r339382, head/sys/dev/ixl/iavf.h projects/power8_bringup_hacks/sys/dev/ixl/iavf_vc.c - copied unchanged from r339382, head/sys/dev/ixl/iavf_vc.c projects/power8_bringup_hacks/sys/dev/ixl/if_iavf.c - copied unchanged from r339382, head/sys/dev/ixl/if_iavf.c projects/power8_bringup_hacks/sys/dev/uart/uart_dev_lowrisc.c - copied unchanged from r339382, head/sys/dev/uart/uart_dev_lowrisc.c projects/power8_bringup_hacks/sys/dev/uart/uart_dev_lowrisc.h - copied unchanged from r339382, head/sys/dev/uart/uart_dev_lowrisc.h projects/power8_bringup_hacks/sys/kern/subr_early.c - copied unchanged from r339382, head/sys/kern/subr_early.c projects/power8_bringup_hacks/sys/modules/iavf/ - copied from r339382, head/sys/modules/iavf/ Deleted: projects/power8_bringup_hacks/lib/libc/amd64/string/bcopy.S projects/power8_bringup_hacks/share/man/man4/ixlv.4 projects/power8_bringup_hacks/sys/dev/ixl/README projects/power8_bringup_hacks/sys/dev/ixl/if_ixlv.c projects/power8_bringup_hacks/sys/dev/ixl/ixlv.h projects/power8_bringup_hacks/sys/dev/ixl/ixlv_vc_mgr.h projects/power8_bringup_hacks/sys/dev/ixl/ixlvc.c projects/power8_bringup_hacks/sys/modules/ixlv/ Modified: projects/power8_bringup_hacks/Makefile.inc1 projects/power8_bringup_hacks/ObsoleteFiles.inc projects/power8_bringup_hacks/contrib/elftoolchain/elfcopy/sections.c projects/power8_bringup_hacks/lib/csu/aarch64/Makefile projects/power8_bringup_hacks/lib/csu/amd64/Makefile projects/power8_bringup_hacks/lib/csu/amd64/crt1.c projects/power8_bringup_hacks/lib/csu/arm/Makefile projects/power8_bringup_hacks/lib/csu/common/ignore_init.c projects/power8_bringup_hacks/lib/csu/i386/Makefile projects/power8_bringup_hacks/lib/csu/i386/crt1_c.c projects/power8_bringup_hacks/lib/csu/mips/Makefile projects/power8_bringup_hacks/lib/csu/powerpc/Makefile projects/power8_bringup_hacks/lib/csu/powerpc64/Makefile projects/power8_bringup_hacks/lib/csu/riscv/Makefile projects/power8_bringup_hacks/lib/csu/sparc64/Makefile projects/power8_bringup_hacks/lib/libc/amd64/string/Makefile.inc projects/power8_bringup_hacks/lib/libc/amd64/string/memcpy.S projects/power8_bringup_hacks/lib/libc/amd64/string/memmove.S projects/power8_bringup_hacks/lib/libc/net/nsdispatch.3 projects/power8_bringup_hacks/lib/libc/net/nsdispatch.c projects/power8_bringup_hacks/lib/libc/net/nslexer.l projects/power8_bringup_hacks/lib/libc/stdtime/strptime.c projects/power8_bringup_hacks/lib/libc/string/memmem.c projects/power8_bringup_hacks/lib/libc/sys/pdfork.2 projects/power8_bringup_hacks/lib/libc/sys/sendfile.2 projects/power8_bringup_hacks/lib/libldns/Makefile projects/power8_bringup_hacks/lib/libmemstat/memstat_malloc.c projects/power8_bringup_hacks/share/man/man4/Makefile projects/power8_bringup_hacks/share/man/man4/dtrace_ip.4 projects/power8_bringup_hacks/share/man/man4/ixl.4 projects/power8_bringup_hacks/share/man/man4/procdesc.4 projects/power8_bringup_hacks/share/man/man9/MODULE_PNP_INFO.9 projects/power8_bringup_hacks/share/mk/src.libnames.mk projects/power8_bringup_hacks/stand/efi/loader/main.c projects/power8_bringup_hacks/sys/amd64/amd64/machdep.c projects/power8_bringup_hacks/sys/amd64/amd64/support.S projects/power8_bringup_hacks/sys/amd64/amd64/trap.c projects/power8_bringup_hacks/sys/amd64/amd64/vm_machdep.c projects/power8_bringup_hacks/sys/amd64/conf/GENERIC projects/power8_bringup_hacks/sys/amd64/conf/NOTES projects/power8_bringup_hacks/sys/amd64/include/cpu.h projects/power8_bringup_hacks/sys/amd64/include/proc.h projects/power8_bringup_hacks/sys/amd64/vmm/amd/svm.c projects/power8_bringup_hacks/sys/amd64/vmm/vmm_instruction_emul.c projects/power8_bringup_hacks/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev.c projects/power8_bringup_hacks/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_indirect.c projects/power8_bringup_hacks/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/power8_bringup_hacks/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/power8_bringup_hacks/sys/cddl/dev/fbt/riscv/fbt_isa.c projects/power8_bringup_hacks/sys/compat/freebsd32/syscalls.master projects/power8_bringup_hacks/sys/conf/files projects/power8_bringup_hacks/sys/conf/files.amd64 projects/power8_bringup_hacks/sys/conf/files.riscv projects/power8_bringup_hacks/sys/conf/newvers.sh projects/power8_bringup_hacks/sys/contrib/ck/src/ck_epoch.c projects/power8_bringup_hacks/sys/dev/bxe/bxe.c projects/power8_bringup_hacks/sys/dev/bxe/bxe.h projects/power8_bringup_hacks/sys/dev/bxe/bxe_stats.c projects/power8_bringup_hacks/sys/dev/cxgbe/t4_sge.c projects/power8_bringup_hacks/sys/dev/e1000/em_txrx.c projects/power8_bringup_hacks/sys/dev/e1000/igb_txrx.c projects/power8_bringup_hacks/sys/dev/ixgbe/if_ix.c projects/power8_bringup_hacks/sys/dev/ixgbe/if_ixv.c projects/power8_bringup_hacks/sys/dev/ixgbe/ix_txrx.c projects/power8_bringup_hacks/sys/dev/ixl/i40e_osdep.c projects/power8_bringup_hacks/sys/dev/ixl/if_ixl.c projects/power8_bringup_hacks/sys/dev/ixl/ixl.h projects/power8_bringup_hacks/sys/dev/ixl/ixl_debug.h projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf.h projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf_iov.c projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf_iov.h projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf_main.c projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf_qmgr.c projects/power8_bringup_hacks/sys/dev/ixl/ixl_pf_qmgr.h projects/power8_bringup_hacks/sys/dev/ixl/ixl_txrx.c projects/power8_bringup_hacks/sys/kern/kern_descrip.c projects/power8_bringup_hacks/sys/kern/kern_sendfile.c projects/power8_bringup_hacks/sys/kern/link_elf.c projects/power8_bringup_hacks/sys/kern/sys_capability.c projects/power8_bringup_hacks/sys/kern/syscalls.master projects/power8_bringup_hacks/sys/modules/Makefile projects/power8_bringup_hacks/sys/modules/ixl/Makefile projects/power8_bringup_hacks/sys/net/if_vlan.c projects/power8_bringup_hacks/sys/net/iflib.c projects/power8_bringup_hacks/sys/net/iflib.h projects/power8_bringup_hacks/sys/net/iflib_private.h projects/power8_bringup_hacks/sys/netinet/tcp_reass.c projects/power8_bringup_hacks/sys/netinet/udp_usrreq.c projects/power8_bringup_hacks/sys/netpfil/ipfw/ip_fw2.c projects/power8_bringup_hacks/sys/riscv/conf/GENERIC projects/power8_bringup_hacks/sys/riscv/include/cpufunc.h projects/power8_bringup_hacks/sys/riscv/include/kdb.h projects/power8_bringup_hacks/sys/riscv/include/sbi.h projects/power8_bringup_hacks/sys/riscv/riscv/cpufunc_asm.S projects/power8_bringup_hacks/sys/riscv/riscv/db_interface.c projects/power8_bringup_hacks/sys/riscv/riscv/mp_machdep.c projects/power8_bringup_hacks/sys/riscv/riscv/plic.c projects/power8_bringup_hacks/sys/riscv/riscv/pmap.c projects/power8_bringup_hacks/sys/sys/capsicum.h projects/power8_bringup_hacks/sys/sys/systm.h projects/power8_bringup_hacks/sys/x86/x86/ucode.c projects/power8_bringup_hacks/sys/x86/xen/pv.c projects/power8_bringup_hacks/usr.sbin/mfiutil/mfi_cmd.c projects/power8_bringup_hacks/usr.sbin/pw/pw.c projects/power8_bringup_hacks/usr.sbin/pw/pw.h projects/power8_bringup_hacks/usr.sbin/pw/pw_conf.c projects/power8_bringup_hacks/usr.sbin/pw/pw_utils.c Directory Properties: projects/power8_bringup_hacks/ (props changed) projects/power8_bringup_hacks/contrib/elftoolchain/ (props changed) projects/power8_bringup_hacks/sys/cddl/contrib/opensolaris/ (props changed) projects/power8_bringup_hacks/sys/contrib/ck/ (props changed) Modified: projects/power8_bringup_hacks/Makefile.inc1 ============================================================================== --- projects/power8_bringup_hacks/Makefile.inc1 Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/Makefile.inc1 Tue Oct 16 16:45:21 2018 (r339383) @@ -939,6 +939,15 @@ _cleanobj_fast_depend_hack: .PHONY ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/.depend.${f}.*}; \ fi .endfor +# 20181013 r339348 bcopy reimplemented as .c +.for f in bcopy memcpy memmove + @if [ -e "${OBJTOP}/lib/libc/.depend.${f}.o" ] && \ + egrep -qw 'bcopy\.[sS]' ${OBJTOP}/lib/libc/.depend.${f}.o; then \ + echo "Removing stale dependencies for bcopy"; \ + rm -f ${OBJTOP}/lib/libc/.depend.${f}.* \ + ${LIBCOMPAT:D${LIBCOMPAT_OBJTOP}/lib/libc/.depend.${f}.*}; \ + fi +.endfor # 20181009 track migration from ntp's embedded libevent to updated one @if [ -e "${OBJTOP}/usr.sbin/ntp/libntpevent/.depend.bufferevent_openssl.o" ] && \ egrep -q 'contrib/ntp/sntp/libevent/bufferevent_openssl.c' \ @@ -2534,8 +2543,8 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} \ ${_cddl_lib_libctf} \ lib/libufs \ lib/libutil lib/libpjdlog ${_lib_libypclnt} lib/libz lib/msun \ - ${_secure_lib_libcrypto} ${_lib_libldns} \ - ${_secure_lib_libssh} ${_secure_lib_libssl} + ${_secure_lib_libcrypto} ${_secure_lib_libssl} \ + ${_lib_libldns} ${_secure_lib_libssh} .if ${MK_GNUCXX} != "no" _prebuild_libs+= gnu/lib/libstdc++ gnu/lib/libsupc++ @@ -2631,9 +2640,10 @@ lib/librtld_db__L: lib/libprocstat__L _secure_lib_libcrypto= secure/lib/libcrypto _secure_lib_libssl= secure/lib/libssl lib/libradius__L secure/lib/libssl__L: secure/lib/libcrypto__L +secure/lib/libcrypto__L: lib/libthr__L .if ${MK_LDNS} != "no" _lib_libldns= lib/libldns -lib/libldns__L: secure/lib/libcrypto__L +lib/libldns__L: secure/lib/libssl__L .endif .if ${MK_OPENSSH} != "no" _secure_lib_libssh= secure/lib/libssh Modified: projects/power8_bringup_hacks/ObsoleteFiles.inc ============================================================================== --- projects/power8_bringup_hacks/ObsoleteFiles.inc Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/ObsoleteFiles.inc Tue Oct 16 16:45:21 2018 (r339383) @@ -38,6 +38,19 @@ # xargs -n1 | sort | uniq -d; # done +# 20181015: Stale libcasper(3) files following 20181009: OpenSSL 1.1.1 +OLD_LIBS+=lib/casper/libcap_sysctl.so.0 +OLD_LIBS+=lib/casper/libcap_grp.so.0 +OLD_LIBS+=lib/casper/libcap_pwd.so.0 +OLD_LIBS+=lib/casper/libcap_random.so.0 +OLD_LIBS+=lib/casper/libcap_dns.so.0 +OLD_LIBS+=lib/casper/libcap_syslog.so.0 +OLD_LIBS+=usr/lib32/libcap_sysctl.so.0 +OLD_LIBS+=usr/lib32/libcap_grp.so.0 +OLD_LIBS+=usr/lib32/libcap_pwd.so.0 +OLD_LIBS+=usr/lib32/libcap_random.so.0 +OLD_LIBS+=usr/lib32/libcap_dns.so.0 +OLD_LIBS+=usr/lib32/libcap_syslog.so.0 # 20181009: OpenSSL 1.1.1 OLD_FILES+=usr/include/openssl/des_old.h OLD_FILES+=usr/include/openssl/dso.h Modified: projects/power8_bringup_hacks/contrib/elftoolchain/elfcopy/sections.c ============================================================================== --- projects/power8_bringup_hacks/contrib/elftoolchain/elfcopy/sections.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/contrib/elftoolchain/elfcopy/sections.c Tue Oct 16 16:45:21 2018 (r339383) @@ -39,7 +39,6 @@ ELFTC_VCSID("$Id: sections.c 3443 2016-04-15 18:57:54Z static void add_gnu_debuglink(struct elfcopy *ecp); static uint32_t calc_crc32(const char *p, size_t len, uint32_t crc); static void check_section_rename(struct elfcopy *ecp, struct section *s); -static void filter_reloc(struct elfcopy *ecp, struct section *s); static int get_section_flags(struct elfcopy *ecp, const char *name); static void insert_sections(struct elfcopy *ecp); static void insert_to_strtab(struct section *t, const char *s); @@ -574,14 +573,6 @@ copy_content(struct elfcopy *ecp) continue; /* - * If strip action is STRIP_ALL, relocation info need - * to be stripped. Skip filtering otherwisw. - */ - if (ecp->strip == STRIP_ALL && - (s->type == SHT_REL || s->type == SHT_RELA)) - filter_reloc(ecp, s); - - /* * The section indices in the SHT_GROUP section needs * to be updated since we might have stripped some * sections and changed section numbering. @@ -670,125 +661,6 @@ update_section_group(struct elfcopy *ecp, struct secti s->sz -= 4; } - s->nocopy = 1; -} - -/* - * Filter relocation entries, only keep those entries whose - * symbol is in the keep list. - */ -static void -filter_reloc(struct elfcopy *ecp, struct section *s) -{ - const char *name; - GElf_Shdr ish; - GElf_Rel rel; - GElf_Rela rela; - Elf32_Rel *rel32; - Elf64_Rel *rel64; - Elf32_Rela *rela32; - Elf64_Rela *rela64; - Elf_Data *id; - uint64_t cap, n, nrels; - int elferr, i; - - if (gelf_getshdr(s->is, &ish) == NULL) - errx(EXIT_FAILURE, "gelf_getehdr() failed: %s", - elf_errmsg(-1)); - - /* We don't want to touch relocation info for dynamic symbols. */ - if ((ecp->flags & SYMTAB_EXIST) == 0) { - if (ish.sh_link == 0 || ecp->secndx[ish.sh_link] == 0) { - /* - * This reloc section applies to the symbol table - * that was stripped, so discard whole section. - */ - s->nocopy = 1; - s->sz = 0; - } - return; - } else { - /* Symbol table exist, check if index equals. */ - if (ish.sh_link != elf_ndxscn(ecp->symtab->is)) - return; - } - -#define COPYREL(REL, SZ) do { \ - if (nrels == 0) { \ - if ((REL##SZ = malloc(cap * \ - sizeof(*REL##SZ))) == NULL) \ - err(EXIT_FAILURE, "malloc failed"); \ - } \ - if (nrels >= cap) { \ - cap *= 2; \ - if ((REL##SZ = realloc(REL##SZ, cap * \ - sizeof(*REL##SZ))) == NULL) \ - err(EXIT_FAILURE, "realloc failed"); \ - } \ - REL##SZ[nrels].r_offset = REL.r_offset; \ - REL##SZ[nrels].r_info = REL.r_info; \ - if (s->type == SHT_RELA) \ - rela##SZ[nrels].r_addend = rela.r_addend; \ - nrels++; \ -} while (0) - - nrels = 0; - cap = 4; /* keep list is usually small. */ - rel32 = NULL; - rel64 = NULL; - rela32 = NULL; - rela64 = NULL; - if ((id = elf_getdata(s->is, NULL)) == NULL) - errx(EXIT_FAILURE, "elf_getdata() failed: %s", - elf_errmsg(-1)); - n = ish.sh_size / ish.sh_entsize; - for(i = 0; (uint64_t)i < n; i++) { - if (s->type == SHT_REL) { - if (gelf_getrel(id, i, &rel) != &rel) - errx(EXIT_FAILURE, "gelf_getrel failed: %s", - elf_errmsg(-1)); - } else { - if (gelf_getrela(id, i, &rela) != &rela) - errx(EXIT_FAILURE, "gelf_getrel failed: %s", - elf_errmsg(-1)); - } - name = elf_strptr(ecp->ein, elf_ndxscn(ecp->strtab->is), - GELF_R_SYM(rel.r_info)); - if (name == NULL) - errx(EXIT_FAILURE, "elf_strptr failed: %s", - elf_errmsg(-1)); - if (lookup_symop_list(ecp, name, SYMOP_KEEP) != NULL) { - if (ecp->oec == ELFCLASS32) { - if (s->type == SHT_REL) - COPYREL(rel, 32); - else - COPYREL(rela, 32); - } else { - if (s->type == SHT_REL) - COPYREL(rel, 64); - else - COPYREL(rela, 64); - } - } - } - elferr = elf_errno(); - if (elferr != 0) - errx(EXIT_FAILURE, "elf_getdata() failed: %s", - elf_errmsg(elferr)); - - if (ecp->oec == ELFCLASS32) { - if (s->type == SHT_REL) - s->buf = rel32; - else - s->buf = rela32; - } else { - if (s->type == SHT_REL) - s->buf = rel64; - else - s->buf = rela64; - } - s->sz = gelf_fsize(ecp->eout, (s->type == SHT_REL ? ELF_T_REL : - ELF_T_RELA), nrels, EV_CURRENT); s->nocopy = 1; } Modified: projects/power8_bringup_hacks/lib/csu/aarch64/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/aarch64/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/aarch64/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/amd64/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/amd64/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/amd64/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -5,9 +5,9 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o -CFLAGS+= -I${.CURDIR:H}/common \ +CFLAGS+= -I${.CURDIR} -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include -CFLAGS+= -fno-omit-frame-pointer +CFLAGS+= -fno-omit-frame-pointer -DCRT_IRELOC_RELA FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/amd64/crt1.c ============================================================================== --- projects/power8_bringup_hacks/lib/csu/amd64/crt1.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/amd64/crt1.c Tue Oct 16 16:45:21 2018 (r339383) @@ -59,10 +59,12 @@ _start(char **ap, void (*cleanup)(void)) env = ap + 2 + argc; handle_argv(argc, argv, env); - if (&_DYNAMIC != NULL) + if (&_DYNAMIC != NULL) { atexit(cleanup); - else + } else { + process_irelocs(); _init_tls(); + } #ifdef GCRT atexit(_mcleanup); Copied: projects/power8_bringup_hacks/lib/csu/amd64/reloc.c (from r339382, head/lib/csu/amd64/reloc.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/power8_bringup_hacks/lib/csu/amd64/reloc.c Tue Oct 16 16:45:21 2018 (r339383, copy of r339382, head/lib/csu/amd64/reloc.c) @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2018 The FreeBSD Foundation + * + * This software was developed by Konstantin Belousov <kib@FreeBSD.org> + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <machine/specialreg.h> +#include <machine/cpufunc.h> + +static void +crt1_handle_rela(const Elf_Rela *r) +{ + Elf_Addr *ptr, *where, target; + u_int p[4]; + uint32_t cpu_feature, cpu_feature2; + uint32_t cpu_stdext_feature, cpu_stdext_feature2; + + do_cpuid(1, p); + cpu_feature = p[3]; + cpu_feature2 = p[2]; + do_cpuid(0, p); + if (p[0] >= 7) { + cpuid_count(7, 0, p); + cpu_stdext_feature = p[1]; + cpu_stdext_feature2 = p[2]; + } else { + cpu_stdext_feature = 0; + cpu_stdext_feature2 = 0; + } + + switch (ELF_R_TYPE(r->r_info)) { + case R_X86_64_IRELATIVE: + ptr = (Elf_Addr *)r->r_addend; + where = (Elf_Addr *)r->r_offset; + target = ((Elf_Addr (*)(uint32_t, uint32_t, uint32_t, + uint32_t))ptr)(cpu_feature, cpu_feature2, + cpu_stdext_feature, cpu_stdext_feature2); + *where = target; + break; + } +} Modified: projects/power8_bringup_hacks/lib/csu/arm/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/arm/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/arm/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS STATIC_CFLAGS+= -mlong-calls FILES= ${OBJS} Modified: projects/power8_bringup_hacks/lib/csu/common/ignore_init.c ============================================================================== --- projects/power8_bringup_hacks/lib/csu/common/ignore_init.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/common/ignore_init.c Tue Oct 16 16:45:21 2018 (r339383) @@ -2,8 +2,11 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright 2012 Konstantin Belousov <kib@FreeBSD.org> - * All rights reserved. + * Copyright (c) 2018 The FreeBSD Foundation * + * Parts of this software was developed by Konstantin Belousov + * <kib@FreeBSD.org> under sponsorship from the FreeBSD Foundation. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -29,7 +32,9 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> +#include <sys/elf.h> #include <sys/elf_common.h> + #include "notes.h" extern int main(int, char **, char **); @@ -45,6 +50,39 @@ extern void _init(void) __hidden; extern int _DYNAMIC; #pragma weak _DYNAMIC + +#if defined(CRT_IRELOC_RELA) +extern const Elf_Rela __rela_iplt_start[] __weak_symbol __hidden; +extern const Elf_Rela __rela_iplt_end[] __weak_symbol __hidden; + +#include "reloc.c" + +static void +process_irelocs(void) +{ + const Elf_Rela *r; + + for (r = &__rela_iplt_start[0]; r < &__rela_iplt_end[0]; r++) + crt1_handle_rela(r); +} +#elif defined(CRT_IRELOC_REL) +extern const Elf_Rel __rel_iplt_start[] __weak_symbol __hidden; +extern const Elf_Rel __rel_iplt_end[] __weak_symbol __hidden; + +#include "reloc.c" + +static void +process_irelocs(void) +{ + const Elf_Rel *r; + + for (r = &__rel_iplt_start[0]; r < &__rel_iplt_end[0]; r++) + crt1_handle_rel(r); +} +#elif defined(CRT_IRELOC_SUPPRESS) +#else +#error "Define platform reloc type" +#endif char **environ; const char *__progname = ""; Modified: projects/power8_bringup_hacks/lib/csu/i386/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/i386/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/i386/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -5,8 +5,9 @@ SRCS= crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= gcrt1.o crt1.o Scrt1.o -CFLAGS+= -I${.CURDIR:H}/common \ +CFLAGS+= -I${.CURDIR} -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_REL FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/i386/crt1_c.c ============================================================================== --- projects/power8_bringup_hacks/lib/csu/i386/crt1_c.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/i386/crt1_c.c Tue Oct 16 16:45:21 2018 (r339383) @@ -56,10 +56,12 @@ _start1(fptr cleanup, int argc, char *argv[]) env = argv + argc + 1; handle_argv(argc, argv, env); - if (&_DYNAMIC != NULL) + if (&_DYNAMIC != NULL) { atexit(cleanup); - else + } else { + process_irelocs(); _init_tls(); + } #ifdef GCRT atexit(_mcleanup); Copied: projects/power8_bringup_hacks/lib/csu/i386/reloc.c (from r339382, head/lib/csu/i386/reloc.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/power8_bringup_hacks/lib/csu/i386/reloc.c Tue Oct 16 16:45:21 2018 (r339383, copy of r339382, head/lib/csu/i386/reloc.c) @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2018 The FreeBSD Foundation + * + * This software was developed by Konstantin Belousov <kib@FreeBSD.org> + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <machine/specialreg.h> +#include <machine/cpufunc.h> + +static void +crt1_handle_rel(const Elf_Rel *r) +{ + Elf_Addr *where, target; + u_int cpuid_supported, p[4]; + uint32_t cpu_feature, cpu_feature2; + uint32_t cpu_stdext_feature, cpu_stdext_feature2; + + __asm __volatile( + " pushfl\n" + " popl %%eax\n" + " movl %%eax,%%ecx\n" + " xorl $0x200000,%%eax\n" + " pushl %%eax\n" + " popfl\n" + " pushfl\n" + " popl %%eax\n" + " xorl %%eax,%%ecx\n" + " je 1f\n" + " movl $1,%0\n" + " jmp 2f\n" + "1: movl $0,%0\n" + "2:\n" + : "=r" (cpuid_supported) : : "eax", "ecx", "cc"); + if (cpuid_supported) { + do_cpuid(1, p); + cpu_feature = p[3]; + cpu_feature2 = p[2]; + do_cpuid(0, p); + if (p[0] >= 7) { + cpuid_count(7, 0, p); + cpu_stdext_feature = p[1]; + cpu_stdext_feature2 = p[2]; + } else { + cpu_stdext_feature = 0; + cpu_stdext_feature2 = 0; + } + } else { + cpu_feature = 0; + cpu_feature2 = 0; + cpu_stdext_feature = 0; + cpu_stdext_feature2 = 0; + } + + switch (ELF_R_TYPE(r->r_info)) { + case R_386_IRELATIVE: + where = (Elf_Addr *)r->r_offset; + target = ((Elf_Addr (*)(uint32_t, uint32_t, uint32_t, + uint32_t))*where)(cpu_feature, cpu_feature2, + cpu_stdext_feature, cpu_stdext_feature2); + *where = target; + break; + } +} Modified: projects/power8_bringup_hacks/lib/csu/mips/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/mips/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/mips/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/powerpc/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/powerpc/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/powerpc/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/powerpc64/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/powerpc64/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/powerpc64/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,7 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include \ - -mlongcall + -mlongcall -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/riscv/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/riscv/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/riscv/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/csu/sparc64/Makefile ============================================================================== --- projects/power8_bringup_hacks/lib/csu/sparc64/Makefile Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/csu/sparc64/Makefile Tue Oct 16 16:45:21 2018 (r339383) @@ -7,6 +7,7 @@ OBJS= ${SRCS:N*.h:R:S/$/.o/g} OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR:H}/common \ -I${SRCTOP}/lib/libc/include +CFLAGS+= -DCRT_IRELOC_SUPPRESS FILES= ${OBJS} FILESMODE= ${LIBMODE} Modified: projects/power8_bringup_hacks/lib/libc/amd64/string/Makefile.inc ============================================================================== --- projects/power8_bringup_hacks/lib/libc/amd64/string/Makefile.inc Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/amd64/string/Makefile.inc Tue Oct 16 16:45:21 2018 (r339383) @@ -2,7 +2,6 @@ MDSRCS+= \ bcmp.S \ - bcopy.S \ bzero.S \ memcmp.S \ memcpy.S \ Copied: projects/power8_bringup_hacks/lib/libc/amd64/string/bcopy.c (from r339382, head/lib/libc/amd64/string/bcopy.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/power8_bringup_hacks/lib/libc/amd64/string/bcopy.c Tue Oct 16 16:45:21 2018 (r339383, copy of r339382, head/lib/libc/amd64/string/bcopy.c) @@ -0,0 +1,15 @@ +/*- + * Public domain. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <string.h> + +void +bcopy(const void *src, void *dst, size_t len) +{ + + memmove(dst, src, len); +} Modified: projects/power8_bringup_hacks/lib/libc/amd64/string/memcpy.S ============================================================================== --- projects/power8_bringup_hacks/lib/libc/amd64/string/memcpy.S Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/amd64/string/memcpy.S Tue Oct 16 16:45:21 2018 (r339383) @@ -1,5 +1,5 @@ /* $NetBSD: memcpy.S,v 1.1 2001/06/19 00:25:05 fvdl Exp $ */ /* $FreeBSD$ */ -#define MEMCOPY -#include "bcopy.S" +#define MEMCPY +#include "memmove.S" Modified: projects/power8_bringup_hacks/lib/libc/amd64/string/memmove.S ============================================================================== --- projects/power8_bringup_hacks/lib/libc/amd64/string/memmove.S Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/amd64/string/memmove.S Tue Oct 16 16:45:21 2018 (r339383) @@ -1,5 +1,270 @@ -/* $NetBSD: memmove.S,v 1.1 2001/06/19 00:25:05 fvdl Exp $ */ -/* $FreeBSD$ */ +/*- + * Copyright (c) 2018 The FreeBSD Foundation + * + * This software was developed by Mateusz Guzik <mjg@FreeBSD.org> + * under sponsorship from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ -#define MEMMOVE -#include "bcopy.S" +#include <machine/asm.h> +__FBSDID("$FreeBSD$"); + +#define ALIGN_TEXT .p2align 4,0x90 /* 16-byte alignment, nop filled */ + +/* + * memmove(dst, src, cnt) + * rdi, rsi, rdx + * Contains parts of bcopy written by: + * ws@tools.de (Wolfgang Solfrank, TooLs GmbH) +49-228-985800 + */ + +/* + * Register state at entry is supposed to be as follows: + * rdi - destination + * rsi - source + * rdx - count + * + * The macro possibly clobbers the above and: rcx, r8. + * It does not clobber rax, r10 nor r11. + */ +.macro MEMMOVE erms overlap begin end + \begin +.if \overlap == 1 + movq %rdi,%r8 + subq %rsi,%r8 + cmpq %rcx,%r8 /* overlapping && src < dst? */ + jb 2f +.endif + + cmpq $32,%rcx + jb 1016f + + cmpq $256,%rcx + ja 1256f + +1032: + movq (%rsi),%rdx + movq %rdx,(%rdi) + movq 8(%rsi),%rdx + movq %rdx,8(%rdi) + movq 16(%rsi),%rdx + movq %rdx,16(%rdi) + movq 24(%rsi),%rdx + movq %rdx,24(%rdi) + leaq 32(%rsi),%rsi + leaq 32(%rdi),%rdi + subq $32,%rcx + cmpq $32,%rcx + jae 1032b + cmpb $0,%cl + jne 1016f + \end + ret + ALIGN_TEXT +1016: + cmpb $16,%cl + jl 1008f + movq (%rsi),%rdx + movq %rdx,(%rdi) + movq 8(%rsi),%rdx + movq %rdx,8(%rdi) + subb $16,%cl + jz 1000f + leaq 16(%rsi),%rsi + leaq 16(%rdi),%rdi +1008: + cmpb $8,%cl + jl 1004f + movq (%rsi),%rdx + movq %rdx,(%rdi) + subb $8,%cl + jz 1000f + leaq 8(%rsi),%rsi + leaq 8(%rdi),%rdi +1004: + cmpb $4,%cl + jl 1002f + movl (%rsi),%edx + movl %edx,(%rdi) + subb $4,%cl + jz 1000f + leaq 4(%rsi),%rsi + leaq 4(%rdi),%rdi +1002: + cmpb $2,%cl + jl 1001f + movw (%rsi),%dx + movw %dx,(%rdi) + subb $2,%cl + jz 1000f + leaq 2(%rsi),%rsi + leaq 2(%rdi),%rdi +1001: + cmpb $1,%cl + jl 1000f + movb (%rsi),%dl + movb %dl,(%rdi) +1000: + \end + ret + + ALIGN_TEXT +1256: +.if \erms == 1 + rep + movsb +.else + shrq $3,%rcx /* copy by 64-bit words */ + rep + movsq + movq %rdx,%rcx + andb $7,%cl /* any bytes left? */ + jne 1004b +.endif + \end + ret + +.if \overlap == 1 + /* + * Copy backwards. + */ + ALIGN_TEXT +2: + addq %rcx,%rdi + addq %rcx,%rsi + + cmpq $32,%rcx + jb 2016f + + cmpq $256,%rcx + ja 2256f + +2032: + movq -8(%rsi),%rdx + movq %rdx,-8(%rdi) + movq -16(%rsi),%rdx + movq %rdx,-16(%rdi) + movq -24(%rsi),%rdx + movq %rdx,-24(%rdi) + movq -32(%rsi),%rdx + movq %rdx,-32(%rdi) + leaq -32(%rsi),%rsi + leaq -32(%rdi),%rdi + subq $32,%rcx + cmpq $32,%rcx + jae 2032b + cmpb $0,%cl + jne 2016f + \end + ret + ALIGN_TEXT +2016: + cmpb $16,%cl + jl 2008f + movq -8(%rsi),%rdx + movq %rdx,-8(%rdi) + movq -16(%rsi),%rdx + movq %rdx,-16(%rdi) + subb $16,%cl + jz 2000f + leaq -16(%rsi),%rsi + leaq -16(%rdi),%rdi +2008: + cmpb $8,%cl + jl 2004f + movq -8(%rsi),%rdx + movq %rdx,-8(%rdi) + subb $8,%cl + jz 2000f + leaq -8(%rsi),%rsi + leaq -8(%rdi),%rdi +2004: + cmpb $4,%cl + jl 2002f + movl -4(%rsi),%edx + movl %edx,-4(%rdi) + subb $4,%cl + jz 2000f + leaq -4(%rsi),%rsi + leaq -4(%rdi),%rdi +2002: + cmpb $2,%cl + jl 2001f + movw -2(%rsi),%dx + movw %dx,-2(%rdi) + subb $2,%cl + jz 2000f + leaq -2(%rsi),%rsi + leaq -2(%rdi),%rdi +2001: + cmpb $1,%cl + jl 2000f + movb -1(%rsi),%dl + movb %dl,-1(%rdi) +2000: + \end + ret + ALIGN_TEXT +2256: + decq %rdi + decq %rsi + std +.if \erms == 1 + rep + movsb +.else + andq $7,%rcx /* any fractional bytes? */ + je 3f + rep + movsb +3: + movq %rdx,%rcx /* copy remainder by 32-bit words */ + shrq $3,%rcx + subq $7,%rsi + subq $7,%rdi + rep + movsq +.endif + cld + \end + ret +.endif +.endm + +.macro MEMMOVE_BEGIN + movq %rdi,%rax + movq %rdx,%rcx +.endm + +.macro MEMMOVE_END +.endm + +#ifndef MEMCPY +ENTRY(memmove) + MEMMOVE erms=0 overlap=1 begin=MEMMOVE_BEGIN end=MEMMOVE_END +END(memmove) +#else +ENTRY(memcpy) + MEMMOVE erms=0 overlap=1 begin=MEMMOVE_BEGIN end=MEMMOVE_END +END(memcpy) +#endif Modified: projects/power8_bringup_hacks/lib/libc/net/nsdispatch.3 ============================================================================== --- projects/power8_bringup_hacks/lib/libc/net/nsdispatch.3 Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/net/nsdispatch.3 Tue Oct 16 16:45:21 2018 (r339383) @@ -32,7 +32,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 4, 2010 +.Dd October 15, 2018 .Dt NSDISPATCH 3 .Os .Sh NAME @@ -112,10 +112,7 @@ which case they are selected using the and .Fa method_name arguments along with the configured source. -(The methods supplied via -.Fa dtab -take priority over those implemented in NSS modules in the event -of a conflict.) +Modules must use source names different from the built-in ones. .Pp .Va defaults contains a list of default sources to try if Modified: projects/power8_bringup_hacks/lib/libc/net/nsdispatch.c ============================================================================== --- projects/power8_bringup_hacks/lib/libc/net/nsdispatch.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/net/nsdispatch.c Tue Oct 16 16:45:21 2018 (r339383) @@ -486,9 +486,19 @@ nss_load_module(const char *source, nss_module_registe */ mod.handle = nss_builtin_handle; fn = reg_fn; - } else if (!is_dynamic()) + } else if (!is_dynamic()) { goto fin; - else { + } else if (strcmp(source, NSSRC_CACHE) == 0 || + strcmp(source, NSSRC_COMPAT) == 0 || + strcmp(source, NSSRC_DB) == 0 || + strcmp(source, NSSRC_DNS) == 0 || + strcmp(source, NSSRC_FILES) == 0 || + strcmp(source, NSSRC_NIS) == 0) { + /* + * Avoid calling dlopen(3) for built-in modules. + */ + goto fin; + } else { if (snprintf(buf, sizeof(buf), "nss_%s.so.%d", mod.name, NSS_MODULE_INTERFACE_VERSION) >= (int)sizeof(buf)) goto fin; Modified: projects/power8_bringup_hacks/lib/libc/net/nslexer.l ============================================================================== --- projects/power8_bringup_hacks/lib/libc/net/nslexer.l Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/net/nslexer.l Tue Oct 16 16:45:21 2018 (r339383) @@ -50,6 +50,7 @@ static char *rcsid = %} +%option never-interactive %option noinput %option nounput %option yylineno Modified: projects/power8_bringup_hacks/lib/libc/stdtime/strptime.c ============================================================================== --- projects/power8_bringup_hacks/lib/libc/stdtime/strptime.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/stdtime/strptime.c Tue Oct 16 16:45:21 2018 (r339383) @@ -291,7 +291,7 @@ label: if (c == 'H' || c == 'k') { if (i > 23) return (NULL); - } else if (i > 12) + } else if (i == 0 || i > 12) return (NULL); tm->tm_hour = i; Modified: projects/power8_bringup_hacks/lib/libc/string/memmem.c ============================================================================== --- projects/power8_bringup_hacks/lib/libc/string/memmem.c Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/string/memmem.c Tue Oct 16 16:45:21 2018 (r339383) @@ -31,27 +31,27 @@ __FBSDID("$FreeBSD$"); static char *twobyte_memmem(const unsigned char *h, size_t k, const unsigned char *n) { uint16_t nw = n[0]<<8 | n[1], hw = h[0]<<8 | h[1]; - for (h++, k--; k; k--, hw = hw<<8 | *++h) - if (hw == nw) return (char *)h-1; - return 0; + for (h+=2, k-=2; k; k--, hw = hw<<8 | *h++) + if (hw == nw) return (char *)h-2; + return hw == nw ? (char *)h-2 : 0; } static char *threebyte_memmem(const unsigned char *h, size_t k, const unsigned char *n) { uint32_t nw = n[0]<<24 | n[1]<<16 | n[2]<<8; uint32_t hw = h[0]<<24 | h[1]<<16 | h[2]<<8; - for (h+=2, k-=2; k; k--, hw = (hw|*++h)<<8) - if (hw == nw) return (char *)h-2; - return 0; + for (h+=3, k-=3; k; k--, hw = (hw|*h++)<<8) + if (hw == nw) return (char *)h-3; + return hw == nw ? (char *)h-3 : 0; } static char *fourbyte_memmem(const unsigned char *h, size_t k, const unsigned char *n) { uint32_t nw = n[0]<<24 | n[1]<<16 | n[2]<<8 | n[3]; uint32_t hw = h[0]<<24 | h[1]<<16 | h[2]<<8 | h[3]; - for (h+=3, k-=3; k; k--, hw = hw<<8 | *++h) - if (hw == nw) return (char *)h-3; - return 0; + for (h+=4, k-=4; k; k--, hw = hw<<8 | *h++) + if (hw == nw) return (char *)h-4; + return hw == nw ? (char *)h-4 : 0; } #define MAX(a,b) ((a)>(b)?(a):(b)) Modified: projects/power8_bringup_hacks/lib/libc/sys/pdfork.2 ============================================================================== --- projects/power8_bringup_hacks/lib/libc/sys/pdfork.2 Tue Oct 16 16:36:02 2018 (r339382) +++ projects/power8_bringup_hacks/lib/libc/sys/pdfork.2 Tue Oct 16 16:45:21 2018 (r339383) @@ -32,7 +32,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 17, 2017 *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201810161645.w9GGjLGR007311>