aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-rl78.h
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-04-14 16:23:33 +0100
committerNick Clifton <nickc@redhat.com>2015-04-14 16:23:33 +0100
commit6ff71e768112317de1236a429e7c88c9d3e32116 (patch)
tree3d24e09232efe594ec6a32482a95b2f161250e4e /gas/config/tc-rl78.h
parent9e811bc379ef78f0e2beadda9ed3ce6679ded7ea (diff)
downloadgdb-6ff71e768112317de1236a429e7c88c9d3e32116.zip
gdb-6ff71e768112317de1236a429e7c88c9d3e32116.tar.gz
gdb-6ff71e768112317de1236a429e7c88c9d3e32116.tar.bz2
Adds support to the RL78 port for linker relaxation affecting .debug sections.
gas * config/tc-rl78.h (TC_LINKRELAX_FIXUP): Define. (TC_FORCE_RELOCATION_SUB_SAME): Define. (DWARF2_USE_FIXED_ADVANCE_PC): Define. * gas/lns/lns.exp: Add RL78 to list of targets using DW_LNS_fixed_advance_pc. bfd * elf32-rl78.c (RL78_OP_REL): New macro. (rl78_elf_howto_table): Use it for complex relocs. (get_symbol_value): Handle the cases when the info or status arguments are NULL. (get_romstart): Cache the status returned by get_symbol_value. (get_ramstart): Likewise. (RL78_STACK_PUSH): Generate an error message if the stack overflows. (RL78_STACK_POP): Likewise for underflows. (rl78_compute_complex_reloc): New function. Contains the basic processing code for all RL78 complex relocs. (rl78_special_reloc): New function. Provides special reloc handling for complex relocs. (rl78_elf_relocate_section): Use rl78_compute_complex_reloc. (rl78_offset_for_reloc): Likewise. binutils* readelf.c (target_specific_reloc_handling): Add code to handle RL78 complex relocs.
Diffstat (limited to 'gas/config/tc-rl78.h')
-rw-r--r--gas/config/tc-rl78.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/gas/config/tc-rl78.h b/gas/config/tc-rl78.h
index e2b9699..b9ede61 100644
--- a/gas/config/tc-rl78.h
+++ b/gas/config/tc-rl78.h
@@ -85,3 +85,17 @@ extern void rl78_elf_final_processing (void);
#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
((EXP)->X_md = 0, expression (EXP), TC_PARSE_CONS_RETURN_NONE)
+
+#define TC_LINKRELAX_FIXUP(seg) ((seg->flags & SEC_CODE) || (seg->flags & SEC_DEBUGGING))
+
+/* Do not adjust relocations involving symbols in code sections,
+ because it breaks linker relaxations. This could be fixed in the
+ linker, but this fix is simpler, and it pretty much only affects
+ object size a little bit. */
+#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEC) \
+ ( ((SEC)->flags & SEC_CODE) != 0 \
+ || ((SEC)->flags & SEC_DEBUGGING) != 0 \
+ || ! SEG_NORMAL (SEC) \
+ || TC_FORCE_RELOCATION (FIX))
+
+#define DWARF2_USE_FIXED_ADVANCE_PC 1