* config/tc-ppc.c (ppc_frob_symbol): Don't create an aux entry for

an absolute symbol.
This commit is contained in:
Ian Lance Taylor 1995-10-04 18:05:59 +00:00
parent a7512014c6
commit cd557d83d6
2 changed files with 75 additions and 124 deletions

View File

@ -1,5 +1,13 @@
Wed Oct 4 14:03:39 1995 Ian Lance Taylor <ian@cygnus.com>
* config/tc-ppc.c (ppc_frob_symbol): Don't create an aux entry for
an absolute symbol.
Tue Oct 3 12:18:19 1995 Ian Lance Taylor <ian@cygnus.com> Tue Oct 3 12:18:19 1995 Ian Lance Taylor <ian@cygnus.com>
* config/tc-m68k.c (isbyte): Accept all values from -65536 to
+65535, so ~VAL will not be rejected.
* cond.c (s_endif): Call demand_empty_rest_of_line. In MRI mode, * cond.c (s_endif): Call demand_empty_rest_of_line. In MRI mode,
skip characters after the pseudo-op. skip characters after the pseudo-op.
(s_else): Likewise. (s_else): Likewise.

View File

@ -29,6 +29,10 @@
#include "elf/ppc.h" #include "elf/ppc.h"
#endif #endif
#ifdef TE_PE
#include "coff/pe.h"
#endif
/* This is the assembler for the PowerPC or POWER (RS/6000) chips. */ /* This is the assembler for the PowerPC or POWER (RS/6000) chips. */
/* Tell the main code what the endianness is. */ /* Tell the main code what the endianness is. */
@ -320,49 +324,6 @@ reg_name_search (name)
return -1; return -1;
} }
static void insert_reg PARAMS ( (char *regname, int regnum) );
static void
insert_reg (regname, regnum)
char *regname;
int regnum;
{
char buf[100];
int i;
symbol_table_insert (
symbol_new (regname,
reg_section,
regnum,
&zero_address_frag)
);
for (i = 0; regname[i]; i++)
{
buf[i] = islower (regname[i]) ? toupper (regname[i]) : regname[i];
}
buf[i] = '\0';
symbol_table_insert (
symbol_new (buf,
reg_section,
regnum,
&zero_address_frag)
);
}
static void
init_regtable ()
{
unsigned int i;
for (i = 0; i < REG_NAME_CNT && pre_defined_registers[i].name ; ++i)
{
insert_reg (pre_defined_registers[i].name,
pre_defined_registers[i].value);
}
}
#endif #endif
@ -734,13 +695,6 @@ md_begin ()
#ifdef TE_PE #ifdef TE_PE
#ifndef NO_SYMBOL_NAMES
/* FIXME: currently, if you enable the names, you cannot have variables
with the same names as the symbolic register names.
*/
init_regtable ();
#endif
ppc_current_section = text_section; ppc_current_section = text_section;
ppc_previous_section = 0; ppc_previous_section = 0;
@ -961,6 +915,55 @@ ppc_elf_validate_fix (fixp, seg)
#endif /* OBJ_ELF */ #endif /* OBJ_ELF */
#ifdef TE_PE
/*
* Summary of register_name().
*
* in: Input_line_pointer points to 1st char of operand.
*
* out: A expressionS.
* The operand may have been a register: in this case, X_op == O_register,
* X_add_number is set to the register number, and truth is returned.
* Input_line_pointer->(next non-blank) char after operand, or is in its
* original state.
*/
static int
register_name (expressionP)
expressionS *expressionP;
{
int reg_number;
char *name;
char c;
/* Find the spelling of the operand */
name = input_line_pointer;
c = get_symbol_end ();
reg_number = reg_name_search (name);
/* look to see if it's in the register table */
if (reg_number >= 0)
{
expressionP->X_op = O_register;
expressionP->X_add_number = reg_number;
/* make the rest nice */
expressionP->X_add_symbol = NULL;
expressionP->X_op_symbol = NULL;
*input_line_pointer = c; /* put back the delimiting char */
return 1;
}
else
{
/* reset the line as if we had not done anything */
*input_line_pointer = c; /* put back the delimiting char */
input_line_pointer = name; /* reset input_line pointer */
return 0;
}
}
#endif
/* We need to keep a list of fixups. We can't simply generate them as /* We need to keep a list of fixups. We can't simply generate them as
we go, because that would require us to first create the frag, and we go, because that would require us to first create the frag, and
that would screw up references to ``.''. */ that would screw up references to ``.''. */
@ -1181,9 +1184,12 @@ md_assemble (str)
ex.X_op_symbol = NULL; ex.X_op_symbol = NULL;
} }
else else
{
if (!register_name(&ex))
{ {
expression (&ex); expression (&ex);
} }
}
str = input_line_pointer; str = input_line_pointer;
input_line_pointer = hold; input_line_pointer = hold;
@ -2371,50 +2377,10 @@ ppc_tc (ignore)
} }
#ifdef TE_PE #ifdef TE_PE
/* Pseudo-ops specific to the Windows NT PowerPC PE (coff) format */ /* Pseudo-ops specific to the Windows NT PowerPC PE (coff) format */
/*
* Section characteristics
*/
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Reserved. */
#define IMAGE_SCN_CNT_CODE 0x00000020 /* Section contains code. */
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Section contains initialized data. */
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Section contains uninitialized data. */
#define IMAGE_SCN_LNK_OTHER 0x00000100 /* Reserved. */
#define IMAGE_SCN_LNK_INFO 0x00000200 /* Section contains comments or some other type of information. */
#define IMAGE_SCN_LNK_REMOVE 0x00000800 /* Section contents will not become part of image. */
#define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Section contents comdat. */
#define IMAGE_SCN_MEM_FARDATA 0x00008000
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
#define IMAGE_SCN_MEM_16BIT 0x00020000
#define IMAGE_SCN_MEM_LOCKED 0x00040000
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default alignment if no others are specified. */
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Section contains extended relocations. */
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 /* Section can be discarded. */
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section is not cachable. */
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section is not pageable. */
#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */
#define IMAGE_SCN_MEM_EXECUTE 0x20000000 /* Section is executable. */
#define IMAGE_SCN_MEM_READ 0x40000000 /* Section is readable. */
#define IMAGE_SCN_MEM_WRITE 0x80000000 /* Section is writeable. */
/* Set the current section. */ /* Set the current section. */
static void static void
ppc_set_current_section (new) ppc_set_current_section (new)
segT new; segT new;
@ -2758,6 +2724,11 @@ ppc_pe_comm(lcomm)
* additions/changes for the moto-pas assembler support. There are three * additions/changes for the moto-pas assembler support. There are three
* categories: * categories:
* *
* FIXME: I just noticed this. This doesn't work at all really. It it
* setting bits that bfd probably neither understands or uses. The
* correct approach (?) will have to incorporate extra fields attached
* to the section to hold the system specific stuff. (krk)
*
* Section Contents: * Section Contents:
* 'a' - unknown - referred to in documentation, but no definition supplied * 'a' - unknown - referred to in documentation, but no definition supplied
* 'c' - section has code * 'c' - section has code
@ -2852,15 +2823,8 @@ ppc_pe_section (ignore)
case 'R': /* Remove section at link time */ case 'R': /* Remove section at link time */
flags |= SEC_NEVER_LOAD; flags |= SEC_NEVER_LOAD;
break; break;
/* Section Protection */ /* Section Protection */
#if 0
#define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section is shareable. */
#define IMAGE_SCN_MEM_EXECUTE 0x20000000 /* Section is executable. */
#define IMAGE_SCN_MEM_READ 0x40000000 /* Section is readable. */
#define IMAGE_SCN_MEM_WRITE 0x80000000 /* Section is writeable. */
#endif
case 'r': /* section is readable */ case 'r': /* section is readable */
flags |= IMAGE_SCN_MEM_READ; flags |= IMAGE_SCN_MEM_READ;
break; break;
@ -2875,16 +2839,6 @@ ppc_pe_section (ignore)
break; break;
/* Section Alignment */ /* Section Alignment */
#if 0
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default alignment if no others are specified. */
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
#endif
case '0': /* align to byte boundary */ case '0': /* align to byte boundary */
flags |= IMAGE_SCN_ALIGN_1BYTES; flags |= IMAGE_SCN_ALIGN_1BYTES;
align = 0; align = 0;
@ -2938,18 +2892,6 @@ ppc_pe_section (ignore)
bfd_errmsg (bfd_get_error ())); bfd_errmsg (bfd_get_error ()));
} }
/* FIXME: Make sure the winnt alignment bits get set */
#if 0
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Default alignment if no others are specified. */
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
#endif
bfd_set_section_alignment(stdoutput, sec, align); bfd_set_section_alignment(stdoutput, sec, align);
} }
@ -3217,8 +3159,9 @@ ppc_frob_symbol (sym)
&& S_GET_SEGMENT (sym) != ppc_coff_debug_section) && S_GET_SEGMENT (sym) != ppc_coff_debug_section)
S_SET_STORAGE_CLASS (sym, C_HIDEXT); S_SET_STORAGE_CLASS (sym, C_HIDEXT);
if (S_GET_STORAGE_CLASS (sym) == C_EXT if ((S_GET_STORAGE_CLASS (sym) == C_EXT
|| S_GET_STORAGE_CLASS (sym) == C_HIDEXT) || S_GET_STORAGE_CLASS (sym) == C_HIDEXT)
&& S_GET_SEGMENT (sym) != absolute_section)
{ {
int i; int i;
union internal_auxent *a; union internal_auxent *a;