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.
This commit is contained in:
parent
3362e0d9fb
commit
bcf0aac6f6
7 changed files with 69 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2011-12-29 Iain Sandoe <idsandoe@googlemail.com>
|
||||||
|
|
||||||
|
* 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 ().
|
||||||
|
|
||||||
2011-12-22 DJ Delorie <dj@redhat.com>
|
2011-12-22 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* config/rl78-defs.h (rl78_linkrelax_addr16): Add.
|
* config/rl78-defs.h (rl78_linkrelax_addr16): Add.
|
||||||
|
|
6
gas/as.c
6
gas/as.c
|
@ -1037,10 +1037,13 @@ static void
|
||||||
perform_an_assembly_pass (int argc, char ** argv)
|
perform_an_assembly_pass (int argc, char ** argv)
|
||||||
{
|
{
|
||||||
int saw_a_file = 0;
|
int saw_a_file = 0;
|
||||||
|
#ifndef OBJ_MACH_O
|
||||||
flagword applicable;
|
flagword applicable;
|
||||||
|
#endif
|
||||||
|
|
||||||
need_pass_2 = 0;
|
need_pass_2 = 0;
|
||||||
|
|
||||||
|
#ifndef OBJ_MACH_O
|
||||||
/* Create the standard sections, and those the assembler uses
|
/* Create the standard sections, and those the assembler uses
|
||||||
internally. */
|
internally. */
|
||||||
text_section = subseg_new (TEXT_SECTION_NAME, 0);
|
text_section = subseg_new (TEXT_SECTION_NAME, 0);
|
||||||
|
@ -1057,12 +1060,15 @@ perform_an_assembly_pass (int argc, char ** argv)
|
||||||
| SEC_DATA));
|
| SEC_DATA));
|
||||||
bfd_set_section_flags (stdoutput, bss_section, applicable & SEC_ALLOC);
|
bfd_set_section_flags (stdoutput, bss_section, applicable & SEC_ALLOC);
|
||||||
seg_info (bss_section)->bss = 1;
|
seg_info (bss_section)->bss = 1;
|
||||||
|
#endif
|
||||||
subseg_new (BFD_ABS_SECTION_NAME, 0);
|
subseg_new (BFD_ABS_SECTION_NAME, 0);
|
||||||
subseg_new (BFD_UND_SECTION_NAME, 0);
|
subseg_new (BFD_UND_SECTION_NAME, 0);
|
||||||
reg_section = subseg_new ("*GAS `reg' section*", 0);
|
reg_section = subseg_new ("*GAS `reg' section*", 0);
|
||||||
expr_section = subseg_new ("*GAS `expr' section*", 0);
|
expr_section = subseg_new ("*GAS `expr' section*", 0);
|
||||||
|
|
||||||
|
#ifndef OBJ_MACH_O
|
||||||
subseg_set (text_section, 0);
|
subseg_set (text_section, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This may add symbol table entries, which requires having an open BFD,
|
/* This may add symbol table entries, which requires having an open BFD,
|
||||||
and sections already created. */
|
and sections already created. */
|
||||||
|
|
|
@ -45,13 +45,40 @@
|
||||||
#include "mach-o/loader.h"
|
#include "mach-o/loader.h"
|
||||||
#include "obj-macho.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. */
|
/* TODO: Implement "-dynamic"/"-static" command line options. */
|
||||||
|
|
||||||
static int obj_mach_o_is_static;
|
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. */
|
/* 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
|
/* Remember the subsections_by_symbols state in case we need to reset
|
||||||
the file flags. */
|
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);
|
section = obj_mach_o_segT_from_bfd_name (objc_sections[sect_index], 1);
|
||||||
if (section != NULL)
|
if (section != NULL)
|
||||||
{
|
{
|
||||||
seen_objc_section = 1; /* We need to ensure that certain sections are
|
obj_mach_o_seen_objc_section = 1; /* We need to ensure that certain
|
||||||
present and in the right order. */
|
sections are present and in the
|
||||||
|
right order. */
|
||||||
subseg_set (section, 0);
|
subseg_set (section, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
|
|
||||||
#define OUTPUT_FLAVOR bfd_target_mach_o_flavour
|
#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. */
|
/* All our align expressions are power of two. */
|
||||||
#define USE_ALIGN_PTWO
|
#define USE_ALIGN_PTWO
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2011-12-29 Iain Sandoe <idsandoe@googlemail.com>
|
||||||
|
|
||||||
|
* gas/mach-o/sections-1.d: Amend to recognize that bss is not emitted
|
||||||
|
by default.
|
||||||
|
* gas/mach-o/sections-2.d: New.
|
||||||
|
|
||||||
2011-12-19 Iain Sandoe <idsandoe@googlemail.com>
|
2011-12-19 Iain Sandoe <idsandoe@googlemail.com>
|
||||||
|
|
||||||
* gas/mach-o/err-sections-1.s: New.
|
* gas/mach-o/err-sections-1.s: New.
|
||||||
|
|
|
@ -11,11 +11,6 @@
|
||||||
align: 0 nreloc: 0 reloff: (00000000)?00000000
|
align: 0 nreloc: 0 reloff: (00000000)?00000000
|
||||||
flags: 00000000 \(type: regular attr: -\)
|
flags: 00000000 \(type: regular attr: -\)
|
||||||
reserved1: 0x0 reserved2: 0x0 reserved3: 0x0
|
reserved1: 0x0 reserved2: 0x0 reserved3: 0x0
|
||||||
Section: __bss __DATA \(bfdname: .bss\)
|
|
||||||
addr: (00000000)?00000000 size: (00000000)?00000000 offset: (00000000)?00000000
|
|
||||||
align: 0 nreloc: 0 reloff: (00000000)?00000000
|
|
||||||
flags: 00000001 \(type: zerofill attr: -\)
|
|
||||||
reserved1: 0x0 reserved2: 0x0 reserved3: 0x0
|
|
||||||
Section: __textcoal_nt __TEXT \(bfdname: __TEXT.__textcoal_nt\)
|
Section: __textcoal_nt __TEXT \(bfdname: __TEXT.__textcoal_nt\)
|
||||||
addr: (00000000)?00000000 size: (00000000)?00000000 offset: (00000000)?00000000
|
addr: (00000000)?00000000 size: (00000000)?00000000 offset: (00000000)?00000000
|
||||||
align: 0 nreloc: 0 reloff: (00000000)?00000000
|
align: 0 nreloc: 0 reloff: (00000000)?00000000
|
||||||
|
|
14
gas/testsuite/gas/mach-o/sections-2.d
Normal file
14
gas/testsuite/gas/mach-o/sections-2.d
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#objdump: -h
|
||||||
|
#source: empty.s
|
||||||
|
# we should only see a text section by default.
|
||||||
|
.*: +file format mach-o.*
|
||||||
|
#...
|
||||||
|
Idx Name.*
|
||||||
|
0 .text.*
|
||||||
|
.*
|
||||||
|
#failif
|
||||||
|
1 .data.*
|
||||||
|
.*
|
||||||
|
2 .bss.*
|
||||||
|
.*
|
||||||
|
|
Loading…
Reference in a new issue