Skip to contentSkip to conversation

package_manager.py: fix RPM_PREFER_ELF_ARCH for mips

PATCH In review Robert Yang 2 participants 4 messages Nov 23, 2015

lore
Share & tools
lore
#0 lore raw

cover package_manager.py: fix RPM_PREFER_ELF_ARCH for mips

The following changes since commit 6f98c39418c60b7c0b25b30983d2e5257158a6a4:

gcc: Drop 4.8 (2015-11-16 14:59:07 +0000)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib rbt/elf
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/elf

Robert Yang (1):
package_manager.py: fix RPM_PREFER_ELF_ARCH for mips

 meta/lib/oe/package_manager.py |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 package_manager.py: fix RPM_PREFER_ELF_ARCH for mips

We can install 64 bit pkg to 32 bit pkg, so the previous checking is incorrect, it should not only check mips64 or mips64el, the "mips" should work, and 64bit ELF can also use mips as TUNE_ARCH, and there are other mips varieties, so only check whether TUNE_ARCH starts with mips or not.

---
 meta/lib/oe/package_manager.py |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
meta/lib/oe/package_manager.py +4 -5
index 964fddc..5e7bb66 100644
@@ -954,12 +954,11 @@ class RpmPM(PackageManager):
                 bb.fatal("Invalid RPM_PREFER_ELF_ARCH: %s, it should be one of:\n"
                         "\t1: ELF32 wins\n"
                         "\t2: ELF64 wins\n"
-                        "\t4: ELF64 N32 wins (mips64 or mips64el only)" %
+                        "\t4: ELF64 N32 wins (mips only)" %
                         prefer_color)
-            if prefer_color == "4" and self.d.getVar("TUNE_ARCH", True) not in \
-                                    ['mips64', 'mips64el']:
-                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips64 or mips64el "
-                         "only.")
+            if prefer_color == "4" and not \
+                    self.d.getVar("TUNE_ARCH", True).startswith('mips'):
+                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips only.")
             self._invoke_smart('config --set rpm-extra-macros._prefer_color=%s'
                         % prefer_color)
 
Signature · 1 line
1.7.9.5
#2 lore raw
Quoted 16 lines · Robert Yang

We can install 64 bit pkg to 32 bit pkg, so the previous checking is incorrect, it should not only check mips64 or mips64el, the "mips" should work, and 64bit ELF can also use mips as TUNE_ARCH, and there are other mips varieties, so only check whether TUNE_ARCH starts with mips or not.

---
 meta/lib/oe/package_manager.py |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
meta/lib/oe/package_manager.py +0 -0
index 964fddc..5e7bb66 100644

meta/lib/oe/package_manager.py class RpmPM(PackageManager): · line 957

Quoted 5 lines
meta/lib/oe/package_manager.py +1 -1
@@ -954,12 +954,11 @@ class RpmPM(PackageManager):
                 bb.fatal("Invalid RPM_PREFER_ELF_ARCH: %s, it should be one of:\n"
                         "\t1: ELF32 wins\n"
                         "\t2: ELF64 wins\n"
-                        "\t4: ELF64 N32 wins (mips64 or mips64el only)" %
+                        "\t4: ELF64 N32 wins (mips only)" %

N32 is only available on a MIPS64 platform. It requires MIPS64 instructions, which is why it is documented as such above.

meta/lib/oe/package_manager.py class RpmPM(PackageManager): · line 961

Quoted 8 lines
meta/lib/oe/package_manager.py +3 -4
                         prefer_color)
-            if prefer_color == "4" and self.d.getVar("TUNE_ARCH", True) not in \
-                                    ['mips64', 'mips64el']:
-                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips64 or mips64el "
-                         "only.")
+            if prefer_color == "4" and not \
+                    self.d.getVar("TUNE_ARCH", True).startswith('mips'):
+                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips only.")

The bug is that it's looking for TUNE_ARCH, it should be MACHINE_ARCH in this case. Since the overall MACHINE Is what defined if it can be used or not.

--Mark

Quoted 4 lines
meta/lib/oe/package_manager.py +0 -0
             self._invoke_smart('config --set rpm-extra-macros._prefer_color=%s'
                         % prefer_color)
 
#3 lore raw
Quoted 35 lines · Mark Hatle
Quoted 16 lines · Robert Yang

We can install 64 bit pkg to 32 bit pkg, so the previous checking is incorrect, it should not only check mips64 or mips64el, the "mips" should work, and 64bit ELF can also use mips as TUNE_ARCH, and there are other mips varieties, so only check whether TUNE_ARCH starts with mips or not.

---
 meta/lib/oe/package_manager.py |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
meta/lib/oe/package_manager.py +0 -0
index 964fddc..5e7bb66 100644

meta/lib/oe/package_manager.py class RpmPM(PackageManager): · line 957

Quoted 5 lines
meta/lib/oe/package_manager.py +1 -1
@@ -954,12 +954,11 @@ class RpmPM(PackageManager):
                 bb.fatal("Invalid RPM_PREFER_ELF_ARCH: %s, it should be one of:\n"
                         "\t1: ELF32 wins\n"
                         "\t2: ELF64 wins\n"
-                        "\t4: ELF64 N32 wins (mips64 or mips64el only)" %
+                        "\t4: ELF64 N32 wins (mips only)" %

N32 is only available on a MIPS64 platform. It requires MIPS64 instructions, which is why it is documented as such above.

meta/lib/oe/package_manager.py class RpmPM(PackageManager): · line 961

Quoted 8 lines
meta/lib/oe/package_manager.py +3 -4
                         prefer_color)
-            if prefer_color == "4" and self.d.getVar("TUNE_ARCH", True) not in \
-                                    ['mips64', 'mips64el']:
-                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips64 or mips64el "
-                         "only.")
+            if prefer_color == "4" and not \
+                    self.d.getVar("TUNE_ARCH", True).startswith('mips'):
+                bb.fatal("RPM_PREFER_ELF_ARCH = \"4\" is for mips only.")
Quoted 2 lines

The bug is that it's looking for TUNE_ARCH, it should be MACHINE_ARCH in this case. Since the overall MACHINE Is what defined if it can be used or not.

I just realized, it's not MACHINE_ARCH either. It's the canonical arch that is derived from the MACHINE_ARCH -- which may not be available at this point.

So doing the sanity based on the TUNE_ARCH starting with mips might be the best compromise. But the comment should remain that it's only applicable on MIPS64.

--Mark

Quoted 7 lines

--Mark

Quoted 4 lines
meta/lib/oe/package_manager.py +0 -0
             self._invoke_smart('config --set rpm-extra-macros._prefer_color=%s'
                         % prefer_color)