From: James Lemke Date: Wed, 1 Aug 2012 13:46:59 +0000 (+0000) Subject: gas/ChangeLog: X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8fbf7334deccc8a6f3ce9ec01ae801da781c2d82;p=binutils-gdb.git gas/ChangeLog: 2012-08-01 James Lemke * 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 * gas/cfi/cfi-ppc-1.d: Allow for code alignment of 2 or 4. ld/ChangeLog: 2012-08-01 James Lemke * ld/testsuite/ld-gc/pr13683.d: XFAIL for powerpc*-*-eabivle. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 2c7867316e0..bd51030f2d6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2012-08-01 James Lemke + + * 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. + 2012-07-31 Maciej W. Rozycki Chao-Ying Fu Catherine Moore diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index af1f4cf7cfc..2820c31bde7 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, diff --git a/gas/config/tc-ppc.h b/gas/config/tc-ppc.h index eb19017b48f..e053c9c8277 100644 --- a/gas/config/tc-ppc.h +++ b/gas/config/tc-ppc.h @@ -270,6 +270,8 @@ extern int tc_ppc_regname_to_dw2regnum (char *); extern int ppc_cie_data_alignment; -#define DWARF2_LINE_MIN_INSN_LENGTH 4 +extern int ppc_dwarf2_line_min_insn_length; + +#define DWARF2_LINE_MIN_INSN_LENGTH ppc_dwarf2_line_min_insn_length #define DWARF2_DEFAULT_RETURN_COLUMN 0x41 #define DWARF2_CIE_DATA_ALIGNMENT ppc_cie_data_alignment diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c index 2ec329abc15..2fa6d51cb0b 100644 --- a/gas/dwarf2dbg.c +++ b/gas/dwarf2dbg.c @@ -882,24 +882,22 @@ out_set_addr (symbolS *sym) emit_expr (&exp, sizeof_address); } -#if DWARF2_LINE_MIN_INSN_LENGTH > 1 static void scale_addr_delta (addressT *); static void scale_addr_delta (addressT *addr_delta) { static int printed_this = 0; - if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0) + if (DWARF2_LINE_MIN_INSN_LENGTH > 1) { - if (!printed_this) - as_bad("unaligned opcodes detected in executable segment"); - printed_this = 1; + if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this) + { + as_bad("unaligned opcodes detected in executable segment"); + printed_this = 1; + } + *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH; } - *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH; } -#else -#define scale_addr_delta(A) -#endif /* Encode a pair of line and address skips as efficiently as possible. Note that the line skip is signed, whereas the address skip is unsigned. diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 65e57deba87..b2bf5eccb39 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-08-01 James Lemke + + * gas/cfi/cfi-ppc-1.d: Allow for code alignment of 2 or 4. + 2012-07-31 Catherine Moore Maciej W. Rozycki diff --git a/gas/testsuite/gas/cfi/cfi-ppc-1.d b/gas/testsuite/gas/cfi/cfi-ppc-1.d index 4fa413112c6..c14a060ed3c 100644 --- a/gas/testsuite/gas/cfi/cfi-ppc-1.d +++ b/gas/testsuite/gas/cfi/cfi-ppc-1.d @@ -7,7 +7,7 @@ Contents of the .eh_frame section: 00000000 00000010 00000000 CIE Version: 1 Augmentation: "zR" - Code alignment factor: 4 + Code alignment factor: [24] Data alignment factor: -4 Return address column: 65 Augmentation data: 1b diff --git a/ld/ChangeLog b/ld/ChangeLog index c066fefcbe1..59f048186d2 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,7 @@ +2012-08-01 James Lemke + + * ld/testsuite/ld-gc/pr13683.d: XFAIL for powerpc*-*-eabivle. + 2012-07-31 H.J. Lu PR ld/14156 diff --git a/ld/testsuite/ld-gc/pr13683.d b/ld/testsuite/ld-gc/pr13683.d index e49708825ff..19b2598e433 100644 --- a/ld/testsuite/ld-gc/pr13683.d +++ b/ld/testsuite/ld-gc/pr13683.d @@ -2,7 +2,7 @@ #source: dummy.s #ld: --gc-sections -e main --defsym foo=foo2 tmpdir/pr13683.o #nm: --format=bsd -#xfail: sh64*-*-* iq2000-*-* lm32-*-* epiphany-*-* mips64vr-*-* frv-*-* m32c-*-* rl78-*-* rx-*-* sh-*-* +#xfail: sh64*-*-* iq2000-*-* lm32-*-* epiphany-*-* mips64vr-*-* frv-*-* m32c-*-* rl78-*-* rx-*-* sh-*-* powerpc*-*-eabivle # Note - look for both "foo" and "foo2" being defined, non-zero function symbols