mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-20 15:03:31 +08:00
* ldver.c: Bumped version to 1.96 - new release, resync with the
bfd too #. * ldexp.c, ldlang.c: now build memory shape tree in obstacks rather than with raw malloc, makes it easier to track where memory is going. * ldsym.h, ldsym.c: create obstack for all global symbols too. * ldwrite.c (ldwrite): moved malloc so only used when needed. * sa29200-sc.sh: added support for .lit, data1 and data2 sections.
This commit is contained in:
parent
f7ebd77dba
commit
bfbdc80f0a
12
ld/ChangeLog
12
ld/ChangeLog
@ -1,3 +1,15 @@
|
||||
Mon May 4 16:10:10 1992 Steve Chamberlain (sac@thepub.cygnus.com)
|
||||
|
||||
* ldver.c: Bumped version to 1.96 - new release, resync with the
|
||||
bfd too #.
|
||||
* ldexp.c, ldlang.c: now build memory shape tree in obstacks
|
||||
rather than with raw malloc, makes it easier to track where memory
|
||||
is going.
|
||||
* ldsym.h, ldsym.c: create obstack for all global symbols too.
|
||||
* ldwrite.c (ldwrite): moved malloc so only used when needed.
|
||||
* sa29200-sc.sh: added support for .lit, data1 and data2 sections.
|
||||
|
||||
|
||||
Fri May 1 18:17:52 1992 K. Richard Pixley (rich@cygnus.com)
|
||||
|
||||
* config/sparc.mh: use ../gcc/libgcc.a on check if it exists.
|
||||
|
25
ld/ldexp.c
25
ld/ldexp.c
@ -157,7 +157,7 @@ etree_type *
|
||||
DEFUN(exp_intop,(value),
|
||||
bfd_vma value)
|
||||
{
|
||||
etree_type *new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->value)));
|
||||
etree_type *new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->value)));
|
||||
new->type.node_code = INT;
|
||||
new->value.value = value;
|
||||
new->type.node_class = etree_value;
|
||||
@ -520,7 +520,7 @@ DEFUN(exp_fold_tree,(tree, current_section, allocation_done,
|
||||
}
|
||||
else
|
||||
{
|
||||
def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
def = (asymbol *)bfd_make_empty_symbol(script_file->the_bfd);
|
||||
|
||||
|
||||
@ -589,7 +589,7 @@ DEFUN(exp_binop,(code, lhs, rhs),
|
||||
{
|
||||
return exp_intop(r.value);
|
||||
}
|
||||
new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->binary)));
|
||||
new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->binary)));
|
||||
memcpy((char *)new, (char *)&value, sizeof(new->binary));
|
||||
return new;
|
||||
}
|
||||
@ -613,7 +613,7 @@ DEFUN(exp_trinop,(code, cond, lhs, rhs),
|
||||
if (r.valid) {
|
||||
return exp_intop(r.value);
|
||||
}
|
||||
new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->trinary)));
|
||||
new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->trinary)));
|
||||
memcpy((char *)new,(char *) &value, sizeof(new->trinary));
|
||||
return new;
|
||||
}
|
||||
@ -635,7 +635,7 @@ DEFUN(exp_unop,(code, child),
|
||||
if (r.valid) {
|
||||
return exp_intop(r.value);
|
||||
}
|
||||
new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->unary)));
|
||||
new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->unary)));
|
||||
memcpy((char *)new, (char *)&value, sizeof(new->unary));
|
||||
return new;
|
||||
}
|
||||
@ -648,7 +648,6 @@ DEFUN(exp_nameop,(code, name),
|
||||
{
|
||||
|
||||
etree_type value, *new;
|
||||
|
||||
etree_value_type r;
|
||||
value.name.type.node_code = code;
|
||||
value.name.name = name;
|
||||
@ -661,7 +660,7 @@ DEFUN(exp_nameop,(code, name),
|
||||
if (r.valid) {
|
||||
return exp_intop(r.value);
|
||||
}
|
||||
new = (etree_type *)ldmalloc((bfd_size_type)(sizeof(new->name)));
|
||||
new = (etree_type *)stat_alloc((bfd_size_type)(sizeof(new->name)));
|
||||
memcpy((char *)new, (char *)&value, sizeof(new->name));
|
||||
return new;
|
||||
|
||||
@ -690,7 +689,7 @@ DEFUN(exp_assop,(code, dst, src),
|
||||
return exp_intop(result);
|
||||
}
|
||||
#endif
|
||||
new = (etree_type*)ldmalloc((bfd_size_type)(sizeof(new->assign)));
|
||||
new = (etree_type*)stat_alloc((bfd_size_type)(sizeof(new->assign)));
|
||||
memcpy((char *)new, (char *)&value, sizeof(new->assign));
|
||||
return new;
|
||||
}
|
||||
@ -719,9 +718,11 @@ DEFUN(exp_print_tree,(tree),
|
||||
exp_print_tree(tree->assign.src);
|
||||
break;
|
||||
case etree_binary:
|
||||
fprintf(config.map_file,"(");
|
||||
exp_print_tree(tree->binary.lhs);
|
||||
exp_print_token(tree->type.node_code);
|
||||
exp_print_tree(tree->binary.rhs);
|
||||
fprintf(config.map_file,")");
|
||||
break;
|
||||
case etree_trinary:
|
||||
exp_print_tree(tree->trinary.cond);
|
||||
@ -732,9 +733,14 @@ DEFUN(exp_print_tree,(tree),
|
||||
break;
|
||||
case etree_unary:
|
||||
exp_print_token(tree->unary.type.node_code);
|
||||
if (tree->unary.child)
|
||||
{
|
||||
|
||||
fprintf(config.map_file,"(");
|
||||
exp_print_tree(tree->unary.child);
|
||||
fprintf(config.map_file,")");
|
||||
}
|
||||
|
||||
break;
|
||||
case etree_undef:
|
||||
fprintf(config.map_file,"????????");
|
||||
@ -745,6 +751,7 @@ DEFUN(exp_print_tree,(tree),
|
||||
}
|
||||
else {
|
||||
exp_print_token(tree->type.node_code);
|
||||
if (tree->name.name)
|
||||
fprintf(config.map_file,"(%s)", tree->name.name);
|
||||
}
|
||||
break;
|
||||
@ -768,7 +775,7 @@ DEFUN(exp_get_vma,(tree, def, name, allocation_done),
|
||||
|
||||
if (tree != (etree_type *)NULL) {
|
||||
r = exp_fold_tree_no_dot(tree,
|
||||
(lang_output_section_statement_type *)NULL,
|
||||
abs_output_section,
|
||||
allocation_done);
|
||||
if (r.valid == false && name) {
|
||||
einfo("%F%S Nonconstant expression for %s\n",name);
|
||||
|
32
ld/ldlang.c
32
ld/ldlang.c
@ -42,6 +42,9 @@ PROTO(static void, print_statement,(lang_statement_union_type *,
|
||||
|
||||
|
||||
/* LOCALS */
|
||||
static struct obstack stat_obstack;
|
||||
#define obstack_chunk_alloc ldmalloc
|
||||
#define obstack_chunk_free free
|
||||
static CONST char *startup_file;
|
||||
static lang_statement_list_type input_file_chain;
|
||||
|
||||
@ -109,6 +112,13 @@ extern boolean write_map;
|
||||
|
||||
void EXFUN(lang_add_data,( int type , union etree_union *exp));
|
||||
|
||||
|
||||
PTR
|
||||
DEFUN(stat_alloc,(size),
|
||||
size_t size)
|
||||
{
|
||||
return obstack_alloc(&stat_obstack, size);
|
||||
}
|
||||
static void
|
||||
DEFUN(print_size,(value),
|
||||
size_t value)
|
||||
@ -212,7 +222,7 @@ DEFUN(new_statement,(type, size, list),
|
||||
lang_statement_list_type *list)
|
||||
{
|
||||
lang_statement_union_type *new = (lang_statement_union_type *)
|
||||
ldmalloc(size);
|
||||
stat_alloc(size);
|
||||
new->header.type = type;
|
||||
new->header.next = (lang_statement_union_type *)NULL;
|
||||
lang_statement_append(list, new, &new->header.next);
|
||||
@ -330,8 +340,10 @@ DEFUN(lang_add_input_file,(name, file_type, target),
|
||||
void
|
||||
DEFUN_VOID(lang_init)
|
||||
{
|
||||
obstack_begin(&stat_obstack, 1000);
|
||||
|
||||
stat_ptr= &statement_list;
|
||||
|
||||
lang_list_init(stat_ptr);
|
||||
|
||||
lang_list_init(&input_file_chain);
|
||||
@ -340,9 +352,9 @@ DEFUN_VOID(lang_init)
|
||||
first_file = lang_add_input_file((char *)NULL,
|
||||
lang_input_file_is_marker_enum,
|
||||
(char *)NULL);
|
||||
abs_output_section = lang_output_section_statement_lookup(BFD_ABS_SECTION_NAME);
|
||||
abs_output_section = lang_output_section_statement_lookup(BFD_ABS_SECTION_NAME);
|
||||
|
||||
abs_output_section->bfd_section = &bfd_abs_section;
|
||||
abs_output_section->bfd_section = &bfd_abs_section;
|
||||
|
||||
}
|
||||
|
||||
@ -382,7 +394,7 @@ DEFUN(lang_memory_region_lookup,(name),
|
||||
}
|
||||
{
|
||||
lang_memory_region_type *new =
|
||||
(lang_memory_region_type *)ldmalloc((bfd_size_type)(sizeof(lang_memory_region_type)));
|
||||
(lang_memory_region_type *)stat_alloc((bfd_size_type)(sizeof(lang_memory_region_type)));
|
||||
new->name = buystring(name);
|
||||
new->next = (lang_memory_region_type *)NULL;
|
||||
|
||||
@ -503,7 +515,7 @@ DEFUN(init_os,(s),
|
||||
/* asection *section = bfd_get_section_by_name(output_bfd, s->name);*/
|
||||
section_userdata_type *new =
|
||||
(section_userdata_type *)
|
||||
ldmalloc((bfd_size_type)(sizeof(section_userdata_type)));
|
||||
stat_alloc((bfd_size_type)(sizeof(section_userdata_type)));
|
||||
|
||||
s->bfd_section = bfd_get_section_by_name(output_bfd, s->name);
|
||||
if (s->bfd_section == (asection *)NULL)
|
||||
@ -799,7 +811,7 @@ DEFUN(ldlang_add_undef,(name),
|
||||
{
|
||||
ldlang_undef_chain_list_type *new =
|
||||
(ldlang_undef_chain_list_type
|
||||
*)ldmalloc((bfd_size_type)(sizeof(ldlang_undef_chain_list_type)));
|
||||
*)stat_alloc((bfd_size_type)(sizeof(ldlang_undef_chain_list_type)));
|
||||
|
||||
new->next = ldlang_undef_chain_list_head;
|
||||
ldlang_undef_chain_list_head = new;
|
||||
@ -816,7 +828,7 @@ DEFUN_VOID(lang_place_undefineds)
|
||||
ldlang_undef_chain_list_type *ptr = ldlang_undef_chain_list_head;
|
||||
while (ptr != (ldlang_undef_chain_list_type*)NULL) {
|
||||
asymbol *def;
|
||||
asymbol **def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
asymbol **def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
def = (asymbol *)bfd_make_empty_symbol(script_file->the_bfd);
|
||||
*def_ptr= def;
|
||||
def->name = ptr->name;
|
||||
@ -1272,7 +1284,7 @@ DEFUN(insert_pad,(this_ptr, fill, power, output_section_statement, dot),
|
||||
{
|
||||
lang_statement_union_type *new =
|
||||
(lang_statement_union_type *)
|
||||
ldmalloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
|
||||
stat_alloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
|
||||
/* Link into existing chain */
|
||||
new->header.next = *this_ptr;
|
||||
*this_ptr = new;
|
||||
@ -1525,7 +1537,7 @@ DEFUN(lang_size_sections,(s, output_section_statement, prev, fill,
|
||||
{
|
||||
lang_statement_union_type *new =
|
||||
(lang_statement_union_type *)
|
||||
ldmalloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
|
||||
stat_alloc((bfd_size_type)(sizeof(lang_padding_statement_type)));
|
||||
/* Link into existing chain */
|
||||
new->header.next = *prev;
|
||||
*prev = new;
|
||||
@ -2102,7 +2114,7 @@ DEFUN(create_symbol,(name, flags, section),
|
||||
asection *section)
|
||||
{
|
||||
extern lang_input_statement_type *script_file;
|
||||
asymbol **def_ptr = (asymbol **)ldmalloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
asymbol **def_ptr = (asymbol **)stat_alloc((bfd_size_type)(sizeof(asymbol **)));
|
||||
/* Add this definition to script file */
|
||||
asymbol *def = (asymbol *)bfd_make_empty_symbol(script_file->the_bfd);
|
||||
def->name = buystring(name);
|
||||
|
@ -120,6 +120,8 @@ typedef struct {
|
||||
typedef struct {
|
||||
lang_statement_header_type header;
|
||||
fill_type fill;
|
||||
int size;
|
||||
asection *output_section;
|
||||
} lang_fill_statement_type;
|
||||
|
||||
typedef struct {
|
||||
@ -339,3 +341,4 @@ void EXFUN(lang_add_data,(int type, union etree_union *));
|
||||
|
||||
void EXFUN(lang_for_each_statement,(void (*func)()));
|
||||
|
||||
PTR EXFUN(stat_alloc,(size_t size));
|
||||
|
15
ld/ldmain.c
15
ld/ldmain.c
@ -130,6 +130,7 @@ main (argc, argv)
|
||||
output_filename = "a.out";
|
||||
|
||||
bfd_init();
|
||||
|
||||
#ifdef GNU960
|
||||
{
|
||||
int i;
|
||||
@ -158,7 +159,7 @@ main (argc, argv)
|
||||
command_line.force_common_definition = false;
|
||||
|
||||
init_bfd_error_vector();
|
||||
|
||||
ldsym_init();
|
||||
ldfile_add_arch("");
|
||||
ldfile_add_library_path("./");
|
||||
config.make_executable = true;
|
||||
@ -221,14 +222,14 @@ main (argc, argv)
|
||||
symbols, and possibly multiple definitions */
|
||||
|
||||
|
||||
if (config.text_read_only) {
|
||||
/* Look for a text section and mark the readonly attribute in it */
|
||||
asection *found = bfd_get_section_by_name(output_bfd, ".text");
|
||||
if (found == (asection *)NULL) {
|
||||
einfo("%P%F: text marked read only, but no text section present");
|
||||
}
|
||||
if (config.text_read_only)
|
||||
{
|
||||
/* Look for a text section and mark the readonly attribute in it */
|
||||
asection *found = bfd_get_section_by_name(output_bfd, ".text");
|
||||
if (found != (asection *)NULL) {
|
||||
found->flags |= SEC_READONLY;
|
||||
}
|
||||
}
|
||||
|
||||
if (config.relocateable_output) {
|
||||
output_bfd->flags &= ~EXEC_P;
|
||||
|
225
ld/ldsym.c
225
ld/ldsym.c
@ -72,6 +72,10 @@ ldsym_type **symbol_tail_ptr = &symbol_head;
|
||||
|
||||
extern ld_config_type config;
|
||||
|
||||
struct obstack global_sym_obstack;
|
||||
#define obstack_chunk_alloc ldmalloc
|
||||
#define obstack_chunk_free free
|
||||
|
||||
/*
|
||||
incremented for each symbol in the ldsym_type table
|
||||
no matter what flavour it is
|
||||
@ -150,11 +154,11 @@ DEFUN(ldsym_get,(key),
|
||||
|
||||
/* Nothing was found; create a new symbol table entry. */
|
||||
|
||||
bp = (ldsym_type *) ldmalloc ((bfd_size_type)(sizeof (ldsym_type)));
|
||||
bp = (ldsym_type *) obstack_alloc (&global_sym_obstack, (bfd_size_type)(sizeof (ldsym_type)));
|
||||
bp->srefs_chain = (asymbol **)NULL;
|
||||
bp->sdefs_chain = (asymbol **)NULL;
|
||||
bp->scoms_chain = (asymbol **)NULL;
|
||||
bp->name = buystring(key);
|
||||
bp->name = obstack_copy(&global_sym_obstack, key, strlen(key)+1);
|
||||
bp->flags = 0;
|
||||
/* Add the entry to the bucket. */
|
||||
|
||||
@ -223,38 +227,36 @@ DEFUN(print_file_stuff,(f),
|
||||
{
|
||||
asection *s;
|
||||
if (true || option_longmap) {
|
||||
for (s = f->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
print_address(s->output_offset);
|
||||
if (s->reloc_done)
|
||||
{
|
||||
fprintf (config.map_file, " %08x 2**%2ud %s\n",
|
||||
(unsigned)bfd_get_section_size_after_reloc(s),
|
||||
s->alignment_power, s->name);
|
||||
}
|
||||
for (s = f->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
print_address(s->output_offset);
|
||||
if (s->reloc_done)
|
||||
{
|
||||
fprintf (config.map_file, " %08x 2**%2ud %s\n",
|
||||
(unsigned)bfd_get_section_size_after_reloc(s),
|
||||
s->alignment_power, s->name);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
fprintf (config.map_file, " %08x 2**%2ud %s\n",
|
||||
(unsigned)bfd_get_section_size_before_reloc(s),
|
||||
s->alignment_power, s->name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf (config.map_file, " %08x 2**%2ud %s\n",
|
||||
(unsigned)bfd_get_section_size_before_reloc(s),
|
||||
s->alignment_power, s->name);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (s = f->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
fprintf(config.map_file, "%s ", s->name);
|
||||
print_address(s->output_offset);
|
||||
fprintf(config.map_file, "(%x)", (unsigned)bfd_get_section_size_after_reloc(s));
|
||||
}
|
||||
fprintf(config.map_file, "hex \n");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (s = f->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
fprintf(config.map_file, "%s ", s->name);
|
||||
print_address(s->output_offset);
|
||||
fprintf(config.map_file, "(%x)", (unsigned)bfd_get_section_size_after_reloc(s));
|
||||
}
|
||||
fprintf(config.map_file, "hex \n");
|
||||
}
|
||||
}
|
||||
fprintf (config.map_file, "\n");
|
||||
}
|
||||
@ -329,90 +331,90 @@ static asymbol **
|
||||
write_file_locals(output_buffer)
|
||||
asymbol **output_buffer;
|
||||
{
|
||||
LANG_FOR_EACH_INPUT_STATEMENT(entry)
|
||||
{
|
||||
/* Run trough the symbols and work out what to do with them */
|
||||
unsigned int i;
|
||||
LANG_FOR_EACH_INPUT_STATEMENT(entry)
|
||||
{
|
||||
/* Run trough the symbols and work out what to do with them */
|
||||
unsigned int i;
|
||||
|
||||
/* Add one for the filename symbol if needed */
|
||||
if (create_object_symbols
|
||||
!= (lang_output_section_statement_type *)NULL) {
|
||||
asection *s;
|
||||
for (s = entry->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
if (s->output_section == create_object_symbols->bfd_section) {
|
||||
/* Add symbol to this section */
|
||||
asymbol * newsym =
|
||||
(asymbol *)bfd_make_empty_symbol(entry->the_bfd);
|
||||
newsym->name = entry->local_sym_name;
|
||||
/* The symbol belongs to the output file's text section */
|
||||
/* Add one for the filename symbol if needed */
|
||||
if (create_object_symbols
|
||||
!= (lang_output_section_statement_type *)NULL) {
|
||||
asection *s;
|
||||
for (s = entry->the_bfd->sections;
|
||||
s != (asection *)NULL;
|
||||
s = s->next) {
|
||||
if (s->output_section == create_object_symbols->bfd_section) {
|
||||
/* Add symbol to this section */
|
||||
asymbol * newsym =
|
||||
(asymbol *)bfd_make_empty_symbol(entry->the_bfd);
|
||||
newsym->name = entry->local_sym_name;
|
||||
/* The symbol belongs to the output file's text section */
|
||||
|
||||
/* The value is the start of this section in the output file*/
|
||||
newsym->value = 0;
|
||||
newsym->flags = BSF_LOCAL;
|
||||
newsym->section = s;
|
||||
*output_buffer++ = newsym;
|
||||
break;
|
||||
}
|
||||
/* The value is the start of this section in the output file*/
|
||||
newsym->value = 0;
|
||||
newsym->flags = BSF_LOCAL;
|
||||
newsym->section = s;
|
||||
*output_buffer++ = newsym;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < entry->symbol_count; i++)
|
||||
{
|
||||
asymbol *p = entry->asymbols[i];
|
||||
/* FIXME, temporary hack, since not all of ld knows about the new abs section convention */
|
||||
}
|
||||
for (i = 0; i < entry->symbol_count; i++)
|
||||
{
|
||||
asymbol *p = entry->asymbols[i];
|
||||
/* FIXME, temporary hack, since not all of ld knows about the new abs section convention */
|
||||
|
||||
if (p->section == 0)
|
||||
p->section = &bfd_abs_section;
|
||||
if (flag_is_global(p->flags) )
|
||||
{
|
||||
/* We are only interested in outputting
|
||||
globals at this stage in special circumstances */
|
||||
if (p->the_bfd == entry->the_bfd
|
||||
&& flag_is_not_at_end(p->flags)) {
|
||||
/* And this is one of them */
|
||||
*(output_buffer++) = p;
|
||||
p->flags |= BSF_KEEP;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (flag_is_ordinary_local(p->flags))
|
||||
{
|
||||
if (discard_locals == DISCARD_ALL)
|
||||
{ }
|
||||
else if (discard_locals == DISCARD_L &&
|
||||
(p->name[0] == lprefix))
|
||||
{ }
|
||||
else if (p->flags == BSF_WARNING)
|
||||
{ }
|
||||
else
|
||||
{ *output_buffer++ = p; }
|
||||
}
|
||||
else if (flag_is_debugger(p->flags))
|
||||
{
|
||||
/* Only keep the debugger symbols if no stripping required */
|
||||
if (strip_symbols == STRIP_NONE) {
|
||||
*output_buffer++ = p;
|
||||
}
|
||||
}
|
||||
else if (p->section == &bfd_und_section)
|
||||
{ /* This must be global */
|
||||
}
|
||||
else if (p->section == &bfd_com_section) {
|
||||
/* And so must this */
|
||||
}
|
||||
else if (p->flags & BSF_CTOR) {
|
||||
/* Throw it away */
|
||||
}
|
||||
else
|
||||
{
|
||||
FAIL();
|
||||
}
|
||||
if (p->section == 0)
|
||||
p->section = &bfd_abs_section;
|
||||
if (flag_is_global(p->flags) )
|
||||
{
|
||||
/* We are only interested in outputting
|
||||
globals at this stage in special circumstances */
|
||||
if (p->the_bfd == entry->the_bfd
|
||||
&& flag_is_not_at_end(p->flags)) {
|
||||
/* And this is one of them */
|
||||
*(output_buffer++) = p;
|
||||
p->flags |= BSF_KEEP;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (flag_is_ordinary_local(p->flags))
|
||||
{
|
||||
if (discard_locals == DISCARD_ALL)
|
||||
{ }
|
||||
else if (discard_locals == DISCARD_L &&
|
||||
(p->name[0] == lprefix))
|
||||
{ }
|
||||
else if (p->flags == BSF_WARNING)
|
||||
{ }
|
||||
else
|
||||
{ *output_buffer++ = p; }
|
||||
}
|
||||
else if (flag_is_debugger(p->flags))
|
||||
{
|
||||
/* Only keep the debugger symbols if no stripping required */
|
||||
if (strip_symbols == STRIP_NONE) {
|
||||
*output_buffer++ = p;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
else if (p->section == &bfd_und_section)
|
||||
{ /* This must be global */
|
||||
}
|
||||
else if (p->section == &bfd_com_section) {
|
||||
/* And so must this */
|
||||
}
|
||||
else if (p->flags & BSF_CTOR) {
|
||||
/* Throw it away */
|
||||
}
|
||||
else
|
||||
{
|
||||
FAIL();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return output_buffer;
|
||||
}
|
||||
|
||||
@ -502,8 +504,15 @@ DEFUN(ldsym_undefined,(sym),
|
||||
CONST char *sym)
|
||||
{
|
||||
ldsym_type *from_table = ldsym_get_soft(sym);
|
||||
if (from_table != (ldsym_type *)NULL) {
|
||||
if (from_table != (ldsym_type *)NULL)
|
||||
{
|
||||
if (from_table->sdefs_chain != (asymbol **)NULL) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
DEFUN_VOID(ldsym_init)
|
||||
{
|
||||
obstack_begin(&global_sym_obstack, 20000);
|
||||
}
|
||||
|
@ -68,3 +68,4 @@ PROTO(boolean, ldsym_undefined, (CONST char *));
|
||||
for (x = symbol_head; x != (ldsym_type *)NULL; x = x->next)
|
||||
|
||||
|
||||
void EXFUN(ldsym_init,(void));
|
||||
|
20
ld/ldver.c
20
ld/ldver.c
@ -27,9 +27,25 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include "sysdep.h"
|
||||
|
||||
#include "ldver.h"
|
||||
#include "ldemul.h"
|
||||
|
||||
void
|
||||
ldversion()
|
||||
DEFUN(ldversion,(noisy),
|
||||
int noisy)
|
||||
|
||||
{
|
||||
fprintf(stdout,"gld version BFD 0.18\n");
|
||||
fprintf(stdout,"ld version 1.96 (with BFD %s)\n", BFD_VERSION);
|
||||
|
||||
if (noisy)
|
||||
{
|
||||
extern ld_emulation_xfer_type *ld_emulations[];
|
||||
ld_emulation_xfer_type **ptr = ld_emulations;
|
||||
|
||||
printf(" Supported emulations:\n");
|
||||
while (*ptr)
|
||||
{
|
||||
printf(" %s \n", (*ptr)->emulation_name);
|
||||
ptr++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,14 +6,24 @@ SECTIONS {
|
||||
.text ${RELOCATING+${TEXT_START_ADDR}} :
|
||||
{
|
||||
*(.text);
|
||||
*(.text1);
|
||||
*(.text2);
|
||||
${RELOCATING+_etext = .};
|
||||
}
|
||||
data . :
|
||||
.lit . :
|
||||
{
|
||||
*(.lit);
|
||||
${RELOCATING+_elit = .};
|
||||
}
|
||||
.data . :
|
||||
{
|
||||
*(.data);
|
||||
*(.data1);
|
||||
*(.data2);
|
||||
${RELOCATING+_edata = .};
|
||||
${CONSTRUCTING+CONSTRUCTORS}
|
||||
}
|
||||
|
||||
.bss . :
|
||||
{
|
||||
*(COMMON)
|
||||
|
97
ld/saber
97
ld/saber
@ -1,17 +1,80 @@
|
||||
load -I. ld__a29k.c
|
||||
load -I. ld__h8300hms.c
|
||||
load -I. ld__lnk960.c
|
||||
load -I. ld__sun3.c
|
||||
load -I. ldlex.c
|
||||
load -I. ld__ebmon29k.c
|
||||
load -I. ld__h8300xray.c
|
||||
load -I. ld__m88kbcs.c
|
||||
load -I. ld__sun4.c
|
||||
load -I. ld__gld960.c
|
||||
load -I. ld__hp300bsd.c
|
||||
load -I. ld__news.c
|
||||
load -I. ld__vanilla.c
|
||||
load -I. ld__go32.c
|
||||
load -I. ld__i386aout.c
|
||||
load -I. ld__st2000.c
|
||||
load -I. ldgram.c
|
||||
suppress 652
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include -DMINIMIZE=1 -DDEFAULT_VECTOR='hp300bsd_vec' -DSELECT_VECS='&hp300bsd_vec' ../../devo/bfd/targets.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__a29k.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__h8300hms.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__lnk960.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__sun3.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ldlex.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__ebmon29k.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__h8300xray.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__m88kbcs.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__sun4.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__gld960.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__hp300bsd.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__news.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__vanilla.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__go32.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__i386aout.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__st2000.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ld__sa29200.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ldgram.c
|
||||
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/cplus-dem.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldexp.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldlang.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldver.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldctor.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldfile.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldmain.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldwarn.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/mri.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldemul.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldmisc.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldwrite.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/relax.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/lderror.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldindr.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/ldsym.c
|
||||
load -I. -I../../devo/ld -I../../devo/include ../../devo/ld/lexsup.c
|
||||
|
||||
|
||||
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/bfd.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/stab-sym.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/archures.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/bout.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cache.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/core.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/aout32.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/demo64.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/opncls.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/reloc.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/seclet.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/init.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/section.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/coff-a29k.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/hp300bsd.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/syms.c
|
||||
|
||||
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/archive.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/libbfd.c
|
||||
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-a29k.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/format.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-i386.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-m68k.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-mips.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-sparc.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-h8300.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-i960.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-m88k.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-rs6000.c
|
||||
load -I../bfd -I../../devo/bfd -I../../devo/include ../../devo/bfd/cpu-vax.c
|
||||
|
||||
load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/obstack.c
|
||||
load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/strtoul.c
|
||||
load -I../libiberty -I../../devo/libiberty -I../../devo/include ../../devo/libiberty/strerror.c
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user