macho section symbol handling

The macho gas support starts a new frag at non-local labels,
identifying the frag with the label symbol as a "subsection".  Relocs
are needed when referencing labels in a different subsection, to
support relaxation.  There is a problem when reloc symbols are reduced
to a section symbol plus offset (see write.c:adjust_reloc_syms), as
this loses the subsection.  Not reducing symbols like this is not a
good option as it results in a large number of symbols, some with
weird internal gas names.  So instead this patch finds the original
frag for any fx_addsy reduced to a section symbol.

Test results are:
+FAIL: .org test 1
-FAIL: i386 opcodes
-FAIL: i386 opcodes (Intel disassembly)
-FAIL: i386 opcodes (w/ suffix)
-FAIL: i386 intel (AT&T disassembly)
-FAIL: i386 intel
-FAIL: Check -madd-bnd-prefix
-FAIL: x86-64 RTM insns
-FAIL: x86-64 RTM insns (Intel disassembly)
-FAIL: Check -madd-bnd-prefix (x86-64)

The reason ".org test 1" fails is the -gdwarf2 .debug_aranges
generates two temp symbols and uses them for the start and size of
each range, the size being calculated by "end" - "beg" (see
out_debug_aranges).  For the test, "beg" is before any source symbol
is emitted so has subsection NULL.  "end" has a subsection but lost
that when the fixup was converted to a section symbol plus offset.
So prior to this change obj_mach_o_in_different_subsection returned
false.  Now that the lost subsection is recovered for "end" it returns
true, and results in "Error: can't resolve .text - L0^A$".

	* config/obj-macho.c (obj_mach_o_in_different_subsection):
	Add parameters.  Get frag containing section sym plus offset.
	(obj_mach_o_force_reloc_sub_same): Adjust to suit
	obj_mach_o_in_different_subsection change.
	(obj_mach_o_force_reloc_sub_local): Likewise.
	(obj_mach_o_force_reloc): Likewise.
	* testsuite/gas/i386/insn-32.d: Don't xfail darwin.
	* write.c (get_frag_for_address): New function, extracted from..
	(get_frag_for_reloc): ..here.
	* write.h (get_frag_for_address): Declare.
4 files changed