1,6 → 1,5 |
/* seh pdata/xdata coff object file format |
Copyright 2009, 2010 |
Free Software Foundation, Inc. |
Copyright (C) 2009-2015 Free Software Foundation, Inc. |
|
This file is part of GAS. |
|
170,7 → 169,14 |
return 0; |
} |
|
/* Switch back to the code section, whatever that may be. */ |
static void |
obj_coff_seh_code (int ignored ATTRIBUTE_UNUSED) |
{ |
subseg_set (seh_ctx_cur->code_seg, 0); |
} |
|
static void |
switch_xdata (int subseg, segT code_seg) |
{ |
x_segcur = seh_hash_find_or_make (code_seg, ".xdata"); |
323,8 → 329,7 |
|
if (*input_line_pointer == '@') |
{ |
symbol_name = input_line_pointer; |
name_end = get_symbol_end (); |
name_end = get_symbol_name (&symbol_name); |
|
seh_ctx_cur->handler.X_op = O_constant; |
seh_ctx_cur->handler.X_add_number = 0; |
337,7 → 342,7 |
else |
as_bad (_("unknown constant value '%s' for handler"), symbol_name); |
|
*input_line_pointer = name_end; |
(void) restore_line_pointer (name_end); |
} |
else |
expression (&seh_ctx_cur->handler); |
353,8 → 358,7 |
{ |
do |
{ |
symbol_name = input_line_pointer; |
name_end = get_symbol_end (); |
name_end = get_symbol_name (&symbol_name); |
|
if (strcasecmp (symbol_name, "@unwind") == 0) |
seh_ctx_cur->handler_flags |= UNW_FLAG_UHANDLER; |
363,7 → 367,7 |
else |
as_bad (_(".seh_handler constant '%s' unknown"), symbol_name); |
|
*input_line_pointer = name_end; |
(void) restore_line_pointer (name_end); |
} |
while (skip_whitespace_and_comma (0)); |
} |
448,10 → 452,9 |
|
SKIP_WHITESPACE (); |
|
symbol_name = input_line_pointer; |
name_end = get_symbol_end (); |
name_end = get_symbol_name (&symbol_name); |
seh_ctx_cur->func_name = xstrdup (symbol_name); |
*input_line_pointer = name_end; |
(void) restore_line_pointer (name_end); |
|
demand_empty_rest_of_line (); |
|
543,14 → 546,13 |
SKIP_WHITESPACE (); |
if (*input_line_pointer == '%') |
++input_line_pointer; |
symbol_name = input_line_pointer; |
name_end = get_symbol_end (); |
name_end = get_symbol_name (& symbol_name); |
|
for (i = 0; i < 16; i++) |
if (! strcasecmp (regs[i], symbol_name)) |
break; |
|
*input_line_pointer = name_end; |
(void) restore_line_pointer (name_end); |
|
/* Error if register not found, or EAX used as a frame pointer. */ |
if (i == 16 || (kind == 0 && i == 0)) |