]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
bfd / PE/COFF: permit SEC_READONLY and consolidate
authorJan Beulich <jbeulich@suse.com>
Fri, 10 Oct 2025 14:01:16 +0000 (16:01 +0200)
committerJan Beulich <jbeulich@suse.com>
Fri, 10 Oct 2025 14:01:16 +0000 (16:01 +0200)
Without SEC_READONLY, even the default .text section would end up with
the IMAGE_SCN_MEM_WRITE flag, which is clearly wrong. (Afaict the flag,
oddly enough, doesn't affect the final linked binary, so there likely
are more anomalies.)

However, as suggested by Richard Earnshaw, PE's requirements are really
target independent. Consolidate SEC_CODE, SEC_DATA, SEC_READONLY,
SEC_LINK_ONCE, and SEC_LINK_DUPLICATES into target-independent code. Yet
of course targets not using CREATE_*_COFF_TARGET_VEC() won't benefit.

Note that in coff-arm.c the EXTRA_S_FLAGS conditional was also stale
(leftover from EPOC removal), and hence can go away.

bfd/coff-arm.c
bfd/coff-mcore.c
bfd/coff-sh.c
bfd/coffcode.h

index ee574518b771ce9c8846cd71159e8414f66c400e..94faaf640bbd457220ec92b9f434f61b70c9f6ca 100644 (file)
@@ -2560,17 +2560,9 @@ coff_arm_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED,
 #define TARGET_UNDERSCORE 0
 #endif
 
-#ifndef EXTRA_S_FLAGS
-#ifdef COFF_WITH_PE
-#define EXTRA_S_FLAGS (SEC_CODE | SEC_LINK_ONCE | SEC_LINK_DUPLICATES)
-#else
-#define EXTRA_S_FLAGS SEC_CODE
-#endif
-#endif
-
 /* Forward declaration for use initialising alternative_target field.  */
 extern const bfd_target TARGET_BIG_SYM ;
 
 /* Target vectors.  */
-CREATE_LITTLE_COFF_TARGET_VEC (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, D_PAGED, EXTRA_S_FLAGS, TARGET_UNDERSCORE, & TARGET_BIG_SYM, COFF_SWAP_TABLE)
-CREATE_BIG_COFF_TARGET_VEC (TARGET_BIG_SYM, TARGET_BIG_NAME, D_PAGED, EXTRA_S_FLAGS, TARGET_UNDERSCORE, & TARGET_LITTLE_SYM, COFF_SWAP_TABLE)
+CREATE_LITTLE_COFF_TARGET_VEC (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, D_PAGED, SEC_CODE, TARGET_UNDERSCORE, & TARGET_BIG_SYM, COFF_SWAP_TABLE)
+CREATE_BIG_COFF_TARGET_VEC (TARGET_BIG_SYM, TARGET_BIG_NAME, D_PAGED, SEC_CODE, TARGET_UNDERSCORE, & TARGET_LITTLE_SYM, COFF_SWAP_TABLE)
index fab10a7ae081227d16f12ae61cf7e4145dae48c6..28adbd9329f0dd3cbac743e74bd8588e6889c35c 100644 (file)
@@ -564,8 +564,8 @@ extern const bfd_target TARGET_LITTLE_SYM;
 
 /* The transfer vectors that lead the outside world to all of the above.  */
 CREATE_BIG_COFF_TARGET_VEC (TARGET_BIG_SYM, TARGET_BIG_NAME, D_PAGED,
-                           (SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_READONLY | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
+                           SEC_DEBUGGING,
                            0, & TARGET_LITTLE_SYM, COFF_SWAP_TABLE)
 CREATE_LITTLE_COFF_TARGET_VEC (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME, D_PAGED,
-                              (SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_READONLY | SEC_LINK_ONCE | SEC_LINK_DUPLICATES),
+                              SEC_DEBUGGING,
                               0, & TARGET_BIG_SYM, COFF_SWAP_TABLE)
index c3e0e42023090de5c9bf301539ca8cf4d9ef05a7..008d1e7b38f0a92e7880af480fe54374df5cf6cc 100644 (file)
@@ -3023,7 +3023,7 @@ CREATE_BIG_COFF_TARGET_VEC (sh_coff_vec, "coff-sh", BFD_IS_RELAXABLE, 0, '_', NU
 
 #ifdef COFF_WITH_PE
 CREATE_LITTLE_COFF_TARGET_VEC (TARGET_SYM, TARGET_SHL_NAME, BFD_IS_RELAXABLE,
-                              SEC_CODE | SEC_DATA, '_', NULL, COFF_SWAP_TABLE);
+                              0, '_', NULL, COFF_SWAP_TABLE);
 #else
 CREATE_LITTLE_COFF_TARGET_VEC (TARGET_SYM, TARGET_SHL_NAME, BFD_IS_RELAXABLE,
                               0, '_', NULL, COFF_SWAP_TABLE)
index 7de6a93f904cae98d63ec778e1e88a846a61fb5c..5cfdb2dc56bba8091e0eceacf29a9a66e7815aeb 100644 (file)
@@ -6057,6 +6057,13 @@ static const bfd_coff_backend_data bigobj_swap_table =
 #define coff_bfd_define_start_stop         bfd_generic_define_start_stop
 #endif
 
+#ifdef COFF_WITH_PE
+#define PE_EXTRA_S_FLAGS (SEC_CODE | SEC_DATA | SEC_READONLY | SEC_LINK_ONCE \
+                         | SEC_LINK_DUPLICATES)
+#else
+#define PE_EXTRA_S_FLAGS 0
+#endif
+
 #define CREATE_BIG_COFF_TARGET_VEC(VAR, NAME, EXTRA_O_FLAGS, EXTRA_S_FLAGS, UNDER, ALTERNATIVE, SWAP_TABLE)    \
 const bfd_target VAR =                                                 \
 {                                                                      \
@@ -6068,7 +6075,8 @@ const bfd_target VAR =                                                    \
   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG |                       \
    HAS_SYMS | HAS_LOCALS | WP_TEXT | EXTRA_O_FLAGS),                   \
   /* section flags */                                                  \
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS),\
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS  \
+   | PE_EXTRA_S_FLAGS),                                                 \
   UNDER,                       /* Leading symbol underscore.  */       \
   '/',                         /* AR_pad_char.  */                     \
   15,                          /* AR_max_namelen.  */                  \
@@ -6130,7 +6138,8 @@ const bfd_target VAR =                                                    \
   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG |                       \
    HAS_SYMS | HAS_LOCALS | WP_TEXT | EXTRA_O_FLAGS),                   \
   /* section flags */                                                  \
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS),\
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS  \
+   | PE_EXTRA_S_FLAGS),                                                 \
   UNDER,                       /* Leading symbol underscore.  */       \
   '/',                         /* AR_pad_char.  */                     \
   15,                          /* AR_max_namelen.  */                  \
@@ -6192,7 +6201,8 @@ const bfd_target VAR =                                                    \
   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG |                       \
    HAS_SYMS | HAS_LOCALS | WP_TEXT | EXTRA_O_FLAGS),                   \
        /* section flags */                                             \
-  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS),\
+  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | EXTRA_S_FLAGS  \
+   | PE_EXTRA_S_FLAGS),                                                 \
   UNDER,                       /* Leading symbol underscore.  */       \
   '/',                         /* AR_pad_char.  */                     \
   15,                          /* AR_max_namelen.  */                  \