[binutils-gdb] ld: fix coff PE SEH

Tamar Christina tnfchris@sourceware.org
Fri Dec 31 11:43:34 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e5b10c4079279db9aa86225a3b4b4c30280c322e

commit e5b10c4079279db9aa86225a3b4b4c30280c322e
Author: Tamar Christina <tamar.christina@arm.com>
Date:   Fri Dec 31 11:42:07 2021 +0000

    ld: fix coff PE SEH
    
    COFF_WITH_pex64 and COFF_WITH_peAArch64 can't be true at the same time.
    That means that two conditionals that control the sorting of the .pdata section
    became a falsum.
    
    The testsuite doesn't catch this because the linker does the sorting and to link
    you require library support from the unwinder so we can't test from binutils in
    isolation.
    
    bfd/ChangeLog:
    
    2021-12-31  Tamar Christina  <tamar.christina@arm.com>
    
            PR ld/28682
            * peXXigen.c: Fix conditional.

Diff:
---
 bfd/peXXigen.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 5f977ea32dc..48e52b09046 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -3088,7 +3088,7 @@ _bfd_XX_get_symbol_info (bfd * abfd, asymbol *symbol, symbol_info *ret)
   coff_get_symbol_info (abfd, symbol, ret);
 }
 
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
+#if !defined(COFF_WITH_pep) && (defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64))
 static int
 sort_x64_pdata (const void *l, const void *r)
 {
@@ -4516,7 +4516,7 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo)
 
 /* If there is a .pdata section and we have linked pdata finally, we
      need to sort the entries ascending.  */
-#if !defined(COFF_WITH_pep) && defined(COFF_WITH_pex64) && defined(COFF_WITH_peAArch64)
+#if !defined(COFF_WITH_pep) && (defined(COFF_WITH_pex64) || defined(COFF_WITH_peAArch64))
   {
     asection *sec = bfd_get_section_by_name (abfd, ".pdata");


More information about the Binutils-cvs mailing list