mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 11:00:01 +08:00
ELF visibility patch from Martin Loewis
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2000-01-03 Martin v. Loewis <loewis@informatik.hu-berlin.de>
|
||||||
|
|
||||||
|
* config/obj-elf.c (elf_pseudo_table): Define visibility pseudos.
|
||||||
|
(obj_elf_visibility): New function.
|
||||||
|
|
||||||
|
* doc/as.texinfo (Visibility): New node: document visibility
|
||||||
|
pseudo ops.
|
||||||
|
|
||||||
1999-12-27 Alan Modra <alan@spri.levels.unisa.edu.au>
|
1999-12-27 Alan Modra <alan@spri.levels.unisa.edu.au>
|
||||||
|
|
||||||
* config/tc-i386.c (MATCH): Relax JumpAbsolute check. Emit a
|
* config/tc-i386.c (MATCH): Relax JumpAbsolute check. Emit a
|
||||||
|
@ -65,6 +65,7 @@ static void obj_elf_type PARAMS ((int));
|
|||||||
static void obj_elf_ident PARAMS ((int));
|
static void obj_elf_ident PARAMS ((int));
|
||||||
static void obj_elf_weak PARAMS ((int));
|
static void obj_elf_weak PARAMS ((int));
|
||||||
static void obj_elf_local PARAMS ((int));
|
static void obj_elf_local PARAMS ((int));
|
||||||
|
static void obj_elf_visibility PARAMS ((int));
|
||||||
static void obj_elf_symver PARAMS ((int));
|
static void obj_elf_symver PARAMS ((int));
|
||||||
static void obj_elf_vtable_inherit PARAMS ((int));
|
static void obj_elf_vtable_inherit PARAMS ((int));
|
||||||
static void obj_elf_vtable_entry PARAMS ((int));
|
static void obj_elf_vtable_entry PARAMS ((int));
|
||||||
@ -89,6 +90,11 @@ static const pseudo_typeS elf_pseudo_table[] =
|
|||||||
{"version", obj_elf_version, 0},
|
{"version", obj_elf_version, 0},
|
||||||
{"weak", obj_elf_weak, 0},
|
{"weak", obj_elf_weak, 0},
|
||||||
|
|
||||||
|
/* These define symbol visibility. */
|
||||||
|
{"internal", obj_elf_visibility, STV_INTERNAL},
|
||||||
|
{"hidden", obj_elf_visibility, STV_HIDDEN},
|
||||||
|
{"protected", obj_elf_visibility, STV_PROTECTED},
|
||||||
|
|
||||||
/* These are used for stabs-in-elf configurations. */
|
/* These are used for stabs-in-elf configurations. */
|
||||||
{"line", obj_elf_line, 0},
|
{"line", obj_elf_line, 0},
|
||||||
|
|
||||||
@ -474,6 +480,48 @@ obj_elf_weak (ignore)
|
|||||||
demand_empty_rest_of_line ();
|
demand_empty_rest_of_line ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
obj_elf_visibility (visibility)
|
||||||
|
int visibility;
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
int c;
|
||||||
|
symbolS *symbolP;
|
||||||
|
asymbol *bfdsym;
|
||||||
|
elf_symbol_type *elfsym;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
name = input_line_pointer;
|
||||||
|
c = get_symbol_end ();
|
||||||
|
symbolP = symbol_find_or_make (name);
|
||||||
|
*input_line_pointer = c;
|
||||||
|
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
|
||||||
|
bfdsym = symbol_get_bfdsym (symbolP);
|
||||||
|
elfsym = elf_symbol_from (bfd_asymbol_bfd (bfdsym), bfdsym);
|
||||||
|
|
||||||
|
assert (elfsym);
|
||||||
|
|
||||||
|
elfsym->internal_elf_sym.st_other = visibility;
|
||||||
|
|
||||||
|
if (c == ',')
|
||||||
|
{
|
||||||
|
input_line_pointer ++;
|
||||||
|
|
||||||
|
SKIP_WHITESPACE ();
|
||||||
|
|
||||||
|
if (*input_line_pointer == '\n')
|
||||||
|
c = '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (c == ',');
|
||||||
|
|
||||||
|
demand_empty_rest_of_line ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static segT previous_section;
|
static segT previous_section;
|
||||||
static int previous_subsection;
|
static int previous_subsection;
|
||||||
|
|
||||||
|
@ -3195,6 +3195,9 @@ Some machine configurations provide additional directives.
|
|||||||
* Type:: @code{.type @var{int}}
|
* Type:: @code{.type @var{int}}
|
||||||
* Val:: @code{.val @var{addr}}
|
* Val:: @code{.val @var{addr}}
|
||||||
@end ifset
|
@end ifset
|
||||||
|
@ifset ELF
|
||||||
|
* Visibility:: @code{.internal @var{name}, .hidden @var{name}, .protected @var{name}}
|
||||||
|
@end ifset
|
||||||
|
|
||||||
* Uleb128:: @code{.uleb128 @var{expressions}}
|
* Uleb128:: @code{.uleb128 @var{expressions}}
|
||||||
* Word:: @code{.word @var{expressions}}
|
* Word:: @code{.word @var{expressions}}
|
||||||
@ -4756,6 +4759,40 @@ configured for @code{b.out}, it accepts this directive but ignores it.
|
|||||||
compact, variable length representation of numbers used by the DWARF
|
compact, variable length representation of numbers used by the DWARF
|
||||||
symbolic debugging format. @xref{Sleb128,@code{.sleb128}}.
|
symbolic debugging format. @xref{Sleb128,@code{.sleb128}}.
|
||||||
|
|
||||||
|
@ifset ELF
|
||||||
|
@node Visibility
|
||||||
|
@section @code{.internal}, @code{.hidden}, @code{.protected}
|
||||||
|
@cindex @code{internal} directive
|
||||||
|
@cindex @code{hidden} directive
|
||||||
|
@cindex @code{protected} directive
|
||||||
|
@cindex symbol visibility
|
||||||
|
|
||||||
|
These directives can be used to set the visibility of a specified symbol. By
|
||||||
|
default a symbol's visibility is set by its binding (local, global or weak),
|
||||||
|
but these directives can be used to override that.
|
||||||
|
|
||||||
|
A visibility of @code{protected} means that any references to the symbol from
|
||||||
|
within the component that defines the symbol must be resolved to the definition
|
||||||
|
in that component, even if a definition in another component would normally
|
||||||
|
preempt this.
|
||||||
|
|
||||||
|
A visibility of @code{hidden} means that the symbol is not visible to other
|
||||||
|
components. Such a symbol is always considered to be protected as well.
|
||||||
|
|
||||||
|
A visibility of @code{internal} is the same as a visibility of @code{hidden},
|
||||||
|
except that some extra, processor specific processing must also be performed
|
||||||
|
upon the symbol.
|
||||||
|
|
||||||
|
For ELF targets, the directives are used like this:
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
.internal @var{name}
|
||||||
|
.hidden @var{name}
|
||||||
|
.protected @var{name}
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
@end ifset
|
||||||
|
|
||||||
@node Word
|
@node Word
|
||||||
@section @code{.word @var{expressions}}
|
@section @code{.word @var{expressions}}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user