This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] elflint: do not rely on ebl_check_special_section when checking debuginfo files.



    >     This patch just modifies elflint to not use the hook when -d is
    >     specified in the command-line.  This fixes the test in sparc-* and
    >     sparc64-* targets (and presumably in alpha* targets too).
    >     
    >     Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
    
    OK, so you cannot really check this through check_special_section
    because you need access to the dynamic section to check whether this is
    really is the special section we are looking for. And .dynamic is also
    nobits in a debuginfo file. So we cannot verify. I think we should at
    least also check that the section itself is NOBITS in that case.
    

What about this.


commit 01b4f63005dd55632f49373a1d9ffe60acb9c211
Author: Jose E. Marchesi <jose.marchesi@oracle.com>
Date:   Tue Oct 13 12:40:44 2015 -0400

    Do not rely on ebl_check_special_section when checking debuginfo files.
    
    The test run-strip-strmerge.sh is failing in sparc targets.  This is
    because it does an `elflint -d' in a debuginfo file, and this fails
    with:
    
      section [21] '.plt' is both executable and writable
    
    elflint uses the ebl_check_special_section hook (implemented only by
    the alpha and sparc backends) in order to determine whether an
    executable+writable section must be flagged or not.  In both cases the
    hook will fail analyzing eu-strip debuginfo files (as they should,
    because debuginfo files are broken ;).
    
    This patch just modifies elflint to not use the hook when -d is
    specified in the command-line.  This fixes the test in sparc-* and
    sparc64-* targets (and presumably in alpha* targets too).
    
    Additionaly, the patch checks that the type of WE sections in
    debuginfo files is NOBITS.
    
    Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
    
    Conflicts:
    
    	src/ChangeLog

diff --git a/src/ChangeLog b/src/ChangeLog
index 796878f..0f4ce33 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-13  Jose E. Marchesi  <jose.marchesi@oracle.com>
+
+	* elflint.c (check_sections): Do not rely on
+	ebl_check_special_section when checking debuginfo files.  Also
+	check that the type of WE sections in debuginfo files is NOBITS.
+
 2015-10-07  Mark Wielaard  <mjw@redhat.com>
 
 	* Makefile.am (ldlex_no_Wstack_usage): New.
diff --git a/src/elflint.c b/src/elflint.c
index fac457e..9683c1c 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -3938,12 +3938,20 @@ section [%2zu] '%s' has unexpected type %d for an executable section\n"),
 	      break;
 	    }
 
-	  if ((shdr->sh_flags & SHF_WRITE)
-	      && !ebl_check_special_section (ebl, cnt, shdr,
-					     section_name (ebl, cnt)))
-	    ERROR (gettext ("\
+	  if (shdr->sh_flags & SHF_WRITE)
+	    {
+	      if (is_debuginfo && shdr->sh_type != SHT_NOBITS)
+		ERROR (gettext ("\
+section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"),
+		       cnt, section_name (ebl, cnt));
+	      
+	      if (!is_debuginfo
+		  && !ebl_check_special_section (ebl, cnt, shdr,
+						 section_name (ebl, cnt)))
+		ERROR (gettext ("\
 section [%2zu] '%s' is both executable and writable\n"),
-		   cnt, section_name (ebl, cnt));
+		       cnt, section_name (ebl, cnt));
+	    }
 	}
 
       if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]