hardknott: glibc: remove v2.33 recipes and their respective files
The recipes for this version are already provided by poky Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
This commit is contained in:
parent
bc761a01ea
commit
a627ccb6f3
|
|
@ -1,50 +0,0 @@
|
|||
SUMMARY = "Cross locale generation tool for glibc"
|
||||
HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
|
||||
SECTION = "libs"
|
||||
LICENSE = "LGPL-2.1"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://LICENSES;md5=1541fd8f5e8f1579512bf05f533371ba \
|
||||
file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
|
||||
file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \
|
||||
file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
|
||||
|
||||
require glibc-version.inc
|
||||
|
||||
# Tell autotools that we're working in the localedef directory
|
||||
#
|
||||
AUTOTOOLS_SCRIPT_PATH = "${S}/localedef"
|
||||
|
||||
inherit autotools
|
||||
inherit native
|
||||
|
||||
FILESEXTRAPATHS =. "${FILE_DIRNAME}/${PN}:${FILE_DIRNAME}/glibc:"
|
||||
|
||||
SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
|
||||
git://github.com/kraj/localedef;branch=master;name=localedef;destsuffix=git/localedef \
|
||||
\
|
||||
file://0001-localedef-Add-hardlink-resolver-from-util-linux.patch \
|
||||
file://0002-localedef-fix-ups-hardlink-to-make-it-compile.patch \
|
||||
\
|
||||
file://0016-timezone-re-written-tzselect-as-posix-sh.patch \
|
||||
file://0017-Remove-bash-dependency-for-nscd-init-script.patch \
|
||||
file://0018-eglibc-Cross-building-and-testing-instructions.patch \
|
||||
file://0019-eglibc-Help-bootstrap-cross-toolchain.patch \
|
||||
file://0020-eglibc-Resolve-__fpscr_values-on-SH4.patch \
|
||||
file://0021-eglibc-Forward-port-cross-locale-generation-support.patch \
|
||||
file://0022-Define-DUMMY_LOCALE_T-if-not-defined.patch \
|
||||
file://0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
|
||||
"
|
||||
# Makes for a rather long rev (22 characters), but...
|
||||
#
|
||||
SRCREV_FORMAT = "glibc_localedef"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
EXTRA_OECONF = "--with-glibc=${S}"
|
||||
CFLAGS += "-fgnu89-inline -std=gnu99 -DIS_IN\(x\)='0'"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${B}/localedef ${D}${bindir}/cross-localedef
|
||||
install -m 0755 ${B}/cross-localedef-hardlink ${D}${bindir}/cross-localedef-hardlink
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
require glibc-common.inc
|
||||
|
||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
|
||||
file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780"
|
||||
|
||||
deltask do_fetch
|
||||
deltask do_unpack
|
||||
deltask do_patch
|
||||
do_configure[noexec] = "1"
|
||||
do_compile[noexec] = "1"
|
||||
|
||||
do_install[depends] += "virtual/${MLPREFIX}libc:do_stash_locale"
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
SUMMARY = "GLIBC (GNU C Library)"
|
||||
DESCRIPTION = "The GNU C Library is used as the system C library in most systems with the Linux kernel."
|
||||
HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
|
||||
SECTION = "libs"
|
||||
LICENSE = "GPLv2 & LGPLv2.1"
|
||||
|
||||
LIC_FILES_CHKSUM ?= "file://LICENSES;md5=1541fd8f5e8f1579512bf05f533371ba \
|
||||
file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
|
||||
file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \
|
||||
file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
|
||||
|
||||
CVE_PRODUCT = "glibc"
|
||||
|
||||
INHIBIT_DEFAULT_DEPS = "1"
|
||||
|
||||
ARM_INSTRUCTION_SET_armv4 = "arm"
|
||||
ARM_INSTRUCTION_SET_armv5 = "arm"
|
||||
ARM_INSTRUCTION_SET_armv6 = "arm"
|
||||
#
|
||||
# We will skip parsing glibc when target system C library selection is not glibc
|
||||
# this helps in easing out parsing for non-glibc system libraries
|
||||
#
|
||||
COMPATIBLE_HOST_libc-musl_class-target = "null"
|
||||
|
||||
PV = "2.33"
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
inherit linuxloader
|
||||
|
||||
GLIBC_GETLOADER = "${@get_linuxloader(d)}"
|
||||
|
||||
def glibc_dl_info(d):
|
||||
infos = {'ldconfig':set(), 'lddrewrite':set()}
|
||||
|
||||
loaders = all_multilib_tune_values(d, "GLIBC_GETLOADER").split()
|
||||
for loader in loaders:
|
||||
infos['ldconfig'].add('{"' + loader + '",' + "FLAG_ELF_LIBC6" + ' }')
|
||||
infos['lddrewrite'].add(loader)
|
||||
|
||||
infos['ldconfig'] = ','.join(sorted(infos['ldconfig']))
|
||||
infos['lddrewrite'] = ' '.join(sorted(infos['lddrewrite']))
|
||||
return infos
|
||||
|
||||
EGLIBC_KNOWN_INTERPRETER_NAMES = "${@glibc_dl_info(d)['ldconfig']}"
|
||||
RTLDLIST = "${@glibc_dl_info(d)['lddrewrite']}"
|
||||
RTLDLIST_class-nativesdk = "${base_libdir}/${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', 'ld-linux.so.2', d)}"
|
||||
glibc_dl_info[vardepsexclude] = "OVERRIDES"
|
||||
|
|
@ -1,103 +0,0 @@
|
|||
require glibc-collateral.inc
|
||||
|
||||
SUMMARY = "Locale data from glibc"
|
||||
|
||||
BPN = "glibc"
|
||||
LOCALEBASEPN = "${MLPREFIX}glibc"
|
||||
|
||||
# glibc-collateral.inc inhibits all default deps, but do_package needs objcopy
|
||||
# ERROR: objcopy failed with exit code 127 (cmd was 'i586-webos-linux-objcopy' --only-keep-debug 'glibc-locale/2.17-r0/package/usr/lib/gconv/IBM1166.so' 'glibc-locale/2.17-r0/package/usr/lib/gconv/.debug/IBM1166.so')
|
||||
# ERROR: Function failed: split_and_strip_files
|
||||
BINUTILSDEP = "virtual/${MLPREFIX}${TARGET_PREFIX}binutils:do_populate_sysroot"
|
||||
BINUTILSDEP_class-nativesdk = "virtual/${TARGET_PREFIX}binutils-crosssdk:do_populate_sysroot"
|
||||
do_package[depends] += "${BINUTILSDEP}"
|
||||
|
||||
DEPENDS += "virtual/libc"
|
||||
|
||||
# Binary locales are generated at build time if ENABLE_BINARY_LOCALE_GENERATION
|
||||
# is set. The idea is to avoid running localedef on the target (at first boot)
|
||||
# to decrease initial boot time and avoid localedef being killed by the OOM
|
||||
# killer which used to effectively break i18n on machines with < 128MB RAM.
|
||||
|
||||
# default to disabled
|
||||
ENABLE_BINARY_LOCALE_GENERATION ?= "0"
|
||||
ENABLE_BINARY_LOCALE_GENERATION_pn-nativesdk-glibc-locale = "1"
|
||||
|
||||
#enable locale generation on these arches
|
||||
# BINARY_LOCALE_ARCHES is a space separated list of regular expressions
|
||||
BINARY_LOCALE_ARCHES ?= "arc arm.* aarch64 i[3-6]86 x86_64 powerpc mips mips64 riscv32 riscv64"
|
||||
|
||||
# set "1" to use cross-localedef for locale generation
|
||||
# set "0" for qemu emulation of native localedef for locale generation
|
||||
LOCALE_GENERATION_WITH_CROSS-LOCALEDEF = "1"
|
||||
|
||||
PROVIDES = "virtual/libc-locale"
|
||||
|
||||
PACKAGES = "localedef ${PN}-dbg"
|
||||
|
||||
PACKAGES_DYNAMIC = "^locale-base-.* \
|
||||
^glibc-gconv-.* ^glibc-charmap-.* ^glibc-localedata-.* ^glibc-binary-localedata-.* \
|
||||
^${MLPREFIX}glibc-gconv$"
|
||||
|
||||
# Create a glibc-binaries package
|
||||
ALLOW_EMPTY_${BPN}-binaries = "1"
|
||||
PACKAGES += "${BPN}-binaries"
|
||||
RRECOMMENDS_${BPN}-binaries = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-binary") != -1])}"
|
||||
|
||||
# Create a glibc-charmaps package
|
||||
ALLOW_EMPTY_${BPN}-charmaps = "1"
|
||||
PACKAGES += "${BPN}-charmaps"
|
||||
RRECOMMENDS_${BPN}-charmaps = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-charmap") != -1])}"
|
||||
|
||||
# Create a glibc-gconvs package
|
||||
ALLOW_EMPTY_${BPN}-gconvs = "1"
|
||||
PACKAGES += "${BPN}-gconvs"
|
||||
RRECOMMENDS_${BPN}-gconvs = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-gconv") != -1])}"
|
||||
|
||||
# Create a glibc-localedatas package
|
||||
ALLOW_EMPTY_${BPN}-localedatas = "1"
|
||||
PACKAGES += "${BPN}-localedatas"
|
||||
RRECOMMENDS_${BPN}-localedatas = "${@" ".join([p for p in d.getVar('PACKAGES').split() if p.find("glibc-localedata") != -1])}"
|
||||
|
||||
DESCRIPTION_localedef = "glibc: compile locale definition files"
|
||||
|
||||
# glibc-gconv is dynamically added into PACKAGES, thus
|
||||
# FILES_glibc-gconv will not be automatically extended in multilib.
|
||||
# Explicitly add ${MLPREFIX} for FILES_glibc-gconv.
|
||||
FILES_${MLPREFIX}glibc-gconv = "${libdir}/gconv/*"
|
||||
FILES_localedef = "${bindir}/localedef"
|
||||
|
||||
LOCALETREESRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
|
||||
|
||||
copy_locale_files() {
|
||||
local dir=$1 mode=$2
|
||||
|
||||
[ -e "${LOCALETREESRC}$dir" ] || return 0
|
||||
|
||||
for d in . $(find "${LOCALETREESRC}$dir" -type d -printf '%P '); do
|
||||
install -d ${D}$dir/$d
|
||||
find "${LOCALETREESRC}$dir/$d" -maxdepth 1 -type f \
|
||||
-exec install -m $mode -t "${D}$dir/$d" {} \;
|
||||
done
|
||||
}
|
||||
|
||||
do_install() {
|
||||
copy_locale_files ${bindir} 0755
|
||||
copy_locale_files ${localedir} 0644
|
||||
if [ ${PACKAGE_NO_GCONV} -eq 0 ]; then
|
||||
copy_locale_files ${libdir}/gconv 0755
|
||||
copy_locale_files ${datadir}/i18n 0644
|
||||
else
|
||||
# Remove the libdir if it is empty when gconv is not copied
|
||||
find ${D}${libdir} -type d -empty -delete
|
||||
fi
|
||||
copy_locale_files ${datadir}/locale 0644
|
||||
install -m 0644 ${LOCALETREESRC}/SUPPORTED ${WORKDIR}/SUPPORTED
|
||||
}
|
||||
|
||||
inherit libc-package
|
||||
|
||||
BBCLASSEXTEND = "nativesdk"
|
||||
|
||||
# Don't scan for CVEs as glibc will be scanned
|
||||
CVE_PRODUCT = ""
|
||||
|
|
@ -1 +0,0 @@
|
|||
require glibc-locale.inc
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
require glibc-collateral.inc
|
||||
|
||||
SUMMARY = "mtrace utility provided by glibc"
|
||||
DESCRIPTION = "mtrace utility provided by glibc"
|
||||
RDEPENDS_${PN} = "perl"
|
||||
RPROVIDES_${PN} = "libc-mtrace"
|
||||
|
||||
SRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale/scripts"
|
||||
|
||||
do_install() {
|
||||
install -d -m 0755 ${D}${bindir}
|
||||
install -m 0755 ${SRC}/mtrace ${D}${bindir}/
|
||||
}
|
||||
|
||||
# Don't scan for CVEs as glibc will be scanned
|
||||
CVE_PRODUCT = ""
|
||||
|
|
@ -1 +0,0 @@
|
|||
require glibc-mtrace.inc
|
||||
|
|
@ -1,286 +0,0 @@
|
|||
INHIBIT_SYSROOT_STRIP = "1"
|
||||
|
||||
PACKAGES = "${PN}-dbg catchsegv sln nscd ldconfig ldd tzcode glibc-thread-db ${PN}-pic libcidn libmemusage libnss-db libsegfault ${PN}-pcprofile libsotruss ${PN} ${PN}-utils glibc-extra-nss ${PN}-dev ${PN}-staticdev ${PN}-doc"
|
||||
|
||||
# The ld.so in this glibc supports the GNU_HASH
|
||||
RPROVIDES_${PN} = "eglibc rtld(GNU_HASH)"
|
||||
RPROVIDES_${PN}-utils = "eglibc-utils"
|
||||
RPROVIDES_${PN}-mtrace = "eglibc-mtrace libc-mtrace"
|
||||
RPROVIDES_${PN}-pic = "eglibc-pic"
|
||||
RPROVIDES_${PN}-dev = "eglibc-dev libc6-dev virtual-libc-dev"
|
||||
RPROVIDES_${PN}-staticdev = "eglibc-staticdev"
|
||||
RPROVIDES_${PN}-doc = "eglibc-doc"
|
||||
RPROVIDES_glibc-extra-nss = "eglibc-extra-nss"
|
||||
RPROVIDES_glibc-thread-db = "eglibc-thread-db"
|
||||
RPROVIDES_${PN}-pcprofile = "eglibc-pcprofile"
|
||||
RPROVIDES_${PN}-dbg = "eglibc-dbg"
|
||||
libc_baselibs = "${base_libdir}/libc.so.* ${base_libdir}/libc-*.so ${base_libdir}/libm*.so.* ${base_libdir}/libm-*.so ${base_libdir}/libmvec-*.so ${base_libdir}/ld*.so.* ${base_libdir}/ld-*.so ${base_libdir}/libpthread*.so.* ${base_libdir}/libpthread-*.so ${base_libdir}/libresolv*.so.* ${base_libdir}/libresolv-*.so ${base_libdir}/librt*.so.* ${base_libdir}/librt-*.so ${base_libdir}/libutil*.so.* ${base_libdir}/libutil-*.so ${base_libdir}/libnsl*.so.* ${base_libdir}/libnsl-*.so ${base_libdir}/libnss_files*.so.* ${base_libdir}/libnss_files-*.so ${base_libdir}/libnss_compat*.so.* ${base_libdir}/libnss_compat-*.so ${base_libdir}/libnss_dns*.so.* ${base_libdir}/libnss_dns-*.so ${base_libdir}/libdl*.so.* ${base_libdir}/libdl-*.so ${base_libdir}/libanl*.so.* ${base_libdir}/libanl-*.so ${base_libdir}/libBrokenLocale*.so.* ${base_libdir}/libBrokenLocale-*.so"
|
||||
ARCH_DYNAMIC_LOADER = ""
|
||||
# The aarch64 ABI says the dynamic linker -must- be
|
||||
# /lib/ld-linux-aarch64{,_be}.so.1. With usrmerge, that may mean that
|
||||
# we need to install it in /usr/lib.
|
||||
ARCH_DYNAMIC_LOADER_aarch64 = "ld-linux-${TARGET_ARCH}.so.1"
|
||||
libc_baselibs_append = " ${@oe.utils.conditional('ARCH_DYNAMIC_LOADER', '', '', '${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}', d)}"
|
||||
INSANE_SKIP_${PN}_append_aarch64 = " libdir"
|
||||
|
||||
FILES_${PN} = "${libc_baselibs} ${libexecdir}/* ${sysconfdir}/ld.so.conf"
|
||||
RRECOMMENDS_${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'ldconfig', '${MLPREFIX}ldconfig', '', d)}"
|
||||
FILES_ldconfig = "${base_sbindir}/ldconfig"
|
||||
FILES_ldd = "${bindir}/ldd"
|
||||
FILES_libsegfault = "${base_libdir}/libSegFault*"
|
||||
FILES_libcidn = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn.so.*"
|
||||
FILES_libmemusage = "${base_libdir}/libmemusage.so"
|
||||
FILES_libnss-db = "${base_libdir}/libnss_db.so.* ${base_libdir}/libnss_db-*.so ${localstatedir}/db/Makefile ${localstatedir}/db/makedbs.sh"
|
||||
RDEPENDS_libnss-db = "${PN}-utils"
|
||||
FILES_glibc-extra-nss = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*"
|
||||
FILES_sln = "${base_sbindir}/sln"
|
||||
FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
|
||||
FILES_libsotruss = "${libdir}/audit/sotruss-lib.so"
|
||||
FILES_SOLIBSDEV = "${libdir}/lib*${SOLIBSDEV}"
|
||||
FILES_${PN}-dev += "${libdir}/*_nonshared.a ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"
|
||||
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
|
||||
FILES_${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
|
||||
FILES_nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_unitdir}/system/nscd* ${sysconfdir}/tmpfiles.d/nscd.conf \
|
||||
${sysconfdir}/nscd.conf ${sysconfdir}/default/volatiles/98_nscd ${localstatedir}/db/nscd"
|
||||
FILES_${PN}-mtrace = "${bindir}/mtrace"
|
||||
FILES_tzcode = "${bindir}/tzselect ${sbindir}/zic ${sbindir}/zdump"
|
||||
FILES_${PN}-utils = "${bindir}/* ${sbindir}/*"
|
||||
FILES_catchsegv = "${bindir}/catchsegv"
|
||||
RDEPENDS_catchsegv = "libsegfault"
|
||||
FILES_${PN}-pcprofile = "${base_libdir}/libpcprofile.so"
|
||||
FILES_glibc-thread-db = "${base_libdir}/libthread_db.so.* ${base_libdir}/libthread_db-*.so"
|
||||
RPROVIDES_${PN}-dev += "libc-dev"
|
||||
RPROVIDES_${PN}-staticdev += "libc-staticdev"
|
||||
|
||||
SUMMARY_sln = "The static ln"
|
||||
DESCRIPTION_sln = "Similar to the 'ln' utility, but statically linked. sln is useful to make symbolic links to dynamic libraries if the dynamic linking system, for some reason, is not functional."
|
||||
SUMMARY_nscd = "Name service cache daemon"
|
||||
DESCRIPTION_nscd = "nscd, name service cache daemon, caches name service lookups for the passwd, group and hosts information. It can damatically improvide performance with remote, such as NIS or NIS+, name services."
|
||||
SUMMARY_glibc-extra-nss = "hesiod, NIS and NIS+ nss libraries"
|
||||
DESCRIPTION_glibc-extra-nss = "glibc: nis, nisplus and hesiod search services."
|
||||
SUMMARY_ldd = "print shared library dependencies"
|
||||
DESCRIPTION_ldd = "${bindir}/ldd prints shared library dependencies for each program or shared library specified on the command line."
|
||||
SUMMARY_${PN}-utils = "Miscellaneous utilities provided by glibc"
|
||||
DESCRIPTION_${PN}-utils = "Miscellaneous utilities including getconf, iconv, locale, gencat, ..."
|
||||
DESCRIPTION_libsotruss = "Library to support sotruss which traces calls through PLTs"
|
||||
DESCRIPTION_tzcode = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
|
||||
|
||||
inherit multilib_header
|
||||
|
||||
do_install() {
|
||||
oe_runmake install_root=${D} install
|
||||
install -Dm 0644 ${WORKDIR}/etc/ld.so.conf ${D}/${sysconfdir}/ld.so.conf
|
||||
install -d ${D}${localedir}
|
||||
make -f ${WORKDIR}/generate-supported.mk IN="${S}/localedata/SUPPORTED" OUT="${WORKDIR}/SUPPORTED"
|
||||
# get rid of some broken files...
|
||||
for i in ${GLIBC_BROKEN_LOCALES}; do
|
||||
sed -i "/$i/d" ${WORKDIR}/SUPPORTED
|
||||
done
|
||||
rm -f ${D}${sysconfdir}/rpc
|
||||
rm -rf ${D}${datadir}/zoneinfo
|
||||
rm -rf ${D}${libexecdir}/getconf
|
||||
|
||||
rm -f ${D}${sysconfdir}/localtime
|
||||
|
||||
# remove empty glibc dir
|
||||
if [ -d ${D}${libexecdir} ]; then
|
||||
rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
|
||||
fi
|
||||
|
||||
oe_multilib_header bits/syscall.h bits/long-double.h bits/floatn.h bits/endianness.h bits/struct_rwlock.h
|
||||
|
||||
if [ -f ${D}${bindir}/mtrace ]; then
|
||||
sed -i -e '1s,#!.*perl,#! ${USRBINPATH}/env perl,' -e '2s,exec.*perl,exec ${USRBINPATH}/env perl,' ${D}${bindir}/mtrace
|
||||
fi
|
||||
# Info dir listing isn't interesting at this point so remove it if it exists.
|
||||
if [ -e "${D}${infodir}/dir" ]; then
|
||||
rm -f ${D}${infodir}/dir
|
||||
fi
|
||||
|
||||
install -d ${D}${sysconfdir}/init.d
|
||||
install -d ${D}${localstatedir}/db/nscd
|
||||
install -m 0755 ${S}/nscd/nscd.init ${D}${sysconfdir}/init.d/nscd
|
||||
install -m 0755 ${S}/nscd/nscd.conf ${D}${sysconfdir}/nscd.conf
|
||||
install -m 0755 ${WORKDIR}/makedbs.sh ${D}${localstatedir}/db
|
||||
sed -i "s%daemon%start-stop-daemon --start --exec%g" ${D}${sysconfdir}/init.d/nscd
|
||||
sed -i "s|\(enable-cache\t\+netgroup\t\+\)yes|\1no|" ${D}${sysconfdir}/nscd.conf
|
||||
|
||||
install -d ${D}${systemd_unitdir}/system
|
||||
install -m 0644 ${S}/nscd/nscd.service ${D}${systemd_unitdir}/system/
|
||||
|
||||
# The dynamic loader will have been installed into
|
||||
# ${base_libdir}. However, if that isn't going to end up being
|
||||
# available in the ABI-mandated location, then a symlink must
|
||||
# be created.
|
||||
|
||||
if [ -n "${ARCH_DYNAMIC_LOADER}" -a ! -e "${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
|
||||
install -d ${D}${root_prefix}/lib
|
||||
ln -s ${@oe.path.relative('${root_prefix}/lib', '${base_libdir}')}/${ARCH_DYNAMIC_LOADER} \
|
||||
${D}${root_prefix}/lib/${ARCH_DYNAMIC_LOADER}
|
||||
fi
|
||||
}
|
||||
|
||||
def get_libc_fpu_setting(bb, d):
|
||||
if d.getVar('TARGET_FPU') in [ 'soft', 'ppc-efd' ]:
|
||||
return "--without-fp"
|
||||
return ""
|
||||
|
||||
do_install_append_class-target() {
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||
install -d ${D}${sysconfdir}/tmpfiles.d
|
||||
echo "d /run/nscd 755 root root -" \
|
||||
> ${D}${sysconfdir}/tmpfiles.d/nscd.conf
|
||||
fi
|
||||
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
|
||||
install -d ${D}${sysconfdir}/default/volatiles
|
||||
echo "d root root 0755 /var/run/nscd none" \
|
||||
> ${D}${sysconfdir}/default/volatiles/98_nscd
|
||||
fi
|
||||
|
||||
}
|
||||
do_install_append_aarch64 () {
|
||||
do_install_armmultilib
|
||||
}
|
||||
|
||||
do_install_append_arm () {
|
||||
do_install_armmultilib
|
||||
}
|
||||
|
||||
do_install_append_armeb () {
|
||||
do_install_armmultilib
|
||||
}
|
||||
|
||||
do_install_armmultilib () {
|
||||
oe_multilib_header bits/endian.h bits/fcntl.h bits/fenv.h bits/fp-fast.h bits/hwcap.h bits/ipc.h bits/link.h
|
||||
oe_multilib_header bits/local_lim.h bits/mman.h bits/msq.h bits/pthreadtypes.h bits/pthreadtypes-arch.h bits/sem.h bits/semaphore.h bits/setjmp.h
|
||||
oe_multilib_header bits/shm.h bits/sigstack.h bits/stat.h bits/statfs.h bits/typesizes.h
|
||||
oe_multilib_header bits/procfs-id.h bits/procfs.h bits/shmlba.h
|
||||
oe_multilib_header bits/struct_stat.h
|
||||
|
||||
oe_multilib_header fpu_control.h gnu/lib-names.h gnu/stubs.h ieee754.h
|
||||
|
||||
oe_multilib_header sys/elf.h sys/procfs.h sys/ptrace.h sys/ucontext.h sys/user.h
|
||||
}
|
||||
|
||||
|
||||
LOCALESTASH = "${WORKDIR}/stashed-locale"
|
||||
bashscripts = "mtrace sotruss xtrace"
|
||||
|
||||
do_stash_locale () {
|
||||
dest=${LOCALESTASH}
|
||||
install -d $dest${base_libdir} $dest${bindir} $dest${libdir} $dest${datadir}
|
||||
# Hide away the locale data from the deployment
|
||||
if [ -e ${D}${bindir}/localedef ]; then
|
||||
cp -a ${D}${bindir}/localedef $dest${bindir}
|
||||
fi
|
||||
if [ -e ${D}${libdir}/gconv ]; then
|
||||
cp -a ${D}${libdir}/gconv $dest${libdir}
|
||||
fi
|
||||
if [ -e ${D}${datadir}/i18n ]; then
|
||||
cp -a ${D}${datadir}/i18n $dest${datadir}
|
||||
fi
|
||||
|
||||
# Make a copy of all the libraries into the locale stash
|
||||
cp -fpPR ${D}${libdir}/* $dest${libdir}
|
||||
if [ "${base_libdir}" != "${libdir}" ]; then
|
||||
cp -fpPR ${D}${base_libdir}/* $dest${base_libdir}
|
||||
fi
|
||||
if [ -e ${D}${exec_prefix}/lib ]; then
|
||||
if [ ${exec_prefix}/lib != ${base_libdir} ] && [ ${exec_prefix}/lib != ${libdir} ]; then
|
||||
cp -fpPR ${D}${exec_prefix}/lib $dest${exec_prefix}
|
||||
fi
|
||||
fi
|
||||
|
||||
cp -fpPR ${D}${datadir}/* $dest${datadir}
|
||||
cp -fpPR ${WORKDIR}/SUPPORTED $dest
|
||||
|
||||
target=$dest/scripts
|
||||
mkdir -p $target
|
||||
for i in ${bashscripts}; do
|
||||
if [ -f ${D}${bindir}/$i ]; then
|
||||
cp ${D}${bindir}/$i $target/
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
addtask do_stash_locale after do_install before do_populate_sysroot do_package
|
||||
do_stash_locale[dirs] = "${B}"
|
||||
do_stash_locale[cleandirs] = "${LOCALESTASH}"
|
||||
SSTATETASKS += "do_stash_locale"
|
||||
do_stash_locale[sstate-inputdirs] = "${LOCALESTASH}"
|
||||
do_stash_locale[sstate-outputdirs] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
|
||||
do_stash_locale[sstate-fixmedir] = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale"
|
||||
|
||||
python do_stash_locale_setscene () {
|
||||
sstate_setscene(d)
|
||||
}
|
||||
addtask do_stash_locale_setscene
|
||||
|
||||
PACKAGE_PREPROCESS_FUNCS += "stash_locale_package_cleanup"
|
||||
SYSROOT_PREPROCESS_FUNCS += "stash_locale_sysroot_cleanup"
|
||||
stash_locale_cleanup () {
|
||||
cleanupdir=$1
|
||||
# Remove all files which do_stash_locale() copies
|
||||
for i in ${bashscripts}; do
|
||||
rm -f $cleanupdir${bindir}/$i
|
||||
done
|
||||
rm -f $cleanupdir${bindir}/localedef
|
||||
rm -rf $cleanupdir${datadir}/i18n
|
||||
rm -rf $cleanupdir${libdir}/gconv
|
||||
rm -rf $cleanupdir${localedir}
|
||||
rm -rf $cleanupdir${datadir}/locale
|
||||
rmdir --ignore-fail-on-non-empty $cleanupdir${datadir}
|
||||
|
||||
if [ "${libdir}" != "${exec_prefix}/lib" ] && [ "${root_prefix}/lib" != "${exec_prefix}/lib" ]; then
|
||||
if [ -d "$cleanupdir${exec_prefix}/lib" ]; then
|
||||
if [ -z "${ARCH_DYNAMIC_LOADER}" -o \
|
||||
! -e "$cleanupdir${exec_prefix}/lib/${ARCH_DYNAMIC_LOADER}" ]; then
|
||||
# error out if directory isn't empty
|
||||
# this dir should only contain locale dir
|
||||
# which has been deleted in the previous step
|
||||
rmdir $cleanupdir${exec_prefix}/lib
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
stash_locale_sysroot_cleanup() {
|
||||
stash_locale_cleanup ${SYSROOT_DESTDIR}
|
||||
}
|
||||
stash_locale_package_cleanup() {
|
||||
stash_locale_cleanup ${PKGD}
|
||||
}
|
||||
|
||||
python populate_packages_prepend () {
|
||||
if d.getVar('DEBIAN_NAMES'):
|
||||
pkgs = d.getVar('PACKAGES').split()
|
||||
bpn = d.getVar('BPN')
|
||||
prefix = d.getVar('MLPREFIX') or ""
|
||||
# Set the base package...
|
||||
d.setVar('PKG_' + prefix + bpn, prefix + 'libc6')
|
||||
libcprefix = prefix + bpn + '-'
|
||||
for p in pkgs:
|
||||
# And all the subpackages.
|
||||
if p.startswith(libcprefix):
|
||||
renamed = p.replace(bpn, 'libc6', 1)
|
||||
d.setVar('PKG_' + p, renamed)
|
||||
# For backward compatibility with old -dbg package
|
||||
d.appendVar('RPROVIDES_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
|
||||
d.appendVar('RCONFLICTS_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
|
||||
d.appendVar('RREPLACES_' + libcprefix + 'dbg', ' ' + prefix + 'libc-dbg')
|
||||
}
|
||||
|
||||
pkg_postinst_nscd () {
|
||||
if [ -z "$D" ]; then
|
||||
if command -v systemd-tmpfiles >/dev/null; then
|
||||
systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/nscd.conf
|
||||
elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
|
||||
${sysconfdir}/init.d/populate-volatile.sh update
|
||||
fi
|
||||
fi
|
||||
}
|
||||
CONFFILES_nscd="${sysconfdir}/nscd.conf"
|
||||
|
||||
SYSTEMD_PACKAGES = "nscd"
|
||||
SYSTEMD_SERVICE_nscd = "nscd.service"
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
require glibc-collateral.inc
|
||||
|
||||
SUMMARY = "utility scripts provided by glibc"
|
||||
DESCRIPTION = "utility scripts provided by glibc"
|
||||
RDEPENDS_${PN} = "bash glibc-mtrace"
|
||||
|
||||
SRC = "${COMPONENTS_DIR}/${PACKAGE_ARCH}/glibc-stash-locale/scripts"
|
||||
|
||||
bashscripts = "sotruss xtrace"
|
||||
|
||||
do_install() {
|
||||
install -d -m 0755 ${D}${bindir}
|
||||
for i in ${bashscripts}; do
|
||||
install -m 0755 ${SRC}/$i ${D}${bindir}/
|
||||
done
|
||||
}
|
||||
|
||||
# sotruss script requires sotruss-lib.so (given by libsotruss package),
|
||||
# to produce trace of the library calls.
|
||||
RDEPENDS_${PN} += "libsotruss"
|
||||
|
||||
# Don't scan for CVEs as glibc will be scanned
|
||||
CVE_PRODUCT = ""
|
||||
|
|
@ -1 +0,0 @@
|
|||
require glibc-scripts.inc
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
require glibc_${PV}.bb
|
||||
|
||||
EXCLUDE_FROM_WORLD = "1"
|
||||
|
||||
# handle PN differences
|
||||
FILESEXTRAPATHS_prepend := "${THISDIR}/glibc:"
|
||||
|
||||
# strip provides
|
||||
PROVIDES = ""
|
||||
# setup depends
|
||||
INHIBIT_DEFAULT_DEPS = ""
|
||||
|
||||
python () {
|
||||
libc = d.getVar("PREFERRED_PROVIDER_virtual/libc")
|
||||
libclocale = d.getVar("PREFERRED_PROVIDER_virtual/libc-locale")
|
||||
if libc != "glibc" or libclocale != "glibc-locale":
|
||||
raise bb.parse.SkipRecipe("glibc-testsuite requires that virtual/libc is glibc")
|
||||
}
|
||||
|
||||
DEPENDS += "glibc-locale libgcc gcc-runtime"
|
||||
|
||||
# remove the initial depends
|
||||
DEPENDS_remove = "libgcc-initial"
|
||||
|
||||
inherit qemu
|
||||
|
||||
SRC_URI += "file://check-test-wrapper"
|
||||
|
||||
DEPENDS += "${@'qemu-native' if d.getVar('TOOLCHAIN_TEST_TARGET') == 'user' else ''}"
|
||||
|
||||
TOOLCHAIN_TEST_TARGET ??= "user"
|
||||
TOOLCHAIN_TEST_HOST ??= "localhost"
|
||||
TOOLCHAIN_TEST_HOST_USER ??= "root"
|
||||
TOOLCHAIN_TEST_HOST_PORT ??= "2222"
|
||||
|
||||
do_check[dirs] += "${B}"
|
||||
do_check[nostamp] = "1"
|
||||
do_check () {
|
||||
chmod 0755 ${WORKDIR}/check-test-wrapper
|
||||
|
||||
# clean out previous test results
|
||||
oe_runmake tests-clean
|
||||
# makefiles don't clean entirely (and also sometimes fails due to too many args)
|
||||
find ${B} -type f -name "*.out" -delete
|
||||
find ${B} -type f -name "*.test-result" -delete
|
||||
find ${B}/catgets -name "*.cat" -delete
|
||||
find ${B}/conform -name "symlist-*" -delete
|
||||
[ ! -e ${B}/timezone/testdata ] || rm -rf ${B}/timezone/testdata
|
||||
|
||||
oe_runmake -i \
|
||||
QEMU_SYSROOT="${RECIPE_SYSROOT}" \
|
||||
QEMU_OPTIONS="${@qemu_target_binary(d)} ${QEMU_OPTIONS}" \
|
||||
SSH_HOST="${TOOLCHAIN_TEST_HOST}" \
|
||||
SSH_HOST_USER="${TOOLCHAIN_TEST_HOST_USER}" \
|
||||
SSH_HOST_PORT="${TOOLCHAIN_TEST_HOST_PORT}" \
|
||||
test-wrapper="${WORKDIR}/check-test-wrapper ${TOOLCHAIN_TEST_TARGET}" \
|
||||
check
|
||||
}
|
||||
addtask do_check after do_compile
|
||||
|
||||
inherit nopackages
|
||||
deltask do_stash_locale
|
||||
deltask do_install
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
SRCBRANCH ?= "release/2.33/master"
|
||||
PV = "2.33"
|
||||
SRCREV_glibc ?= "9826b03b747b841f5fc6de2054bf1ef3f5c4bdf3"
|
||||
SRCREV_localedef ?= "bd644c9e6f3e20c5504da1488448173c69c56c28"
|
||||
|
||||
GLIBC_GIT_URI ?= "git://sourceware.org/git/glibc.git"
|
||||
|
||||
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+(\.(?!90)\d+)*)"
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
require glibc-common.inc
|
||||
require glibc-ld.inc
|
||||
|
||||
DEPENDS = "virtual/${TARGET_PREFIX}gcc libgcc-initial linux-libc-headers"
|
||||
|
||||
PROVIDES = "virtual/libc"
|
||||
PROVIDES += "virtual/libintl virtual/libiconv"
|
||||
inherit autotools texinfo systemd
|
||||
|
||||
LEAD_SONAME = "libc.so"
|
||||
|
||||
# msgfmt could come from gettext-native but we don't depend on that and
|
||||
# disable for reproducibility
|
||||
CACHED_CONFIGUREVARS += " \
|
||||
ac_cv_path_BASH_SHELL=${base_bindir}/bash \
|
||||
ac_cv_prog_MSGFMT= \
|
||||
libc_cv_slibdir=${base_libdir} \
|
||||
libc_cv_rootsbindir=${base_sbindir} \
|
||||
libc_cv_localedir=${localedir} \
|
||||
libc_cv_ssp_strong=no \
|
||||
libc_cv_ssp_all=no \
|
||||
libc_cv_ssp=no \
|
||||
libc_cv_include_x86_isa_level=no \
|
||||
"
|
||||
|
||||
# ifunc doesn't appear to work on mips, casuses libbfd assertion failures
|
||||
CACHED_CONFIGUREVARS_append_mipsarch = " libc_cv_ld_gnu_indirect_function=no"
|
||||
|
||||
GLIBC_EXTRA_OECONF ?= ""
|
||||
GLIBC_EXTRA_OECONF_class-nativesdk = ""
|
||||
|
||||
# glibc uses PARALLELMFLAGS variable to pass parallel build info so transfer
|
||||
# PARALLEL_MAKE into PARALLELMFLAGS and empty out PARALLEL_MAKE
|
||||
EGLIBCPARALLELISM := "PARALLELMFLAGS="${PARALLEL_MAKE}""
|
||||
EXTRA_OEMAKE[vardepsexclude] += "EGLIBCPARALLELISM"
|
||||
EXTRA_OEMAKE += "${EGLIBCPARALLELISM}"
|
||||
PARALLEL_MAKE = ""
|
||||
|
||||
# glibc make-syscalls.sh has a number of issues with /bin/dash and
|
||||
# it's output which make calls via the SHELL also has issues, so
|
||||
# ensure make uses /bin/bash
|
||||
EXTRA_OEMAKE += "SHELL=/bin/bash"
|
||||
|
||||
do_configure_prepend() {
|
||||
sed -e "s#@BASH@#/bin/sh#" -i ${S}/elf/ldd.bash.in
|
||||
}
|
||||
|
||||
# Enable backtrace from abort()
|
||||
do_configure_append_arm () {
|
||||
echo "CFLAGS-abort.c = -fasynchronous-unwind-tables" >> ${B}/configparms
|
||||
echo "CFLAGS-raise.c = -fasynchronous-unwind-tables" >> ${B}/configparms
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,49 +0,0 @@
|
|||
From c4ad832276f4dadfa40904109b26a521468f66bc Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu, 4 Feb 2021 15:00:20 +0100
|
||||
Subject: [PATCH] nptl: Remove private futex optimization [BZ #27304]
|
||||
|
||||
It is effectively used, unexcept for pthread_cond_destroy, where we do
|
||||
not want it; see bug 27304. The internal locks do not support a
|
||||
process-shared mode.
|
||||
|
||||
This fixes commit dc6cfdc934db9997c33728082d63552b9eee4563 ("nptl:
|
||||
Move pthread_cond_destroy implementation into libc").
|
||||
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
Upstream-Status: Backport [https://sourceware.org/bugzilla/show_bug.cgi?id=27304]
|
||||
Signed-off-by: Yanfei Xu <yanfei.xu@windriver.com>
|
||||
---
|
||||
sysdeps/nptl/lowlevellock-futex.h | 14 +-------------
|
||||
1 file changed, 1 insertion(+), 13 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/nptl/lowlevellock-futex.h b/sysdeps/nptl/lowlevellock-futex.h
|
||||
index ecb729da6b..ca96397a4a 100644
|
||||
--- a/sysdeps/nptl/lowlevellock-futex.h
|
||||
+++ b/sysdeps/nptl/lowlevellock-futex.h
|
||||
@@ -50,20 +50,8 @@
|
||||
#define LLL_SHARED FUTEX_PRIVATE_FLAG
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
-
|
||||
-# if IS_IN (libc) || IS_IN (rtld)
|
||||
-/* In libc.so or ld.so all futexes are private. */
|
||||
-# define __lll_private_flag(fl, private) \
|
||||
- ({ \
|
||||
- /* Prevent warnings in callers of this macro. */ \
|
||||
- int __lll_private_flag_priv __attribute__ ((unused)); \
|
||||
- __lll_private_flag_priv = (private); \
|
||||
- ((fl) | FUTEX_PRIVATE_FLAG); \
|
||||
- })
|
||||
-# else
|
||||
-# define __lll_private_flag(fl, private) \
|
||||
+# define __lll_private_flag(fl, private) \
|
||||
(((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
|
||||
-# endif
|
||||
|
||||
# define lll_futex_syscall(nargs, futexp, op, ...) \
|
||||
({ \
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -1,238 +0,0 @@
|
|||
From 14d256e2db009f8bac9a265e8393d7ed25050df9 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Wessel <jason.wessel@windriver.com>
|
||||
Date: Sat, 7 Dec 2019 10:01:37 -0800
|
||||
Subject: [PATCH] localedef: fix-ups hardlink to make it compile
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/programs/c.h | 2 +-
|
||||
locale/programs/cross-localedef-hardlink.c | 79 +++++++++++-----------
|
||||
2 files changed, 39 insertions(+), 42 deletions(-)
|
||||
|
||||
diff --git a/locale/programs/c.h b/locale/programs/c.h
|
||||
index d0a402e90e..1804d31c73 100644
|
||||
--- a/locale/programs/c.h
|
||||
+++ b/locale/programs/c.h
|
||||
@@ -240,7 +240,7 @@ errmsg(char doexit, int excode, char adderr, const char *fmt, ...)
|
||||
/* Don't use inline function to avoid '#include "nls.h"' in c.h
|
||||
*/
|
||||
#define errtryhelp(eval) __extension__ ({ \
|
||||
- fprintf(stderr, _("Try '%s --help' for more information.\n"), \
|
||||
+ fprintf(stderr, ("Try '%s --help' for more information.\n"), \
|
||||
program_invocation_short_name); \
|
||||
exit(eval); \
|
||||
})
|
||||
diff --git a/locale/programs/cross-localedef-hardlink.c b/locale/programs/cross-localedef-hardlink.c
|
||||
index 63615896b0..726e6dd948 100644
|
||||
--- a/locale/programs/cross-localedef-hardlink.c
|
||||
+++ b/locale/programs/cross-localedef-hardlink.c
|
||||
@@ -20,6 +20,8 @@
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
+
|
||||
+#undef HAVE_PCRE
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <getopt.h>
|
||||
@@ -38,8 +40,8 @@
|
||||
|
||||
#include "c.h"
|
||||
#include "xalloc.h"
|
||||
-#include "nls.h"
|
||||
-#include "closestream.h"
|
||||
+//#include "nls.h"
|
||||
+//#include "closestream.h"
|
||||
|
||||
#define NHASH (1<<17) /* Must be a power of 2! */
|
||||
#define NBUF 64
|
||||
@@ -124,33 +126,33 @@ static void print_summary(void)
|
||||
if (ctl->verbose > 1 && ctl->nlinks)
|
||||
fputc('\n', stdout);
|
||||
|
||||
- printf(_("Directories: %9lld\n"), ctl->ndirs);
|
||||
- printf(_("Objects: %9lld\n"), ctl->nobjects);
|
||||
- printf(_("Regular files: %9lld\n"), ctl->nregfiles);
|
||||
- printf(_("Comparisons: %9lld\n"), ctl->ncomp);
|
||||
+ printf(("Directories: %9lld\n"), ctl->ndirs);
|
||||
+ printf(("Objects: %9lld\n"), ctl->nobjects);
|
||||
+ printf(("Regular files: %9lld\n"), ctl->nregfiles);
|
||||
+ printf(("Comparisons: %9lld\n"), ctl->ncomp);
|
||||
printf( "%s%9lld\n", (ctl->no_link ?
|
||||
- _("Would link: ") :
|
||||
- _("Linked: ")), ctl->nlinks);
|
||||
+ ("Would link: ") :
|
||||
+ ("Linked: ")), ctl->nlinks);
|
||||
printf( "%s %9lld\n", (ctl->no_link ?
|
||||
- _("Would save: ") :
|
||||
- _("Saved: ")), ctl->nsaved);
|
||||
+ ("Would save: ") :
|
||||
+ ("Saved: ")), ctl->nsaved);
|
||||
}
|
||||
|
||||
static void __attribute__((__noreturn__)) usage(void)
|
||||
{
|
||||
fputs(USAGE_HEADER, stdout);
|
||||
- printf(_(" %s [options] directory...\n"), program_invocation_short_name);
|
||||
+ printf((" %s [options] directory...\n"), program_invocation_short_name);
|
||||
|
||||
fputs(USAGE_SEPARATOR, stdout);
|
||||
- puts(_("Consolidate duplicate files using hardlinks."));
|
||||
+ puts(("Consolidate duplicate files using hardlinks."));
|
||||
|
||||
fputs(USAGE_OPTIONS, stdout);
|
||||
- puts(_(" -c, --content compare only contents, ignore permission, etc."));
|
||||
- puts(_(" -n, --dry-run don't actually link anything"));
|
||||
- puts(_(" -v, --verbose print summary after hardlinking"));
|
||||
- puts(_(" -vv print every hardlinked file and summary"));
|
||||
- puts(_(" -f, --force force hardlinking across filesystems"));
|
||||
- puts(_(" -x, --exclude <regex> exclude files matching pattern"));
|
||||
+ puts((" -c, --content compare only contents, ignore permission, etc."));
|
||||
+ puts((" -n, --dry-run don't actually link anything"));
|
||||
+ puts((" -v, --verbose print summary after hardlinking"));
|
||||
+ puts((" -vv print every hardlinked file and summary"));
|
||||
+ puts((" -f, --force force hardlinking across filesystems"));
|
||||
+ puts((" -x, --exclude <regex> exclude files matching pattern"));
|
||||
|
||||
fputs(USAGE_SEPARATOR, stdout);
|
||||
printf(USAGE_HELP_OPTIONS(16)); /* char offset to align option descriptions */
|
||||
@@ -164,7 +166,7 @@ static inline size_t add2(size_t a, size_t b)
|
||||
size_t sum = a + b;
|
||||
|
||||
if (sum < a)
|
||||
- errx(EXIT_FAILURE, _("integer overflow"));
|
||||
+ errx(EXIT_FAILURE, ("integer overflow"));
|
||||
return sum;
|
||||
}
|
||||
|
||||
@@ -193,7 +195,7 @@ static void process_path(struct hardlink_ctl *ctl, const char *name)
|
||||
if (st.st_dev != ctl->dev && !ctl->force) {
|
||||
if (ctl->dev)
|
||||
errx(EXIT_FAILURE,
|
||||
- _("%s is on different filesystem than the rest "
|
||||
+ ("%s is on different filesystem than the rest "
|
||||
"(use -f option to override)."), name);
|
||||
ctl->dev = st.st_dev;
|
||||
}
|
||||
@@ -287,9 +289,9 @@ static void process_path(struct hardlink_ctl *ctl, const char *name)
|
||||
(ssize_t) sizeof(ctl->iobuf1) : fsize;
|
||||
|
||||
if ((xsz = read(fd, ctl->iobuf1, rsize)) != rsize)
|
||||
- warn(_("cannot read %s"), name);
|
||||
+ warn(("cannot read %s"), name);
|
||||
else if ((xsz = read(fd2, ctl->iobuf2, rsize)) != rsize)
|
||||
- warn(_("cannot read %s"), fp2->name);
|
||||
+ warn(("cannot read %s"), fp2->name);
|
||||
|
||||
if (xsz != rsize) {
|
||||
close(fd);
|
||||
@@ -303,13 +305,13 @@ static void process_path(struct hardlink_ctl *ctl, const char *name)
|
||||
if (fsize > 0)
|
||||
continue;
|
||||
if (lstat(name, &st3)) {
|
||||
- warn(_("cannot stat %s"), name);
|
||||
+ warn(("cannot stat %s"), name);
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
st3.st_atime = st.st_atime;
|
||||
if (stcmp(&st, &st3, 0)) {
|
||||
- warnx(_("file %s changed underneath us"), name);
|
||||
+ warnx(("file %s changed underneath us"), name);
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
@@ -329,18 +331,18 @@ static void process_path(struct hardlink_ctl *ctl, const char *name)
|
||||
suffixlen + 1);
|
||||
/* First create a temporary link to n1 under a new name */
|
||||
if (link(n1, nam2.buf)) {
|
||||
- warn(_("failed to hardlink %s to %s (create temporary link as %s failed)"),
|
||||
+ warn(("failed to hardlink %s to %s (create temporary link as %s failed)"),
|
||||
n1, n2, nam2.buf);
|
||||
free(nam2.buf);
|
||||
continue;
|
||||
}
|
||||
/* Then rename into place over the existing n2 */
|
||||
if (rename(nam2.buf, n2)) {
|
||||
- warn(_("failed to hardlink %s to %s (rename temporary link to %s failed)"),
|
||||
+ warn(("failed to hardlink %s to %s (rename temporary link to %s failed)"),
|
||||
n1, n2, n2);
|
||||
/* Something went wrong, try to remove the now redundant temporary link */
|
||||
if (unlink(nam2.buf))
|
||||
- warn(_("failed to remove temporary link %s"), nam2.buf);
|
||||
+ warn(("failed to remove temporary link %s"), nam2.buf);
|
||||
free(nam2.buf);
|
||||
continue;
|
||||
}
|
||||
@@ -351,16 +353,16 @@ static void process_path(struct hardlink_ctl *ctl, const char *name)
|
||||
/* We actually did not save anything this time, since the link second argument
|
||||
had some other links as well. */
|
||||
if (ctl->verbose > 1)
|
||||
- printf(_(" %s %s to %s\n"),
|
||||
- (ctl->no_link ? _("Would link") : _("Linked")),
|
||||
+ printf((" %s %s to %s\n"),
|
||||
+ (ctl->no_link ? ("Would link") : ("Linked")),
|
||||
n1, n2);
|
||||
} else {
|
||||
ctl->nsaved += ((st.st_size + 4095) / 4096) * 4096;
|
||||
if (ctl->verbose > 1)
|
||||
- printf(_(" %s %s to %s, %s %jd\n"),
|
||||
- (ctl->no_link ? _("Would link") : _("Linked")),
|
||||
+ printf((" %s %s to %s, %s %jd\n"),
|
||||
+ (ctl->no_link ? ("Would link") : ("Linked")),
|
||||
n1, n2,
|
||||
- (ctl->no_link ? _("would save") : _("saved")),
|
||||
+ (ctl->no_link ? ("would save") : ("saved")),
|
||||
(intmax_t)st.st_size);
|
||||
}
|
||||
close(fd);
|
||||
@@ -410,11 +412,6 @@ int main(int argc, char **argv)
|
||||
{ NULL, 0, NULL, 0 },
|
||||
};
|
||||
|
||||
- setlocale(LC_ALL, "");
|
||||
- bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
- textdomain(PACKAGE);
|
||||
- close_stdout_atexit();
|
||||
-
|
||||
while ((ch = getopt_long(argc, argv, "cnvfx:Vh", longopts, NULL)) != -1) {
|
||||
switch (ch) {
|
||||
case 'n':
|
||||
@@ -434,7 +431,7 @@ int main(int argc, char **argv)
|
||||
exclude_pattern = (PCRE2_SPTR) optarg;
|
||||
#else
|
||||
errx(EXIT_FAILURE,
|
||||
- _("option --exclude not supported (built without pcre2)"));
|
||||
+ ("option --exclude not supported (built without pcre2)"));
|
||||
#endif
|
||||
break;
|
||||
case 'V':
|
||||
@@ -447,7 +444,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (optind == argc) {
|
||||
- warnx(_("no directory specified"));
|
||||
+ warnx(("no directory specified"));
|
||||
errtryhelp(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
@@ -461,7 +458,7 @@ int main(int argc, char **argv)
|
||||
PCRE2_UCHAR buffer[256];
|
||||
pcre2_get_error_message(errornumber, buffer,
|
||||
sizeof(buffer));
|
||||
- errx(EXIT_FAILURE, _("pattern error at offset %d: %s"),
|
||||
+ errx(EXIT_FAILURE, ("pattern error at offset %d: %s"),
|
||||
(int)erroroffset, buffer);
|
||||
}
|
||||
match_data = pcre2_match_data_create_from_pattern(re, NULL);
|
||||
@@ -506,7 +503,7 @@ int main(int argc, char **argv)
|
||||
>=0) {
|
||||
if (ctl->verbose) {
|
||||
nam1.buf[nam1baselen] = 0;
|
||||
- printf(_("Skipping %s%s\n"), nam1.buf, di->d_name);
|
||||
+ printf(("Skipping %s%s\n"), nam1.buf, di->d_name);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
From 32a4b8ae046fe4bb1b19f61378d079d44deaede7 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 01:48:24 +0000
|
||||
Subject: [PATCH] nativesdk-glibc: Look for host system ld.so.cache as well
|
||||
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
The default lib search path order is:
|
||||
|
||||
1) LD_LIBRARY_PATH
|
||||
2) RPATH from the binary
|
||||
3) ld.so.cache
|
||||
4) default search paths embedded in the linker
|
||||
|
||||
For nativesdk binaries which are being used alongside binaries on a host system, we
|
||||
need the search paths to firstly search the shipped nativesdk libs but then also
|
||||
cover the host system. For example we want the host system's libGL and this may be
|
||||
in a non-standard location like /usr/lib/mesa. The only place the location is know
|
||||
about is in the ld.so.cache of the host system.
|
||||
|
||||
Since nativesdk has a simple structure and doesn't need to use a cache itself, we
|
||||
repurpose the cache for use as a last resort in finding host system binaries. This
|
||||
means we need to switch the order of 3 and 4 above to make this work effectively.
|
||||
|
||||
RP 14/10/2010
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
elf/dl-load.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/elf/dl-load.c b/elf/dl-load.c
|
||||
index 9e2089cfaa..ad01674027 100644
|
||||
--- a/elf/dl-load.c
|
||||
+++ b/elf/dl-load.c
|
||||
@@ -2175,6 +2175,14 @@ _dl_map_object (struct link_map *loader, const char *name,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* try the default path. */
|
||||
+ if (fd == -1
|
||||
+ && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
|
||||
+ || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
|
||||
+ && __rtld_search_dirs.dirs != (void *) -1)
|
||||
+ fd = open_path (name, namelen, mode & __RTLD_SECURE, &__rtld_search_dirs,
|
||||
+ &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
|
||||
+ /* Finally try ld.so.cache */
|
||||
#ifdef USE_LDCONFIG
|
||||
if (fd == -1
|
||||
&& (__glibc_likely ((mode & __RTLD_SECURE) == 0)
|
||||
@@ -2233,14 +2241,6 @@ _dl_map_object (struct link_map *loader, const char *name,
|
||||
}
|
||||
#endif
|
||||
|
||||
- /* Finally, try the default path. */
|
||||
- if (fd == -1
|
||||
- && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
|
||||
- || __glibc_likely (!(l->l_flags_1 & DF_1_NODEFLIB)))
|
||||
- && __rtld_search_dirs.dirs != (void *) -1)
|
||||
- fd = open_path (name, namelen, mode, &__rtld_search_dirs,
|
||||
- &realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
|
||||
-
|
||||
/* Add another newline when we are tracing the library loading. */
|
||||
if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
|
||||
_dl_debug_printf ("\n");
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
From aa8393bff257e4badfd208b88473ead175c69362 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 01:50:00 +0000
|
||||
Subject: [PATCH] nativesdk-glibc: Fix buffer overrun with a relocated SDK
|
||||
|
||||
When ld-linux-*.so.2 is relocated to a path that is longer than the
|
||||
original fixed location, the dynamic loader will crash in open_path
|
||||
because it implicitly assumes that max_dirnamelen is a fixed size that
|
||||
never changes.
|
||||
|
||||
The allocated buffer will not be large enough to contain the directory
|
||||
path string which is larger than the fixed location provided at build
|
||||
time.
|
||||
|
||||
Upstream-Status: Inappropriate [OE SDK specific]
|
||||
|
||||
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
elf/dl-load.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/elf/dl-load.c b/elf/dl-load.c
|
||||
index ad01674027..f455207e79 100644
|
||||
--- a/elf/dl-load.c
|
||||
+++ b/elf/dl-load.c
|
||||
@@ -1871,7 +1871,19 @@ open_path (const char *name, size_t namelen, int mode,
|
||||
given on the command line when rtld is run directly. */
|
||||
return -1;
|
||||
|
||||
+ do
|
||||
+ {
|
||||
+ struct r_search_path_elem *this_dir = *dirs;
|
||||
+ if (this_dir->dirnamelen > max_dirnamelen)
|
||||
+ {
|
||||
+ max_dirnamelen = this_dir->dirnamelen;
|
||||
+ }
|
||||
+ }
|
||||
+ while (*++dirs != NULL);
|
||||
+
|
||||
buf = alloca (max_dirnamelen + max_capstrlen + namelen);
|
||||
+
|
||||
+ dirs = sps->dirs;
|
||||
do
|
||||
{
|
||||
struct r_search_path_elem *this_dir = *dirs;
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
From 3ea08e491a8494ff03e598b5e0fc2d8131e75da9 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 01:51:38 +0000
|
||||
Subject: [PATCH] nativesdk-glibc: Raise the size of arrays containing dl paths
|
||||
|
||||
This patch puts the dynamic loader path in the binaries, SYSTEM_DIRS strings
|
||||
and lengths as well as ld.so.cache path in the dynamic loader to specific
|
||||
sections in memory. The sections that contain paths have been allocated a 4096
|
||||
byte section, which is the maximum path length in linux. This will allow the
|
||||
relocating script to parse the ELF binary, detect the section and easily replace
|
||||
the strings in a certain path.
|
||||
|
||||
Upstream-Status: Inappropriate [SDK specific]
|
||||
|
||||
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
elf/dl-cache.c | 4 ++++
|
||||
elf/dl-load.c | 4 ++--
|
||||
elf/dl-usage.c | 6 ++++--
|
||||
elf/interp.c | 2 +-
|
||||
elf/ldconfig.c | 3 +++
|
||||
elf/rtld.c | 1 +
|
||||
iconv/gconv_conf.c | 2 +-
|
||||
sysdeps/generic/dl-cache.h | 4 ----
|
||||
8 files changed, 16 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/elf/dl-cache.c b/elf/dl-cache.c
|
||||
index 32f3bef5ea..71f3a82dc0 100644
|
||||
--- a/elf/dl-cache.c
|
||||
+++ b/elf/dl-cache.c
|
||||
@@ -359,6 +359,10 @@ search_cache (const char *string_table, uint32_t string_table_size,
|
||||
return best;
|
||||
}
|
||||
|
||||
+const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache"))) =
|
||||
+ SYSCONFDIR "/ld.so.cache";
|
||||
+
|
||||
+
|
||||
int
|
||||
_dl_cache_libcmp (const char *p1, const char *p2)
|
||||
{
|
||||
diff --git a/elf/dl-load.c b/elf/dl-load.c
|
||||
index f455207e79..a144e24fcf 100644
|
||||
--- a/elf/dl-load.c
|
||||
+++ b/elf/dl-load.c
|
||||
@@ -115,8 +115,8 @@ enum { ncapstr = 1, max_capstrlen = 0 };
|
||||
gen-trusted-dirs.awk. */
|
||||
#include "trusted-dirs.h"
|
||||
|
||||
-static const char system_dirs[] = SYSTEM_DIRS;
|
||||
-static const size_t system_dirs_len[] =
|
||||
+static const char system_dirs[4096] __attribute__ ((section (".sysdirs"))) = SYSTEM_DIRS;
|
||||
+volatile static const size_t system_dirs_len[] __attribute__ ((section (".sysdirslen"))) =
|
||||
{
|
||||
SYSTEM_DIRS_LEN
|
||||
};
|
||||
diff --git a/elf/dl-usage.c b/elf/dl-usage.c
|
||||
index 6e26818bd7..f09e8b93e5 100644
|
||||
--- a/elf/dl-usage.c
|
||||
+++ b/elf/dl-usage.c
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <dl-procinfo.h>
|
||||
#include <dl-hwcaps.h>
|
||||
|
||||
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
|
||||
+
|
||||
void
|
||||
_dl_usage (const char *argv0, const char *wrong_option)
|
||||
{
|
||||
@@ -244,7 +246,7 @@ setting environment variables (which would be inherited by subprocesses).\n\
|
||||
--list list all dependencies and how they are resolved\n\
|
||||
--verify verify that given object really is a dynamically linked\n\
|
||||
object we can handle\n\
|
||||
- --inhibit-cache Do not use " LD_SO_CACHE "\n\
|
||||
+ --inhibit-cache Do not use %s\n\
|
||||
--library-path PATH use given PATH instead of content of the environment\n\
|
||||
variable LD_LIBRARY_PATH\n\
|
||||
--glibc-hwcaps-prepend LIST\n\
|
||||
@@ -266,7 +268,7 @@ setting environment variables (which would be inherited by subprocesses).\n\
|
||||
\n\
|
||||
This program interpreter self-identifies as: " RTLD "\n\
|
||||
",
|
||||
- argv0);
|
||||
+ argv0, LD_SO_CACHE);
|
||||
print_search_path_for_help (state);
|
||||
print_hwcaps_subdirectories (state);
|
||||
print_legacy_hwcap_directories ();
|
||||
diff --git a/elf/interp.c b/elf/interp.c
|
||||
index 91966702ca..dc86c20e83 100644
|
||||
--- a/elf/interp.c
|
||||
+++ b/elf/interp.c
|
||||
@@ -18,5 +18,5 @@
|
||||
|
||||
#include <runtime-linker.h>
|
||||
|
||||
-const char __invoke_dynamic_linker__[] __attribute__ ((section (".interp")))
|
||||
+const char __invoke_dynamic_linker__[4096] __attribute__ ((section (".interp")))
|
||||
= RUNTIME_LINKER;
|
||||
diff --git a/elf/ldconfig.c b/elf/ldconfig.c
|
||||
index 28ed637a29..5d38a60c5d 100644
|
||||
--- a/elf/ldconfig.c
|
||||
+++ b/elf/ldconfig.c
|
||||
@@ -176,6 +176,9 @@ static struct argp argp =
|
||||
options, parse_opt, NULL, doc, NULL, more_help, NULL
|
||||
};
|
||||
|
||||
+
|
||||
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
|
||||
+
|
||||
/* Check if string corresponds to an important hardware capability or
|
||||
a platform. */
|
||||
static int
|
||||
diff --git a/elf/rtld.c b/elf/rtld.c
|
||||
index 596b6ac3d9..1ccd33f668 100644
|
||||
--- a/elf/rtld.c
|
||||
+++ b/elf/rtld.c
|
||||
@@ -185,6 +185,7 @@ dso_name_valid_for_suid (const char *p)
|
||||
}
|
||||
return *p != '\0';
|
||||
}
|
||||
+extern const char LD_SO_CACHE[4096] __attribute__ ((section (".ldsocache")));
|
||||
|
||||
static void
|
||||
audit_list_init (struct audit_list *list)
|
||||
diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
|
||||
index 682f949834..7eed87bc9d 100644
|
||||
--- a/iconv/gconv_conf.c
|
||||
+++ b/iconv/gconv_conf.c
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
|
||||
/* This is the default path where we look for module lists. */
|
||||
-static const char default_gconv_path[] = GCONV_PATH;
|
||||
+static char default_gconv_path[4096] __attribute__ ((section (".gccrelocprefix"))) = GCONV_PATH;
|
||||
|
||||
/* Type to represent search path. */
|
||||
struct path_elem
|
||||
diff --git a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h
|
||||
index 964d50a486..94bf68ca9d 100644
|
||||
--- a/sysdeps/generic/dl-cache.h
|
||||
+++ b/sysdeps/generic/dl-cache.h
|
||||
@@ -34,10 +34,6 @@
|
||||
((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID)
|
||||
#endif
|
||||
|
||||
-#ifndef LD_SO_CACHE
|
||||
-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
|
||||
-#endif
|
||||
-
|
||||
#ifndef add_system_dir
|
||||
# define add_system_dir(dir) add_dir (dir)
|
||||
#endif
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
From 19e3e45eb1838ee80af13c3d27fcff446773211e Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Thu, 31 Dec 2015 14:35:35 -0800
|
||||
Subject: [PATCH] nativesdk-glibc: Allow 64 bit atomics for x86
|
||||
|
||||
The fix consist of allowing 64bit atomic ops for x86.
|
||||
This should be safe for i586 and newer CPUs.
|
||||
It also makes the synchronization more efficient.
|
||||
|
||||
Upstream-Status: Inappropriate [OE-Specific]
|
||||
|
||||
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
|
||||
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/x86/atomic-machine.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/x86/atomic-machine.h b/sysdeps/x86/atomic-machine.h
|
||||
index 695222e4fa..9d39bfdbd5 100644
|
||||
--- a/sysdeps/x86/atomic-machine.h
|
||||
+++ b/sysdeps/x86/atomic-machine.h
|
||||
@@ -52,15 +52,14 @@ typedef uintmax_t uatomic_max_t;
|
||||
#define LOCK_PREFIX "lock;"
|
||||
|
||||
#define USE_ATOMIC_COMPILER_BUILTINS 1
|
||||
+# define __HAVE_64B_ATOMICS 1
|
||||
|
||||
#ifdef __x86_64__
|
||||
-# define __HAVE_64B_ATOMICS 1
|
||||
# define SP_REG "rsp"
|
||||
# define SEG_REG "fs"
|
||||
# define BR_CONSTRAINT "q"
|
||||
# define IBR_CONSTRAINT "iq"
|
||||
#else
|
||||
-# define __HAVE_64B_ATOMICS 0
|
||||
# define SP_REG "esp"
|
||||
# define SEG_REG "gs"
|
||||
# define BR_CONSTRAINT "r"
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
From 732d4f4954fe60718870048d0583a20a7a8a8540 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 3 Aug 2018 09:55:12 -0700
|
||||
Subject: [PATCH] nativesdk-glibc: Make relocatable install for locales
|
||||
|
||||
The glibc locale path is hard-coded to the install prefix, but in SDKs we need
|
||||
to be able to relocate the binaries. Expand the strings to 4K and put them in a
|
||||
magic segment that we can relocate at install time.
|
||||
|
||||
Upstream-Status: Inappropriate (OE-specific)
|
||||
|
||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/findlocale.c | 4 ++--
|
||||
locale/loadarchive.c | 2 +-
|
||||
locale/localeinfo.h | 2 +-
|
||||
locale/programs/locale.c | 7 ++++---
|
||||
4 files changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/locale/findlocale.c b/locale/findlocale.c
|
||||
index ab09122b0c..f42cc75780 100644
|
||||
--- a/locale/findlocale.c
|
||||
+++ b/locale/findlocale.c
|
||||
@@ -56,7 +56,7 @@ struct __locale_data *const _nl_C[] attribute_hidden =
|
||||
which are somehow addressed. */
|
||||
struct loaded_l10nfile *_nl_locale_file_list[__LC_LAST];
|
||||
|
||||
-const char _nl_default_locale_path[] attribute_hidden = COMPLOCALEDIR;
|
||||
+char _nl_default_locale_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR;
|
||||
|
||||
/* Checks if the name is actually present, that is, not NULL and not
|
||||
empty. */
|
||||
@@ -166,7 +166,7 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
|
||||
|
||||
/* Nothing in the archive. Set the default path to search below. */
|
||||
locale_path = _nl_default_locale_path;
|
||||
- locale_path_len = sizeof _nl_default_locale_path;
|
||||
+ locale_path_len = strlen(locale_path) + 1;
|
||||
}
|
||||
else
|
||||
/* We really have to load some data. First see whether the name is
|
||||
diff --git a/locale/loadarchive.c b/locale/loadarchive.c
|
||||
index 4177fc8972..40247b1e68 100644
|
||||
--- a/locale/loadarchive.c
|
||||
+++ b/locale/loadarchive.c
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
/* Name of the locale archive file. */
|
||||
-static const char archfname[] = COMPLOCALEDIR "/locale-archive";
|
||||
+static const char archfname[4096] __attribute__ ((section (".gccrelocprefix"))) = COMPLOCALEDIR "/locale-archive";
|
||||
|
||||
/* Size of initial mapping window, optimal if large enough to
|
||||
cover the header plus the initial locale. */
|
||||
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
|
||||
index b3d4da0185..22f9dc1140 100644
|
||||
--- a/locale/localeinfo.h
|
||||
+++ b/locale/localeinfo.h
|
||||
@@ -331,7 +331,7 @@ _nl_lookup_word (locale_t l, int category, int item)
|
||||
}
|
||||
|
||||
/* Default search path if no LOCPATH environment variable. */
|
||||
-extern const char _nl_default_locale_path[] attribute_hidden;
|
||||
+extern char _nl_default_locale_path[4096] attribute_hidden;
|
||||
|
||||
/* Load the locale data for CATEGORY from the file specified by *NAME.
|
||||
If *NAME is "", use environment variables as specified by POSIX, and
|
||||
diff --git a/locale/programs/locale.c b/locale/programs/locale.c
|
||||
index 575b208e82..5ec630c3a4 100644
|
||||
--- a/locale/programs/locale.c
|
||||
+++ b/locale/programs/locale.c
|
||||
@@ -632,6 +632,7 @@ nameentcmp (const void *a, const void *b)
|
||||
((const struct nameent *) b)->name);
|
||||
}
|
||||
|
||||
+static char _write_archive_locales_path[4096] attribute_hidden __attribute__ ((section (".gccrelocprefix"))) = ARCHIVE_NAME;
|
||||
|
||||
static int
|
||||
write_archive_locales (void **all_datap, char *linebuf)
|
||||
@@ -645,7 +646,7 @@ write_archive_locales (void **all_datap, char *linebuf)
|
||||
int fd, ret = 0;
|
||||
uint32_t cnt;
|
||||
|
||||
- fd = open64 (ARCHIVE_NAME, O_RDONLY);
|
||||
+ fd = open64 (_write_archive_locales_path, O_RDONLY);
|
||||
if (fd < 0)
|
||||
return 0;
|
||||
|
||||
@@ -700,8 +701,8 @@ write_archive_locales (void **all_datap, char *linebuf)
|
||||
if (cnt)
|
||||
putchar_unlocked ('\n');
|
||||
|
||||
- printf ("locale: %-15.15s archive: " ARCHIVE_NAME "\n%s\n",
|
||||
- names[cnt].name, linebuf);
|
||||
+ printf ("locale: %-15.15s archive: %s\n%s\n",
|
||||
+ names[cnt].name, _write_archive_locales_path, linebuf);
|
||||
|
||||
locrec = (struct locrecent *) (addr + names[cnt].locrec_offset);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,205 +0,0 @@
|
|||
From 3b5fe5b1a7390cde0f07351415e3891f62d1f7e0 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:15:07 +0000
|
||||
Subject: [PATCH] ppc/sqrt: Fix undefined reference to `__sqrt_finite'
|
||||
|
||||
on ppc fixes the errors like below
|
||||
| ./.libs/libpulsecore-1.1.so: undefined reference to `__sqrt_finite'
|
||||
| collect2: ld returned 1 exit status
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
ChangeLog
|
||||
|
||||
2012-01-06 Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
* sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c: Add __*_finite alias.
|
||||
Remove cruft.
|
||||
* sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c: Ditto.
|
||||
* sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c: Ditto.
|
||||
* sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c: Ditto.
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c | 7 +------
|
||||
sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c | 7 +------
|
||||
sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c | 1 +
|
||||
sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c | 1 +
|
||||
sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c | 1 +
|
||||
sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c | 1 +
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 1 +
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 1 +
|
||||
sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c | 7 +------
|
||||
sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c | 7 +------
|
||||
sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c | 1 +
|
||||
sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c | 1 +
|
||||
12 files changed, 12 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
index 71e516d1c8..1795fd6c3e 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
@@ -39,14 +39,8 @@ static const float half = 0.5;
|
||||
We find the actual square root and half of its reciprocal
|
||||
simultaneously. */
|
||||
|
||||
-#ifdef __STDC__
|
||||
double
|
||||
__ieee754_sqrt (double b)
|
||||
-#else
|
||||
-double
|
||||
-__ieee754_sqrt (b)
|
||||
- double b;
|
||||
-#endif
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -132,3 +126,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
index 26fa067abf..a917f313ab 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
@@ -37,14 +37,8 @@ static const float threehalf = 1.5;
|
||||
We find the reciprocal square root and use that to compute the actual
|
||||
square root. */
|
||||
|
||||
-#ifdef __STDC__
|
||||
float
|
||||
__ieee754_sqrtf (float b)
|
||||
-#else
|
||||
-float
|
||||
-__ieee754_sqrtf (b)
|
||||
- float b;
|
||||
-#endif
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -99,3 +93,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
index 71e516d1c8..fc4a74990e 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
index 26fa067abf..9d175122a8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
index 71e516d1c8..fc4a74990e 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
index 26fa067abf..9d175122a8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
index 71e516d1c8..fc4a74990e 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
index 26fa067abf..9d175122a8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
index 71e516d1c8..1795fd6c3e 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
@@ -39,14 +39,8 @@ static const float half = 0.5;
|
||||
We find the actual square root and half of its reciprocal
|
||||
simultaneously. */
|
||||
|
||||
-#ifdef __STDC__
|
||||
double
|
||||
__ieee754_sqrt (double b)
|
||||
-#else
|
||||
-double
|
||||
-__ieee754_sqrt (b)
|
||||
- double b;
|
||||
-#endif
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -132,3 +126,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
index 26fa067abf..a917f313ab 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
@@ -37,14 +37,8 @@ static const float threehalf = 1.5;
|
||||
We find the reciprocal square root and use that to compute the actual
|
||||
square root. */
|
||||
|
||||
-#ifdef __STDC__
|
||||
float
|
||||
__ieee754_sqrtf (float b)
|
||||
-#else
|
||||
-float
|
||||
-__ieee754_sqrtf (b)
|
||||
- float b;
|
||||
-#endif
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -99,3 +93,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
index 71e516d1c8..fc4a74990e 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
@@ -132,3 +132,4 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
index 26fa067abf..9d175122a8 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
@@ -99,3 +99,4 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
|
|
@ -1,384 +0,0 @@
|
|||
From 6b6e1dcd707017598ea3bdc2d91a761943b62218 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:16:38 +0000
|
||||
Subject: [PATCH] __ieee754_sqrt{,f} are now inline functions and call out
|
||||
__slow versions
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c | 12 ++++++++++--
|
||||
sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c | 8 +++++++-
|
||||
sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c | 14 +++++++++++---
|
||||
sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c | 12 ++++++++++--
|
||||
sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c | 14 +++++++++++---
|
||||
sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c | 12 ++++++++++--
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 8 ++++++++
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 8 ++++++++
|
||||
sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c | 12 ++++++++++--
|
||||
sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c | 9 ++++++++-
|
||||
sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c | 14 +++++++++++---
|
||||
sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c | 12 ++++++++++--
|
||||
12 files changed, 114 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
index 1795fd6c3e..daa83f3fe8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrt.c
|
||||
@@ -40,7 +40,7 @@ static const float half = 0.5;
|
||||
simultaneously. */
|
||||
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -77,7 +77,7 @@ __ieee754_sqrt (double b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
@@ -126,4 +126,12 @@ __ieee754_sqrt (double b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
index a917f313ab..b812cf1705 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/603e/fpu/e_sqrtf.c
|
||||
@@ -38,7 +38,7 @@ static const float threehalf = 1.5;
|
||||
square root. */
|
||||
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -93,4 +93,10 @@ __ieee754_sqrtf (float b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
index fc4a74990e..7038a70b47 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrt.c
|
||||
@@ -41,10 +41,10 @@ static const float half = 0.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
#else
|
||||
double
|
||||
-__ieee754_sqrt (b)
|
||||
+__slow_ieee754_sqrt (b)
|
||||
double b;
|
||||
#endif
|
||||
{
|
||||
@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
index 9d175122a8..10de1f0cc3 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e500mc/fpu/e_sqrtf.c
|
||||
@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
#else
|
||||
float
|
||||
-__ieee754_sqrtf (b)
|
||||
+__slow_ieee754_sqrtf (b)
|
||||
float b;
|
||||
#endif
|
||||
{
|
||||
@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
index fc4a74990e..7038a70b47 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrt.c
|
||||
@@ -41,10 +41,10 @@ static const float half = 0.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
#else
|
||||
double
|
||||
-__ieee754_sqrt (b)
|
||||
+__slow_ieee754_sqrt (b)
|
||||
double b;
|
||||
#endif
|
||||
{
|
||||
@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
index 9d175122a8..10de1f0cc3 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e5500/fpu/e_sqrtf.c
|
||||
@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
#else
|
||||
float
|
||||
-__ieee754_sqrtf (b)
|
||||
+__slow_ieee754_sqrtf (b)
|
||||
float b;
|
||||
#endif
|
||||
{
|
||||
@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
index fc4a74990e..1c34244bd8 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
index 9d175122a8..812653558f 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
index 1795fd6c3e..13a81973e3 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrt.c
|
||||
@@ -40,7 +40,7 @@ static const float half = 0.5;
|
||||
simultaneously. */
|
||||
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -77,7 +77,7 @@ __ieee754_sqrt (double b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
@@ -126,4 +126,12 @@ __ieee754_sqrt (double b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
index a917f313ab..fae2d81210 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e5500/fpu/e_sqrtf.c
|
||||
@@ -38,7 +38,7 @@ static const float threehalf = 1.5;
|
||||
square root. */
|
||||
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
{
|
||||
if (__builtin_expect (b > 0, 1))
|
||||
{
|
||||
@@ -93,4 +93,11 @@ __ieee754_sqrtf (float b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
index fc4a74990e..7038a70b47 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrt.c
|
||||
@@ -41,10 +41,10 @@ static const float half = 0.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
#else
|
||||
double
|
||||
-__ieee754_sqrt (b)
|
||||
+__slow_ieee754_sqrt (b)
|
||||
double b;
|
||||
#endif
|
||||
{
|
||||
@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
@@ -132,4 +132,12 @@ __ieee754_sqrt (b)
|
||||
}
|
||||
return f_wash (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrt
|
||||
+double
|
||||
+__ieee754_sqrt (double x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrt (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrt, __sqrt_finite)
|
||||
diff --git a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
index 9d175122a8..10de1f0cc3 100644
|
||||
--- a/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc64/e6500/fpu/e_sqrtf.c
|
||||
@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
#else
|
||||
float
|
||||
-__ieee754_sqrtf (b)
|
||||
+__slow_ieee754_sqrtf (b)
|
||||
float b;
|
||||
#endif
|
||||
{
|
||||
@@ -99,4 +99,12 @@ __ieee754_sqrtf (b)
|
||||
}
|
||||
return f_washf (b);
|
||||
}
|
||||
+
|
||||
+#undef __ieee754_sqrtf
|
||||
+float
|
||||
+__ieee754_sqrtf (float x)
|
||||
+{
|
||||
+ return __slow_ieee754_sqrtf (x);
|
||||
+}
|
||||
+
|
||||
strong_alias (__ieee754_sqrtf, __sqrtf_finite)
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
From 297bac9429260f8df495b81d3fae8ae4c6913f5f Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:20:09 +0000
|
||||
Subject: [PATCH] Quote from bug 1443 which explains what the patch does :
|
||||
|
||||
We build some random program and link it with -lust. When we run it,
|
||||
it dies with a SIGSEGV before reaching main().
|
||||
|
||||
Libust.so depends on liburcu-bp.so from the usermode-rcu package.
|
||||
Although libust.so is not prelinked, liburcu-bp.so IS prelinked; this
|
||||
is critical.
|
||||
|
||||
Libust.so uses a TLS / __thread variable that is defined in liburcu-
|
||||
bp.so. There are special ARM-specific relocation types that allow two
|
||||
shared libraries to share thread-specific data. This is critical too.
|
||||
|
||||
One more critical issue: although liburcu-bp.so is prelinked, we can't
|
||||
load it at its prelinked address, because we also link against
|
||||
librt.so, and librt.so uses that address.
|
||||
|
||||
The dynamic linker is forced to relink liburcu-bp.so at a different
|
||||
address. In the course of relinking, it processes the special ARM
|
||||
relocation record mentioned above. The prelinker has already filled
|
||||
in the information, which is a short offset into a table of thread-
|
||||
specific data that is allocated per-thread for each library that uses
|
||||
TLS. Because the normal behavior of a relocation is to add the symbol
|
||||
value to an addend stored at the address being relocated, we end up
|
||||
adding the short offset to itself, doubling it.
|
||||
|
||||
Now we have an awkward situation. The libust.so library doesn't know
|
||||
about the addend, so its TLS data for this element is correct. The
|
||||
liburcu-bp.so library has a different offset for the element. When we
|
||||
go to initialize the element for the first time in liburcu-bp.so, we
|
||||
write the address of the result at the doubled (broken) offset.
|
||||
Later, when we refer to the address from libust.so, we check the value
|
||||
at the correct offset, but it's NULL, so we eat hot SIGSEGV.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Andrei Dinu <andrei.adrianx.dinu@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/arm/dl-machine.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
|
||||
index ff5e09e207..d68bfe5cbe 100644
|
||||
--- a/sysdeps/arm/dl-machine.h
|
||||
+++ b/sysdeps/arm/dl-machine.h
|
||||
@@ -510,7 +510,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
|
||||
|
||||
case R_ARM_TLS_DTPOFF32:
|
||||
if (sym != NULL)
|
||||
- *reloc_addr += sym->st_value;
|
||||
+ *reloc_addr = sym->st_value;
|
||||
break;
|
||||
|
||||
case R_ARM_TLS_TPOFF32:
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
From f389babf3c920e68b7d7391556a78ebf62a21ebe Mon Sep 17 00:00:00 2001
|
||||
From: Ting Liu <b28495@freescale.com>
|
||||
Date: Wed, 19 Dec 2012 04:39:57 -0600
|
||||
Subject: [PATCH] eglibc: run libm-err-tab.pl with specific dirs in ${S}
|
||||
|
||||
libm-err-tab.pl will parse all the files named "libm-test-ulps"
|
||||
in the given dir recursively. To avoid parsing the one in
|
||||
${S}/.pc/ (it does exist after eglibc adds aarch64 support,
|
||||
${S}/.pc/aarch64-0001-glibc-fsf-v1-eaf6f205.patch/ports/sysdeps/
|
||||
aarch64/libm-test-ulps), run libm-err-tab.pl with specific dirs
|
||||
in ${S}.
|
||||
|
||||
Upstream-Status: inappropriate [OE specific]
|
||||
|
||||
Signed-off-by: Ting Liu <b28495@freescale.com>
|
||||
---
|
||||
manual/Makefile | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/manual/Makefile b/manual/Makefile
|
||||
index e83444341e..aa2645bc55 100644
|
||||
--- a/manual/Makefile
|
||||
+++ b/manual/Makefile
|
||||
@@ -103,7 +103,8 @@ $(objpfx)stamp-libm-err: $(..)math/gen-libm-test.py \
|
||||
$(wildcard $(foreach dir,$(sysdirs),\
|
||||
$(dir)/libm-test-ulps))
|
||||
pwd=`pwd`; \
|
||||
- $(PYTHON) $< -s $$pwd/.. -m $(objpfx)libm-err-tmp
|
||||
+ $(PYTHON) $< -s $$pwd/../ports -m $(objpfx)libm-err-tmp
|
||||
+ $(PYTHON) $< -s $$pwd/../sysdeps -m $(objpfx)libm-err-tmp
|
||||
$(move-if-change) $(objpfx)libm-err-tmp $(objpfx)libm-err.texi
|
||||
touch $@
|
||||
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
From 4b0d41a315e66f688fef7b0c2e2b6ce9fa16ec93 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:24:46 +0000
|
||||
Subject: [PATCH] __ieee754_sqrt{,f} are now inline functions and call out
|
||||
__slow versions
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: chunrong guo <B40290@freescale.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c | 6 +++---
|
||||
sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c | 4 ++--
|
||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
index 1c34244bd8..7038a70b47 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrt.c
|
||||
@@ -41,10 +41,10 @@ static const float half = 0.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
double
|
||||
-__ieee754_sqrt (double b)
|
||||
+__slow_ieee754_sqrt (double b)
|
||||
#else
|
||||
double
|
||||
-__ieee754_sqrt (b)
|
||||
+__slow_ieee754_sqrt (b)
|
||||
double b;
|
||||
#endif
|
||||
{
|
||||
@@ -83,7 +83,7 @@ __ieee754_sqrt (b)
|
||||
|
||||
/* Handle small numbers by scaling. */
|
||||
if (__builtin_expect ((u.parts.msw & 0x7ff00000) <= 0x02000000, 0))
|
||||
- return __ieee754_sqrt (b * two108) * twom54;
|
||||
+ return __slow_ieee754_sqrt (b * two108) * twom54;
|
||||
|
||||
#define FMADD(a_, c_, b_) \
|
||||
({ double __r; \
|
||||
diff --git a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
index 812653558f..10de1f0cc3 100644
|
||||
--- a/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
+++ b/sysdeps/powerpc/powerpc32/e6500/fpu/e_sqrtf.c
|
||||
@@ -39,10 +39,10 @@ static const float threehalf = 1.5;
|
||||
|
||||
#ifdef __STDC__
|
||||
float
|
||||
-__ieee754_sqrtf (float b)
|
||||
+__slow_ieee754_sqrtf (float b)
|
||||
#else
|
||||
float
|
||||
-__ieee754_sqrtf (b)
|
||||
+__slow_ieee754_sqrtf (b)
|
||||
float b;
|
||||
#endif
|
||||
{
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
From c062a462fee53a30a85d693c8288b5bd8fe4ec6e Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:27:10 +0000
|
||||
Subject: [PATCH] sysdeps/gnu/configure.ac: handle correctly
|
||||
$libc_cv_rootsbindir
|
||||
|
||||
Upstream-Status:Pending
|
||||
|
||||
Signed-off-by: Matthieu Crapet <Matthieu.Crapet@ingenico.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/gnu/configure | 2 +-
|
||||
sysdeps/gnu/configure.ac | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/gnu/configure b/sysdeps/gnu/configure
|
||||
index c15d1087e8..37cc983f2a 100644
|
||||
--- a/sysdeps/gnu/configure
|
||||
+++ b/sysdeps/gnu/configure
|
||||
@@ -32,6 +32,6 @@ case "$prefix" in
|
||||
else
|
||||
libc_cv_localstatedir=$localstatedir
|
||||
fi
|
||||
- libc_cv_rootsbindir=/sbin
|
||||
+ test -n "$libc_cv_rootsbindir" || libc_cv_rootsbindir=/sbin
|
||||
;;
|
||||
esac
|
||||
diff --git a/sysdeps/gnu/configure.ac b/sysdeps/gnu/configure.ac
|
||||
index 634fe4de2a..3db1697f4f 100644
|
||||
--- a/sysdeps/gnu/configure.ac
|
||||
+++ b/sysdeps/gnu/configure.ac
|
||||
@@ -21,6 +21,6 @@ case "$prefix" in
|
||||
else
|
||||
libc_cv_localstatedir=$localstatedir
|
||||
fi
|
||||
- libc_cv_rootsbindir=/sbin
|
||||
+ test -n "$libc_cv_rootsbindir" || libc_cv_rootsbindir=/sbin
|
||||
;;
|
||||
esac
|
||||
|
|
@ -1,260 +0,0 @@
|
|||
From 0bd39d8907953f18e01742f42b24647ac7689d0a Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:31:06 +0000
|
||||
Subject: [PATCH] 'yes' within the path sets wrong config variables
|
||||
|
||||
It seems that the 'AC_EGREP_CPP(yes...' example is quite popular
|
||||
but being such a short word to grep it is likely to produce
|
||||
false-positive matches with the path it is configured into.
|
||||
|
||||
The change is to use a more elaborated string to grep for.
|
||||
|
||||
Upstream-Status: Submitted [libc-alpha@sourceware.org]
|
||||
|
||||
Signed-off-by: Benjamin Esquivel <benjamin.esquivel@linux.intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/aarch64/configure | 4 ++--
|
||||
sysdeps/aarch64/configure.ac | 4 ++--
|
||||
sysdeps/arm/configure | 4 ++--
|
||||
sysdeps/arm/configure.ac | 4 ++--
|
||||
sysdeps/mips/configure | 4 ++--
|
||||
sysdeps/mips/configure.ac | 4 ++--
|
||||
sysdeps/nios2/configure | 4 ++--
|
||||
sysdeps/nios2/configure.ac | 4 ++--
|
||||
sysdeps/unix/sysv/linux/mips/configure | 4 ++--
|
||||
sysdeps/unix/sysv/linux/mips/configure.ac | 4 ++--
|
||||
sysdeps/unix/sysv/linux/powerpc/powerpc64/configure | 8 ++++----
|
||||
sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac | 8 ++++----
|
||||
12 files changed, 28 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/aarch64/configure b/sysdeps/aarch64/configure
|
||||
index 83c3a23e44..a68c946277 100644
|
||||
--- a/sysdeps/aarch64/configure
|
||||
+++ b/sysdeps/aarch64/configure
|
||||
@@ -157,12 +157,12 @@ else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef __AARCH64EB__
|
||||
- yes
|
||||
+ is_aarch64_be
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "is_aarch64_be" >/dev/null 2>&1; then :
|
||||
libc_cv_aarch64_be=yes
|
||||
else
|
||||
libc_cv_aarch64_be=no
|
||||
diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac
|
||||
index 66f755078a..a32b265bbe 100644
|
||||
--- a/sysdeps/aarch64/configure.ac
|
||||
+++ b/sysdeps/aarch64/configure.ac
|
||||
@@ -17,8 +17,8 @@ AC_DEFINE(SUPPORT_STATIC_PIE)
|
||||
# the dynamic linker via %ifdef.
|
||||
AC_CACHE_CHECK([for big endian],
|
||||
[libc_cv_aarch64_be],
|
||||
- [AC_EGREP_CPP(yes,[#ifdef __AARCH64EB__
|
||||
- yes
|
||||
+ [AC_EGREP_CPP(is_aarch64_be,[#ifdef __AARCH64EB__
|
||||
+ is_aarch64_be
|
||||
#endif
|
||||
], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)])
|
||||
if test $libc_cv_aarch64_be = yes; then
|
||||
diff --git a/sysdeps/arm/configure b/sysdeps/arm/configure
|
||||
index 431e843b2b..e152461138 100644
|
||||
--- a/sysdeps/arm/configure
|
||||
+++ b/sysdeps/arm/configure
|
||||
@@ -151,12 +151,12 @@ else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef __ARM_PCS_VFP
|
||||
- yes
|
||||
+ use_arm_pcs_vfp
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "use_arm_pcs_vfp" >/dev/null 2>&1; then :
|
||||
libc_cv_arm_pcs_vfp=yes
|
||||
else
|
||||
libc_cv_arm_pcs_vfp=no
|
||||
diff --git a/sysdeps/arm/configure.ac b/sysdeps/arm/configure.ac
|
||||
index 90cdd69c75..05a262ba00 100644
|
||||
--- a/sysdeps/arm/configure.ac
|
||||
+++ b/sysdeps/arm/configure.ac
|
||||
@@ -15,8 +15,8 @@ AC_DEFINE(PI_STATIC_AND_HIDDEN)
|
||||
# the dynamic linker via %ifdef.
|
||||
AC_CACHE_CHECK([whether the compiler is using the ARM hard-float ABI],
|
||||
[libc_cv_arm_pcs_vfp],
|
||||
- [AC_EGREP_CPP(yes,[#ifdef __ARM_PCS_VFP
|
||||
- yes
|
||||
+ [AC_EGREP_CPP(use_arm_pcs_vfp,[#ifdef __ARM_PCS_VFP
|
||||
+ use_arm_pcs_vfp
|
||||
#endif
|
||||
], libc_cv_arm_pcs_vfp=yes, libc_cv_arm_pcs_vfp=no)])
|
||||
if test $libc_cv_arm_pcs_vfp = yes; then
|
||||
diff --git a/sysdeps/mips/configure b/sysdeps/mips/configure
|
||||
index 4e13248c03..f14af952d0 100644
|
||||
--- a/sysdeps/mips/configure
|
||||
+++ b/sysdeps/mips/configure
|
||||
@@ -143,11 +143,11 @@ else
|
||||
/* end confdefs.h. */
|
||||
dnl
|
||||
#ifdef __mips_nan2008
|
||||
-yes
|
||||
+use_mips_nan2008
|
||||
#endif
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "use_mips_nan2008" >/dev/null 2>&1; then :
|
||||
libc_cv_mips_nan2008=yes
|
||||
else
|
||||
libc_cv_mips_nan2008=no
|
||||
diff --git a/sysdeps/mips/configure.ac b/sysdeps/mips/configure.ac
|
||||
index bcbdaffd9f..ad3057f4cc 100644
|
||||
--- a/sysdeps/mips/configure.ac
|
||||
+++ b/sysdeps/mips/configure.ac
|
||||
@@ -6,9 +6,9 @@ dnl position independent way.
|
||||
dnl AC_DEFINE(PI_STATIC_AND_HIDDEN)
|
||||
|
||||
AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
|
||||
- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
|
||||
+ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
|
||||
#ifdef __mips_nan2008
|
||||
-yes
|
||||
+use_mips_nan2008
|
||||
#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
|
||||
if test x$libc_cv_mips_nan2008 = xyes; then
|
||||
AC_DEFINE(HAVE_MIPS_NAN2008)
|
||||
diff --git a/sysdeps/nios2/configure b/sysdeps/nios2/configure
|
||||
index 14c8a3a014..dde3814ef2 100644
|
||||
--- a/sysdeps/nios2/configure
|
||||
+++ b/sysdeps/nios2/configure
|
||||
@@ -142,12 +142,12 @@ else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef __nios2_big_endian__
|
||||
- yes
|
||||
+ is_nios2_be
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "is_nios2_be" >/dev/null 2>&1; then :
|
||||
libc_cv_nios2_be=yes
|
||||
else
|
||||
libc_cv_nios2_be=no
|
||||
diff --git a/sysdeps/nios2/configure.ac b/sysdeps/nios2/configure.ac
|
||||
index f05f43802b..dc8639902d 100644
|
||||
--- a/sysdeps/nios2/configure.ac
|
||||
+++ b/sysdeps/nios2/configure.ac
|
||||
@@ -4,8 +4,8 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
||||
# Nios II big endian is not yet supported.
|
||||
AC_CACHE_CHECK([for big endian],
|
||||
[libc_cv_nios2_be],
|
||||
- [AC_EGREP_CPP(yes,[#ifdef __nios2_big_endian__
|
||||
- yes
|
||||
+ [AC_EGREP_CPP(is_nios2_be,[#ifdef __nios2_big_endian__
|
||||
+ is_nios2_be
|
||||
#endif
|
||||
], libc_cv_nios2_be=yes, libc_cv_nios2_be=no)])
|
||||
if test $libc_cv_nios2_be = yes; then
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/configure b/sysdeps/unix/sysv/linux/mips/configure
|
||||
index f25f2a3a65..1b7483e6c6 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/configure
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/configure
|
||||
@@ -414,11 +414,11 @@ else
|
||||
/* end confdefs.h. */
|
||||
dnl
|
||||
#ifdef __mips_nan2008
|
||||
-yes
|
||||
+use_mips_nan2008
|
||||
#endif
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "use_mips_nan2008" >/dev/null 2>&1; then :
|
||||
libc_cv_mips_nan2008=yes
|
||||
else
|
||||
libc_cv_mips_nan2008=no
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/configure.ac b/sysdeps/unix/sysv/linux/mips/configure.ac
|
||||
index 049a0f4bdf..005526d4e8 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/configure.ac
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/configure.ac
|
||||
@@ -105,9 +105,9 @@ AC_COMPILE_IFELSE(
|
||||
LIBC_CONFIG_VAR([mips-mode-switch],[${libc_mips_mode_switch}])
|
||||
|
||||
AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
|
||||
- libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl
|
||||
+ libc_cv_mips_nan2008, [AC_EGREP_CPP(use_mips_nan2008, [dnl
|
||||
#ifdef __mips_nan2008
|
||||
-yes
|
||||
+use_mips_nan2008
|
||||
#endif], libc_cv_mips_nan2008=yes, libc_cv_mips_nan2008=no)])
|
||||
|
||||
libc_mips_nan=
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
|
||||
index ae7f254da4..874519000b 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
|
||||
@@ -155,12 +155,12 @@ else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#if _CALL_ELF == 2
|
||||
- yes
|
||||
+ use_ppc_elfv2_abi
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "use_ppc_elfv2_abi" >/dev/null 2>&1; then :
|
||||
libc_cv_ppc64_elfv2_abi=yes
|
||||
else
|
||||
libc_cv_ppc64_elfv2_abi=no
|
||||
@@ -188,12 +188,12 @@ else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
#ifdef _CALL_ELF
|
||||
- yes
|
||||
+ is_def_call_elf
|
||||
#endif
|
||||
|
||||
_ACEOF
|
||||
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
|
||||
- $EGREP "yes" >/dev/null 2>&1; then :
|
||||
+ $EGREP "is_def_call_elf" >/dev/null 2>&1; then :
|
||||
libc_cv_ppc64_def_call_elf=yes
|
||||
else
|
||||
libc_cv_ppc64_def_call_elf=no
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
|
||||
index f9cba6e15d..b21f72f1e4 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
|
||||
@@ -6,8 +6,8 @@ LIBC_SLIBDIR_RTLDDIR([lib64], [lib64])
|
||||
# Define default-abi according to compiler flags.
|
||||
AC_CACHE_CHECK([whether the compiler is using the PowerPC64 ELFv2 ABI],
|
||||
[libc_cv_ppc64_elfv2_abi],
|
||||
- [AC_EGREP_CPP(yes,[#if _CALL_ELF == 2
|
||||
- yes
|
||||
+ [AC_EGREP_CPP(use_ppc_elfv2_abi,[#if _CALL_ELF == 2
|
||||
+ use_ppc_elfv2_abi
|
||||
#endif
|
||||
], libc_cv_ppc64_elfv2_abi=yes, libc_cv_ppc64_elfv2_abi=no)])
|
||||
if test $libc_cv_ppc64_elfv2_abi = yes; then
|
||||
@@ -19,8 +19,8 @@ else
|
||||
# Compiler that do not support ELFv2 ABI does not define _CALL_ELF
|
||||
AC_CACHE_CHECK([whether the compiler defines _CALL_ELF],
|
||||
[libc_cv_ppc64_def_call_elf],
|
||||
- [AC_EGREP_CPP(yes,[#ifdef _CALL_ELF
|
||||
- yes
|
||||
+ [AC_EGREP_CPP(is_def_call_elf,[#ifdef _CALL_ELF
|
||||
+ is_def_call_elf
|
||||
#endif
|
||||
], libc_cv_ppc64_def_call_elf=yes, libc_cv_ppc64_def_call_elf=no)])
|
||||
if test $libc_cv_ppc64_def_call_elf = no; then
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
From 3feb4213628f1485000ffe1d3fd26e37a7b14336 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:33:03 +0000
|
||||
Subject: [PATCH] timezone: re-written tzselect as posix sh
|
||||
|
||||
To avoid the bash dependency.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
timezone/Makefile | 2 +-
|
||||
timezone/tzselect.ksh | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/timezone/Makefile b/timezone/Makefile
|
||||
index 395abfeebd..2d939edf75 100644
|
||||
--- a/timezone/Makefile
|
||||
+++ b/timezone/Makefile
|
||||
@@ -123,7 +123,7 @@ $(testdata)/XT%: testdata/XT%
|
||||
cp $< $@
|
||||
|
||||
$(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
|
||||
- sed -e 's|/bin/bash|$(BASH)|' \
|
||||
+ sed -e 's|/bin/bash|/bin/sh|' \
|
||||
-e 's|TZDIR=[^}]*|TZDIR=$(zonedir)|' \
|
||||
-e '/TZVERSION=/s|see_Makefile|"$(version)"|' \
|
||||
-e '/PKGVERSION=/s|=.*|="$(PKGVERSION)"|' \
|
||||
diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
|
||||
index 18fce27e24..70745f9d36 100755
|
||||
--- a/timezone/tzselect.ksh
|
||||
+++ b/timezone/tzselect.ksh
|
||||
@@ -34,7 +34,7 @@ REPORT_BUGS_TO=tz@iana.org
|
||||
|
||||
# Specify default values for environment variables if they are unset.
|
||||
: ${AWK=awk}
|
||||
-: ${TZDIR=`pwd`}
|
||||
+: ${TZDIR=$(pwd)}
|
||||
|
||||
# Output one argument as-is to standard output.
|
||||
# Safer than 'echo', which can mishandle '\' or leading '-'.
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
From f6119b98a9caa80642d69a97edc98f57ecef5c3c Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Thu, 31 Dec 2015 14:33:02 -0800
|
||||
Subject: [PATCH] Remove bash dependency for nscd init script
|
||||
|
||||
The nscd init script uses #! /bin/bash but only really uses one bashism
|
||||
(translated strings), so remove them and switch the shell to #!/bin/sh.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
nscd/nscd.init | 14 +++++++-------
|
||||
1 file changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/nscd/nscd.init b/nscd/nscd.init
|
||||
index a882da7d8b..b02986ec15 100644
|
||||
--- a/nscd/nscd.init
|
||||
+++ b/nscd/nscd.init
|
||||
@@ -1,4 +1,4 @@
|
||||
-#!/bin/bash
|
||||
+#!/bin/sh
|
||||
#
|
||||
# nscd: Starts the Name Switch Cache Daemon
|
||||
#
|
||||
@@ -49,7 +49,7 @@ prog=nscd
|
||||
start () {
|
||||
[ -d /var/run/nscd ] || mkdir /var/run/nscd
|
||||
[ -d /var/db/nscd ] || mkdir /var/db/nscd
|
||||
- echo -n $"Starting $prog: "
|
||||
+ echo -n "Starting $prog: "
|
||||
daemon /usr/sbin/nscd
|
||||
RETVAL=$?
|
||||
echo
|
||||
@@ -58,7 +58,7 @@ start () {
|
||||
}
|
||||
|
||||
stop () {
|
||||
- echo -n $"Stopping $prog: "
|
||||
+ echo -n "Stopping $prog: "
|
||||
/usr/sbin/nscd -K
|
||||
RETVAL=$?
|
||||
if [ $RETVAL -eq 0 ]; then
|
||||
@@ -67,9 +67,9 @@ stop () {
|
||||
# a non-privileged user
|
||||
rm -f /var/run/nscd/nscd.pid
|
||||
rm -f /var/run/nscd/socket
|
||||
- success $"$prog shutdown"
|
||||
+ success "$prog shutdown"
|
||||
else
|
||||
- failure $"$prog shutdown"
|
||||
+ failure "$prog shutdown"
|
||||
fi
|
||||
echo
|
||||
return $RETVAL
|
||||
@@ -103,13 +103,13 @@ case "$1" in
|
||||
RETVAL=$?
|
||||
;;
|
||||
force-reload | reload)
|
||||
- echo -n $"Reloading $prog: "
|
||||
+ echo -n "Reloading $prog: "
|
||||
killproc /usr/sbin/nscd -HUP
|
||||
RETVAL=$?
|
||||
echo
|
||||
;;
|
||||
*)
|
||||
- echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
|
||||
+ echo "Usage: $0 {start|stop|status|restart|reload|condrestart}"
|
||||
RETVAL=1
|
||||
;;
|
||||
esac
|
||||
|
|
@ -1,616 +0,0 @@
|
|||
From 060ba13b5ac5e90517d540f009ebdcdcf62f9685 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:42:58 +0000
|
||||
Subject: [PATCH] eglibc: Cross building and testing instructions
|
||||
|
||||
Ported from eglibc
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
GLIBC.cross-building | 383 +++++++++++++++++++++++++++++++++++++++++++
|
||||
GLIBC.cross-testing | 205 +++++++++++++++++++++++
|
||||
2 files changed, 588 insertions(+)
|
||||
create mode 100644 GLIBC.cross-building
|
||||
create mode 100644 GLIBC.cross-testing
|
||||
|
||||
diff --git a/GLIBC.cross-building b/GLIBC.cross-building
|
||||
new file mode 100644
|
||||
index 0000000000..e6e0da1aaf
|
||||
--- /dev/null
|
||||
+++ b/GLIBC.cross-building
|
||||
@@ -0,0 +1,383 @@
|
||||
+ -*- mode: text -*-
|
||||
+
|
||||
+ Cross-Compiling GLIBC
|
||||
+ Jim Blandy <jimb@codesourcery.com>
|
||||
+
|
||||
+
|
||||
+Introduction
|
||||
+
|
||||
+Most GNU tools have a simple build procedure: you run their
|
||||
+'configure' script, and then you run 'make'. Unfortunately, the
|
||||
+process of cross-compiling the GNU C library is quite a bit more
|
||||
+involved:
|
||||
+
|
||||
+1) Build a cross-compiler, with certain facilities disabled.
|
||||
+
|
||||
+2) Configure the C library using the compiler you built in step 1).
|
||||
+ Build a few of the C run-time object files, but not the rest of the
|
||||
+ library. Install the library's header files and the run-time
|
||||
+ object files, and create a dummy libc.so.
|
||||
+
|
||||
+3) Build a second cross-compiler, using the header files and object
|
||||
+ files you installed in step 2.
|
||||
+
|
||||
+4) Configure, build, and install a fresh C library, using the compiler
|
||||
+ built in step 3.
|
||||
+
|
||||
+5) Build a third cross-compiler, based on the C library built in step 4.
|
||||
+
|
||||
+The reason for this complexity is that, although GCC and the GNU C
|
||||
+library are distributed separately, they are not actually independent
|
||||
+of each other: GCC requires the C library's headers and some object
|
||||
+files to compile its own libraries, while the C library depends on
|
||||
+GCC's libraries. GLIBC includes features and bug fixes to the stock
|
||||
+GNU C library that simplify this process, but the fundamental
|
||||
+interdependency stands.
|
||||
+
|
||||
+In this document, we explain how to cross-compile an GLIBC/GCC pair
|
||||
+from source. Our intended audience is developers who are already
|
||||
+familiar with the GNU toolchain and comfortable working with
|
||||
+cross-development tools. While we do present a worked example to
|
||||
+accompany the explanation, for clarity's sake we do not cover many of
|
||||
+the options available to cross-toolchain users.
|
||||
+
|
||||
+
|
||||
+Preparation
|
||||
+
|
||||
+GLIBC requires recent versions of the GNU binutils, GCC, and the
|
||||
+Linux kernel. The web page <http://www.eglibc.org/prerequisites>
|
||||
+documents the current requirements, and lists patches needed for
|
||||
+certain target architectures. As of this writing, these build
|
||||
+instructions have been tested with binutils 2.22.51, GCC 4.6.2,
|
||||
+and Linux 3.1.
|
||||
+
|
||||
+First, let's set some variables, to simplify later commands. We'll
|
||||
+build GLIBC and GCC for an ARM target, known to the Linux kernel
|
||||
+as 'arm', and we'll do the build on an Intel x86_64 Linux box:
|
||||
+
|
||||
+ $ build=x86_64-pc-linux-gnu
|
||||
+ $ host=$build
|
||||
+ $ target=arm-none-linux-gnueabi
|
||||
+ $ linux_arch=arm
|
||||
+
|
||||
+We're using the aforementioned versions of Binutils, GCC, and Linux:
|
||||
+
|
||||
+ $ binutilsv=binutils-2.22.51
|
||||
+ $ gccv=gcc-4.6.2
|
||||
+ $ linuxv=linux-3.1
|
||||
+
|
||||
+We're carrying out the entire process under '~/cross-build', which
|
||||
+contains unpacked source trees for binutils, gcc, and linux kernel,
|
||||
+along with GLIBC svn trunk (which can be checked-out with
|
||||
+'svn co http://www.eglibc.org/svn/trunk eglibc'):
|
||||
+
|
||||
+ $ top=$HOME/cross-build/$target
|
||||
+ $ src=$HOME/cross-build/src
|
||||
+ $ ls $src
|
||||
+ binutils-2.22.51 glibc gcc-4.6.2 linux-3.1
|
||||
+
|
||||
+We're going to place our build directories in a subdirectory 'obj',
|
||||
+we'll install the cross-development toolchain in 'tools', and we'll
|
||||
+place our sysroot (containing files to be installed on the target
|
||||
+system) in 'sysroot':
|
||||
+
|
||||
+ $ obj=$top/obj
|
||||
+ $ tools=$top/tools
|
||||
+ $ sysroot=$top/sysroot
|
||||
+
|
||||
+
|
||||
+Binutils
|
||||
+
|
||||
+Configuring and building binutils for the target is straightforward:
|
||||
+
|
||||
+ $ mkdir -p $obj/binutils
|
||||
+ $ cd $obj/binutils
|
||||
+ $ $src/$binutilsv/configure \
|
||||
+ > --target=$target \
|
||||
+ > --prefix=$tools \
|
||||
+ > --with-sysroot=$sysroot
|
||||
+ $ make
|
||||
+ $ make install
|
||||
+
|
||||
+
|
||||
+The First GCC
|
||||
+
|
||||
+For our work, we need a cross-compiler targeting an ARM Linux
|
||||
+system. However, that configuration includes the shared library
|
||||
+'libgcc_s.so', which is compiled against the GLIBC headers (which we
|
||||
+haven't installed yet) and linked against 'libc.so' (which we haven't
|
||||
+built yet).
|
||||
+
|
||||
+Fortunately, there are configuration options for GCC which tell it not
|
||||
+to build 'libgcc_s.so'. The '--without-headers' option is supposed to
|
||||
+take care of this, but its implementation is incomplete, so you must
|
||||
+also configure with the '--with-newlib' option. While '--with-newlib'
|
||||
+appears to mean "Use the Newlib C library", its effect is to tell the
|
||||
+GCC build machinery, "Don't assume there is a C library available."
|
||||
+
|
||||
+We also need to disable some of the libraries that would normally be
|
||||
+built along with GCC, and specify that only the compiler for the C
|
||||
+language is needed.
|
||||
+
|
||||
+So, we create a build directory, configure, make, and install.
|
||||
+
|
||||
+ $ mkdir -p $obj/gcc1
|
||||
+ $ cd $obj/gcc1
|
||||
+ $ $src/$gccv/configure \
|
||||
+ > --target=$target \
|
||||
+ > --prefix=$tools \
|
||||
+ > --without-headers --with-newlib \
|
||||
+ > --disable-shared --disable-threads --disable-libssp \
|
||||
+ > --disable-libgomp --disable-libmudflap --disable-libquadmath \
|
||||
+ > --disable-decimal-float --disable-libffi \
|
||||
+ > --enable-languages=c
|
||||
+ $ PATH=$tools/bin:$PATH make
|
||||
+ $ PATH=$tools/bin:$PATH make install
|
||||
+
|
||||
+
|
||||
+Linux Kernel Headers
|
||||
+
|
||||
+To configure GLIBC, we also need Linux kernel headers in place.
|
||||
+Fortunately, the Linux makefiles have a target that installs them for
|
||||
+us. Since the process does modify the source tree a bit, we make a
|
||||
+copy first:
|
||||
+
|
||||
+ $ cp -r $src/$linuxv $obj/linux
|
||||
+ $ cd $obj/linux
|
||||
+
|
||||
+Now we're ready to install the headers into the sysroot:
|
||||
+
|
||||
+ $ PATH=$tools/bin:$PATH \
|
||||
+ > make headers_install \
|
||||
+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
|
||||
+ > INSTALL_HDR_PATH=$sysroot/usr
|
||||
+
|
||||
+
|
||||
+GLIBC Headers and Preliminary Objects
|
||||
+
|
||||
+Using the cross-compiler we've just built, we can now configure GLIBC
|
||||
+well enough to install the headers and build the object files that the
|
||||
+full cross-compiler will need:
|
||||
+
|
||||
+ $ mkdir -p $obj/glibc-headers
|
||||
+ $ cd $obj/glibc-headers
|
||||
+ $ BUILD_CC=gcc \
|
||||
+ > CC=$tools/bin/$target-gcc \
|
||||
+ > CXX=$tools/bin/$target-g++ \
|
||||
+ > AR=$tools/bin/$target-ar \
|
||||
+ > RANLIB=$tools/bin/$target-ranlib \
|
||||
+ > $src/glibc/libc/configure \
|
||||
+ > --prefix=/usr \
|
||||
+ > --with-headers=$sysroot/usr/include \
|
||||
+ > --build=$build \
|
||||
+ > --host=$target \
|
||||
+ > --disable-profile --without-gd --without-cvs \
|
||||
+ > --enable-add-ons=nptl,libidn,../ports
|
||||
+
|
||||
+The option '--prefix=/usr' may look strange, but you should never
|
||||
+configure GLIBC with a prefix other than '/usr': in various places,
|
||||
+GLIBC's build system checks whether the prefix is '/usr', and does
|
||||
+special handling only if that is the case. Unless you use this
|
||||
+prefix, you will get a sysroot that does not use the standard Linux
|
||||
+directory layouts and cannot be used as a basis for the root
|
||||
+filesystem on your target system compatibly with normal GLIBC
|
||||
+installations.
|
||||
+
|
||||
+The '--with-headers' option tells GLIBC where the Linux headers have
|
||||
+been installed.
|
||||
+
|
||||
+The '--enable-add-ons=nptl,libidn,../ports' option tells GLIBC to look
|
||||
+for the listed glibc add-ons. Most notably the ports add-on (located
|
||||
+just above the libc sources in the GLIBC svn tree) is required to
|
||||
+support ARM targets.
|
||||
+
|
||||
+We can now use the 'install-headers' makefile target to install the
|
||||
+headers:
|
||||
+
|
||||
+ $ make install-headers install_root=$sysroot \
|
||||
+ > install-bootstrap-headers=yes
|
||||
+
|
||||
+The 'install_root' variable indicates where the files should actually
|
||||
+be installed; its value is treated as the parent of the '--prefix'
|
||||
+directory we passed to the configure script, so the headers will go in
|
||||
+'$sysroot/usr/include'. The 'install-bootstrap-headers' variable
|
||||
+requests special handling for certain tricky header files.
|
||||
+
|
||||
+Next, there are a few object files needed to link shared libraries,
|
||||
+which we build and install by hand:
|
||||
+
|
||||
+ $ mkdir -p $sysroot/usr/lib
|
||||
+ $ make csu/subdir_lib
|
||||
+ $ cp csu/crt1.o csu/crti.o csu/crtn.o $sysroot/usr/lib
|
||||
+
|
||||
+Finally, 'libgcc_s.so' requires a 'libc.so' to link against. However,
|
||||
+since we will never actually execute its code, it doesn't matter what
|
||||
+it contains. So, treating '/dev/null' as a C source file, we produce
|
||||
+a dummy 'libc.so' in one step:
|
||||
+
|
||||
+ $ $tools/bin/$target-gcc -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
+ > -o $sysroot/usr/lib/libc.so
|
||||
+
|
||||
+
|
||||
+The Second GCC
|
||||
+
|
||||
+With the GLIBC headers and selected object files installed, we can
|
||||
+now build a GCC that is capable of compiling GLIBC. We configure,
|
||||
+build, and install the second GCC, again building only the C compiler,
|
||||
+and avoiding libraries we won't use:
|
||||
+
|
||||
+ $ mkdir -p $obj/gcc2
|
||||
+ $ cd $obj/gcc2
|
||||
+ $ $src/$gccv/configure \
|
||||
+ > --target=$target \
|
||||
+ > --prefix=$tools \
|
||||
+ > --with-sysroot=$sysroot \
|
||||
+ > --disable-libssp --disable-libgomp --disable-libmudflap \
|
||||
+ > --disable-libffi --disable-libquadmath \
|
||||
+ > --enable-languages=c
|
||||
+ $ PATH=$tools/bin:$PATH make
|
||||
+ $ PATH=$tools/bin:$PATH make install
|
||||
+
|
||||
+
|
||||
+GLIBC, Complete
|
||||
+
|
||||
+With the second compiler built and installed, we're now ready for the
|
||||
+full GLIBC build:
|
||||
+
|
||||
+ $ mkdir -p $obj/glibc
|
||||
+ $ cd $obj/glibc
|
||||
+ $ BUILD_CC=gcc \
|
||||
+ > CC=$tools/bin/$target-gcc \
|
||||
+ > CXX=$tools/bin/$target-g++ \
|
||||
+ > AR=$tools/bin/$target-ar \
|
||||
+ > RANLIB=$tools/bin/$target-ranlib \
|
||||
+ > $src/glibc/libc/configure \
|
||||
+ > --prefix=/usr \
|
||||
+ > --with-headers=$sysroot/usr/include \
|
||||
+ > --with-kconfig=$obj/linux/scripts/kconfig \
|
||||
+ > --build=$build \
|
||||
+ > --host=$target \
|
||||
+ > --disable-profile --without-gd --without-cvs \
|
||||
+ > --enable-add-ons=nptl,libidn,../ports
|
||||
+
|
||||
+Note the additional '--with-kconfig' option. This tells GLIBC where to
|
||||
+find the host config tools used by the kernel 'make config' and 'make
|
||||
+menuconfig'. These tools can be re-used by GLIBC for its own 'make
|
||||
+*config' support, which will create 'option-groups.config' for you.
|
||||
+But first make sure those tools have been built by running some
|
||||
+dummy 'make *config' calls in the kernel directory:
|
||||
+
|
||||
+ $ cd $obj/linux
|
||||
+ $ PATH=$tools/bin:$PATH make config \
|
||||
+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
|
||||
+ $ PATH=$tools/bin:$PATH make menuconfig \
|
||||
+ > ARCH=$linux_arch CROSS_COMPILE=$target- \
|
||||
+
|
||||
+Now we can configure and build the full GLIBC:
|
||||
+
|
||||
+ $ cd $obj/glibc
|
||||
+ $ PATH=$tools/bin:$PATH make defconfig
|
||||
+ $ PATH=$tools/bin:$PATH make menuconfig
|
||||
+ $ PATH=$tools/bin:$PATH make
|
||||
+ $ PATH=$tools/bin:$PATH make install install_root=$sysroot
|
||||
+
|
||||
+At this point, we have a complete GLIBC installation in '$sysroot',
|
||||
+with header files, library files, and most of the C runtime startup
|
||||
+files in place.
|
||||
+
|
||||
+
|
||||
+The Third GCC
|
||||
+
|
||||
+Finally, we recompile GCC against this full installation, enabling
|
||||
+whatever languages and libraries we would like to use:
|
||||
+
|
||||
+ $ mkdir -p $obj/gcc3
|
||||
+ $ cd $obj/gcc3
|
||||
+ $ $src/$gccv/configure \
|
||||
+ > --target=$target \
|
||||
+ > --prefix=$tools \
|
||||
+ > --with-sysroot=$sysroot \
|
||||
+ > --enable-__cxa_atexit \
|
||||
+ > --disable-libssp --disable-libgomp --disable-libmudflap \
|
||||
+ > --enable-languages=c,c++
|
||||
+ $ PATH=$tools/bin:$PATH make
|
||||
+ $ PATH=$tools/bin:$PATH make install
|
||||
+
|
||||
+The '--enable-__cxa_atexit' option tells GCC what sort of C++
|
||||
+destructor support to expect from the C library; it's required with
|
||||
+GLIBC.
|
||||
+
|
||||
+And since GCC's installation process isn't designed to help construct
|
||||
+sysroot trees, we must manually copy certain libraries into place in
|
||||
+the sysroot.
|
||||
+
|
||||
+ $ cp -d $tools/$target/lib/libgcc_s.so* $sysroot/lib
|
||||
+ $ cp -d $tools/$target/lib/libstdc++.so* $sysroot/usr/lib
|
||||
+
|
||||
+
|
||||
+Trying Things Out
|
||||
+
|
||||
+At this point, '$tools' contains a cross toolchain ready to use
|
||||
+the GLIBC installation in '$sysroot':
|
||||
+
|
||||
+ $ cat > hello.c <<EOF
|
||||
+ > #include <stdio.h>
|
||||
+ > int
|
||||
+ > main (int argc, char **argv)
|
||||
+ > {
|
||||
+ > puts ("Hello, world!");
|
||||
+ > return 0;
|
||||
+ > }
|
||||
+ > EOF
|
||||
+ $ $tools/bin/$target-gcc -Wall hello.c -o hello
|
||||
+ $ cat > c++-hello.cc <<EOF
|
||||
+ > #include <iostream>
|
||||
+ > int
|
||||
+ > main (int argc, char **argv)
|
||||
+ > {
|
||||
+ > std::cout << "Hello, C++ world!" << std::endl;
|
||||
+ > return 0;
|
||||
+ > }
|
||||
+ > EOF
|
||||
+ $ $tools/bin/$target-g++ -Wall c++-hello.cc -o c++-hello
|
||||
+
|
||||
+
|
||||
+We can use 'readelf' to verify that these are indeed executables for
|
||||
+our target, using our dynamic linker:
|
||||
+
|
||||
+ $ $tools/bin/$target-readelf -hl hello
|
||||
+ ELF Header:
|
||||
+ ...
|
||||
+ Type: EXEC (Executable file)
|
||||
+ Machine: ARM
|
||||
+
|
||||
+ ...
|
||||
+ Program Headers:
|
||||
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
||||
+ PHDR 0x000034 0x10000034 0x10000034 0x00100 0x00100 R E 0x4
|
||||
+ INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1
|
||||
+ [Requesting program interpreter: /lib/ld-linux.so.3]
|
||||
+ LOAD 0x000000 0x00008000 0x00008000 0x0042c 0x0042c R E 0x8000
|
||||
+ ...
|
||||
+
|
||||
+Looking at the dynamic section of the installed 'libgcc_s.so', we see
|
||||
+that the 'NEEDED' entry for the C library does include the '.6'
|
||||
+suffix, indicating that was linked against our fully build GLIBC, and
|
||||
+not our dummy 'libc.so':
|
||||
+
|
||||
+ $ $tools/bin/$target-readelf -d $sysroot/lib/libgcc_s.so.1
|
||||
+ Dynamic section at offset 0x1083c contains 24 entries:
|
||||
+ Tag Type Name/Value
|
||||
+ 0x00000001 (NEEDED) Shared library: [libc.so.6]
|
||||
+ 0x0000000e (SONAME) Library soname: [libgcc_s.so.1]
|
||||
+ ...
|
||||
+
|
||||
+
|
||||
+And on the target machine, we can run our programs:
|
||||
+
|
||||
+ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
|
||||
+ > ./hello
|
||||
+ Hello, world!
|
||||
+ $ $sysroot/lib/ld.so.1 --library-path $sysroot/lib:$sysroot/usr/lib \
|
||||
+ > ./c++-hello
|
||||
+ Hello, C++ world!
|
||||
diff --git a/GLIBC.cross-testing b/GLIBC.cross-testing
|
||||
new file mode 100644
|
||||
index 0000000000..b67b468466
|
||||
--- /dev/null
|
||||
+++ b/GLIBC.cross-testing
|
||||
@@ -0,0 +1,205 @@
|
||||
+ -*- mode: text -*-
|
||||
+
|
||||
+ Cross-Testing With GLIBC
|
||||
+ Jim Blandy <jimb@codesourcery.com>
|
||||
+
|
||||
+
|
||||
+Introduction
|
||||
+
|
||||
+Developers writing software for embedded systems often use a desktop
|
||||
+or other similarly capable computer for development, but need to run
|
||||
+tests on the embedded system, or perhaps on a simulator. When
|
||||
+configured for cross-compilation, the stock GNU C library simply
|
||||
+disables running tests altogether: the command 'make tests' builds
|
||||
+test programs, but does not run them. GLIBC, however, provides
|
||||
+facilities for compiling tests and generating data files on the build
|
||||
+system, but running the test programs themselves on a remote system or
|
||||
+simulator.
|
||||
+
|
||||
+
|
||||
+Test environment requirements
|
||||
+
|
||||
+The test environment must meet certain conditions for GLIBC's
|
||||
+cross-testing facilities to work:
|
||||
+
|
||||
+- Shared filesystems. The 'build' system, on which you configure and
|
||||
+ compile GLIBC, and the 'host' system, on which you intend to run
|
||||
+ GLIBC, must share a filesystem containing the GLIBC build and
|
||||
+ source trees. Files must appear at the same paths on both systems.
|
||||
+
|
||||
+- Remote-shell like invocation. There must be a way to run a program
|
||||
+ on the host system from the build system, passing it properly quoted
|
||||
+ command-line arguments, setting environment variables, and
|
||||
+ inheriting the caller's standard input and output.
|
||||
+
|
||||
+
|
||||
+Usage
|
||||
+
|
||||
+To use GLIBC's cross-testing support, provide values for the
|
||||
+following Make variables when you invoke 'make':
|
||||
+
|
||||
+- cross-test-wrapper
|
||||
+
|
||||
+ This should be the name of the cross-testing wrapper command, along
|
||||
+ with any arguments.
|
||||
+
|
||||
+- cross-localedef
|
||||
+
|
||||
+ This should be the name of a cross-capable localedef program, like
|
||||
+ that included in the GLIBC 'localedef' module, along with any
|
||||
+ arguments needed.
|
||||
+
|
||||
+These are each explained in detail below.
|
||||
+
|
||||
+
|
||||
+The Cross-Testing Wrapper
|
||||
+
|
||||
+To run test programs reliably, the stock GNU C library takes care to
|
||||
+ensure that test programs use the newly compiled dynamic linker and
|
||||
+shared libraries, and never the host system's installed libraries. To
|
||||
+accomplish this, it runs the tests by explicitly invoking the dynamic
|
||||
+linker from the build tree, passing it a list of build tree
|
||||
+directories to search for shared libraries, followed by the name of
|
||||
+the executable to run and its arguments.
|
||||
+
|
||||
+For example, where one might normally run a test program like this:
|
||||
+
|
||||
+ $ ./tst-foo arg1 arg2
|
||||
+
|
||||
+the GNU C library might run that program like this:
|
||||
+
|
||||
+ $ $objdir/elf/ld-linux.so.3 --library-path $objdir \
|
||||
+ ./tst-foo arg1 arg2
|
||||
+
|
||||
+(where $objdir is the path to the top of the build tree, and the
|
||||
+trailing backslash indicates a continuation of the command). In other
|
||||
+words, each test program invocation is 'wrapped up' inside an explicit
|
||||
+invocation of the dynamic linker, which must itself execute the test
|
||||
+program, having loaded shared libraries from the appropriate
|
||||
+directories.
|
||||
+
|
||||
+To support cross-testing, GLIBC allows the developer to optionally
|
||||
+set the 'cross-test-wrapper' Make variable to another wrapper command,
|
||||
+to which it passes the entire dynamic linker invocation shown above as
|
||||
+arguments. For example, if the developer supplies a wrapper of
|
||||
+'my-wrapper hostname', then GLIBC would run the test above as
|
||||
+follows:
|
||||
+
|
||||
+ $ my-wrapper hostname \
|
||||
+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
|
||||
+ ./tst-foo arg1 arg2
|
||||
+
|
||||
+The 'my-wrapper' command is responsible for executing the command
|
||||
+given on the host system.
|
||||
+
|
||||
+Since tests are run in varying directories, the wrapper should either
|
||||
+be in your command search path, or 'cross-test-wrapper' should give an
|
||||
+absolute path for the wrapper.
|
||||
+
|
||||
+The wrapper must meet several requirements:
|
||||
+
|
||||
+- It must preserve the current directory. As explained above, the
|
||||
+ build directory tree must be visible on both the build and host
|
||||
+ systems, at the same path. The test wrapper must ensure that the
|
||||
+ current directory it inherits is also inherited by the dynamic
|
||||
+ linker (and thus the test program itself).
|
||||
+
|
||||
+- It must preserve environment variables' values. Many GLIBC tests
|
||||
+ set environment variables for test runs; in native testing, it
|
||||
+ invokes programs like this:
|
||||
+
|
||||
+ $ GCONV_PATH=$objdir/iconvdata \
|
||||
+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
|
||||
+ ./tst-foo arg1 arg2
|
||||
+
|
||||
+ With the cross-testing wrapper, that invocation becomes:
|
||||
+
|
||||
+ $ GCONV_PATH=$objdir/iconvdata \
|
||||
+ my-wrapper hostname \
|
||||
+ $objdir/elf/ld-linux.so.3 --library-path $objdir \
|
||||
+ ./tst-foo arg1 arg2
|
||||
+
|
||||
+ Here, 'my-wrapper' must ensure that the value it sees for
|
||||
+ 'GCONV_PATH' will be seen by the dynamic linker, and thus 'tst-foo'
|
||||
+ itself. (The wrapper supplied with GLIBC simply preserves the
|
||||
+ values of *all* enviroment variables, with a fixed set of
|
||||
+ exceptions.)
|
||||
+
|
||||
+ If your wrapper is a shell script, take care to correctly propagate
|
||||
+ environment variables whose values contain spaces and shell
|
||||
+ metacharacters.
|
||||
+
|
||||
+- It must pass the command's arguments, unmodified. The arguments
|
||||
+ seen by the test program should be exactly those seen by the wrapper
|
||||
+ (after whatever arguments are given to the wrapper itself). The
|
||||
+ GLIBC test framework performs all needed shell word splitting and
|
||||
+ expansion (wildcard expansion, parameter substitution, and so on)
|
||||
+ before invoking the wrapper; further expansion may break the tests.
|
||||
+
|
||||
+
|
||||
+The 'cross-test-ssh.sh' script
|
||||
+
|
||||
+If you want to use 'ssh' (or something sufficiently similar) to run
|
||||
+test programs on your host system, GLIBC includes a shell script,
|
||||
+'scripts/cross-test-ssh.sh', which you can use as your wrapper
|
||||
+command. This script takes care of setting the test command's current
|
||||
+directory, propagating environment variable values, and carrying
|
||||
+command-line arguments, all across an 'ssh' connection. You may even
|
||||
+supply an alternative to 'ssh' on the command line, if needed.
|
||||
+
|
||||
+For more details, pass 'cross-test-ssh.sh' the '--help' option.
|
||||
+
|
||||
+
|
||||
+The Cross-Compiling Locale Definition Command
|
||||
+
|
||||
+Some GLIBC tests rely on locales generated especially for the test
|
||||
+process. In a native configuration, these tests simply run the
|
||||
+'localedef' command built by the normal GLIBC build process,
|
||||
+'locale/localedef', to process and install their locales. However, in
|
||||
+a cross-compiling configuration, this 'localedef' is built for the
|
||||
+host system, not the build system, and since it requires quite a bit
|
||||
+of memory to run (we have seen it fail on systems with 64MiB of
|
||||
+memory), it may not be practical to run it on the host system.
|
||||
+
|
||||
+If set, GLIBC uses the 'cross-localedef' Make variable as the command
|
||||
+to run on the build system to process and install locales. The
|
||||
+localedef program built from the GLIBC 'localedef' module is
|
||||
+suitable.
|
||||
+
|
||||
+The value of 'cross-localedef' may also include command-line arguments
|
||||
+to be passed to the program; if you are using GLIBC's 'localedef',
|
||||
+you may include endianness and 'uint32_t' alignment arguments here.
|
||||
+
|
||||
+
|
||||
+Example
|
||||
+
|
||||
+In developing GLIBC's cross-testing facility, we invoked 'make' with
|
||||
+the following script:
|
||||
+
|
||||
+ #!/bin/sh
|
||||
+
|
||||
+ srcdir=...
|
||||
+ test_hostname=...
|
||||
+ localedefdir=...
|
||||
+ cross_gxx=...-g++
|
||||
+
|
||||
+ wrapper="$srcdir/scripts/cross-test-ssh.sh $test_hostname"
|
||||
+ localedef="$localedefdir/localedef --little-endian --uint32-align=4"
|
||||
+
|
||||
+ make cross-test-wrapper="$wrapper" \
|
||||
+ cross-localedef="$localedef" \
|
||||
+ CXX="$cross_gxx" \
|
||||
+ "$@"
|
||||
+
|
||||
+
|
||||
+Other Cross-Testing Concerns
|
||||
+
|
||||
+Here are notes on some other issues which you may encounter in running
|
||||
+the GLIBC tests in a cross-compiling environment:
|
||||
+
|
||||
+- Some tests require a C++ cross-compiler; you should set the 'CXX'
|
||||
+ Make variable to the name of an appropriate cross-compiler.
|
||||
+
|
||||
+- Some tests require access to libstdc++.so.6 and libgcc_s.so.1; we
|
||||
+ simply place copies of these libraries in the top GLIBC build
|
||||
+ directory.
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
From f13c2f525e9bc82ce13e4cf486f7fe0831fc3fac Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:49:28 +0000
|
||||
Subject: [PATCH] eglibc: Help bootstrap cross toolchain
|
||||
|
||||
Taken from EGLIBC, r1484 + r1525
|
||||
|
||||
2007-02-20 Jim Blandy <jimb@codesourcery.com>
|
||||
|
||||
* Makefile (install-headers): Preserve old behavior: depend on
|
||||
$(inst_includedir)/gnu/stubs.h only if install-bootstrap-headers
|
||||
is set; otherwise, place gnu/stubs.h on the 'install-others' list.
|
||||
|
||||
2007-02-16 Jim Blandy <jimb@codesourcery.com>
|
||||
|
||||
* Makefile: Amend make install-headers to install everything
|
||||
necessary for building a cross-compiler. Install gnu/stubs.h as
|
||||
part of 'install-headers', not 'install-others'.
|
||||
If install-bootstrap-headers is 'yes', install a dummy copy of
|
||||
gnu/stubs.h, instead of computing the real thing.
|
||||
* include/stubs-bootstrap.h: New file.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
Makefile | 22 +++++++++++++++++++++-
|
||||
include/stubs-bootstrap.h | 12 ++++++++++++
|
||||
2 files changed, 33 insertions(+), 1 deletion(-)
|
||||
create mode 100644 include/stubs-bootstrap.h
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 50f99ca611..31eed15f02 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -79,9 +79,18 @@ subdir-dirs = include
|
||||
vpath %.h $(subdir-dirs)
|
||||
|
||||
# What to install.
|
||||
-install-others = $(inst_includedir)/gnu/stubs.h
|
||||
install-bin-script =
|
||||
|
||||
+# If we're bootstrapping, install a dummy gnu/stubs.h along with the
|
||||
+# other headers, so 'make install-headers' produces a useable include
|
||||
+# tree. Otherwise, install gnu/stubs.h later, after the rest of the
|
||||
+# build is done.
|
||||
+ifeq ($(install-bootstrap-headers),yes)
|
||||
+install-headers: $(inst_includedir)/gnu/stubs.h
|
||||
+else
|
||||
+install-others = $(inst_includedir)/gnu/stubs.h
|
||||
+endif
|
||||
+
|
||||
ifeq (yes,$(build-shared))
|
||||
headers += gnu/lib-names.h
|
||||
endif
|
||||
@@ -416,6 +425,16 @@ others: $(common-objpfx)testrun.sh $(common-objpfx)debugglibc.sh
|
||||
|
||||
subdir-stubs := $(foreach dir,$(subdirs),$(common-objpfx)$(dir)/stubs)
|
||||
|
||||
+# gnu/stubs.h depends (via the subdir 'stubs' targets) on all the .o
|
||||
+# files in EGLIBC. For bootstrapping a GCC/EGLIBC pair, an empty
|
||||
+# gnu/stubs.h is good enough.
|
||||
+ifeq ($(install-bootstrap-headers),yes)
|
||||
+$(inst_includedir)/gnu/stubs.h: include/stubs-bootstrap.h $(+force)
|
||||
+ $(make-target-directory)
|
||||
+ $(INSTALL_DATA) $< $@
|
||||
+
|
||||
+installed-stubs =
|
||||
+else
|
||||
ifndef abi-variants
|
||||
installed-stubs = $(inst_includedir)/gnu/stubs.h
|
||||
else
|
||||
@@ -442,6 +461,7 @@ $(inst_includedir)/gnu/stubs.h: $(+force)
|
||||
|
||||
install-others-nosubdir: $(installed-stubs)
|
||||
endif
|
||||
+endif
|
||||
|
||||
|
||||
# Since stubs.h is never needed when building the library, we simplify the
|
||||
diff --git a/include/stubs-bootstrap.h b/include/stubs-bootstrap.h
|
||||
new file mode 100644
|
||||
index 0000000000..1d2b669aff
|
||||
--- /dev/null
|
||||
+++ b/include/stubs-bootstrap.h
|
||||
@@ -0,0 +1,12 @@
|
||||
+/* Placeholder stubs.h file for bootstrapping.
|
||||
+
|
||||
+ When bootstrapping a GCC/EGLIBC pair, GCC requires that the EGLIBC
|
||||
+ headers be installed, but we can't fully build EGLIBC without that
|
||||
+ GCC. So we run the command:
|
||||
+
|
||||
+ make install-headers install-bootstrap-headers=yes
|
||||
+
|
||||
+ to install the headers GCC needs, but avoid building certain
|
||||
+ difficult headers. The <gnu/stubs.h> header depends, via the
|
||||
+ EGLIBC subdir 'stubs' make targets, on every .o file in EGLIBC, but
|
||||
+ an empty stubs.h like this will do fine for GCC. */
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From 330c4e50e28e29c31fb8d6ab39cdbb2af4d3def7 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:55:53 +0000
|
||||
Subject: [PATCH] eglibc: Resolve __fpscr_values on SH4
|
||||
|
||||
2010-09-29 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
|
||||
Andrew Stubbs <ams@codesourcery.com>
|
||||
|
||||
Resolve SH's __fpscr_values to symbol in libc.so.
|
||||
|
||||
* sysdeps/sh/sh4/fpu/fpu_control.h: Add C++ __set_fpscr prototype.
|
||||
* sysdeps/unix/sysv/linux/sh/Versions (GLIBC_2.2): Add __fpscr_values.
|
||||
* sysdeps/unix/sysv/linux/sh/sysdep.S (___fpscr_values): New constant.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/unix/sysv/linux/sh/Versions | 1 +
|
||||
sysdeps/unix/sysv/linux/sh/sysdep.S | 11 +++++++++++
|
||||
2 files changed, 12 insertions(+)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/sh/Versions b/sysdeps/unix/sysv/linux/sh/Versions
|
||||
index e0938c4165..ca1d7da339 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sh/Versions
|
||||
+++ b/sysdeps/unix/sysv/linux/sh/Versions
|
||||
@@ -2,6 +2,7 @@ libc {
|
||||
GLIBC_2.2 {
|
||||
# functions used in other libraries
|
||||
__xstat64; __fxstat64; __lxstat64;
|
||||
+ __fpscr_values;
|
||||
|
||||
# a*
|
||||
alphasort64;
|
||||
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
|
||||
index a18fbb2e8b..59421bfbb0 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
|
||||
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
|
||||
@@ -30,3 +30,14 @@ ENTRY (__syscall_error)
|
||||
|
||||
#define __syscall_error __syscall_error_1
|
||||
#include <sysdeps/unix/sh/sysdep.S>
|
||||
+
|
||||
+ .data
|
||||
+ .align 3
|
||||
+ .globl ___fpscr_values
|
||||
+ .type ___fpscr_values, @object
|
||||
+ .size ___fpscr_values, 8
|
||||
+___fpscr_values:
|
||||
+ .long 0
|
||||
+ .long 0x80000
|
||||
+weak_alias (___fpscr_values, __fpscr_values)
|
||||
+
|
||||
|
|
@ -1,560 +0,0 @@
|
|||
From 557ed640b26bd208ce8d4a6fd725b124893668d7 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 01:33:49 +0000
|
||||
Subject: [PATCH] eglibc: Forward port cross locale generation support
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/Makefile | 3 +-
|
||||
locale/catnames.c | 46 +++++++++++++++++++++++++++
|
||||
locale/localeinfo.h | 2 +-
|
||||
locale/programs/charmap-dir.c | 6 ++++
|
||||
locale/programs/ld-collate.c | 17 +++++-----
|
||||
locale/programs/ld-ctype.c | 27 ++++++++--------
|
||||
locale/programs/ld-time.c | 31 ++++++++++++------
|
||||
locale/programs/linereader.c | 2 +-
|
||||
locale/programs/localedef.c | 8 +++++
|
||||
locale/programs/locfile.c | 5 ++-
|
||||
locale/programs/locfile.h | 59 +++++++++++++++++++++++++++++++++--
|
||||
locale/setlocale.c | 29 -----------------
|
||||
12 files changed, 167 insertions(+), 68 deletions(-)
|
||||
create mode 100644 locale/catnames.c
|
||||
|
||||
diff --git a/locale/Makefile b/locale/Makefile
|
||||
index b7c60681fa..07c606cde3 100644
|
||||
--- a/locale/Makefile
|
||||
+++ b/locale/Makefile
|
||||
@@ -26,7 +26,8 @@ headers = langinfo.h locale.h bits/locale.h \
|
||||
bits/types/locale_t.h bits/types/__locale_t.h
|
||||
routines = setlocale findlocale loadlocale loadarchive \
|
||||
localeconv nl_langinfo nl_langinfo_l mb_cur_max \
|
||||
- newlocale duplocale freelocale uselocale
|
||||
+ newlocale duplocale freelocale uselocale \
|
||||
+ catnames
|
||||
tests = tst-C-locale tst-locname tst-duplocale
|
||||
tests-container = tst-localedef-path-norm
|
||||
categories = ctype messages monetary numeric time paper name \
|
||||
diff --git a/locale/catnames.c b/locale/catnames.c
|
||||
new file mode 100644
|
||||
index 0000000000..538f3f5edb
|
||||
--- /dev/null
|
||||
+++ b/locale/catnames.c
|
||||
@@ -0,0 +1,46 @@
|
||||
+/* Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, write to the Free
|
||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
+ 02111-1307 USA. */
|
||||
+
|
||||
+#include "localeinfo.h"
|
||||
+
|
||||
+/* Define an array of category names (also the environment variable names). */
|
||||
+const struct catnamestr_t _nl_category_names attribute_hidden =
|
||||
+ {
|
||||
+#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
+ category_name,
|
||||
+#include "categories.def"
|
||||
+#undef DEFINE_CATEGORY
|
||||
+ };
|
||||
+
|
||||
+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
|
||||
+ {
|
||||
+#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
+ [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
|
||||
+#include "categories.def"
|
||||
+#undef DEFINE_CATEGORY
|
||||
+ };
|
||||
+
|
||||
+/* An array of their lengths, for convenience. */
|
||||
+const uint8_t _nl_category_name_sizes[] attribute_hidden =
|
||||
+ {
|
||||
+#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
+ [category] = sizeof (category_name) - 1,
|
||||
+#include "categories.def"
|
||||
+#undef DEFINE_CATEGORY
|
||||
+ [LC_ALL] = sizeof ("LC_ALL") - 1
|
||||
+ };
|
||||
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
|
||||
index 22f9dc1140..fa31b3c5ea 100644
|
||||
--- a/locale/localeinfo.h
|
||||
+++ b/locale/localeinfo.h
|
||||
@@ -230,7 +230,7 @@ __libc_tsd_define (extern, locale_t, LOCALE)
|
||||
unused. We can manage this playing some tricks with weak references.
|
||||
But with thread-local locale settings, it becomes quite ungainly unless
|
||||
we can use __thread variables. So only in that case do we attempt this. */
|
||||
-#ifndef SHARED
|
||||
+#if !defined SHARED && !defined IN_GLIBC_LOCALEDEF
|
||||
# include <tls.h>
|
||||
# define NL_CURRENT_INDIRECT 1
|
||||
#endif
|
||||
diff --git a/locale/programs/charmap-dir.c b/locale/programs/charmap-dir.c
|
||||
index 4841bfd05d..ffcba1fd79 100644
|
||||
--- a/locale/programs/charmap-dir.c
|
||||
+++ b/locale/programs/charmap-dir.c
|
||||
@@ -18,7 +18,9 @@
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <libintl.h>
|
||||
+#ifndef NO_UNCOMPRESS
|
||||
#include <spawn.h>
|
||||
+#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -154,6 +156,7 @@ charmap_closedir (CHARMAP_DIR *cdir)
|
||||
return closedir (dir);
|
||||
}
|
||||
|
||||
+#ifndef NO_UNCOMPRESS
|
||||
/* Creates a subprocess decompressing the given pathname, and returns
|
||||
a stream reading its output (the decompressed data). */
|
||||
static
|
||||
@@ -202,6 +205,7 @@ fopen_uncompressed (const char *pathname, const char *compressor)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/* Opens a charmap for reading, given its name (not an alias name). */
|
||||
FILE *
|
||||
@@ -224,6 +228,7 @@ charmap_open (const char *directory, const char *name)
|
||||
if (stream != NULL)
|
||||
return stream;
|
||||
|
||||
+#ifndef NO_UNCOMPRESS
|
||||
memcpy (p, ".gz", 4);
|
||||
stream = fopen_uncompressed (pathname, "gzip");
|
||||
if (stream != NULL)
|
||||
@@ -233,6 +238,7 @@ charmap_open (const char *directory, const char *name)
|
||||
stream = fopen_uncompressed (pathname, "bzip2");
|
||||
if (stream != NULL)
|
||||
return stream;
|
||||
+#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
|
||||
index 0af21e05e2..4980b0c52f 100644
|
||||
--- a/locale/programs/ld-collate.c
|
||||
+++ b/locale/programs/ld-collate.c
|
||||
@@ -349,7 +349,7 @@ new_element (struct locale_collate_t *collate, const char *mbs, size_t mbslen,
|
||||
}
|
||||
if (wcs != NULL)
|
||||
{
|
||||
- size_t nwcs = wcslen ((wchar_t *) wcs);
|
||||
+ size_t nwcs = wcslen_uint32 (wcs);
|
||||
uint32_t zero = 0;
|
||||
/* Handle <U0000> as a single character. */
|
||||
if (nwcs == 0)
|
||||
@@ -1772,8 +1772,7 @@ symbol `%s' has the same encoding as"), (*eptr)->name);
|
||||
|
||||
if ((*eptr)->nwcs == runp->nwcs)
|
||||
{
|
||||
- int c = wmemcmp ((wchar_t *) (*eptr)->wcs,
|
||||
- (wchar_t *) runp->wcs, runp->nwcs);
|
||||
+ int c = wmemcmp_uint32 ((*eptr)->wcs, runp->wcs, runp->nwcs);
|
||||
|
||||
if (c == 0)
|
||||
{
|
||||
@@ -2000,9 +1999,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
|
||||
one consecutive entry. */
|
||||
if (runp->wcnext != NULL
|
||||
&& runp->nwcs == runp->wcnext->nwcs
|
||||
- && wmemcmp ((wchar_t *) runp->wcs,
|
||||
- (wchar_t *)runp->wcnext->wcs,
|
||||
- runp->nwcs - 1) == 0
|
||||
+ && wmemcmp_uint32 (runp->wcs,
|
||||
+ runp->wcnext->wcs,
|
||||
+ runp->nwcs - 1) == 0
|
||||
&& (runp->wcs[runp->nwcs - 1]
|
||||
== runp->wcnext->wcs[runp->nwcs - 1] + 1))
|
||||
{
|
||||
@@ -2026,9 +2025,9 @@ add_to_tablewc (uint32_t ch, struct element_t *runp)
|
||||
runp = runp->wcnext;
|
||||
while (runp->wcnext != NULL
|
||||
&& runp->nwcs == runp->wcnext->nwcs
|
||||
- && wmemcmp ((wchar_t *) runp->wcs,
|
||||
- (wchar_t *)runp->wcnext->wcs,
|
||||
- runp->nwcs - 1) == 0
|
||||
+ && wmemcmp_uint32 (runp->wcs,
|
||||
+ runp->wcnext->wcs,
|
||||
+ runp->nwcs - 1) == 0
|
||||
&& (runp->wcs[runp->nwcs - 1]
|
||||
== runp->wcnext->wcs[runp->nwcs - 1] + 1));
|
||||
|
||||
diff --git a/locale/programs/ld-ctype.c b/locale/programs/ld-ctype.c
|
||||
index 2fb579bbbf..d0be99581c 100644
|
||||
--- a/locale/programs/ld-ctype.c
|
||||
+++ b/locale/programs/ld-ctype.c
|
||||
@@ -915,7 +915,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap,
|
||||
allocate_arrays (ctype, charmap, ctype->repertoire);
|
||||
|
||||
default_missing_len = (ctype->default_missing
|
||||
- ? wcslen ((wchar_t *) ctype->default_missing)
|
||||
+ ? wcslen_uint32 (ctype->default_missing)
|
||||
: 0);
|
||||
|
||||
init_locale_data (&file, nelems);
|
||||
@@ -1927,7 +1927,7 @@ read_translit_entry (struct linereader *ldfile, struct locale_ctype_t *ctype,
|
||||
ignore = 1;
|
||||
else
|
||||
/* This value is usable. */
|
||||
- obstack_grow (ob, to_wstr, wcslen ((wchar_t *) to_wstr) * 4);
|
||||
+ obstack_grow (ob, to_wstr, wcslen_uint32 (to_wstr) * 4);
|
||||
|
||||
first = 0;
|
||||
}
|
||||
@@ -2461,8 +2461,8 @@ with character code range values one must use the absolute ellipsis `...'"));
|
||||
}
|
||||
|
||||
handle_tok_digit:
|
||||
- class_bit = _ISwdigit;
|
||||
- class256_bit = _ISdigit;
|
||||
+ class_bit = BITw (tok_digit);
|
||||
+ class256_bit = BIT (tok_digit);
|
||||
handle_digits = 1;
|
||||
goto read_charclass;
|
||||
|
||||
@@ -3904,8 +3904,7 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
|
||||
|
||||
while (idx < number)
|
||||
{
|
||||
- int res = wcscmp ((const wchar_t *) sorted[idx]->from,
|
||||
- (const wchar_t *) runp->from);
|
||||
+ int res = wcscmp_uint32 (sorted[idx]->from, runp->from);
|
||||
if (res == 0)
|
||||
{
|
||||
replace = 1;
|
||||
@@ -3942,11 +3941,11 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
|
||||
for (size_t cnt = 0; cnt < number; ++cnt)
|
||||
{
|
||||
struct translit_to_t *srunp;
|
||||
- from_len += wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
|
||||
+ from_len += wcslen_uint32 (sorted[cnt]->from) + 1;
|
||||
srunp = sorted[cnt]->to;
|
||||
while (srunp != NULL)
|
||||
{
|
||||
- to_len += wcslen ((const wchar_t *) srunp->str) + 1;
|
||||
+ to_len += wcslen_uint32 (srunp->str) + 1;
|
||||
srunp = srunp->next;
|
||||
}
|
||||
/* Plus one for the extra NUL character marking the end of
|
||||
@@ -3970,18 +3969,18 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap,
|
||||
ctype->translit_from_idx[cnt] = from_len;
|
||||
ctype->translit_to_idx[cnt] = to_len;
|
||||
|
||||
- len = wcslen ((const wchar_t *) sorted[cnt]->from) + 1;
|
||||
- wmemcpy ((wchar_t *) &ctype->translit_from_tbl[from_len],
|
||||
- (const wchar_t *) sorted[cnt]->from, len);
|
||||
+ len = wcslen_uint32 (sorted[cnt]->from) + 1;
|
||||
+ wmemcpy_uint32 (&ctype->translit_from_tbl[from_len],
|
||||
+ sorted[cnt]->from, len);
|
||||
from_len += len;
|
||||
|
||||
ctype->translit_to_idx[cnt] = to_len;
|
||||
srunp = sorted[cnt]->to;
|
||||
while (srunp != NULL)
|
||||
{
|
||||
- len = wcslen ((const wchar_t *) srunp->str) + 1;
|
||||
- wmemcpy ((wchar_t *) &ctype->translit_to_tbl[to_len],
|
||||
- (const wchar_t *) srunp->str, len);
|
||||
+ len = wcslen_uint32 (srunp->str) + 1;
|
||||
+ wmemcpy_uint32 (&ctype->translit_to_tbl[to_len],
|
||||
+ srunp->str, len);
|
||||
to_len += len;
|
||||
srunp = srunp->next;
|
||||
}
|
||||
diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
|
||||
index dcd2a2386d..6814740325 100644
|
||||
--- a/locale/programs/ld-time.c
|
||||
+++ b/locale/programs/ld-time.c
|
||||
@@ -220,8 +220,10 @@ No definition for %s category found"), "LC_TIME");
|
||||
}
|
||||
else
|
||||
{
|
||||
+ static const uint32_t wt_fmt_ampm[]
|
||||
+ = { '%','I',':','%','M',':','%','S',' ','%','p',0 };
|
||||
time->t_fmt_ampm = "%I:%M:%S %p";
|
||||
- time->wt_fmt_ampm = (const uint32_t *) L"%I:%M:%S %p";
|
||||
+ time->wt_fmt_ampm = wt_fmt_ampm;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,7 +233,7 @@ No definition for %s category found"), "LC_TIME");
|
||||
const int days_per_month[12] = { 31, 29, 31, 30, 31, 30,
|
||||
31, 31, 30, 31 ,30, 31 };
|
||||
size_t idx;
|
||||
- wchar_t *wstr;
|
||||
+ uint32_t *wstr;
|
||||
|
||||
time->era_entries =
|
||||
(struct era_data *) xmalloc (time->num_era
|
||||
@@ -457,18 +459,18 @@ No definition for %s category found"), "LC_TIME");
|
||||
}
|
||||
|
||||
/* Now generate the wide character name and format. */
|
||||
- wstr = wcschr ((wchar_t *) time->wera[idx], L':');/* end direction */
|
||||
- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end offset */
|
||||
- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end start */
|
||||
- wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end end */
|
||||
+ wstr = wcschr_uint32 (time->wera[idx], L':'); /* end direction */
|
||||
+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end offset */
|
||||
+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end start */
|
||||
+ wstr = wstr ? wcschr_uint32 (wstr + 1, L':') : NULL; /* end end */
|
||||
if (wstr != NULL)
|
||||
{
|
||||
- time->era_entries[idx].wname = (uint32_t *) wstr + 1;
|
||||
- wstr = wcschr (wstr + 1, L':'); /* end name */
|
||||
+ time->era_entries[idx].wname = wstr + 1;
|
||||
+ wstr = wcschr_uint32 (wstr + 1, L':'); /* end name */
|
||||
if (wstr != NULL)
|
||||
{
|
||||
*wstr = L'\0';
|
||||
- time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
|
||||
+ time->era_entries[idx].wformat = wstr + 1;
|
||||
}
|
||||
else
|
||||
time->era_entries[idx].wname =
|
||||
@@ -527,7 +529,16 @@ No definition for %s category found"), "LC_TIME");
|
||||
if (time->date_fmt == NULL)
|
||||
time->date_fmt = "%a %b %e %H:%M:%S %Z %Y";
|
||||
if (time->wdate_fmt == NULL)
|
||||
- time->wdate_fmt = (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y";
|
||||
+ {
|
||||
+ static const uint32_t wdate_fmt[] =
|
||||
+ { '%','a',' ',
|
||||
+ '%','b',' ',
|
||||
+ '%','e',' ',
|
||||
+ '%','H',':','%','M',':','%','S',' ',
|
||||
+ '%','Z',' ',
|
||||
+ '%','Y',0 };
|
||||
+ time->wdate_fmt = wdate_fmt;
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
diff --git a/locale/programs/linereader.c b/locale/programs/linereader.c
|
||||
index 96d3ab66db..3af379d2c3 100644
|
||||
--- a/locale/programs/linereader.c
|
||||
+++ b/locale/programs/linereader.c
|
||||
@@ -595,7 +595,7 @@ get_string (struct linereader *lr, const struct charmap_t *charmap,
|
||||
{
|
||||
int return_widestr = lr->return_widestr;
|
||||
char *buf;
|
||||
- wchar_t *buf2 = NULL;
|
||||
+ uint32_t *buf2 = NULL;
|
||||
size_t bufact;
|
||||
size_t bufmax = 56;
|
||||
|
||||
diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
|
||||
index 832c8fd1fc..fe689b3ae1 100644
|
||||
--- a/locale/programs/localedef.c
|
||||
+++ b/locale/programs/localedef.c
|
||||
@@ -109,6 +109,7 @@ void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version;
|
||||
#define OPT_NO_WARN 402
|
||||
#define OPT_WARN 403
|
||||
#define OPT_NO_HARD_LINKS 404
|
||||
+#define OPT_UINT32_ALIGN 405
|
||||
|
||||
/* Definitions of arguments for argp functions. */
|
||||
static const struct argp_option options[] =
|
||||
@@ -153,6 +154,8 @@ static const struct argp_option options[] =
|
||||
N_("Generate little-endian output") },
|
||||
{ "big-endian", OPT_BIG_ENDIAN, NULL, 0,
|
||||
N_("Generate big-endian output") },
|
||||
+ { "uint32-align", OPT_UINT32_ALIGN, "ALIGNMENT", 0,
|
||||
+ N_("Set the target's uint32_t alignment in bytes (default 4)") },
|
||||
{ NULL, 0, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
@@ -243,12 +246,14 @@ main (int argc, char *argv[])
|
||||
ctype locale. (P1003.2 4.35.5.2) */
|
||||
setlocale (LC_CTYPE, "POSIX");
|
||||
|
||||
+#ifndef NO_SYSCONF
|
||||
/* Look whether the system really allows locale definitions. POSIX
|
||||
defines error code 3 for this situation so I think it must be
|
||||
a fatal error (see P1003.2 4.35.8). */
|
||||
if (sysconf (_SC_2_LOCALEDEF) < 0)
|
||||
record_error (3, 0, _("\
|
||||
FATAL: system does not define `_POSIX2_LOCALEDEF'"));
|
||||
+#endif
|
||||
|
||||
/* Process charmap file. */
|
||||
charmap = charmap_read (charmap_file, verbose, 1, be_quiet, 1);
|
||||
@@ -400,6 +405,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
|
||||
/* Do not hard link to other locales. */
|
||||
hard_links = false;
|
||||
break;
|
||||
+ case OPT_UINT32_ALIGN:
|
||||
+ uint32_align_mask = strtol (arg, NULL, 0) - 1;
|
||||
+ break;
|
||||
case 'c':
|
||||
force_output = 1;
|
||||
break;
|
||||
diff --git a/locale/programs/locfile.c b/locale/programs/locfile.c
|
||||
index 0f1affa1d4..7d86fae801 100644
|
||||
--- a/locale/programs/locfile.c
|
||||
+++ b/locale/programs/locfile.c
|
||||
@@ -544,6 +544,9 @@ compare_files (const char *filename1, const char *filename2, size_t size,
|
||||
machine running localedef. */
|
||||
bool swap_endianness_p;
|
||||
|
||||
+/* The target's value of __align__(uint32_t) - 1. */
|
||||
+unsigned int uint32_align_mask = 3;
|
||||
+
|
||||
/* When called outside a start_locale_structure/end_locale_structure
|
||||
or start_locale_prelude/end_locale_prelude block, record that the
|
||||
next byte in FILE's obstack will be the first byte of a new element.
|
||||
@@ -621,7 +624,7 @@ add_locale_string (struct locale_file *file, const char *string)
|
||||
void
|
||||
add_locale_wstring (struct locale_file *file, const uint32_t *string)
|
||||
{
|
||||
- add_locale_uint32_array (file, string, wcslen ((const wchar_t *) string) + 1);
|
||||
+ add_locale_uint32_array (file, string, wcslen_uint32 (string) + 1);
|
||||
}
|
||||
|
||||
/* Record that FILE's next element is the 32-bit integer VALUE. */
|
||||
diff --git a/locale/programs/locfile.h b/locale/programs/locfile.h
|
||||
index c986d599ec..222a779176 100644
|
||||
--- a/locale/programs/locfile.h
|
||||
+++ b/locale/programs/locfile.h
|
||||
@@ -71,6 +71,8 @@ extern void write_all_categories (struct localedef_t *definitions,
|
||||
|
||||
extern bool swap_endianness_p;
|
||||
|
||||
+extern unsigned int uint32_align_mask;
|
||||
+
|
||||
/* Change the output to be big-endian if BIG_ENDIAN is true and
|
||||
little-endian otherwise. */
|
||||
static inline void
|
||||
@@ -89,7 +91,8 @@ maybe_swap_uint32 (uint32_t value)
|
||||
}
|
||||
|
||||
/* Likewise, but munge an array of N uint32_ts starting at ARRAY. */
|
||||
-static inline void
|
||||
+static void
|
||||
+__attribute__ ((unused))
|
||||
maybe_swap_uint32_array (uint32_t *array, size_t n)
|
||||
{
|
||||
if (swap_endianness_p)
|
||||
@@ -99,7 +102,8 @@ maybe_swap_uint32_array (uint32_t *array, size_t n)
|
||||
|
||||
/* Like maybe_swap_uint32_array, but the array of N elements is at
|
||||
the end of OBSTACK's current object. */
|
||||
-static inline void
|
||||
+static void
|
||||
+__attribute__ ((unused))
|
||||
maybe_swap_uint32_obstack (struct obstack *obstack, size_t n)
|
||||
{
|
||||
maybe_swap_uint32_array ((uint32_t *) obstack_next_free (obstack) - n, n);
|
||||
@@ -276,4 +280,55 @@ extern void identification_output (struct localedef_t *locale,
|
||||
const struct charmap_t *charmap,
|
||||
const char *output_path);
|
||||
|
||||
+static size_t wcslen_uint32 (const uint32_t *str) __attribute__ ((unused));
|
||||
+static uint32_t * wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
|
||||
+static uint32_t * wcschr_uint32 (const uint32_t *s, uint32_t ch) __attribute__ ((unused));
|
||||
+static int wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2) __attribute__ ((unused));
|
||||
+static int wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n) __attribute__ ((unused));
|
||||
+
|
||||
+static size_t
|
||||
+wcslen_uint32 (const uint32_t *str)
|
||||
+{
|
||||
+ size_t len = 0;
|
||||
+ while (str[len] != 0)
|
||||
+ len++;
|
||||
+ return len;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+wmemcmp_uint32 (const uint32_t *s1, const uint32_t *s2, size_t n)
|
||||
+{
|
||||
+ while (n-- != 0)
|
||||
+ {
|
||||
+ int diff = *s1++ - *s2++;
|
||||
+ if (diff != 0)
|
||||
+ return diff;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+wcscmp_uint32 (const uint32_t *s1, const uint32_t *s2)
|
||||
+{
|
||||
+ while (*s1 != 0 && *s1 == *s2)
|
||||
+ s1++, s2++;
|
||||
+ return *s1 - *s2;
|
||||
+}
|
||||
+
|
||||
+static uint32_t *
|
||||
+wmemcpy_uint32 (uint32_t *s1, const uint32_t *s2, size_t n)
|
||||
+{
|
||||
+ return memcpy (s1, s2, n * sizeof (uint32_t));
|
||||
+}
|
||||
+
|
||||
+static uint32_t *
|
||||
+wcschr_uint32 (const uint32_t *s, uint32_t ch)
|
||||
+{
|
||||
+ do
|
||||
+ if (*s == ch)
|
||||
+ return (uint32_t *) s;
|
||||
+ while (*s++ != 0);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
#endif /* locfile.h */
|
||||
diff --git a/locale/setlocale.c b/locale/setlocale.c
|
||||
index 19ed85ae8e..f28ca11446 100644
|
||||
--- a/locale/setlocale.c
|
||||
+++ b/locale/setlocale.c
|
||||
@@ -63,35 +63,6 @@ static char *const _nl_current_used[] =
|
||||
|
||||
#endif
|
||||
|
||||
-
|
||||
-/* Define an array of category names (also the environment variable names). */
|
||||
-const struct catnamestr_t _nl_category_names attribute_hidden =
|
||||
- {
|
||||
-#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
- category_name,
|
||||
-#include "categories.def"
|
||||
-#undef DEFINE_CATEGORY
|
||||
- };
|
||||
-
|
||||
-const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
|
||||
- {
|
||||
-#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
- [category] = offsetof (struct catnamestr_t, CATNAMEMF (__LINE__)),
|
||||
-#include "categories.def"
|
||||
-#undef DEFINE_CATEGORY
|
||||
- };
|
||||
-
|
||||
-/* An array of their lengths, for convenience. */
|
||||
-const uint8_t _nl_category_name_sizes[] attribute_hidden =
|
||||
- {
|
||||
-#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
- [category] = sizeof (category_name) - 1,
|
||||
-#include "categories.def"
|
||||
-#undef DEFINE_CATEGORY
|
||||
- [LC_ALL] = sizeof ("LC_ALL") - 1
|
||||
- };
|
||||
-
|
||||
-
|
||||
#ifdef NL_CURRENT_INDIRECT
|
||||
# define WEAK_POSTLOAD(postload) weak_extern (postload)
|
||||
#else
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From c8df3cf4556d8d78a98675865395ce42f3b67109 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 20 Apr 2016 21:11:00 -0700
|
||||
Subject: [PATCH] Define DUMMY_LOCALE_T if not defined
|
||||
|
||||
This is a hack to fix building the locale bits on an older
|
||||
CentOs 5.X machine
|
||||
|
||||
Upstream-Status: Inappropriate [other]
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/programs/config.h | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/locale/programs/config.h b/locale/programs/config.h
|
||||
index 2edcf3696c..5350101e38 100644
|
||||
--- a/locale/programs/config.h
|
||||
+++ b/locale/programs/config.h
|
||||
@@ -19,6 +19,9 @@
|
||||
#ifndef _LD_CONFIG_H
|
||||
#define _LD_CONFIG_H 1
|
||||
|
||||
+#ifndef DUMMY_LOCALE_T
|
||||
+#define DUMMY_LOCALE_T
|
||||
+#endif
|
||||
/* Use the internal textdomain used for libc messages. */
|
||||
#define PACKAGE _libc_intl_domainname
|
||||
#ifndef VERSION
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
From 2ec233ce078b74030de9195096058cd502fdc395 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 3 Aug 2018 09:42:06 -0700
|
||||
Subject: [PATCH] localedef --add-to-archive uses a hard-coded locale path
|
||||
|
||||
it doesn't exist in normal use, and there's no way to pass an
|
||||
alternative filename.
|
||||
|
||||
Add a fallback of $LOCALEARCHIVE from the environment, and allow
|
||||
creation of new locale archives that are not the system archive.
|
||||
|
||||
Upstream-Status: Inappropriate (OE-specific)
|
||||
|
||||
Signed-off-by: Ross Burton <ross.burton@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/programs/locarchive.c | 35 +++++++++++++++++++++++++----------
|
||||
1 file changed, 25 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
|
||||
index 6bb189ae37..0711c5c44e 100644
|
||||
--- a/locale/programs/locarchive.c
|
||||
+++ b/locale/programs/locarchive.c
|
||||
@@ -340,12 +340,24 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
|
||||
struct namehashent *oldnamehashtab;
|
||||
struct locarhandle new_ah;
|
||||
size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
|
||||
- char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
|
||||
- char fname[prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1];
|
||||
+ char *archivefname;
|
||||
+ char *fname;
|
||||
+ char *envarchive = getenv("LOCALEARCHIVE");
|
||||
|
||||
- if (output_prefix)
|
||||
- memcpy (archivefname, output_prefix, prefix_len);
|
||||
- strcpy (archivefname + prefix_len, ARCHIVE_NAME);
|
||||
+ if (envarchive != NULL)
|
||||
+ {
|
||||
+ archivefname = xmalloc(strlen(envarchive) + 1);
|
||||
+ fname = xmalloc(strlen(envarchive) + sizeof (".XXXXXX"));
|
||||
+ strcpy (archivefname, envarchive);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ archivefname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME));
|
||||
+ fname = xmalloc(prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1);
|
||||
+ if (output_prefix)
|
||||
+ memcpy (archivefname, output_prefix, prefix_len);
|
||||
+ strcpy (archivefname + prefix_len, ARCHIVE_NAME);
|
||||
+ }
|
||||
strcpy (stpcpy (fname, archivefname), ".XXXXXX");
|
||||
|
||||
/* Not all of the old file has to be mapped. Change this now this
|
||||
@@ -569,10 +581,13 @@ open_archive (struct locarhandle *ah, bool readonly)
|
||||
/* If ah has a non-NULL fname open that otherwise open the default. */
|
||||
if (archivefname == NULL)
|
||||
{
|
||||
- archivefname = default_fname;
|
||||
- if (output_prefix)
|
||||
- memcpy (default_fname, output_prefix, prefix_len);
|
||||
- strcpy (default_fname + prefix_len, ARCHIVE_NAME);
|
||||
+ archivefname = getenv("LOCALEARCHIVE");
|
||||
+ if (archivefname == NULL) {
|
||||
+ archivefname = default_fname;
|
||||
+ if (output_prefix)
|
||||
+ memcpy (default_fname, output_prefix, prefix_len);
|
||||
+ strcpy (default_fname + prefix_len, ARCHIVE_NAME);
|
||||
+ }
|
||||
}
|
||||
|
||||
while (1)
|
||||
@@ -585,7 +600,7 @@ open_archive (struct locarhandle *ah, bool readonly)
|
||||
the default locale archive we ignore the failure and
|
||||
list an empty archive, otherwise we print an error
|
||||
and exit. */
|
||||
- if (errno == ENOENT && archivefname == default_fname)
|
||||
+ if (errno == ENOENT)
|
||||
{
|
||||
if (readonly)
|
||||
{
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From f8289aa320b00f6db43213979cceab2325a7a611 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Hatle <mark.hatle@windriver.com>
|
||||
Date: Thu, 18 Aug 2016 14:07:58 -0500
|
||||
Subject: [PATCH] elf/dl-deps.c: Make _dl_build_local_scope breadth first
|
||||
|
||||
According to the ELF specification:
|
||||
|
||||
When resolving symbolic references, the dynamic linker examines the symbol
|
||||
tables with a breadth-first search.
|
||||
|
||||
This function was using a depth first search. By doing so the conflict
|
||||
resolution reported to the prelinker (when LD_TRACE_PRELINKING=1 is set)
|
||||
was incorrect. This caused problems when their were various circular
|
||||
dependencies between libraries. The problem usually manifested itself by
|
||||
the wrong IFUNC being executed.
|
||||
|
||||
[BZ# 20488]
|
||||
|
||||
Upstream-Status: Submitted [libc-alpha]
|
||||
|
||||
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
|
||||
---
|
||||
elf/dl-deps.c | 14 ++++++++++----
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
|
||||
index 087a49b212..c09f9334f2 100644
|
||||
--- a/elf/dl-deps.c
|
||||
+++ b/elf/dl-deps.c
|
||||
@@ -73,13 +73,19 @@ _dl_build_local_scope (struct link_map **list, struct link_map *map)
|
||||
{
|
||||
struct link_map **p = list;
|
||||
struct link_map **q;
|
||||
+ struct link_map **r;
|
||||
|
||||
*p++ = map;
|
||||
map->l_reserved = 1;
|
||||
- if (map->l_initfini)
|
||||
- for (q = map->l_initfini + 1; *q; ++q)
|
||||
- if (! (*q)->l_reserved)
|
||||
- p += _dl_build_local_scope (p, *q);
|
||||
+
|
||||
+ for (r = list; r < p; ++r)
|
||||
+ if ((*r)->l_initfini)
|
||||
+ for (q = (*r)->l_initfini + 1; *q; ++q)
|
||||
+ if (! (*q)->l_reserved)
|
||||
+ {
|
||||
+ *p++ = *q;
|
||||
+ (*q)->l_reserved = 1;
|
||||
+ }
|
||||
return p - list;
|
||||
}
|
||||
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
From 3156464f9a95bf1dafd2e22d19d7bf89c520acc1 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 3 Aug 2018 09:44:00 -0700
|
||||
Subject: [PATCH] intl: Emit no lines in bison generated files
|
||||
|
||||
Improve reproducibility:
|
||||
Do not put any #line preprocessor commands in bison generated files.
|
||||
These lines contain absolute paths containing file locations on
|
||||
the host build machine.
|
||||
|
||||
Upstream-Status: Pending
|
||||
|
||||
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
intl/Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/intl/Makefile b/intl/Makefile
|
||||
index 93478d87e8..b27a7935eb 100644
|
||||
--- a/intl/Makefile
|
||||
+++ b/intl/Makefile
|
||||
@@ -155,7 +155,7 @@ $(objpfx)tst-gettext6.out: $(objpfx)tst-gettext.out
|
||||
|
||||
CPPFLAGS += -D'LOCALEDIR="$(localedir)"' \
|
||||
-D'LOCALE_ALIAS_PATH="$(localedir)"'
|
||||
-BISONFLAGS = --yacc --name-prefix=__gettext --output
|
||||
+BISONFLAGS = --yacc --no-lines --name-prefix=__gettext --output
|
||||
|
||||
$(inst_localedir)/locale.alias: locale.alias $(+force)
|
||||
$(do-install)
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
From 881f5b8134afd9a30049b93fc79dda7a44947a5f Mon Sep 17 00:00:00 2001
|
||||
From: Martin Jansa <martin.jansa@gmail.com>
|
||||
Date: Mon, 17 Dec 2018 21:36:18 +0000
|
||||
Subject: [PATCH] locale: prevent maybe-uninitialized errors with -Os [BZ
|
||||
#19444]
|
||||
|
||||
Fixes following error when building for aarch64 with -Os:
|
||||
| In file included from strcoll_l.c:43:
|
||||
| strcoll_l.c: In function '__strcoll_l':
|
||||
| ../locale/weight.h:31:26: error: 'seq2.back_us' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
||||
| int_fast32_t i = table[*(*cpp)++];
|
||||
| ^~~~~~~~~
|
||||
| strcoll_l.c:304:18: note: 'seq2.back_us' was declared here
|
||||
| coll_seq seq1, seq2;
|
||||
| ^~~~
|
||||
| In file included from strcoll_l.c:43:
|
||||
| ../locale/weight.h:31:26: error: 'seq1.back_us' may be used uninitialized in this function [-Werror=maybe-uninitialized]
|
||||
| int_fast32_t i = table[*(*cpp)++];
|
||||
| ^~~~~~~~~
|
||||
| strcoll_l.c:304:12: note: 'seq1.back_us' was declared here
|
||||
| coll_seq seq1, seq2;
|
||||
| ^~~~
|
||||
|
||||
Partial fix for [BZ #19444]
|
||||
* locale/weight.h: Fix build with -Os.
|
||||
|
||||
Upstream-Status: Submitted [https://patchwork.ozlabs.org/patch/1014766]
|
||||
|
||||
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
locale/weight.h | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/locale/weight.h b/locale/weight.h
|
||||
index 723e1fefda..f5798d379a 100644
|
||||
--- a/locale/weight.h
|
||||
+++ b/locale/weight.h
|
||||
@@ -28,7 +28,14 @@ findidx (const int32_t *table,
|
||||
const unsigned char *extra,
|
||||
const unsigned char **cpp, size_t len)
|
||||
{
|
||||
+ /* With GCC 8 when compiling with -Os the compiler warns that
|
||||
+ seq1.back_us and seq2.back_us might be used uninitialized.
|
||||
+ This uninitialized use is impossible for the same reason
|
||||
+ as described in comments in locale/weightwc.h. */
|
||||
+ DIAG_PUSH_NEEDS_COMMENT;
|
||||
+ DIAG_IGNORE_Os_NEEDS_COMMENT (8, "-Wmaybe-uninitialized");
|
||||
int_fast32_t i = table[*(*cpp)++];
|
||||
+ DIAG_POP_NEEDS_COMMENT;
|
||||
const unsigned char *cp;
|
||||
const unsigned char *usrc;
|
||||
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From b4e0a034b12b313dcb82d22341bef6a66b3e9ef9 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Wed, 18 Mar 2015 00:11:22 +0000
|
||||
Subject: [PATCH] readlib: Add OECORE_KNOWN_INTERPRETER_NAMES to known names
|
||||
|
||||
This bolts in a hook for OE to pass its own version of interpreter
|
||||
names into glibc especially for multilib case, where it differs from any
|
||||
other distros
|
||||
|
||||
Upstream-Status: Inappropriate [OE specific]
|
||||
|
||||
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
elf/readlib.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/elf/readlib.c b/elf/readlib.c
|
||||
index 7383c23249..e97ea9449d 100644
|
||||
--- a/elf/readlib.c
|
||||
+++ b/elf/readlib.c
|
||||
@@ -51,6 +51,7 @@ static struct known_names interpreters[] =
|
||||
#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES
|
||||
SYSDEP_KNOWN_INTERPRETER_NAMES
|
||||
#endif
|
||||
+ OECORE_KNOWN_INTERPRETER_NAMES
|
||||
};
|
||||
|
||||
static struct known_names known_libs[] =
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
From 2ae3ff3ae28abb1d0d100b4722da7ff188de9a30 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 15 May 2020 17:05:45 -0700
|
||||
Subject: [PATCH] wordsize.h: Unify the header between arm and aarch64
|
||||
|
||||
This helps OE multilibs to not sythesize this header which causes all
|
||||
kind of recursions and other issues since wordsize is fundamental header
|
||||
and ends up including itself in many case e.g. clang tidy, bpf etc.
|
||||
|
||||
Upstream-Status: Inappropriate [ OE-Specific ]
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/aarch64/bits/wordsize.h | 8 ++++++--
|
||||
sysdeps/{aarch64 => arm}/bits/wordsize.h | 10 +++++++---
|
||||
2 files changed, 13 insertions(+), 5 deletions(-)
|
||||
copy sysdeps/{aarch64 => arm}/bits/wordsize.h (80%)
|
||||
|
||||
diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/aarch64/bits/wordsize.h
|
||||
index 91da566b74..9a754514b3 100644
|
||||
--- a/sysdeps/aarch64/bits/wordsize.h
|
||||
+++ b/sysdeps/aarch64/bits/wordsize.h
|
||||
@@ -17,12 +17,16 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
-#ifdef __LP64__
|
||||
+#if defined (__aarch64__) && defined (__LP64__)
|
||||
# define __WORDSIZE 64
|
||||
-#else
|
||||
+#elif defined (__aarch64__)
|
||||
# define __WORDSIZE 32
|
||||
# define __WORDSIZE32_SIZE_ULONG 1
|
||||
# define __WORDSIZE32_PTRDIFF_LONG 1
|
||||
+#else
|
||||
+# define __WORDSIZE 32
|
||||
+# define __WORDSIZE32_SIZE_ULONG 0
|
||||
+# define __WORDSIZE32_PTRDIFF_LONG 0
|
||||
#endif
|
||||
|
||||
#define __WORDSIZE_TIME64_COMPAT32 0
|
||||
diff --git a/sysdeps/aarch64/bits/wordsize.h b/sysdeps/arm/bits/wordsize.h
|
||||
similarity index 80%
|
||||
copy from sysdeps/aarch64/bits/wordsize.h
|
||||
copy to sysdeps/arm/bits/wordsize.h
|
||||
index 91da566b74..34fcdef1f1 100644
|
||||
--- a/sysdeps/aarch64/bits/wordsize.h
|
||||
+++ b/sysdeps/arm/bits/wordsize.h
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Determine the wordsize from the preprocessor defines.
|
||||
|
||||
- Copyright (C) 2016-2021 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2016-2021 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@@ -17,12 +17,16 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
-#ifdef __LP64__
|
||||
+#if defined (__aarch64__) && defined (__LP64__)
|
||||
# define __WORDSIZE 64
|
||||
-#else
|
||||
+#elif defined (__aarch64__)
|
||||
# define __WORDSIZE 32
|
||||
# define __WORDSIZE32_SIZE_ULONG 1
|
||||
# define __WORDSIZE32_PTRDIFF_LONG 1
|
||||
+#else
|
||||
+# define __WORDSIZE 32
|
||||
+# define __WORDSIZE32_SIZE_ULONG 0
|
||||
+# define __WORDSIZE32_PTRDIFF_LONG 0
|
||||
#endif
|
||||
|
||||
#define __WORDSIZE_TIME64_COMPAT32 0
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
From 5cc14938f05ae1354c8062f017a21f39d5fc9729 Mon Sep 17 00:00:00 2001
|
||||
From: Khem Raj <raj.khem@gmail.com>
|
||||
Date: Fri, 7 Aug 2020 14:31:16 -0700
|
||||
Subject: [PATCH] powerpc: Do not ask compiler for finding arch
|
||||
|
||||
This does not work well in cross compiling environments like OE
|
||||
and moreover it uses its own -mcpu/-march options via cflags
|
||||
|
||||
Upstream-Status: Inappropriate [ OE-Specific]
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
sysdeps/powerpc/preconfigure | 5 +----
|
||||
sysdeps/powerpc/preconfigure.ac | 5 +----
|
||||
2 files changed, 2 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/powerpc/preconfigure b/sysdeps/powerpc/preconfigure
|
||||
index dfe8e20399..bbff040f0f 100644
|
||||
--- a/sysdeps/powerpc/preconfigure
|
||||
+++ b/sysdeps/powerpc/preconfigure
|
||||
@@ -29,10 +29,7 @@ esac
|
||||
# directive which shows up, and try using it.
|
||||
case "${machine}:${submachine}" in
|
||||
*powerpc*:)
|
||||
- archcpu=`echo "int foo () { return 0; }" \
|
||||
- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
|
||||
- | grep -E "mcpu=|.machine" -m 1 \
|
||||
- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
|
||||
+ archcpu=''
|
||||
# Note if you add patterns here you must ensure that an appropriate
|
||||
# directory exists in sysdeps/powerpc. Likewise, if we find a
|
||||
# cpu, don't let the generic configure append extra compiler options.
|
||||
diff --git a/sysdeps/powerpc/preconfigure.ac b/sysdeps/powerpc/preconfigure.ac
|
||||
index 6c63bd8257..3e925f1d48 100644
|
||||
--- a/sysdeps/powerpc/preconfigure.ac
|
||||
+++ b/sysdeps/powerpc/preconfigure.ac
|
||||
@@ -29,10 +29,7 @@ esac
|
||||
# directive which shows up, and try using it.
|
||||
case "${machine}:${submachine}" in
|
||||
*powerpc*:)
|
||||
- archcpu=`echo "int foo () { return 0; }" \
|
||||
- | $CC $CFLAGS $CPPFLAGS -S -frecord-gcc-switches -xc -o - - \
|
||||
- | grep -E "mcpu=|[.]machine" -m 1 \
|
||||
- | sed -e "s/.*machine //" -e "s/.*mcpu=\(.*\)\"/\1/"`
|
||||
+ archcpu=''
|
||||
# Note if you add patterns here you must ensure that an appropriate
|
||||
# directory exists in sysdeps/powerpc. Likewise, if we find a
|
||||
# cpu, don't let the generic configure append extra compiler options.
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
From b1971f6f1331d738d1d6b376b4741668a7546125 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Tue, 2 Feb 2021 13:45:58 -0800
|
||||
Subject: [PATCH] x86: Require full ISA support for x86-64 level marker [BZ #27318]
|
||||
|
||||
Since -march=sandybridge enables ISAs in x86-64 ISA level v3, the v3
|
||||
marker is set on libc.so. We couldn't set the needed ISA marker to v2
|
||||
since this libc won't run on all v2 machines. Technically, the v3 marker
|
||||
is correct. But the resulting libc.so won't run on Sandy Brigde, which
|
||||
is a v2 machine, even when libc is compiled with -march=sandybridge:
|
||||
|
||||
$ ./elf/ld.so ./libc.so
|
||||
./libc.so: (p) CPU ISA level is lower than required: needed: 7; got: 3
|
||||
|
||||
Instead, we require full ISA support for x86-64 level marker and disable
|
||||
x86-64 level marker for -march=sandybridge which enables ISAs between v2
|
||||
and v3.
|
||||
|
||||
Upstream-Status: Submitted [https://sourceware.org/pipermail/libc-alpha/2021-February/122297.html]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
|
||||
sysdeps/x86/configure | 7 ++++++-
|
||||
sysdeps/x86/configure.ac | 2 +-
|
||||
sysdeps/x86/isa-level.c | 21 ++++++++++++++++++++-
|
||||
3 files changed, 27 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/x86/configure b/sysdeps/x86/configure
|
||||
index 5e32dc62b3..5b20646843 100644
|
||||
--- a/sysdeps/x86/configure
|
||||
+++ b/sysdeps/x86/configure
|
||||
@@ -133,7 +133,12 @@ if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest c
|
||||
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
test $ac_status = 0; }; }; then
|
||||
count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l`
|
||||
- if test "$count" = 1; then
|
||||
+ if test "$count" = 1 && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -DINCLUDE_X86_ISA_LEVEL -S -o conftest.s $srcdir/sysdeps/x86/isa-level.c'
|
||||
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
|
||||
+ (eval $ac_try) 2>&5
|
||||
+ ac_status=$?
|
||||
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
|
||||
+ test $ac_status = 0; }; }; then
|
||||
libc_cv_include_x86_isa_level=yes
|
||||
fi
|
||||
fi
|
||||
diff --git a/sysdeps/x86/configure.ac b/sysdeps/x86/configure.ac
|
||||
index f94088f377..54ecd33d2c 100644
|
||||
--- a/sysdeps/x86/configure.ac
|
||||
+++ b/sysdeps/x86/configure.ac
|
||||
@@ -100,7 +100,7 @@ EOF
|
||||
libc_cv_include_x86_isa_level=no
|
||||
if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -nostartfiles -nostdlib -r -o conftest conftest1.S conftest2.S); then
|
||||
count=`LC_ALL=C $READELF -n conftest | grep NT_GNU_PROPERTY_TYPE_0 | wc -l`
|
||||
- if test "$count" = 1; then
|
||||
+ if test "$count" = 1 && AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -DINCLUDE_X86_ISA_LEVEL -S -o conftest.s $srcdir/sysdeps/x86/isa-level.c); then
|
||||
libc_cv_include_x86_isa_level=yes
|
||||
fi
|
||||
fi
|
||||
diff --git a/sysdeps/x86/isa-level.c b/sysdeps/x86/isa-level.c
|
||||
index aaf524cb56..7f83449061 100644
|
||||
--- a/sysdeps/x86/isa-level.c
|
||||
+++ b/sysdeps/x86/isa-level.c
|
||||
@@ -25,12 +25,17 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
-#include <elf.h>
|
||||
+#ifdef _LIBC
|
||||
+# include <elf.h>
|
||||
+#endif
|
||||
|
||||
/* ELF program property for x86 ISA level. */
|
||||
#ifdef INCLUDE_X86_ISA_LEVEL
|
||||
# if defined __x86_64__ || defined __FXSR__ || !defined _SOFT_FLOAT \
|
||||
|| defined __MMX__ || defined __SSE__ || defined __SSE2__
|
||||
+# if !defined __SSE__ || !defined __SSE2__
|
||||
+# error "Missing ISAs for x86-64 ISA level baseline"
|
||||
+# endif
|
||||
# define ISA_BASELINE GNU_PROPERTY_X86_ISA_1_BASELINE
|
||||
# else
|
||||
# define ISA_BASELINE 0
|
||||
@@ -40,6 +45,11 @@
|
||||
|| (defined __x86_64__ && defined __LAHF_SAHF__) \
|
||||
|| defined __POPCNT__ || defined __SSE3__ \
|
||||
|| defined __SSSE3__ || defined __SSE4_1__ || defined __SSE4_2__
|
||||
+# if !defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 \
|
||||
+ || !defined __POPCNT__ || !defined __SSE3__ \
|
||||
+ || !defined __SSSE3__ || !defined __SSE4_1__ || !defined __SSE4_2__
|
||||
+# error "Missing ISAs for x86-64 ISA level v2"
|
||||
+# endif
|
||||
# define ISA_V2 GNU_PROPERTY_X86_ISA_1_V2
|
||||
# else
|
||||
# define ISA_V2 0
|
||||
@@ -48,6 +58,10 @@
|
||||
# if defined __AVX__ || defined __AVX2__ || defined __F16C__ \
|
||||
|| defined __FMA__ || defined __LZCNT__ || defined __MOVBE__ \
|
||||
|| defined __XSAVE__
|
||||
+# if !defined __AVX__ || !defined __AVX2__ || !defined __F16C__ \
|
||||
+ || !defined __FMA__ || !defined __LZCNT__
|
||||
+# error "Missing ISAs for x86-64 ISA level v3"
|
||||
+# endif
|
||||
# define ISA_V3 GNU_PROPERTY_X86_ISA_1_V3
|
||||
# else
|
||||
# define ISA_V3 0
|
||||
@@ -55,6 +69,11 @@
|
||||
|
||||
# if defined __AVX512F__ || defined __AVX512BW__ || defined __AVX512CD__ \
|
||||
|| defined __AVX512DQ__ || defined __AVX512VL__
|
||||
+# if !defined __AVX512F__ || !defined __AVX512BW__ \
|
||||
+ || !defined __AVX512CD__ || !defined __AVX512DQ__ \
|
||||
+ || !defined __AVX512VL__
|
||||
+# error "Missing ISAs for x86-64 ISA level v4"
|
||||
+# endif
|
||||
# define ISA_V4 GNU_PROPERTY_X86_ISA_1_V4
|
||||
# else
|
||||
# define ISA_V4 0
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
From 044e603b698093cf48f6e6229e0b66acf05227e4 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Fri, 19 Feb 2021 13:29:00 +0100
|
||||
Subject: [PATCH] string: Work around GCC PR 98512 in rawmemchr
|
||||
|
||||
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commit;h=044e603b698093cf48f6e6229e0b66acf05227e4]
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
---
|
||||
string/rawmemchr.c | 26 +++++++++++++++-----------
|
||||
1 file changed, 15 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/string/rawmemchr.c b/string/rawmemchr.c
|
||||
index 59bbeeaa42..b8523118e5 100644
|
||||
--- a/string/rawmemchr.c
|
||||
+++ b/string/rawmemchr.c
|
||||
@@ -22,24 +22,28 @@
|
||||
# define RAWMEMCHR __rawmemchr
|
||||
#endif
|
||||
|
||||
-/* Find the first occurrence of C in S. */
|
||||
-void *
|
||||
-RAWMEMCHR (const void *s, int c)
|
||||
-{
|
||||
- DIAG_PUSH_NEEDS_COMMENT;
|
||||
+/* The pragmata should be nested inside RAWMEMCHR below, but that
|
||||
+ triggers GCC PR 98512. */
|
||||
+DIAG_PUSH_NEEDS_COMMENT;
|
||||
#if __GNUC_PREREQ (7, 0)
|
||||
- /* GCC 8 warns about the size passed to memchr being larger than
|
||||
- PTRDIFF_MAX; the use of SIZE_MAX is deliberate here. */
|
||||
- DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-overflow=");
|
||||
+/* GCC 8 warns about the size passed to memchr being larger than
|
||||
+ PTRDIFF_MAX; the use of SIZE_MAX is deliberate here. */
|
||||
+DIAG_IGNORE_NEEDS_COMMENT (8, "-Wstringop-overflow=");
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
- /* Likewise GCC 11, with a different warning option. */
|
||||
- DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overread");
|
||||
+/* Likewise GCC 11, with a different warning option. */
|
||||
+DIAG_IGNORE_NEEDS_COMMENT (11, "-Wstringop-overread");
|
||||
#endif
|
||||
+
|
||||
+/* Find the first occurrence of C in S. */
|
||||
+void *
|
||||
+RAWMEMCHR (const void *s, int c)
|
||||
+{
|
||||
if (c != '\0')
|
||||
return memchr (s, c, (size_t)-1);
|
||||
- DIAG_POP_NEEDS_COMMENT;
|
||||
return (char *)s + strlen (s);
|
||||
}
|
||||
libc_hidden_def (__rawmemchr)
|
||||
weak_alias (__rawmemchr, rawmemchr)
|
||||
+
|
||||
+DIAG_POP_NEEDS_COMMENT;
|
||||
--
|
||||
2.30.1
|
||||
|
||||
|
|
@ -1,185 +0,0 @@
|
|||
From 750b00a1ddae220403fd892a6fd4e0791ffd154a Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Fri, 18 Sep 2020 07:55:14 -0700
|
||||
Subject: [PATCH] x86: Handle _SC_LEVEL1_ICACHE_LINESIZE [BZ #27444]
|
||||
|
||||
x86: Move x86 processor cache info to cpu_features
|
||||
|
||||
missed _SC_LEVEL1_ICACHE_LINESIZE.
|
||||
|
||||
1. Add level1_icache_linesize to struct cpu_features.
|
||||
2. Initialize level1_icache_linesize by calling handle_intel,
|
||||
handle_zhaoxin and handle_amd with _SC_LEVEL1_ICACHE_LINESIZE.
|
||||
3. Return level1_icache_linesize for _SC_LEVEL1_ICACHE_LINESIZE.
|
||||
|
||||
Upstream-Status: Backport [https://sourceware.org/bugzilla/show_bug.cgi?id=27444]
|
||||
Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com>
|
||||
---
|
||||
sysdeps/x86/Makefile | 8 +++
|
||||
sysdeps/x86/cacheinfo.c | 3 +
|
||||
sysdeps/x86/dl-cacheinfo.h | 6 ++
|
||||
sysdeps/x86/include/cpu-features.h | 2 +
|
||||
.../x86/tst-sysconf-cache-linesize-static.c | 1 +
|
||||
sysdeps/x86/tst-sysconf-cache-linesize.c | 57 +++++++++++++++++++
|
||||
6 files changed, 77 insertions(+)
|
||||
create mode 100644 sysdeps/x86/tst-sysconf-cache-linesize-static.c
|
||||
create mode 100644 sysdeps/x86/tst-sysconf-cache-linesize.c
|
||||
|
||||
diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile
|
||||
index dd82674342..d231263051 100644
|
||||
--- a/sysdeps/x86/Makefile
|
||||
+++ b/sysdeps/x86/Makefile
|
||||
@@ -208,3 +208,11 @@ $(objpfx)check-cet.out: $(..)sysdeps/x86/check-cet.awk \
|
||||
generated += check-cet.out
|
||||
endif
|
||||
endif
|
||||
+
|
||||
+ifeq ($(subdir),posix)
|
||||
+tests += \
|
||||
+ tst-sysconf-cache-linesize \
|
||||
+ tst-sysconf-cache-linesize-static
|
||||
+tests-static += \
|
||||
+ tst-sysconf-cache-linesize-static
|
||||
+endif
|
||||
diff --git a/sysdeps/x86/cacheinfo.c b/sysdeps/x86/cacheinfo.c
|
||||
index 7b8df45e3b..5ea4723ca6 100644
|
||||
--- a/sysdeps/x86/cacheinfo.c
|
||||
+++ b/sysdeps/x86/cacheinfo.c
|
||||
@@ -32,6 +32,9 @@ __cache_sysconf (int name)
|
||||
case _SC_LEVEL1_ICACHE_SIZE:
|
||||
return cpu_features->level1_icache_size;
|
||||
|
||||
+ case _SC_LEVEL1_ICACHE_LINESIZE:
|
||||
+ return cpu_features->level1_icache_linesize;
|
||||
+
|
||||
case _SC_LEVEL1_DCACHE_SIZE:
|
||||
return cpu_features->level1_dcache_size;
|
||||
|
||||
diff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h
|
||||
index a31fa0783a..7cd00b92f1 100644
|
||||
--- a/sysdeps/x86/dl-cacheinfo.h
|
||||
+++ b/sysdeps/x86/dl-cacheinfo.h
|
||||
@@ -707,6 +707,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)
|
||||
long int core;
|
||||
unsigned int threads = 0;
|
||||
unsigned long int level1_icache_size = -1;
|
||||
+ unsigned long int level1_icache_linesize = -1;
|
||||
unsigned long int level1_dcache_size = -1;
|
||||
unsigned long int level1_dcache_assoc = -1;
|
||||
unsigned long int level1_dcache_linesize = -1;
|
||||
@@ -726,6 +727,8 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)
|
||||
|
||||
level1_icache_size
|
||||
= handle_intel (_SC_LEVEL1_ICACHE_SIZE, cpu_features);
|
||||
+ level1_icache_linesize
|
||||
+ = handle_intel (_SC_LEVEL1_ICACHE_LINESIZE, cpu_features);
|
||||
level1_dcache_size = data;
|
||||
level1_dcache_assoc
|
||||
= handle_intel (_SC_LEVEL1_DCACHE_ASSOC, cpu_features);
|
||||
@@ -753,6 +756,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)
|
||||
shared = handle_zhaoxin (_SC_LEVEL3_CACHE_SIZE);
|
||||
|
||||
level1_icache_size = handle_zhaoxin (_SC_LEVEL1_ICACHE_SIZE);
|
||||
+ level1_icache_linesize = handle_zhaoxin (_SC_LEVEL1_ICACHE_LINESIZE);
|
||||
level1_dcache_size = data;
|
||||
level1_dcache_assoc = handle_zhaoxin (_SC_LEVEL1_DCACHE_ASSOC);
|
||||
level1_dcache_linesize = handle_zhaoxin (_SC_LEVEL1_DCACHE_LINESIZE);
|
||||
@@ -772,6 +776,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)
|
||||
shared = handle_amd (_SC_LEVEL3_CACHE_SIZE);
|
||||
|
||||
level1_icache_size = handle_amd (_SC_LEVEL1_ICACHE_SIZE);
|
||||
+ level1_icache_linesize = handle_amd (_SC_LEVEL1_ICACHE_LINESIZE);
|
||||
level1_dcache_size = data;
|
||||
level1_dcache_assoc = handle_amd (_SC_LEVEL1_DCACHE_ASSOC);
|
||||
level1_dcache_linesize = handle_amd (_SC_LEVEL1_DCACHE_LINESIZE);
|
||||
@@ -833,6 +838,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features)
|
||||
}
|
||||
|
||||
cpu_features->level1_icache_size = level1_icache_size;
|
||||
+ cpu_features->level1_icache_linesize = level1_icache_linesize;
|
||||
cpu_features->level1_dcache_size = level1_dcache_size;
|
||||
cpu_features->level1_dcache_assoc = level1_dcache_assoc;
|
||||
cpu_features->level1_dcache_linesize = level1_dcache_linesize;
|
||||
diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h
|
||||
index 624736b40e..39a3f4f311 100644
|
||||
--- a/sysdeps/x86/include/cpu-features.h
|
||||
+++ b/sysdeps/x86/include/cpu-features.h
|
||||
@@ -874,6 +874,8 @@ struct cpu_features
|
||||
unsigned long int rep_stosb_threshold;
|
||||
/* _SC_LEVEL1_ICACHE_SIZE. */
|
||||
unsigned long int level1_icache_size;
|
||||
+ /* _SC_LEVEL1_ICACHE_LINESIZE. */
|
||||
+ unsigned long int level1_icache_linesize;
|
||||
/* _SC_LEVEL1_DCACHE_SIZE. */
|
||||
unsigned long int level1_dcache_size;
|
||||
/* _SC_LEVEL1_DCACHE_ASSOC. */
|
||||
diff --git a/sysdeps/x86/tst-sysconf-cache-linesize-static.c b/sysdeps/x86/tst-sysconf-cache-linesize-static.c
|
||||
new file mode 100644
|
||||
index 0000000000..152ae68821
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/x86/tst-sysconf-cache-linesize-static.c
|
||||
@@ -0,0 +1 @@
|
||||
+#include "tst-sysconf-cache-linesize.c"
|
||||
diff --git a/sysdeps/x86/tst-sysconf-cache-linesize.c b/sysdeps/x86/tst-sysconf-cache-linesize.c
|
||||
new file mode 100644
|
||||
index 0000000000..642dbde5d2
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/x86/tst-sysconf-cache-linesize.c
|
||||
@@ -0,0 +1,57 @@
|
||||
+/* Test system cache line sizes.
|
||||
+ Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <unistd.h>
|
||||
+#include <array_length.h>
|
||||
+
|
||||
+static struct
|
||||
+{
|
||||
+ const char *name;
|
||||
+ int _SC_val;
|
||||
+} sc_options[] =
|
||||
+ {
|
||||
+#define N(name) { "_SC_"#name, _SC_##name }
|
||||
+ N (LEVEL1_ICACHE_LINESIZE),
|
||||
+ N (LEVEL1_DCACHE_LINESIZE),
|
||||
+ N (LEVEL2_CACHE_LINESIZE)
|
||||
+ };
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ int result = EXIT_SUCCESS;
|
||||
+
|
||||
+ for (int i = 0; i < array_length (sc_options); ++i)
|
||||
+ {
|
||||
+ long int scret = sysconf (sc_options[i]._SC_val);
|
||||
+ if (scret < 0)
|
||||
+ {
|
||||
+ printf ("sysconf (%s) returned < 0 (%ld)\n",
|
||||
+ sc_options[i].name, scret);
|
||||
+ result = EXIT_FAILURE;
|
||||
+ }
|
||||
+ else
|
||||
+ printf ("sysconf (%s): %ld\n", sc_options[i].name, scret);
|
||||
+ }
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From dca565886b5e8bd7966e15f0ca42ee5cff686673 Mon Sep 17 00:00:00 2001
|
||||
From: DJ Delorie <dj@redhat.com>
|
||||
Date: Thu, 25 Feb 2021 16:08:21 -0500
|
||||
Subject: [PATCH] nscd: Fix double free in netgroupcache [BZ #27462]
|
||||
|
||||
In commit 745664bd798ec8fd50438605948eea594179fba1 a use-after-free
|
||||
was fixed, but this led to an occasional double-free. This patch
|
||||
tracks the "live" allocation better.
|
||||
|
||||
Tested manually by a third party.
|
||||
|
||||
Related: RHBZ 1927877
|
||||
|
||||
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||
|
||||
Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commit;h=dca565886b5e8bd7966e15f0ca42ee5cff686673]
|
||||
|
||||
CVE: CVE-2021-27645
|
||||
|
||||
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||
Signed-off-by: Khairul Rohaizzat Jamaluddin <khairul.rohaizzat.jamaluddin@intel.com>
|
||||
---
|
||||
nscd/netgroupcache.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
|
||||
index dba6ceec1b..ad2daddafd 100644
|
||||
--- a/nscd/netgroupcache.c
|
||||
+++ b/nscd/netgroupcache.c
|
||||
@@ -248,7 +248,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
|
||||
: NULL);
|
||||
ndomain = (ndomain ? newbuf + ndomaindiff
|
||||
: NULL);
|
||||
- buffer = newbuf;
|
||||
+ *tofreep = buffer = newbuf;
|
||||
}
|
||||
|
||||
nhost = memcpy (buffer + bufused,
|
||||
@@ -319,7 +319,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
|
||||
else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE)
|
||||
{
|
||||
buflen *= 2;
|
||||
- buffer = xrealloc (buffer, buflen);
|
||||
+ *tofreep = buffer = xrealloc (buffer, buflen);
|
||||
}
|
||||
else if (status == NSS_STATUS_RETURN
|
||||
|| status == NSS_STATUS_NOTFOUND
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import resource
|
||||
|
||||
env = os.environ.copy()
|
||||
args = sys.argv[1:]
|
||||
targettype = args.pop(0)
|
||||
|
||||
if targettype == "user":
|
||||
qemuargs = os.environ.get("QEMU_OPTIONS", "").split()
|
||||
if not os.path.exists(qemuargs[0]):
|
||||
# ensure qemu args has a valid absolute path
|
||||
for i in os.environ.get("PATH", "").split(":"):
|
||||
if os.path.exists(os.path.join(i, qemuargs[0])):
|
||||
qemuargs[0] = os.path.join(i, qemuargs[0])
|
||||
break
|
||||
sysroot = os.environ.get("QEMU_SYSROOT", None)
|
||||
if not sysroot:
|
||||
sys.exit(-1)
|
||||
libpaths = [sysroot + "/usr/lib", sysroot + "/lib"]
|
||||
|
||||
if args[0] == "env":
|
||||
args.pop(0)
|
||||
if len(args) == 0:
|
||||
args = ["env"]
|
||||
else:
|
||||
# process options
|
||||
while args[0].startswith("-"):
|
||||
opt = args.pop(0).lstrip("-")
|
||||
if "i" in opt:
|
||||
env.clear()
|
||||
# process environment vars
|
||||
while "=" in args[0]:
|
||||
key, val = args.pop(0).split("=", 1)
|
||||
if key == "LD_LIBRARY_PATH":
|
||||
libpaths += val.split(":")
|
||||
else:
|
||||
env[key] = val
|
||||
if args[0] == "cp":
|
||||
# ignore copies, the filesystem is the same
|
||||
sys.exit(0)
|
||||
|
||||
qemuargs += ["-L", sysroot]
|
||||
qemuargs += ["-E", "LD_LIBRARY_PATH={}".format(":".join(libpaths))]
|
||||
command = qemuargs + args
|
||||
|
||||
# We've seen qemu-arm using up all system memory for some glibc
|
||||
# tests e.g. nptl/tst-pthread-timedlock-lockloop
|
||||
# Cap at 8GB since no test should need more than that
|
||||
# (5GB adds 7 failures for qemuarm glibc test run)
|
||||
limit = 8*1024*1024*1024
|
||||
resource.setrlimit(resource.RLIMIT_AS, (limit, limit))
|
||||
|
||||
elif targettype == "ssh":
|
||||
host = os.environ.get("SSH_HOST", None)
|
||||
user = os.environ.get("SSH_HOST_USER", None)
|
||||
port = os.environ.get("SSH_HOST_PORT", None)
|
||||
|
||||
command = ["ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no"]
|
||||
if port:
|
||||
command += ["-p", str(port)]
|
||||
if not host:
|
||||
sys.exit(-1)
|
||||
command += ["{}@{}".format(user, host) if user else host]
|
||||
|
||||
# wrap and replace quotes for correct transformation on ssh
|
||||
wrapped = " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in ["cd", os.getcwd()]]) + "; "
|
||||
wrapped += " ".join(["'{0}'".format(i.replace("'", r"'\''")) for i in args])
|
||||
command += ["sh", "-c", "\"{}\"".format(wrapped)]
|
||||
else:
|
||||
sys.exit(-1)
|
||||
|
||||
try:
|
||||
r = subprocess.run(command, timeout = 1800, env = env)
|
||||
sys.exit(r.returncode)
|
||||
except subprocess.TimeoutExpired:
|
||||
sys.exit(-1)
|
||||
|
||||
|
|
@ -1 +0,0 @@
|
|||
include /etc/ld.so.conf.d/*.conf
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
Older seccomp-based filters used in container frameworks will block faccessat2
|
||||
calls as it's a relatively new syscall. This isn't a big problem with
|
||||
glibc <2.33 but 2.33 will call faccessat2 itself, get EPERM, and thenn be confused
|
||||
about what to do as EPERM isn't an expected error code.
|
||||
|
||||
This manifests itself as mysterious errors, for example a kernel failing to link.
|
||||
|
||||
The root cause of bad seccomp filters is mostly fixed (systemd 247, Docker 20.10.0)
|
||||
but we can't expect everyone to upgrade, so add a workaound (originally from
|
||||
Red Hat) to handle EPERM like ENOSYS and fallback to faccessat().
|
||||
|
||||
Upstream-Status: Inappropriate
|
||||
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/faccessat.c b/sysdeps/unix/sysv/linux/faccessat.c
|
||||
index 56cb6dcc8b4d58d3..5de75032bbc93a2c 100644
|
||||
--- a/sysdeps/unix/sysv/linux/faccessat.c
|
||||
+++ b/sysdeps/unix/sysv/linux/faccessat.c
|
||||
@@ -34,7 +34,11 @@ faccessat (int fd, const char *file, int mode, int flag)
|
||||
#if __ASSUME_FACCESSAT2
|
||||
return ret;
|
||||
#else
|
||||
- if (ret == 0 || errno != ENOSYS)
|
||||
+ /* Fedora-specific workaround:
|
||||
+ As a workround for a broken systemd-nspawn that returns
|
||||
+ EPERM when a syscall is not allowed instead of ENOSYS
|
||||
+ we must check for EPERM here and fall back to faccessat. */
|
||||
+ if (ret == 0 || !(errno == ENOSYS || errno == EPERM))
|
||||
return ret;
|
||||
|
||||
if (flag & ~(AT_SYMLINK_NOFOLLOW | AT_EACCESS))
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#!/usr/bin/make
|
||||
|
||||
include $(IN)
|
||||
|
||||
all:
|
||||
rm -f $(OUT)
|
||||
touch $(OUT)
|
||||
for locale in $(SUPPORTED-LOCALES); do \
|
||||
[ $$locale = true ] && continue; \
|
||||
echo $$locale | sed 's,/, ,' >> $(OUT); \
|
||||
done
|
||||
|
|
@ -1,177 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Make passwd.db, group.db, etc.
|
||||
#
|
||||
|
||||
VAR_DB=/var/db
|
||||
|
||||
# Use make if available
|
||||
if [ -x /usr/bin/make -o -x /bin/make ]; then
|
||||
make -C $VAR_DB
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# No make available, do it in hard way
|
||||
|
||||
# passwd.db
|
||||
if [ -e /etc/passwd ]; then
|
||||
target=$VAR_DB/passwd.db
|
||||
echo -n "passwd... "
|
||||
awk 'BEGIN { FS=":"; OFS=":" } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print; \
|
||||
printf "=%s ", $$3; print }' /etc/passwd | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# group.db
|
||||
if [ -e /etc/group ]; then
|
||||
target=$VAR_DB/group.db
|
||||
echo -n "group... "
|
||||
awk 'BEGIN { FS=":"; OFS=":" } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print; \
|
||||
printf "=%s ", $$3; print; \
|
||||
if ($$4 != "") { \
|
||||
split($$4, grmems, ","); \
|
||||
for (memidx in grmems) { \
|
||||
mem=grmems[memidx]; \
|
||||
if (members[mem] == "") \
|
||||
members[mem]=$$3; \
|
||||
else \
|
||||
members[mem]=members[mem] "," $$3; \
|
||||
} \
|
||||
delete grmems; } } \
|
||||
END { for (mem in members) \
|
||||
printf ":%s %s %s\n", mem, mem, members[mem]; }' /etc/group | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# ethers.db
|
||||
if [ -e /etc/ethers ]; then
|
||||
target=$VAR_DB/ethers.db
|
||||
echo -n "ethers... "
|
||||
awk '/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print; \
|
||||
printf "=%s ", $$2; print }' /etc/ethers | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# protocols.db
|
||||
if [ -e /etc/protocols ]; then
|
||||
target=$VAR_DB/protocols.db
|
||||
echo -n "protocols... "
|
||||
awk '/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print; \
|
||||
printf "=%s ", $$2; print; \
|
||||
for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
|
||||
{ printf ".%s ", $$i; print } }' /etc/protocols | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# rpc.db
|
||||
if [ -e /etc/rpc ]; then
|
||||
target=$VAR_DB/rpc.db
|
||||
echo -n "rpc... "
|
||||
awk '/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print; \
|
||||
printf "=%s ", $$2; print; \
|
||||
for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
|
||||
{ printf ".%s ", $$i; print } }' /etc/rpc | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# services.db
|
||||
if [ -e /etc/services ]; then
|
||||
target=$VAR_DB/services.db
|
||||
echo -n "services... "
|
||||
awk 'BEGIN { FS="[ \t/]+" } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { sub(/[ \t]*#.*$$/, "");\
|
||||
printf ":%s/%s ", $$1, $$3; print; \
|
||||
printf ":%s/ ", $$1; print; \
|
||||
printf "=%s/%s ", $$2, $$3; print; \
|
||||
printf "=%s/ ", $$2; print; \
|
||||
for (i = 4; i <= NF && !($$i ~ /^#/); ++i) \
|
||||
{ printf ":%s/%s ", $$i, $$3; print; \
|
||||
printf ":%s/ ", $$i; print } }' /etc/services | \
|
||||
makedb --quiet -o $target -
|
||||
echo "done."
|
||||
fi
|
||||
|
||||
# shadow.db
|
||||
if [ -e /etc/shadow ]; then
|
||||
target=$VAR_DB/shadow.db
|
||||
echo -n "shadow... "
|
||||
awk 'BEGIN { FS=":"; OFS=":" } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print }' /etc/shadow | \
|
||||
(umask 077 && makedb --quiet -o $target -)
|
||||
echo "done."
|
||||
if chgrp shadow $target 2>/dev/null; then
|
||||
chmod g+r $target
|
||||
else
|
||||
chown 0 $target; chgrp 0 $target; chmod 600 $target;
|
||||
echo
|
||||
echo "Warning: The shadow password database $target"
|
||||
echo "has been set to be readable only by root. You may want"
|
||||
echo "to make it readable by the \`shadow' group depending"
|
||||
echo "on your configuration."
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
# gshadow.db
|
||||
if [ -e /etc/gshadow ]; then
|
||||
target=$VAR_DB/gshadow.db
|
||||
echo -n "gshadow... "
|
||||
awk 'BEGIN { FS=":"; OFS=":" } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { printf ".%s ", $$1; print }' /etc/gshadow | \
|
||||
(umask 077 && makedb --quiet -o $target -)
|
||||
echo "done."
|
||||
if chgrp shadow $target 2>/dev/null; then
|
||||
chmod g+r $target
|
||||
else
|
||||
chown 0 $target; chgrp 0 $target; chmod 600 $target
|
||||
echo
|
||||
echo "Warning: The shadow group database $target"
|
||||
echo "has been set to be readable only by root. You may want"
|
||||
echo "to make it readable by the \`shadow' group depending"
|
||||
echo "on your configuration."
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
# netgroup.db
|
||||
if [ -e /etc/netgroup ]; then
|
||||
target=$VAR_DB/netgroup.db
|
||||
echo -n "netgroup... "
|
||||
awk 'BEGIN { ini=1 } \
|
||||
/^[ \t]*$$/ { next } \
|
||||
/^[ \t]*#/ { next } \
|
||||
/^[^#]/ { if (sub(/[ \t]*\\$$/, " ") == 0) end="\n"; \
|
||||
else end=""; \
|
||||
gsub(/[ \t]+/, " "); \
|
||||
sub(/^[ \t]*/, ""); \
|
||||
if (ini == 0) printf "%s%s", $$0, end; \
|
||||
else printf ".%s %s%s", $$1, $$0, end; \
|
||||
ini=end == "" ? 0 : 1; } \
|
||||
END { if (ini==0) printf "\n" }' /etc/netgroup | \
|
||||
makedb --quiet -o $target
|
||||
echo "done."
|
||||
fi
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
require glibc.inc
|
||||
require glibc-version.inc
|
||||
|
||||
CVE_CHECK_WHITELIST += "CVE-2020-10029"
|
||||
|
||||
# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010022
|
||||
# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010023
|
||||
# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010024
|
||||
# Upstream glibc maintainers dispute there is any issue and have no plans to address it further.
|
||||
# "this is being treated as a non-security bug and no real threat."
|
||||
CVE_CHECK_WHITELIST += "CVE-2019-1010022 CVE-2019-1010023 CVE-2019-1010024"
|
||||
|
||||
# glibc https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2019-1010025
|
||||
# Allows for ASLR bypass so can bypass some hardening, not an exploit in itself, may allow
|
||||
# easier access for another. "ASLR bypass itself is not a vulnerability."
|
||||
# Potential patch at https://sourceware.org/bugzilla/show_bug.cgi?id=22853
|
||||
CVE_CHECK_WHITELIST += "CVE-2019-1010025"
|
||||
|
||||
DEPENDS += "gperf-native bison-native make-native"
|
||||
|
||||
NATIVESDKFIXES ?= ""
|
||||
NATIVESDKFIXES_class-nativesdk = "\
|
||||
file://0003-nativesdk-glibc-Look-for-host-system-ld.so.cache-as-.patch \
|
||||
file://0004-nativesdk-glibc-Fix-buffer-overrun-with-a-relocated-.patch \
|
||||
file://0005-nativesdk-glibc-Raise-the-size-of-arrays-containing-.patch \
|
||||
file://0006-nativesdk-glibc-Allow-64-bit-atomics-for-x86.patch \
|
||||
file://0007-nativesdk-glibc-Make-relocatable-install-for-locales.patch \
|
||||
file://faccessat2-perm.patch \
|
||||
"
|
||||
|
||||
SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \
|
||||
file://etc/ld.so.conf \
|
||||
file://generate-supported.mk \
|
||||
file://makedbs.sh \
|
||||
\
|
||||
${NATIVESDKFIXES} \
|
||||
file://0008-fsl-e500-e5500-e6500-603e-fsqrt-implementation.patch \
|
||||
file://0009-ppc-sqrt-Fix-undefined-reference-to-__sqrt_finite.patch \
|
||||
file://0010-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch \
|
||||
file://0011-Quote-from-bug-1443-which-explains-what-the-patch-do.patch \
|
||||
file://0012-eglibc-run-libm-err-tab.pl-with-specific-dirs-in-S.patch \
|
||||
file://0013-__ieee754_sqrt-f-are-now-inline-functions-and-call-o.patch \
|
||||
file://0014-sysdeps-gnu-configure.ac-handle-correctly-libc_cv_ro.patch \
|
||||
file://0015-yes-within-the-path-sets-wrong-config-variables.patch \
|
||||
file://0016-timezone-re-written-tzselect-as-posix-sh.patch \
|
||||
file://0017-Remove-bash-dependency-for-nscd-init-script.patch \
|
||||
file://0018-eglibc-Cross-building-and-testing-instructions.patch \
|
||||
file://0019-eglibc-Help-bootstrap-cross-toolchain.patch \
|
||||
file://0020-eglibc-Resolve-__fpscr_values-on-SH4.patch \
|
||||
file://0021-eglibc-Forward-port-cross-locale-generation-support.patch \
|
||||
file://0022-Define-DUMMY_LOCALE_T-if-not-defined.patch \
|
||||
file://0023-localedef-add-to-archive-uses-a-hard-coded-locale-pa.patch \
|
||||
file://0024-elf-dl-deps.c-Make-_dl_build_local_scope-breadth-fir.patch \
|
||||
file://0025-intl-Emit-no-lines-in-bison-generated-files.patch \
|
||||
file://0027-locale-prevent-maybe-uninitialized-errors-with-Os-BZ.patch \
|
||||
file://0028-readlib-Add-OECORE_KNOWN_INTERPRETER_NAMES-to-known-.patch \
|
||||
file://0029-wordsize.h-Unify-the-header-between-arm-and-aarch64.patch \
|
||||
file://0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch \
|
||||
file://0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch \
|
||||
file://0032-string-Work-around-GCC-PR-98512-in-rawmemchr.patch \
|
||||
file://0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch \
|
||||
file://CVE-2021-27645.patch \
|
||||
file://0001-nptl-Remove-private-futex-optimization-BZ-27304.patch \
|
||||
"
|
||||
S = "${WORKDIR}/git"
|
||||
B = "${WORKDIR}/build-${TARGET_SYS}"
|
||||
|
||||
PACKAGES_DYNAMIC = ""
|
||||
|
||||
# the -isystem in bitbake.conf screws up glibc do_stage
|
||||
BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
|
||||
TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${includedir}"
|
||||
|
||||
GLIBC_BROKEN_LOCALES = ""
|
||||
|
||||
GLIBCPIE ??= ""
|
||||
|
||||
EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
|
||||
--disable-profile \
|
||||
--disable-debug --without-gd \
|
||||
--enable-clocale=gnu \
|
||||
--with-headers=${STAGING_INCDIR} \
|
||||
--without-selinux \
|
||||
--enable-tunables \
|
||||
--enable-bind-now \
|
||||
--enable-stack-protector=strong \
|
||||
--enable-stackguard-randomization \
|
||||
--disable-crypt \
|
||||
--with-default-link \
|
||||
${@bb.utils.contains_any('SELECTED_OPTIMIZATION', '-O0 -Og', '--disable-werror', '', d)} \
|
||||
${GLIBCPIE} \
|
||||
${GLIBC_EXTRA_OECONF}"
|
||||
|
||||
EXTRA_OECONF += "${@get_libc_fpu_setting(bb, d)}"
|
||||
|
||||
EXTRA_OECONF_append_x86 = " --enable-cet"
|
||||
EXTRA_OECONF_append_x86-64 = " --enable-cet"
|
||||
|
||||
PACKAGECONFIG ??= "nscd"
|
||||
PACKAGECONFIG[nscd] = "--enable-nscd,--disable-nscd"
|
||||
|
||||
do_patch_append() {
|
||||
bb.build.exec_func('do_fix_readlib_c', d)
|
||||
}
|
||||
|
||||
do_fix_readlib_c () {
|
||||
sed -i -e 's#OECORE_KNOWN_INTERPRETER_NAMES#${EGLIBC_KNOWN_INTERPRETER_NAMES}#' ${S}/elf/readlib.c
|
||||
}
|
||||
|
||||
do_configure () {
|
||||
# override this function to avoid the autoconf/automake/aclocal/autoheader
|
||||
# calls for now
|
||||
# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
|
||||
# version check and doesn't really help with anything
|
||||
(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
|
||||
find ${S} -name "configure" | xargs touch
|
||||
CPPFLAGS="" oe_runconf
|
||||
}
|
||||
|
||||
LDFLAGS += "-fuse-ld=bfd"
|
||||
do_compile () {
|
||||
base_do_compile
|
||||
echo "Adjust ldd script"
|
||||
if [ -n "${RTLDLIST}" ]
|
||||
then
|
||||
prevrtld=`cat ${B}/elf/ldd | grep "^RTLDLIST=" | sed 's#^RTLDLIST="\?\([^"]*\)"\?$#\1#'`
|
||||
# remove duplicate entries
|
||||
newrtld=`echo $(printf '%s\n' ${prevrtld} ${RTLDLIST} | LC_ALL=C sort -u)`
|
||||
echo "ldd \"${prevrtld} ${RTLDLIST}\" -> \"${newrtld}\""
|
||||
sed -i ${B}/elf/ldd -e "s#^RTLDLIST=.*\$#RTLDLIST=\"${newrtld}\"#"
|
||||
fi
|
||||
}
|
||||
|
||||
require glibc-package.inc
|
||||
|
||||
BBCLASSEXTEND = "nativesdk"
|
||||
|
|
@ -1,331 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
We run the ldconfig in the cross fashion. make the code bitsize aware so that
|
||||
we can cross build ldconfig cache for various architectures.
|
||||
|
||||
Richard Purdie <richard.purdie@linuxfoundation.org> 2009/05/19
|
||||
Nitin A Kamble <nitin.a.kamble@intel.com> 2009/03/29
|
||||
|
||||
Index: ldconfig-native-2.12.1/readelflib.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/readelflib.c
|
||||
+++ ldconfig-native-2.12.1/readelflib.c
|
||||
@@ -40,39 +40,212 @@ do \
|
||||
|
||||
/* Returns 0 if everything is ok, != 0 in case of error. */
|
||||
int
|
||||
-process_elf_file (const char *file_name, const char *lib, int *flag,
|
||||
+process_elf_file32 (const char *file_name, const char *lib, int *flag,
|
||||
unsigned int *osversion, char **soname, void *file_contents,
|
||||
size_t file_length)
|
||||
{
|
||||
int i;
|
||||
unsigned int j;
|
||||
- ElfW(Addr) loadaddr;
|
||||
+ Elf32_Addr loadaddr;
|
||||
unsigned int dynamic_addr;
|
||||
size_t dynamic_size;
|
||||
char *program_interpreter;
|
||||
|
||||
- ElfW(Ehdr) *elf_header;
|
||||
- ElfW(Phdr) *elf_pheader, *segment;
|
||||
- ElfW(Dyn) *dynamic_segment, *dyn_entry;
|
||||
+ Elf32_Ehdr *elf_header;
|
||||
+ Elf32_Phdr *elf_pheader, *segment;
|
||||
+ Elf32_Dyn *dynamic_segment, *dyn_entry;
|
||||
char *dynamic_strings;
|
||||
|
||||
- elf_header = (ElfW(Ehdr) *) file_contents;
|
||||
+ elf_header = (Elf32_Ehdr *) file_contents;
|
||||
*osversion = 0;
|
||||
|
||||
- if (elf_header->e_ident [EI_CLASS] != ElfW (CLASS))
|
||||
+ if (elf_header->e_type != ET_DYN)
|
||||
{
|
||||
- if (opt_verbose)
|
||||
+ error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name,
|
||||
+ elf_header->e_type);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ /* Get information from elf program header. */
|
||||
+ elf_pheader = (Elf32_Phdr *) (elf_header->e_phoff + file_contents);
|
||||
+ check_ptr (elf_pheader);
|
||||
+
|
||||
+ /* The library is an elf library, now search for soname and
|
||||
+ libc5/libc6. */
|
||||
+ *flag = FLAG_ELF;
|
||||
+
|
||||
+ loadaddr = -1;
|
||||
+ dynamic_addr = 0;
|
||||
+ dynamic_size = 0;
|
||||
+ program_interpreter = NULL;
|
||||
+ for (i = 0, segment = elf_pheader;
|
||||
+ i < elf_header->e_phnum; i++, segment++)
|
||||
+ {
|
||||
+ check_ptr (segment);
|
||||
+
|
||||
+ switch (segment->p_type)
|
||||
{
|
||||
- if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
|
||||
- error (0, 0, _("%s is a 32 bit ELF file.\n"), file_name);
|
||||
- else if (elf_header->e_ident [EI_CLASS] == ELFCLASS64)
|
||||
- error (0, 0, _("%s is a 64 bit ELF file.\n"), file_name);
|
||||
- else
|
||||
- error (0, 0, _("Unknown ELFCLASS in file %s.\n"), file_name);
|
||||
+ case PT_LOAD:
|
||||
+ if (loadaddr == (Elf32_Addr) -1)
|
||||
+ loadaddr = segment->p_vaddr - segment->p_offset;
|
||||
+ break;
|
||||
+
|
||||
+ case PT_DYNAMIC:
|
||||
+ if (dynamic_addr)
|
||||
+ error (0, 0, _("more than one dynamic segment\n"));
|
||||
+
|
||||
+ dynamic_addr = segment->p_offset;
|
||||
+ dynamic_size = segment->p_filesz;
|
||||
+ break;
|
||||
+
|
||||
+ case PT_INTERP:
|
||||
+ program_interpreter = (char *) (file_contents + segment->p_offset);
|
||||
+ check_ptr (program_interpreter);
|
||||
+
|
||||
+ /* Check if this is enough to classify the binary. */
|
||||
+ for (j = 0; j < sizeof (interpreters) / sizeof (interpreters [0]);
|
||||
+ ++j)
|
||||
+ if (strcmp (program_interpreter, interpreters[j].soname) == 0)
|
||||
+ {
|
||||
+ *flag = interpreters[j].flag;
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case PT_NOTE:
|
||||
+ if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4)
|
||||
+ {
|
||||
+ Elf32_Word *abi_note = (Elf32_Word *) (file_contents
|
||||
+ + segment->p_offset);
|
||||
+ Elf32_Addr size = segment->p_filesz;
|
||||
+
|
||||
+ while (abi_note [0] != 4 || abi_note [1] != 16
|
||||
+ || abi_note [2] != 1
|
||||
+ || memcmp (abi_note + 3, "GNU", 4) != 0)
|
||||
+ {
|
||||
+#define ROUND(len) (((len) + sizeof (Elf32_Word)) - 1) & -sizeof (Elf32_Word)))
|
||||
+ Elf32_Addr) note_size = 3 * sizeof (Elf32_Word))
|
||||
+ + ROUND (abi_note[0])
|
||||
+ + ROUND (abi_note[1]);
|
||||
+
|
||||
+ if (size - 32 < note_size || note_size == 0)
|
||||
+ {
|
||||
+ size = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+ size -= note_size;
|
||||
+ abi_note = (void *) abi_note + note_size;
|
||||
+ }
|
||||
+
|
||||
+ if (size == 0)
|
||||
+ break;
|
||||
+
|
||||
+ *osversion = (abi_note [4] << 24) |
|
||||
+ ((abi_note [5] & 0xff) << 16) |
|
||||
+ ((abi_note [6] & 0xff) << 8) |
|
||||
+ (abi_note [7] & 0xff);
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+ if (loadaddr == (Elf32_Addr) -1)
|
||||
+ {
|
||||
+ /* Very strange. */
|
||||
+ loadaddr = 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Now we can read the dynamic sections. */
|
||||
+ if (dynamic_size == 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ dynamic_segment = (Elf32_Dyn *) (file_contents + dynamic_addr);
|
||||
+ check_ptr (dynamic_segment);
|
||||
+
|
||||
+ /* Find the string table. */
|
||||
+ dynamic_strings = NULL;
|
||||
+ for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ ++dyn_entry)
|
||||
+ {
|
||||
+ check_ptr (dyn_entry);
|
||||
+ if (dyn_entry->d_tag == DT_STRTAB)
|
||||
+ {
|
||||
+ dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr);
|
||||
+ check_ptr (dynamic_strings);
|
||||
+ break;
|
||||
}
|
||||
- return 1;
|
||||
}
|
||||
|
||||
+ if (dynamic_strings == NULL)
|
||||
+ return 1;
|
||||
+
|
||||
+ /* Now read the DT_NEEDED and DT_SONAME entries. */
|
||||
+ for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ ++dyn_entry)
|
||||
+ {
|
||||
+ if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME)
|
||||
+ {
|
||||
+ char *name = dynamic_strings + dyn_entry->d_un.d_val;
|
||||
+ check_ptr (name);
|
||||
+
|
||||
+ if (dyn_entry->d_tag == DT_NEEDED)
|
||||
+ {
|
||||
+
|
||||
+ if (*flag == FLAG_ELF)
|
||||
+ {
|
||||
+ /* Check if this is enough to classify the binary. */
|
||||
+ for (j = 0;
|
||||
+ j < sizeof (known_libs) / sizeof (known_libs [0]);
|
||||
+ ++j)
|
||||
+ if (strcmp (name, known_libs [j].soname) == 0)
|
||||
+ {
|
||||
+ *flag = known_libs [j].flag;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ else if (dyn_entry->d_tag == DT_SONAME)
|
||||
+ *soname = xstrdup (name);
|
||||
+
|
||||
+ /* Do we have everything we need? */
|
||||
+ if (*soname && *flag != FLAG_ELF)
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* We reach this point only if the file doesn't contain a DT_SONAME
|
||||
+ or if we can't classify the library. If it doesn't have a
|
||||
+ soname, return the name of the library. */
|
||||
+ if (*soname == NULL)
|
||||
+ *soname = xstrdup (lib);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+process_elf_file64 (const char *file_name, const char *lib, int *flag,
|
||||
+ unsigned int *osversion, char **soname, void *file_contents,
|
||||
+ size_t file_length)
|
||||
+{
|
||||
+ int i;
|
||||
+ unsigned int j;
|
||||
+ Elf64_Addr loadaddr;
|
||||
+ unsigned int dynamic_addr;
|
||||
+ size_t dynamic_size;
|
||||
+ char *program_interpreter;
|
||||
+
|
||||
+ Elf64_Ehdr *elf_header;
|
||||
+ Elf64_Phdr *elf_pheader, *segment;
|
||||
+ Elf64_Dyn *dynamic_segment, *dyn_entry;
|
||||
+ char *dynamic_strings;
|
||||
+
|
||||
+ elf_header = (Elf64_Ehdr *) file_contents;
|
||||
+ *osversion = 0;
|
||||
+
|
||||
if (elf_header->e_type != ET_DYN)
|
||||
{
|
||||
error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name,
|
||||
@@ -81,7 +254,7 @@ process_elf_file (const char *file_name,
|
||||
}
|
||||
|
||||
/* Get information from elf program header. */
|
||||
- elf_pheader = (ElfW(Phdr) *) (elf_header->e_phoff + file_contents);
|
||||
+ elf_pheader = (Elf64_Phdr *) (elf_header->e_phoff + file_contents);
|
||||
check_ptr (elf_pheader);
|
||||
|
||||
/* The library is an elf library, now search for soname and
|
||||
@@ -100,7 +273,7 @@ process_elf_file (const char *file_name,
|
||||
switch (segment->p_type)
|
||||
{
|
||||
case PT_LOAD:
|
||||
- if (loadaddr == (ElfW(Addr)) -1)
|
||||
+ if (loadaddr == (Elf64_Addr) -1)
|
||||
loadaddr = segment->p_vaddr - segment->p_offset;
|
||||
break;
|
||||
|
||||
@@ -129,16 +302,16 @@ process_elf_file (const char *file_name,
|
||||
case PT_NOTE:
|
||||
if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4)
|
||||
{
|
||||
- ElfW(Word) *abi_note = (ElfW(Word) *) (file_contents
|
||||
+ Elf64_Word *abi_note = (Elf64_Word *) (file_contents
|
||||
+ segment->p_offset);
|
||||
- ElfW(Addr) size = segment->p_filesz;
|
||||
+ Elf64_Addr size = segment->p_filesz;
|
||||
|
||||
while (abi_note [0] != 4 || abi_note [1] != 16
|
||||
|| abi_note [2] != 1
|
||||
|| memcmp (abi_note + 3, "GNU", 4) != 0)
|
||||
{
|
||||
-#define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word)))
|
||||
- ElfW(Addr) note_size = 3 * sizeof (ElfW(Word))
|
||||
+#define ROUND(len) (((len) + sizeof (Elf64_Word) - 1) & -sizeof (Elf64_Word))
|
||||
+ Elf64_Addr note_size = 3 * sizeof (Elf64_Word)
|
||||
+ ROUND (abi_note[0])
|
||||
+ ROUND (abi_note[1]);
|
||||
|
||||
@@ -166,7 +339,7 @@ process_elf_file (const char *file_name,
|
||||
}
|
||||
|
||||
}
|
||||
- if (loadaddr == (ElfW(Addr)) -1)
|
||||
+ if (loadaddr == (Elf64_Addr) -1)
|
||||
{
|
||||
/* Very strange. */
|
||||
loadaddr = 0;
|
||||
@@ -176,7 +349,7 @@ process_elf_file (const char *file_name,
|
||||
if (dynamic_size == 0)
|
||||
return 1;
|
||||
|
||||
- dynamic_segment = (ElfW(Dyn) *) (file_contents + dynamic_addr);
|
||||
+ dynamic_segment = (Elf64_Dyn *) (file_contents + dynamic_addr);
|
||||
check_ptr (dynamic_segment);
|
||||
|
||||
/* Find the string table. */
|
||||
@@ -233,3 +406,33 @@ process_elf_file (const char *file_name,
|
||||
|
||||
return 0;
|
||||
}
|
||||
+/* Returns 0 if everything is ok, != 0 in case of error. */
|
||||
+int
|
||||
+process_elf_file (const char *file_name, const char *lib, int *flag,
|
||||
+ unsigned int *osversion, char **soname, void *file_contents,
|
||||
+ size_t file_length)
|
||||
+{
|
||||
+ int i;
|
||||
+ unsigned int j;
|
||||
+ ElfW(Addr) loadaddr;
|
||||
+ unsigned int dynamic_addr;
|
||||
+ size_t dynamic_size;
|
||||
+ char *program_interpreter;
|
||||
+
|
||||
+ ElfW(Ehdr) *elf_header;
|
||||
+ ElfW(Phdr) *elf_pheader, *segment;
|
||||
+ ElfW(Dyn) *dynamic_segment, *dyn_entry;
|
||||
+ char *dynamic_strings;
|
||||
+
|
||||
+ elf_header = (ElfW(Ehdr) *) file_contents;
|
||||
+ *osversion = 0;
|
||||
+
|
||||
+ if (elf_header->e_ident [EI_CLASS] == ELFCLASS32)
|
||||
+ return process_elf_file32(file_name, lib,flag, osversion, soname, file_contents, file_length);
|
||||
+ else if (elf_header->e_ident [EI_CLASS] == ELFCLASS64)
|
||||
+ return process_elf_file64(file_name, lib,flag, osversion, soname, file_contents, file_length);
|
||||
+ error (0, 0, _("Unknown ELFCLASS in file %s.\n"), file_name);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
The files are pulled verbatim from glibc 2.5 and then patched to allow
|
||||
standalone compilation of ldconfig.
|
||||
|
||||
Richard Purdie
|
||||
OpenedHand Ltd.
|
||||
|
||||
Upgraded the ldconfig recipe to eglibc 2.12.1
|
||||
Nitin A Kamble <nitin.a.kamble@intel.com> 2011/03/29
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
From 9d62544090b08849218cd1fc52a36cdd5d90363e Mon Sep 17 00:00:00 2001
|
||||
From: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
Date: Fri, 24 Apr 2015 03:29:31 +0000
|
||||
Subject: [PATCH] Add 64-bit flag for ELF64 entries.
|
||||
|
||||
ldconfig-native was grepped from an old version of glibc, and its output
|
||||
lacks neccessary 64bit flag in entries.
|
||||
Due to this defect, ctypes.util.find_library() python function fails to
|
||||
detect any library due to the old file format that ldconfig-native
|
||||
creates. This fix sets architecture-dependent 64bit flags for 64-bit ELF.
|
||||
|
||||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com>
|
||||
---
|
||||
cache.c | 4 ++++
|
||||
ldconfig.h | 4 ++++
|
||||
readelflib.c | 34 ++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 42 insertions(+)
|
||||
|
||||
diff --git a/cache.c b/cache.c
|
||||
index a904d44..c4f5411 100644
|
||||
--- a/cache.c
|
||||
+++ b/cache.c
|
||||
@@ -121,6 +121,10 @@ print_entry (const char *lib, int flag, unsigned int osversion,
|
||||
break;
|
||||
case FLAG_MIPS64_LIBN64:
|
||||
fputs (",64bit", stdout);
|
||||
+ break;
|
||||
+ case FLAG_AARCH64_LIB64:
|
||||
+ fputs (",AArch64", stdout);
|
||||
+ break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
diff --git a/ldconfig.h b/ldconfig.h
|
||||
index fadd5ec..6a8a750 100644
|
||||
--- a/ldconfig.h
|
||||
+++ b/ldconfig.h
|
||||
@@ -34,6 +34,10 @@
|
||||
#define FLAG_POWERPC_LIB64 0x0500
|
||||
#define FLAG_MIPS64_LIBN32 0x0600
|
||||
#define FLAG_MIPS64_LIBN64 0x0700
|
||||
+#define FLAG_X8664_LIBX32 0x0800
|
||||
+#define FLAG_ARM_LIBHF 0x0900
|
||||
+#define FLAG_AARCH64_LIB64 0x0a00
|
||||
+#define FLAG_ARM_LIBSF 0x0b00
|
||||
|
||||
/* Name of auxiliary cache. */
|
||||
#define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache"
|
||||
diff --git a/readelflib.c b/readelflib.c
|
||||
index 0bf0de3..6e87afc 100644
|
||||
--- a/readelflib.c
|
||||
+++ b/readelflib.c
|
||||
@@ -28,6 +28,11 @@
|
||||
|
||||
#include "endian_extra.h"
|
||||
|
||||
+/* Work-around for old host that does not have AArch64 defined in elf.h. */
|
||||
+#ifndef EM_AARCH64
|
||||
+#define EM_AARCH64 183 /* ARM AARCH64 */
|
||||
+#endif
|
||||
+
|
||||
#undef check_ptr
|
||||
#define check_ptr(ptr) \
|
||||
do \
|
||||
@@ -290,6 +295,48 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
|
||||
libc5/libc6. */
|
||||
*flag = FLAG_ELF;
|
||||
|
||||
+ /* Set flags according to information in ELF header to align with target
|
||||
+ ldconfig */
|
||||
+ switch (elf_header->e_machine)
|
||||
+ {
|
||||
+ case EM_IA_64:
|
||||
+ /* Intel 64bit libraries are always libc.so.6+. */
|
||||
+ /* see sysdeps/unix/sysv/linux/ia64/readelflib.c */
|
||||
+ *flag |= FLAG_IA64_LIB64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ case EM_X86_64:
|
||||
+ /* X86-64 64bit libraries are always libc.so.6+. */
|
||||
+ /* see sysdeps/unix/sysv/linux/i386/readelflib.c */
|
||||
+ *flag |= FLAG_X8664_LIB64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ case EM_S390:
|
||||
+ /* S/390 64bit libraries are always libc.so.6+. */
|
||||
+ /* see sysdeps/unix/sysv/linux/s390/readelflib.c */
|
||||
+ *flag |= FLAG_S390_LIB64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ case EM_PPC64:
|
||||
+ /* PowerPC 64bit libraries are always libc.so.6+. */
|
||||
+ /* see sysdeps/unix/sysv/linux/powerpc/readelflib.c */
|
||||
+ *flag |= FLAG_POWERPC_LIB64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ case EM_MIPS:
|
||||
+ case EM_MIPS_RS3_LE:
|
||||
+ /* n64 libraries are always libc.so.6+. */
|
||||
+ /* NOTE: This does not correctly distinguish NAN2008 binaries and is possibly broken */
|
||||
+ /* see sysdeps/unix/sysv/linux/mips/readelflib.c */
|
||||
+ *flag |= FLAG_MIPS64_LIBN64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ case EM_AARCH64:
|
||||
+ /* AArch64 libraries are always libc.so.6+. */
|
||||
+ /* see sysdeps/unix/sysv/linux/arm/readelflib.c */
|
||||
+ *flag |= FLAG_AARCH64_LIB64|FLAG_ELF_LIBC6;
|
||||
+ break;
|
||||
+ default:
|
||||
+ error(0, 0, "%s is a 64-bit ELF for unknown machine %lx\n",
|
||||
+ file_name, (long)elf_header->e_machine);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
loadaddr = -1;
|
||||
dynamic_addr = 0;
|
||||
dynamic_size = 0;
|
||||
--
|
||||
|
|
@ -1,454 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
Do data input/output handling according to endien-ness of the library file. That
|
||||
enables use of ldconfig in the cross fashion for any architecture.
|
||||
|
||||
2011/04/04
|
||||
Richard Purdie <richard.purdie@linuxfoundation.org>
|
||||
Nitin Kamble <nitin.a.kamble@intel.com>
|
||||
|
||||
Index: ldconfig-native-2.12.1/readelflib.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/readelflib.c
|
||||
+++ ldconfig-native-2.12.1/readelflib.c
|
||||
@@ -38,6 +38,28 @@ do \
|
||||
} \
|
||||
while (0);
|
||||
|
||||
+int be;
|
||||
+static uint16_t read16(uint16_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return be16toh(x);
|
||||
+ return le16toh(x);
|
||||
+}
|
||||
+
|
||||
+static uint32_t read32(uint32_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return be32toh(x);
|
||||
+ return le32toh(x);
|
||||
+}
|
||||
+
|
||||
+static uint64_t read64(uint64_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return be64toh(x);
|
||||
+ return le64toh(x);
|
||||
+}
|
||||
+
|
||||
/* Returns 0 if everything is ok, != 0 in case of error. */
|
||||
int
|
||||
process_elf_file32 (const char *file_name, const char *lib, int *flag,
|
||||
@@ -59,15 +81,17 @@ process_elf_file32 (const char *file_nam
|
||||
elf_header = (Elf32_Ehdr *) file_contents;
|
||||
*osversion = 0;
|
||||
|
||||
- if (elf_header->e_type != ET_DYN)
|
||||
+ be = (elf_header->e_ident[EI_DATA] == ELFDATA2MSB);
|
||||
+
|
||||
+ if (read16(elf_header->e_type, be) != ET_DYN)
|
||||
{
|
||||
error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name,
|
||||
- elf_header->e_type);
|
||||
+ read16(elf_header->e_type, be));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Get information from elf program header. */
|
||||
- elf_pheader = (Elf32_Phdr *) (elf_header->e_phoff + file_contents);
|
||||
+ elf_pheader = (Elf32_Phdr *) (read32(elf_header->e_phoff, be) + file_contents);
|
||||
check_ptr (elf_pheader);
|
||||
|
||||
/* The library is an elf library, now search for soname and
|
||||
@@ -79,27 +103,27 @@ process_elf_file32 (const char *file_nam
|
||||
dynamic_size = 0;
|
||||
program_interpreter = NULL;
|
||||
for (i = 0, segment = elf_pheader;
|
||||
- i < elf_header->e_phnum; i++, segment++)
|
||||
+ i < read16(elf_header->e_phnum, be); i++, segment++)
|
||||
{
|
||||
check_ptr (segment);
|
||||
|
||||
- switch (segment->p_type)
|
||||
+ switch (read32(segment->p_type, be))
|
||||
{
|
||||
case PT_LOAD:
|
||||
if (loadaddr == (Elf32_Addr) -1)
|
||||
- loadaddr = segment->p_vaddr - segment->p_offset;
|
||||
+ loadaddr = read32(segment->p_vaddr, be) - read32(segment->p_offset, be);
|
||||
break;
|
||||
|
||||
case PT_DYNAMIC:
|
||||
if (dynamic_addr)
|
||||
error (0, 0, _("more than one dynamic segment\n"));
|
||||
|
||||
- dynamic_addr = segment->p_offset;
|
||||
- dynamic_size = segment->p_filesz;
|
||||
+ dynamic_addr = read32(segment->p_offset, be);
|
||||
+ dynamic_size = read32(segment->p_filesz, be);
|
||||
break;
|
||||
|
||||
case PT_INTERP:
|
||||
- program_interpreter = (char *) (file_contents + segment->p_offset);
|
||||
+ program_interpreter = (char *) (file_contents + read32(segment->p_offset, be));
|
||||
check_ptr (program_interpreter);
|
||||
|
||||
/* Check if this is enough to classify the binary. */
|
||||
@@ -113,20 +137,20 @@ process_elf_file32 (const char *file_nam
|
||||
break;
|
||||
|
||||
case PT_NOTE:
|
||||
- if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4)
|
||||
+ if (!*osversion && read32(segment->p_filesz, be) >= 32 && segment->p_align >= 4)
|
||||
{
|
||||
Elf32_Word *abi_note = (Elf32_Word *) (file_contents
|
||||
- + segment->p_offset);
|
||||
- Elf32_Addr size = segment->p_filesz;
|
||||
+ + read32(segment->p_offset, be));
|
||||
+ Elf32_Addr size = read32(segment->p_filesz, be);
|
||||
|
||||
- while (abi_note [0] != 4 || abi_note [1] != 16
|
||||
- || abi_note [2] != 1
|
||||
+ while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16
|
||||
+ || read32(abi_note [2], be) != 1
|
||||
|| memcmp (abi_note + 3, "GNU", 4) != 0)
|
||||
{
|
||||
-#define ROUND(len) (((len) + sizeof (Elf32_Word)) - 1) & -sizeof (Elf32_Word)))
|
||||
- Elf32_Addr) note_size = 3 * sizeof (Elf32_Word))
|
||||
- + ROUND (abi_note[0])
|
||||
- + ROUND (abi_note[1]);
|
||||
+#define ROUND(len) (((len) + sizeof (Elf32_Word) - 1) & -sizeof (Elf32_Word))
|
||||
+ Elf32_Addr note_size = 3 * sizeof (Elf32_Word)
|
||||
+ + ROUND (read32(abi_note[0], be))
|
||||
+ + ROUND (read32(abi_note[1], be));
|
||||
|
||||
if (size - 32 < note_size || note_size == 0)
|
||||
{
|
||||
@@ -140,10 +164,10 @@ process_elf_file32 (const char *file_nam
|
||||
if (size == 0)
|
||||
break;
|
||||
|
||||
- *osversion = (abi_note [4] << 24) |
|
||||
- ((abi_note [5] & 0xff) << 16) |
|
||||
- ((abi_note [6] & 0xff) << 8) |
|
||||
- (abi_note [7] & 0xff);
|
||||
+ *osversion = (read32(abi_note [4], be) << 24) |
|
||||
+ ((read32(abi_note [5], be) & 0xff) << 16) |
|
||||
+ ((read32(abi_note [6], be) & 0xff) << 8) |
|
||||
+ (read32(abi_note [7], be) & 0xff);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -167,13 +191,13 @@ process_elf_file32 (const char *file_nam
|
||||
|
||||
/* Find the string table. */
|
||||
dynamic_strings = NULL;
|
||||
- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ for (dyn_entry = dynamic_segment; read32(dyn_entry->d_tag, be) != DT_NULL;
|
||||
++dyn_entry)
|
||||
{
|
||||
check_ptr (dyn_entry);
|
||||
- if (dyn_entry->d_tag == DT_STRTAB)
|
||||
+ if (read32(dyn_entry->d_tag, be) == DT_STRTAB)
|
||||
{
|
||||
- dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr);
|
||||
+ dynamic_strings = (char *) (file_contents + read32(dyn_entry->d_un.d_val, be) - loadaddr);
|
||||
check_ptr (dynamic_strings);
|
||||
break;
|
||||
}
|
||||
@@ -183,15 +207,15 @@ process_elf_file32 (const char *file_nam
|
||||
return 1;
|
||||
|
||||
/* Now read the DT_NEEDED and DT_SONAME entries. */
|
||||
- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ for (dyn_entry = dynamic_segment; read32(dyn_entry->d_tag, be) != DT_NULL;
|
||||
++dyn_entry)
|
||||
{
|
||||
- if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME)
|
||||
+ if (read32(dyn_entry->d_tag, be) == DT_NEEDED || read32(dyn_entry->d_tag, be) == DT_SONAME)
|
||||
{
|
||||
- char *name = dynamic_strings + dyn_entry->d_un.d_val;
|
||||
+ char *name = dynamic_strings + read32(dyn_entry->d_un.d_val, be);
|
||||
check_ptr (name);
|
||||
|
||||
- if (dyn_entry->d_tag == DT_NEEDED)
|
||||
+ if (read32(dyn_entry->d_tag, be) == DT_NEEDED)
|
||||
{
|
||||
|
||||
if (*flag == FLAG_ELF)
|
||||
@@ -208,7 +232,7 @@ process_elf_file32 (const char *file_nam
|
||||
}
|
||||
}
|
||||
|
||||
- else if (dyn_entry->d_tag == DT_SONAME)
|
||||
+ else if (read32(dyn_entry->d_tag, be) == DT_SONAME)
|
||||
*soname = xstrdup (name);
|
||||
|
||||
/* Do we have everything we need? */
|
||||
@@ -246,15 +270,17 @@ process_elf_file64 (const char *file_nam
|
||||
elf_header = (Elf64_Ehdr *) file_contents;
|
||||
*osversion = 0;
|
||||
|
||||
- if (elf_header->e_type != ET_DYN)
|
||||
+ be = (elf_header->e_ident[EI_DATA] == ELFDATA2MSB);
|
||||
+
|
||||
+ if (read16(elf_header->e_type, be) != ET_DYN)
|
||||
{
|
||||
error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name,
|
||||
- elf_header->e_type);
|
||||
+ read16(elf_header->e_type, be));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Get information from elf program header. */
|
||||
- elf_pheader = (Elf64_Phdr *) (elf_header->e_phoff + file_contents);
|
||||
+ elf_pheader = (Elf64_Phdr *) (read64(elf_header->e_phoff, be) + file_contents);
|
||||
check_ptr (elf_pheader);
|
||||
|
||||
/* The library is an elf library, now search for soname and
|
||||
@@ -266,27 +292,27 @@ process_elf_file64 (const char *file_nam
|
||||
dynamic_size = 0;
|
||||
program_interpreter = NULL;
|
||||
for (i = 0, segment = elf_pheader;
|
||||
- i < elf_header->e_phnum; i++, segment++)
|
||||
+ i < read16(elf_header->e_phnum, be); i++, segment++)
|
||||
{
|
||||
check_ptr (segment);
|
||||
|
||||
- switch (segment->p_type)
|
||||
+ switch (read32(segment->p_type, be))
|
||||
{
|
||||
case PT_LOAD:
|
||||
if (loadaddr == (Elf64_Addr) -1)
|
||||
- loadaddr = segment->p_vaddr - segment->p_offset;
|
||||
+ loadaddr = read64(segment->p_vaddr, be) - read64(segment->p_offset, be);
|
||||
break;
|
||||
|
||||
case PT_DYNAMIC:
|
||||
if (dynamic_addr)
|
||||
error (0, 0, _("more than one dynamic segment\n"));
|
||||
|
||||
- dynamic_addr = segment->p_offset;
|
||||
- dynamic_size = segment->p_filesz;
|
||||
+ dynamic_addr = read64(segment->p_offset, be);
|
||||
+ dynamic_size = read32(segment->p_filesz, be);
|
||||
break;
|
||||
|
||||
case PT_INTERP:
|
||||
- program_interpreter = (char *) (file_contents + segment->p_offset);
|
||||
+ program_interpreter = (char *) (file_contents + read64(segment->p_offset, be));
|
||||
check_ptr (program_interpreter);
|
||||
|
||||
/* Check if this is enough to classify the binary. */
|
||||
@@ -300,20 +326,21 @@ process_elf_file64 (const char *file_nam
|
||||
break;
|
||||
|
||||
case PT_NOTE:
|
||||
- if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4)
|
||||
+ if (!*osversion && read32(segment->p_filesz, be) >= 32 && read32(segment->p_align, be) >= 4)
|
||||
{
|
||||
Elf64_Word *abi_note = (Elf64_Word *) (file_contents
|
||||
- + segment->p_offset);
|
||||
- Elf64_Addr size = segment->p_filesz;
|
||||
+ + read64(segment->p_offset, be));
|
||||
+ Elf64_Addr size = read32(segment->p_filesz, be);
|
||||
|
||||
- while (abi_note [0] != 4 || abi_note [1] != 16
|
||||
- || abi_note [2] != 1
|
||||
+ while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16
|
||||
+ || read32(abi_note [2], be) != 1
|
||||
|| memcmp (abi_note + 3, "GNU", 4) != 0)
|
||||
{
|
||||
+#undef ROUND
|
||||
#define ROUND(len) (((len) + sizeof (Elf64_Word) - 1) & -sizeof (Elf64_Word))
|
||||
Elf64_Addr note_size = 3 * sizeof (Elf64_Word)
|
||||
- + ROUND (abi_note[0])
|
||||
- + ROUND (abi_note[1]);
|
||||
+ + ROUND (read32(abi_note[0], be))
|
||||
+ + ROUND (read32(abi_note[1], be));
|
||||
|
||||
if (size - 32 < note_size || note_size == 0)
|
||||
{
|
||||
@@ -327,10 +354,10 @@ process_elf_file64 (const char *file_nam
|
||||
if (size == 0)
|
||||
break;
|
||||
|
||||
- *osversion = (abi_note [4] << 24) |
|
||||
- ((abi_note [5] & 0xff) << 16) |
|
||||
- ((abi_note [6] & 0xff) << 8) |
|
||||
- (abi_note [7] & 0xff);
|
||||
+ *osversion = (read32(abi_note [4], be) << 24) |
|
||||
+ ((read32(abi_note [5], be) & 0xff) << 16) |
|
||||
+ ((read32(abi_note [6], be) & 0xff) << 8) |
|
||||
+ (read32(abi_note [7], be) & 0xff);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -354,13 +381,13 @@ process_elf_file64 (const char *file_nam
|
||||
|
||||
/* Find the string table. */
|
||||
dynamic_strings = NULL;
|
||||
- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ for (dyn_entry = dynamic_segment; read64(dyn_entry->d_tag, be) != DT_NULL;
|
||||
++dyn_entry)
|
||||
{
|
||||
check_ptr (dyn_entry);
|
||||
- if (dyn_entry->d_tag == DT_STRTAB)
|
||||
+ if (read64(dyn_entry->d_tag, be) == DT_STRTAB)
|
||||
{
|
||||
- dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr);
|
||||
+ dynamic_strings = (char *) (file_contents + read64(dyn_entry->d_un.d_val, be) - loadaddr);
|
||||
check_ptr (dynamic_strings);
|
||||
break;
|
||||
}
|
||||
@@ -370,15 +397,15 @@ process_elf_file64 (const char *file_nam
|
||||
return 1;
|
||||
|
||||
/* Now read the DT_NEEDED and DT_SONAME entries. */
|
||||
- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL;
|
||||
+ for (dyn_entry = dynamic_segment; read64(dyn_entry->d_tag, be) != DT_NULL;
|
||||
++dyn_entry)
|
||||
{
|
||||
- if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME)
|
||||
+ if (read64(dyn_entry->d_tag, be) == DT_NEEDED || read64(dyn_entry->d_tag, be) == DT_SONAME)
|
||||
{
|
||||
- char *name = dynamic_strings + dyn_entry->d_un.d_val;
|
||||
+ char *name = dynamic_strings + read64(dyn_entry->d_un.d_val, be);
|
||||
check_ptr (name);
|
||||
|
||||
- if (dyn_entry->d_tag == DT_NEEDED)
|
||||
+ if (read64(dyn_entry->d_tag, be) == DT_NEEDED)
|
||||
{
|
||||
|
||||
if (*flag == FLAG_ELF)
|
||||
@@ -395,7 +422,7 @@ process_elf_file64 (const char *file_nam
|
||||
}
|
||||
}
|
||||
|
||||
- else if (dyn_entry->d_tag == DT_SONAME)
|
||||
+ else if (read64(dyn_entry->d_tag, be) == DT_SONAME)
|
||||
*soname = xstrdup (name);
|
||||
|
||||
/* Do we have everything we need? */
|
||||
Index: ldconfig-native-2.12.1/readlib.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/readlib.c
|
||||
+++ ldconfig-native-2.12.1/readlib.c
|
||||
@@ -169,7 +169,8 @@ process_file (const char *real_file_name
|
||||
ret = 1;
|
||||
}
|
||||
/* Libraries have to be shared object files. */
|
||||
- else if (elf_header->e_type != ET_DYN)
|
||||
+ else if ((elf_header->e_ident[EI_DATA] == ELFDATA2MSB && be16toh(elf_header->e_type) != ET_DYN) ||
|
||||
+ (elf_header->e_ident[EI_DATA] == ELFDATA2LSB && le16toh(elf_header->e_type) != ET_DYN))
|
||||
ret = 1;
|
||||
else if (process_elf_file (file_name, lib, flag, osversion, soname,
|
||||
file_contents, statbuf.st_size))
|
||||
Index: ldconfig-native-2.12.1/cache.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/cache.c
|
||||
+++ ldconfig-native-2.12.1/cache.c
|
||||
@@ -39,6 +39,29 @@
|
||||
# define N_(msgid) msgid
|
||||
#define _(msg) msg
|
||||
|
||||
+extern int be;
|
||||
+
|
||||
+static uint16_t write16(uint16_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return htobe16(x);
|
||||
+ return htole16(x);
|
||||
+}
|
||||
+
|
||||
+static uint32_t write32(uint32_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return htobe32(x);
|
||||
+ return htole32(x);
|
||||
+}
|
||||
+
|
||||
+static uint64_t write64(uint64_t x, int be)
|
||||
+{
|
||||
+ if (be)
|
||||
+ return htobe64(x);
|
||||
+ return htole64(x);
|
||||
+}
|
||||
+
|
||||
struct cache_entry
|
||||
{
|
||||
char *lib; /* Library name. */
|
||||
@@ -279,7 +302,12 @@ save_cache (const char *cache_name)
|
||||
/* Number of normal cache entries. */
|
||||
int cache_entry_old_count = 0;
|
||||
|
||||
- for (entry = entries; entry != NULL; entry = entry->next)
|
||||
+ if (be)
|
||||
+ printf("saving cache in big endian encoding\n");
|
||||
+ else
|
||||
+ printf("saving cache in little endian encoding\n");
|
||||
+
|
||||
+ for (entry = entries; entry != NULL; entry = entry->next)
|
||||
{
|
||||
/* Account the final NULs. */
|
||||
total_strlen += strlen (entry->lib) + strlen (entry->path) + 2;
|
||||
@@ -310,7 +338,7 @@ save_cache (const char *cache_name)
|
||||
memset (file_entries, '\0', sizeof (struct cache_file));
|
||||
memcpy (file_entries->magic, CACHEMAGIC, sizeof CACHEMAGIC - 1);
|
||||
|
||||
- file_entries->nlibs = cache_entry_old_count;
|
||||
+ file_entries->nlibs = write32(cache_entry_old_count, be);
|
||||
}
|
||||
|
||||
struct cache_file_new *file_entries_new = NULL;
|
||||
@@ -330,8 +358,8 @@ save_cache (const char *cache_name)
|
||||
memcpy (file_entries_new->version, CACHE_VERSION,
|
||||
sizeof CACHE_VERSION - 1);
|
||||
|
||||
- file_entries_new->nlibs = cache_entry_count;
|
||||
- file_entries_new->len_strings = total_strlen;
|
||||
+ file_entries_new->nlibs = write32(cache_entry_count, be);
|
||||
+ file_entries_new->len_strings = write32(total_strlen, be);
|
||||
}
|
||||
|
||||
/* Pad for alignment of cache_file_new. */
|
||||
@@ -358,9 +386,9 @@ save_cache (const char *cache_name)
|
||||
/* First the library. */
|
||||
if (opt_format != 2 && entry->hwcap == 0)
|
||||
{
|
||||
- file_entries->libs[idx_old].flags = entry->flags;
|
||||
+ file_entries->libs[idx_old].flags = write32(entry->flags, be);
|
||||
/* XXX: Actually we can optimize here and remove duplicates. */
|
||||
- file_entries->libs[idx_old].key = str_offset + pad;
|
||||
+ file_entries->libs[idx_old].key = write32(str_offset + pad, be);
|
||||
}
|
||||
if (opt_format != 0)
|
||||
{
|
||||
@@ -368,10 +396,10 @@ save_cache (const char *cache_name)
|
||||
not doing so makes the code easier, the string table
|
||||
always begins at the beginning of the the new cache
|
||||
struct. */
|
||||
- file_entries_new->libs[idx_new].flags = entry->flags;
|
||||
- file_entries_new->libs[idx_new].osversion = entry->osversion;
|
||||
- file_entries_new->libs[idx_new].hwcap = entry->hwcap;
|
||||
- file_entries_new->libs[idx_new].key = str_offset;
|
||||
+ file_entries_new->libs[idx_new].flags = write32(entry->flags, be);
|
||||
+ file_entries_new->libs[idx_new].osversion = write32(entry->osversion, be);
|
||||
+ file_entries_new->libs[idx_new].hwcap = write64(entry->hwcap, be);
|
||||
+ file_entries_new->libs[idx_new].key = write32(str_offset, be);
|
||||
}
|
||||
|
||||
size_t len = strlen (entry->lib) + 1;
|
||||
@@ -379,9 +407,9 @@ save_cache (const char *cache_name)
|
||||
str_offset += len;
|
||||
/* Then the path. */
|
||||
if (opt_format != 2 && entry->hwcap == 0)
|
||||
- file_entries->libs[idx_old].value = str_offset + pad;
|
||||
+ file_entries->libs[idx_old].value = write32(str_offset + pad, be);
|
||||
if (opt_format != 0)
|
||||
- file_entries_new->libs[idx_new].value = str_offset;
|
||||
+ file_entries_new->libs[idx_new].value = write32(str_offset, be);
|
||||
len = strlen (entry->path) + 1;
|
||||
str = mempcpy (str, entry->path, len);
|
||||
str_offset += len;
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
Fix problem during parsing of ELF headers for 64bit on big-endian.
|
||||
Some header fields were read with wrong size.
|
||||
|
||||
2014/10/24
|
||||
Par Olsson <Par.Olsson@windriver.com>
|
||||
Shan Hai <shan.hai@windriver.com>
|
||||
|
||||
diff --git a/readelflib.c b/readelflib.c
|
||||
index 3f5b25b..0bf0de3 100644
|
||||
--- a/readelflib.c
|
||||
+++ b/readelflib.c
|
||||
@@ -261,8 +261,8 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
|
||||
int i;
|
||||
unsigned int j;
|
||||
Elf64_Addr loadaddr;
|
||||
- unsigned int dynamic_addr;
|
||||
- size_t dynamic_size;
|
||||
+ Elf64_Addr dynamic_addr;
|
||||
+ Elf64_Xword dynamic_size;
|
||||
char *program_interpreter;
|
||||
|
||||
Elf64_Ehdr *elf_header;
|
||||
@@ -311,7 +311,7 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
|
||||
error (0, 0, _("more than one dynamic segment\n"));
|
||||
|
||||
dynamic_addr = read64(segment->p_offset, be);
|
||||
- dynamic_size = read32(segment->p_filesz, be);
|
||||
+ dynamic_size = read64(segment->p_filesz, be);
|
||||
break;
|
||||
|
||||
case PT_INTERP:
|
||||
@@ -329,11 +329,11 @@ process_elf_file64 (const char *file_name, const char *lib, int *flag,
|
||||
break;
|
||||
|
||||
case PT_NOTE:
|
||||
- if (!*osversion && read32(segment->p_filesz, be) >= 32 && read32(segment->p_align, be) >= 4)
|
||||
+ if (!*osversion && read64(segment->p_filesz, be) >= 32 && read64(segment->p_align, be) >= 4)
|
||||
{
|
||||
Elf64_Word *abi_note = (Elf64_Word *) (file_contents
|
||||
+ read64(segment->p_offset, be));
|
||||
- Elf64_Addr size = read32(segment->p_filesz, be);
|
||||
+ Elf64_Xword size = read64(segment->p_filesz, be);
|
||||
|
||||
while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16
|
||||
|| read32(abi_note [2], be) != 1
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
Upstream-Status: Inappropriate [fix poky patch]
|
||||
|
||||
This patch fixes build issues with a previous endian-ness_handling.patch on
|
||||
distros that don't have macros referenced
|
||||
|
||||
7/20/2011
|
||||
Matthew McClintock <msm@freescale.com>
|
||||
|
||||
diff -purN ldconfig-native-2.12.1.orig/endian_extra.h ldconfig-native-2.12.1/endian_extra.h
|
||||
--- ldconfig-native-2.12.1.orig/endian_extra.h 1969-12-31 18:00:00.000000000 -0600
|
||||
+++ ldconfig-native-2.12.1/endian_extra.h 2011-07-19 18:09:14.323048417 -0500
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* Copyright (C) 1992, 1996, 1997, 2000, 2008 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, write to the Free
|
||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
+ 02111-1307 USA. */
|
||||
+
|
||||
+#include <endian.h>
|
||||
+
|
||||
+#ifndef _ENDIAN_EXTRA_H
|
||||
+#define _ENDIAN_EXTRA_H 1
|
||||
+
|
||||
+/* Don't redefine these macros if they already exist */
|
||||
+#ifndef htobe16
|
||||
+#ifdef __USE_BSD
|
||||
+/* Conversion interfaces. */
|
||||
+# include <byteswap.h>
|
||||
+
|
||||
+# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
+# define htobe16(x) __bswap_16 (x)
|
||||
+# define htole16(x) (x)
|
||||
+# define be16toh(x) __bswap_16 (x)
|
||||
+# define le16toh(x) (x)
|
||||
+
|
||||
+# define htobe32(x) __bswap_32 (x)
|
||||
+# define htole32(x) (x)
|
||||
+# define be32toh(x) __bswap_32 (x)
|
||||
+# define le32toh(x) (x)
|
||||
+
|
||||
+# define htobe64(x) __bswap_64 (x)
|
||||
+# define htole64(x) (x)
|
||||
+# define be64toh(x) __bswap_64 (x)
|
||||
+# define le64toh(x) (x)
|
||||
+# else
|
||||
+# define htobe16(x) (x)
|
||||
+# define htole16(x) __bswap_16 (x)
|
||||
+# define be16toh(x) (x)
|
||||
+# define le16toh(x) __bswap_16 (x)
|
||||
+
|
||||
+# define htobe32(x) (x)
|
||||
+# define htole32(x) __bswap_32 (x)
|
||||
+# define be32toh(x) (x)
|
||||
+# define le32toh(x) __bswap_32 (x)
|
||||
+
|
||||
+# define htobe64(x) (x)
|
||||
+# define htole64(x) __bswap_64 (x)
|
||||
+# define be64toh(x) (x)
|
||||
+# define le64toh(x) __bswap_64 (x)
|
||||
+# endif
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#endif /* endian_extra.h */
|
||||
diff -purN ldconfig-native-2.12.1.orig/cache.c ldconfig-native-2.12.1/cache.c
|
||||
--- ldconfig-native-2.12.1.orig/cache.c 2011-07-19 18:21:28.347041301 -0500
|
||||
+++ ldconfig-native-2.12.1/cache.c 2011-07-19 18:22:54.118048064 -0500
|
||||
@@ -39,6 +39,8 @@
|
||||
# define N_(msgid) msgid
|
||||
#define _(msg) msg
|
||||
|
||||
+#include "endian_extra.h"
|
||||
+
|
||||
extern int be;
|
||||
|
||||
static uint16_t write16(uint16_t x, int be)
|
||||
diff -purN ldconfig-native-2.12.1.orig/readelflib.c ldconfig-native-2.12.1/readelflib.c
|
||||
--- ldconfig-native-2.12.1.orig/readelflib.c 2011-07-19 18:21:28.346041593 -0500
|
||||
+++ ldconfig-native-2.12.1/readelflib.c 2011-07-19 18:23:05.324059875 -0500
|
||||
@@ -25,6 +25,9 @@
|
||||
|
||||
/* check_ptr checks that a pointer is in the mmaped file and doesn't
|
||||
point outside it. */
|
||||
+
|
||||
+#include "endian_extra.h"
|
||||
+
|
||||
#undef check_ptr
|
||||
#define check_ptr(ptr) \
|
||||
do \
|
||||
diff -purN ldconfig-native-2.12.1.orig/readlib.c ldconfig-native-2.12.1/readlib.c
|
||||
--- ldconfig-native-2.12.1.orig/readlib.c 2011-07-19 18:21:28.346041593 -0500
|
||||
+++ ldconfig-native-2.12.1/readlib.c 2011-07-19 18:23:23.877046210 -0500
|
||||
@@ -40,6 +40,8 @@
|
||||
|
||||
#include "ldconfig.h"
|
||||
|
||||
+#include "endian_extra.h"
|
||||
+
|
||||
#define _(msg) msg
|
||||
|
||||
#define Elf32_CLASS ELFCLASS32
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
The native version of ldconfig was using native definition of LD_SO (i.e.
|
||||
ld-linux-x86-64.so.2 ) which is not correct for doing the cross ldconfig.
|
||||
This was causing libc.so on the target marked as ELF lib rather than
|
||||
FLAG_ELF_LIBC6 in the ld.so.cache.
|
||||
|
||||
Nitin A Kamble <nitin.a.kamble@intel.com> 2011/04/4
|
||||
|
||||
Index: ldconfig-native-2.12.1/readlib.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/readlib.c
|
||||
+++ ldconfig-native-2.12.1/readlib.c
|
||||
@@ -51,6 +51,10 @@ struct known_names
|
||||
int flag;
|
||||
};
|
||||
|
||||
+/* don't use host's definition of LD_SO */
|
||||
+#undef LD_SO
|
||||
+#define LD_SO "ld.so.1"
|
||||
+
|
||||
static struct known_names interpreters[] =
|
||||
{
|
||||
{ "/lib/" LD_SO, FLAG_ELF_LIBC6 },
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
make ldconfig default to both /lib+/usr/lib, /lib32+/usr/lib32 and
|
||||
/lib64+/usr/lib64 on bi-ABI architectures.
|
||||
|
||||
---
|
||||
ldconfig.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff -urpN a/ldconfig.c b/ldconfig.c
|
||||
--- a/ldconfig.c
|
||||
+++ b/ldconfig.c
|
||||
@@ -52,7 +52,11 @@
|
||||
|
||||
#define SYSCONFDIR "/etc"
|
||||
#define LIBDIR "/usr/lib"
|
||||
+#define LIBDIR32 "/usr/lib32"
|
||||
+#define LIBDIR64 "/usr/lib64"
|
||||
#define SLIBDIR "/lib"
|
||||
+#define SLIBDIR32 "/lib32"
|
||||
+#define SLIBDIR64 "/lib64"
|
||||
# define N_(msgid) msgid
|
||||
#define _(msg) msg
|
||||
|
||||
@@ -1373,6 +1377,12 @@ main (int argc, char **argv)
|
||||
add_system_dir (SLIBDIR);
|
||||
if (strcmp (SLIBDIR, LIBDIR))
|
||||
add_system_dir (LIBDIR);
|
||||
+ add_system_dir (SLIBDIR32);
|
||||
+ if (strcmp (SLIBDIR32, LIBDIR32))
|
||||
+ add_system_dir (LIBDIR32);
|
||||
+ add_system_dir (SLIBDIR64);
|
||||
+ if (strcmp (SLIBDIR64, LIBDIR64))
|
||||
+ add_system_dir (LIBDIR64);
|
||||
}
|
||||
|
||||
const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE;
|
||||
Binary file not shown.
|
|
@ -1,471 +0,0 @@
|
|||
Upstream-Status: Inappropriate [embedded specific]
|
||||
|
||||
enable standalone building of ldconfig
|
||||
|
||||
---
|
||||
cache.c | 11 +-
|
||||
chroot_canon.c | 7 +
|
||||
dl-cache.c | 235 ---------------------------------------------------------
|
||||
dl-cache.h | 3
|
||||
ldconfig.c | 27 ++++--
|
||||
readlib.c | 7 +
|
||||
xstrdup.c | 11 --
|
||||
7 files changed, 45 insertions(+), 256 deletions(-)
|
||||
|
||||
Index: ldconfig-native-2.12.1/cache.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/cache.c
|
||||
+++ ldconfig-native-2.12.1/cache.c
|
||||
@@ -16,6 +16,9 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
+#define _LARGEFILE64_SOURCE
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
#include <errno.h>
|
||||
#include <error.h>
|
||||
#include <dirent.h>
|
||||
@@ -31,8 +34,10 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
-#include <ldconfig.h>
|
||||
-#include <dl-cache.h>
|
||||
+#include "ldconfig.h"
|
||||
+#include "dl-cache.h"
|
||||
+# define N_(msgid) msgid
|
||||
+#define _(msg) msg
|
||||
|
||||
struct cache_entry
|
||||
{
|
||||
Index: ldconfig-native-2.12.1/chroot_canon.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/chroot_canon.c
|
||||
+++ ldconfig-native-2.12.1/chroot_canon.c
|
||||
@@ -17,6 +17,9 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
+#define _LARGEFILE64_SOURCE
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
@@ -27,7 +30,9 @@
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
-#include <ldconfig.h>
|
||||
+#include "ldconfig.h"
|
||||
+
|
||||
+#define __set_errno(Val) errno = (Val)
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 1024
|
||||
Index: ldconfig-native-2.12.1/dl-cache.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/dl-cache.c
|
||||
+++ ldconfig-native-2.12.1/dl-cache.c
|
||||
@@ -20,12 +20,12 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
-#include <ldsodefs.h>
|
||||
+//#include "ldsodefs.h"
|
||||
#include <sys/mman.h>
|
||||
#include <dl-cache.h>
|
||||
#include <dl-procinfo.h>
|
||||
|
||||
-#include <stdio-common/_itoa.h>
|
||||
+//#include "_itoa.h"
|
||||
|
||||
#ifndef _DL_PLATFORMS_COUNT
|
||||
# define _DL_PLATFORMS_COUNT 0
|
||||
@@ -39,103 +39,7 @@ static size_t cachesize;
|
||||
/* 1 if cache_data + PTR points into the cache. */
|
||||
#define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size)
|
||||
|
||||
-#define SEARCH_CACHE(cache) \
|
||||
-/* We use binary search since the table is sorted in the cache file. \
|
||||
- The first matching entry in the table is returned. \
|
||||
- It is important to use the same algorithm as used while generating \
|
||||
- the cache file. */ \
|
||||
-do \
|
||||
- { \
|
||||
- left = 0; \
|
||||
- right = cache->nlibs - 1; \
|
||||
- \
|
||||
- while (left <= right) \
|
||||
- { \
|
||||
- __typeof__ (cache->libs[0].key) key; \
|
||||
- \
|
||||
- middle = (left + right) / 2; \
|
||||
- \
|
||||
- key = cache->libs[middle].key; \
|
||||
- \
|
||||
- /* Make sure string table indices are not bogus before using \
|
||||
- them. */ \
|
||||
- if (! _dl_cache_verify_ptr (key)) \
|
||||
- { \
|
||||
- cmpres = 1; \
|
||||
- break; \
|
||||
- } \
|
||||
- \
|
||||
- /* Actually compare the entry with the key. */ \
|
||||
- cmpres = _dl_cache_libcmp (name, cache_data + key); \
|
||||
- if (__builtin_expect (cmpres == 0, 0)) \
|
||||
- { \
|
||||
- /* Found it. LEFT now marks the last entry for which we \
|
||||
- know the name is correct. */ \
|
||||
- left = middle; \
|
||||
- \
|
||||
- /* There might be entries with this name before the one we \
|
||||
- found. So we have to find the beginning. */ \
|
||||
- while (middle > 0) \
|
||||
- { \
|
||||
- __typeof__ (cache->libs[0].key) key; \
|
||||
- \
|
||||
- key = cache->libs[middle - 1].key; \
|
||||
- /* Make sure string table indices are not bogus before \
|
||||
- using them. */ \
|
||||
- if (! _dl_cache_verify_ptr (key) \
|
||||
- /* Actually compare the entry. */ \
|
||||
- || _dl_cache_libcmp (name, cache_data + key) != 0) \
|
||||
- break; \
|
||||
- --middle; \
|
||||
- } \
|
||||
- \
|
||||
- do \
|
||||
- { \
|
||||
- int flags; \
|
||||
- __typeof__ (cache->libs[0]) *lib = &cache->libs[middle]; \
|
||||
- \
|
||||
- /* Only perform the name test if necessary. */ \
|
||||
- if (middle > left \
|
||||
- /* We haven't seen this string so far. Test whether the \
|
||||
- index is ok and whether the name matches. Otherwise \
|
||||
- we are done. */ \
|
||||
- && (! _dl_cache_verify_ptr (lib->key) \
|
||||
- || (_dl_cache_libcmp (name, cache_data + lib->key) \
|
||||
- != 0))) \
|
||||
- break; \
|
||||
- \
|
||||
- flags = lib->flags; \
|
||||
- if (_dl_cache_check_flags (flags) \
|
||||
- && _dl_cache_verify_ptr (lib->value)) \
|
||||
- { \
|
||||
- if (best == NULL || flags == GLRO(dl_correct_cache_id)) \
|
||||
- { \
|
||||
- HWCAP_CHECK; \
|
||||
- best = cache_data + lib->value; \
|
||||
- \
|
||||
- if (flags == GLRO(dl_correct_cache_id)) \
|
||||
- /* We've found an exact match for the shared \
|
||||
- object and no general `ELF' release. Stop \
|
||||
- searching. */ \
|
||||
- break; \
|
||||
- } \
|
||||
- } \
|
||||
- } \
|
||||
- while (++middle <= right); \
|
||||
- break; \
|
||||
- } \
|
||||
- \
|
||||
- if (cmpres < 0) \
|
||||
- left = middle + 1; \
|
||||
- else \
|
||||
- right = middle - 1; \
|
||||
- } \
|
||||
- } \
|
||||
-while (0)
|
||||
-
|
||||
-
|
||||
int
|
||||
-internal_function
|
||||
_dl_cache_libcmp (const char *p1, const char *p2)
|
||||
{
|
||||
while (*p1 != '\0')
|
||||
@@ -172,139 +76,3 @@ _dl_cache_libcmp (const char *p1, const
|
||||
}
|
||||
return *p1 - *p2;
|
||||
}
|
||||
-
|
||||
-
|
||||
-/* Look up NAME in ld.so.cache and return the file name stored there,
|
||||
- or null if none is found. */
|
||||
-
|
||||
-const char *
|
||||
-internal_function
|
||||
-_dl_load_cache_lookup (const char *name)
|
||||
-{
|
||||
- int left, right, middle;
|
||||
- int cmpres;
|
||||
- const char *cache_data;
|
||||
- uint32_t cache_data_size;
|
||||
- const char *best;
|
||||
-
|
||||
- /* Print a message if the loading of libs is traced. */
|
||||
- if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0))
|
||||
- _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE);
|
||||
-
|
||||
- if (cache == NULL)
|
||||
- {
|
||||
- /* Read the contents of the file. */
|
||||
- void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize,
|
||||
- PROT_READ);
|
||||
-
|
||||
- /* We can handle three different cache file formats here:
|
||||
- - the old libc5/glibc2.0/2.1 format
|
||||
- - the old format with the new format in it
|
||||
- - only the new format
|
||||
- The following checks if the cache contains any of these formats. */
|
||||
- if (file != MAP_FAILED && cachesize > sizeof *cache
|
||||
- && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0)
|
||||
- {
|
||||
- size_t offset;
|
||||
- /* Looks ok. */
|
||||
- cache = file;
|
||||
-
|
||||
- /* Check for new version. */
|
||||
- offset = ALIGN_CACHE (sizeof (struct cache_file)
|
||||
- + cache->nlibs * sizeof (struct file_entry));
|
||||
-
|
||||
- cache_new = (struct cache_file_new *) ((void *) cache + offset);
|
||||
- if (cachesize < (offset + sizeof (struct cache_file_new))
|
||||
- || memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW,
|
||||
- sizeof CACHEMAGIC_VERSION_NEW - 1) != 0)
|
||||
- cache_new = (void *) -1;
|
||||
- }
|
||||
- else if (file != MAP_FAILED && cachesize > sizeof *cache_new
|
||||
- && memcmp (file, CACHEMAGIC_VERSION_NEW,
|
||||
- sizeof CACHEMAGIC_VERSION_NEW - 1) == 0)
|
||||
- {
|
||||
- cache_new = file;
|
||||
- cache = file;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- if (file != MAP_FAILED)
|
||||
- __munmap (file, cachesize);
|
||||
- cache = (void *) -1;
|
||||
- }
|
||||
-
|
||||
- assert (cache != NULL);
|
||||
- }
|
||||
-
|
||||
- if (cache == (void *) -1)
|
||||
- /* Previously looked for the cache file and didn't find it. */
|
||||
- return NULL;
|
||||
-
|
||||
- best = NULL;
|
||||
-
|
||||
- if (cache_new != (void *) -1)
|
||||
- {
|
||||
- uint64_t platform;
|
||||
-
|
||||
- /* This is where the strings start. */
|
||||
- cache_data = (const char *) cache_new;
|
||||
-
|
||||
- /* Now we can compute how large the string table is. */
|
||||
- cache_data_size = (const char *) cache + cachesize - cache_data;
|
||||
-
|
||||
- platform = _dl_string_platform (GLRO(dl_platform));
|
||||
- if (platform != (uint64_t) -1)
|
||||
- platform = 1ULL << platform;
|
||||
-
|
||||
-#define _DL_HWCAP_TLS_MASK (1LL << 63)
|
||||
- uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & GLRO(dl_hwcap_mask))
|
||||
- | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK);
|
||||
-
|
||||
- /* Only accept hwcap if it's for the right platform. */
|
||||
-#define HWCAP_CHECK \
|
||||
- if (lib->hwcap & hwcap_exclude) \
|
||||
- continue; \
|
||||
- if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \
|
||||
- continue; \
|
||||
- if (_DL_PLATFORMS_COUNT \
|
||||
- && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \
|
||||
- && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \
|
||||
- continue
|
||||
- SEARCH_CACHE (cache_new);
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- /* This is where the strings start. */
|
||||
- cache_data = (const char *) &cache->libs[cache->nlibs];
|
||||
-
|
||||
- /* Now we can compute how large the string table is. */
|
||||
- cache_data_size = (const char *) cache + cachesize - cache_data;
|
||||
-
|
||||
-#undef HWCAP_CHECK
|
||||
-#define HWCAP_CHECK do {} while (0)
|
||||
- SEARCH_CACHE (cache);
|
||||
- }
|
||||
-
|
||||
- /* Print our result if wanted. */
|
||||
- if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0)
|
||||
- && best != NULL)
|
||||
- _dl_debug_printf (" trying file=%s\n", best);
|
||||
-
|
||||
- return best;
|
||||
-}
|
||||
-
|
||||
-#ifndef MAP_COPY
|
||||
-/* If the system does not support MAP_COPY we cannot leave the file open
|
||||
- all the time since this would create problems when the file is replaced.
|
||||
- Therefore we provide this function to close the file and open it again
|
||||
- once needed. */
|
||||
-void
|
||||
-_dl_unload_cache (void)
|
||||
-{
|
||||
- if (cache != NULL && cache != (struct cache_file *) -1)
|
||||
- {
|
||||
- __munmap (cache, cachesize);
|
||||
- cache = NULL;
|
||||
- }
|
||||
-}
|
||||
-#endif
|
||||
Index: ldconfig-native-2.12.1/dl-cache.h
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/dl-cache.h
|
||||
+++ ldconfig-native-2.12.1/dl-cache.h
|
||||
@@ -101,5 +101,4 @@ struct cache_file_new
|
||||
(((addr) + __alignof__ (struct cache_file_new) -1) \
|
||||
& (~(__alignof__ (struct cache_file_new) - 1)))
|
||||
|
||||
-extern int _dl_cache_libcmp (const char *p1, const char *p2)
|
||||
- internal_function;
|
||||
+extern int _dl_cache_libcmp (const char *p1, const char *p2);
|
||||
Index: ldconfig-native-2.12.1/ldconfig.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/ldconfig.c
|
||||
+++ ldconfig-native-2.12.1/ldconfig.c
|
||||
@@ -16,6 +16,9 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
+#define _LARGEFILE64_SOURCE
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
#define PROCINFO_CLASS static
|
||||
#include <alloca.h>
|
||||
#include <argp.h>
|
||||
@@ -39,10 +42,20 @@
|
||||
#include <glob.h>
|
||||
#include <libgen.h>
|
||||
|
||||
-#include <ldconfig.h>
|
||||
-#include <dl-cache.h>
|
||||
+#include "ldconfig.h"
|
||||
+#include "dl-cache.h"
|
||||
+
|
||||
+#include "dl-procinfo.h"
|
||||
+
|
||||
+#include "argp.h"
|
||||
+
|
||||
+
|
||||
+#define SYSCONFDIR "/etc"
|
||||
+#define LIBDIR "/usr/lib"
|
||||
+#define SLIBDIR "/lib"
|
||||
+# define N_(msgid) msgid
|
||||
+#define _(msg) msg
|
||||
|
||||
-#include <dl-procinfo.h>
|
||||
|
||||
#ifdef _DL_FIRST_PLATFORM
|
||||
# define _DL_FIRST_EXTRA (_DL_FIRST_PLATFORM + _DL_PLATFORMS_COUNT)
|
||||
@@ -55,7 +68,7 @@
|
||||
#endif
|
||||
|
||||
/* Get libc version number. */
|
||||
-#include <version.h>
|
||||
+#include "version.h"
|
||||
|
||||
#define PACKAGE _libc_intl_domainname
|
||||
|
||||
@@ -152,8 +165,8 @@ static const struct argp_option options[
|
||||
{ NULL, 0, NULL, 0, NULL, 0 }
|
||||
};
|
||||
|
||||
-#define PROCINFO_CLASS static
|
||||
-#include <dl-procinfo.c>
|
||||
+//#define PROCINFO_CLASS static
|
||||
+//#include <dl-procinfo.c>
|
||||
|
||||
/* Short description of program. */
|
||||
static const char doc[] = N_("Configure Dynamic Linker Run Time Bindings.");
|
||||
@@ -291,6 +304,7 @@ parse_opt (int key, char *arg, struct ar
|
||||
return 0;
|
||||
}
|
||||
|
||||
+#define REPORT_BUGS_TO "mailing list : poky@yoctoproject.org"
|
||||
/* Print bug-reporting information in the help message. */
|
||||
static char *
|
||||
more_help (int key, const char *text, void *input)
|
||||
@@ -315,7 +329,7 @@ For bug reporting instructions, please s
|
||||
static void
|
||||
print_version (FILE *stream, struct argp_state *state)
|
||||
{
|
||||
- fprintf (stream, "ldconfig %s%s\n", PKGVERSION, VERSION);
|
||||
+ fprintf (stream, "ldconfig (Hacked Poky Version)\n");
|
||||
fprintf (stream, gettext ("\
|
||||
Copyright (C) %s Free Software Foundation, Inc.\n\
|
||||
This is free software; see the source for copying conditions. There is NO\n\
|
||||
@@ -1233,6 +1247,7 @@ set_hwcap (void)
|
||||
hwcap_mask = strtoul (mask, NULL, 0);
|
||||
}
|
||||
|
||||
+const char _libc_intl_domainname[] = "libc";
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
Index: ldconfig-native-2.12.1/readlib.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/readlib.c
|
||||
+++ ldconfig-native-2.12.1/readlib.c
|
||||
@@ -22,6 +22,9 @@
|
||||
development version. Besides the simplification, it has also been
|
||||
modified to read some other file formats. */
|
||||
|
||||
+#define _LARGEFILE64_SOURCE
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
#include <a.out.h>
|
||||
#include <elf.h>
|
||||
#include <error.h>
|
||||
@@ -35,7 +38,9 @@
|
||||
#include <sys/stat.h>
|
||||
#include <gnu/lib-names.h>
|
||||
|
||||
-#include <ldconfig.h>
|
||||
+#include "ldconfig.h"
|
||||
+
|
||||
+#define _(msg) msg
|
||||
|
||||
#define Elf32_CLASS ELFCLASS32
|
||||
#define Elf64_CLASS ELFCLASS64
|
||||
Index: ldconfig-native-2.12.1/xstrdup.c
|
||||
===================================================================
|
||||
--- ldconfig-native-2.12.1.orig/xstrdup.c
|
||||
+++ ldconfig-native-2.12.1/xstrdup.c
|
||||
@@ -16,15 +16,10 @@
|
||||
along with this program; if not, write to the Free Software Foundation,
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
-#ifdef HAVE_CONFIG_H
|
||||
-# include <config.h>
|
||||
-#endif
|
||||
+#define _GNU_SOURCE
|
||||
+
|
||||
+#include <string.h>
|
||||
|
||||
-#if defined STDC_HEADERS || defined HAVE_STRING_H || _LIBC
|
||||
-# include <string.h>
|
||||
-#else
|
||||
-# include <strings.h>
|
||||
-#endif
|
||||
void *xmalloc (size_t n) __THROW;
|
||||
char *xstrdup (char *string) __THROW;
|
||||
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
Upstream-Status: Pending
|
||||
|
||||
Coming from this bug: http://sourceware.org/bugzilla/show_bug.cgi?id=11149
|
||||
|
||||
Nitin A Kamble <nitin.a.kamble@intel.com>2011/03/29
|
||||
|
||||
--- ldconfig-native-2.12.1.orig/ldconfig.c
|
||||
+++ ldconfig-native-2.12.1/ldconfig.c
|
||||
@@ -1359,14 +1359,9 @@ main (int argc, char **argv)
|
||||
|
||||
const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE;
|
||||
if (opt_chroot)
|
||||
- {
|
||||
- aux_cache_file = chroot_canon (opt_chroot, aux_cache_file);
|
||||
- if (aux_cache_file == NULL)
|
||||
- error (EXIT_FAILURE, errno, _("Can't open cache file %s\n"),
|
||||
- _PATH_LDCONFIG_AUX_CACHE);
|
||||
- }
|
||||
+ aux_cache_file = chroot_canon (opt_chroot, aux_cache_file);
|
||||
|
||||
- if (! opt_ignore_aux_cache)
|
||||
+ if (! opt_ignore_aux_cache && aux_cache_file)
|
||||
load_aux_cache (aux_cache_file);
|
||||
else
|
||||
init_aux_cache ();
|
||||
@@ -1376,7 +1371,8 @@ main (int argc, char **argv)
|
||||
if (opt_build_cache)
|
||||
{
|
||||
save_cache (cache_file);
|
||||
- save_aux_cache (aux_cache_file);
|
||||
+ if (aux_cache_file)
|
||||
+ save_aux_cache (aux_cache_file);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
The ldconfig auxiliary cache is a dictionary where the keys include inode, so
|
||||
there is no point in writing these files on the build host.
|
||||
|
||||
Upstream-Status: Inappropriate
|
||||
Signed-off-by: Ross Burton <ross.burton@arm.com>
|
||||
|
||||
diff --git a/ldconfig.c b/ldconfig.c
|
||||
index 2c4eb57..2d6dc92 100644
|
||||
--- a/ldconfig.c
|
||||
+++ b/ldconfig.c
|
||||
@@ -1399,8 +1399,6 @@ main (int argc, char **argv)
|
||||
if (opt_build_cache)
|
||||
{
|
||||
save_cache (cache_file);
|
||||
- if (aux_cache_file)
|
||||
- save_aux_cache (aux_cache_file);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
SUMMARY = "A standalone native ldconfig build"
|
||||
|
||||
LICENSE = "GPLv2+"
|
||||
|
||||
LIC_FILES_CHKSUM = "file://${S}/ldconfig.c;endline=17;md5=1d15f20937c055cb5de2329a4c054399"
|
||||
|
||||
SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \
|
||||
file://ldconfig.patch \
|
||||
file://ldconfig_aux-cache_path_fix.patch \
|
||||
file://32and64bit.patch \
|
||||
file://endian-ness_handling.patch \
|
||||
file://flag_fix.patch \
|
||||
file://endianess-header.patch \
|
||||
file://ldconfig-default-to-all-multilib-dirs.patch \
|
||||
file://endian-ness_handling_fix.patch \
|
||||
file://add-64-bit-flag-for-ELF64-entries.patch \
|
||||
file://no-aux-cache.patch \
|
||||
"
|
||||
|
||||
PR = "r2"
|
||||
|
||||
FILESEXTRAPATHS =. "${FILE_DIRNAME}/${P}:"
|
||||
|
||||
inherit native
|
||||
|
||||
S = "${WORKDIR}/${PN}-${PV}"
|
||||
|
||||
do_compile () {
|
||||
$CC ldconfig.c -std=gnu99 chroot_canon.c xmalloc.c xstrdup.c cache.c readlib.c -I. dl-cache.c -o ldconfig
|
||||
}
|
||||
|
||||
do_install () {
|
||||
install -d ${D}/${bindir}/
|
||||
install ldconfig ${D}/${bindir}/
|
||||
}
|
||||
Loading…
Reference in New Issue