summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <[email protected]>2009-02-07 15:21:51 -0800
committerRoland McGrath <[email protected]>2009-02-07 15:21:51 -0800
commit3cedc9a5bc48354217c8dd83b54277535ea13ce6 (patch)
tree5cbe8ba00056eff6b2a900748d35f88052db5bfe
parent773c733ceaf466a50affd9100d12f009e8248e90 (diff)
parent973a9c7c91b8bb0ace3f896d3b543dfa5466f27f (diff)
Merge commit 'origin/master' into dwarf
Conflicts: src/ChangeLog
-rw-r--r--TODO16
-rw-r--r--libebl/ChangeLog5
-rw-r--r--libebl/eblreloctypename.c4
-rw-r--r--libelf/ChangeLog9
-rw-r--r--libelf/elf32_updatenull.c7
-rw-r--r--libelf/elf_strptr.c6
-rw-r--r--src/ChangeLog25
-rw-r--r--src/Makefile.am1
-rw-r--r--src/ar.c23
-rw-r--r--src/elflint.c5
-rw-r--r--src/objdump.c184
-rw-r--r--src/readelf.c21
12 files changed, 157 insertions, 149 deletions
diff --git a/TODO b/TODO
index de4aa0f1..0012a566 100644
--- a/TODO
+++ b/TODO
@@ -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
diff --git a/src/ar.c b/src/ar.c
index a7a12329..2d11b1ef 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -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