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]

Re: [PATCH 1/2] MIPS/gas: Retain ISA mode bit for labels with .insn annotation


OK.

On Tue, Aug 6, 2019 at 7:38 AM Faraz Shahbazker
<fshahbazker@wavecomp.com> wrote:
>
> gas/
>         * config/tc-mips.c (mips_move_labels): Retain ISA mode bit
>         when moving labels in text segments.
>         (mips_align): Indicate text mode when aligning labels in
>         text segments.
>         * gas/testsuite/gas/mips/insn-isa-mode.d: New test.
>         * gas/testsuite/gas/mips/insn-isa-mode.s: New test source.
>         * gas/testsuite/gas/mips/mips.exp: Run the new test.
> ---
>  gas/config/tc-mips.c                   |  7 ++++---
>  gas/testsuite/gas/mips/insn-isa-mode.d | 16 ++++++++++++++++
>  gas/testsuite/gas/mips/insn-isa-mode.s | 14 ++++++++++++++
>  gas/testsuite/gas/mips/mips.exp        |  1 +
>  4 files changed, 35 insertions(+), 3 deletions(-)
>  create mode 100644 gas/testsuite/gas/mips/insn-isa-mode.d
>  create mode 100644 gas/testsuite/gas/mips/insn-isa-mode.s
>
> diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
> index b7b4b69..38a1b8c 100644
> --- a/gas/config/tc-mips.c
> +++ b/gas/config/tc-mips.c
> @@ -4441,9 +4441,10 @@ mips_move_labels (struct insn_label_list *labels, bfd_boolean text_p)
>        gas_assert (S_GET_SEGMENT (l->label) == now_seg);
>        symbol_set_frag (l->label, frag_now);
>        val = (valueT) frag_now_fix ();
> -      /* MIPS16/microMIPS text labels are stored as odd.  */
> +      /* MIPS16/microMIPS text labels are stored as odd.
> +        We just carry the ISA mode bit forward.  */
>        if (text_p && HAVE_CODE_COMPRESSION)
> -       ++val;
> +       val |= (S_GET_VALUE (l->label) & 0x1);
>        S_SET_VALUE (l->label, val);
>      }
>  }
> @@ -16218,7 +16219,7 @@ mips_align (int to, int *fill, struct insn_label_list *labels)
>    else
>      frag_align (to, fill ? *fill : 0, 0);
>    record_alignment (now_seg, to);
> -  mips_move_labels (labels, FALSE);
> +  mips_move_labels (labels, subseg_text_p (now_seg));
>  }
>
>  /* Align to a given power of two.  .align 0 turns off the automatic
> diff --git a/gas/testsuite/gas/mips/insn-isa-mode.d b/gas/testsuite/gas/mips/insn-isa-mode.d
> new file mode 100644
> index 0000000..9d2c61b
> --- /dev/null
> +++ b/gas/testsuite/gas/mips/insn-isa-mode.d
> @@ -0,0 +1,16 @@
> +#objdump: -dr --show-raw-insn
> +#name: microMIPS ISA mode for .insn label references
> +#as: -32
> +
> +.*: +file format .*mips.*
> +
> +Disassembly of section \.text:
> +00000000 <test1>:
> +   0:  3c030000        lui     v1,0x0
> +                       0: R_MIPS_HI16  \.text
> +   4:  2463000b        addiu   v1,v1,11
> +                       4: R_MIPS_LO16  \.text
> +00000008 <test2>:
> +   8:  0c00            nop
> +   a:  0c00            nop
> +       \.\.\.
> diff --git a/gas/testsuite/gas/mips/insn-isa-mode.s b/gas/testsuite/gas/mips/insn-isa-mode.s
> new file mode 100644
> index 0000000..ecc520f
> --- /dev/null
> +++ b/gas/testsuite/gas/mips/insn-isa-mode.s
> @@ -0,0 +1,14 @@
> +       .text
> +       .set nomicromips
> +       .globl test1
> +       .type   test1, @function
> +test1:
> +       la $3,test2+2
> +       .set micromips
> +test2:
> +       .insn
> +       .half 0x0c00
> +       .half 0x0c00
> +# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
> +       .align  4, 0
> +       .space  16
> diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
> index eaeb488..2084ee0 100644
> --- a/gas/testsuite/gas/mips/mips.exp
> +++ b/gas/testsuite/gas/mips/mips.exp
> @@ -2093,4 +2093,5 @@ if { [istarget mips*-*-vxworks*] } {
>      } else {
>         run_dump_test "pr14798"
>      }
> +    run_dump_test "insn-isa-mode"
>  }
> --
> 2.9.5
>


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