aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-03-29 18:16:16 +0000
committerRichard Henderson <rth@redhat.com>2011-03-29 18:16:16 +0000
commitaf3ecb4a35ff9fd57662514fefcfced14893bbbe (patch)
tree777b0c97f1de4358ee0bf62d2a3b508139cdddd8 /gas
parent66ee2731167db3db9cc506a6268d1a02ed7b3ffc (diff)
downloadfsf-binutils-gdb-af3ecb4a35ff9fd57662514fefcfced14893bbbe.zip
fsf-binutils-gdb-af3ecb4a35ff9fd57662514fefcfced14893bbbe.tar.gz
fsf-binutils-gdb-af3ecb4a35ff9fd57662514fefcfced14893bbbe.tar.bz2
PR 12610
* config/tc-alpha.c (s_alpha_align): Don't auto-align a previous label; zap alpha_insn_label.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-alpha.c3
-rw-r--r--gas/config/tc-avr.c17
-rw-r--r--gas/config/tc-avr.h13
-rw-r--r--gas/testsuite/gas/alpha/auto-align-1.d6
-rw-r--r--gas/testsuite/gas/alpha/auto-align-1.s7
6 files changed, 51 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4275767..d61c9526 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-29 Richard Henderson <rth@redhat.com>
+
+ PR 12610
+ * config/tc-alpha.c (s_alpha_align): Don't auto-align a previous
+ label; zap alpha_insn_label.
+
2011-03-29 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (handle_quad): Properly handle multiple
diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c
index d1de6f9..5c1c73e 100644
--- a/gas/config/tc-alpha.c
+++ b/gas/config/tc-alpha.c
@@ -5081,12 +5081,13 @@ s_alpha_align (int ignore ATTRIBUTE_UNUSED)
if (align != 0)
{
alpha_auto_align_on = 1;
- alpha_align (align, pfill, alpha_insn_label, 1);
+ alpha_align (align, pfill, NULL, 1);
}
else
{
alpha_auto_align_on = 0;
}
+ alpha_insn_label = NULL;
demand_empty_rest_of_line ();
}
diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c
index ef8cf93..98fc0f5 100644
--- a/gas/config/tc-avr.c
+++ b/gas/config/tc-avr.c
@@ -24,6 +24,8 @@
#include "as.h"
#include "safe-ctype.h"
#include "subsegs.h"
+#include "dw2gencfi.h"
+
struct avr_opcodes_s
{
@@ -1543,3 +1545,18 @@ avr_cons_fix_new (fragS *frag,
exp_mod_pm = 0;
}
}
+
+void
+tc_cfi_frame_initial_instructions (void)
+{
+ /* AVR6 pushes 3 bytes for calls. */
+ int return_size = (avr_mcu->mach == bfd_mach_avr6 ? 3 : 2);
+
+ /* The CFA is the caller's stack location before the call insn. */
+ /* Note that the stack pointer is dwarf register number 32. */
+ cfi_add_CFA_def_cfa (32, return_size);
+
+ /* Note that AVR consistently uses post-decrement, which means that things
+ do not line up the same way as for targers that use pre-decrement. */
+ cfi_add_CFA_offset (DWARF2_DEFAULT_RETURN_COLUMN, 1-return_size);
+}
diff --git a/gas/config/tc-avr.h b/gas/config/tc-avr.h
index b976d5a..777a9df 100644
--- a/gas/config/tc-avr.h
+++ b/gas/config/tc-avr.h
@@ -153,3 +153,16 @@ extern long md_pcrel_from_section (struct fix *, segT);
/* 32 bits pseudo-addresses are used on AVR. */
#define DWARF2_ADDR_SIZE(bfd) 4
+
+/* Enable cfi directives. */
+#define TARGET_USE_CFIPOP 1
+
+/* The stack grows down, and is only byte aligned. */
+#define DWARF2_CIE_DATA_ALIGNMENT -1
+
+/* Define the column that represents the PC. */
+#define DWARF2_DEFAULT_RETURN_COLUMN 36
+
+/* Define a hook to setup initial CFI state. */
+extern void tc_cfi_frame_initial_instructions (void);
+#define tc_cfi_frame_initial_instructions tc_cfi_frame_initial_instructions
diff --git a/gas/testsuite/gas/alpha/auto-align-1.d b/gas/testsuite/gas/alpha/auto-align-1.d
new file mode 100644
index 0000000..971f117
--- /dev/null
+++ b/gas/testsuite/gas/alpha/auto-align-1.d
@@ -0,0 +1,6 @@
+#objdump: -s -j .data
+#name: alpha auto-align-1
+
+.*: file format *
+Contents of section .data:
+ 0000 04000000 .*
diff --git a/gas/testsuite/gas/alpha/auto-align-1.s b/gas/testsuite/gas/alpha/auto-align-1.s
new file mode 100644
index 0000000..0b088c2
--- /dev/null
+++ b/gas/testsuite/gas/alpha/auto-align-1.s
@@ -0,0 +1,7 @@
+.text
+ .align 4
+$B: unop
+$E: .align 4
+ fnop
+.data
+ .long $E - $B