Ping: [Patch] Add Mach-O support for gas
H.J. Lu
hjl.tools@gmail.com
Wed Jul 1 13:52:00 GMT 2009
More information about the Binutils mailing list
Wed Jul 1 13:52:00 GMT 2009
- Previous message (by thread): Ping: [Patch] Add Mach-O support for gas
- Next message (by thread): Ping: [Patch] Add Mach-O support for gas
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi, x86 part is OK. Since you are the Mach-O maintainer, I think you can check it in now. Please be prepared for the fallout if any. Thanks. H.J. On Wed, Jul 1, 2009 at 3:54 AM, Tristan Gingold<gingold@adacore.com> wrote: > > Ping, just in case. > > On Jun 25, 2009, at 5:40 PM, Tristan Gingold wrote: > >> Hi, >> >> this small patch enable gas for i386-darwin. This gas is barely useable >> but >> enough in good state to have only one regression (which looks to be an >> error >> in the baseline). >> The purpose of this patch is to increase the testsuite for Mach-O. In the >> future I plan to add the features needed (specific pseudo ops, better >> handling >> of relocations, quoted symbols ...) so that gas would be usable by gcc. >> >> Tristan. >> >> >> 2009-06-25 Tristan Gingold <gingold@adacore.com> >> >> * configure.ac: Do not exclude gas for i386-*-darwin. >> Add a case for x86_64-*-darwin. >> * configure: Regenerate. >> >> gas/ >> 2009-06-25 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. >> >> RCS file: /cvs/src/src/configure.ac,v >> retrieving revision 1.66 >> diff -c -p -r1.66 configure.ac >> *** configure.ac 15 Jun 2009 14:08:41 -0000 1.66 >> --- configure.ac 25 Jun 2009 15:28:35 -0000 >> *************** case "${target}" in >> *** 450,456 **** >> noconfigdirs="$noconfigdirs ld gas gdb gprof" >> noconfigdirs="$noconfigdirs sim target-rda" >> ;; >> ! i[[3456789]]86-*-darwin* | x86_64-*-darwin9*) >> noconfigdirs="$noconfigdirs ld gas gprof" >> noconfigdirs="$noconfigdirs sim target-rda" >> ;; >> --- 450,460 ---- >> noconfigdirs="$noconfigdirs ld gas gdb gprof" >> noconfigdirs="$noconfigdirs sim target-rda" >> ;; >> ! i[[3456789]]86-*-darwin*) >> ! noconfigdirs="$noconfigdirs ld gprof" >> ! noconfigdirs="$noconfigdirs sim target-rda" >> ! ;; >> ! x86_64-*-darwin9*) >> noconfigdirs="$noconfigdirs ld gas gprof" >> noconfigdirs="$noconfigdirs sim target-rda" >> ;; >> >> Index: gas/Makefile.am >> =================================================================== >> RCS file: /cvs/src/src/gas/Makefile.am,v >> retrieving revision 1.171 >> diff -c -p -r1.171 Makefile.am >> *** gas/Makefile.am 4 Jun 2009 06:57:12 -0000 1.171 >> --- gas/Makefile.am 25 Jun 2009 15:28:40 -0000 >> *************** OBJ_FORMATS = \ >> *** 109,115 **** >> coff \ >> ecoff \ >> elf \ >> ! evax >> >> # 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 >> --- 109,116 ---- >> coff \ >> ecoff \ >> elf \ >> ! 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 >> *************** CPU_OBJ_VALID = \ >> *** 142,147 **** >> --- 143,152 ---- >> case $$c in \ >> alpha) valid=yes ;; \ >> esac ;; \ >> + macho) \ >> + case $$c in \ >> + i386) valid=yes ;; \ >> + esac ;; \ >> vms) \ >> case $$c in \ >> vax) valid=yes ;; \ >> *************** OBJ_FORMAT_CFILES = \ >> *** 368,373 **** >> --- 373,379 ---- >> config/obj-elf.c \ >> config/obj-evax.c \ >> config/obj-fdpicelf.c \ >> + config/obj-macho.c \ >> config/obj-som.c >> >> OBJ_FORMAT_HFILES = \ >> *************** OBJ_FORMAT_HFILES = \ >> *** 377,382 **** >> --- 383,389 ---- >> 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 >> *************** obj-evax.o : $(srcdir)/config/obj-evax.c >> *** 594,599 **** >> --- 601,608 ---- >> $(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 >> Index: gas/configure.tgt >> =================================================================== >> RCS file: /cvs/src/src/gas/configure.tgt,v >> retrieving revision 1.49 >> diff -c -p -r1.49 configure.tgt >> *** gas/configure.tgt 18 Jun 2009 02:11:03 -0000 1.49 >> --- gas/configure.tgt 25 Jun 2009 15:28:44 -0000 >> *************** case ${generic_target} in >> *** 233,238 **** >> --- 233,239 ---- >> i386-*-*nt*) fmt=coff em=pe ;; >> i386-*-chaos) fmt=elf ;; >> i386-*-rdos*) fmt=elf ;; >> + i386-*-darwin*) fmt=macho ;; >> >> i860-*-*) fmt=elf endian=little ;; >> >> Index: gas/config/tc-i386.c >> =================================================================== >> RCS file: /cvs/src/src/gas/config/tc-i386.c,v >> retrieving revision 1.378 >> diff -c -p -r1.378 tc-i386.c >> *** gas/config/tc-i386.c 22 Jun 2009 17:56:01 -0000 1.378 >> --- gas/config/tc-i386.c 25 Jun 2009 15:28:44 -0000 >> *************** md_show_usage (stream) >> *** 7880,7886 **** >> >> #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ >> || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ >> ! || defined (TE_PE) || defined (TE_PEP)) >> >> /* Pick the target format to use. */ >> >> --- 7884,7890 ---- >> >> #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ >> || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ >> ! || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O)) >> >> /* Pick the target format to use. */ >> >> *************** i386_target_format (void) >> *** 7960,7965 **** >> --- 7964,7973 ---- >> 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; >> Index: gas/config/tc-i386.h >> =================================================================== >> RCS file: /cvs/src/src/gas/config/tc-i386.h,v >> retrieving revision 1.105 >> diff -c -p -r1.105 tc-i386.h >> *** gas/config/tc-i386.h 14 Jun 2009 01:39:46 -0000 1.105 >> --- gas/config/tc-i386.h 25 Jun 2009 15:28:44 -0000 >> *************** extern unsigned long i386_mach (void); >> *** 72,78 **** >> >> #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ >> || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ >> ! || defined (TE_PE) || defined (TE_PEP)) >> extern const char *i386_target_format (void); >> #define TARGET_FORMAT i386_target_format () >> #else >> --- 72,78 ---- >> >> #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \ >> || defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) \ >> ! || defined (TE_PE) || defined (TE_PEP) || defined (OBJ_MACH_O)) >> extern const char *i386_target_format (void); >> #define TARGET_FORMAT i386_target_format () >> #else >> *** /dev/null Thu Jun 25 17:13:55 2009 >> --- gas/config/obj-macho.h Thu Jun 25 16:40:52 2009 >> *************** >> *** 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 >> *** /dev/null Thu Jun 25 17:13:55 2009 >> --- gas/config/obj-macho.c Thu Jun 25 16:40:20 2009 >> *************** >> *** 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} >> + }; >> > > -- H.J.
- Previous message (by thread): Ping: [Patch] Add Mach-O support for gas
- Next message (by thread): Ping: [Patch] Add Mach-O support for gas
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list