diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/obj-macho.c | 37 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/mach-o/subsect-via-symbols-0.d | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/mach-o/subsect-via-symbols-1.d | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/mach-o/subsect-via-symbols.s | 3 |
6 files changed, 60 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index b7a9a87..2a996c2 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2011-12-15 Iain Sandoe <iains@gcc.gnu.org> + + * config/obj-macho.c (obj_mach_o_subsections_by_symbols): New global. + (obj_mach_o_file_properties): New enum. + (obj_mach_o_subsections_via_symbols): Generalize name to... + ... (obj_mach_o_fileprop) and use to set subsections_via_symbols. + 2011-12-14 Stuart Henderson <shenders@gcc.gnu.org> * config/bfin-parse.y (asm_1): set SRCx fields to all 1s for diff --git a/gas/config/obj-macho.c b/gas/config/obj-macho.c index 018f653..7f147e3 100644 --- a/gas/config/obj-macho.c +++ b/gas/config/obj-macho.c @@ -53,6 +53,10 @@ static int obj_mach_o_is_static; static int seen_objc_section; +/* Remember the subsections_by_symbols state in case we need to reset + the file flags. */ +static int obj_mach_o_subsections_by_symbols; + static void obj_mach_o_weak (int ignore ATTRIBUTE_UNUSED) { @@ -674,11 +678,33 @@ obj_mach_o_comm (int is_local) s_comm_internal (is_local, obj_mach_o_common_parse); } -static void -obj_mach_o_subsections_via_symbols (int arg ATTRIBUTE_UNUSED) +/* Set properties that apply to the whole file. At present, the only + one defined, is subsections_via_symbols. */ + +typedef enum obj_mach_o_file_properties { + OBJ_MACH_O_FILE_PROP_NONE = 0, + OBJ_MACH_O_FILE_PROP_SUBSECTS_VIA_SYMS, + OBJ_MACH_O_FILE_PROP_MAX +} obj_mach_o_file_properties; + +static void +obj_mach_o_fileprop (int prop) { - /* Currently ignore it. */ - demand_empty_rest_of_line (); + if (prop < 0 || prop >= OBJ_MACH_O_FILE_PROP_MAX) + as_fatal (_("internal error: bad file property ID %d"), prop); + + switch ((obj_mach_o_file_properties) prop) + { + case OBJ_MACH_O_FILE_PROP_SUBSECTS_VIA_SYMS: + subsections_by_symbols = 1; + if (!bfd_set_private_flags (stdoutput, + BFD_MACH_O_MH_SUBSECTIONS_VIA_SYMBOLS)) + as_bad (_("failed to set subsections by symbols")); + demand_empty_rest_of_line (); + break; + default: + break; + } } /* Dummy function to allow test-code to work while we are working @@ -776,7 +802,8 @@ const pseudo_typeS mach_o_pseudo_table[] = { "weak", obj_mach_o_weak, 0}, /* extension */ /* File flags. */ - { "subsections_via_symbols", obj_mach_o_subsections_via_symbols, 0 }, + { "subsections_via_symbols", obj_mach_o_fileprop, + OBJ_MACH_O_FILE_PROP_SUBSECTS_VIA_SYMS}, {NULL, NULL, 0} }; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 5fa4335..c9efc90 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-12-15 Iain Sandoe <iains@gcc.gnu.org> + + * gas/mach-o/subsect-via-symbols-0.d: New. + * gas/mach-o/subsect-via-symbols-1.d: New. + * gas/mach-o/subsect-via-symbols.s: New. + 2011-12-15 Nick Clifton <nickc@redhat.com> * gas/frv/immediates.s: New test file - checks assembly of diff --git a/gas/testsuite/gas/mach-o/subsect-via-symbols-0.d b/gas/testsuite/gas/mach-o/subsect-via-symbols-0.d new file mode 100644 index 0000000..4dd2739 --- /dev/null +++ b/gas/testsuite/gas/mach-o/subsect-via-symbols-0.d @@ -0,0 +1,6 @@ +#objdump: -P header +#source: empty.s +.*: +file format mach-o.* +#... +.*flags +: 00000000 \(-\) +#pass diff --git a/gas/testsuite/gas/mach-o/subsect-via-symbols-1.d b/gas/testsuite/gas/mach-o/subsect-via-symbols-1.d new file mode 100644 index 0000000..163a9c2 --- /dev/null +++ b/gas/testsuite/gas/mach-o/subsect-via-symbols-1.d @@ -0,0 +1,6 @@ +#objdump: -P header +#source: subsect-via-symbols.s +.*: +file format mach-o.* +#... +.*flags +: 00002000 \(subsections_via_symbols\) +#pass diff --git a/gas/testsuite/gas/mach-o/subsect-via-symbols.s b/gas/testsuite/gas/mach-o/subsect-via-symbols.s new file mode 100644 index 0000000..b244150 --- /dev/null +++ b/gas/testsuite/gas/mach-o/subsect-via-symbols.s @@ -0,0 +1,3 @@ +# just set subsections by symbols + .subsections_via_symbols + |