X-Git-Url: http://drtracing.org/?a=blobdiff_plain;ds=sidebyside;f=binutils%2Fod-macho.c;h=d1a4e0f482d272324560cfb8f821133e2a1130ac;hb=3b9a79ef767f0e7f8c5fecd7eea920f20084d3d4;hp=0a718c0b5fd2d50c3af02a25f0703ddba6b412b2;hpb=b4687fcc2bfb7e72bd34aed19490d0afe0fd9c2c;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/od-macho.c b/binutils/od-macho.c index 0a718c0b5f..d1a4e0f482 100644 --- a/binutils/od-macho.c +++ b/binutils/od-macho.c @@ -1,5 +1,5 @@ /* od-macho.c -- dump information about an Mach-O object file. - Copyright (C) 2011-2015 Free Software Foundation, Inc. + Copyright (C) 2011-2016 Free Software Foundation, Inc. Written by Tristan Gingold, Adacore. This file is part of GNU Binutils. @@ -26,8 +26,8 @@ #include "bfd.h" #include "objdump.h" #include "bucomm.h" +#include "dwarf.h" #include "bfdlink.h" -#include "libbfd.h" #include "mach-o.h" #include "mach-o/external.h" #include "mach-o/codesign.h" @@ -688,13 +688,13 @@ dump_dyld_info_rebase (bfd *abfd, unsigned char *buf, unsigned int len, bfd_mach_o_get_name (bfd_mach_o_dyld_rebase_type_name, imm)); break; case BFD_MACH_O_REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("set segment: %u and offset: 0x%08x\n", imm, (unsigned) leb); i += leblen; break; case BFD_MACH_O_REBASE_OPCODE_ADD_ADDR_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("add addr uleb: 0x%08x\n", (unsigned) leb); i += leblen; break; @@ -705,20 +705,20 @@ dump_dyld_info_rebase (bfd *abfd, unsigned char *buf, unsigned int len, printf ("rebase imm times: %u\n", imm); break; case BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ULEB_TIMES: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("rebase uleb times: %u\n", (unsigned) leb); i += leblen; break; case BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("rebase add addr uleb: %u\n", (unsigned) leb); i += leblen; break; case BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("rebase uleb times (%u)", (unsigned) leb); i += leblen; - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf (" skipping uleb (%u)\n", (unsigned) leb); i += leblen; break; @@ -755,7 +755,7 @@ dump_dyld_info_bind (bfd *abfd, unsigned char *buf, unsigned int len, printf ("set dylib ordinal imm: %u\n", imm); break; case BFD_MACH_O_BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("set dylib ordinal uleb: %u\n", imm); i += leblen; break; @@ -778,19 +778,19 @@ dump_dyld_info_bind (bfd *abfd, unsigned char *buf, unsigned int len, case BFD_MACH_O_BIND_OPCODE_SET_ADDEND_SLEB: { bfd_signed_vma svma; - svma = read_unsigned_leb128 (abfd, buf + i, &leblen); + svma = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("set addend sleb: 0x%08x\n", (unsigned) svma); i += leblen; } break; case BFD_MACH_O_BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("set segment: %u and offset: 0x%08x\n", imm, (unsigned) leb); i += leblen; break; case BFD_MACH_O_BIND_OPCODE_ADD_ADDR_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("add addr uleb: 0x%08x\n", (unsigned) leb); i += leblen; break; @@ -798,7 +798,7 @@ dump_dyld_info_bind (bfd *abfd, unsigned char *buf, unsigned int len, printf ("do bind\n"); break; case BFD_MACH_O_BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("do bind add addr uleb: 0x%08x\n", (unsigned) leb); i += leblen; break; @@ -806,10 +806,10 @@ dump_dyld_info_bind (bfd *abfd, unsigned char *buf, unsigned int len, printf ("do bind add addr imm scaled: %u\n", imm * ptrsize); break; case BFD_MACH_O_BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB: - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf ("do bind uleb times (%u)", (unsigned) leb); i += leblen; - leb = read_unsigned_leb128 (abfd, buf + i, &leblen); + leb = read_leb128 (buf + i, &leblen, 0, buf + len); printf (" skipping uleb (%u)\n", (unsigned) leb); i += leblen; break; @@ -837,7 +837,7 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, unsigned int child_count; unsigned int i; - size = read_unsigned_leb128 (abfd, buf + off, &leblen); + size = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; if (size != 0) @@ -845,7 +845,7 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, bfd_vma flags; struct export_info_data *d; - flags = read_unsigned_leb128 (abfd, buf + off, &leblen); + flags = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; fputs (" ", stdout); @@ -868,7 +868,7 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, { bfd_vma lib; - lib = read_unsigned_leb128 (abfd, buf + off, &leblen); + lib = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; fputs (" [reexport] ", stdout); @@ -890,12 +890,12 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, bfd_vma offset; bfd_vma resolv = 0; - offset = read_unsigned_leb128 (abfd, buf + off, &leblen); + offset = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; if (flags & BFD_MACH_O_EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER) { - resolv = read_unsigned_leb128 (abfd, buf + off, &leblen); + resolv = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; } @@ -908,7 +908,7 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, } } - child_count = read_unsigned_leb128 (abfd, buf + off, &leblen); + child_count = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; for (i = 0; i < child_count; i++) @@ -922,7 +922,7 @@ dump_dyld_info_export_1 (bfd *abfd, unsigned char *buf, unsigned int len, off += strlen ((const char *)buf + off) + 1; - sub_off = read_unsigned_leb128 (abfd, buf + off, &leblen); + sub_off = read_leb128 (buf + off, &leblen, 0, buf + len); off += leblen; dump_dyld_info_export_1 (abfd, buf, len, sub_off, &sub_data, base); @@ -946,49 +946,49 @@ static void dump_dyld_info (bfd *abfd, bfd_mach_o_load_command *cmd, bfd_boolean verbose) { - bfd_mach_o_dyld_info_command *info = &cmd->command.dyld_info; + bfd_mach_o_dyld_info_command *dinfo = &cmd->command.dyld_info; printf (" rebase: off: 0x%08x size: %-8u (endoff: 0x%08x)\n", - info->rebase_off, info->rebase_size, - info->rebase_off + info->rebase_size); + dinfo->rebase_off, dinfo->rebase_size, + dinfo->rebase_off + dinfo->rebase_size); printf (" bind: off: 0x%08x size: %-8u (endoff: 0x%08x)\n", - info->bind_off, info->bind_size, - info->bind_off + info->bind_size); + dinfo->bind_off, dinfo->bind_size, + dinfo->bind_off + dinfo->bind_size); printf (" weak bind: off: 0x%08x size: %-8u (endoff: 0x%08x)\n", - info->weak_bind_off, info->weak_bind_size, - info->weak_bind_off + info->weak_bind_size); + dinfo->weak_bind_off, dinfo->weak_bind_size, + dinfo->weak_bind_off + dinfo->weak_bind_size); printf (" lazy bind: off: 0x%08x size: %-8u (endoff: 0x%08x)\n", - info->lazy_bind_off, info->lazy_bind_size, - info->lazy_bind_off + info->lazy_bind_size); + dinfo->lazy_bind_off, dinfo->lazy_bind_size, + dinfo->lazy_bind_off + dinfo->lazy_bind_size); printf (" export: off: 0x%08x size: %-8u (endoff: 0x%08x)\n", - info->export_off, info->export_size, - info->export_off + info->export_size); + dinfo->export_off, dinfo->export_size, + dinfo->export_off + dinfo->export_size); if (!verbose) return; printf (" rebase:\n"); - if (!load_and_dump (abfd, info->rebase_off, info->rebase_size, + if (!load_and_dump (abfd, dinfo->rebase_off, dinfo->rebase_size, dump_dyld_info_rebase)) non_fatal (_("cannot read rebase dyld info")); printf (" bind:\n"); - if (!load_and_dump (abfd, info->bind_off, info->bind_size, + if (!load_and_dump (abfd, dinfo->bind_off, dinfo->bind_size, dump_dyld_info_bind)) non_fatal (_("cannot read bind dyld info")); printf (" weak bind:\n"); - if (!load_and_dump (abfd, info->weak_bind_off, info->weak_bind_size, + if (!load_and_dump (abfd, dinfo->weak_bind_off, dinfo->weak_bind_size, dump_dyld_info_bind)) non_fatal (_("cannot read weak bind dyld info")); printf (" lazy bind:\n"); - if (!load_and_dump (abfd, info->lazy_bind_off, info->lazy_bind_size, + if (!load_and_dump (abfd, dinfo->lazy_bind_off, dinfo->lazy_bind_size, dump_dyld_info_bind)) non_fatal (_("cannot read lazy bind dyld info")); printf (" exported symbols:\n"); - if (!load_and_dump (abfd, info->export_off, info->export_size, + if (!load_and_dump (abfd, dinfo->export_off, dinfo->export_size, dump_dyld_info_export)) non_fatal (_("cannot read export symbols dyld info")); } @@ -1287,7 +1287,7 @@ dump_segment_split_info (bfd *abfd, bfd_mach_o_linkedit_command *cmd) } for (p = buf + 1; *p != 0; p += len) { - addr += read_unsigned_leb128 (abfd, p, &len); + addr += read_leb128 (p, &len, 0, buf + cmd->datasize); fputs (" ", stdout); bfd_printf_vma (abfd, addr); putchar ('\n'); @@ -1556,8 +1556,8 @@ dump_load_command (bfd *abfd, bfd_mach_o_load_command *cmd, case BFD_MACH_O_LC_SUB_CLIENT: case BFD_MACH_O_LC_RPATH: { - bfd_mach_o_str_command *str = &cmd->command.str; - printf (" %s\n", str->str); + bfd_mach_o_str_command *strc = &cmd->command.str; + printf (" %s\n", strc->str); break; } case BFD_MACH_O_LC_THREAD: