diff options
author | Patrick Williams <patrick@stwcx.xyz> | 2016-08-17 22:31:25 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2016-08-22 19:43:26 +0300 |
commit | 60f9d69e016b11c468c98ea75ba0a60c44afbbc4 (patch) | |
tree | ecb49581a9e41a37943c22cd9ef3f63451b20ee7 /import-layers/yocto-poky/meta/recipes-devtools/mklibs | |
parent | e18c61205e0234b03697129c20cc69c9b3940efc (diff) | |
download | openbmc-60f9d69e016b11c468c98ea75ba0a60c44afbbc4.tar.xz |
yocto-poky: Move to import-layers subdir
We are going to import additional layers, so create a subdir to
hold all of the layers that we import with git-subtree.
Change-Id: I6f732153a22be8ca663035c518837e3cc5ec0799
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Diffstat (limited to 'import-layers/yocto-poky/meta/recipes-devtools/mklibs')
7 files changed, 301 insertions, 0 deletions
diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/ac_init_fix.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/ac_init_fix.patch new file mode 100644 index 000000000..422af1042 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/ac_init_fix.patch @@ -0,0 +1,19 @@ +Get the version of mklibs by simpler means. The MKLIBS_VERSION string in the +configure.ac file is replaced with real version string by the +do_configure_prepend() function from the recipe .bb file. + +Upstream-Status: Inappropriate [configuration] + +Nitin A Kamble <nitin.a.kamble@intel.com> +Date: 2011/01/24 + +Index: mklibs/configure.ac +=================================================================== +--- mklibs.orig/configure.ac 2010-02-21 17:34:56.000000000 -0800 ++++ mklibs/configure.ac 2011-01-24 18:52:19.943242079 -0800 +@@ -1,4 +1,4 @@ +-AC_INIT([mklibs],m4_esyscmd(dpkg-parsechangelog | perl -ne 'print $1 if m/^Version: (.*)$/;')) ++AC_INIT([mklibs], MKLIBS_VERSION) + AM_INIT_AUTOMAKE([foreign no-define]) + AC_CONFIG_HEADERS([config.h]) + AM_MAINTAINER_MODE diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch new file mode 100644 index 000000000..7d6d62e77 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/avoid-failure-on-symbol-provided-by-application.patch @@ -0,0 +1,102 @@ +From f172101130604e4a9efa5746f4d8d30de99a0fdc Mon Sep 17 00:00:00 2001 +From: Yuanjie Huang <yuanjie.huang@windriver.com> +Date: Fri, 17 Apr 2015 14:48:20 +0800 +Subject: [PATCH] avoid failure on symbol provided by application + +Upstream-Status: Pending + +Undefined symbols in a library can be provided by the application +that links to the library, such as `logsink' in libmultipath.so.0. +This fix checks the type of object in which the symbol is needed +and the existence of the symbol in application, when a symbol +cannot be provided by libraries. It prevents false alarm on absence +of symbols. + +Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com> +--- + src/mklibs | 28 ++++++++++++++++++++++++---- + 1 file changed, 24 insertions(+), 4 deletions(-) + +diff --git a/src/mklibs b/src/mklibs +index c5614ea..b0d9034 100755 +--- a/src/mklibs ++++ b/src/mklibs +@@ -133,9 +133,9 @@ class Symbol(object): + return '@'.join(ret) + + class UndefinedSymbol(Symbol): +- def __init__(self, name, weak, version, library): ++ def __init__(self, name, weak, version, library, object): + super(UndefinedSymbol, self).__init__(name, version, library) +- self.weak, self.library = weak, library ++ self.weak, self.library, self.object = weak, library, object + + # Return undefined symbols in an object as a set of tuples (name, weakness) + def undefined_symbols(obj): +@@ -144,6 +144,11 @@ def undefined_symbols(obj): + + output = command("mklibs-readelf", "--print-symbols-undefined", obj) + ++ if len(obj) > len(dest_path) and obj[:len(dest_path)] == dest_path: ++ object = obj[len(dest_path) + 1:-len('-so-stripped')] ++ else: ++ object = obj ++ + result = [] + for line in output: + name, weak_string, version_string, library_string = line.split()[:4] +@@ -160,7 +165,7 @@ def undefined_symbols(obj): + if library_string.lower() != 'none': + library = library_string + +- result.append(UndefinedSymbol(name, weak, version, library)) ++ result.append(UndefinedSymbol(name, weak, version, library, object)) + + return result + +@@ -495,12 +500,13 @@ while 1: + and re.search("^ps_", str(symbol))) + and not (re.search("ld-linux.so.3$", str(symbol))) + and not (re.search("^__gnu_local_gp", str(symbol)))): +- debug(DEBUG_SPAM, "needed_symbols adding %s, weak: %s" % (symbol, symbol.weak)) ++ debug(DEBUG_SPAM, "needed_symbols adding %s, weak: %s, for %s" % (symbol, symbol.weak, obj)) + needed_symbols[str(symbol)] = symbol + libraries.update(library_depends(obj)) + + # calculate what symbols are present in small_libs and available_libs + present_symbols = {} ++ present_symbol_progs = {} + checked_libs = small_libs + checked_libs.extend(available_libs) + checked_libs.append(ldlib) +@@ -510,6 +516,12 @@ while 1: + names = symbol.base_names() + for name in names: + present_symbols[name] = symbol ++ if not so_pattern.match(lib): ++ debug(DEBUG_SPAM, "present_symbol_progs adding %s, from executable %s" % (' '.join(names), lib)) ++ for name in names: ++ progs = present_symbol_progs.get(name, set()) ++ progs.add(lib) ++ present_symbol_progs[name] = progs + + # are we finished? + num_unresolved = 0 +@@ -565,6 +577,14 @@ while 1: + for name in needed_symbols: + if not name in symbol_provider: + if not needed_symbols[name].weak: ++ # WORKAROUND: Undefined symbols in a library can be provided by the application ++ # that links to the library. So if the object which requires the symbol is a library ++ # and some application can provide the symbol, the undefined symbol is skipped. ++ symbol = needed_symbols[name] ++ if so_pattern.match(symbol.object) and present_symbol_progs.get(name, None): ++ debug(DEBUG_SPAM, "symbol %s in library %s is provided by executable %s" \ ++ % (name, symbol.object, ' '.join(present_symbol_progs[name]))) ++ continue + raise Exception("No library provides non-weak %s" % name) + else: + lib = symbol_provider[name] +-- +1.8.5.2.233.g932f7e4 + diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch new file mode 100644 index 000000000..d27a48916 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_STT_GNU_IFUNC.patch @@ -0,0 +1,26 @@ +The libc6-dev in Ubuntu 9.04 is so old that the elf.h doesn't +define STT_GNU_IFUNC, so we have to define it ourselves. + +Upstream-Status: Inappropriate [other] - old release specific, maybe removable + +-- Dexuan Cui (dexuan.cui@intel.com) Feb 16, 2011. + +diff --git a/src/mklibs-readelf/main.cpp b/src/mklibs-readelf/main.cpp +index 2444c39..56d93f8 100644 +--- a/src/mklibs-readelf/main.cpp ++++ b/src/mklibs-readelf/main.cpp +@@ -6,6 +6,14 @@ + #include <vector> + + #include <elf.h> ++/* ++ * The /usr/include/elf.h in some distributions(like Ubuntu 9.04) doesn't ++ * define the macro. We need to define it here. ++ */ ++#ifndef STT_GNU_IFUNC ++#define STT_GNU_IFUNC 10 /* Symbol is indirect code object */ ++#endif ++ + #include <getopt.h> + + #include "elf.hpp" diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch new file mode 100644 index 000000000..13e4606b8 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/fix_cross_compile.patch @@ -0,0 +1,81 @@ +Remove dependency on dpkg + +Upstream-Status: Submitted + +Asking the host OS whether it supports multiarch is not useful +in a cross-compilation environment, or if the user has specified +a libdir explicitly. So this patch, based on the work of Mentor +Graphics, removes mklibs's dependency on dpkg package. + +Signed-off-by: Yuanjie Huang <Yuanjie.Huang@windriver.com> + src/mklibs | 30 +++++++++++++++++++----------- + 1 file changed, 19 insertions(+), 11 deletions(-) + +diff --git a/src/mklibs b/src/mklibs +index d9b784b..c5614ea 100755 +--- a/src/mklibs ++++ b/src/mklibs +@@ -261,6 +261,11 @@ def extract_soname(so_file): + return "" + + def multiarch(paths): ++ # Asking the host OS whether it supports multiarch is not useful ++ # in a cross-compilation environment, or if the user has specified ++ # a libdir explicitly. ++ if sysroot != "" or libdir != "": ++ return paths + devnull = open('/dev/null', 'w') + dpkg_architecture = subprocess.Popen( + ['dpkg-architecture', '-qDEB_HOST_MULTIARCH'], +@@ -340,7 +345,7 @@ lib_path = [] + dest_path = "DEST" + ldlib = "LDLIB" + include_default_lib_path = "yes" +-default_lib_path = multiarch(["/lib/", "/usr/lib/", "/usr/X11R6/lib/"]) ++default_lib_path = ["/lib/", "/usr/lib/", "/usr/X11R6/lib/"] + libc_extras_dir = "/usr/lib/libc_pic" + libc_extras_dir_default = True + libdir = "lib" +@@ -386,7 +391,7 @@ for opt, arg in optlist: + elif opt == "--libdir": + libdir = arg + elif opt in ("--help", "-h"): +- usage(0) ++ usage(0) + sys.exit(0) + elif opt in ("--version", "-V"): + version(vers) +@@ -395,6 +400,7 @@ for opt, arg in optlist: + print "WARNING: unknown option: " + opt + "\targ: " + arg + + if include_default_lib_path == "yes": ++ default_lib_path = multiarch(default_lib_path) + lib_path.extend([a.replace("/lib/", "/" + libdir + "/") for a in default_lib_path]) + + if libc_extras_dir_default: +@@ -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) diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch new file mode 100644 index 000000000..bc56593e6 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/show-GNU-unique-symbols-as-provided-symbols.patch @@ -0,0 +1,34 @@ +From eddf04c7f8312e9c29cdb24e431b7e4fb2cc70ed Mon Sep 17 00:00:00 2001 +From: Yuanjie Huang <yuanjie.huang@windriver.com> +Date: Wed, 15 Apr 2015 14:00:06 +0800 +Subject: [PATCH] Show GNU unique symbols as provided symbols + +Upstream-Status: Submitted + +GNU Unique symbol is a GNU extension employed by new version of GCC +by default. Even Standard C++ library in GCC 4.9 provides some symbols, +such as _ZNSs4_Rep20_S_empty_rep_storageE in this binding type instead +of ELF standard weak binding. +This patch adds support of this new binding type to mklibs-readelf. + +Signed-off-by: Yuanjie Huang <yuanjie.huang@windriver.com> +--- + src/mklibs-readelf/main.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/mklibs-readelf/main.cpp b/src/mklibs-readelf/main.cpp +index 56d93f8..0134530 100644 +--- a/src/mklibs-readelf/main.cpp ++++ b/src/mklibs-readelf/main.cpp +@@ -88,7 +88,7 @@ static void process_symbols_provided (const Elf::section_type<Elf::section_type_ + uint8_t type = symbol->get_type (); + const std::string &name = symbol->get_name_string (); + +- if (bind != STB_GLOBAL && bind != STB_WEAK) ++ if (bind != STB_GLOBAL && bind != STB_WEAK && bind != STB_GNU_UNIQUE) + continue; + if (shndx == SHN_UNDEF || shndx == SHN_ABS) + continue; +-- +1.8.5.2.233.g932f7e4 + diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch new file mode 100644 index 000000000..75500a029 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/files/sysrooted-ldso.patch @@ -0,0 +1,18 @@ +In cross builds we will have to respect sysroot + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +Upstream-Status: Pending + +Index: mklibs-0.1.39/src/mklibs +=================================================================== +--- mklibs-0.1.39.orig/src/mklibs 2014-03-01 18:25:36.000000000 +0000 ++++ mklibs-0.1.39/src/mklibs 2014-10-19 00:51:46.813534596 +0000 +@@ -495,7 +495,7 @@ + present_symbols = {} + checked_libs = small_libs + checked_libs.extend(available_libs) +- checked_libs.append(ldlib) ++ checked_libs.append(sysroot + ldlib) + for lib in checked_libs: + for symbol in provided_symbols(lib): + debug(DEBUG_SPAM, "present_symbols adding %s" % symbol) diff --git a/import-layers/yocto-poky/meta/recipes-devtools/mklibs/mklibs-native_0.1.40.bb b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/mklibs-native_0.1.40.bb new file mode 100644 index 000000000..59fec29a0 --- /dev/null +++ b/import-layers/yocto-poky/meta/recipes-devtools/mklibs/mklibs-native_0.1.40.bb @@ -0,0 +1,21 @@ +SUMMARY = "Shared library optimisation tool" +DESCRIPTION = "mklibs produces cut-down shared libraries that contain only the routines required by a particular set of executables." +HOMEPAGE = "https://launchpad.net/mklibs" +SECTION = "devel" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://debian/copyright;md5=98d31037b13d896e33890738ef01af64" +DEPENDS = "python-native" + +SRC_URI = "http://ftp.de.debian.org/debian/pool/main/m/mklibs/${BPN}_${PV}.tar.xz \ + file://ac_init_fix.patch\ + file://fix_STT_GNU_IFUNC.patch\ + file://sysrooted-ldso.patch \ + file://avoid-failure-on-symbol-provided-by-application.patch \ + file://show-GNU-unique-symbols-as-provided-symbols.patch \ + file://fix_cross_compile.patch \ +" + +SRC_URI[md5sum] = "e1dafe5f962caa9dc5f2651c0723812a" +SRC_URI[sha256sum] = "1db24ae779d21ccfed49f22e49a2b7ee43ec0e9197bc206d81cd02f96e91e125" + +inherit autotools gettext native pythonnative |