* 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.
+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.
+
2009-07-01 Nick Clifton <nickc@redhat.com>
PR 10168
coff \
ecoff \
elf \
- evax
+ evax \
+ macho
# This is an sh case which sets valid according to whether the CPU
# type in the shell variable c and the OS type in the shell variable o
case $$c in \
alpha) valid=yes ;; \
esac ;; \
+ macho) \
+ case $$c in \
+ i386) valid=yes ;; \
+ esac ;; \
vms) \
case $$c in \
vax) valid=yes ;; \
config/obj-elf.c \
config/obj-evax.c \
config/obj-fdpicelf.c \
+ config/obj-macho.c \
config/obj-som.c
OBJ_FORMAT_HFILES = \
config/obj-elf.h \
config/obj-evax.h \
config/obj-fdpicelf.h \
+ config/obj-macho.h \
config/obj-som.h
# Emulation header files in config
$(COMPILE) -c $(srcdir)/config/obj-evax.c
obj-fdpicelf.o : $(srcdir)/config/obj-fdpicelf.c
$(COMPILE) -c $(srcdir)/config/obj-fdpicelf.c
+obj-macho.o : $(srcdir)/config/obj-macho.c
+ $(COMPILE) -c $(srcdir)/config/obj-macho.c
obj-multi.o : $(srcdir)/config/obj-multi.c
$(COMPILE) -c $(srcdir)/config/obj-multi.c
obj-som.o : $(srcdir)/config/obj-som.c
coff \
ecoff \
elf \
- evax
+ evax \
+ macho
# This is an sh case which sets valid according to whether the CPU
case $$c in \
alpha) valid=yes ;; \
esac ;; \
+ macho) \
+ case $$c in \
+ i386) valid=yes ;; \
+ esac ;; \
vms) \
case $$c in \
vax) valid=yes ;; \
config/obj-elf.c \
config/obj-evax.c \
config/obj-fdpicelf.c \
+ config/obj-macho.c \
config/obj-som.c
OBJ_FORMAT_HFILES = \
config/obj-elf.h \
config/obj-evax.h \
config/obj-fdpicelf.h \
+ config/obj-macho.h \
config/obj-som.h
$(COMPILE) -c $(srcdir)/config/obj-evax.c
obj-fdpicelf.o : $(srcdir)/config/obj-fdpicelf.c
$(COMPILE) -c $(srcdir)/config/obj-fdpicelf.c
+obj-macho.o : $(srcdir)/config/obj-macho.c
+ $(COMPILE) -c $(srcdir)/config/obj-macho.c
obj-multi.o : $(srcdir)/config/obj-multi.c
$(COMPILE) -c $(srcdir)/config/obj-multi.c
obj-som.o : $(srcdir)/config/obj-som.c
--- /dev/null
+/* 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}
+};
--- /dev/null
+/* 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
#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. */
}
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 ();
#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
i386-*-*nt*) fmt=coff em=pe ;;
i386-*-chaos) fmt=elf ;;
i386-*-rdos*) fmt=elf ;;
+ i386-*-darwin*) fmt=macho ;;
i860-*-*) fmt=elf endian=little ;;