* hp300hpux.c (MY(callback)): Set lma as well as vma.
This commit is contained in:
parent
4f351b156d
commit
1ff0461b4e
@ -1,5 +1,7 @@
|
||||
Mon Nov 27 12:27:46 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* hp300hpux.c (MY(callback)): Set lma as well as vma.
|
||||
|
||||
* configure, config.in: Regenerate with autoconf 2.7.
|
||||
|
||||
* elf32-i386.c (elf_backend_plt_readonly): Set correctly, to 1.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BFD backend for hp-ux 9000/300
|
||||
Copyright (C) 1990, 1991, 1994 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1991, 1994, 1995 Free Software Foundation, Inc.
|
||||
Written by Glenn Engel.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -215,6 +215,10 @@ MY (callback) (abfd)
|
||||
obj_datasec (abfd)->vma = N_DATADDR (*execp);
|
||||
obj_bsssec (abfd)->vma = N_BSSADDR (*execp);
|
||||
|
||||
obj_textsec (abfd)->lma = obj_textsec (abfd)->vma;
|
||||
obj_datasec (abfd)->lma = obj_datasec (abfd)->vma;
|
||||
obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma;
|
||||
|
||||
/* The file offsets of the sections */
|
||||
obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
|
||||
obj_datasec (abfd)->filepos = N_DATOFF (*execp);
|
||||
@ -386,7 +390,28 @@ convert_sym_type (sym_pointer, cache_ptr, abfd)
|
||||
new_type |= N_EXT;
|
||||
|
||||
if (name_type & HP_SECONDARY_SYMBOL)
|
||||
new_type = (new_type & ~N_TYPE) | N_INDR;
|
||||
{
|
||||
switch (new_type)
|
||||
{
|
||||
default:
|
||||
abort ();
|
||||
case N_UNDF | N_EXT:
|
||||
new_type = N_WEAKU;
|
||||
break;
|
||||
case N_ABS | N_EXT:
|
||||
new_type = N_WEAKA;
|
||||
break;
|
||||
case N_TEXT | N_EXT:
|
||||
new_type = N_WEAKT;
|
||||
break;
|
||||
case N_DATA | N_EXT:
|
||||
new_type = N_WEAKD;
|
||||
break;
|
||||
case N_BSS | N_EXT:
|
||||
new_type = N_WEAKB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
cache_ptr->type = new_type;
|
||||
|
||||
@ -496,7 +521,6 @@ MY (slurp_symbol_table) (abfd)
|
||||
char *strings;
|
||||
aout_symbol_type *cached;
|
||||
unsigned num_syms = 0;
|
||||
unsigned num_secondary = 0;
|
||||
|
||||
/* If there's no work to be done, don't do any */
|
||||
if (obj_aout_symbols (abfd) != (aout_symbol_type *) NULL)
|
||||
@ -524,15 +548,13 @@ MY (slurp_symbol_table) (abfd)
|
||||
/* first, march thru the table and figure out how many symbols there are */
|
||||
for (sym_pointer = syms; sym_pointer < sym_end; sym_pointer++, num_syms++)
|
||||
{
|
||||
if (bfd_get_8 (abfd, sym_pointer->e_type) & HP_SECONDARY_SYMBOL)
|
||||
num_secondary++;
|
||||
/* skip over the embedded symbol. */
|
||||
sym_pointer = (struct external_nlist *) (((char *) sym_pointer) +
|
||||
sym_pointer->e_length[0]);
|
||||
}
|
||||
|
||||
/* now that we know the symbol count, update the bfd header */
|
||||
bfd_get_symcount (abfd) = num_syms + num_secondary;
|
||||
bfd_get_symcount (abfd) = num_syms;
|
||||
|
||||
cached = ((aout_symbol_type *)
|
||||
bfd_zalloc (abfd,
|
||||
@ -547,7 +569,6 @@ MY (slurp_symbol_table) (abfd)
|
||||
null terminated strings to hold the symbol names. Make sure any
|
||||
assignment to the strings pointer is done after we're thru using
|
||||
the nlist so we don't overwrite anything important. */
|
||||
num_secondary = 0;
|
||||
|
||||
/* OK, now walk the new symtable, cacheing symbol properties */
|
||||
{
|
||||
@ -590,34 +611,6 @@ MY (slurp_symbol_table) (abfd)
|
||||
else
|
||||
cache_ptr->symbol.name = (char *) NULL;
|
||||
|
||||
/**********************************************************/
|
||||
/* this is a bit of a kludge, but a secondary hp symbol */
|
||||
/* gets translated into a gnu indirect symbol. When this */
|
||||
/* happens, we need to create a "dummy" record to which */
|
||||
/* we can point the indirect symbol to. */
|
||||
/**********************************************************/
|
||||
if ((cache_ptr->type | N_EXT) == (N_INDR | N_EXT))
|
||||
{
|
||||
aout_symbol_type *cache_ptr2 = cached + num_syms + num_secondary;
|
||||
|
||||
num_secondary++;
|
||||
|
||||
/* aoutx.h assumes the "next" value is the indirect sym */
|
||||
/* since we don't want to disturb the order by inserting */
|
||||
/* a new symbol, we tack on the created secondary syms */
|
||||
/* at the end. */
|
||||
cache_ptr->symbol.value = (bfd_vma) (cache_ptr2);
|
||||
*cache_ptr2 = cache_save;
|
||||
cache_ptr2->symbol.name = strings;
|
||||
memcpy (strings, cache_ptr->symbol.name, length);
|
||||
strcpy (strings + length, ":secondry"); /* 9 max chars + null */
|
||||
strings += length + 10;
|
||||
cache_ptr2->type &= ~HP_SECONDARY_SYMBOL; /* clear secondary */
|
||||
convert_sym_type (sym_pointer, cache_ptr2, abfd);
|
||||
if (!translate_from_native_sym_flags (abfd, cache_ptr2))
|
||||
return false;
|
||||
}
|
||||
|
||||
/* skip over the embedded symbol. */
|
||||
sym_pointer = (struct external_nlist *) (((char *) sym_pointer) +
|
||||
length);
|
||||
|
Loading…
x
Reference in New Issue
Block a user