summaryrefslogtreecommitdiff
path: root/bfd/mach-o.c
diff options
context:
space:
mode:
authoriains <iains>2012-01-13 12:59:29 +0000
committeriains <iains>2012-01-13 12:59:29 +0000
commit9ecfb009dde40e26d8aca5a2cf38a83eb3853b5c (patch)
tree2ca2b97fbbdbcdd3d94f0ebd180f9121ec7fd6c3 /bfd/mach-o.c
parent3755ee0b8cd7f557b148f497fa8b68d16efd9294 (diff)
downloadgdb-9ecfb009dde40e26d8aca5a2cf38a83eb3853b5c.tar.gz
handle absolute indirect syms in mach-o
bfd: * mach-o.c (bfd_mach_o_build_dysymtab_command): Handle absolute indirect symbols. gas: * config/obj-macho.c (obj_mach_o_set_indirect_symbols): Handle absolute indirect symbols. gas/testsuite: * gas/mach-o/dysymtab-3.d: New. * gas/mach-o/symbols-7.s: New.
Diffstat (limited to 'bfd/mach-o.c')
-rw-r--r--bfd/mach-o.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 262531970f5..a13ac4ea69d 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -2210,6 +2210,10 @@ bfd_mach_o_build_dysymtab_command (bfd *abfd,
{
if (isyms[j] == NULL)
dsym->indirect_syms[n] = BFD_MACH_O_INDIRECT_SYM_LOCAL;
+ else if (isyms[j]->symbol.section == bfd_abs_section_ptr
+ && ! (isyms[j]->n_type & BFD_MACH_O_N_EXT))
+ dsym->indirect_syms[n] = BFD_MACH_O_INDIRECT_SYM_LOCAL
+ | BFD_MACH_O_INDIRECT_SYM_ABS;
else
dsym->indirect_syms[n] = isyms[j]->symbol.udata.i;
}