This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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]

[GAS][AARCH64]use subseg_text_p to check whether current segment is thought to hold text.


Hi all,

Direct compare with text_section is not a good way to check whether the section is thought to hold text or not. subseg_text_p is used instead to cover more cases. The section's flags are checked within subseg_text_p function.

Binutils regression test runs Okay. aarch64-none-linux-gnu is cross-built and checked without any new issues.
Okay to commit?

gas/ChangeLog:

2015-04-07  Renlin Li  <renlin.li@arm.com>

        * config/tc-aarch64.c (mapping_state): Use subseg_text_p.
        (s_aarch64_inst): Likewise.
        (md_assemble): Likewise.


diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 2163d53..08a16a1 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -1472,8 +1472,8 @@ mapping_state (enum mstate state)
     record_alignment (now_seg, 2);
 
 #define TRANSITION(from, to) (mapstate == (from) && state == (to))
-  if (TRANSITION (MAP_UNDEFINED, MAP_DATA) && now_seg != text_section)
-    /* Emit MAP_DATA within text section in order. Otherwise, it will be
+  if (TRANSITION (MAP_UNDEFINED, MAP_DATA) && !subseg_text_p (now_seg))
+    /* Emit MAP_DATA within executable section in order. Otherwise, it will be
        evaluated later in the next else.  */
     return;
   else if (TRANSITION (MAP_UNDEFINED, MAP_INSN))
@@ -1855,13 +1855,13 @@ s_aarch64_inst (int ignored ATTRIBUTE_UNUSED)
       return;
     }
 
-  /* Sections are assumed to start aligned. In text section, there is no
+  /* Sections are assumed to start aligned. In executable section, there is no
      MAP_DATA symbol pending. So we only align the address during
      MAP_DATA --> MAP_INSN transition.
      For other sections, this is not guaranteed, align it anyway.  */
   enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
-  if (!need_pass_2 && ((now_seg == text_section && mapstate == MAP_DATA)
-		       || now_seg != text_section))
+  if (!need_pass_2 && ((subseg_text_p (now_seg) && mapstate == MAP_DATA)
+		       || !subseg_text_p (now_seg)))
     frag_align_code (2, 0);
 
 #ifdef OBJ_ELF
@@ -5705,14 +5705,14 @@ md_assemble (char *str)
 	dump_opcode_operands (opcode);
 #endif /* DEBUG_AARCH64 */
 
-    /* Sections are assumed to start aligned. In text section, there is no
+    /* Sections are assumed to start aligned. In executable section, there is no
        MAP_DATA symbol pending. So we only align the address during
        MAP_DATA --> MAP_INSN transition.
        For other sections, this is not guaranteed, align it anyway.  */
     enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
-    if (!need_pass_2 && ((now_seg == text_section && mapstate == MAP_DATA)
-			 || now_seg != text_section))
-	frag_align_code (2, 0);
+    if (!need_pass_2 && ((subseg_text_p (now_seg) && mapstate == MAP_DATA)
+			 || !subseg_text_p (now_seg)))
+      frag_align_code (2, 0);
 
       mapping_state (MAP_INSN);
 



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