Hi.

I'm planning some refactoring related to 'section *' and I noticed we have
quite ugly mask definitions (of form 1UL << N), where SECTION_FORGET is unused
and

#define SECTION_STYLE_MASK 0x600000     /* bits used for SECTION_STYLE */

Is actually OR of 2 other values. What about making that a standard enum value
with 1UL << N values?

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

        * output.h (enum section_flag): New.
        (SECTION_FORGET): Remove.
        (SECTION_ENTSIZE): Make it (1UL << 8) - 1.
        (SECTION_STYLE_MASK): Define it based on other enum
        values.
        * varasm.c (switch_to_section): Remove unused handling of
        SECTION_FORGET.
---
 gcc/output.h | 85 +++++++++++++++++++++++++++++-----------------------
 gcc/varasm.c |  5 +---
 2 files changed, 48 insertions(+), 42 deletions(-)

diff --git a/gcc/output.h b/gcc/output.h
index 73ca4545f4f..8f6f15308f4 100644
--- a/gcc/output.h
+++ b/gcc/output.h
@@ -365,44 +365,53 @@ extern void default_function_switched_text_sections (FILE 
*, tree, bool);
 extern void no_asm_to_stream (FILE *);
/* Flags controlling properties of a section. */
-#define SECTION_ENTSIZE         0x000ff        /* entity size in section */
-#define SECTION_CODE    0x00100        /* contains code */
-#define SECTION_WRITE   0x00200        /* data is writable */
-#define SECTION_DEBUG   0x00400        /* contains debug data */
-#define SECTION_LINKONCE 0x00800       /* is linkonce */
-#define SECTION_SMALL   0x01000        /* contains "small data" */
-#define SECTION_BSS     0x02000        /* contains zeros only */
-#define SECTION_FORGET  0x04000        /* forget that we've entered the 
section */
-#define SECTION_MERGE   0x08000        /* contains mergeable data */
-#define SECTION_STRINGS  0x10000       /* contains zero terminated strings 
without
-                                          embedded zeros */
-#define SECTION_OVERRIDE 0x20000       /* allow override of default flags */
-#define SECTION_TLS     0x40000        /* contains thread-local storage */
-#define SECTION_NOTYPE  0x80000        /* don't output @progbits */
-#define SECTION_DECLARED 0x100000      /* section has been used */
-#define SECTION_STYLE_MASK 0x600000    /* bits used for SECTION_STYLE */
-#define SECTION_COMMON   0x800000      /* contains common data */
-#define SECTION_RELRO   0x1000000      /* data is readonly after relocation 
processing */
-#define SECTION_EXCLUDE  0x2000000     /* discarded by the linker */
-#define SECTION_RETAIN  0x4000000      /* retained by the linker.  */
-#define SECTION_LINK_ORDER 0x8000000   /* section needs link-order.  */
-
-/* NB: The maximum SECTION_MACH_DEP is 0x10000000 since AVR needs 4 bits
-   in SECTION_MACH_DEP.  */
-#define SECTION_MACH_DEP 0x10000000    /* subsequent bits reserved for target 
*/
-
-/* This SECTION_STYLE is used for unnamed sections that we can switch
-   to using a special assembler directive.  */
-#define SECTION_UNNAMED         0x000000
-
-/* This SECTION_STYLE is used for named sections that we can switch
-   to using a general section directive.  */
-#define SECTION_NAMED   0x200000
-
-/* This SECTION_STYLE is used for sections that we cannot switch to at
-   all.  The choice of section is implied by the directive that we use
-   to declare the object.  */
-#define SECTION_NOSWITCH 0x400000
+enum section_flag
+{
+  /* This SECTION_STYLE is used for unnamed sections that we can switch
+     to using a special assembler directive.  */
+  SECTION_UNNAMED = 0,
+
+  SECTION_ENTSIZE = (1UL << 8) - 1,      /* entity size in section */
+  SECTION_CODE = 1UL << 8,               /* contains code */
+  SECTION_WRITE = 1UL << 9,              /* data is writable */
+
+  SECTION_DEBUG = 1UL << 10,             /* contains debug data */
+  SECTION_LINKONCE = 1UL << 11,          /* is linkonce */
+  SECTION_SMALL = 1UL << 12,             /* contains "small data" */
+  SECTION_BSS = 1UL << 13,               /* contains zeros only */
+  SECTION_MERGE = 1UL << 14,             /* contains mergeable data */
+  SECTION_STRINGS = 1UL << 15,           /* contains zero terminated strings
+                                          without embedded zeros */
+  SECTION_OVERRIDE = 1UL << 16,          /* allow override of default flags */
+  SECTION_TLS = 1UL << 17,               /* contains thread-local storage */
+  SECTION_NOTYPE = 1UL << 18,            /* don't output @progbits */
+  SECTION_DECLARED = 1UL << 19,          /* section has been used */
+
+  /* This SECTION_STYLE is used for named sections that we can switch
+     to using a general section directive.  */
+  SECTION_NAMED = 1UL << 20,
+
+  /* This SECTION_STYLE is used for sections that we cannot switch to at
+     all.  The choice of section is implied by the directive that we use
+     to declare the object.  */
+  SECTION_NOSWITCH = 1UL << 21,
+
+  /* bits used for SECTION_STYLE */
+  SECTION_STYLE_MASK = SECTION_NAMED | SECTION_NOSWITCH,
+
+  SECTION_COMMON = 1UL << 22,            /* contains common data */
+  SECTION_RELRO = 1UL << 23,             /* data is readonly after
+                                          relocation processing */
+  SECTION_EXCLUDE = 1UL << 24,           /* discarded by the linker */
+  SECTION_RETAIN = 1UL << 25,            /* retained by the linker.  */
+  SECTION_LINK_ORDER = 1UL << 26,        /* section needs link-order.  */
+
+  /* NB: The maximum SECTION_MACH_DEP is (1UL << 28) since AVR needs 4 bits
+     in SECTION_MACH_DEP.  */
+  SECTION_MACH_DEP = 1UL << 27,
+
+  /* subsequent bits reserved for target */
+};
/* A helper function for default_elf_select_section and
    default_elf_unique_section.  Categorizes the DECL.  */
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 53cf6dea3f3..0a5f2e35bb0 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -7821,10 +7821,7 @@ switch_to_section (section *new_section, tree decl)
   else if (in_section == new_section)
     return;
- if (new_section->common.flags & SECTION_FORGET)
-    in_section = NULL;
-  else
-    in_section = new_section;
+  in_section = new_section;
switch (SECTION_STYLE (new_section))
     {
--
2.33.0

Reply via email to