UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
addr2line.cpp File Reference
#include <unistd.h>
#include <sys/stat.h>
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include <assert.h>
#include "bfd.h"
#include "bucomm.h"
#include "demangle.h"
#include "libiberty.h"

Go to the source code of this file.

Data Structures

struct  _libtrace_data
 
struct  _sym_info
 

Macros

#define ADDR_BUF_LEN   ((CHAR_BIT/4)*(sizeof(void*))+1)
 

Typedefs

typedef struct _libtrace_data libtrace_data
 
typedef struct _sym_info sym_info
 

Functions

static int slurp_symtab (bfd *)
 
static void find_address_in_section (bfd *, asection *, void *)
 
static void find_offset_in_section (bfd *, asection *, sym_info *)
 
static int translate_addresses (bfd *abfd, asection *section, void *addr, char *buf_func, size_t buf_func_len, char *buf_file, size_t buf_file_len)
 
void bfd_nonfatal (const char *string)
 
void report (const char *format, va_list args)
 
void non_fatal (const char *format,...)
 
off_t get_file_size (const char *file_name)
 
void list_matching_formats (char **p)
 
void set_default_bfd_target (void)
 
int libtrace_init (const char *file_name, const char *section_name, const char *target)
 
int libtrace_close (void)
 
int libtrace_resolve (void *addr, char *buf_func, size_t buf_func_len, char *buf_file, size_t buf_file_len,...)
 

Variables

static libtrace_data m_libtrace_data
 
static const char * program_name = "addr2line"
 

Detailed Description

Note
Derived from addr2line.c and associated binutils files, version 2.18.

Definition in file addr2line.cpp.

Macro Definition Documentation

#define ADDR_BUF_LEN   ((CHAR_BIT/4)*(sizeof(void*))+1)

Referenced by translate_addresses().

Typedef Documentation

typedef struct _libtrace_data libtrace_data
typedef struct _sym_info sym_info

These variables are used to pass information between translate_addresses and find_address_in_section.

Function Documentation

void bfd_nonfatal ( const char *  string)

Definition at line 60 of file addr2line.cpp.

References program_name.

Referenced by libtrace_init(), and slurp_symtab().

static void find_address_in_section ( bfd *  abfd,
asection *  section,
void data 
)
static

Look for an address in a section. This is called via bfd_map_over_sections.

Definition at line 161 of file addr2line.cpp.

References _sym_info::filename, _sym_info::found, _sym_info::functionname, _sym_info::line, _sym_info::pc, and _libtrace_data::syms.

Referenced by translate_addresses().

static void find_offset_in_section ( bfd *  abfd,
asection *  section,
sym_info psi 
)
static

Look for an offset in a section. This is directly called.

Definition at line 186 of file addr2line.cpp.

References _sym_info::filename, _sym_info::found, _sym_info::functionname, _sym_info::line, _sym_info::pc, and _libtrace_data::syms.

Referenced by translate_addresses().

off_t get_file_size ( const char *  file_name)

Returns the size of the named file. If the file does not exist, or if it is not a real file, then a suitable non-fatal error message is printed and zero is returned.

Definition at line 89 of file addr2line.cpp.

References non_fatal().

Referenced by libtrace_init().

int libtrace_close ( void  )

Definition at line 308 of file addr2line.cpp.

References _libtrace_data::abfd, and _libtrace_data::syms.

int libtrace_init ( const char *  file_name,
const char *  section_name,
const char *  target 
)
int libtrace_resolve ( void addr,
char *  buf_func,
size_t  buf_func_len,
char *  buf_file,
size_t  buf_file_len,
  ... 
)
void list_matching_formats ( char **  p)

After a FALSE return from bfd_check_format_matches with bfd_get_error () == bfd_error_file_ambiguously_recognized, print the possible matching targets.

Definition at line 109 of file addr2line.cpp.

References program_name.

Referenced by libtrace_init().

void non_fatal ( const char *  format,
  ... 
)

Definition at line 77 of file addr2line.cpp.

References report().

Referenced by get_file_size(), libtrace_init(), and set_default_bfd_target().

void report ( const char *  format,
va_list  args 
)

Definition at line 70 of file addr2line.cpp.

References program_name.

Referenced by non_fatal().

void set_default_bfd_target ( void  )

Set the default BFD target based on the configured target. Doing this permits the binutils to be configured for a particular target, and linked against a shared BFD library which was configured for a different target.

Definition at line 124 of file addr2line.cpp.

References non_fatal().

Referenced by libtrace_init().

static int slurp_symtab ( bfd *  abfd)
static

Read in the symbol table.

Definition at line 139 of file addr2line.cpp.

References bfd_nonfatal(), and _libtrace_data::syms.

Referenced by libtrace_init().

static int translate_addresses ( bfd *  abfd,
asection *  section,
void xaddr,
char *  buf_func,
size_t  buf_func_len,
char *  buf_file,
size_t  buf_file_len 
)
static

Variable Documentation

libtrace_data m_libtrace_data
static
Initial value:
= { .unwind_inlines = TRUE, .with_functions = TRUE, .do_demangle = TRUE,
.base_names = TRUE, .syms = nullptr, .abfd = nullptr, .section = nullptr, }

Definition at line 38 of file addr2line.cpp.

const char* program_name = "addr2line"
static

Definition at line 58 of file addr2line.cpp.

Referenced by bfd_nonfatal(), list_matching_formats(), and report().