Version 0.122:
-libdwfl: New functions dwfl_module_getsymtab, dwfl_module_getsym.
-
-libebl:add function to test for relative relocation
+libebl: add function to test for relative relocation
elflint: fix and extend DT_RELCOUNT/DT_RELACOUNT checks
elflint, readelf: add support for 64-bit SysV-style hash tables
+libdwfl: new functions dwfl_module_getsymtab, dwfl_module_getsym.
+
Version 0.121:
libelf: bug fixes for rewriting existing files when using mmap.
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * dwarf_child.c: Adjust for internal_function_def removal.
- * dwarf_getabbrev.c: Likewise.
- * dwarf_tag.c: Likewise.
- * libdw_form.c: Likewise.
- * memory-access.c: Likewise.
-
2006-06-28 Roland McGrath <roland@redhat.com>
* libdw.map: Export dwfl_linecu, dwfl_line_comp_dir.
/* Return vhild of current DIE.
- Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2003.
unsigned char *
-internal_function
+internal_function_def
__libdw_find_attr (Dwarf_Die *die, unsigned int search_name,
unsigned int *codep, unsigned int *formp)
{
/* Get abbreviation at given offset.
- Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2003.
Dwarf_Abbrev *
-internal_function
+internal_function_def
__libdw_getabbrev (dbg, cu, offset, lengthp, result)
Dwarf *dbg;
struct Dwarf_CU *cu;
/* Return tag of given DIE.
- Copyright (C) 2003, 2004, 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2003, 2004, 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2003.
Dwarf_Abbrev *
-internal_function
+internal_function_def
__libdw_findabbrev (struct Dwarf_CU *cu, unsigned int code)
{
Dwarf_Abbrev *abb;
/* Helper functions for form handling.
- Copyright (C) 2003, 2004, 2006 Red Hat, Inc.
+ Copyright (C) 2003, 2004 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2003.
size_t
-internal_function
+internal_function_def
__libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, unsigned int form,
const unsigned char *valp)
{
/* Out of line functions for memory-access.h macros.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
#include "memory-access.h"
uint64_t
-internal_function
+internal_function_def
__libdw_get_uleb128 (uint64_t acc, unsigned int i, const unsigned char **addrp)
{
unsigned char __b;
}
int64_t
-internal_function
+internal_function_def
__libdw_get_sleb128 (int64_t acc, unsigned int i, const unsigned char **addrp)
{
unsigned char __b;
--- /dev/null
+* dev+ino+mtime hash table, global
+** share fd; if !isrel, share Elf*,Ebl*,Dwarf*
+
+* find_debuginfo
+ When local search fails, try "yum install-debugfor elf-file".
+ i.e., yum install `rpm -qf elffile --qf '%{SOURCERPM} %{V}-%{R} %{ARCH}\n' | awk '{ print substr($1, 1, length($1)-length("-" $2 ".src.rpm")) "-debuginfo-" $2 "." $3 }' `
+ done in rpm-python inside yum(?)
+** all yum ops should have a -qf mode, means `rpm -qf --qf %{name}.%{arch}`
+ plus debug-of modifier to name.arch or -qf *
+
+* libdw_findcu reads all cu hdrs from beginning
+** good for dwarf_offdie: find cu containing that offset
+** bad for dwarf_addrdie: reads in whole debuginfo file
+** when from aranges (dwarf_addrdie), could read cuhdr offset directly w/o scan
+*** aranges really store cu header offset, but libdw adds in header size to
+ get cu die offset; but libdw_findcu interning should start with header
--- /dev/null
+* regexp on multiple formats to yield records (pc, mod, sym, offset, size?)
+
+glibc backtrace_symbols_fd:
+
+foo.so(sym+0x123)[0x345]
+foo.so(sym-0x123)[0x345]
+foobar[0x12345678]
+
+ ======= Backtrace: =========
+ /lib/libc.so.6[0x715124]
+ /lib/libc.so.6(__libc_free+0x77)[0x71565f]
+ ./loser[0x80483f8]
+ /lib/libc.so.6(__libc_start_main+0xdf)[0x6c6d5f]
+ ./loser[0x804832d]
+
+-->
+ (0x715124, "/lib/libc.so.6", , , )
+ (0x71565f, "/lib/libc.so.6", "__libc_free", +0x77, )
+ (0x80483f8, "./loser", , , )
+ (0x6c6d5f, "/lib/libc.so.6", "__libc_start_main", +0xdf, )
+ (0x804832d, "./loser", , , )
+
+
+i386 kernel oops:
+
+ st_size
+[<%x>] sym+0x123/0x32
+[<%x>] sym-0x123/0x32
+[<%x>] sym+0x123/0x32 [mod]
+
+ \r <1>Unable to handle kernel NULL pointer dereference at virtual address 00000000
+ \r printing eip:
+ \rf8c54000
+ \r*pde = 2f36a001
+ \rOops: 0002 [#2]
+ \rSMP
+ \rlast sysfs file: /block/hdc/removable
+ \rModules linked in: oopsmod2(U) oopsmod(U) nfs lockd nfs_acl ipv6 lp ppdev autofs4 rfcomm l2cap bluetooth sunrpc video button battery ac parport_pc parport floppy ohci1394 ieee1394 hw_random e1000 snd_intel8x0 snd_ac97_codec snd_ac97_bus snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer i2c_i801 snd soundcore i2c_core ehci_hcd snd_page_alloc shpchp uhci_hcd dm_snapshot dm_zero dm_mirror dm_mod ext3 jbd ata_piix libata sd_mod scsi_mod
+ \rCPU: 0
+ \rEIP: 0060:[<f8c54000>] Not tainted VLI
+ \rEFLAGS: 00010286 (2.6.14-1.1773_FC5smp)
+ \rEIP is at crasher+0x0/0xc [oopsmod2]
+ \reax: f8bd2000 ebx: f8c54380 ecx: f8c54380 edx: 00000001
+ \resi: 00000000 edi: 00000000 ebp: eecb8000 esp: eecb8fa8
+ \rds: 007b es: 007b ss: 0068
+ \rProcess insmod (pid: 3454, threadinfo=eecb8000 task=f768eaa0)
+ \rStack: f8bd2006 c01393d7 083d8018 00000000 c0103f19 083d8018 000109ca 083d8008
+ \r 00000000 00000000 bfc73888 ffffffda 0000007b c010007b 00000080 0059a402
+ \r 00000073 00000206 bfc7381c 0000007b 00000000 00000000
+ \rCall Trace:
+ \r [<f8bd2006>] init_crash+0x6/0x9 [oopsmod2] [<c01393d7>] sys_init_module+0xe2/0x205
+ \r [<c0103f19>] syscall_call+0x7/0xb
+
+-->
+ kernel-release "2.6.14-1.1773_FC5smp"
+ (0xf8c54000, "oopsmod2", "crasher", 0x0, 0xc)
+ (0xf8bd2006, "oopsmod2", "init_crash", +0x6, 0x9)
+ (0xc01393d7, "kernel", "sys_init_module", +0xe2, 0x205)
+ (0xc0103f19, "kernel", "syscall_call", +0x7, 0xb)
+
+
+x86-64 oops:
+
+[<%x>]
+<%x>{sym+%d}
+<%x>{sym-%d}
+<%x>{:mod:sym+%d}
+<%x>{:mod:sym-%d}
+
+kernel `uname -r`:
+
+... Not tainted (%s)
+... Tainted: [A-Z]* (%s)
+
+
+* guess mod loadbase from sym+ofs==pc -> pc-(symval+ofs)==bias
+
+* for kernel
+** seen-modules = "kernel", "mod", ...
+** dwfl_linux_kernel_report_offline with predicate = member seen-modules
+** intuit mod bases
+** dwfl_report_end, dwfl_report_begin, dwfl_report_elf on seen-modules w/bases
+
+* for user
+** seen-modules = files
+** dwfl_report_offline on seen-modules
+** intuit mod bases
+** dwfl_report_end, dwfl_report_begin, dwfl_report_elf on seen-modules w/bases
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * cu.c: Adjust for internal_function_def removal.
- * dwfl_error.c: Likewise.
- * dwfl_module.c: Likewise.
- * dwfl_module_getdwarf.c: Likewise.
- * lines.c: Likewise.
- * relocate.c: Likewise.
-
2006-07-11 Ulrich Drepper <drepper@redhat.com>
* dwfl_module.c (compare_modules): Don't return GElf_Sxword value,
/* Traverse all the CUs in the module. */
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_nextcu (Dwfl_Module *mod, struct dwfl_cu *lastcu,
struct dwfl_cu **cu)
{
}
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_addrcu (Dwfl_Module *mod, Dwarf_Addr addr, struct dwfl_cu **cu)
{
struct dwfl_arange *arange;
/* Error handling in libdwfl.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
}
int
-internal_function
+internal_function_def
__libdwfl_canon_error (Dwfl_Error error)
{
return canonicalize (error);
}
void
-internal_function
+internal_function_def
__libdwfl_seterrno (Dwfl_Error error)
{
int value = canonicalize (error);
}
void
-internal_function
+internal_function_def
__libdwfl_module_free (Dwfl_Module *mod)
{
if (mod->lazy_cu_root != NULL)
/* Try to open a libebl backend for MOD. */
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_module_getebl (Dwfl_Module *mod)
{
if (mod->ebl == NULL)
/* Fetch source line info for CU.
- Copyright (C) 2005, 2006 Red Hat, Inc.
+ Copyright (C) 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
#include "../libdw/libdwP.h"
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_cu_getsrclines (struct dwfl_cu *cu)
{
if (cu->lines == NULL)
We update the section header in place to cache the result. */
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_relocate_value (Dwfl_Module *mod, size_t symshstrndx,
Elf32_Word shndx, GElf_Addr *value)
{
}
Dwfl_Error
-internal_function
+internal_function_def
__libdwfl_relocate (Dwfl_Module *mod, Elf *debugfile)
{
assert (mod->e_type == ET_REL);
-2006-07-12 Ulrich Drepper <drepper@redhat.com>
-
- * elf32_updatefile.c: Adjust for internal_function_def removal.
- * elf32_updatenull.c: Likewise.
- * elf_begin.c: Likewise.
- * elf_getdata.c: Likewise.
-
2006-07-11 Ulrich Drepper <drepper@redhat.com>
* libelf.h: Define ELF_T_GNUHASH.
int
-internal_function
+internal_function_def
__elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
{
ElfW2(LIBELFBITS,Ehdr) *ehdr;
int
-internal_function
+internal_function_def
__elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
{
char fillbuf[FILLBUFSIZE];
off_t
-internal_function
+internal_function_def
__elfw2(LIBELFBITS,updatenull) (Elf *elf, int *change_bop, size_t shnum)
{
ElfW2(LIBELFBITS,Ehdr) *ehdr = INTUSE(elfw2(LIBELFBITS,getehdr)) (elf);
/* Create descriptor for processing file.
- Copyright (C) 1998-2005, 2006 Red Hat, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
Elf *
-internal_function
+internal_function_def
__libelf_read_mmaped_file (int fildes, void *map_address, off_t offset,
size_t maxsize, Elf_Cmd cmd, Elf *parent)
{
/* Read the next archive header. */
int
-internal_function
+internal_function_def
__libelf_next_arhdr (elf)
Elf *elf;
{
/* Store the information for the raw data in the `rawdata' element. */
int
-internal_function
+internal_function_def
__libelf_set_rawdata (Elf_Scn *scn)
{
size_t offset;
-2006-07-11 Ulrich Drepper <drepper@redhat.com>
+2006-07-11 Roland McGrath <roland@redhat.com>
- * readelf.c (handle_gnu_hash): Adjust for final form of .gnu.hash.
- * elflint.c (check_gnu_hash): Likewise.
+ * addr2line.c (options): English fix in -f doc string.
+
+ * addr2line.c (use_comp_dir): New variable.
+ (options, parse_opt): Grok -A/--absolute to set it.
+ (handle_address): If set, prepend dwfl_line_comp_dir results to
+ relative file names.
2006-07-06 Ulrich Drepper <drepper@redhat.com>
* Makefile.am: Add hacks to create dependency files for non-generic
linker.
-2006-06-28 Roland McGrath <roland@redhat.com>
-
- * addr2line.c (use_comp_dir): New variable.
- (options, parse_opt): Grok -A/--absolute to set it.
- (handle_address): If set, prepend dwfl_line_comp_dir results to
- relative file names.
-
2006-06-12 Ulrich Drepper <drepper@redhat.com>
* ldgeneric.c (ld_generic_generate_sections): Don't create .interp
{ NULL, 0, NULL, 0, N_("Output Selection:"), 0 },
{ "basenames", 's', NULL, 0, N_("Show only base names of source files"), 0 },
{ "absolute", 'A', NULL, 0,
- N_("Show absolute file names using compilation directory"), 0 },
- { "functions", 'f', NULL, 0, N_("Additional show function names"), 0 },
+ N_("Show absolute directory names of source files"), 0 },
+ { "functions", 'f', NULL, 0, N_("Also show function names"), 0 },
{ NULL, 0, NULL, 0, N_("Miscellaneous:"), 0 },
/* Unsupported options. */
show-die-info get-files get-lines get-pubnames \
get-aranges allfcts line2addr addrscopes funcscopes \
show-abbrev hash newscn ecp dwflmodtest \
- find-prologues funcretval allregs rdwrmmap
+ find-prologues funcretval allregs rdwrmmap \
+ countcu
# get-ciefde
asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \
asm-tst6 asm-tst7 asm-tst8 asm-tst9
funcscopes_LDADD = $(libdw) $(libmudflap)
funcretval_LDADD = $(libdw) $(libmudflap)
allregs_LDADD = $(libdw) $(libmudflap)
+countcu_LDADD = $(libdw) $(libmudflap)
find_prologues_LDADD = $(libdw) $(libmudflap)
#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) $(libmudflap)
asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) $(libmudflap) -ldl