mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 21:41:47 +08:00
[ARM]Fix "align directive causes MAP_DATA symbol to be lost"
gas/ 2015-03-10 Renlin Li <renlin.li@arm.com> * config/tc-arm.c (mapping_state): Remove first MAP_DATA emitting code. (mapping_state_2): Emit first MAP_DATA symbol here. gas/testsuite/ 2015-03-05 Renlin Li <renlin.li@arm.com> * gas/arm/dis-data.d: Adjust the desired output. * gas/arm/dis-data2.d: Ditto.
This commit is contained in:

committed by
Jiong Wang

parent
c8f89a3423
commit
4e9aaefbd0
@ -1,3 +1,8 @@
|
|||||||
|
2015-03-10 Renlin Li <renlin.li@arm.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (mapping_state): Remove first MAP_DATA emitting code.
|
||||||
|
(mapping_state_2): Emit first MAP_DATA symbol here.
|
||||||
|
|
||||||
2015-03-10 Matthew Wahab <matthew.wahab@arm.com>
|
2015-03-10 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* config/tc-aarch64.c (mapping_state): Set minimum alignment for
|
* config/tc-aarch64.c (mapping_state): Set minimum alignment for
|
||||||
|
@ -2632,13 +2632,12 @@ static void mapping_state_2 (enum mstate state, int max_chars);
|
|||||||
/* Set the mapping state to STATE. Only call this when about to
|
/* Set the mapping state to STATE. Only call this when about to
|
||||||
emit some STATE bytes to the file. */
|
emit some STATE bytes to the file. */
|
||||||
|
|
||||||
|
#define TRANSITION(from, to) (mapstate == (from) && state == (to))
|
||||||
void
|
void
|
||||||
mapping_state (enum mstate state)
|
mapping_state (enum mstate state)
|
||||||
{
|
{
|
||||||
enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
|
enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate;
|
||||||
|
|
||||||
#define TRANSITION(from, to) (mapstate == (from) && state == (to))
|
|
||||||
|
|
||||||
if (mapstate == state)
|
if (mapstate == state)
|
||||||
/* The mapping symbol has already been emitted.
|
/* The mapping symbol has already been emitted.
|
||||||
There is nothing else to do. */
|
There is nothing else to do. */
|
||||||
@ -2661,24 +2660,10 @@ mapping_state (enum mstate state)
|
|||||||
record_alignment (now_seg, state == MAP_ARM ? 2 : 1);
|
record_alignment (now_seg, state == MAP_ARM ? 2 : 1);
|
||||||
|
|
||||||
if (TRANSITION (MAP_UNDEFINED, MAP_DATA))
|
if (TRANSITION (MAP_UNDEFINED, MAP_DATA))
|
||||||
/* This case will be evaluated later in the next else. */
|
/* This case will be evaluated later. */
|
||||||
return;
|
return;
|
||||||
else if (TRANSITION (MAP_UNDEFINED, MAP_ARM)
|
|
||||||
|| TRANSITION (MAP_UNDEFINED, MAP_THUMB))
|
|
||||||
{
|
|
||||||
/* Only add the symbol if the offset is > 0:
|
|
||||||
if we're at the first frag, check it's size > 0;
|
|
||||||
if we're not at the first frag, then for sure
|
|
||||||
the offset is > 0. */
|
|
||||||
struct frag * const frag_first = seg_info (now_seg)->frchainP->frch_root;
|
|
||||||
const int add_symbol = (frag_now != frag_first) || (frag_now_fix () > 0);
|
|
||||||
|
|
||||||
if (add_symbol)
|
|
||||||
make_mapping_symbol (MAP_DATA, (valueT) 0, frag_first);
|
|
||||||
}
|
|
||||||
|
|
||||||
mapping_state_2 (state, 0);
|
mapping_state_2 (state, 0);
|
||||||
#undef TRANSITION
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Same as mapping_state, but MAX_CHARS bytes have already been
|
/* Same as mapping_state, but MAX_CHARS bytes have already been
|
||||||
@ -2697,9 +2682,20 @@ mapping_state_2 (enum mstate state, int max_chars)
|
|||||||
There is nothing else to do. */
|
There is nothing else to do. */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (TRANSITION (MAP_UNDEFINED, MAP_ARM)
|
||||||
|
|| TRANSITION (MAP_UNDEFINED, MAP_THUMB))
|
||||||
|
{
|
||||||
|
struct frag * const frag_first = seg_info (now_seg)->frchainP->frch_root;
|
||||||
|
const int add_symbol = (frag_now != frag_first) || (frag_now_fix () > 0);
|
||||||
|
|
||||||
|
if (add_symbol)
|
||||||
|
make_mapping_symbol (MAP_DATA, (valueT) 0, frag_first);
|
||||||
|
}
|
||||||
|
|
||||||
seg_info (now_seg)->tc_segment_info_data.mapstate = state;
|
seg_info (now_seg)->tc_segment_info_data.mapstate = state;
|
||||||
make_mapping_symbol (state, (valueT) frag_now_fix () - max_chars, frag_now);
|
make_mapping_symbol (state, (valueT) frag_now_fix () - max_chars, frag_now);
|
||||||
}
|
}
|
||||||
|
#undef TRANSITION
|
||||||
#else
|
#else
|
||||||
#define mapping_state(x) ((void)0)
|
#define mapping_state(x) ((void)0)
|
||||||
#define mapping_state_2(x, y) ((void)0)
|
#define mapping_state_2(x, y) ((void)0)
|
||||||
|
@ -1,8 +1,15 @@
|
|||||||
|
2015-03-05 Renlin Li <renlin.li@arm.com>
|
||||||
|
|
||||||
|
* gas/arm/dis-data.d: Adjust the desired output.
|
||||||
|
* gas/arm/dis-data2.d: Ditto.
|
||||||
|
|
||||||
2015-03-10 Renlin Li <renlin.li@arm.com>
|
2015-03-10 Renlin Li <renlin.li@arm.com>
|
||||||
|
|
||||||
* gas/aarch64/ldst-reg-uns-imm.d: Adjust expected output.
|
* gas/aarch64/ldst-reg-uns-imm.d: Adjust expected output.
|
||||||
* gas/aarch64/ldst-reg-unscaled-imm.d: Likewise.
|
* gas/aarch64/ldst-reg-unscaled-imm.d: Likewise.
|
||||||
* gas/aarch64/reloc-insn.d: Likewise.2015-03-10 Matthew Wahab <matthew.wahab@arm.com>
|
* gas/aarch64/reloc-insn.d: Likewise.
|
||||||
|
|
||||||
|
2015-03-10 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* gas/aarch64/codealign.d: Add test for code section alignment.
|
* gas/aarch64/codealign.d: Add test for code section alignment.
|
||||||
* gas/aarch64/codealign.s: New file.
|
* gas/aarch64/codealign.s: New file.
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
.*: +file format .*arm.*
|
.*: +file format .*arm.*
|
||||||
|
|
||||||
Disassembly of section \.text:
|
Disassembly of section \.text:
|
||||||
0x00000000 20010000 andcs r0, r1, r0
|
00000000 <.text> 20010000 .word 0x20010000
|
||||||
0x00000004 000000f9 strdeq r0, \[r0\], -r9
|
00000004 <.text\+0x4> 000000f9 .word 0x000000f9
|
||||||
0x00000008 00004cd5 ldrdeq r4, \[r0\], -r5
|
00000008 <.text\+0x8> 00004cd5 .word 0x00004cd5
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
.*: +file format .*arm.*
|
.*: +file format .*arm.*
|
||||||
|
|
||||||
Disassembly of section \.text:
|
Disassembly of section \.text:
|
||||||
00000000 <main> 20010000 andcs r0, r1, r0
|
00000000 <main> 20010000 .word 0x20010000
|
||||||
00000004 <main\+0x4> 000000f9 strdeq r0, \[r0\], -r9
|
00000004 <main\+0x4> 000000f9 .word 0x000000f9
|
||||||
00000008 <main\+0x8> 00004cd5 ldrdeq r4, \[r0\], -r5
|
00000008 <main\+0x8> 00004cd5 .word 0x00004cd5
|
||||||
|
Reference in New Issue
Block a user