* symbols.c: Replace CONST by const throughout.
(symbol_find_exact): Split out from.. (symbol_find_base): ..here. * symbols.h: Replace CONST by const throughout. (symbol_find_exact): Declare. * config/obj-elf.c: #include "struc-symbol.h". (elf_frob_file): If group name matches an exported symbol, use that symbol for the signature and ".group" as the section name.
This commit is contained in:
parent
1126897b36
commit
9758f3fc77
4 changed files with 61 additions and 25 deletions
|
@ -1,3 +1,14 @@
|
|||
2002-06-07 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* symbols.c: Replace CONST by const throughout.
|
||||
(symbol_find_exact): Split out from..
|
||||
(symbol_find_base): ..here.
|
||||
* symbols.h: Replace CONST by const throughout.
|
||||
(symbol_find_exact): Declare.
|
||||
* config/obj-elf.c: #include "struc-symbol.h".
|
||||
(elf_frob_file): If group name matches an exported symbol, use that
|
||||
symbol for the signature and ".group" as the section name.
|
||||
|
||||
Thu Jun 6 17:42:12 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
* config/tc-sh.c (parse_at): @(symbol,pc) is A_DISP_PC again,
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "safe-ctype.h"
|
||||
#include "subsegs.h"
|
||||
#include "obstack.h"
|
||||
#include "struc-symbol.h"
|
||||
|
||||
#ifndef ECOFF_DEBUGGING
|
||||
#define ECOFF_DEBUGGING 0
|
||||
|
@ -2024,8 +2025,11 @@ elf_frob_file ()
|
|||
for (i = 0; i < list.num_group; i++)
|
||||
{
|
||||
const char *group_name = elf_group_name (list.head[i]);
|
||||
const char *sec_name;
|
||||
asection *s;
|
||||
flagword flags;
|
||||
struct symbol *sy;
|
||||
int has_sym;
|
||||
|
||||
flags = SEC_READONLY | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_GROUP;
|
||||
for (s = list.head[i]; s != NULL; s = elf_next_in_group (s))
|
||||
|
@ -2040,7 +2044,18 @@ elf_frob_file ()
|
|||
}
|
||||
}
|
||||
|
||||
s = subseg_force_new (group_name, 0);
|
||||
sec_name = group_name;
|
||||
sy = symbol_find_exact (group_name);
|
||||
has_sym = 0;
|
||||
if (sy != NULL
|
||||
&& (sy == symbol_lastP
|
||||
|| (sy->sy_next != NULL
|
||||
&& sy->sy_next->sy_previous == sy)))
|
||||
{
|
||||
has_sym = 1;
|
||||
sec_name = ".group";
|
||||
}
|
||||
s = subseg_force_new (sec_name, 0);
|
||||
if (s == NULL
|
||||
|| !bfd_set_section_flags (stdoutput, s, flags)
|
||||
|| !bfd_set_section_alignment (stdoutput, s, 2))
|
||||
|
@ -2051,6 +2066,8 @@ elf_frob_file ()
|
|||
|
||||
/* Pass a pointer to the first section in this group. */
|
||||
elf_next_in_group (s) = list.head[i];
|
||||
if (has_sym)
|
||||
elf_group_id (s) = sy->bsym;
|
||||
|
||||
s->_raw_size = 4 * (list.elt_count[i] + 1);
|
||||
s->contents = frag_more (s->_raw_size);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* symbols.c -symbol table-
|
||||
Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001
|
||||
1999, 2000, 2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
@ -569,7 +569,7 @@ symbol_find_or_make (name)
|
|||
|
||||
symbolS *
|
||||
symbol_make (name)
|
||||
CONST char *name;
|
||||
const char *name;
|
||||
{
|
||||
symbolS *symbolP;
|
||||
|
||||
|
@ -589,7 +589,7 @@ symbol_make (name)
|
|||
|
||||
symbolS *
|
||||
symbol_find (name)
|
||||
CONST char *name;
|
||||
const char *name;
|
||||
{
|
||||
#ifdef STRIP_UNDERSCORE
|
||||
return (symbol_find_base (name, 1));
|
||||
|
@ -598,9 +598,26 @@ symbol_find (name)
|
|||
#endif /* STRIP_UNDERSCORE */
|
||||
}
|
||||
|
||||
symbolS *
|
||||
symbol_find_exact (name)
|
||||
const char *name;
|
||||
{
|
||||
#ifdef BFD_ASSEMBLER
|
||||
{
|
||||
struct local_symbol *locsym;
|
||||
|
||||
locsym = (struct local_symbol *) hash_find (local_hash, name);
|
||||
if (locsym != NULL)
|
||||
return (symbolS *) locsym;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ((symbolS *) hash_find (sy_hash, name));
|
||||
}
|
||||
|
||||
symbolS *
|
||||
symbol_find_base (name, strip_underscore)
|
||||
CONST char *name;
|
||||
const char *name;
|
||||
int strip_underscore;
|
||||
{
|
||||
if (strip_underscore && *name == '_')
|
||||
|
@ -633,17 +650,7 @@ symbol_find_base (name, strip_underscore)
|
|||
*copy = '\0';
|
||||
}
|
||||
|
||||
#ifdef BFD_ASSEMBLER
|
||||
{
|
||||
struct local_symbol *locsym;
|
||||
|
||||
locsym = (struct local_symbol *) hash_find (local_hash, name);
|
||||
if (locsym != NULL)
|
||||
return (symbolS *) locsym;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ((symbolS *) hash_find (sy_hash, name));
|
||||
return symbol_find_exact (name);
|
||||
}
|
||||
|
||||
/* Once upon a time, symbols were kept in a singly linked list. At
|
||||
|
@ -1816,7 +1823,7 @@ S_IS_STABD (s)
|
|||
return S_GET_NAME (s) == 0;
|
||||
}
|
||||
|
||||
CONST char *
|
||||
const char *
|
||||
S_GET_NAME (s)
|
||||
symbolS *s;
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* symbols.h -
|
||||
Copyright 1987, 1990, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
Copyright 1987, 1990, 1992, 1993, 1994, 1995, 1997, 1999, 2000, 2001,
|
||||
2002 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GAS, the GNU Assembler.
|
||||
|
||||
|
@ -48,13 +48,14 @@ extern int symbol_table_frozen;
|
|||
extern int symbols_case_sensitive;
|
||||
|
||||
char *decode_local_label_name PARAMS ((char *s));
|
||||
symbolS *symbol_find PARAMS ((CONST char *name));
|
||||
symbolS *symbol_find_base PARAMS ((CONST char *name, int strip_underscore));
|
||||
symbolS *symbol_find PARAMS ((const char *name));
|
||||
symbolS *symbol_find_exact PARAMS ((const char *name));
|
||||
symbolS *symbol_find_base PARAMS ((const char *name, int strip_underscore));
|
||||
symbolS *symbol_find_or_make PARAMS ((const char *name));
|
||||
symbolS *symbol_make PARAMS ((CONST char *name));
|
||||
symbolS *symbol_new PARAMS ((CONST char *name, segT segment, valueT value,
|
||||
symbolS *symbol_make PARAMS ((const char *name));
|
||||
symbolS *symbol_new PARAMS ((const char *name, segT segment, valueT value,
|
||||
fragS * frag));
|
||||
symbolS *symbol_create PARAMS ((CONST char *name, segT segment, valueT value,
|
||||
symbolS *symbol_create PARAMS ((const char *name, segT segment, valueT value,
|
||||
fragS * frag));
|
||||
symbolS *colon PARAMS ((const char *sym_name));
|
||||
void local_colon PARAMS ((int n));
|
||||
|
@ -93,7 +94,7 @@ extern int S_IS_DEBUG PARAMS ((symbolS *));
|
|||
extern int S_IS_LOCAL PARAMS ((symbolS *));
|
||||
extern int S_IS_EXTERN PARAMS ((symbolS *));
|
||||
extern int S_IS_STABD PARAMS ((symbolS *));
|
||||
extern CONST char *S_GET_NAME PARAMS ((symbolS *));
|
||||
extern const char *S_GET_NAME PARAMS ((symbolS *));
|
||||
extern segT S_GET_SEGMENT PARAMS ((symbolS *));
|
||||
extern void S_SET_SEGMENT PARAMS ((symbolS *, segT));
|
||||
extern void S_SET_EXTERNAL PARAMS ((symbolS *));
|
||||
|
|
Loading…
Reference in a new issue