diff options
author | Iain Sandoe <iain@codesourcery.com> | 2011-12-29 10:53:10 +0000 |
---|---|---|
committer | Iain Sandoe <iain@codesourcery.com> | 2011-12-29 10:53:10 +0000 |
commit | bcf0aac6f660e4ee754a93276a8601ab1e1bb42c (patch) | |
tree | d9073253ba036586d92e44bf9e8c7c98661be7cc /gas/config | |
parent | 3362e0d9fb6c0e34a2875295c34ca3f73cdf8892 (diff) | |
download | gdb-bcf0aac6f660e4ee754a93276a8601ab1e1bb42c.zip gdb-bcf0aac6f660e4ee754a93276a8601ab1e1bb42c.tar.gz gdb-bcf0aac6f660e4ee754a93276a8601ab1e1bb42c.tar.bz2 |
adjust mach-o default GAS sections.
gas:
* as.c (perform_an_assembly_pass): Do not create text, data and bss
sections for MACH-O. Do not switch to the text section.
* config/obj-macho.c (obj_mach_o_segT_from_bfd_name): Forward decl.
(mach_o_begin): Startup with only text section unless suppressed.
* config/obj-macho.h (obj_begin): define to mach_o_begin ().
gas/testsuite:
* gas/mach-o/sections-1.d: Amend to recognize that bss is not emitted
by default.
* gas/mach-o/sections-2.d: New.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/obj-macho.c | 34 | ||||
-rw-r--r-- | gas/config/obj-macho.h | 4 |
2 files changed, 35 insertions, 3 deletions
diff --git a/gas/config/obj-macho.c b/gas/config/obj-macho.c index be1c9ff..74fb0c9 100644 --- a/gas/config/obj-macho.c +++ b/gas/config/obj-macho.c @@ -45,13 +45,40 @@ #include "mach-o/loader.h" #include "obj-macho.h" +/* Forward decl. */ +static segT obj_mach_o_segT_from_bfd_name (const char *nam, int must_succeed); + /* TODO: Implement "-dynamic"/"-static" command line options. */ static int obj_mach_o_is_static; +/* TODO: Implement the "-n" command line option to suppress the initial + switch to the text segment. */ +static int obj_mach_o_start_with_text_section = 1; + /* Allow for special re-ordering on output. */ -static int seen_objc_section; +static int obj_mach_o_seen_objc_section; + +/* Start-up: At present, just create the sections we want. */ +void +mach_o_begin (void) +{ + /* Mach-O only defines the .text section by default, and even this can + be suppressed by a flag. In the latter event, the first code MUST + be a section definition. */ + if (obj_mach_o_start_with_text_section) + { + text_section = obj_mach_o_segT_from_bfd_name (TEXT_SECTION_NAME, 1); + subseg_set (text_section, 0); + if (obj_mach_o_is_static) + { + bfd_mach_o_section *mo_sec + = bfd_mach_o_get_mach_o_section (text_section); + mo_sec->flags &= ~BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS; + } + } +} /* Remember the subsections_by_symbols state in case we need to reset the file flags. */ @@ -473,8 +500,9 @@ obj_mach_o_objc_section (int sect_index) section = obj_mach_o_segT_from_bfd_name (objc_sections[sect_index], 1); if (section != NULL) { - seen_objc_section = 1; /* We need to ensure that certain sections are - present and in the right order. */ + obj_mach_o_seen_objc_section = 1; /* We need to ensure that certain + sections are present and in the + right order. */ subseg_set (section, 0); } diff --git a/gas/config/obj-macho.h b/gas/config/obj-macho.h index 94c1cde..d9b0b33 100644 --- a/gas/config/obj-macho.h +++ b/gas/config/obj-macho.h @@ -30,6 +30,10 @@ #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 |