[Rpm-maint] [PATCH] build/files.c: Only check build-ids for executable files in the main package.

Mark Wielaard mjw at redhat.com
Mon Mar 20 10:52:00 UTC 2017


From: Mark Wielaard <mark at 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 <mark at 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



More information about the Rpm-maint mailing list