X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fconfig%2Fobj-macho.h;h=6a37aabd2c4ab4f67c8807df41f47dd99807a306;hb=2a1ebfb221f5f52a743b7ea4c504a7318956c49c;hp=d7e9bda61e5cb9b48efde6d8db7a71d757dc9eec;hpb=e57f8c655cb90b3b73e5906ada99ab72c83f95af;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/config/obj-macho.h b/gas/config/obj-macho.h index d7e9bda61e..6a37aabd2c 100644 --- a/gas/config/obj-macho.h +++ b/gas/config/obj-macho.h @@ -1,5 +1,5 @@ /* Mach-O object file format for gas, the assembler. - Copyright 2009 Free Software Foundation, Inc. + Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -18,13 +18,33 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifndef _OBJ_MACH_O_H +#define _OBJ_MACH_O_H + /* Tag to validate Mach-O object file format processing */ #define OBJ_MACH_O 1 +#include "bfd/mach-o.h" + #include "targ-cpu.h" #define OUTPUT_FLAVOR bfd_target_mach_o_flavour +/* We want to control how the sections are pre-defined on startup. */ +#define obj_begin() mach_o_begin () +extern void mach_o_begin (void); + +/* All our align expressions are power of two. */ +#define USE_ALIGN_PTWO 1 + +/* Common symbols can carry alignment information. */ +#ifndef S_SET_ALIGN +#define S_SET_ALIGN(S,V) do {\ + bfd_mach_o_asymbol *___s = (bfd_mach_o_asymbol *) symbol_get_bfdsym (S);\ + ___s->n_desc = (___s->n_desc & 0xf0ff) | (((V) & 0x0f) << 8);\ +} while (0) +#endif + extern const pseudo_typeS mach_o_pseudo_table[]; #ifndef obj_pop_insert @@ -37,3 +57,63 @@ extern const pseudo_typeS mach_o_pseudo_table[]; #define obj_symbol_new_hook(s) {;} #define EMIT_SECTION_SYMBOLS 0 + +struct obj_mach_o_symbol_data +{ + /* If the symbol represents a subsection, this is the size of the subsection. + This is used to check whether a local symbol belongs to a subsection. */ + valueT subsection_size; +}; +#define OBJ_SYMFIELD_TYPE struct obj_mach_o_symbol_data + +#define obj_frob_colon obj_mach_o_frob_colon +extern void obj_mach_o_frob_colon (const char *); + +/* Called when a label is defined. Mach-O uses this to create subsections. */ +#define obj_frob_label obj_mach_o_frob_label +extern void obj_mach_o_frob_label (symbolS *); + +#define obj_frob_symbol(s, punt) punt = obj_mach_o_frob_symbol(s) +extern int obj_mach_o_frob_symbol (struct symbol *); + +#define OBJ_PROCESS_STAB(SEG,W,S,T,O,D) obj_mach_o_process_stab(W,S,T,O,D) +extern void obj_mach_o_process_stab (int, const char *,int, int, int); + +struct obj_mach_o_frag_data +{ + /* Symbol that corresponds to the subsection. */ + symbolS *subsection; +}; + +#define OBJ_FRAG_TYPE struct obj_mach_o_frag_data + +#define md_pre_output_hook obj_mach_o_pre_output_hook() +extern void obj_mach_o_pre_output_hook(void); + +#define md_pre_relax_hook obj_mach_o_pre_relax_hook() +extern void obj_mach_o_pre_relax_hook (void); + +#define md_post_relax_hook obj_mach_o_post_relax_hook() +extern void obj_mach_o_post_relax_hook (void); + +#define obj_frob_file_after_relocs obj_mach_o_frob_file_after_relocs +extern void obj_mach_o_frob_file_after_relocs (void); + +#define SET_SECTION_RELOCS(sec, relocs, n) \ + obj_mach_o_reorder_section_relocs (sec, relocs, n) +extern void obj_mach_o_reorder_section_relocs (asection *, arelent **, + unsigned int); + +/* Emit relocs for local subtracts, to cater for subsections-via-symbols. */ +#define md_allow_local_subtract(LEFT, RIGHT, SECTION) \ + obj_mach_o_allow_local_subtract (LEFT, RIGHT, SECTION) +extern int obj_mach_o_allow_local_subtract (expressionS *, expressionS *, + segT); + +struct fix; +extern int obj_mach_o_in_different_subsection (symbolS *a, symbolS *b); +extern int obj_mach_o_force_reloc (struct fix *fix); +extern int obj_mach_o_force_reloc_sub_same (struct fix *fix, segT seg); +extern int obj_mach_o_force_reloc_sub_local (struct fix *fix, segT seg); + +#endif /* _OBJ_MACH_O_H */