summaryrefslogtreecommitdiffstats
path: root/mkinitcpio
diff options
context:
space:
mode:
Diffstat (limited to 'mkinitcpio')
-rwxr-xr-xmkinitcpio20
1 files changed, 19 insertions, 1 deletions
diff --git a/mkinitcpio b/mkinitcpio
index 85e81b2..4082ba5 100755
--- a/mkinitcpio
+++ b/mkinitcpio
@@ -14,6 +14,7 @@ shopt -s extglob
# Settings
KERNELVERSION=$(uname -r)
+CARCH=$(uname -m)
FUNCTIONS=functions
CONFIG=mkinitcpio.conf
HOOKDIR=hooks
@@ -21,7 +22,7 @@ INSTDIR=install
PRESETDIR=mkinitcpio.d
COMPRESSION=gzip
-declare TMPDIR BASEDIR MODULE_FILE GENIMG PRESET COMPRESSION_OPTIONS BUILDROOT
+declare TMPDIR BASEDIR MODULE_FILE GENIMG PRESET COMPRESSION_OPTIONS BUILDROOT LD_SO
declare NC= BOLD= BLUE= GREEN= RED= YELLOW=
declare -i QUIET=1 SHOW_AUTOMODS=0 SAVELIST=0 COLOR=1
declare -a SKIPHOOKS ADDED_MODULES
@@ -285,6 +286,23 @@ trap '[[ $FUNCNAME = parse_hook ]] && (( ++builderrors ))' ERR
#parse 'global' hook, as defined in ${CONFIG}
parse_hook
+# resolve the linker and add it
+case $CARCH in
+ i686) LD_SO=("$BASEDIR"/lib/ld-linux.so.?*) ;;
+ x86_64) LD_SO=("$BASEDIR"/lib/ld-linux-${CARCH//_/-}.so.?*) ;;
+ *) die "unknown architecture: $CARCH" ;;
+esac
+
+if (( ${#LD_SO[*]} != 1 )); then # uh oh...
+ die "failed to resolve the location of /lib/ld.so. Please report this bug."
+fi
+
+resolved=$(readlink -e "$LD_SO")
+_add_dir "${resolved%/*}" 755
+_add_symlink "${LD_SO#$BASEDIR}" "${resolved#$BASEDIR}"
+_add_file "${resolved#$BASEDIR}" "${resolved#$BASEDIR}" 755
+unset resolved
+
for hook in ${HOOKS}; do
in_array "$hook" "${SKIPHOOKS[@]}" && continue
unset MODULES BINARIES FILES SCRIPT