diff options
author | Nick Clifton <nickc@redhat.com> | 2012-05-11 12:59:23 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2012-05-11 12:59:23 +0000 |
commit | 99700d6febe92cfcd0ce5b62cad8472020e6c248 (patch) | |
tree | 46b61fbed4f38c2cb1cbee18275c3c40b2966c24 /bfd | |
parent | fd885f3a4d85dc33d794ca359ea91f31e3082717 (diff) | |
download | gdb-99700d6febe92cfcd0ce5b62cad8472020e6c248.zip gdb-99700d6febe92cfcd0ce5b62cad8472020e6c248.tar.gz gdb-99700d6febe92cfcd0ce5b62cad8472020e6c248.tar.bz2 |
PR 13503
* reloc.c: Add new ENUM for BFD_RELOC_AVR_8_LO,
BFD_RELOC_AVR_8_HI, BFD_RELOC_AVR_8_HHI.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenrate.
* elf32-avr.c (elf_avr_howto_table): Add entries for
R_AVR_8_LO8, R_AVR_8_HI8, R_AVR_8_HHI8.
(avr_reloc_map): Add RELOC mappings for R_AVR_8_LO8, R_AVR_8_HI8,
R_AVR_8_HHI8.
* config/tc-avr.c (exp_mod_pm): Remove variable.
(exp_mod_data_t): New typedef.
(pexp_mod_data, exp_mod_data): New variables.
(avr_parse_cons_expression): Scan through exp_mod_data[] to find
data expression modifiers "pm", "gs", "lo8", hi8", "hhi8", "hh8"
and set pexp_mod_data accordingly to be used in avr_cons_fix_new.
(avr_cons_fix_new): Handle new data expression modifiers shipped
in pexp_mod_data.
(md_apply_fix): Handle BFD_RELOC_AVR_8_LO, BFD_RELOC_AVR_8_HI,
BFD_RELOC_AVR_8_HHI.
* elf/avr.h (RELOC_NUMBERS): Add values for R_AVR_8_LO8,
R_AVR_8_HI8, R_AVR_8_HHI8.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 12 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 12 | ||||
-rw-r--r-- | bfd/elf32-avr.c | 47 | ||||
-rw-r--r-- | bfd/libbfd.h | 3 | ||||
-rw-r--r-- | bfd/reloc.c | 15 |
5 files changed, 88 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e776f41..e958f63 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,15 @@ +2012-05-11 Georg-Johann Lay <avr@gjlay.de + + PR target/13503 + * reloc.c: Add new ENUM for BFD_RELOC_AVR_8_LO, + BFD_RELOC_AVR_8_HI, BFD_RELOC_AVR_8_HHI. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenrate. + * elf32-avr.c (elf_avr_howto_table): Add entries for + R_AVR_8_LO8, R_AVR_8_HI8, R_AVR_8_HHI8. + (avr_reloc_map): Add RELOC mappings for R_AVR_8_LO8, R_AVR_8_HI8, + R_AVR_8_HHI8. + 2012-05-10 H.J. Lu <hongjiu.lu@intel.com> * elf64-x86-64.c (elf_x86_64_relocate_section): Use int in x32 diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index a66c74f..a087115 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -4088,6 +4088,18 @@ instructions */ instructions */ BFD_RELOC_AVR_6_ADIW, +/* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol +in .byte lo8(symbol) */ + BFD_RELOC_AVR_8_LO, + +/* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol +in .byte hi8(symbol) */ + BFD_RELOC_AVR_8_HI, + +/* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol +in .byte hhi8(symbol) */ + BFD_RELOC_AVR_8_HHI, + /* Renesas RL78 Relocations. */ BFD_RELOC_RL78_NEG8, BFD_RELOC_RL78_NEG16, diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index 9fb72f5..582cdae 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -517,6 +517,48 @@ static reloc_howto_type elf_avr_howto_table[] = 0x000000ff, /* src_mask */ 0x000000ff, /* dst_mask */ FALSE), /* pcrel_offset */ + /* lo8-part to use in .byte lo8(sym). */ + HOWTO (R_AVR_8_LO8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_AVR_8_LO8", /* name */ + FALSE, /* partial_inplace */ + 0xffffff, /* src_mask */ + 0xffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* hi8-part to use in .byte hi8(sym). */ + HOWTO (R_AVR_8_HI8, /* type */ + 8, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_AVR_8_HI8", /* name */ + FALSE, /* partial_inplace */ + 0xffffff, /* src_mask */ + 0xffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* hhi8-part to use in .byte hhi8(sym). */ + HOWTO (R_AVR_8_HHI8, /* type */ + 16, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_AVR_8_HHI8", /* name */ + FALSE, /* partial_inplace */ + 0xffffff, /* src_mask */ + 0xffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ }; /* Map BFD reloc types to AVR ELF reloc types. */ @@ -555,7 +597,10 @@ static const struct avr_reloc_map avr_reloc_map[] = { BFD_RELOC_AVR_LDI, R_AVR_LDI }, { BFD_RELOC_AVR_6, R_AVR_6 }, { BFD_RELOC_AVR_6_ADIW, R_AVR_6_ADIW }, - { BFD_RELOC_8, R_AVR_8 } + { BFD_RELOC_8, R_AVR_8 }, + { BFD_RELOC_AVR_8_LO, R_AVR_8_LO8 }, + { BFD_RELOC_AVR_8_HI, R_AVR_8_HI8 }, + { BFD_RELOC_AVR_8_HHI, R_AVR_8_HHI8 } }; /* Meant to be filled one day with the wrap around address for the diff --git a/bfd/libbfd.h b/bfd/libbfd.h index e4acdb0..026b077 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1867,6 +1867,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_AVR_LDI", "BFD_RELOC_AVR_6", "BFD_RELOC_AVR_6_ADIW", + "BFD_RELOC_AVR_8_LO", + "BFD_RELOC_AVR_8_HI", + "BFD_RELOC_AVR_8_HHI", "BFD_RELOC_RL78_NEG8", "BFD_RELOC_RL78_NEG16", "BFD_RELOC_RL78_NEG24", diff --git a/bfd/reloc.c b/bfd/reloc.c index 29c54c8..e5dd8bc 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -4360,6 +4360,21 @@ ENUM ENUMDOC This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw instructions +ENUM + BFD_RELOC_AVR_8_LO +ENUMDOC + This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol + in .byte lo8(symbol) +ENUM + BFD_RELOC_AVR_8_HI +ENUMDOC + This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol + in .byte hi8(symbol) +ENUM + BFD_RELOC_AVR_8_HHI +ENUMDOC + This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol + in .byte hhi8(symbol) ENUM BFD_RELOC_RL78_NEG8 |