diff options
author | Tristan Gingold <gingold@adacore.com> | 2009-07-02 08:09:35 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2009-07-02 08:09:35 +0000 |
commit | 5980c2a3e9d59bf0259b7d74c2a45d5b290b8d74 (patch) | |
tree | 0bc6f76367f17e70ef3c1cf5590cd08f2863840f /gas/config | |
parent | d1786b77e24e47a40dc343396fd5cdead015e6b1 (diff) | |
download | binutils-redhat-5980c2a3e9d59bf0259b7d74c2a45d5b290b8d74.tar.gz |
2009-07-02 Tristan Gingold <gingold@adacore.com>
* Makefile.am (OBJ_FORMATS): Add macho.
(CPU_OBJ_VALID): Ditto.
(OBJ_FORMAT_CFILES): Add config/obj-macho.c
(OBJ_FORMAT_HFILES): Add config/obj-macho.h
(obj-macho.o): New rule.
* Makefile.in: Regenerated.
* configure.tgt (generic_target): Add i386-*-darwin*.
* config/tc-i386.h: Use i386_target_format for Mach-O.
* config/tc-i386.c (i386_target_format): Define it for Mach-O.
(i386_target_format): Add a case for bfd_target_mach_o_flavour.
* config/obj-macho.h: New file.
* config/obj-macho.c: New file.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/obj-macho.c | 57 | ||||
-rw-r--r-- | gas/config/obj-macho.h | 39 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 6 | ||||
-rw-r--r-- | gas/config/tc-i386.h | 2 |
4 files changed, 102 insertions, 2 deletions
diff --git a/gas/config/obj-macho.c b/gas/config/obj-macho.c new file mode 100644 index 0000000000..ee19c4aa11 --- /dev/null +++ b/gas/config/obj-macho.c @@ -0,0 +1,57 @@ +/* Mach-O object file format + Copyright 2009 Free Software Foundation, Inc. + + 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 3, + or (at your option) any later version. + + GAS 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 GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#define OBJ_HEADER "obj-macho.h" + +#include "as.h" +#include "mach-o.h" + +static void +obj_mach_o_weak (int ignore ATTRIBUTE_UNUSED) +{ + char *name; + int c; + symbolS *symbolP; + + do + { + /* Get symbol name. */ + name = input_line_pointer; + c = get_symbol_end (); + symbolP = symbol_find_or_make (name); + S_SET_WEAK (symbolP); + *input_line_pointer = c; + SKIP_WHITESPACE (); + + if (c != ',') + break; + input_line_pointer++; + SKIP_WHITESPACE (); + } + while (*input_line_pointer != '\n'); + demand_empty_rest_of_line (); +} + +const pseudo_typeS mach_o_pseudo_table[] = +{ + {"weak", obj_mach_o_weak, 0}, + + {NULL, NULL, 0} +}; diff --git a/gas/config/obj-macho.h b/gas/config/obj-macho.h new file mode 100644 index 0000000000..d7e9bda61e --- /dev/null +++ b/gas/config/obj-macho.h @@ -0,0 +1,39 @@ +/* Mach-O object file format for gas, the assembler. + Copyright 2009 Free Software Foundation, Inc. + + 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 3, + or (at your option) any later version. + + GAS 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 GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +/* Tag to validate Mach-O object file format processing */ +#define OBJ_MACH_O 1 + +#include "targ-cpu.h" + +#define OUTPUT_FLAVOR bfd_target_mach_o_flavour + +extern const pseudo_typeS mach_o_pseudo_table[]; + +#ifndef obj_pop_insert +#define obj_pop_insert() pop_insert (mach_o_pseudo_table) +#endif + +#define obj_sec_sym_ok_for_reloc(SEC) 1 + +#define obj_read_begin_hook() {;} +#define obj_symbol_new_hook(s) {;} + +#define EMIT_SECTION_SYMBOLS 0 diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index ce5f7aec1e..1a15d1d249 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -7881,7 +7881,7 @@ md_show_usage (stream) #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ - || defined (TE_PE) || defined (TE_PEP)) + || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O)) /* Pick the target format to use. */ @@ -7961,6 +7961,10 @@ i386_target_format (void) return flag_code == CODE_64BIT ? ELF_TARGET_FORMAT64 : ELF_TARGET_FORMAT; } #endif +#if defined (OBJ_MACH_O) + case bfd_target_mach_o_flavour: + return flag_code == CODE_64BIT ? "mach-o-x86-64" : "mach-o-i386"; +#endif default: abort (); return NULL; diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h index b4809f7287..33275bd7b0 100644 --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -72,7 +72,7 @@ extern unsigned long i386_mach (void); #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ - || defined (TE_PE) || defined (TE_PEP)) + || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O)) extern const char *i386_target_format (void); #define TARGET_FORMAT i386_target_format () #else |