mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-10 12:22:20 +08:00
bfd/
2005-08-05 H.J. Lu <hongjiu.lu@intel.com> * bfd.c (bfd_hide_symbol): New. * bfd-in2.h: Regenerated. ld/ 2005-08-05 H.J. Lu <hongjiu.lu@intel.com> * ld.texinfo: Document PROVIDE_HIDDEN. * ldexp.c (exp_fold_tree_1): Hide a provided symbol if asked. (exp_provide): Add and set hidden. * ldexp.h (etree_type): Add hidden to assign. * ldgram.y (PROVIDE_HIDDEN): New. * ldlex.l (PROVIDE_HIDDEN): Likewise. * scripttempl/elf.sc: Use PROVIDE_HIDDEN on array bound symbols.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2005-08-05 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* bfd.c (bfd_hide_symbol): New.
|
||||||
|
* bfd-in2.h: Regenerated.
|
||||||
|
|
||||||
2005-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
2005-08-04 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elf64-x86-64.c (elf64_x86_64_merge_symbol): When mixing a
|
* elf64-x86-64.c (elf64_x86_64_merge_symbol): When mixing a
|
||||||
|
@ -4486,6 +4486,10 @@ void bfd_preserve_restore (bfd *, struct bfd_preserve *);
|
|||||||
|
|
||||||
void bfd_preserve_finish (bfd *, struct bfd_preserve *);
|
void bfd_preserve_finish (bfd *, struct bfd_preserve *);
|
||||||
|
|
||||||
|
void bfd_hide_symbol
|
||||||
|
(bfd *, struct bfd_link_info *,
|
||||||
|
struct bfd_link_hash_entry *, bfd_boolean);
|
||||||
|
|
||||||
/* Extracted from archive.c. */
|
/* Extracted from archive.c. */
|
||||||
symindex bfd_get_next_mapent
|
symindex bfd_get_next_mapent
|
||||||
(bfd *abfd, symindex previous, carsym **sym);
|
(bfd *abfd, symindex previous, carsym **sym);
|
||||||
|
26
bfd/bfd.c
26
bfd/bfd.c
@ -1508,3 +1508,29 @@ bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
|
|||||||
objalloc. */
|
objalloc. */
|
||||||
bfd_hash_table_free (&preserve->section_htab);
|
bfd_hash_table_free (&preserve->section_htab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
bfd_hide_symbol
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
void bfd_hide_symbol (bfd *,
|
||||||
|
struct bfd_link_info *,
|
||||||
|
struct bfd_link_hash_entry *,
|
||||||
|
bfd_boolean);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This function hides a symbol so that it won't be exported.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
bfd_hide_symbol (bfd *abfd,
|
||||||
|
struct bfd_link_info *link_info,
|
||||||
|
struct bfd_link_hash_entry *h,
|
||||||
|
bfd_boolean force_local)
|
||||||
|
{
|
||||||
|
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
|
||||||
|
(get_elf_backend_data (abfd)->elf_backend_hide_symbol)
|
||||||
|
(link_info, (struct elf_link_hash_entry *) h, force_local);
|
||||||
|
}
|
||||||
|
15
ld/ChangeLog
15
ld/ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
2005-08-05 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* ld.texinfo: Document PROVIDE_HIDDEN.
|
||||||
|
|
||||||
|
* ldexp.c (exp_fold_tree_1): Hide a provided symbol if asked.
|
||||||
|
(exp_provide): Add and set hidden.
|
||||||
|
|
||||||
|
* ldexp.h (etree_type): Add hidden to assign.
|
||||||
|
|
||||||
|
* ldgram.y (PROVIDE_HIDDEN): New.
|
||||||
|
* ldlex.l (PROVIDE_HIDDEN): Likewise.
|
||||||
|
|
||||||
|
* scripttempl/elf.sc: Use PROVIDE_HIDDEN on array bound
|
||||||
|
symbols.
|
||||||
|
|
||||||
2005-08-05 Alan Modra <amodra@bigpond.net.au>
|
2005-08-05 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* emulparams/elf_x86_64.sh: Revert last change.
|
* emulparams/elf_x86_64.sh: Revert last change.
|
||||||
|
@ -2779,6 +2779,7 @@ the symbol and place it into the symbol table with a global scope.
|
|||||||
@menu
|
@menu
|
||||||
* Simple Assignments:: Simple Assignments
|
* Simple Assignments:: Simple Assignments
|
||||||
* PROVIDE:: PROVIDE
|
* PROVIDE:: PROVIDE
|
||||||
|
* PROVIDE_HIDDEN:: PROVIDE_HIDDEN
|
||||||
* Source Code Reference:: How to use a linker script defined symbol in source code
|
* Source Code Reference:: How to use a linker script defined symbol in source code
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@ -2872,6 +2873,12 @@ underscore), the linker will silently use the definition in the program.
|
|||||||
If the program references @samp{etext} but does not define it, the
|
If the program references @samp{etext} but does not define it, the
|
||||||
linker will use the definition in the linker script.
|
linker will use the definition in the linker script.
|
||||||
|
|
||||||
|
@node PROVIDE_HIDDEN
|
||||||
|
@subsection PROVIDE_HIDDEN
|
||||||
|
@cindex PROVIDE_HIDDEN
|
||||||
|
Similar to @code{PROVIDE}. For ELF targeted ports, the symbol will be
|
||||||
|
hidden and won't be exported.
|
||||||
|
|
||||||
@node Source Code Reference
|
@node Source Code Reference
|
||||||
@subsection Source Code Reference
|
@subsection Source Code Reference
|
||||||
|
|
||||||
|
@ -740,6 +740,8 @@ exp_fold_tree_1 (etree_type *tree)
|
|||||||
defined by some object. */
|
defined by some object. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (tree->assign.hidden)
|
||||||
|
bfd_hide_symbol (output_bfd, &link_info, h, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
exp_fold_tree_1 (tree->assign.src);
|
exp_fold_tree_1 (tree->assign.src);
|
||||||
@ -884,7 +886,7 @@ exp_assop (int code, const char *dst, etree_type *src)
|
|||||||
/* Handle PROVIDE. */
|
/* Handle PROVIDE. */
|
||||||
|
|
||||||
etree_type *
|
etree_type *
|
||||||
exp_provide (const char *dst, etree_type *src)
|
exp_provide (const char *dst, etree_type *src, bfd_boolean hidden)
|
||||||
{
|
{
|
||||||
etree_type *n;
|
etree_type *n;
|
||||||
|
|
||||||
@ -893,6 +895,7 @@ exp_provide (const char *dst, etree_type *src)
|
|||||||
n->assign.type.node_class = etree_provide;
|
n->assign.type.node_class = etree_provide;
|
||||||
n->assign.src = src;
|
n->assign.src = src;
|
||||||
n->assign.dst = dst;
|
n->assign.dst = dst;
|
||||||
|
n->assign.hidden = hidden;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +63,7 @@ typedef union etree_union {
|
|||||||
node_type type;
|
node_type type;
|
||||||
const char *dst;
|
const char *dst;
|
||||||
union etree_union *src;
|
union etree_union *src;
|
||||||
|
bfd_boolean hidden;
|
||||||
} assign;
|
} assign;
|
||||||
struct {
|
struct {
|
||||||
node_type type;
|
node_type type;
|
||||||
@ -165,7 +166,7 @@ etree_type *exp_nameop
|
|||||||
etree_type *exp_assop
|
etree_type *exp_assop
|
||||||
(int, const char *, etree_type *);
|
(int, const char *, etree_type *);
|
||||||
etree_type *exp_provide
|
etree_type *exp_provide
|
||||||
(const char *, etree_type *);
|
(const char *, etree_type *, bfd_boolean);
|
||||||
etree_type *exp_assert
|
etree_type *exp_assert
|
||||||
(etree_type *, const char *);
|
(etree_type *, const char *);
|
||||||
void exp_print_tree
|
void exp_print_tree
|
||||||
|
@ -142,7 +142,7 @@ static int error_index;
|
|||||||
%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
|
%token STARTUP HLL SYSLIB FLOAT NOFLOAT NOCROSSREFS
|
||||||
%token ORIGIN FILL
|
%token ORIGIN FILL
|
||||||
%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
|
%token LENGTH CREATE_OBJECT_SYMBOLS INPUT GROUP OUTPUT CONSTRUCTORS
|
||||||
%token ALIGNMOD AT SUBALIGN PROVIDE AS_NEEDED
|
%token ALIGNMOD AT SUBALIGN PROVIDE PROVIDE_HIDDEN AS_NEEDED
|
||||||
%type <token> assign_op atype attributes_opt sect_constraint
|
%type <token> assign_op atype attributes_opt sect_constraint
|
||||||
%type <name> filename
|
%type <name> filename
|
||||||
%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
|
%token CHIP LIST SECT ABSOLUTE LOAD NEWLINE ENDWORD ORDER NAMEWORD ASSERT_K
|
||||||
@ -648,7 +648,11 @@ assignment:
|
|||||||
}
|
}
|
||||||
| PROVIDE '(' NAME '=' mustbe_exp ')'
|
| PROVIDE '(' NAME '=' mustbe_exp ')'
|
||||||
{
|
{
|
||||||
lang_add_assignment (exp_provide ($3, $5));
|
lang_add_assignment (exp_provide ($3, $5, FALSE));
|
||||||
|
}
|
||||||
|
| PROVIDE_HIDDEN '(' NAME '=' mustbe_exp ')'
|
||||||
|
{
|
||||||
|
lang_add_assignment (exp_provide ($3, $5, TRUE));
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -313,6 +313,7 @@ V_IDENTIFIER [*?.$_a-zA-Z\[\]\-\!\^\\]([*?.$_a-zA-Z0-9\[\]\-\!\^\\]|::)*
|
|||||||
<EXPRESSION,BOTH,SCRIPT>"AT" { RTOKEN(AT);}
|
<EXPRESSION,BOTH,SCRIPT>"AT" { RTOKEN(AT);}
|
||||||
<EXPRESSION,BOTH,SCRIPT>"SUBALIGN" { RTOKEN(SUBALIGN);}
|
<EXPRESSION,BOTH,SCRIPT>"SUBALIGN" { RTOKEN(SUBALIGN);}
|
||||||
<EXPRESSION,BOTH,SCRIPT>"PROVIDE" { RTOKEN(PROVIDE); }
|
<EXPRESSION,BOTH,SCRIPT>"PROVIDE" { RTOKEN(PROVIDE); }
|
||||||
|
<EXPRESSION,BOTH,SCRIPT>"PROVIDE_HIDDEN" { RTOKEN(PROVIDE_HIDDEN); }
|
||||||
<EXPRESSION,BOTH,SCRIPT>"KEEP" { RTOKEN(KEEP); }
|
<EXPRESSION,BOTH,SCRIPT>"KEEP" { RTOKEN(KEEP); }
|
||||||
<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); }
|
<EXPRESSION,BOTH,SCRIPT>"EXCLUDE_FILE" { RTOKEN(EXCLUDE_FILE); }
|
||||||
<MRI>"#".*\n? { ++ lineno; }
|
<MRI>"#".*\n? { ++ lineno; }
|
||||||
|
@ -379,21 +379,21 @@ cat <<EOF
|
|||||||
|
|
||||||
.preinit_array ${RELOCATING-0} :
|
.preinit_array ${RELOCATING-0} :
|
||||||
{
|
{
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_start = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
|
||||||
KEEP (*(.preinit_array))
|
KEEP (*(.preinit_array))
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_end = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
|
||||||
}
|
}
|
||||||
.init_array ${RELOCATING-0} :
|
.init_array ${RELOCATING-0} :
|
||||||
{
|
{
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_start = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
|
||||||
KEEP (*(.init_array))
|
KEEP (*(.init_array))
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_end = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
|
||||||
}
|
}
|
||||||
.fini_array ${RELOCATING-0} :
|
.fini_array ${RELOCATING-0} :
|
||||||
{
|
{
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_start = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
|
||||||
KEEP (*(.fini_array))
|
KEEP (*(.fini_array))
|
||||||
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_end = .);}}
|
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
|
||||||
}
|
}
|
||||||
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
|
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
|
||||||
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
|
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
|
||||||
|
Reference in New Issue
Block a user