#include "bucomm.h"
#include "elfcomm.h"
#include "dwarf.h"
-#ifdef HAVE_LIBCTF
#include "ctf-api.h"
-#endif
#include "elf/common.h"
#include "elf/external.h"
#define DEBUG_DUMP (1 << 2) /* The -w command line switch. */
#define STRING_DUMP (1 << 3) /* The -p command line switch. */
#define RELOC_DUMP (1 << 4) /* The -R command line switch. */
-#ifdef HAVE_LIBCTF
#define CTF_DUMP (1 << 5) /* The --ctf command line switch. */
-#endif
typedef unsigned char dump_type;
static bfd_boolean do_version = FALSE;
static bfd_boolean do_histogram = FALSE;
static bfd_boolean do_debugging = FALSE;
-#ifdef HAVE_LIBCTF
static bfd_boolean do_ctf = FALSE;
-#endif
static bfd_boolean do_arch = FALSE;
static bfd_boolean do_notes = FALSE;
static bfd_boolean do_archive_index = FALSE;
static bfd_boolean is_32bit_elf = FALSE;
static bfd_boolean decompress_dumps = FALSE;
-#ifdef HAVE_LIBCTF
static char *dump_ctf_parent_name;
static char *dump_ctf_symtab_name;
static char *dump_ctf_strtab_name;
-#endif
struct group_list
{
#define OPTION_DWARF_DEPTH 514
#define OPTION_DWARF_START 515
#define OPTION_DWARF_CHECK 516
-#ifdef HAVE_LIBCTF
#define OPTION_CTF_DUMP 517
#define OPTION_CTF_PARENT 518
#define OPTION_CTF_SYMBOLS 519
#define OPTION_CTF_STRINGS 520
-#endif
static struct option options[] =
{
{"dwarf-start", required_argument, 0, OPTION_DWARF_START},
{"dwarf-check", no_argument, 0, OPTION_DWARF_CHECK},
-#ifdef HAVE_LIBCTF
{"ctf", required_argument, 0, OPTION_CTF_DUMP},
{"ctf-symbols", required_argument, 0, OPTION_CTF_SYMBOLS},
{"ctf-strings", required_argument, 0, OPTION_CTF_STRINGS},
{"ctf-parent", required_argument, 0, OPTION_CTF_PARENT},
-#endif
{"version", no_argument, 0, 'v'},
{"wide", no_argument, 0, 'W'},
--dwarf-depth=N Do not display DIEs at depth N or greater\n\
--dwarf-start=N Display DIEs starting with N, at the same depth\n\
or deeper\n"));
-#ifdef HAVE_LIBCTF
fprintf (stream, _("\
--ctf=<number|name> Display CTF info from section <number|name>\n\
--ctf-parent=<number|name>\n\
Use section <number|name> as the CTF external symtab\n\n\
--ctf-strings=<number|name>\n\
Use section <number|name> as the CTF external strtab\n\n"));
-#endif
#ifdef SUPPORT_DISASSEMBLY
fprintf (stream, _("\
case OPTION_DWARF_CHECK:
dwarf_check = TRUE;
break;
-#ifdef HAVE_LIBCTF
case OPTION_CTF_DUMP:
do_ctf = TRUE;
request_dump (filedata, CTF_DUMP);
case OPTION_CTF_PARENT:
dump_ctf_parent_name = strdup (optarg);
break;
-#endif
case OPTION_DYN_SYMS:
do_dyn_syms = TRUE;
break;
remaining = 4;
}
+ else
+ {
+ addr.section = SHN_UNDEF;
+ addr.offset = 0;
+ }
if ((word & 0x80000000) == 0)
{
}
}
+static const char *
+get_alpha_symbol_other (unsigned int other)
+{
+ switch (other)
+ {
+ case STO_ALPHA_NOPV: return "NOPV";
+ case STO_ALPHA_STD_GPLOAD: return "STD GPLOAD";
+ default:
+ error (_("Unrecognized alpah specific other value: %u"), other);
+ return _("<unknown>");
+ }
+}
+
static const char *
get_solaris_symbol_visibility (unsigned int visibility)
{
switch (filedata->file_header.e_machine)
{
+ case EM_ALPHA:
+ result = get_alpha_symbol_other (other);
+ break;
case EM_AARCH64:
result = get_aarch64_symbol_other (other);
break;
case EM_L1OM:
case EM_K1OM:
return reloc_type == 2; /* R_X86_64_PC32. */
+ case EM_VAX:
+ return reloc_type == 4; /* R_VAX_PCREL32. */
case EM_XTENSA_OLD:
case EM_XTENSA:
return reloc_type == 14; /* R_XTENSA_32_PCREL. */
return TRUE;
}
-#ifdef HAVE_LIBCTF
static ctf_sect_t *
shdr_to_ctf_sect (ctf_sect_t *buf, Elf_Internal_Shdr *shdr, Filedata *filedata)
{
free (strdata);
return ret;
}
-#endif /* HAVE_LIBCTF */
static bfd_boolean
load_specific_debug_section (enum dwarf_section_display_enum debug,
res = FALSE;
}
-#ifdef HAVE_LIBCTF
if (dump & CTF_DUMP)
{
if (! dump_section_as_ctf (section, filedata))
res = FALSE;
}
-#endif
}
/* Check to see if the user requested a
if (cmdline.dump_sects != NULL)
free (cmdline.dump_sects);
-#ifdef HAVE_LIBCTF
free (dump_ctf_symtab_name);
free (dump_ctf_strtab_name);
free (dump_ctf_parent_name);
-#endif
return err ? EXIT_FAILURE : EXIT_SUCCESS;
}