aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.c
diff options
context:
space:
mode:
authornobody <>2009-01-03 17:43:47 +0000
committernobody <>2009-01-03 17:43:47 +0000
commit98efba94c8d14ffea399e9a1859a6ced1e4869dc (patch)
tree03a93ec394427860fa23e131b4c834b417c614bf /binutils/dwarf.c
parente7c73f57df961ee3db9b81f5dec5b3c5d9c3d288 (diff)
downloadfsf-binutils-gdb-arc-20081103-branch.zip
fsf-binutils-gdb-arc-20081103-branch.tar.gz
fsf-binutils-gdb-arc-20081103-branch.tar.bz2
This commit was manufactured by cvs2svn to create branchbinutils-arc-20081103-branchpointarc-20081103-branchpointarc-20081103-branch
'arc-20081103-branch'. Sprout from binutils-2_19-branch 2008-09-08 08:56:58 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-' Cherrypick from binutils-2_19-branch 2009-01-03 17:43:46 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-': gas/testsuite/gas/ppc/common.d gas/testsuite/gas/ppc/common.s ld/testsuite/ld-powerpc/attr-gnu-12-1.s ld/testsuite/ld-powerpc/attr-gnu-12-11.d ld/testsuite/ld-powerpc/attr-gnu-12-2.s ld/testsuite/ld-powerpc/attr-gnu-12-21.d Cherrypick from binutils-2_19-branch 2008-09-11 09:06:56 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-': gprof/po/ro.po Cherrypick from binutils-2_19-branch 2008-09-26 07:02:45 UTC nobody 'This commit was manufactured by cvs2svn to create branch 'binutils-': gas/config/te-solaris.h Cherrypick from master 2008-11-02 23:59:45 UTC Alan Modra <amodra@gmail.com> 'daily update': ChangeLog Makefile.def Makefile.in Makefile.tpl bfd/ChangeLog bfd/Makefile.am bfd/Makefile.in bfd/aclocal.m4 bfd/bfd-in2.h bfd/cache.c bfd/coff64-rs6000.c bfd/coffgen.c bfd/cofflink.c bfd/config.in bfd/configure bfd/configure.in bfd/doc/Makefile.in bfd/dwarf2.c bfd/elf-bfd.h bfd/elf-eh-frame.c bfd/elf.c bfd/elf32-cris.c bfd/elf32-ppc.c bfd/elf32-sh-symbian.c bfd/elf32-spu.c bfd/elf32-xtensa.c bfd/elf64-ppc.c bfd/elflink.c bfd/elfxx-mips.c bfd/libbfd.h bfd/linker.c bfd/po/id.po bfd/po/vi.po bfd/reloc.c bfd/version.h binutils/BRANCHES binutils/ChangeLog binutils/Makefile.in binutils/aclocal.m4 binutils/config.in binutils/configure binutils/configure.in binutils/dlltool.c binutils/doc/Makefile.in binutils/dwarf.c binutils/embedspu.sh binutils/objcopy.c binutils/po/id.po binutils/po/sv.po binutils/readelf.c binutils/stabs.c binutils/testsuite/ChangeLog binutils/testsuite/binutils-all/group-2.s binutils/testsuite/binutils-all/group-3.s binutils/testsuite/binutils-all/group-4.s binutils/testsuite/binutils-all/group.s binutils/testsuite/binutils-all/objcopy.exp binutils/testsuite/binutils-all/objdump.W binutils/testsuite/binutils-all/strip-4.d binutils/testsuite/binutils-all/strip-5.d binutils/testsuite/binutils-all/strip-6.d binutils/testsuite/binutils-all/strip-7.d binutils/testsuite/binutils-all/strip-8.d binutils/testsuite/binutils-all/strip-9.d binutils/windmc.c binutils/windres.c configure configure.ac gas/ChangeLog gas/Makefile.am gas/Makefile.in gas/NEWS gas/aclocal.m4 gas/app.c gas/config.in gas/config/bfin-parse.y gas/config/tc-bfin.c gas/config/tc-cris.c gas/config/tc-frv.c gas/config/tc-frv.h gas/config/tc-hppa.c gas/config/tc-hppa.h gas/config/tc-i386.c gas/config/tc-i386.h gas/config/tc-m68k.c gas/config/tc-mips.c gas/config/tc-mmix.c gas/config/tc-mmix.h gas/config/tc-mn10300.h gas/config/tc-ns32k.c gas/config/tc-ppc.c gas/config/tc-sh.h gas/config/tc-sh64.h gas/config/tc-tic4x.c gas/config/tc-xtensa.c gas/config/tc-xtensa.h gas/config/tc-z80.c gas/configure gas/configure.in gas/configure.tgt gas/doc/Makefile.in gas/doc/as.texinfo gas/doc/internals.texi gas/dw2gencfi.c gas/frags.c gas/hash.c gas/listing.c gas/po/id.po gas/read.c gas/symbols.c gas/testsuite/ChangeLog gas/testsuite/gas/all/gas.exp gas/testsuite/gas/cfi/cfi-alpha-1.d gas/testsuite/gas/cfi/cfi-alpha-3.d gas/testsuite/gas/cfi/cfi-arm-1.d gas/testsuite/gas/cfi/cfi-common-1.d gas/testsuite/gas/cfi/cfi-common-2.d gas/testsuite/gas/cfi/cfi-common-3.d gas/testsuite/gas/cfi/cfi-common-4.d gas/testsuite/gas/cfi/cfi-common-5.d gas/testsuite/gas/cfi/cfi-common-6.d gas/testsuite/gas/cfi/cfi-hppa-1.d gas/testsuite/gas/cfi/cfi-i386-2.d gas/testsuite/gas/cfi/cfi-i386.d gas/testsuite/gas/cfi/cfi-m68k.d gas/testsuite/gas/cfi/cfi-mips-1.d gas/testsuite/gas/cfi/cfi-ppc-1.d gas/testsuite/gas/cfi/cfi-s390-1.d gas/testsuite/gas/cfi/cfi-s390x-1.d gas/testsuite/gas/cfi/cfi-sh-1.d gas/testsuite/gas/cfi/cfi-sparc-1.d gas/testsuite/gas/cfi/cfi-sparc64-1.d gas/testsuite/gas/cfi/cfi-x86_64.d gas/testsuite/gas/cris/rd-tls-1.d gas/testsuite/gas/cris/rd-tls-1.s gas/testsuite/gas/cris/rd-tls-2.d gas/testsuite/gas/cris/rd-tls-2.s gas/testsuite/gas/cris/tls-err-1.s gas/testsuite/gas/cris/tls-err-2.s gas/testsuite/gas/cris/tls-err-3.s gas/testsuite/gas/elf/elf.exp gas/testsuite/gas/i386/i386.exp gas/testsuite/gas/i386/nops-5-i686.d gas/testsuite/gas/i386/nops-5.d gas/testsuite/gas/i386/nops-5.s gas/testsuite/gas/i386/sse2avx.d gas/testsuite/gas/i386/sse2avx.s gas/testsuite/gas/i386/x86-64-nops-5-k8.d gas/testsuite/gas/i386/x86-64-nops-5.d gas/testsuite/gas/i386/x86-64-sse2avx.d gas/testsuite/gas/i386/x86-64-sse2avx.s gas/testsuite/gas/ppc/power4_32.d gas/testsuite/gas/ppc/power4_32.s gas/testsuite/gas/ppc/power6.d gas/testsuite/gas/ppc/power6.s gas/testsuite/gas/ppc/ppc.exp gas/testsuite/gas/s390/esa-g5.d gas/testsuite/gas/s390/esa-g5.s gas/testsuite/gas/s390/esa-z990.d gas/testsuite/gas/s390/esa-z990.s gas/testsuite/gas/s390/zarch-z900.d gas/testsuite/gas/s390/zarch-z900.s gas/testsuite/gas/s390/zarch-z990.d gas/testsuite/gas/s390/zarch-z990.s gas/testsuite/gas/z80/arith.d gas/testsuite/gas/z80/arith.s gas/testsuite/gas/z80/bit.d gas/testsuite/gas/z80/bit.s gas/testsuite/gas/z80/block.d gas/testsuite/gas/z80/block.s gas/testsuite/gas/z80/branch.d gas/testsuite/gas/z80/branch.s gas/testsuite/gas/z80/inout.d gas/testsuite/gas/z80/inout.s gas/testsuite/gas/z80/ld-group.d gas/testsuite/gas/z80/ld-group.s gas/testsuite/gas/z80/misc.d gas/testsuite/gas/z80/misc.s gas/testsuite/gas/z80/rotate.d gas/testsuite/gas/z80/rotate.s gas/testsuite/gas/z80/z80.exp gas/write.c gold/ChangeLog gold/Makefile.am gold/Makefile.in gold/archive.cc gold/archive.h gold/config.in gold/configure gold/configure.ac gold/descriptors.cc gold/descriptors.h gold/fileread.cc gold/fileread.h gold/gold.cc gold/i386.cc gold/layout.cc gold/main.cc gold/mapfile.cc gold/object.cc gold/object.h gold/options.cc gold/options.h gold/output.cc gold/output.h gold/plugin.cc gold/plugin.h gold/powerpc.cc gold/readsyms.cc gold/reloc.cc gold/resolve.cc gold/sparc.cc gold/symtab.cc gold/symtab.h gold/target-reloc.h gold/target.h gold/testsuite/Makefile.am gold/testsuite/Makefile.in gold/testsuite/plugin_test.c gold/testsuite/plugin_test_1.sh gold/testsuite/plugin_test_2.sh gold/testsuite/thin_archive_main.cc gold/testsuite/thin_archive_test_1.cc gold/testsuite/thin_archive_test_2.cc gold/testsuite/thin_archive_test_3.cc gold/testsuite/thin_archive_test_4.cc gold/x86_64.cc gprof/ChangeLog gprof/Makefile.in gprof/aclocal.m4 gprof/configure gprof/configure.in gprof/gconfig.in gprof/po/vi.po include/ChangeLog include/demangle.h include/elf/ChangeLog include/elf/cris.h include/elf/dwarf2.h include/elf/ppc.h include/obstack.h include/plugin-api.h ld/ChangeLog ld/Makefile.am ld/Makefile.in ld/aclocal.m4 ld/config.in ld/configure ld/configure.in ld/emulparams/arcelf.sh ld/emulparams/criself.sh ld/emulparams/crislinux.sh ld/emulparams/elf32_i860.sh ld/emulparams/elf32_i960.sh ld/emulparams/elf32_sparc.sh ld/emulparams/elf32_spu.sh ld/emulparams/elf32am33lin.sh ld/emulparams/elf32fr30.sh ld/emulparams/elf32ip2k.sh ld/emulparams/elf32mcore.sh ld/emulparams/elf32openrisc.sh ld/emulparams/elf32ppccommon.sh ld/emulparams/elf32ppcwindiss.sh ld/emulparams/elf32vax.sh ld/emulparams/elf64_s390.sh ld/emulparams/elf64_sparc.sh ld/emulparams/elf64alpha.sh ld/emulparams/elf64mmix.sh ld/emulparams/elf64ppc.sh ld/emulparams/elf_i386.sh ld/emulparams/elf_i386_be.sh ld/emulparams/elf_i386_ldso.sh ld/emulparams/elf_i386_vxworks.sh ld/emulparams/elf_s390.sh ld/emulparams/elf_x86_64.sh ld/emulparams/h8300elf.sh ld/emulparams/hppa64linux.sh ld/emulparams/hppalinux.sh ld/emulparams/i386lynx.sh ld/emulparams/i386moss.sh ld/emulparams/i386nto.sh ld/emulparams/m68kelf.sh ld/emulparams/mn10200.sh ld/emulparams/or32elf.sh ld/emulparams/pjelf.sh ld/emulparams/ppclynx.sh ld/emulparams/scoreelf.sh ld/emulparams/shelf.sh ld/emulparams/shelf32.sh ld/emulparams/shelf_nto.sh ld/emulparams/shelf_vxworks.sh ld/emulparams/shlelf32_linux.sh ld/emulparams/shlelf_linux.sh ld/emulparams/shlelf_nto.sh ld/emultempl/armelf.em ld/emultempl/beos.em ld/emultempl/elf32.em ld/emultempl/genelf.em ld/emultempl/mmo.em ld/emultempl/pe.em ld/emultempl/pep.em ld/emultempl/spuelf.em ld/emultempl/sunos.em ld/ldemul.c ld/ldemul.h ld/ldexp.c ld/ldlang.c ld/ldlang.h ld/pe-dll.c ld/po/id.po ld/po/vi.po ld/scripttempl/avr.sc ld/scripttempl/elf.sc ld/testsuite/ChangeLog ld/testsuite/ld-elf/comm1.c ld/testsuite/ld-elf/eh-frame-hdr.d ld/testsuite/ld-elf/eh-group.exp ld/testsuite/ld-elf/eh-group1.s ld/testsuite/ld-elf/eh-group2.s ld/testsuite/ld-elf/eh1.d ld/testsuite/ld-elf/eh2.d ld/testsuite/ld-elf/eh3.d ld/testsuite/ld-elf/eh4.d ld/testsuite/ld-elf/eh5.d ld/testsuite/ld-elf/eh5b.s ld/testsuite/ld-elf/eh6.d ld/testsuite/ld-elf/extract-symbol-1sec.d ld/testsuite/ld-elf/func1.c ld/testsuite/ld-elf/group4.d ld/testsuite/ld-elf/group5.d ld/testsuite/ld-elf/group6.d ld/testsuite/ld-elf/group7.d ld/testsuite/ld-elf/shared.exp ld/testsuite/ld-elf/stab.d ld/testsuite/ld-elfcomm/common1b.c ld/testsuite/ld-gc/gc.c ld/testsuite/ld-ia64/tlsbin.rd ld/testsuite/ld-ia64/tlspic.rd ld/testsuite/ld-mips-elf/eh-frame1-n32.d ld/testsuite/ld-mips-elf/eh-frame1-n64.d ld/testsuite/ld-mips-elf/eh-frame2-n32.d ld/testsuite/ld-mips-elf/eh-frame2-n64.d ld/testsuite/ld-mips-elf/eh-frame3.d ld/testsuite/ld-mips-elf/eh-frame4.d ld/testsuite/ld-mips-elf/reloc-estimate-1.d ld/testsuite/ld-powerpc/powerpc.exp ld/testsuite/ld-powerpc/vxworks1-lib.rd ld/testsuite/ld-shared/main.c ld/testsuite/lib/ld-lib.exp libiberty/ChangeLog libiberty/Makefile.in libiberty/config.in libiberty/configure libiberty/configure.ac libiberty/cp-demangle.c libiberty/cp-demangle.h libiberty/testsuite/demangle-expected libiberty/xstrdup.c libtool.m4 ltgcc.m4 ltmain.sh ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4 opcodes/ChangeLog opcodes/Makefile.am opcodes/Makefile.in opcodes/aclocal.m4 opcodes/configure opcodes/configure.in opcodes/i386-gen.c opcodes/i386-opc.tbl opcodes/i386-tbl.h opcodes/po/fr.po opcodes/po/vi.po opcodes/s390-opc.c opcodes/s390-opc.txt opcodes/z80-dis.c
Diffstat (limited to 'binutils/dwarf.c')
-rw-r--r--binutils/dwarf.c89
1 files changed, 54 insertions, 35 deletions
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 3a5ef0f..f6a5a53 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -164,6 +164,30 @@ byte_get_signed (unsigned char *field, int size)
}
}
+static int
+size_of_encoded_value (int encoding)
+{
+ switch (encoding & 0x7)
+ {
+ default: /* ??? */
+ case 0: return eh_addr_size;
+ case 2: return 2;
+ case 3: return 4;
+ case 4: return 8;
+ }
+}
+
+static dwarf_vma
+get_encoded_value (unsigned char *data, int encoding)
+{
+ int size = size_of_encoded_value (encoding);
+
+ if (encoding & DW_EH_PE_signed)
+ return byte_get_signed (data, size);
+ else
+ return byte_get (data, size);
+}
+
/* Print a dwarf_vma value (typically an address, offset or length) in
hexadecimal format, followed by a space. The length of the value (and
hence the precision displayed) is determined by the byte_size parameter. */
@@ -186,7 +210,7 @@ print_dwarf_vma (dwarf_vma val, unsigned byte_size)
snprintf (buff, sizeof (buff), "%16.16lx ", val);
#endif
- printf (buff + (byte_size == 4 ? 8 : 0));
+ fputs (buff + (byte_size == 4 ? 8 : 0), stdout);
}
static unsigned long int
@@ -651,7 +675,8 @@ static int
decode_location_expression (unsigned char * data,
unsigned int pointer_size,
unsigned long length,
- unsigned long cu_offset)
+ unsigned long cu_offset,
+ struct dwarf_section * section)
{
unsigned op;
unsigned int bytes_read;
@@ -989,6 +1014,21 @@ decode_location_expression (unsigned char * data,
printf ("DW_OP_GNU_uninit");
/* FIXME: Is there data associated with this OP ? */
break;
+ case DW_OP_GNU_encoded_addr:
+ {
+ int encoding;
+ dwarf_vma addr;
+
+ encoding = *data++;
+ addr = get_encoded_value (data, encoding);
+ if ((encoding & 0x70) == DW_EH_PE_pcrel)
+ addr += section->address + (data - section->start);
+ data += size_of_encoded_value (encoding);
+
+ printf ("DW_OP_GNU_encoded_addr: fmt:%02x addr:", encoding);
+ print_dwarf_vma (addr, pointer_size);
+ }
+ break;
/* HP extensions. */
case DW_OP_HP_is_value:
@@ -1508,7 +1548,7 @@ read_and_display_attr_value (unsigned long attribute,
need_frame_base = decode_location_expression (block_start,
pointer_size,
uvalue,
- cu_offset);
+ cu_offset, section);
printf (")");
if (need_frame_base && !have_frame_base)
printf (_(" [without DW_AT_frame_base]"));
@@ -1799,7 +1839,7 @@ process_debug_info (struct dwarf_section *section,
if (!do_loc)
{
- printf (_("The section %s contains:\n\n"), section->name);
+ printf (_("Contents of the %s section:\n\n"), section->name);
load_debug_section (str, file);
}
@@ -2864,7 +2904,7 @@ display_debug_pubnames (struct dwarf_section *section,
if (offset != 0)
{
data += offset_size;
- printf (" %-6ld\t\t%s\n", offset, data);
+ printf (" %-6lx\t%s\n", offset, data);
data += strlen ((char *) data) + 1;
}
}
@@ -3186,7 +3226,7 @@ display_debug_loc (struct dwarf_section *section, void *file)
need_frame_base = decode_location_expression (start,
pointer_size,
length,
- cu_offset);
+ cu_offset, section);
putchar (')');
if (need_frame_base && !has_frame_base)
@@ -3282,7 +3322,7 @@ display_debug_aranges (struct dwarf_section *section,
unsigned char *start = section->start;
unsigned char *end = start + section->size;
- printf (_("The section %s contains:\n\n"), section->name);
+ printf (_("Contents of the %s section:\n\n"), section->name);
/* It does not matter if this load fails,
we test for that later on. */
@@ -3383,6 +3423,7 @@ display_debug_aranges (struct dwarf_section *section,
ranges += address_size;
+ printf (" ");
print_dwarf_vma (address, address_size);
print_dwarf_vma (length, address_size);
putchar ('\n');
@@ -3756,30 +3797,6 @@ frame_display_row (Frame_Chunk *fc, int *need_col_headers, int *max_regs)
printf ("\n");
}
-static int
-size_of_encoded_value (int encoding)
-{
- switch (encoding & 0x7)
- {
- default: /* ??? */
- case 0: return eh_addr_size;
- case 2: return 2;
- case 3: return 4;
- case 4: return 8;
- }
-}
-
-static dwarf_vma
-get_encoded_value (unsigned char *data, int encoding)
-{
- int size = size_of_encoded_value (encoding);
-
- if (encoding & DW_EH_PE_signed)
- return byte_get_signed (data, size);
- else
- return byte_get (data, size);
-}
-
#define GET(N) byte_get (start, N); start += N
#define LEB() read_leb128 (start, & length_return, 0); start += length_return
#define SLEB() read_leb128 (start, & length_return, 1); start += length_return
@@ -3798,7 +3815,7 @@ display_debug_frames (struct dwarf_section *section,
unsigned int length_return;
int max_regs = 0;
- printf (_("The section %s contains:\n"), section->name);
+ printf (_("Contents of the %s section:\n"), section->name);
while (start < end)
{
@@ -4379,7 +4396,8 @@ display_debug_frames (struct dwarf_section *section,
if (! do_debug_frames_interp)
{
printf (" DW_CFA_def_cfa_expression (");
- decode_location_expression (start, eh_addr_size, ul, 0);
+ decode_location_expression (start, eh_addr_size, ul, 0,
+ section);
printf (")\n");
}
fc->cfa_exp = 1;
@@ -4394,7 +4412,7 @@ display_debug_frames (struct dwarf_section *section,
printf (" DW_CFA_expression: %s (",
regname (reg, 0));
decode_location_expression (start, eh_addr_size,
- ul, 0);
+ ul, 0, section);
printf (")\n");
}
fc->col_type[reg] = DW_CFA_expression;
@@ -4408,7 +4426,8 @@ display_debug_frames (struct dwarf_section *section,
{
printf (" DW_CFA_val_expression: %s (",
regname (reg, 0));
- decode_location_expression (start, eh_addr_size, ul, 0);
+ decode_location_expression (start, eh_addr_size, ul, 0,
+ section);
printf (")\n");
}
fc->col_type[reg] = DW_CFA_val_expression;