[AArch64] Record instruction alignment for .inst directive
authorRenlin Li <renlin.li@arm.com>
Wed, 6 May 2015 11:18:19 +0000 (12:18 +0100)
committerJiong Wang <jiong.wang@arm.com>
Wed, 6 May 2015 11:18:19 +0000 (12:18 +0100)
2015-05-06  Renlin Li  <renlin.li@arm.com>

  gas/
    * config/tc-aarch64.c (mapping_state): Recording alignment before exit.

  gas/testsuite/
    * gas/aarch64/codealign_1.s: New.
    * gas/aarch64/codealign_1.d: New.

gas/ChangeLog
gas/config/tc-aarch64.c
gas/testsuite/ChangeLog
gas/testsuite/gas/aarch64/codealign_1.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/codealign_1.s [new file with mode: 0644]

index c873270..3d2feb9 100644 (file)
@@ -1,3 +1,7 @@
+2015-05-06  Renlin Li  <renlin.li@arm.com>
+
+       * config/tc-aarch64.c (mapping_state): Recording alignment before exit.
+
 2015-05-05  Renlin Li  <renlin.li@arm.com>
 
        * config/tc-aarch64.c (aarch64_init_frag): Always generate mapping
index 12012de..ae0e2d6 100644 (file)
@@ -1460,17 +1460,17 @@ mapping_state (enum mstate state)
 {
   enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
 
-  if (mapstate == state)
-    /* The mapping symbol has already been emitted.
-       There is nothing else to do.  */
-    return;
-
   if (state == MAP_INSN)
     /* AArch64 instructions require 4-byte alignment.  When emitting
        instructions into any section, record the appropriate section
        alignment.  */
     record_alignment (now_seg, 2);
 
+  if (mapstate == state)
+    /* The mapping symbol has already been emitted.
+       There is nothing else to do.  */
+    return;
+
 #define TRANSITION(from, to) (mapstate == (from) && state == (to))
   if (TRANSITION (MAP_UNDEFINED, MAP_DATA) && !subseg_text_p (now_seg))
     /* Emit MAP_DATA within executable section in order.  Otherwise, it will be
index 29649e1..41604ef 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-06  Renlin Li  <renlin.li@arm.com>
+
+       * gas/aarch64/codealign_1.s: New.
+       * gas/aarch64/codealign_1.d: New.
+
 2015-05-05  Renlin Li  <renlin.li@arm.com>
 
        * gas/aarch64/mapping_5.d: New.
diff --git a/gas/testsuite/gas/aarch64/codealign_1.d b/gas/testsuite/gas/aarch64/codealign_1.d
new file mode 100644 (file)
index 0000000..08f4c25
--- /dev/null
@@ -0,0 +1,13 @@
+#objdump: --section-headers
+# Minimum code alignment should be set.
+
+.*: +file format.*aarch64.*
+
+Sections:
+Idx Name          Size      VMA               LMA               File off  Algn
+  0 \.text         .*  .*  .*  .*  2\*\*2
+                  .*CODE.*
+  1 \.data         .*  .*  .* .*  2\*\*0
+                  .*DATA.*
+  2 \.bss          .*  .*  .*  .*  2\*\*0
+.*
diff --git a/gas/testsuite/gas/aarch64/codealign_1.s b/gas/testsuite/gas/aarch64/codealign_1.s
new file mode 100644 (file)
index 0000000..b27cc6b
--- /dev/null
@@ -0,0 +1,3 @@
+.text
+  .byte 0xf
+  .inst 0xd503201f