/* dw2gencfi.c - Support for generating Dwarf2 CFI information.
- Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Michal Ludvig <mludvig@suse.cz>
This file is part of GAS, the GNU Assembler.
GAS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
+ the Free Software Foundation; either version 3, or (at your option)
any later version.
GAS is distributed in the hope that it will be useful,
#include "dw2gencfi.h"
#include "subsegs.h"
+#ifdef TARGET_USE_CFIPOP
/* We re-use DWARF2_LINE_MIN_INSN_LENGTH for the code alignment field
of the CIE. Default to 1 if not otherwise specified. */
# define DWARF2_LINE_MIN_INSN_LENGTH 1
#endif
-/* If TARGET_USE_CFIPOP is defined, it is required that the target
- provide the following definitions. Otherwise provide them to
- allow compilation to continue. */
-#ifndef TARGET_USE_CFIPOP
-# ifndef DWARF2_DEFAULT_RETURN_COLUMN
-# define DWARF2_DEFAULT_RETURN_COLUMN 0
-# endif
-# ifndef DWARF2_CIE_DATA_ALIGNMENT
-# define DWARF2_CIE_DATA_ALIGNMENT 1
-# endif
-#endif
-
#ifndef EH_FRAME_ALIGNMENT
# define EH_FRAME_ALIGNMENT (bfd_get_arch_size (stdoutput) == 64 ? 3 : 2)
#endif
as_bad (_("missing separator"));
}
-static unsigned
-cfi_parse_reg (void)
+#ifndef tc_parse_to_dw2regnum
+static void
+tc_parse_to_dw2regnum(expressionS *exp)
{
- int regno;
- expressionS exp;
-
-#ifdef tc_regname_to_dw2regnum
+# ifdef tc_regname_to_dw2regnum
SKIP_WHITESPACE ();
if (is_name_beginner (*input_line_pointer)
|| (*input_line_pointer == '%'
name = input_line_pointer;
c = get_symbol_end ();
- if ((regno = tc_regname_to_dw2regnum (name)) < 0)
- {
- as_bad (_("bad register expression"));
- regno = 0;
- }
+ exp->X_op = O_constant;
+ exp->X_add_number = tc_regname_to_dw2regnum (name);
*input_line_pointer = c;
- return regno;
}
+ else
+# endif
+ expression_and_evaluate (exp);
+}
#endif
- expression_and_evaluate (&exp);
+static unsigned
+cfi_parse_reg (void)
+{
+ int regno;
+ expressionS exp;
+
+ tc_parse_to_dw2regnum (&exp);
switch (exp.X_op)
{
case O_register:
break;
default:
+ regno = -1;
+ break;
+ }
+
+ if (regno < 0)
+ {
as_bad (_("bad register expression"));
regno = 0;
- break;
}
return regno;
flag_traditional_format = save_flag_traditional_format;
}
+
+#else /* TARGET_USE_CFIPOP */
+void
+cfi_finish (void)
+{
+}
+#endif /* TARGET_USE_CFIPOP */