image_util: use qemu to run native ldconfig
New glibc(glibc 2.16+) does not support generating ld.so.cache for
arm on x86 architectures. This change uses qemu to run native ldconfig
for arm platforms.
BUG=chromium:378377
TEST=the daisy image has the right ld.so.cache with glibc 2.19
Change-Id: Ib0193eda1511031678285facabf6546268f773ce
Reviewed-on: https://chromium-review.googlesource.com/201877
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Yunlian Jiang <yunlian@chromium.org>
Tested-by: Yunlian Jiang <yunlian@chromium.org>
diff --git a/build_library/base_image_util.sh b/build_library/base_image_util.sh
index cda848b..1a5317a 100755
--- a/build_library/base_image_util.sh
+++ b/build_library/base_image_util.sh
@@ -118,7 +118,7 @@
emerge_to_image --root="${root_fs_dir}" ${BASE_PACKAGE}
# Run ldconfig to create /etc/ld.so.cache.
- sudo ldconfig -r "${root_fs_dir}"
+ run_ldconfig "${root_fs_dir}"
# Set /etc/lsb-release on the image.
"${OVERLAY_CHROMEOS_DIR}/scripts/cros_set_lsb_release" \
diff --git a/build_library/build_image_util.sh b/build_library/build_image_util.sh
index 149d95c..a91015e 100755
--- a/build_library/build_image_util.sh
+++ b/build_library/build_image_util.sh
@@ -230,3 +230,18 @@
)
sudo_multi "${cmds[@]}"
}
+
+# ldconfig cannot generate caches for non-native arches.
+# Use qemu & the native ldconfig to work around that.
+# http://crbug.com/378377
+run_ldconfig() {
+ local root_fs_dir=$1
+ case ${ARCH} in
+ arm)
+ sudo qemu-arm "${root_fs_dir}"/sbin/ldconfig -r "${root_fs_dir}";;
+ x86|amd64)
+ sudo ldconfig -r "${root_fs_dir}";;
+ *)
+ die "Unable to run ldconfig for ARCH ${ARCH}"
+ esac
+}
diff --git a/build_library/dev_image_util.sh b/build_library/dev_image_util.sh
index f550c32..2d13636 100755
--- a/build_library/dev_image_util.sh
+++ b/build_library/dev_image_util.sh
@@ -61,7 +61,7 @@
sudo mkdir -p ${root_fs_dir}/etc/make.profile
# Re-run ldconfig to fix /etc/ld.so.cache.
- sudo ldconfig -r "${root_fs_dir}"
+ run_ldconfig "${root_fs_dir}"
# Additional changes to developer image.
sudo mkdir -p "${root_fs_dir}/root"
diff --git a/build_library/test_image_util.sh b/build_library/test_image_util.sh
index c380498..d3f263e 100755
--- a/build_library/test_image_util.sh
+++ b/build_library/test_image_util.sh
@@ -57,7 +57,7 @@
fi
# Re-run ldconfig to fix /etc/ld.so.cache.
- sudo ldconfig -r "${root_fs_dir}"
+ run_ldconfig "${root_fs_dir}"
cleanup_mounts
trap - EXIT