/* Generic symbol-table support for the BFD library.
- Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2012
- Free Software Foundation, Inc.
+ Copyright (C) 1990-2016 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
.#define BSF_EXPORT BSF_GLOBAL {* No real difference. *}
.
. {* A normal C symbol would be one of:
-. <<BSF_LOCAL>>, <<BSF_COMMON>>, <<BSF_UNDEFINED>> or
-. <<BSF_GLOBAL>>. *}
+. <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>. *}
.
. {* The symbol is a debugging record. The value has an arbitrary
. meaning, unless BSF_DEBUGGING_RELOC is also set. *}
.
. {* Used by the linker. *}
.#define BSF_KEEP (1 << 5)
-.#define BSF_KEEP_G (1 << 6)
+.
+. {* An ELF common symbol. *}
+.#define BSF_ELF_COMMON (1 << 6)
.
. {* A weak global symbol, overridable without warnings by
. a regular global symbol of the same name. *}
*minisymsp = syms;
*sizep = sizeof (asymbol *);
+
return symcount;
error_return:
return FALSE;
}
- val = bfd_get_32 (abfd, info->stabs + r->address);
+ val = bfd_get_32 (abfd, info->stabs
+ + r->address * bfd_octets_per_byte (abfd));
val &= r->howto->src_mask;
sym = *r->sym_ptr_ptr;
val += sym->value + sym->section->vma + r->addend;
- bfd_put_32 (abfd, (bfd_vma) val, info->stabs + r->address);
+ bfd_put_32 (abfd, (bfd_vma) val, info->stabs
+ + r->address * bfd_octets_per_byte (abfd));
}
}
{
nul_fun = stab;
nul_str = str;
+ if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
+ file_name = NULL;
if (stab + STABSIZE + TYPEOFF < info->stabs + stabsize
&& *(stab + STABSIZE + TYPEOFF) == (bfd_byte) N_SO)
{
directory_name = file_name;
file_name = ((char *) str
+ bfd_get_32 (abfd, stab + STRDXOFF));
+ if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
+ file_name = NULL;
}
}
break;
case N_SOL:
/* The name of an include file. */
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
+ /* PR 17512: file: 0c680a1f. */
+ /* PR 17512: file: 5da8aec4. */
+ if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
+ file_name = NULL;
break;
case N_FUN:
function_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
if (function_name == (char *) str)
continue;
+ if (function_name >= (char *) info->strs + strsize)
+ function_name = NULL;
nul_fun = NULL;
info->indextable[i].val = bfd_get_32 (abfd, stab + VALOFF);
if (val <= offset)
{
file_name = (char *) str + bfd_get_32 (abfd, stab + STRDXOFF);
+ if (file_name >= (char *) info->strs + strsize || file_name < (char *) str)
+ file_name = NULL;
*pline = 0;
}
break;