This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ping: [Patch] Add Mach-O support for gas


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]