aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-ppc.c
diff options
context:
space:
mode:
authorJames Lemke <jwlemke@codesourcery.com>2012-08-01 13:46:59 +0000
committerJames Lemke <jwlemke@codesourcery.com>2012-08-01 13:46:59 +0000
commit8fbf7334deccc8a6f3ce9ec01ae801da781c2d82 (patch)
treee347fb55e56f3812de8798fee9e6a2a5bcefac5a /gas/config/tc-ppc.c
parent4f6650997aab7ef82b88b1ca29450002473a0ad2 (diff)
downloadgdb-8fbf7334deccc8a6f3ce9ec01ae801da781c2d82.zip
gdb-8fbf7334deccc8a6f3ce9ec01ae801da781c2d82.tar.gz
gdb-8fbf7334deccc8a6f3ce9ec01ae801da781c2d82.tar.bz2
gas/ChangeLog:
2012-08-01 James Lemke <jwlemke@codesourcery.com> * gas/dwarf2dbg.c (out_set_addr): Allow for non-constant value of DWARF2_LINE_MIN_INSN_LENGTH * gas/config/tc-ppc.c (ppc_dwarf2_line_min_insn_length): Declare and initialize. (md_apply_fix): Branch addr can be a multiple of 2 or 4. * gas/config/tc-ppc.h (DWARF2_LINE_MIN_INSN_LENGTH): Now a variable reference. gas/testsuite/ChangeLog: 2012-08-01 James Lemke <jwlemke@codesourcery.com> * gas/cfi/cfi-ppc-1.d: Allow for code alignment of 2 or 4. ld/ChangeLog: 2012-08-01 James Lemke <jwlemke@codesourcery.com> * ld/testsuite/ld-gc/pr13683.d: XFAIL for powerpc*-*-eabivle.
Diffstat (limited to 'gas/config/tc-ppc.c')
-rw-r--r--gas/config/tc-ppc.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index af1f4cf..2820c31 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -213,6 +213,9 @@ const char ppc_symbol_chars[] = "%[";
/* The dwarf2 data alignment, adjusted for 32 or 64 bit. */
int ppc_cie_data_alignment;
+/* The dwarf2 minimum instruction length. */
+int ppc_dwarf2_line_min_insn_length;
+
/* More than this number of nops in an alignment op gets a branch
instead. */
unsigned long nop_limit = 4;
@@ -1695,6 +1698,7 @@ md_begin (void)
ppc_set_cpu ();
ppc_cie_data_alignment = ppc_obj64 ? -8 : -4;
+ ppc_dwarf2_line_min_insn_length = (ppc_cpu & PPC_OPCODE_VLE) ? 2 : 4;
#ifdef OBJ_ELF
/* Set the ELF flags if desired. */
@@ -6882,9 +6886,18 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
insn = bfd_getb32 ((unsigned char *) where);
else
insn = bfd_getl32 ((unsigned char *) where);
- if ((value & 3) != 0)
- as_bad_where (fixP->fx_file, fixP->fx_line,
- _("must branch to an address a multiple of 4"));
+ if (ppc_mach() == bfd_mach_ppc_vle)
+ {
+ if ((value & 1) != 0)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("branch address must be a multiple of 2"));
+ }
+ else
+ {
+ if ((value & 3) != 0)
+ as_bad_where (fixP->fx_file, fixP->fx_line,
+ _("branch address must be a multiple of 4"));
+ }
if ((offsetT) value < -0x40000000
|| (offsetT) value >= 0x40000000)
as_bad_where (fixP->fx_file, fixP->fx_line,