Re-enable GAS for z8k-coff

This commit is contained in:
Nick Clifton 2005-08-26 09:47:49 +00:00
parent 98a7a8547e
commit c0524131ea
13 changed files with 248 additions and 114 deletions

View File

@ -1,3 +1,19 @@
2005-08-26 Christian Groessler <chris@groessler.org>
* coff-z8k.c: (r_jr, r_disp7, r_callr): Fix src_mask and dst_mask
of HOWTO.
(coff_z8k_select_reloc): Remove.
(SELECT_RELOC): Remove.
(coff_z8k_reloc_type_lookup): New function.
(coff_bfd_reloc_type_lookup): Define.
* configure.in: Add cofflink.lo to z8kcoff_vec.
* configure: Regenerate.
* reloc.c: (bfd_reloc_code_type): Add z8k relocations.
(bfd_install_relocation): Don't clear reloc_entry->addend for
coff-z8k target.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
2005-08-25 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* elf32-sh.c (sh_elf_get_flags_from_mach): Fix off-by-one error.

View File

@ -3950,6 +3950,15 @@ assembler-expanded instructions. This is commonly used
internally by the linker after analysis of a
BFD_RELOC_XTENSA_ASM_EXPAND. */
BFD_RELOC_XTENSA_ASM_SIMPLIFY,
/* DJNZ offset. */
BFD_RELOC_Z8K_DISP7,
/* CALR offset. */
BFD_RELOC_Z8K_CALLR,
/* 4 bit value. */
BFD_RELOC_Z8K_IMM4L,
BFD_RELOC_UNUSED };
typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
reloc_howto_type *bfd_reloc_type_lookup

View File

@ -1,24 +1,24 @@
/* BFD back-end for Zilog Z800n COFF binaries.
Copyright 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003,
2004 Free Software Foundation, Inc.
2004, 2005 Free Software Foundation, Inc.
Contributed by Cygnus Support.
Written by Steve Chamberlain, <sac@cygnus.com>.
This file is part of BFD, the Binary File Descriptor library.
This file is part of BFD, the Binary File Descriptor library.
This program 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 of the License, or
(at your option) any later version.
This program 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 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#include "bfd.h"
#include "sysdep.h"
@ -55,29 +55,19 @@ HOWTO (R_REL16, 0, 1, 16, FALSE, 0,
TRUE);
static reloc_howto_type r_jr =
HOWTO (R_JR, 0, 0, 8, TRUE, 0, complain_overflow_signed, 0,
"r_jr", TRUE, 0, 0, TRUE);
HOWTO (R_JR, 1, 0, 8, TRUE, 0, complain_overflow_signed, 0,
"r_jr", TRUE, 0xff, 0xff, TRUE);
static reloc_howto_type r_disp7 =
HOWTO (R_DISP7, 0, 0, 7, TRUE, 0, complain_overflow_bitfield, 0,
"r_disp7", TRUE, 0, 0, TRUE);
"r_disp7", TRUE, 0x7f, 0x7f, TRUE);
static reloc_howto_type r_callr =
HOWTO (R_CALLR, 0, 1, 12, TRUE, 0, complain_overflow_signed, 0,
HOWTO (R_CALLR, 1, 1, 12, TRUE, 0, complain_overflow_signed, 0,
"r_callr", TRUE, 0xfff, 0xfff, TRUE);
/* Turn a howto into a reloc number */
static int
coff_z8k_select_reloc (reloc_howto_type *howto)
{
return howto->type;
}
#define SELECT_RELOC(x,howto) x.r_type = coff_z8k_select_reloc(howto)
#define BADMAG(x) Z8KBADMAG(x)
#define Z8K 1 /* Customize coffcode.h */
#define Z8K 1 /* Customize coffcode.h. */
#define __A_MAGIC_SET__
/* Code to swap in the reloc. */
@ -126,6 +116,25 @@ rtype2howto (arelent *internal, struct internal_reloc *dst)
#define RTYPE2HOWTO(internal, relocentry) rtype2howto (internal, relocentry)
static reloc_howto_type *
coff_z8k_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
bfd_reloc_code_real_type code)
{
switch (code)
{
case BFD_RELOC_8: return & r_imm8;
case BFD_RELOC_16: return & r_da;
case BFD_RELOC_32: return & r_imm32;
case BFD_RELOC_8_PCREL: return & r_jr;
case BFD_RELOC_16_PCREL: return & r_rel16;
case BFD_RELOC_Z8K_DISP7: return & r_disp7;
case BFD_RELOC_Z8K_CALLR: return & r_callr;
case BFD_RELOC_Z8K_IMM4L: return & r_imm4l;
default: BFD_FAIL ();
return 0;
}
}
/* Perform any necessary magic to the addend in a reloc entry. */
#define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
@ -334,14 +343,16 @@ extra_case (bfd *in_abfd,
}
}
#define coff_reloc16_extra_cases extra_case
#define coff_reloc16_extra_cases extra_case
#define coff_bfd_reloc_type_lookup coff_z8k_reloc_type_lookup
#include "coffcode.h"
#undef coff_bfd_get_relocated_section_contents
#undef coff_bfd_relax_section
#define coff_bfd_get_relocated_section_contents \
bfd_coff_reloc16_get_relocated_section_contents
#undef coff_bfd_relax_section
#define coff_bfd_relax_section bfd_coff_reloc16_relax_section
CREATE_BIG_COFF_TARGET_VEC (z8kcoff_vec, "coff-z8k", 0, 0, '_', NULL, COFF_SWAP_TABLE)

2
bfd/configure vendored
View File

@ -13189,7 +13189,7 @@ do
vms_vax_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
w65_vec) tb="$tb coff-w65.lo reloc16.lo" ;;
we32kcoff_vec) tb="$tb coff-we32k.lo" ;;
z8kcoff_vec) tb="$tb coff-z8k.lo reloc16.lo" ;;
z8kcoff_vec) tb="$tb coff-z8k.lo reloc16.lo cofflink.lo" ;;
# These appear out of order in targets.c
srec_vec) tb="$tb srec.lo" ;;

View File

@ -810,7 +810,7 @@ do
vms_vax_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
w65_vec) tb="$tb coff-w65.lo reloc16.lo" ;;
we32kcoff_vec) tb="$tb coff-we32k.lo" ;;
z8kcoff_vec) tb="$tb coff-z8k.lo reloc16.lo" ;;
z8kcoff_vec) tb="$tb coff-z8k.lo reloc16.lo cofflink.lo" ;;
# These appear out of order in targets.c
srec_vec) tb="$tb srec.lo" ;;

View File

@ -1790,6 +1790,9 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_XTENSA_OP2",
"BFD_RELOC_XTENSA_ASM_EXPAND",
"BFD_RELOC_XTENSA_ASM_SIMPLIFY",
"BFD_RELOC_Z8K_DISP7",
"BFD_RELOC_Z8K_CALLR",
"BFD_RELOC_Z8K_IMM4L",
"@@overflow: BFD_RELOC_UNUSED@@",
};
#endif

View File

@ -1168,7 +1168,9 @@ space consuming. For each target:
7) if they are different you have to figure out which version is
right. */
relocation -= reloc_entry->addend;
reloc_entry->addend = 0;
/* FIXME: There should be no target specific code here... */
if (strcmp (abfd->xvec->name, "coff-z8k") != 0)
reloc_entry->addend = 0;
}
else
{
@ -4435,6 +4437,19 @@ ENUMDOC
internally by the linker after analysis of a
BFD_RELOC_XTENSA_ASM_EXPAND.
ENUM
BFD_RELOC_Z8K_DISP7
ENUMDOC
DJNZ offset.
ENUM
BFD_RELOC_Z8K_CALLR
ENUMDOC
CALR offset.
ENUM
BFD_RELOC_Z8K_IMM4L
ENUMDOC
4 bit value.
ENDSENUM
BFD_RELOC_UNUSED
CODE_FRAGMENT

View File

@ -1,3 +1,7 @@
2005-08-26 Christian Groessler <chris@groessler.org>
* binutils-all/objcopy.exp: Don't setup_xfail "z8*-*".
2005-08-18 Alan Modra <amodra@bigpond.net.au>
* binutils-all/objcopy.exp: Remove a29k support.

View File

@ -80,7 +80,7 @@ if ![string match "" $got] then {
setup_xfail "m8*-*"
setup_xfail "or32-*-rtems*" "or32-*-coff"
setup_xfail "sh-*-coff*" "sh-*-rtems*"
setup_xfail "tic4x-*-*" "tic80-*-*" "w65-*" "z8*-*"
setup_xfail "tic4x-*-*" "tic80-*-*" "w65-*"
clear_xfail "hppa*64*-*-hpux*" "hppa*-*-linux*" "hppa*-*-lites*"
clear_xfail "hppa*-*-*n*bsd*" "hppa*-*-rtems*" "*-*-*elf*" "m68*-*-sysv4*"

View File

@ -1,3 +1,20 @@
2005-08-26 Christian Groessler <chris@groessler.org>
* configure.tgt: Set bfd_gas also for z8k cpu.
* config/tc-z8k.c (s_segm): Use bfd_set_arch_mach to set machine
type.
(newfix): Adapt to bfd reloc types.
(build_bytes): Adapt to bfd reloc types. Ensure that enough space
is available in the current frag.
(md_convert_frag): Adapt function parameters.
(tc_gen_reloc): New function.
(md_section_align): Use bfd_get_section_alignment.
(md_apply_fix): Adapt to bfd reloc types. Fix handling of
BFD_RELOC_Z8K_IMM4L, BFD_RELOC_8, BFD_RELOC_16, and BFD_RELOC_32
relocations.
* config/tc-z8k.h (TARGET_ARCH): Define.
(tc_fix_adjustable): Define.
2005-08-25 Chao-ying Fu <fu@mips.com>
* config/tc-mips.c (mips_set_options): Add ase_dsp for DSP instructions.

View File

@ -21,12 +21,12 @@
/* Written By Steve Chamberlain <sac@cygnus.com>. */
#define DEFINE_TABLE
#include <stdio.h>
#include "as.h"
#include "bfd.h"
#include "safe-ctype.h"
#define DEFINE_TABLE
#include "opcodes/z8k-opc.h"
const char comment_chars[] = "!";
@ -46,14 +46,12 @@ s_segm (int segm)
if (segm)
{
segmented_mode = 1;
machine = bfd_mach_z8001;
coff_flags = F_Z8001;
bfd_set_arch_mach (stdoutput, TARGET_ARCH, bfd_mach_z8001);
}
else
{
segmented_mode = 0;
machine = bfd_mach_z8002;
coff_flags = F_Z8002;
bfd_set_arch_mach (stdoutput, TARGET_ARCH, bfd_mach_z8002);
}
}
@ -940,26 +938,24 @@ static void
newfix (int ptr, int type, int size, expressionS *operand)
{
int is_pcrel = 0;
fixS *fixP;
/* size is in nibbles. */
/* Size is in nibbles. */
if (operand->X_add_symbol
|| operand->X_op_symbol
|| operand->X_add_number)
{
switch(type)
{
case R_JR:
case R_DISP7:
case R_CALLR:
case BFD_RELOC_8_PCREL:
case BFD_RELOC_Z8K_CALLR:
case BFD_RELOC_Z8K_DISP7:
is_pcrel = 1;
}
fix_new_exp (frag_now,
ptr,
size / 2,
operand,
is_pcrel,
type);
fixP = fix_new_exp (frag_now, ptr, size / 2,
operand, is_pcrel, type);
if (is_pcrel)
fixP->fx_no_overflow = 1;
}
}
@ -1003,6 +999,9 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE
frag_wane (frag_now);
frag_new (0);
if (frag_room () < 8)
frag_grow (8); /* Make room for maximum instruction size. */
memset (buffer, 0, sizeof (buffer));
class_ptr = this_try->byte_info;
@ -1019,31 +1018,31 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE
if (segmented_mode)
{
/* da_operand->X_add_number |= 0x80000000; -- Now set at relocation time. */
output_ptr = apply_fix (output_ptr, R_IMM32, da_operand, 8);
output_ptr = apply_fix (output_ptr, BFD_RELOC_32, da_operand, 8);
}
else
{
output_ptr = apply_fix (output_ptr, R_IMM16, da_operand, 4);
output_ptr = apply_fix (output_ptr, BFD_RELOC_16, da_operand, 4);
}
da_operand = 0;
break;
case CLASS_DISP8:
/* pc rel 8 bit */
output_ptr = apply_fix (output_ptr, R_JR, da_operand, 2);
output_ptr = apply_fix (output_ptr, BFD_RELOC_8_PCREL, da_operand, 2);
da_operand = 0;
break;
case CLASS_0DISP7:
/* pc rel 7 bit */
*output_ptr = 0;
output_ptr = apply_fix (output_ptr, R_DISP7, da_operand, 2);
output_ptr = apply_fix (output_ptr, BFD_RELOC_Z8K_DISP7, da_operand, 2);
da_operand = 0;
break;
case CLASS_1DISP7:
/* pc rel 7 bit */
*output_ptr = 0x80;
output_ptr = apply_fix (output_ptr, R_DISP7, da_operand, 2);
output_ptr = apply_fix (output_ptr, BFD_RELOC_Z8K_DISP7, da_operand, 2);
output_ptr[-2] = 0x8;
da_operand = 0;
break;
@ -1103,13 +1102,13 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE
switch (c & ARG_MASK)
{
case ARG_DISP12:
output_ptr = apply_fix (output_ptr, R_CALLR, da_operand, 4);
output_ptr = apply_fix (output_ptr, BFD_RELOC_Z8K_CALLR, da_operand, 4);
break;
case ARG_DISP16:
output_ptr = apply_fix (output_ptr, R_REL16, da_operand, 4);
output_ptr = apply_fix (output_ptr, BFD_RELOC_16_PCREL, da_operand, 4);
break;
default:
output_ptr = apply_fix (output_ptr, R_IMM16, da_operand, 4);
output_ptr = apply_fix (output_ptr, BFD_RELOC_16, da_operand, 4);
}
da_operand = 0;
break;
@ -1120,11 +1119,9 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE
{
case ARG_NIM4:
if (imm_operand->X_add_number > 15)
{
as_bad (_("immediate value out of range"));
}
as_bad (_("immediate value out of range"));
imm_operand->X_add_number = -imm_operand->X_add_number;
output_ptr = apply_fix (output_ptr, R_IMM4L, imm_operand, 1);
output_ptr = apply_fix (output_ptr, BFD_RELOC_Z8K_IMM4L, imm_operand, 1);
break;
/*case ARG_IMMNMINUS1: not used. */
case ARG_IMM4M1:
@ -1132,22 +1129,20 @@ build_bytes (opcode_entry_type *this_try, struct z8k_op *operand ATTRIBUTE_UNUSE
/* Drop through. */
case ARG_IMM4:
if (imm_operand->X_add_number > 15)
{
as_bad (_("immediate value out of range"));
}
output_ptr = apply_fix (output_ptr, R_IMM4L, imm_operand, 1);
as_bad (_("immediate value out of range"));
output_ptr = apply_fix (output_ptr, BFD_RELOC_Z8K_IMM4L, imm_operand, 1);
break;
case ARG_NIM8:
imm_operand->X_add_number = -imm_operand->X_add_number;
/* Drop through. */
case ARG_IMM8:
output_ptr = apply_fix (output_ptr, R_IMM8, imm_operand, 2);
output_ptr = apply_fix (output_ptr, BFD_RELOC_8, imm_operand, 2);
break;
case ARG_IMM16:
output_ptr = apply_fix (output_ptr, R_IMM16, imm_operand, 4);
output_ptr = apply_fix (output_ptr, BFD_RELOC_16, imm_operand, 4);
break;
case ARG_IMM32:
output_ptr = apply_fix (output_ptr, R_IMM32, imm_operand, 8);
output_ptr = apply_fix (output_ptr, BFD_RELOC_32, imm_operand, 8);
break;
default:
abort ();
@ -1378,19 +1373,46 @@ md_show_usage (FILE *stream)
}
void
md_convert_frag (object_headers *headers ATTRIBUTE_UNUSED,
segT seg ATTRIBUTE_UNUSED,
md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED,
segT sec ATTRIBUTE_UNUSED,
fragS *fragP ATTRIBUTE_UNUSED)
{
printf (_("call to md_convert_frag\n"));
abort ();
}
/* Generate a machine dependent reloc from a fixup. */
arelent*
tc_gen_reloc (asection *section ATTRIBUTE_UNUSED,
fixS *fixp ATTRIBUTE_UNUSED)
{
arelent *reloc;
reloc = xmalloc (sizeof (*reloc));
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
reloc->addend = fixp->fx_offset;
reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type);
if (! reloc->howto)
{
as_bad_where (fixp->fx_file, fixp->fx_line,
"Cannot represent %s relocation in object file",
bfd_get_reloc_code_name (fixp->fx_r_type));
abort ();
}
return reloc;
}
valueT
md_section_align (segT seg, valueT size)
{
return ((size + (1 << section_alignment[(int) seg]) - 1)
& (-1 << section_alignment[(int) seg]));
int align = bfd_get_section_alignment (stdoutput, seg);
valueT mask = ((valueT) 1 << align) - 1;
return (size + mask) & ~mask;
}
/* Attempt to simplify or eliminate a fixup. To indicate that a fixup
@ -1404,11 +1426,55 @@ md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
switch (fixP->fx_r_type)
{
case R_IMM4L:
buf[0] = (buf[0] & 0xf0) | (val & 0xf);
case BFD_RELOC_Z8K_IMM4L:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
fixP->fx_done = 0;
}
else
buf[0] = (buf[0] & 0xf0) | (val & 0xf);
break;
case R_JR:
case BFD_RELOC_8:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
fixP->fx_done = 0;
}
else
*buf++ = val;
break;
case BFD_RELOC_16:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
fixP->fx_done = 0;
}
else
{
*buf++ = (val >> 8);
*buf++ = val;
}
break;
case BFD_RELOC_32:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
fixP->fx_done = 0;
}
else
{
*buf++ = (val >> 24);
*buf++ = (val >> 16);
*buf++ = (val >> 8);
*buf++ = val;
}
break;
case BFD_RELOC_8_PCREL:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
@ -1429,7 +1495,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
}
break;
case R_DISP7:
case BFD_RELOC_16_PCREL:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
@ -1437,20 +1503,18 @@ md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
}
else
{
if (val & 1)
val = val - fixP->fx_frag->fr_address + fixP->fx_where - fixP->fx_size;
if (val > 32767 || val < -32768)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("cannot branch to odd address"));
val /= 2;
if (val > 0 || val < -127)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative jump out of range"));
*buf = (*buf & 0x80) | (-val & 0x7f);
_("relative address out of range"));
*buf++ = (val >> 8);
*buf++ = val;
fixP->fx_no_overflow = 1;
fixP->fx_done = 1;
}
break;
case R_CALLR:
case BFD_RELOC_Z8K_CALLR:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
@ -1473,34 +1537,25 @@ md_apply_fix (fixS *fixP, valueT *valP, segT segment ATTRIBUTE_UNUSED)
}
break;
case R_IMM8:
*buf++ = val;
break;
case R_IMM16:
*buf++ = (val >> 8);
*buf++ = val;
break;
case R_IMM32:
*buf++ = (val >> 24);
*buf++ = (val >> 16);
*buf++ = (val >> 8);
*buf++ = val;
break;
case R_REL16:
val = val - fixP->fx_frag->fr_address + fixP->fx_where - fixP->fx_size;
if (val > 32767 || val < -32768)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative address out of range"));
*buf++ = (val >> 8);
*buf++ = val;
fixP->fx_no_overflow = 1;
break;
case 0:
md_number_to_chars (buf, val, fixP->fx_size);
case BFD_RELOC_Z8K_DISP7:
if (fixP->fx_addsy)
{
fixP->fx_no_overflow = 1;
fixP->fx_done = 0;
}
else
{
if (val & 1)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("cannot branch to odd address"));
val /= 2;
if (val > 0 || val < -127)
as_bad_where (fixP->fx_file, fixP->fx_line,
_("relative jump out of range"));
*buf = (*buf & 0x80) | (-val & 0x7f);
fixP->fx_no_overflow = 1;
fixP->fx_done = 1;
}
break;
default:

View File

@ -22,6 +22,8 @@
#define TC_Z8K
#define TARGET_BYTES_BIG_ENDIAN 1
#define TARGET_ARCH bfd_arch_z8k
#define TARGET_FORMAT "coff-z8k"
struct internal_reloc;
@ -31,6 +33,8 @@ struct internal_reloc;
#define IGNORE_NONSTANDARD_ESCAPES
#undef WARN_SIGNED_OVERFLOW_WORD
#define tc_fix_adjustable(X) 0
#define LISTING_HEADER "Zilog Z8000 GAS "
#define RELOC_32 1234

View File

@ -387,7 +387,7 @@ case ${generic_target} in
esac
case ${cpu_type} in
alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc)
alpha | arm | i386 | ia64 | mips | ns32k | pdp11 | ppc | sparc | z8k)
bfd_gas=yes
;;
esac