diff options
| author | Roland McGrath <[email protected]> | 2009-02-07 15:21:51 -0800 |
|---|---|---|
| committer | Roland McGrath <[email protected]> | 2009-02-07 15:21:51 -0800 |
| commit | 3cedc9a5bc48354217c8dd83b54277535ea13ce6 (patch) | |
| tree | 5cbe8ba00056eff6b2a900748d35f88052db5bfe | |
| parent | 773c733ceaf466a50affd9100d12f009e8248e90 (diff) | |
| parent | 973a9c7c91b8bb0ace3f896d3b543dfa5466f27f (diff) | |
Merge commit 'origin/master' into dwarf
Conflicts:
src/ChangeLog
| -rw-r--r-- | TODO | 16 | ||||
| -rw-r--r-- | libebl/ChangeLog | 5 | ||||
| -rw-r--r-- | libebl/eblreloctypename.c | 4 | ||||
| -rw-r--r-- | libelf/ChangeLog | 9 | ||||
| -rw-r--r-- | libelf/elf32_updatenull.c | 7 | ||||
| -rw-r--r-- | libelf/elf_strptr.c | 6 | ||||
| -rw-r--r-- | src/ChangeLog | 25 | ||||
| -rw-r--r-- | src/Makefile.am | 1 | ||||
| -rw-r--r-- | src/ar.c | 23 | ||||
| -rw-r--r-- | src/elflint.c | 5 | ||||
| -rw-r--r-- | src/objdump.c | 184 | ||||
| -rw-r--r-- | src/readelf.c | 21 |
12 files changed, 157 insertions, 149 deletions
@@ -1,7 +1,7 @@ ToDo list for elfutils -*-outline-*- ---------------------- -Time-stamp: <2009-01-23 16:28:46 drepper> +Time-stamp: <2009-02-05 22:08:01 drepper> * mkinstalldirs @@ -22,6 +22,13 @@ Time-stamp: <2009-01-23 16:28:46 drepper> archives and only when having the archive handling separately this remains maintainable. +** shdrs in read-only files + + When reading (ELF_C_READ*) then there is no need to malloc Shdr + structure in elfXX_getshdr if file is mmaped and unaligned access + is allowed or the structure is aligned. Use ELF_F_MALLOCED flag + to differentiate. + * libdw @@ -103,6 +110,13 @@ Time-stamp: <2009-01-23 16:28:46 drepper> Not implemented at all in the moment except for recognition of the option itself. +** variables with aliases in executables + + When linking an executable with a references against a variable in a + DSO, create symbol table entries for all the aliases of the variable + in the DSO and create a relocation for one of them (a non-weak + definition) + * elflint ** additional checks diff --git a/libebl/ChangeLog b/libebl/ChangeLog index 51b3b705..f1ba346a 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,8 @@ +2009-02-01 Ulrich Drepper <[email protected]> + + * eblreloctypename.c (ebl_reloc_type_name): Return "<INVALID RELOC>" + instead of "???" for invalid relocations. + 2008-08-01 Roland McGrath <[email protected]> * eblcorenotetypename.c: Handle NT_386_IOPERM. diff --git a/libebl/eblreloctypename.c b/libebl/eblreloctypename.c index c715b064..3f2c7d9c 100644 --- a/libebl/eblreloctypename.c +++ b/libebl/eblreloctypename.c @@ -1,5 +1,5 @@ /* Return relocation type name. - Copyright (C) 2001, 2002 Red Hat, Inc. + Copyright (C) 2001, 2002, 2009 Red Hat, Inc. This file is part of Red Hat elfutils. Written by Ulrich Drepper <[email protected]>, 2001. @@ -68,7 +68,7 @@ ebl_reloc_type_name (ebl, reloc, buf, len) res = ebl != NULL ? ebl->reloc_type_name (reloc, buf, len) : NULL; if (res == NULL) /* There are no generic relocation type names. */ - res = "???"; + res = "<INVALID RELOC>"; return res; } diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 119fa5b1..e6ac1d21 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,12 @@ +2009-02-01 Ulrich Drepper <[email protected]> + + * elf_strptr.c: Add comment re possible problem. + +2009-01-26 Ulrich Drepper <[email protected]> + + * elf32_updatenull.c (updatenull_wrlock): Fix comment of + ELF_F_LAYOUT behaviour re section header table. + 2009-01-22 Ulrich Drepper <[email protected]> * elf32_updatefile.c (__elfXX_updatemmap): Fill the gap between diff --git a/libelf/elf32_updatenull.c b/libelf/elf32_updatenull.c index a18d0bea..5ce8bbc9 100644 --- a/libelf/elf32_updatenull.c +++ b/libelf/elf32_updatenull.c @@ -1,5 +1,5 @@ /* Update data structures for changes. - Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Red Hat, Inc. This file is part of Red Hat elfutils. Written by Ulrich Drepper <[email protected]>, 2000. @@ -401,8 +401,9 @@ __elfw2(LIBELFBITS,updatenull_wrlock) (Elf *elf, int *change_bop, size_t shnum) /* Store section information. */ if (elf->flags & ELF_F_LAYOUT) { - /* The user is supposed to fill out e_phoff. Use it and - e_phnum to determine the maximum extend. */ + /* The user is supposed to fill out e_shoff. Use it and + e_shnum (or sh_size of the dummy, first section header) + to determine the maximum extend. */ size = MAX ((GElf_Word) size, (ehdr->e_shoff + (elf_typesize (LIBELFBITS, ELF_T_SHDR, shnum)))); diff --git a/libelf/elf_strptr.c b/libelf/elf_strptr.c index 35a0e9b6..7b837b09 100644 --- a/libelf/elf_strptr.c +++ b/libelf/elf_strptr.c @@ -1,5 +1,5 @@ /* Return string pointer from string section. - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008 Red Hat, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2008, 2009 Red Hat, Inc. This file is part of Red Hat elfutils. Contributed by Ulrich Drepper <[email protected]>, 1998. @@ -151,6 +151,10 @@ elf_strptr (elf, idx, offset) } if (likely (strscn->rawdata_base != NULL)) + // XXX Is this correct if a file is read and then new data is added + // XXX to the string section? Likely needs to check offset against + // XXX size of rawdata_base buffer and then iterate over rest of the + // XXX list. result = &strscn->rawdata_base[offset]; else { diff --git a/src/ChangeLog b/src/ChangeLog index 754a8bcf..a8e46552 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -149,6 +149,31 @@ * dwarflint.c: Checking for zero padding and unreferenced bytes. CU size and padding at the end of CU are now checked. +2009-02-05 Ulrich Drepper <[email protected]> + + * objdump.c (show_relocs_x): Minor cleanups. + + * readelf.c (print_cfa_program): Correct a few labels. + Print first DW_CFA_expression and DW_CFA_val_expression parameter + as register. + +2009-02-01 Ulrich Drepper <[email protected]> + + * objdump.c (show_relocs_rel, show_relocs_rela): Split common parts + into ... + (show_relocs_x): ...here. New function. + (show_relocs): Better spacing in output. + + * objdump.c (show_relocs_rela): Show offsets as signed values. + + * ar.c (main): Fix recognition of invalid modes for a, b, i modifiers. + Improve some error messages. + Use program_invocation_short_name instead of AR macro. + * Makefile.am (CFLAGS_ar): Remove. + * elflint.c (parse_opt): ARGP_HELP_EXIT_ERR does nothing for argp_help. + * objdump.c (parse_opt): Likewise. + * readelf.c (parse_opt): Likewise. + 2009-01-27 Roland McGrath <[email protected]> * readelf.c (print_ops): Notice short length, don't overrun buffer diff --git a/src/Makefile.am b/src/Makefile.am index 032c621c..8510791d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -145,7 +145,6 @@ objdump_LDADD = $(libasm) $(libebl) $(libelf) $(libeu) $(libmudflap) -ldl ranlib_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) strings_LDADD = $(libelf) $(libeu) $(libmudflap) ar_LDADD = libar.a $(libelf) $(libeu) $(libmudflap) -CFLAGS_ar = -DAR=\"$(shell echo ar|sed '$(transform)')\" unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl dwarfcmp_LDADD = $(libdw) $(libmudflap) -ldl dwarflint_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libmudflap) -ldl @@ -188,14 +188,16 @@ main (int argc, char *argv[]) if (ipos != ipos_none) { /* Only valid for certain operations. */ - if (operation == oper_extract && operation == oper_delete) + if (operation != oper_move && operation != oper_replace) error (1, 0, gettext ("\ 'a', 'b', and 'i' are only allowed with the 'm' and 'r' options")); if (remaining == argc) { - error (0, 0, gettext ("MEMBER parameter required")); - argp_help (&argp, stderr, ARGP_HELP_SEE, AR); + error (0, 0, gettext ("\ +MEMBER parameter required for 'a', 'b', and 'i' modifiers")); + argp_help (&argp, stderr, ARGP_HELP_USAGE | ARGP_HELP_SEE, + program_invocation_short_name); exit (EXIT_FAILURE); } @@ -214,7 +216,8 @@ main (int argc, char *argv[]) if (remaining == argc) { error (0, 0, gettext ("COUNT parameter required")); - argp_help (&argp, stderr, ARGP_HELP_SEE, AR); + argp_help (&argp, stderr, ARGP_HELP_SEE, + program_invocation_short_name); exit (EXIT_FAILURE); } @@ -237,8 +240,8 @@ main (int argc, char *argv[]) /* There must at least be one more parameter specifying the archive. */ if (remaining == argc) { - error (0, 0, gettext ("Archive name required")); - argp_help (&argp, stderr, ARGP_HELP_SEE, AR); + error (0, 0, gettext ("archive name required")); + argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); exit (EXIT_FAILURE); } @@ -309,7 +312,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)), if (operation != oper_none) { error (0, 0, gettext ("More than one operation specified")); - argp_help (&argp, stderr, ARGP_HELP_SEE, AR); + argp_help (&argp, stderr, ARGP_HELP_SEE, + program_invocation_short_name); exit (EXIT_FAILURE); } @@ -1098,7 +1102,8 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, if (fd == -1) { if (!suppress_create_msg) - fprintf (stderr, "%s: creating %s\n", AR, arfname); + fprintf (stderr, "%s: creating %s\n", + program_invocation_short_name, arfname); goto no_old; } @@ -1212,7 +1217,7 @@ do_oper_insert (int oper, const char *arfname, char **argv, int argc, if (found[cnt] == NULL) { fprintf (stderr, gettext ("%s: no entry %s in archive!\n"), - AR, argv[cnt]); + program_invocation_short_name, argv[cnt]); status = 1; } diff --git a/src/elflint.c b/src/elflint.c index 826d94c3..7ddf3a9a 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -220,9 +220,8 @@ parse_opt (int key, char *arg __attribute__ ((unused)), case ARGP_KEY_NO_ARGS: fputs (gettext ("Missing file name.\n"), stderr); - argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR, - program_invocation_short_name); - exit (1); + argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); + exit (EXIT_FAILURE); default: return ARGP_ERR_UNKNOWN; diff --git a/src/objdump.c b/src/objdump.c index 7f639410..af8abf78 100644 --- a/src/objdump.c +++ b/src/objdump.c @@ -234,9 +234,9 @@ parse_opt (int key, char *arg, if (! any_control_option) { fputs (gettext ("No operation specified.\n"), stderr); - argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR, + argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); - exit (1); + exit (EXIT_FAILURE); } default: @@ -358,11 +358,66 @@ handle_ar (int fd, Elf *elf, const char *prefix, const char *fname, static void +show_relocs_x (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *symdata, + Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx, + GElf_Addr r_offset, GElf_Xword r_info, GElf_Sxword r_addend) +{ + int elfclass = gelf_getclass (ebl->elf); + char buf[128]; + + printf ("%0*" PRIx64 " %-20s ", + elfclass == ELFCLASS32 ? 8 : 16, r_offset, + ebl_reloc_type_name (ebl, GELF_R_TYPE (r_info), buf, sizeof (buf))); + + Elf32_Word xndx; + GElf_Sym symmem; + GElf_Sym *sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (r_info), + &symmem, &xndx); + + if (sym == NULL) + printf ("<%s %ld>", + gettext ("INVALID SYMBOL"), (long int) GELF_R_SYM (r_info)); + else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION) + printf ("%s", + elf_strptr (ebl->elf, symstrndx, sym->st_name)); + else + { + GElf_Shdr destshdr_mem; + GElf_Shdr *destshdr; + destshdr = gelf_getshdr (elf_getscn (ebl->elf, + sym->st_shndx == SHN_XINDEX + ? xndx : sym->st_shndx), + &destshdr_mem); + + if (shdr == NULL) + printf ("<%s %ld>", + gettext ("INVALID SECTION"), + (long int) (sym->st_shndx == SHN_XINDEX + ? xndx : sym->st_shndx)); + else + printf ("%s", + elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); + } + + if (r_addend != 0) + { + char sign = '+'; + if (r_addend < 0) + { + sign = '-'; + r_addend = -r_addend; + } + printf ("%c%#" PRIx64, sign, r_addend); + } + putchar ('\n'); +} + + +static void show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx) { - int elfclass = gelf_getclass (ebl->elf); int nentries = shdr->sh_size / shdr->sh_entsize; for (int cnt = 0; cnt < nentries; ++cnt) @@ -372,60 +427,8 @@ show_relocs_rel (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, rel = gelf_getrel (data, cnt, &relmem); if (rel != NULL) - { - char buf[128]; - GElf_Sym symmem; - GElf_Sym *sym; - Elf32_Word xndx; - - sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info), - &symmem, &xndx); - if (sym == NULL) - printf ("%0*" PRIx64 " %-20s <%s %ld>\n", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - gettext ("INVALID SYMBOL"), - (long int) GELF_R_SYM (rel->r_info)); - else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION) - printf ("%0*" PRIx64 " %-20s %s\n", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - elf_strptr (ebl->elf, symstrndx, sym->st_name)); - else - { - GElf_Shdr destshdr_mem; - GElf_Shdr *destshdr; - destshdr = gelf_getshdr (elf_getscn (ebl->elf, - sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx), - &destshdr_mem); - - if (shdr == NULL) - printf ("%0*" PRIx64 " %-20s <%s %ld>\n", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - gettext ("INVALID SECTION"), - (long int) (sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx)); - else - printf ("%0*" PRIx64 " %-20s %s\n", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); - } - } + show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx, + rel->r_offset, rel->r_info, 0); } } @@ -435,7 +438,6 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, Elf_Data *symdata, Elf_Data *xndxdata, size_t symstrndx, size_t shstrndx) { - int elfclass = gelf_getclass (ebl->elf); int nentries = shdr->sh_size / shdr->sh_entsize; for (int cnt = 0; cnt < nentries; ++cnt) @@ -445,64 +447,8 @@ show_relocs_rela (Ebl *ebl, GElf_Shdr *shdr, Elf_Data *data, rel = gelf_getrela (data, cnt, &relmem); if (rel != NULL) - { - char buf[128]; - GElf_Sym symmem; - GElf_Sym *sym; - Elf32_Word xndx; - - sym = gelf_getsymshndx (symdata, xndxdata, GELF_R_SYM (rel->r_info), - &symmem, &xndx); - if (sym == NULL) - printf ("%0*" PRIx64 " %-20s <%s %ld>", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - gettext ("INVALID SYMBOL"), - (long int) GELF_R_SYM (rel->r_info)); - else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION) - printf ("%0*" PRIx64 " %-20s %s", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - elf_strptr (ebl->elf, symstrndx, sym->st_name)); - else - { - GElf_Shdr destshdr_mem; - GElf_Shdr *destshdr; - destshdr = gelf_getshdr (elf_getscn (ebl->elf, - sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx), - &destshdr_mem); - - if (shdr == NULL) - printf ("%0*" PRIx64 " %-20s <%s %ld>", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - gettext ("INVALID SECTION"), - (long int) (sym->st_shndx == SHN_XINDEX - ? xndx : sym->st_shndx)); - else - printf ("%0*" PRIx64 " %-20s %s", - elfclass == ELFCLASS32 ? 8 : 16, rel->r_offset, - ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info)) - ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info), - buf, sizeof (buf)) - : gettext ("<INVALID RELOC>"), - elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); - } - - if (rel->r_addend != 0) - printf ("+%#" PRIx64, rel->r_addend); - putchar ('\n'); - } + show_relocs_x (ebl, shdr, symdata, xndxdata, symstrndx, shstrndx, + rel->r_offset, rel->r_info, rel->r_addend); } } @@ -561,7 +507,7 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) shdr->sh_info), &destshdr_mem); - printf (gettext ("RELOCATION RECORDS FOR [%s]:\n" + printf (gettext ("\nRELOCATION RECORDS FOR [%s]:\n" "%-*s TYPE VALUE\n"), elf_strptr (ebl->elf, shstrndx, destshdr->sh_name), elfclass == ELFCLASS32 ? 8 : 16, gettext ("OFFSET")); @@ -601,11 +547,11 @@ show_relocs (Ebl *ebl, const char *fname, uint32_t shstrndx) else show_relocs_rela (ebl, shdr, data, symdata, xndxdata, symshdr->sh_link, shstrndx); + + putchar ('\n'); } } - fputs_unlocked ("\n\n", stdout); - return 0; } diff --git a/src/readelf.c b/src/readelf.c index dadc515f..df19845d 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -413,9 +413,9 @@ parse_opt (int key, char *arg, { fputs (gettext ("No operation specified.\n"), stderr); do_argp_help: - argp_help (&argp, stderr, ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR, + argp_help (&argp, stderr, ARGP_HELP_SEE, program_invocation_short_name); - exit (1); + exit (EXIT_FAILURE); } break; default: @@ -3719,7 +3719,7 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, // XXX overflow check get_uleb128 (op1, readp); get_uleb128 (op2, readp); - printf (" same_value r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n", + printf (" register r%" PRIu64 " (%s) in r%" PRIu64 " (%s)\n", op1, regname (op1), op2, regname (op2)); break; case DW_CFA_remember_state: @@ -3749,16 +3749,16 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, case DW_CFA_def_cfa_expression: // XXX overflow check get_uleb128 (op1, readp); /* Length of DW_FORM_block. */ - printf (" val_expression %" PRIu64 "\n", op1); + printf (" def_cfa_expression %" PRIu64 "\n", op1); print_ops (dwflmod, dbg, 10, 10, ptr_size, op1, readp); readp += op1; - error (1,0,"need to implement BLOCK reading"); break; case DW_CFA_expression: // XXX overflow check get_uleb128 (op1, readp); get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ - printf (" val_expression %" PRIu64 "\n", op1); + printf (" expression r%" PRIu64 " (%s) \n", + op1, regname (op1)); print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp); readp += op2; break; @@ -3793,24 +3793,25 @@ print_cfa_program (const unsigned char *readp, const unsigned char *const endp, // XXX overflow check get_uleb128 (op1, readp); get_sleb128 (sop2, readp); - printf (" val_offset %" PRIu64 " at offset %" PRId64 "\n", + printf (" val_offset_sf %" PRIu64 " at offset %" PRId64 "\n", op1, sop2 * data_align); break; case DW_CFA_val_expression: // XXX overflow check get_uleb128 (op1, readp); get_uleb128 (op2, readp); /* Length of DW_FORM_block. */ - printf (" val_expression %" PRIu64 "\n", op1); + printf (" val_expression r%" PRIu64 " (%s)\n", + op1, regname (op1)); print_ops (dwflmod, dbg, 10, 10, ptr_size, op2, readp); readp += op2; break; case DW_CFA_MIPS_advance_loc8: op1 = read_8ubyte_unaligned_inc (dbg, readp); - printf (" advance_loc2 %" PRIu64 " to %#" PRIx64 "\n", + printf (" MIPS_advance_loc8 %" PRIu64 " to %#" PRIx64 "\n", op1, pc += op1 * code_align); break; case DW_CFA_GNU_window_save: - puts (" window_save"); + puts (" GNU_window_save"); break; case DW_CFA_GNU_args_size: // XXX overflow check |
