Thanks, Yuanjie. I see how your patch changes multiarch() to return quickly and thus avoid dpkg if the user provides a sysroot or libdir, but it also comments out some checking to verify that the dynamic linker is in the correct location and executable. (I'm referring to the following hunk from your patch.) It looks like your changes disable this verification by commenting some of it out.
+@@ -661,16 +669,16 @@ ld_path_name = os.path.dirname(ldlib)
+ ld_full_path = "../" + ldlib
+ ld_file = find_lib(ld_file_name)
+
+-if ld_path_name != "/lib":
+- if os.access(dest_path + "/" + ld_file_name, os.F_OK):
+- os.remove(dest_path + "/" + ld_file_name)
++#if ld_path_name != "/lib":
++# if os.access(dest_path + "/" + ld_file_name, os.F_OK):
++# os.remove(dest_path + "/" + ld_file_name)
+
+-if not os.path.exists(dest_path + "/../" + ld_path_name):
+- os.mkdir(dest_path + "/../" + ld_path_name)
++#if not os.path.exists(dest_path + "/../" + ld_path_name):
++# os.mkdir(dest_path + "/../" + ld_path_name)
+
+-if not os.access(dest_path + "/" + ld_full_path, os.F_OK):
+- debug(DEBUG_NORMAL, "I: stripping and copying dynamic linker to " + ld_full_path)
++if not os.access(dest_path + "/" + ld_file_name, os.F_OK):
++ debug(DEBUG_NORMAL, "I: stripping and copying dynamic linker to " + ld_file_name)
+ command(target + "objcopy", "--strip-unneeded -R .note -R .comment",
+- ld_file, dest_path + "/" + ld_full_path)
++ ld_file, dest_path + "/" + ld_file_name)
+
+-os.chmod(dest_path + "/" + ld_full_path, 0755)
++os.chmod(dest_path + "/" + ld_file_name, 0755)
@@ -441,6 +447,8 @@ if not ldlib:
if not ldlib:
sys.exit("E: Dynamic linker not found, aborting.")
+ldlib = sysroot + ldlib
+
debug(DEBUG_NORMAL, "I: Using", ldlib, "as dynamic linker.")
# Check for rpaths
Reverting the last hunk in your poky commit fixes the mklibs error we encounter in our multilib setup containing /lib and /lib64 symlinks to the linker.