This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[2.25][AARCH64][GAS]Backport "Positively emit symbols for alignment."
- From: Renlin Li <renlin dot li at arm dot com>
- To: "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: Nicholas Clifton <nickc at redhat dot com>, Marcus Shawcroft <Marcus dot Shawcroft at arm dot com>
- Date: Wed, 17 Jun 2015 10:38:57 +0100
- Subject: [2.25][AARCH64][GAS]Backport "Positively emit symbols for alignment."
- Authentication-results: sourceware.org; auth=none
- References: <553A3CAD dot 3050208 at arm dot com>
Hi all,
This is a backport patch from the discussion here:
https://sourceware.org/ml/binutils/2015-05/msg00027.html
https://sourceware.org/ml/binutils/2015-05/msg00027.html
The expected results of testcases are modified to account the status of
binutils 2.25.
Binutils, ld, gas regression test Okay. Okay to commit for branch 2.25?
Regards,
Renlin Li
gas/ChangeLog:
2015-06-17 Renlin Li <renlin.li@arm.com>
Backport from mainline.
2015-05-05 Renlin Li <renlin.li@arm.com>
* config/tc-aarch64.c (aarch64_init_frag): Always generate
mapping symbols.
gas/testsuite/ChangeLog:
2015-06-17 Renlin Li <renlin.li@arm.com>
Backport from mainline.
2015-05-05 Renlin Li <renlin.li@arm.com>
* gas/aarch64/mapping_5.d: New.
* gas/aarch64/mapping_5.s: New.
* gas/aarch64/mapping_6.d: New.
* gas/aarch64/mapping_6.s: New.
On 24/04/15 13:53, Renlin Li wrote:
Hi all,
In arm_init_frag(), when ARM or THUMB are recorded, it will simply
return without doing anything. This is not correct in a few cases.
For the following two cases:
case 1:
nop ----> MAP_ARM
.long 0 ---> MAP_DATA
.align 4 --->
---->(1)
----> start new frag
.word 0x12345678
(1) paddings here are all treated as data, because the previous state
is MAP_DATA.
case 2:
nop ----> MAP_ARM
.long 0 ---> MAP_DATA
.byte 1
.align 2 ---> (1)
----> (2)
----> start new frag
.long 0x12345678 ----> (3)
stage 1: while parsing the input file:
(1) arm_init_frag early returns, No state change, no new symbol. (3)No
state change, no new symbol.
stage 2: Later, while writing the object file:
(2)MAP_DATA, MAP_ARM are inserted by insert_data_mapping_symol to
handle alignment. (3) interpreted as instruction because of the
MAP_ARM inserted at (2)
This change might generate redundant symbols, some of them can be
removed later. In check_mapping_symbols(), the symbols at the end of a
section, and overlapping symbols will be removed.
gas checked without any new issues. Okay to commit?
By the way, Nick, aarch64 has the same issue. The same can be done to
aarch64_init_frag(). Another way is to remove
fragP->tc_frag_data.recorded. It's only used in a few places. But I am
sure what dose it intended to do, Could you please explain a little
bit for me?
Regards,
Renlin Li
gas/ChangeLog:
2015-04-24 Renlin Li <renlin.li@arm.com>
* config/tc-arm.c (arm_init_frag): Always emit mapping symbols.
gas/testsuite/ChangeLog:
2015-04-24 Renlin Li <renlin.li@arm.com>
* gas/arm/thumb2_vpool_be.d: Adjust the desired output.
* gas/arm/vldconst_be.d: Ditto.
commit 262a89bcf8dd349e065d46896965c49054c8a034
Author: Renlin Li <renlin.li@arm.com>
Date: Wed Jun 3 16:34:10 2015 +0100
aarch64 backport
Change-Id: Ie8d550c3518a25de0094fe7dc7bcfecd1ac77356
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 62a1a3f..015b0b7 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -5914,21 +5914,20 @@ aarch64_init_frag (fragS * fragP, int max_chars)
/* Record a mapping symbol for alignment frags. We will delete this
later if the alignment ends up empty. */
if (!fragP->tc_frag_data.recorded)
+ fragP->tc_frag_data.recorded = 1;
+
+ switch (fragP->fr_type)
{
- fragP->tc_frag_data.recorded = 1;
- switch (fragP->fr_type)
- {
- case rs_align:
- case rs_align_test:
- case rs_fill:
- mapping_state_2 (MAP_DATA, max_chars);
- break;
- case rs_align_code:
- mapping_state_2 (MAP_INSN, max_chars);
- break;
- default:
- break;
- }
+ case rs_align:
+ case rs_align_test:
+ case rs_fill:
+ mapping_state_2 (MAP_DATA, max_chars);
+ break;
+ case rs_align_code:
+ mapping_state_2 (MAP_INSN, max_chars);
+ break;
+ default:
+ break;
}
}
diff --git a/gas/testsuite/gas/aarch64/mapping_5.d b/gas/testsuite/gas/aarch64/mapping_5.d
new file mode 100644
index 0000000..8a85038
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mapping_5.d
@@ -0,0 +1,14 @@
+#objdump: --syms --special-syms
+#name: AArch64 Mapping Symbols Test 5
+
+.*: +file format.*aarch64.*
+
+SYMBOL TABLE:
+[0]+00 l d .text [0]+00 .text
+[0]+00 l d .data [0]+00 .data
+[0]+00 l d .bss [0]+00 .bss
+[0]+00 l .text [0]+00 \$x
+[0]+04 l .text [0]+00 \$d
+[0]+08 l .text [0]+00 \$x
+[0]+10 l .text [0]+00 \$d
+[0]+14 l .text [0]+00 \$x
diff --git a/gas/testsuite/gas/aarch64/mapping_5.s b/gas/testsuite/gas/aarch64/mapping_5.s
new file mode 100644
index 0000000..2cb95ed
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mapping_5.s
@@ -0,0 +1,5 @@
+ .text
+ nop
+ .long 0
+ .align 4
+ .word 0x12345678
diff --git a/gas/testsuite/gas/aarch64/mapping_6.d b/gas/testsuite/gas/aarch64/mapping_6.d
new file mode 100644
index 0000000..df6bdaa
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mapping_6.d
@@ -0,0 +1,15 @@
+#objdump: --syms --special-syms
+#name: AArch64 Mapping Symbols Test 6
+
+.*: +file format.*aarch64.*
+
+SYMBOL TABLE:
+[0]+00 l d .text [0]+00 .text
+[0]+00 l d .data [0]+00 .data
+[0]+00 l d .bss [0]+00 .bss
+[0]+00 l .text [0]+00 \$x
+[0]+04 l .text [0]+00 \$d
+[0]+10 l .text [0]+00 \$d
+[0]+14 l .text [0]+00 \$x
+[0]+09 l .text [0]+00 \$d
+[0]+0c l .text [0]+00 \$x
diff --git a/gas/testsuite/gas/aarch64/mapping_6.s b/gas/testsuite/gas/aarch64/mapping_6.s
new file mode 100644
index 0000000..4e0e2c5
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/mapping_6.s
@@ -0,0 +1,6 @@
+ .text
+ nop
+ .long 0
+ .byte 1
+ .align 4
+ .word 0x12345678