* aoutf1.h (aout_32_sunos4_write_object_contents): Handle a
machine type of 68000. * aoutx.h (NAME(aout,machine_type)): Add new argument unknown. Set *unknown to true if machine type is really unknown, as opposed to M_UNKNOWN for the 68000. (NAME(aout,set_arch_mach)): Change NAME(aout,machine_type) call accordingly. * libaout.h (NAME(aout,machine_type)): Add new argument to prototype.
This commit is contained in:
parent
a5183648b2
commit
9ae74960a8
4 changed files with 66 additions and 89 deletions
|
@ -1,3 +1,15 @@
|
|||
Mon Jun 13 14:20:07 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* aoutf1.h (aout_32_sunos4_write_object_contents): Handle a
|
||||
machine type of 68000.
|
||||
* aoutx.h (NAME(aout,machine_type)): Add new argument unknown.
|
||||
Set *unknown to true if machine type is really unknown, as opposed
|
||||
to M_UNKNOWN for the 68000.
|
||||
(NAME(aout,set_arch_mach)): Change NAME(aout,machine_type) call
|
||||
accordingly.
|
||||
* libaout.h (NAME(aout,machine_type)): Add new argument to
|
||||
prototype.
|
||||
|
||||
Sun Jun 12 20:21:03 1994 Jeff Law (law@snake.cs.utah.edu)
|
||||
|
||||
* som.c (EXEC_AUX_ID): Define based on availablity of HPUX_AUX_ID
|
||||
|
|
117
bfd/aoutf1.h
117
bfd/aoutf1.h
|
@ -63,7 +63,7 @@ The name put into the target vector.
|
|||
/*SUPPRESS558*/
|
||||
/*SUPPRESS529*/
|
||||
|
||||
void
|
||||
static void
|
||||
#if ARCH_SIZE == 64
|
||||
sunos_64_set_arch_mach
|
||||
#else
|
||||
|
@ -170,6 +170,9 @@ aout_32_sunos4_write_object_contents
|
|||
case bfd_arch_m68k:
|
||||
switch (bfd_get_mach (abfd))
|
||||
{
|
||||
case 68000:
|
||||
N_SET_MACHTYPE (*execp, M_UNKNOWN);
|
||||
break;
|
||||
case 68010:
|
||||
N_SET_MACHTYPE (*execp, M_68010);
|
||||
break;
|
||||
|
@ -194,85 +197,10 @@ aout_32_sunos4_write_object_contents
|
|||
|
||||
choose_reloc_size (abfd);
|
||||
|
||||
#if 0
|
||||
/* Some tools want this to be 0, some tools want this to be one.
|
||||
Today, it seems that 0 is the most important setting (PR1927) */
|
||||
N_SET_FLAGS (*execp, 0x0);
|
||||
#else
|
||||
|
||||
/* Fri Jun 11 14:23:31 PDT 1993
|
||||
FIXME
|
||||
Today's optimal setting is 1. This is a pain, since it
|
||||
reopens 1927. This should be readdressed by creating a new
|
||||
target for each each supported, giving perhaps sun3/m68k
|
||||
and sun4/sparc a.out formats.
|
||||
*/
|
||||
N_SET_FLAGS (*execp, 1);
|
||||
#endif
|
||||
N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags);
|
||||
|
||||
N_SET_DYNAMIC (*execp, bfd_get_file_flags (abfd) & DYNAMIC);
|
||||
|
||||
/* At least for SunOS, the dynamic symbols and relocs are embedded
|
||||
in the .text section, and we do not want to write them out with
|
||||
the symbol table. FIXME: This may be right if there is any other
|
||||
form of a.out shared libraries. */
|
||||
if ((bfd_get_file_flags (abfd) & DYNAMIC) != 0
|
||||
&& bfd_get_outsymbols (abfd) != (asymbol **) NULL)
|
||||
{
|
||||
bfd_size_type i;
|
||||
asymbol **sym_ptr_ptr;
|
||||
bfd_size_type count;
|
||||
arelent **rel_ptr_ptr;
|
||||
|
||||
sym_ptr_ptr = bfd_get_outsymbols (abfd);
|
||||
count = bfd_get_symcount (abfd);
|
||||
for (i = 0; i < count; i++, sym_ptr_ptr++)
|
||||
{
|
||||
if (((*sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
|
||||
{
|
||||
/* This assumes that all dynamic symbols follow all
|
||||
non-dynamic symbols, which is what slurp_symbol_table
|
||||
does. */
|
||||
*sym_ptr_ptr = NULL;
|
||||
bfd_get_symcount (abfd) = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (obj_textsec (abfd)->reloc_count > 0)
|
||||
{
|
||||
rel_ptr_ptr = obj_textsec (abfd)->orelocation;
|
||||
count = obj_textsec (abfd)->reloc_count;
|
||||
for (i = 0; i < count; i++, rel_ptr_ptr++)
|
||||
{
|
||||
if (((*(*rel_ptr_ptr)->sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
|
||||
{
|
||||
/* This assumes that all relocs against dynamic
|
||||
symbols follow all relocs against other symbols,
|
||||
which is what slurp_reloc_table does. */
|
||||
*rel_ptr_ptr = NULL;
|
||||
obj_textsec (abfd)->reloc_count = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (obj_datasec (abfd)->reloc_count > 0)
|
||||
{
|
||||
rel_ptr_ptr = obj_datasec (abfd)->orelocation;
|
||||
count = obj_datasec (abfd)->reloc_count;
|
||||
for (i = 0; i < count; i++, rel_ptr_ptr++)
|
||||
{
|
||||
if (((*(*rel_ptr_ptr)->sym_ptr_ptr)->flags & BSF_DYNAMIC) != 0)
|
||||
{
|
||||
*rel_ptr_ptr = NULL;
|
||||
obj_datasec (abfd)->reloc_count = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_HEADERS (abfd, execp);
|
||||
|
||||
return true;
|
||||
|
@ -690,22 +618,45 @@ sunos4_set_sizes (abfd)
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef MY_read_dynamic_symbols
|
||||
#define MY_read_dynamic_symbols 0
|
||||
/* We default to setting the toolversion field to 1, as is required by
|
||||
SunOS. */
|
||||
#ifndef MY_exec_hdr_flags
|
||||
#define MY_exec_hdr_flags 1
|
||||
#endif
|
||||
#ifndef MY_read_dynamic_relocs
|
||||
#define MY_read_dynamic_relocs 0
|
||||
|
||||
#ifndef MY_add_dynamic_symbols
|
||||
#define MY_add_dynamic_symbols 0
|
||||
#endif
|
||||
#ifndef MY_add_one_symbol
|
||||
#define MY_add_one_symbol 0
|
||||
#endif
|
||||
#ifndef MY_link_dynamic_object
|
||||
#define MY_link_dynamic_object 0
|
||||
#endif
|
||||
#ifndef MY_write_dynamic_symbol
|
||||
#define MY_write_dynamic_symbol 0
|
||||
#endif
|
||||
#ifndef MY_check_dynamic_reloc
|
||||
#define MY_check_dynamic_reloc 0
|
||||
#endif
|
||||
#ifndef MY_finish_dynamic_link
|
||||
#define MY_finish_dynamic_link 0
|
||||
#endif
|
||||
|
||||
static CONST struct aout_backend_data sunos4_aout_backend =
|
||||
{
|
||||
0, /* zmagic files are not contiguous */
|
||||
1, /* text includes header */
|
||||
MY_exec_hdr_flags,
|
||||
0, /* default text vma */
|
||||
sunos4_set_sizes,
|
||||
0, /* header is counted in zmagic text */
|
||||
MY_read_dynamic_symbols,
|
||||
MY_read_dynamic_relocs
|
||||
MY_add_dynamic_symbols,
|
||||
MY_add_one_symbol,
|
||||
MY_link_dynamic_object,
|
||||
MY_write_dynamic_symbol,
|
||||
MY_check_dynamic_reloc,
|
||||
MY_finish_dynamic_link
|
||||
};
|
||||
|
||||
#define MY_core_file_failing_command sunos4_core_file_failing_command
|
||||
|
|
21
bfd/aoutx.h
21
bfd/aoutx.h
|
@ -625,13 +625,15 @@ DESCRIPTION
|
|||
*/
|
||||
|
||||
enum machine_type
|
||||
NAME(aout,machine_type) (arch, machine)
|
||||
NAME(aout,machine_type) (arch, machine, unknown)
|
||||
enum bfd_architecture arch;
|
||||
unsigned long machine;
|
||||
boolean *unknown;
|
||||
{
|
||||
enum machine_type arch_flags;
|
||||
|
||||
arch_flags = M_UNKNOWN;
|
||||
*unknown = true;
|
||||
|
||||
switch (arch) {
|
||||
case bfd_arch_sparc:
|
||||
|
@ -641,7 +643,7 @@ NAME(aout,machine_type) (arch, machine)
|
|||
case bfd_arch_m68k:
|
||||
switch (machine) {
|
||||
case 0: arch_flags = M_68010; break;
|
||||
case 68000: arch_flags = M_UNKNOWN; break;
|
||||
case 68000: arch_flags = M_UNKNOWN; *unknown = false; break;
|
||||
case 68010: arch_flags = M_68010; break;
|
||||
case 68020: arch_flags = M_68020; break;
|
||||
default: arch_flags = M_UNKNOWN; break;
|
||||
|
@ -671,6 +673,10 @@ NAME(aout,machine_type) (arch, machine)
|
|||
default:
|
||||
arch_flags = M_UNKNOWN;
|
||||
}
|
||||
|
||||
if (arch_flags != M_UNKNOWN)
|
||||
*unknown = false;
|
||||
|
||||
return arch_flags;
|
||||
}
|
||||
|
||||
|
@ -700,9 +706,14 @@ NAME(aout,set_arch_mach) (abfd, arch, machine)
|
|||
if (! bfd_default_set_arch_mach (abfd, arch, machine))
|
||||
return false;
|
||||
|
||||
if (arch != bfd_arch_unknown &&
|
||||
NAME(aout,machine_type) (arch, machine) == M_UNKNOWN)
|
||||
return false; /* We can't represent this type */
|
||||
if (arch != bfd_arch_unknown)
|
||||
{
|
||||
boolean unknown;
|
||||
|
||||
NAME(aout,machine_type) (arch, machine, &unknown);
|
||||
if (unknown)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Determine the size of a relocation entry */
|
||||
switch (arch) {
|
||||
|
|
|
@ -61,6 +61,8 @@ struct reloc_std_external;
|
|||
struct aout_link_hash_entry
|
||||
{
|
||||
struct bfd_link_hash_entry root;
|
||||
/* Whether this symbol has been written out. */
|
||||
boolean written;
|
||||
/* Symbol index in output file. */
|
||||
int indx;
|
||||
};
|
||||
|
@ -375,7 +377,8 @@ NAME(aout,mkobject) PARAMS ((bfd *abfd));
|
|||
|
||||
enum machine_type
|
||||
NAME(aout,machine_type) PARAMS ((enum bfd_architecture arch,
|
||||
unsigned long machine));
|
||||
unsigned long machine,
|
||||
boolean *unknown));
|
||||
|
||||
boolean
|
||||
NAME(aout,set_arch_mach) PARAMS ((bfd *abfd, enum bfd_architecture arch,
|
||||
|
|
Loading…
Add table
Reference in a new issue