diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2016-03-08 14:19:52 +0100 |
---|---|---|
committer | Claudiu Zissulescu <claziss@synopsys.com> | 2016-03-08 14:19:52 +0100 |
commit | 72f3b6aae734d8cdcded38aca94e379848bec7ef (patch) | |
tree | af7ba7ac67dab430d88682b2e7f6805e60e80829 /include | |
parent | 8e460aa0a4fbd535ebe383ba2748bb78bbf2a92d (diff) | |
download | gdb-72f3b6aae734d8cdcded38aca94e379848bec7ef.zip gdb-72f3b6aae734d8cdcded38aca94e379848bec7ef.tar.gz gdb-72f3b6aae734d8cdcded38aca94e379848bec7ef.tar.bz2 |
[ARC] Allow non-instruction relocations within .text sections
bfd/
2016-03-08 Cupertino Miranda <Cupertino.Miranda@synopsys.com>
Andrew Burgess <andrew.burgess@embecosm.com>
* elf32-arc.c (arc_bfd_get_32): Becomes an alias for bfd_get_32.
(arc_bfd_put_32): Becomes an alias for bfd_put_32.
(arc_elf_howto_init): Added assert to validate relocations.
(get_middle_endian_relocation): Delete.
(middle_endian_convert): New function.
(ME): Redefine, now does nothing.
(IS_ME): New define.
(arc_do_relocation): Extend the attached 'ARC_RELOC_HOWTO'
definition to call middle_endian_convert. Add a new local
variable and make use of this throughout. Added call to
arc_bfd_get_8 and arc_bfd_put_8 for 8 bit relocations.
gas/
2016-03-08 Andrew Burgess <andrew.burgess@embecosm.com>
* testsuite/gas/arc/inline-data-1.d: New file.
* testsuite/gas/arc/inline-data-1.s: New file.
include/
2016-03-08 Cupertino Miranda <Cupertino.Miranda@synopsys.com>
Andrew Burgess <andrew.burgess@embecosm.com>
* elf/arc-reloc.def: Add a call to ME within the formula for each
relocation that requires middle-endian correction.
Diffstat (limited to 'include')
-rw-r--r-- | include/ChangeLog | 6 | ||||
-rw-r--r-- | include/elf/arc-reloc.def | 108 | ||||
-rw-r--r-- | include/opcode/arc-func.h | 4 |
3 files changed, 77 insertions, 41 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 0e2c2bd..7e01b27 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2016-03-08 Cupertino Miranda <Cupertino.Miranda@synopsys.com> + Andrew Burgess <andrew.burgess@embecosm.com> + + * elf/arc-reloc.def: Add a call to ME within the formula for each + relocation that requires middle-endian correction. + 2016-03-07 Trevor Saunders <tbsaunde+binutils@tbsaunde.org> * opcode/dlx.h (struct dlx_opcode): Add const qualifiers. diff --git a/include/elf/arc-reloc.def b/include/elf/arc-reloc.def index 96123de..36a3516 100644 --- a/include/elf/arc-reloc.def +++ b/include/elf/arc-reloc.def @@ -1,3 +1,34 @@ +/* ARC relocation types + Copyright (C) 2015-2016 Free Software Foundation, Inc. + + This file is part of BFD, the Binary File Descriptor library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + GAS/GDB is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GAS/GDB is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS or GDB; see the file COPYING3. If not, write to + the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + + ARC_RELOC_HOWTO(ARC_NONE, 0, \ 2, \ 32, \ @@ -31,7 +62,7 @@ ARC_RELOC_HOWTO(ARC_32, 4, \ 32, \ replace_word32, \ bitfield, \ - (NON_ME ( S + A ) )) + ( S + A )) ARC_RELOC_HOWTO(ARC_N8, 8, \ 0, \ @@ -80,84 +111,84 @@ ARC_RELOC_HOWTO(ARC_S21H_PCREL, 14, \ 20, \ replace_disp21h, \ signed, \ - ( ( ( S + A ) - P ) >> 1 )) + ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) )) ARC_RELOC_HOWTO(ARC_S21W_PCREL, 15, \ 2, \ 19, \ replace_disp21w, \ signed, \ - ( ( ( S + A ) - P ) >> 2 )) + ( ME ( ( ( ( S + A ) - P ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_S25H_PCREL, 16, \ 2, \ 24, \ replace_disp25h, \ signed, \ - ( ( ( S + A ) - P ) >> 1 )) + ( ME ( ( ( ( S + A ) - P ) >> 1 ) ) )) ARC_RELOC_HOWTO(ARC_S25W_PCREL, 17, \ 2, \ 23, \ replace_disp25w, \ signed, \ - ( ( ( S + A ) - P ) >> 2 )) + ( ME ( ( ( ( S + A ) - P ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_SDA32, 18, \ 2, \ 32, \ replace_word32, \ signed, \ - ( ( S + A ) - _SDA_BASE_ )) + ( ME ( ( ( S + A ) - _SDA_BASE_ ) ) )) ARC_RELOC_HOWTO(ARC_SDA_LDST, 19, \ 2, \ 9, \ replace_disp9ls, \ signed, \ - ( ( S + A ) - _SDA_BASE_ )) + ( ME ( ( ( S + A ) - _SDA_BASE_ ) ) )) ARC_RELOC_HOWTO(ARC_SDA_LDST1, 20, \ 2, \ 9, \ replace_disp9ls, \ signed, \ - ( ( ( S + A ) - _SDA_BASE_ ) >> 1 )) + ( ME ( ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ) ) )) ARC_RELOC_HOWTO(ARC_SDA_LDST2, 21, \ 2, \ 9, \ replace_disp9ls, \ signed, \ - ( ( ( S + A ) - _SDA_BASE_ ) >> 2 )) + ( ME ( ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_SDA16_LD, 22, \ 1, \ 9, \ replace_disp9s, \ signed, \ - ( ( S + A ) - _SDA_BASE_ )) + ( ( ( S + A ) - _SDA_BASE_ ) )) ARC_RELOC_HOWTO(ARC_SDA16_LD1, 23, \ 1, \ 9, \ replace_disp9s, \ signed, \ - ( ( ( S + A ) - _SDA_BASE_ ) >> 1 )) + ( ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ) )) ARC_RELOC_HOWTO(ARC_SDA16_LD2, 24, \ 1, \ 9, \ replace_disp9s, \ signed, \ - ( ( ( S + A ) - _SDA_BASE_ ) >> 2 )) + ( ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ) )) ARC_RELOC_HOWTO(ARC_S13_PCREL, 25, \ 1, \ 11, \ replace_disp13s, \ signed, \ - ( ( ( S + A ) - P ) >> 2 )) + ( ( ( ( S + A ) - P ) >> 2 ) )) ARC_RELOC_HOWTO(ARC_W, 26, \ 2, \ @@ -171,42 +202,42 @@ ARC_RELOC_HOWTO(ARC_32_ME, 27, \ 32, \ replace_limm, \ signed, \ - ( S + A )) + ( ME ( ( S + A ) ) )) ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \ 2, \ 32, \ replace_limms, \ signed, \ - ( S + A )) + ( ME ( ( S + A ) ) )) ARC_RELOC_HOWTO(ARC_N32_ME, 28, \ 2, \ 32, \ replace_word32, \ bitfield, \ - ( S - A )) + ( ME ( ( S - A ) ) )) ARC_RELOC_HOWTO(ARC_SECTOFF_ME, 29, \ 2, \ 32, \ replace_word32, \ bitfield, \ - ( ( S - SECTSTART ) + A )) + ( ME ( ( ( S - SECTSTART ) + A ) ) )) ARC_RELOC_HOWTO(ARC_SDA32_ME, 30, \ 2, \ 32, \ replace_limm, \ signed, \ - ( ( S + A ) - _SDA_BASE_ )) + ( ME ( ( ( S + A ) - _SDA_BASE_ ) ) )) ARC_RELOC_HOWTO(ARC_W_ME, 31, \ 2, \ 32, \ replace_word32, \ bitfield, \ - ( S + A )) + ( ME ( ( ( S + A ) & ( ~3 ) ) ) )) ARC_RELOC_HOWTO(AC_SECTOFF_U8, 35, \ 2, \ @@ -255,14 +286,14 @@ ARC_RELOC_HOWTO(ARC_SECTOFF_ME_1, 41, \ 32, \ replace_word32, \ bitfield, \ - ( ( ( S - SECTSTART ) + A ) >> 1 )) + ( ME ( ( ( ( S - SECTSTART ) + A ) >> 1 ) ) )) ARC_RELOC_HOWTO(ARC_SECTOFF_ME_2, 42, \ 2, \ 32, \ replace_word32, \ bitfield, \ - ( ( ( S - SECTSTART ) + A ) >> 2 )) + ( ME ( ( ( ( S - SECTSTART ) + A ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_SECTOFF_1, 43, \ 2, \ @@ -297,7 +328,7 @@ ARC_RELOC_HOWTO(ARC_PC32, 50, \ 32, \ replace_word32, \ signed, \ - ( ( S + A ) - P )) + ( ME ( ( ( S + A ) - P ) ) )) ARC_RELOC_HOWTO(ARC_GOT32, 59, \ 2, \ @@ -311,14 +342,14 @@ ARC_RELOC_HOWTO(ARC_GOTPC32, 51, \ 32, \ replace_word32, \ signed, \ - ( ( ( GOT + G ) + A ) - P )) + ( ME ( ( ( ( GOT + G ) + A ) - P ) ) )) ARC_RELOC_HOWTO(ARC_PLT32, 52, \ 2, \ 32, \ replace_word32, \ signed, \ - ( ( L + A ) - P )) + ( ME ( ( ( L + A ) - P ) ) )) ARC_RELOC_HOWTO(ARC_COPY, 53, \ 2, \ @@ -339,42 +370,42 @@ ARC_RELOC_HOWTO(ARC_JMP_SLOT, 55, \ 32, \ replace_word32, \ signed, \ - S) + ( ME ( S ) )) ARC_RELOC_HOWTO(ARC_RELATIVE, 56, \ 2, \ 32, \ replace_word32, \ signed, \ - ( B + A )) + ( ME ( ( B + A ) ) )) ARC_RELOC_HOWTO(ARC_GOTOFF, 57, \ 2, \ 32, \ replace_word32, \ signed, \ - ( ( S + A ) - GOT )) + ( ME ( ( ( S + A ) - GOT ) ) )) ARC_RELOC_HOWTO(ARC_GOTPC, 58, \ 2, \ 32, \ replace_word32, \ signed, \ - ( GOT_BEGIN - P )) + ( ME ( ( GOT_BEGIN - P ) ) )) ARC_RELOC_HOWTO(ARC_S21W_PCREL_PLT, 60, \ 2, \ 19, \ replace_disp21w, \ signed, \ - ( ( ( L + A ) - P ) >> 2 )) + ( ME ( ( ( ( L + A ) - P ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_S25H_PCREL_PLT, 61, \ 2, \ 24, \ replace_disp25h, \ signed, \ - ( ( ( L + A ) - P ) >> 1 )) + ( ME ( ( ( ( L + A ) - P ) >> 1 ) ) )) ARC_RELOC_HOWTO(ARC_TLS_DTPMOD, 66, \ 2, \ @@ -395,7 +426,7 @@ ARC_RELOC_HOWTO(ARC_TLS_GD_GOT, 69, \ 32, \ replace_word32, \ dont, \ - ( G + GOT - P)) + ( ME ( ( ( G + GOT ) - P ) ) )) ARC_RELOC_HOWTO(ARC_TLS_GD_LD, 70, \ 2, \ @@ -416,47 +447,46 @@ ARC_RELOC_HOWTO(ARC_TLS_IE_GOT, 72, \ 32, \ replace_word32, \ dont, \ - ( G + GOT - P)) + ( ME ( ( ( G + GOT ) - P ) ) )) ARC_RELOC_HOWTO(ARC_TLS_DTPOFF, 67, \ 2, \ 32, \ replace_word32, \ dont, \ - ( S - TLS_REL )) + ( ME ( ( S - TLS_REL ) ) )) ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \ 2, \ 32, \ replace_word32, \ dont, \ - ( S - TLS_REL )) + ( ME ( ( S - TLS_REL ) ) )) ARC_RELOC_HOWTO(ARC_TLS_LE_S9, 74, \ 2, \ 32, \ replace_word32, \ dont, \ - ( ( S + TCB_SIZE ) - TLS_REL )) + ( ME ( ( ( S + TCB_SIZE ) - TLS_REL ) ) )) ARC_RELOC_HOWTO(ARC_TLS_LE_32, 75, \ 2, \ 32, \ replace_word32, \ dont, \ - ( ( S + A + TCB_SIZE ) - TLS_REL )) + ( ME ( ( ( ( S + A ) + TCB_SIZE ) - TLS_REL ) ) )) ARC_RELOC_HOWTO(ARC_S25W_PCREL_PLT, 76, \ 2, \ 23, \ replace_disp25w, \ signed, \ - ( ( ( L + A ) - P ) >> 2 )) + ( ME ( ( ( ( L + A ) - P ) >> 2 ) ) )) ARC_RELOC_HOWTO(ARC_S21H_PCREL_PLT, 77, \ 2, \ 20, \ replace_disp21h, \ signed, \ - ( ( ( L + A ) - P ) >> 1 )) - + ( ME ( ( ( ( L + A ) - P ) >> 1 ) ) )) diff --git a/include/opcode/arc-func.h b/include/opcode/arc-func.h index 96ffcff..47451a6 100644 --- a/include/opcode/arc-func.h +++ b/include/opcode/arc-func.h @@ -66,8 +66,8 @@ replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) ATTRIBUTE_UNUSED static unsigned replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) { - insn = insn & ~0xffffff; - insn |= ((value >> 0) & 0xffffff) << 0; + insn = insn & ~0xffffff00; + insn |= ((value >> 0) & 0xffffff) << 8; return insn; } |