>     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.march...@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.march...@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.march...@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.march...@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  <m...@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)

Reply via email to