bfd:
* archures.c (bfd_mach_mcf_isa_a_nodiv, bfd_mach_mcf_isa_b_nousp): New. Adjust other variants. (bfd_default_scan): Update. * bfd-in2.h: Rebuilt. * cpu-m68k.c: Adjust. (bfd_m68k_compatible): New. Use it for architectures. * elf32-m68k.c (elf32_m68k_object_p): Adjust. (elf32_m68k_merge_private_bfd_data): Adjust. Correct isa-a/b mismatch. (elf32_m68k_print_private_bfd_data): Adjust. * ieee.c (ieee_write_processor): Adjust. binutils: * readelf.c (get_machine_flags): Adjust. gas: * config/tc-m68k.c (m68k_extensions): Allow 'float' on both m68k and cf. (m68k_ip): <case 'J'> Check we have some control regs. (md_parse_option): Allow raw arch switch. (m68k_init_arch): Better detection of arch/cpu mismatch. Detect whether 68881 or cfloat was meant by -mfloat. (md_show_usage): Adjust extension display. (m68k_elf_final_processing): Adjust. gas/testsuite: * gas/m68k/arch-cpu-1.s: Tweak. * gas/m68k/arch-cpu-1.d: Tweak. include/elf: * m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A, EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B, EF_M68K_ISA_C): Adjust. (EF_M68K_ISA_A_NODIV, EF_M68K_ISA_B_NOUSP): New. (EF_M68K_HW_DIV, EF_M68K_USP): Remove. (EF_M68K_MAC, EF_M68K_EMAC, EF_M68K_FLOAT): Adjust. (EF_M68K_EMAC_B): New. ld/testsuite: * ld-m68k: New tests.
This commit is contained in:
parent
d8d1c398ee
commit
0b2e31dc3b
@ -1,3 +1,17 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* archures.c (bfd_mach_mcf_isa_a_nodiv, bfd_mach_mcf_isa_b_nousp):
|
||||
New. Adjust other variants.
|
||||
(bfd_default_scan): Update.
|
||||
* bfd-in2.h: Rebuilt.
|
||||
* cpu-m68k.c: Adjust.
|
||||
(bfd_m68k_compatible): New. Use it for architectures.
|
||||
* elf32-m68k.c (elf32_m68k_object_p): Adjust.
|
||||
(elf32_m68k_merge_private_bfd_data): Adjust. Correct isa-a/b
|
||||
mismatch.
|
||||
(elf32_m68k_print_private_bfd_data): Adjust.
|
||||
* ieee.c (ieee_write_processor): Adjust.
|
||||
|
||||
2006-03-06 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* dwarf2.c: Formatting.
|
||||
|
@ -80,22 +80,22 @@ DESCRIPTION
|
||||
.#define bfd_mach_m68040 6
|
||||
.#define bfd_mach_m68060 7
|
||||
.#define bfd_mach_cpu32 8
|
||||
.#define bfd_mach_mcf_isa_a 9
|
||||
.#define bfd_mach_mcf_isa_a_div 10
|
||||
.#define bfd_mach_mcf_isa_a_div_mac 11
|
||||
.#define bfd_mach_mcf_isa_a_div_emac 12
|
||||
.#define bfd_mach_mcf_isa_a_nodiv 9
|
||||
.#define bfd_mach_mcf_isa_a 10
|
||||
.#define bfd_mach_mcf_isa_a_mac 11
|
||||
.#define bfd_mach_mcf_isa_a_emac 12
|
||||
.#define bfd_mach_mcf_isa_aplus 13
|
||||
.#define bfd_mach_mcf_isa_aplus_mac 14
|
||||
.#define bfd_mach_mcf_isa_aplus_emac 15
|
||||
.#define bfd_mach_mcf_isa_aplus_usp 16
|
||||
.#define bfd_mach_mcf_isa_aplus_usp_mac 17
|
||||
.#define bfd_mach_mcf_isa_aplus_usp_emac 18
|
||||
.#define bfd_mach_mcf_isa_b_nousp 16
|
||||
.#define bfd_mach_mcf_isa_b_nousp_mac 17
|
||||
.#define bfd_mach_mcf_isa_b_nousp_emac 18
|
||||
.#define bfd_mach_mcf_isa_b 19
|
||||
.#define bfd_mach_mcf_isa_b_mac 20
|
||||
.#define bfd_mach_mcf_isa_b_emac 21
|
||||
.#define bfd_mach_mcf_isa_b_usp_float 22
|
||||
.#define bfd_mach_mcf_isa_b_usp_float_mac 23
|
||||
.#define bfd_mach_mcf_isa_b_usp_float_emac 24
|
||||
.#define bfd_mach_mcf_isa_b_float 22
|
||||
.#define bfd_mach_mcf_isa_b_float_mac 23
|
||||
.#define bfd_mach_mcf_isa_b_float_emac 24
|
||||
. bfd_arch_vax, {* DEC Vax *}
|
||||
. bfd_arch_i960, {* Intel 960 *}
|
||||
. {* The order of the following is important.
|
||||
@ -1016,23 +1016,23 @@ bfd_default_scan (const bfd_arch_info_type *info, const char *string)
|
||||
break;
|
||||
case 5200:
|
||||
arch = bfd_arch_m68k;
|
||||
number = bfd_mach_mcf_isa_a;
|
||||
number = bfd_mach_mcf_isa_a_nodiv;
|
||||
break;
|
||||
case 5206:
|
||||
arch = bfd_arch_m68k;
|
||||
number = bfd_mach_mcf_isa_a_div_mac;
|
||||
number = bfd_mach_mcf_isa_a_mac;
|
||||
break;
|
||||
case 5307:
|
||||
arch = bfd_arch_m68k;
|
||||
number = bfd_mach_mcf_isa_a_div_mac;
|
||||
number = bfd_mach_mcf_isa_a_mac;
|
||||
break;
|
||||
case 5407:
|
||||
arch = bfd_arch_m68k;
|
||||
number = bfd_mach_mcf_isa_b_mac;
|
||||
number = bfd_mach_mcf_isa_b_nousp_mac;
|
||||
break;
|
||||
case 5282:
|
||||
arch = bfd_arch_m68k;
|
||||
number = bfd_mach_mcf_isa_b_usp_float_emac;
|
||||
number = bfd_mach_mcf_isa_aplus_emac;
|
||||
break;
|
||||
|
||||
case 32000:
|
||||
|
@ -1674,22 +1674,22 @@ enum bfd_architecture
|
||||
#define bfd_mach_m68040 6
|
||||
#define bfd_mach_m68060 7
|
||||
#define bfd_mach_cpu32 8
|
||||
#define bfd_mach_mcf_isa_a 9
|
||||
#define bfd_mach_mcf_isa_a_div 10
|
||||
#define bfd_mach_mcf_isa_a_div_mac 11
|
||||
#define bfd_mach_mcf_isa_a_div_emac 12
|
||||
#define bfd_mach_mcf_isa_a_nodiv 9
|
||||
#define bfd_mach_mcf_isa_a 10
|
||||
#define bfd_mach_mcf_isa_a_mac 11
|
||||
#define bfd_mach_mcf_isa_a_emac 12
|
||||
#define bfd_mach_mcf_isa_aplus 13
|
||||
#define bfd_mach_mcf_isa_aplus_mac 14
|
||||
#define bfd_mach_mcf_isa_aplus_emac 15
|
||||
#define bfd_mach_mcf_isa_aplus_usp 16
|
||||
#define bfd_mach_mcf_isa_aplus_usp_mac 17
|
||||
#define bfd_mach_mcf_isa_aplus_usp_emac 18
|
||||
#define bfd_mach_mcf_isa_b_nousp 16
|
||||
#define bfd_mach_mcf_isa_b_nousp_mac 17
|
||||
#define bfd_mach_mcf_isa_b_nousp_emac 18
|
||||
#define bfd_mach_mcf_isa_b 19
|
||||
#define bfd_mach_mcf_isa_b_mac 20
|
||||
#define bfd_mach_mcf_isa_b_emac 21
|
||||
#define bfd_mach_mcf_isa_b_usp_float 22
|
||||
#define bfd_mach_mcf_isa_b_usp_float_mac 23
|
||||
#define bfd_mach_mcf_isa_b_usp_float_emac 24
|
||||
#define bfd_mach_mcf_isa_b_float 22
|
||||
#define bfd_mach_mcf_isa_b_float_mac 23
|
||||
#define bfd_mach_mcf_isa_b_float_emac 24
|
||||
bfd_arch_vax, /* DEC Vax */
|
||||
bfd_arch_i960, /* Intel 960 */
|
||||
/* The order of the following is important.
|
||||
|
@ -24,8 +24,12 @@
|
||||
#include "libbfd.h"
|
||||
#include "opcode/m68k.h"
|
||||
|
||||
static const bfd_arch_info_type *
|
||||
bfd_m68k_compatible (const bfd_arch_info_type *a,
|
||||
const bfd_arch_info_type *b);
|
||||
|
||||
#define N(name, print,d,next) \
|
||||
{ 32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_default_compatible,bfd_default_scan, next, }
|
||||
{ 32, 32, 8, bfd_arch_m68k, name, "m68k",print,2,d,bfd_m68k_compatible,bfd_default_scan, next, }
|
||||
|
||||
static const bfd_arch_info_type arch_info_struct[] =
|
||||
{
|
||||
@ -39,25 +43,25 @@ static const bfd_arch_info_type arch_info_struct[] =
|
||||
N(bfd_mach_cpu32, "m68k:cpu32", FALSE, &arch_info_struct[8]),
|
||||
|
||||
/* Various combinations of CF architecture features */
|
||||
N(bfd_mach_mcf_isa_a, "m68k:isa-a",
|
||||
N(bfd_mach_mcf_isa_a_nodiv, "m68k:isa-a:nodiv",
|
||||
FALSE, &arch_info_struct[9]),
|
||||
N(bfd_mach_mcf_isa_a_div, "m68k:isa-a:div",
|
||||
N(bfd_mach_mcf_isa_a, "m68k:isa-a",
|
||||
FALSE, &arch_info_struct[10]),
|
||||
N(bfd_mach_mcf_isa_a_div_mac, "m68k:isa-a:div:mac",
|
||||
N(bfd_mach_mcf_isa_a_mac, "m68k:isa-a:mac",
|
||||
FALSE, &arch_info_struct[11]),
|
||||
N(bfd_mach_mcf_isa_a_div_emac, "m68k:isa-a:div:emac",
|
||||
N(bfd_mach_mcf_isa_a_emac, "m68k:isa-a:emac",
|
||||
FALSE, &arch_info_struct[12]),
|
||||
N(bfd_mach_mcf_isa_aplus, "m68k:isa-a+",
|
||||
N(bfd_mach_mcf_isa_aplus, "m68k:isa-aplus",
|
||||
FALSE, &arch_info_struct[13]),
|
||||
N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-a+:mac",
|
||||
N(bfd_mach_mcf_isa_aplus_mac, "m68k:isa-aplus:mac",
|
||||
FALSE, &arch_info_struct[14]),
|
||||
N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-a+:emac",
|
||||
N(bfd_mach_mcf_isa_aplus_emac, "m68k:isa-aplus:emac",
|
||||
FALSE, &arch_info_struct[15]),
|
||||
N(bfd_mach_mcf_isa_aplus_usp, "m68k:isa-a+:usp",
|
||||
N(bfd_mach_mcf_isa_b_nousp, "m68k:isa-b:nousp",
|
||||
FALSE, &arch_info_struct[16]),
|
||||
N(bfd_mach_mcf_isa_aplus_usp_mac, "m68k:isa-a+:usp:mac",
|
||||
N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:isa-b:nousp:mac",
|
||||
FALSE, &arch_info_struct[17]),
|
||||
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:isa-a+:usp:emac",
|
||||
N(bfd_mach_mcf_isa_b_nousp_emac, "m68k:isa-b:nousp:emac",
|
||||
FALSE, &arch_info_struct[18]),
|
||||
N(bfd_mach_mcf_isa_b, "m68k:isa-b",
|
||||
FALSE, &arch_info_struct[19]),
|
||||
@ -65,28 +69,26 @@ static const bfd_arch_info_type arch_info_struct[] =
|
||||
FALSE, &arch_info_struct[20]),
|
||||
N(bfd_mach_mcf_isa_b_emac, "m68k:isa-b:emac",
|
||||
FALSE, &arch_info_struct[21]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float, "m68k:isa-b:usp:float",
|
||||
N(bfd_mach_mcf_isa_b_float, "m68k:isa-b:float",
|
||||
FALSE, &arch_info_struct[22]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float_mac, "m68k:isa-b:usp:float:mac",
|
||||
N(bfd_mach_mcf_isa_b_float_mac, "m68k:isa-b:float:mac",
|
||||
FALSE, &arch_info_struct[23]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:isa-b:usp:float:emac",
|
||||
N(bfd_mach_mcf_isa_b_float_emac, "m68k:isa-b:float:emac",
|
||||
FALSE, &arch_info_struct[24]),
|
||||
|
||||
/* Legacy names for CF architectures */
|
||||
N(bfd_mach_mcf_isa_a, "m68k:5200", FALSE, &arch_info_struct[25]),
|
||||
N(bfd_mach_mcf_isa_a_div_mac,"m68k:5206e", FALSE, &arch_info_struct[26]),
|
||||
N(bfd_mach_mcf_isa_a_div_mac, "m68k:5307", FALSE, &arch_info_struct[27]),
|
||||
N(bfd_mach_mcf_isa_b_mac, "m68k:5407", FALSE, &arch_info_struct[28]),
|
||||
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:528x",
|
||||
FALSE, &arch_info_struct[29]),
|
||||
N(bfd_mach_mcf_isa_aplus_usp_emac, "m68k:521x",
|
||||
FALSE, &arch_info_struct[30]),
|
||||
N(bfd_mach_mcf_isa_a_div_emac, "m68k:5249", FALSE, &arch_info_struct[31]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:547x",
|
||||
N(bfd_mach_mcf_isa_a_nodiv, "m68k:5200", FALSE, &arch_info_struct[25]),
|
||||
N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", FALSE, &arch_info_struct[26]),
|
||||
N(bfd_mach_mcf_isa_a_mac, "m68k:5307", FALSE, &arch_info_struct[27]),
|
||||
N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", FALSE, &arch_info_struct[28]),
|
||||
N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", FALSE, &arch_info_struct[29]),
|
||||
N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", FALSE, &arch_info_struct[30]),
|
||||
N(bfd_mach_mcf_isa_a_emac, "m68k:5249", FALSE, &arch_info_struct[31]),
|
||||
N(bfd_mach_mcf_isa_b_float_emac, "m68k:547x",
|
||||
FALSE, &arch_info_struct[32]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:548x",
|
||||
N(bfd_mach_mcf_isa_b_float_emac, "m68k:548x",
|
||||
FALSE, &arch_info_struct[33]),
|
||||
N(bfd_mach_mcf_isa_b_usp_float_emac, "m68k:cfv4e", FALSE, 0),
|
||||
N(bfd_mach_mcf_isa_b_float_emac, "m68k:cfv4e", FALSE, 0),
|
||||
};
|
||||
|
||||
const bfd_arch_info_type bfd_m68k_arch =
|
||||
@ -109,15 +111,15 @@ static const unsigned m68k_arch_features[] =
|
||||
mcfisa_a|mcfhwdiv,
|
||||
mcfisa_a|mcfhwdiv|mcfmac,
|
||||
mcfisa_a|mcfhwdiv|mcfemac,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp|mcfmac,
|
||||
mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp|mcfemac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|mcfmac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|mcfemac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfmac,
|
||||
mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac,
|
||||
@ -181,3 +183,36 @@ int bfd_m68k_features_to_mach (unsigned features)
|
||||
}
|
||||
return superset ? superset : subset;
|
||||
}
|
||||
|
||||
static const bfd_arch_info_type *
|
||||
bfd_m68k_compatible (const bfd_arch_info_type *a,
|
||||
const bfd_arch_info_type *b)
|
||||
{
|
||||
if (a->arch != b->arch)
|
||||
return NULL;
|
||||
|
||||
if (a->bits_per_word != b->bits_per_word)
|
||||
return NULL;
|
||||
|
||||
if (!a->mach)
|
||||
return b;
|
||||
if (!b->mach)
|
||||
return a;
|
||||
|
||||
if (a->mach <= bfd_mach_m68060 && b->mach <= bfd_mach_m68060)
|
||||
/* Merge m68k machine. */
|
||||
return a->mach > b->mach ? a : b;
|
||||
else if (a->mach >= bfd_mach_mcf_isa_a_nodiv
|
||||
&& b->mach >= bfd_mach_mcf_isa_a_nodiv)
|
||||
{
|
||||
/* Merge cf machine. */
|
||||
unsigned features = (bfd_m68k_mach_to_features (a->mach)
|
||||
| bfd_m68k_mach_to_features (b->mach));
|
||||
unsigned machine = bfd_m68k_features_to_mach (features);
|
||||
|
||||
return bfd_lookup_arch (a->arch, machine);
|
||||
}
|
||||
else
|
||||
/* They are incompatible. */
|
||||
return NULL;
|
||||
}
|
||||
|
@ -390,18 +390,22 @@ elf32_m68k_object_p (bfd *abfd)
|
||||
{
|
||||
switch (eflags & EF_M68K_ISA_MASK)
|
||||
{
|
||||
case EF_M68K_ISA_B:
|
||||
features |= mcfisa_b;
|
||||
/* FALLTHROUGH */
|
||||
case EF_M68K_ISA_A_PLUS:
|
||||
features |= mcfisa_aa;
|
||||
/* FALLTHROUGH */
|
||||
case EF_M68K_ISA_A:
|
||||
case EF_M68K_ISA_A_NODIV:
|
||||
features |= mcfisa_a;
|
||||
break;
|
||||
case EF_M68K_ISA_A:
|
||||
features |= mcfisa_a|mcfhwdiv;
|
||||
break;
|
||||
case EF_M68K_ISA_A_PLUS:
|
||||
features |= mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp;
|
||||
break;
|
||||
case EF_M68K_ISA_B_NOUSP:
|
||||
features |= mcfisa_a|mcfisa_b|mcfhwdiv;
|
||||
break;
|
||||
case EF_M68K_ISA_B:
|
||||
features |= mcfisa_a|mcfisa_b|mcfhwdiv|mcfusp;
|
||||
break;
|
||||
}
|
||||
if (eflags & EF_M68K_HW_DIV)
|
||||
features |= mcfhwdiv;
|
||||
switch (eflags & EF_M68K_MAC_MASK)
|
||||
{
|
||||
case EF_M68K_MAC:
|
||||
@ -411,8 +415,6 @@ elf32_m68k_object_p (bfd *abfd)
|
||||
features |= mcfemac;
|
||||
break;
|
||||
}
|
||||
if (eflags & EF_M68K_USP)
|
||||
features |= mcfusp;
|
||||
if (eflags & EF_M68K_FLOAT)
|
||||
features |= cfloat;
|
||||
}
|
||||
@ -462,7 +464,8 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd)
|
||||
if (in_mach > out_mach)
|
||||
out_mach = in_mach;
|
||||
}
|
||||
else if (in_mach >= bfd_mach_mcf_isa_a && out_mach >= bfd_mach_mcf_isa_a)
|
||||
else if (in_mach >= bfd_mach_mcf_isa_a_nodiv
|
||||
&& out_mach >= bfd_mach_mcf_isa_a_nodiv)
|
||||
/* Merge cf machine. */
|
||||
out_mach = bfd_m68k_features_to_mach
|
||||
(bfd_m68k_mach_to_features (in_mach)
|
||||
@ -483,27 +486,37 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd)
|
||||
}
|
||||
else
|
||||
{
|
||||
flagword isa_in = in_flags & EF_M68K_ISA_MASK;
|
||||
flagword isa_out = out_flags & EF_M68K_ISA_MASK;
|
||||
|
||||
|
||||
/* Copy legacy flags. */
|
||||
out_flags |= in_flags & (EF_M68K_CPU32 | EF_M68K_M68000 | EF_M68K_CFV4E);
|
||||
|
||||
if (((in_flags | out_flags) & EF_M68K_ISA_MASK)
|
||||
if ((isa_in | isa_out)
|
||||
&& ((in_flags | out_flags) & (EF_M68K_CPU32 | EF_M68K_M68000)))
|
||||
/* Mixing m68k and cf is not allowed */
|
||||
return FALSE;
|
||||
|
||||
if (in_flags & EF_M68K_ISA_MASK)
|
||||
if (isa_in)
|
||||
{
|
||||
if (out_flags & EF_M68K_ISA_MASK)
|
||||
if (isa_out)
|
||||
{
|
||||
/* Merge cf specific flags */
|
||||
if ((in_flags & EF_M68K_ISA_MASK)
|
||||
> (out_flags & EF_M68K_ISA_MASK))
|
||||
{
|
||||
out_flags ^= out_flags & EF_M68K_ISA_MASK;
|
||||
out_flags |= in_flags & EF_M68K_ISA_MASK;
|
||||
}
|
||||
out_flags |= in_flags
|
||||
& (EF_M68K_HW_DIV | EF_M68K_USP | EF_M68K_FLOAT);
|
||||
if (isa_out == EF_M68K_ISA_A_PLUS
|
||||
&& (isa_in == EF_M68K_ISA_B_NOUSP
|
||||
|| isa_in == EF_M68K_ISA_B))
|
||||
/* Cannot mix A+ and B */
|
||||
return FALSE;
|
||||
if (isa_in == EF_M68K_ISA_A_PLUS
|
||||
&& (isa_out == EF_M68K_ISA_B_NOUSP
|
||||
|| isa_out == EF_M68K_ISA_B))
|
||||
/* Cannot mix B and A+ */
|
||||
return FALSE;
|
||||
|
||||
if (isa_in > isa_out)
|
||||
out_flags ^= isa_in ^ isa_out;
|
||||
|
||||
out_flags |= in_flags & EF_M68K_FLOAT;
|
||||
if (in_flags & EF_M68K_MAC_MASK)
|
||||
{
|
||||
if (!(out_flags & EF_M68K_MAC_MASK))
|
||||
@ -559,22 +572,31 @@ elf32_m68k_print_private_bfd_data (abfd, ptr)
|
||||
{
|
||||
char const *isa = _("unknown");
|
||||
char const *mac = _("unknown");
|
||||
char const *additional = "";
|
||||
|
||||
switch (eflags & EF_M68K_ISA_MASK)
|
||||
{
|
||||
case EF_M68K_ISA_A_NODIV:
|
||||
isa = "A";
|
||||
additional = " [nodiv]";
|
||||
break;
|
||||
case EF_M68K_ISA_A:
|
||||
isa = "A";
|
||||
break;
|
||||
case EF_M68K_ISA_A_PLUS:
|
||||
isa = "A+";
|
||||
break;
|
||||
case EF_M68K_ISA_B_NOUSP:
|
||||
isa = "B";
|
||||
additional = " [nousp]";
|
||||
break;
|
||||
case EF_M68K_ISA_B:
|
||||
isa = "B";
|
||||
break;
|
||||
}
|
||||
fprintf (file, " [isa %s]", isa);
|
||||
if (eflags & EF_M68K_HW_DIV)
|
||||
fprintf (file, " [hwdiv]");
|
||||
fprintf (file, " [isa %s]%s", isa, additional);
|
||||
if (eflags & EF_M68K_FLOAT)
|
||||
fprintf (file, " [float]");
|
||||
switch (eflags & EF_M68K_MAC_MASK)
|
||||
{
|
||||
case 0:
|
||||
@ -589,10 +611,6 @@ elf32_m68k_print_private_bfd_data (abfd, ptr)
|
||||
}
|
||||
if (mac)
|
||||
fprintf (file, " [%s]", mac);
|
||||
if (eflags & EF_M68K_USP)
|
||||
fprintf (file, " [usp");
|
||||
if (eflags & EF_M68K_FLOAT)
|
||||
fprintf (file, " [float]");
|
||||
}
|
||||
|
||||
fputc ('\n', file);
|
||||
|
24
bfd/ieee.c
24
bfd/ieee.c
@ -3466,22 +3466,22 @@ ieee_write_processor (bfd *abfd)
|
||||
case bfd_mach_m68040: id = "68040"; break;
|
||||
case bfd_mach_m68060: id = "68060"; break;
|
||||
case bfd_mach_cpu32: id = "cpu32"; break;
|
||||
case bfd_mach_mcf_isa_a_nodiv: id = "isa-a:nodiv"; break;
|
||||
case bfd_mach_mcf_isa_a: id = "isa-a"; break;
|
||||
case bfd_mach_mcf_isa_a_div: id = "isa-a:div"; break;
|
||||
case bfd_mach_mcf_isa_a_div_mac: id = "isa-a:div:mac"; break;
|
||||
case bfd_mach_mcf_isa_a_div_emac: id = "isa-a:div:emac"; break;
|
||||
case bfd_mach_mcf_isa_aplus: id = "isa-a+"; break;
|
||||
case bfd_mach_mcf_isa_aplus_mac: id = "isa-a+:mac"; break;
|
||||
case bfd_mach_mcf_isa_aplus_emac: id = "isa-a+:mac"; break;
|
||||
case bfd_mach_mcf_isa_aplus_usp: id = "isa-a+:usp"; break;
|
||||
case bfd_mach_mcf_isa_aplus_usp_mac: id = "isa-a+:usp:mac"; break;
|
||||
case bfd_mach_mcf_isa_aplus_usp_emac: id = "isa-a+:usp:emac"; break;
|
||||
case bfd_mach_mcf_isa_a_mac: id = "isa-a:mac"; break;
|
||||
case bfd_mach_mcf_isa_a_emac: id = "isa-a:emac"; break;
|
||||
case bfd_mach_mcf_isa_aplus: id = "isa-aplus"; break;
|
||||
case bfd_mach_mcf_isa_aplus_mac: id = "isa-aplus:mac"; break;
|
||||
case bfd_mach_mcf_isa_aplus_emac: id = "isa-aplus:mac"; break;
|
||||
case bfd_mach_mcf_isa_b_nousp: id = "isa-b:nousp"; break;
|
||||
case bfd_mach_mcf_isa_b_nousp_mac: id = "isa-b:nousp:mac"; break;
|
||||
case bfd_mach_mcf_isa_b_nousp_emac: id = "isa-b:nousp:emac"; break;
|
||||
case bfd_mach_mcf_isa_b: id = "isa-b"; break;
|
||||
case bfd_mach_mcf_isa_b_mac: id = "isa-b:mac"; break;
|
||||
case bfd_mach_mcf_isa_b_emac: id = "isa-b:emac"; break;
|
||||
case bfd_mach_mcf_isa_b_usp_float: id = "isa-b:usp:float"; break;
|
||||
case bfd_mach_mcf_isa_b_usp_float_mac: id = "isa-b:usp:float:mac"; break;
|
||||
case bfd_mach_mcf_isa_b_usp_float_emac: id = "isa-b:usp:float:emac"; break;
|
||||
case bfd_mach_mcf_isa_b_float: id = "isa-b:float"; break;
|
||||
case bfd_mach_mcf_isa_b_float_mac: id = "isa-b:float:mac"; break;
|
||||
case bfd_mach_mcf_isa_b_float_emac: id = "isa-b:float:emac"; break;
|
||||
}
|
||||
|
||||
if (! ieee_write_id (abfd, id))
|
||||
|
@ -1,3 +1,7 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* readelf.c (get_machine_flags): Adjust.
|
||||
|
||||
2006-03-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* dwarf.c (frame_display_row, display_debug_frames): Handle
|
||||
|
@ -1949,23 +1949,34 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
||||
{
|
||||
char const *isa = _("unknown");
|
||||
char const *mac = _("unknown mac");
|
||||
char const *additional = NULL;
|
||||
|
||||
switch (e_flags & EF_M68K_ISA_MASK)
|
||||
{
|
||||
case EF_M68K_ISA_A_NODIV:
|
||||
isa = "A";
|
||||
additional = ", nodiv";
|
||||
break;
|
||||
case EF_M68K_ISA_A:
|
||||
isa = "A";
|
||||
break;
|
||||
case EF_M68K_ISA_A_PLUS:
|
||||
isa = "A+";
|
||||
break;
|
||||
case EF_M68K_ISA_B_NOUSP:
|
||||
isa = "B";
|
||||
additional = ", nousp";
|
||||
break;
|
||||
case EF_M68K_ISA_B:
|
||||
isa = "B";
|
||||
break;
|
||||
}
|
||||
strcat (buf, ", cf, isa ");
|
||||
strcat (buf, isa);
|
||||
if (e_flags & EF_M68K_HW_DIV)
|
||||
strcat (buf, ", hwdiv");
|
||||
if (additional)
|
||||
strcat (buf, additional);
|
||||
if (e_flags & EF_M68K_FLOAT)
|
||||
strcat (buf, ", float");
|
||||
switch (e_flags & EF_M68K_MAC_MASK)
|
||||
{
|
||||
case 0:
|
||||
@ -1983,10 +1994,6 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
||||
strcat (buf, ", ");
|
||||
strcat (buf, mac);
|
||||
}
|
||||
if (e_flags & EF_M68K_USP)
|
||||
strcat (buf, ", usp");
|
||||
if (e_flags & EF_M68K_FLOAT)
|
||||
strcat (buf, ", float");
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -1,3 +1,14 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* config/tc-m68k.c (m68k_extensions): Allow 'float' on both m68k
|
||||
and cf.
|
||||
(m68k_ip): <case 'J'> Check we have some control regs.
|
||||
(md_parse_option): Allow raw arch switch.
|
||||
(m68k_init_arch): Better detection of arch/cpu mismatch. Detect
|
||||
whether 68881 or cfloat was meant by -mfloat.
|
||||
(md_show_usage): Adjust extension display.
|
||||
(m68k_elf_final_processing): Adjust.
|
||||
|
||||
2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
|
||||
|
||||
* config/tc-avr.c (avr_mod_hash_value): New function.
|
||||
|
@ -368,7 +368,11 @@ struct m68k_cpu
|
||||
unsigned long arch; /* Architecture features. */
|
||||
unsigned long chip; /* Specific chip */
|
||||
const char *name; /* Name */
|
||||
unsigned alias;
|
||||
int alias; /* Alias for a cannonical name. If 1, then
|
||||
succeeds canonical name, if -1 then
|
||||
succeeds canonical name, if <-1 ||>1 this is a
|
||||
deprecated name, and the next/previous name
|
||||
should be used. */
|
||||
};
|
||||
|
||||
/* We hold flags for features explicitly enabled and explicitly
|
||||
@ -391,23 +395,25 @@ static const struct m68k_cpu m68k_archs[] =
|
||||
{m68060, cpu_m68060, "68060", 0},
|
||||
{cpu32|m68881, cpu_cpu32, "cpu32", 0},
|
||||
{mcfisa_a|mcfhwdiv, 0, "isaa", 0},
|
||||
{mcfisa_a|mcfhwdiv|mcfisa_aa, 0, "isaaplus", 0},
|
||||
{mcfisa_a|mcfhwdiv|mcfisa_b, 0, "isab", 0},
|
||||
{mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp, 0, "isaaplus", 0},
|
||||
{mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp, 0, "isab", 0},
|
||||
{mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac|mcfusp|cfloat,
|
||||
cpu_cf547x, "cfv4e", 0},
|
||||
{0,0,NULL, 0}
|
||||
};
|
||||
|
||||
/* Architecture extensions. */
|
||||
/* Architecture extensions, here 'alias' -1 for m68k, +1 for cf and 0
|
||||
for either. */
|
||||
static const struct m68k_cpu m68k_extensions[] =
|
||||
{
|
||||
{m68851, 0, "68851", 0},
|
||||
{m68881, 0, "68881", 0},
|
||||
{m68881, 0, "68882", 0},
|
||||
{m68851, 0, "68851", -1},
|
||||
{m68881, 0, "68881", -1},
|
||||
{m68881, 0, "68882", -1},
|
||||
|
||||
{cfloat|m68881, 0, "float", 0},
|
||||
|
||||
{mcfhwdiv, 0, "div", 1},
|
||||
{mcfusp, 0, "usp", 1},
|
||||
{cfloat, 0, "float", 1},
|
||||
{mcfmac, 0, "mac", 1},
|
||||
{mcfemac, 0, "emac", 1},
|
||||
|
||||
@ -426,13 +432,13 @@ static const struct m68k_cpu m68k_cpus[] =
|
||||
{ cpu32|m68881, cpu_cpu32, "cpu32", 0},
|
||||
{ mcfisa_a, cpu_cf5200, "5200", 0},
|
||||
{ mcfisa_a|mcfhwdiv|mcfmac, cpu_cf5206e, "5206e", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac, cpu_cf5208, "5208", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac, cpu_cf5213, "5213", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, cpu_cf5208, "5208", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, cpu_cf5213, "5213", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,cpu_cf521x, "521x", 0},
|
||||
{ mcfisa_a|mcfhwdiv|mcfemac, cpu_cf5249, "5249", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp,cpu_cf528x, "528x", 0},
|
||||
{ mcfisa_a|mcfhwdiv|mcfmac, cpu_cf5307, "5307", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf5329, "5329", 0},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf5329, "5329", 0},
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac, cpu_cf5407, "5407",0},
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac|mcfusp|cfloat,
|
||||
cpu_cf547x, "547x", 0},
|
||||
@ -467,16 +473,16 @@ static const struct m68k_cpu m68k_cpus[] =
|
||||
{ mcfisa_a, cpu_cf5200, "5202", 1},
|
||||
{ mcfisa_a, cpu_cf5200, "5204", 1},
|
||||
{ mcfisa_a, cpu_cf5200, "5206", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac, cpu_cf5208, "5207", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac, cpu_cf5213, "5211", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac, cpu_cf5213, "5212", 1},
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_aa|mcfemac, cpu_cf521x, "5214", 1},
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_aa|mcfemac, cpu_cf521x, "5216", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf5329, "5327", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf5329, "5328", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf528x, "5280", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf528x, "5281", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac, cpu_cf528x, "5282", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, cpu_cf5208, "5207", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, cpu_cf5213, "5211", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfmac|mcfusp, cpu_cf5213, "5212", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf521x, "5214", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf521x, "5216", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf5329, "5327", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf5329, "5328", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf528x, "5280", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf528x, "5281", 1},
|
||||
{ mcfisa_a|mcfisa_aa|mcfhwdiv|mcfemac|mcfusp, cpu_cf528x, "5282", 1},
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac, cpu_cf5407, "cfv4", 1 },
|
||||
{ mcfisa_a|mcfhwdiv|mcfisa_b|mcfemac|mcfusp|cfloat,
|
||||
cpu_cf547x, "cfv4e", 1 },
|
||||
@ -1700,11 +1706,13 @@ m68k_ip (char *instring)
|
||||
case 'J':
|
||||
if (opP->mode != CONTROL
|
||||
|| opP->reg < USP
|
||||
|| opP->reg > last_movec_reg)
|
||||
|| opP->reg > last_movec_reg
|
||||
|| !control_regs)
|
||||
losing++;
|
||||
else
|
||||
{
|
||||
const enum m68k_register *rp;
|
||||
|
||||
for (rp = control_regs; *rp; rp++)
|
||||
if (*rp == opP->reg)
|
||||
break;
|
||||
@ -7271,6 +7279,8 @@ md_parse_option (int c, char *arg)
|
||||
m68k_set_cpu (arg + 4, 1, 0);
|
||||
else if (m68k_set_extension (arg, 0, 1))
|
||||
;
|
||||
else if (m68k_set_arch (arg, 0, 1))
|
||||
;
|
||||
else if (m68k_set_cpu (arg, 0, 1))
|
||||
;
|
||||
else
|
||||
@ -7289,35 +7299,42 @@ md_parse_option (int c, char *arg)
|
||||
static void
|
||||
m68k_init_arch (void)
|
||||
{
|
||||
unsigned arch_of_chip = 0;
|
||||
|
||||
if (not_current_architecture & current_architecture)
|
||||
{
|
||||
as_bad (_("architecture features both enabled and disabled"));
|
||||
not_current_architecture &= ~current_architecture;
|
||||
}
|
||||
if (selected_arch)
|
||||
current_architecture |= selected_arch->arch;
|
||||
else
|
||||
current_architecture |= selected_cpu->arch;
|
||||
|
||||
current_architecture &= ~not_current_architecture;
|
||||
|
||||
if (selected_cpu)
|
||||
{
|
||||
arch_of_chip = selected_arch->arch;
|
||||
current_chip = selected_arch->chip;
|
||||
if (selected_cpu && (arch_of_chip & ~selected_cpu->arch))
|
||||
if (current_architecture & ~selected_cpu->arch)
|
||||
{
|
||||
as_bad (_("selected processor is not from selected architecture"));
|
||||
arch_of_chip = selected_cpu->arch;
|
||||
as_bad (_("selected processor does not have all features of selected architecture"));
|
||||
current_architecture
|
||||
= selected_cpu->arch & ~not_current_architecture;
|
||||
}
|
||||
}
|
||||
else
|
||||
arch_of_chip = selected_cpu->arch;
|
||||
if (selected_cpu)
|
||||
current_chip = selected_cpu->chip;
|
||||
|
||||
current_architecture |= arch_of_chip;
|
||||
current_architecture &= ~not_current_architecture;
|
||||
if ((current_architecture & (cfloat | m68881)) == (cfloat | m68881))
|
||||
{
|
||||
/* Determine which float is really meant. */
|
||||
if (current_architecture & (m68k_mask & ~m68881))
|
||||
current_architecture ^= cfloat;
|
||||
else
|
||||
current_architecture ^= m68881;
|
||||
}
|
||||
|
||||
if ((current_architecture & m68k_mask)
|
||||
&& (current_architecture & ~m68k_mask))
|
||||
{
|
||||
as_bad (_ ("m68k and cf features both selected"));
|
||||
if (arch_of_chip & m68k_mask)
|
||||
if (current_architecture & m68k_mask)
|
||||
current_architecture &= m68k_mask;
|
||||
else
|
||||
current_architecture &= ~m68k_mask;
|
||||
@ -7375,8 +7392,10 @@ md_show_usage (FILE *stream)
|
||||
"), default_cpu);
|
||||
for (i = 0; m68k_extensions[i].name; i++)
|
||||
fprintf (stream, _("\
|
||||
-m[no-]%-16s enable/disable %s architecture extension\n\
|
||||
"), m68k_extensions[i].name, m68k_extensions[i].alias ? "ColdFire" : "m68k");
|
||||
-m[no-]%-16s enable/disable%s architecture extension\n\
|
||||
"), m68k_extensions[i].name,
|
||||
m68k_extensions[i].alias > 0 ? " ColdFire"
|
||||
: m68k_extensions[i].alias < 0 ? " m68k" : "");
|
||||
|
||||
fprintf (stream, _("\
|
||||
-l use 1 word for refs to undefined symbols [default 2]\n\
|
||||
@ -7568,27 +7587,59 @@ m68k_elf_final_processing (void)
|
||||
|
||||
if (current_architecture & mcfisa_a)
|
||||
{
|
||||
/* Set coldfire specific elf flags */
|
||||
if (current_architecture & mcfisa_b)
|
||||
flags |= EF_M68K_ISA_B;
|
||||
else if (current_architecture & mcfisa_aa)
|
||||
flags |= EF_M68K_ISA_A_PLUS;
|
||||
else
|
||||
flags |= EF_M68K_ISA_A;
|
||||
|
||||
if (current_architecture & mcfhwdiv)
|
||||
flags |= EF_M68K_HW_DIV;
|
||||
|
||||
if (current_architecture & mcfusp)
|
||||
flags |= EF_M68K_USP;
|
||||
static const unsigned isa_features[][2] =
|
||||
{
|
||||
{EF_M68K_ISA_A_NODIV, mcfisa_a},
|
||||
{EF_M68K_ISA_A, mcfisa_a|mcfhwdiv},
|
||||
{EF_M68K_ISA_A_PLUS,mcfisa_a|mcfisa_aa|mcfhwdiv|mcfusp},
|
||||
{EF_M68K_ISA_B_NOUSP,mcfisa_a|mcfisa_b|mcfhwdiv},
|
||||
{EF_M68K_ISA_B, mcfisa_a|mcfisa_b|mcfhwdiv|mcfusp},
|
||||
{0,0},
|
||||
};
|
||||
static const unsigned mac_features[][2] =
|
||||
{
|
||||
{EF_M68K_MAC, mcfmac},
|
||||
{EF_M68K_EMAC, mcfemac},
|
||||
{0,0},
|
||||
};
|
||||
unsigned ix;
|
||||
unsigned pattern;
|
||||
|
||||
if (current_architecture & cfloat)
|
||||
flags |= EF_M68K_FLOAT;
|
||||
pattern = (current_architecture
|
||||
& (mcfisa_a|mcfisa_aa|mcfisa_b|mcfhwdiv|mcfusp));
|
||||
for (ix = 0; isa_features[ix][1]; ix++)
|
||||
{
|
||||
if (pattern == isa_features[ix][1])
|
||||
{
|
||||
flags |= isa_features[ix][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isa_features[ix][1])
|
||||
{
|
||||
cf_bad:
|
||||
as_warn (_("Not a defined coldfire architecture"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (current_architecture & cfloat)
|
||||
flags |= EF_M68K_FLOAT | EF_M68K_CFV4E;
|
||||
|
||||
if (current_architecture & mcfmac)
|
||||
flags |= EF_M68K_MAC;
|
||||
else if (current_architecture & mcfemac)
|
||||
flags |= EF_M68K_EMAC;
|
||||
pattern = current_architecture & (mcfmac|mcfemac);
|
||||
if (pattern)
|
||||
{
|
||||
for (ix = 0; mac_features[ix][1]; ix++)
|
||||
{
|
||||
if (pattern == mac_features[ix][1])
|
||||
{
|
||||
flags |= mac_features[ix][0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!mac_features[ix][1])
|
||||
goto cf_bad;
|
||||
}
|
||||
}
|
||||
}
|
||||
elf_elfheader (stdoutput)->e_flags |= flags;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gas/m68k/arch-cpu-1.s: Tweak.
|
||||
* gas/m68k/arch-cpu-1.d: Tweak.
|
||||
|
||||
2006-02-28 Jan Beulich <jbeulich@novell.com>
|
||||
|
||||
* gas/all/altmacro.s: Adjust.
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
|
||||
.*: file format elf32-m68k
|
||||
private flags = 22: \[isa A\+\] \[emac\]
|
||||
private flags = 21: \[isa A\] \[nodiv\] \[emac\]
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
.arch isaaplus,no-div,emac
|
||||
.arch isaa,no-div,emac
|
||||
.cpu 5329
|
||||
|
||||
mac.w %d1l,%a1u,<<,%acc0
|
||||
|
@ -1,3 +1,12 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A,
|
||||
EF_M68K_ISA_A_PLUS, EF_M68K_ISA_B, EF_M68K_ISA_C): Adjust.
|
||||
(EF_M68K_ISA_A_NODIV, EF_M68K_ISA_B_NOUSP): New.
|
||||
(EF_M68K_HW_DIV, EF_M68K_USP): Remove.
|
||||
(EF_M68K_MAC, EF_M68K_EMAC, EF_M68K_FLOAT): Adjust.
|
||||
(EF_M68K_EMAC_B): New.
|
||||
|
||||
2006-03-03 Bjoern Haase <bjoern.m.haase@web.de>
|
||||
|
||||
* avr.h (R_AVR_MS8_LDI,R_AVR_MS8_LDI_NEG): Add.
|
||||
|
@ -58,16 +58,18 @@ END_RELOC_NUMBERS (R_68K_max)
|
||||
|
||||
/* We use the bottom 8 bits to encode information about the
|
||||
coldfire variant. */
|
||||
#define EF_M68K_ISA_MASK 0x07 /* Which ISA */
|
||||
#define EF_M68K_ISA_A 0x01
|
||||
#define EF_M68K_ISA_A_PLUS 0x02
|
||||
#define EF_M68K_ISA_B 0x03
|
||||
#define EF_M68K_HW_DIV 0x08 /* Has HW divide */
|
||||
#define EF_M68K_ISA_MASK 0x0F /* Which ISA */
|
||||
#define EF_M68K_ISA_A_NODIV 0x01 /* ISA A except for div */
|
||||
#define EF_M68K_ISA_A 0x02
|
||||
#define EF_M68K_ISA_A_PLUS 0x03
|
||||
#define EF_M68K_ISA_B_NOUSP 0x04 /* ISA_B except for USP */
|
||||
#define EF_M68K_ISA_B 0x05
|
||||
#define EF_M68K_ISA_C 0x06
|
||||
#define EF_M68K_MAC_MASK 0x30
|
||||
#define EF_M68K_MAC 0x10 /* Has MAC */
|
||||
#define EF_M68K_EMAC 0x20 /* Has EMAC */
|
||||
#define EF_M68K_USP 0x40 /* Has USP insns */
|
||||
#define EF_M68K_FLOAT 0x80 /* Has float insns */
|
||||
#define EF_M68K_MAC 0x10 /* MAC */
|
||||
#define EF_M68K_EMAC 0x20 /* EMAC */
|
||||
#define EF_M68K_EMAC_B 0x30 /* EMAC_B */
|
||||
#define EF_M68K_FLOAT 0x40 /* Has float insns */
|
||||
#define EF_M68K_CF_MASK 0xFF
|
||||
|
||||
#endif
|
||||
|
@ -1,3 +1,7 @@
|
||||
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* ld-m68k: New tests.
|
||||
|
||||
2006-03-03 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* ld-i386/vxworks1-static.d, ld-i386/vxworks2.s,
|
||||
|
7
ld/testsuite/ld-m68k/isaa-mac.d
Normal file
7
ld/testsuite/ld-m68k/isaa-mac.d
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
.*: file format elf32-m68k
|
||||
|
||||
Program Header:
|
||||
#...
|
||||
private flags = 12: \[isa A\] \[mac\]
|
||||
|
3
ld/testsuite/ld-m68k/isaa-mac.s
Normal file
3
ld/testsuite/ld-m68k/isaa-mac.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isaa,mac
|
||||
|
||||
nop
|
3
ld/testsuite/ld-m68k/isaa-nodiv.s
Normal file
3
ld/testsuite/ld-m68k/isaa-nodiv.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isaa,no-div
|
||||
|
||||
nop
|
7
ld/testsuite/ld-m68k/isaa.d
Normal file
7
ld/testsuite/ld-m68k/isaa.d
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
.*: file format elf32-m68k
|
||||
|
||||
Program Header:
|
||||
#...
|
||||
private flags = 2: \[isa A\]
|
||||
|
3
ld/testsuite/ld-m68k/isaa.s
Normal file
3
ld/testsuite/ld-m68k/isaa.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isaa
|
||||
|
||||
nop
|
7
ld/testsuite/ld-m68k/isaaplus.d
Normal file
7
ld/testsuite/ld-m68k/isaaplus.d
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
.*: file format elf32-m68k
|
||||
|
||||
Program Header:
|
||||
#...
|
||||
private flags = 3: \[isa A\+\]
|
||||
|
3
ld/testsuite/ld-m68k/isaaplus.s
Normal file
3
ld/testsuite/ld-m68k/isaaplus.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isaaplus
|
||||
|
||||
nop
|
7
ld/testsuite/ld-m68k/isab-float.d
Normal file
7
ld/testsuite/ld-m68k/isab-float.d
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
.*: file format elf32-m68k
|
||||
|
||||
Program Header:
|
||||
#...
|
||||
private flags = 8045: \[cfv4e\] \[isa B\] \[float\]
|
||||
|
3
ld/testsuite/ld-m68k/isab-float.s
Normal file
3
ld/testsuite/ld-m68k/isab-float.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isab,float
|
||||
|
||||
nop
|
3
ld/testsuite/ld-m68k/isab-nousp.s
Normal file
3
ld/testsuite/ld-m68k/isab-nousp.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isab,no-usp
|
||||
|
||||
nop
|
7
ld/testsuite/ld-m68k/isab.d
Normal file
7
ld/testsuite/ld-m68k/isab.d
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
.*: file format elf32-m68k
|
||||
|
||||
Program Header:
|
||||
#...
|
||||
private flags = 5: \[isa B\]
|
||||
|
3
ld/testsuite/ld-m68k/isab.s
Normal file
3
ld/testsuite/ld-m68k/isab.s
Normal file
@ -0,0 +1,3 @@
|
||||
.arch isab
|
||||
|
||||
nop
|
47
ld/testsuite/ld-m68k/m68k.exp
Normal file
47
ld/testsuite/ld-m68k/m68k.exp
Normal file
@ -0,0 +1,47 @@
|
||||
# Expect script for run_dump_test based ld-m68k tests.
|
||||
# Copyright 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# Test m68k object merging
|
||||
|
||||
if { ![is_elf_format] || ![istarget m68k-*-*] } {
|
||||
return
|
||||
}
|
||||
|
||||
# List contains test-items with 3 items followed by 2 lists:
|
||||
# 0:name 1:ld options 2:assembler options
|
||||
# 3:filenames of assembler files 4: action and options. 5: name of output file
|
||||
|
||||
# Actions:
|
||||
# objdump: Apply objdump options on result. Compare with regex (last arg).
|
||||
# nm: Apply nm options on result. Compare with regex (last arg).
|
||||
# readelf: Apply readelf options on result. Compare with regex (last arg).
|
||||
|
||||
set m68k_mergeok_tests {
|
||||
{"merge isa-a isa-a:nodiv" "-T merge.ld" ""
|
||||
{isaa.s isaa-nodiv.s} {{objdump -p isaa.d}} "isaa"}
|
||||
{"merge isa-a isa-b" "-T merge.ld" ""
|
||||
{isaa.s isab.s} {{objdump -p isab.d}} "isab"}
|
||||
{"merge isa-a isa-aplus" "-T merge.ld" ""
|
||||
{isaa.s isaaplus.s} {{objdump -p isaaplus.d}} "isaplus"}
|
||||
{"merge isa-b isa-b:nousp" "-T merge.ld" ""
|
||||
{isab.s isab-nousp.s} {{objdump -p isab.d}} "isab"}
|
||||
{"merge isa-a isa-a:mac" "-T merge.ld" ""
|
||||
{isaa.s isaa-mac.s} {{objdump -p isaa-mac.d}} "isaa-mac"}
|
||||
{"merge isa-b isa-b:float" "-T merge.ld" ""
|
||||
{isab.s isab-float.s} {{objdump -p isab-float.d}} "isab-float"}}
|
||||
|
||||
run_ld_link_tests $m68k_mergeok_tests
|
9
ld/testsuite/ld-m68k/merge.ld
Normal file
9
ld/testsuite/ld-m68k/merge.ld
Normal file
@ -0,0 +1,9 @@
|
||||
OUTPUT_FORMAT("elf32-m68k", "elf32-m68k",
|
||||
"elf32-m68k")
|
||||
OUTPUT_ARCH(m68k)
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS {
|
||||
|
||||
.text : {_start = .; *(.text)}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user