From: Mark Wielaard <m...@klomp.org>

generateBuildIDs should mimic what find-debuginfo.sh does. Only check
build-ids for executable files in non-debuginfo packages. This moves the
isDbg check up so the is executeble check can be done when the file is
part of the main package.

This fixes the build of qemu and uboot-tools in fedora. Both ship
non-executable ELF bios files in architecture specific packages.
https://bugzilla.redhat.com/show_bug.cgi?id=1433837

Signed-off-by: Mark Wielaard <m...@klomp.org>
---
 build/files.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/build/files.c b/build/files.c
index 6021643..afa01cd 100644
--- a/build/files.c
+++ b/build/files.c
@@ -1711,6 +1711,19 @@ static int generateBuildIDs(FileList fl)
     for (i = 0, flp = fl->files.recs; i < fl->files.used; i++, flp++) {
        struct stat sbuf;
        if (lstat(flp->diskPath, &sbuf) == 0 && S_ISREG (sbuf.st_mode)) {
+           /* We determine whether this is a main or
+              debug ELF based on path.  */
+           #define DEBUGPATH "/usr/lib/debug/"
+           int isDbg = strncmp (flp->cpioPath,
+                                DEBUGPATH, strlen (DEBUGPATH)) == 0;
+
+           /* For the main package files mimic what find-debuginfo.sh does.
+              Only check build-ids for executable files. Debug files are
+              always non-executable. */
+           if (!isDbg
+               && (sbuf.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)
+             continue;
+
            int fd = open (flp->diskPath, O_RDONLY);
            if (fd >= 0) {
                /* Only real ELF files, that are ET_EXEC, ET_DYN or
@@ -1732,12 +1745,8 @@ static int generateBuildIDs(FileList fl)
                       is 128 bits) and 64 bytes (largest sha3 is 512
                       bits), common is 20 bytes (sha1 is 160 bits). */
                    if (len >= 16 && len <= 64) {
-                       /* We determine whether this is a main or
-                          debug ELF based on path.  */
-                       #define DEBUGPATH "/usr/lib/debug/"
                        int addid = 0;
-                       if (strncmp (flp->cpioPath,
-                                    DEBUGPATH, strlen (DEBUGPATH)) == 0) {
+                       if (isDbg) {
                            needDbg = 1;
                            addid = 1;
                        }
-- 
1.8.3.1

_______________________________________________
Rpm-maint mailing list
Rpm-maint@lists.rpm.org
http://lists.rpm.org/mailman/listinfo/rpm-maint

Reply via email to