diff options
| author | Ain <41307858+nero@users.noreply.github.com> | 2018-10-18 20:55:01 +0000 |
|---|---|---|
| committer | Leonardo Arena <rnalrd@alpinelinux.org> | 2019-02-08 08:54:04 +0000 |
| commit | 01d4acb671dde727097762b4d371c036e0918db3 (patch) | |
| tree | 599c458ecd5a5aa57418efab1a5a91ab4d3dde37 /main/lddtree/0001-use-musl-ldso-conf.patch | |
| parent | 5c3a29b4196039bf3682e700f57695606a6316af (diff) | |
| download | aports-01d4acb671dde727097762b4d371c036e0918db3.tar.bz2 aports-01d4acb671dde727097762b4d371c036e0918db3.tar.xz | |
main/lddtree: Fix ldso.conf parsing for musl binaries
Diffstat (limited to 'main/lddtree/0001-use-musl-ldso-conf.patch')
| -rw-r--r-- | main/lddtree/0001-use-musl-ldso-conf.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/main/lddtree/0001-use-musl-ldso-conf.patch b/main/lddtree/0001-use-musl-ldso-conf.patch new file mode 100644 index 0000000000..a0f2b32186 --- /dev/null +++ b/main/lddtree/0001-use-musl-ldso-conf.patch @@ -0,0 +1,79 @@ +Author: Ain <41307858+nero@users.noreply.github.com> + + Fix ldso configuration parsing for musl binaries + + Previously, lddtree always checked for the glibc library paths, even + when ran on a musl binary. This resulted in incorrect results on + multiarch systems with both musl and glibc. + +diff --git a/lddtree.sh b/lddtree.sh +index 5f06813..74ca830 100755 +--- a/lddtree.sh ++++ b/lddtree.sh +@@ -107,7 +107,7 @@ c_ldso_paths_loaded='false' + find_elf() { + _find_elf='' + +- local elf=$1 needed_by=$2 ++ local interp elf=$1 needed_by=$2 + if [ "${elf}" != "${elf##*/}" ] && [ -e "${elf}" ] ; then + _find_elf=${elf} + return 0 +@@ -151,28 +151,36 @@ find_elf() { + if ! ${c_ldso_paths_loaded} ; then + c_ldso_paths_loaded='true' + c_ldso_paths= +- if [ -r ${ROOT}etc/ld.so.conf ] ; then +- read_ldso_conf() { +- local line p +- for p ; do +- # if the glob didnt match anything #360041, +- # or the files arent readable, skip it +- [ -r "${p}" ] || continue +- while read line ; do +- case ${line} in +- "#"*) ;; +- "include "*) read_ldso_conf ${line#* } ;; +- *) c_ldso_paths="$c_ldso_paths:${ROOT}${line#/}";; +- esac +- done <"${p}" +- done +- } +- # the 'include' command is relative +- local _oldpwd="$PWD" +- cd "$ROOT"etc >/dev/null ++ read_ldso_conf() { ++ local line p ++ for p ; do ++ # if the glob didnt match anything #360041, ++ # or the files arent readable, skip it ++ [ -r "${p}" ] || continue ++ while read line ; do ++ case ${line} in ++ "#"*) ;; ++ "include "*) read_ldso_conf ${line#* } ;; ++ *) c_ldso_paths="$c_ldso_paths:${ROOT}${line#/}";; ++ esac ++ done <"${p}" ++ done ++ } ++ # the 'include' command is relative ++ local _oldpwd="$PWD" ++ cd "$ROOT"etc >/dev/null ++ interp=$(elf_interp "${needed_by}") ++ case "$interp" in ++ */ld-musl-*) ++ musl_arch=${interp%.so*} ++ musl_arch=${musl_arch##*-} ++ read_ldso_conf "${ROOT}"etc/ld-musl-${musl_arch}.path ++ ;; ++ */ld-linux*|*/ld.so*) # glibc + read_ldso_conf "${ROOT}"etc/ld.so.conf +- cd "$_oldpwd" +- fi ++ ;; ++ esac ++ cd "$_oldpwd" + fi + if [ -n "${c_ldso_paths}" ] ; then + check_paths "${elf}" "${c_ldso_paths}" && return 0 |
