From a242274d98e6f0f8d2aa21f778df690de7b42144 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Thu, 3 Feb 2022 16:48:56 +0000 Subject: prelink: Drop support for it Prelink is being dropped by glibc in 2.36. It already causes issues with binary corruption, has a number of open bugs and is of questionable benefit without disabling load address randomization and PIE executables. We disabled it by default a while back but left people able to use it. We would be unable to maintain it alone without glibc support so remove the remaining pieces. (From OE-Core rev: 23c0be78106f1d1e2bb9c724174a1bb8c56c2469) Signed-off-by: Richard Purdie --- meta/recipes-devtools/prelink/prelink_git.bb | 185 --------------------------- 1 file changed, 185 deletions(-) delete mode 100644 meta/recipes-devtools/prelink/prelink_git.bb (limited to 'meta/recipes-devtools/prelink/prelink_git.bb') diff --git a/meta/recipes-devtools/prelink/prelink_git.bb b/meta/recipes-devtools/prelink/prelink_git.bb deleted file mode 100644 index 24713b61f8..0000000000 --- a/meta/recipes-devtools/prelink/prelink_git.bb +++ /dev/null @@ -1,185 +0,0 @@ -SECTION = "devel" -# Need binutils for libiberty.a -# Would need transfig-native for documentation if it wasn't disabled -DEPENDS = "elfutils binutils" -SUMMARY = "An ELF prelinking utility" -HOMEPAGE = "http://git.yoctoproject.org/cgit.cgi/prelink-cross/about/" -DESCRIPTION = "The prelink package contains a utility which modifies ELF shared libraries \ -and executables, so that far fewer relocations need to be resolved at \ -runtime and thus programs come up faster." -LICENSE = "GPLv2" -LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b" -SRCREV = "f9975537dbfd9ade0fc813bd5cf5fcbe41753a37" -PV = "1.0+git${SRCPV}" - -# -# The cron script attempts to re-prelink the system daily -- on -# systems where users are adding applications, this might be reasonable -# but for embedded, we should be re-running prelink -a after an update. -# -# Default is prelinking is enabled. -# -SUMMARY:${PN}-cron = "Cron scripts to control automatic prelinking" -DESCRIPTION:${PN}-cron = "Cron scripts to control automatic prelinking. \ -See: ${sysconfdir}/cron.daily/prelink for configuration information." - -FILES:${PN}-cron = "${sysconfdir}/cron.daily ${sysconfdir}/default" - -PACKAGES =+ "${PN}-cron" - -SRC_URI = "git://git.yoctoproject.org/prelink-cross.git;branch=cross_prelink_staging \ - file://0001-Add-MIPS-gnu-hash-support.patch \ - file://prelink.conf \ - file://prelink.cron.daily \ - file://prelink.default \ - file://macros.prelink \ - " -UPSTREAM_CHECK_COMMITS = "1" - -# error: error.h: No such file or directory -COMPATIBLE_HOST:libc-musl = 'null' - -TARGET_OS_ORIG := "${TARGET_OS}" -OVERRIDES:append = ":${TARGET_OS_ORIG}" - -S = "${WORKDIR}/git" - -inherit autotools - -BBCLASSEXTEND = "native" - -EXTRA_OECONF = "--with-pkgversion=${PV}-${PR} \ - --with-bugurl=http://bugzilla.yoctoproject.org/" - -PACKAGECONFIG ??= "" -PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux" - -# -# For target prelink we need to ensure paths match the lib path layout -# including for any configured multilibs -# -python do_linkerpaths () { - values = all_multilib_tune_list(["TUNE_ARCH", "baselib", "ABIEXTENSION"], d) - - arches = values["TUNE_ARCH"] - baselibs = values["baselib"] - abis = values["ABIEXTENSION"] - - def replace_lines(f, search, replacement, d, firstonly = False, secondonly = False): - f = d.expand(f) - if search == replacement: - return - bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f)) - with open(f, "r") as data: - lines = data.readlines() - with open(f, "w") as data: - for line in lines: - if not secondonly and not firstonly: - line = line.replace(search, replacement) - elif secondonly and search in line: - secondonly = False - elif firstonly and search and search in line: - line = line.replace(search, replacement) - search = None - data.write(line) - - def replace_lines_rtld(f, search, replacement, section, d): - f = d.expand(f) - bb.debug(2, "Replacing %s with %s in %s" % (search, replacement, f)) - with open(f, "r") as data: - lines = data.readlines() - found = False - found2 = False - with open(f, "w") as data: - for line in lines: - if section in line: - if section == "else" and "if" in line: - found = False - else: - found = True - if found and "dst_LIB =" in line: - found2 = True - elif "}" in line: - found = False - found2 = False - if found2: - line = line.replace(search, replacement) - data.write(line) - - for i, arch in enumerate(arches): - tune_baselib = baselibs[i] - abi = abis[i] - - bits = 32 - if arch == "powerpc": - replace_lines("${S}/src/arch-ppc.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) - elif arch == "powerpc64": - replace_lines("${S}/src/arch-ppc64.c", "/lib64/ld64.so.1", "/" + tune_baselib + "/ld64.so.1", d) - bits = 64 - elif arch == "x86_64": - if abi == "x32": - replace_lines("${S}/src/arch-x86_64.c", "/libx32/ld-linux-x32.so.2", "/" + tune_baselib + "/ld-linux-x32.so.2", d) - else: - replace_lines("${S}/src/arch-x86_64.c", "/lib64/ld-linux-x86-64.so.2", "/" + tune_baselib + "/ld-linux-x86-64.so.2", d) - bits = 64 - elif arch == "arm": - replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux.so.3", "/" + tune_baselib + "/ld-linux.so.3", d) - replace_lines("${S}/src/arch-arm.c", "/lib/ld-linux-armhf.so.3", "/" + tune_baselib + "/ld-linux-armhf.so.3", d) - elif arch == "mips" or arch == "mipsel": - replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, firstonly=True) - replace_lines("${S}/src/arch-mips.c", "/lib32/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) - elif arch == "mips64" or arch == "mips64el": - replace_lines("${S}/src/arch-mips.c", "/lib/ld.so.1", "/" + tune_baselib + "/ld.so.1", d, secondonly=True) - replace_lines("${S}/src/arch-mips.c", "/lib64/ld.so.1", "/" + tune_baselib + "/ld.so.1", d) - bits = 64 - elif arch.endswith("86"): - replace_lines("${S}/src/arch-i386.c", "/lib/ld-linux.so.2", "/" + tune_baselib + "/ld-linux.so.2", d) - if bits == 32 and tune_baselib != "lib": - replace_lines_rtld("${S}/src/rtld/rtld.c", "lib", tune_baselib, "else", d) - if bits == 64 and tune_baselib != "lib64": - replace_lines_rtld("${S}/src/rtld/rtld.c", "lib64", tune_baselib, "use_64bit", d) -} - -python () { - overrides = d.getVar("OVERRIDES").split(":") - if "class-target" in overrides: - bb.build.addtask('do_linkerpaths', 'do_configure', 'do_patch', d) -} - -do_configure:prepend () { - # Disable documentation! - echo "all:" > ${S}/doc/Makefile.am -} - -do_install:append () { - install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default ${D}${sysconfdir}/rpm - install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf - install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink - install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink - install -m 0644 ${WORKDIR}/macros.prelink ${D}${sysconfdir}/rpm/macros.prelink -} - -# If we ae doing a cross install, we want to avoid prelinking. -# Prelinking during a cross install should be handled by the image-prelink -# bbclass. If the user desires this to run on the target at first boot -# they will need to create a custom boot script. -pkg_postinst:prelink() { -#!/bin/sh - -if [ "x$D" != "x" ]; then - exit 0 -fi - -prelink -a -} - -pkg_prerm:prelink() { -#!/bin/sh - -if [ "x$D" != "x" ]; then - exit 1 -fi - -prelink -au -} - -- cgit v1.2.3-54-g00ecf