Commit eff784fe by Michael Hayes Committed by Michael Hayes

c4x.h (ASM_GLOBALIZE_LABEL): Use c4x_global_label.

	* config/c4x/c4x.h (ASM_GLOBALIZE_LABEL): Use c4x_global_label.
	(ASM_OUTPUT_EXTERNAL): Use c4x_external_ref.
	(ASM_OUTPUT_EXTERNAL_LIBCALL): Likewise.
	(ASM_FILE_END): Use c4x_file_end.
	* config/c4x/c4x.c (c4x_global_label): New function.
 	(c4x_external_ref, c4x_file_end): Likewise.
	* config/c4x/c4x-protos.h (c4x_global_label): Add prototype.
 	(c4x_external_ref, c4x_end_file): Likewise.

From-SVN: r31909
parent cf4ed945
2000-02-11 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
* config/c4x/c4x.h (ASM_GLOBALIZE_LABEL): Use c4x_global_label.
(ASM_OUTPUT_EXTERNAL): Use c4x_external_ref.
(ASM_OUTPUT_EXTERNAL_LIBCALL): Likewise.
(ASM_FILE_END): Use c4x_file_end.
* config/c4x/c4x.c (c4x_global_label): New function.
(c4x_external_ref, c4x_file_end): Likewise.
* config/c4x/c4x-protos.h (c4x_global_label): Add prototype.
(c4x_external_ref, c4x_end_file): Likewise.
2000-02-10 Zack Weinberg <zack@wolery.cumb.org> 2000-02-10 Zack Weinberg <zack@wolery.cumb.org>
* cppexp.c: Don't include cpphash.h. * cppexp.c: Don't include cpphash.h.
......
...@@ -37,6 +37,12 @@ extern int c4x_handle_pragma PARAMS ((int (* p_getc) (void), ...@@ -37,6 +37,12 @@ extern int c4x_handle_pragma PARAMS ((int (* p_getc) (void),
void (* p_ungetc) (int), void (* p_ungetc) (int),
char *)); char *));
extern void c4x_global_label (char *);
extern void c4x_external_ref (char *);
extern void c4x_file_end (FILE *);
#ifdef TREE_CODE #ifdef TREE_CODE
extern void c4x_set_default_attributes PARAMS ((tree, tree *)); extern void c4x_set_default_attributes PARAMS ((tree, tree *));
......
...@@ -4396,19 +4396,122 @@ c4x_handle_pragma (p_getc, p_ungetc, pname) ...@@ -4396,19 +4396,122 @@ c4x_handle_pragma (p_getc, p_ungetc, pname)
} }
struct name_list
{
struct name_list *next;
char *name;
};
static struct name_list *global_head;
static struct name_list *extern_head;
/* Add NAME to list of global symbols and remove from external list if
present on external list. */
void
c4x_global_label (name)
char *name;
{
struct name_list *p, *last;
/* Do not insert duplicate names, so linearly search through list of
existing names. */
p = global_head;
while (p)
{
if (strcmp (p->name, name) == 0)
return;
p = p->next;
}
p = (struct name_list *) permalloc (sizeof *p);
p->next = global_head;
p->name = name;
global_head = p;
/* Remove this name from ref list if present. */
last = NULL;
p = extern_head;
while (p)
{
if (strcmp (p->name, name) == 0)
{
if (last)
last->next = p->next;
else
extern_head = p->next;
break;
}
last = p;
p = p->next;
}
}
/* Add NAME to list of external symbols. */
void
c4x_external_ref (name)
char *name;
{
struct name_list *p;
/* Do not insert duplicate names. */
p = extern_head;
while (p)
{
if (strcmp (p->name, name) == 0)
return;
p = p->next;
}
/* Do not insert ref if global found. */
p = global_head;
while (p)
{
if (strcmp (p->name, name) == 0)
return;
p = p->next;
}
p = (struct name_list *) permalloc (sizeof *p);
p->next = extern_head;
p->name = name;
extern_head = p;
}
void
c4x_file_end (fp)
FILE *fp;
{
struct name_list *p;
/* Output all external names that are not global. */
p = extern_head;
while (p)
{
fprintf (fp, "\t.ref\t");
assemble_name (fp, p->name);
fprintf (fp, "\n");
p = p->next;
}
fprintf (fp, "\t.end\n");
}
static void static void
c4x_check_attribute(attrib, list, decl, attributes) c4x_check_attribute (attrib, list, decl, attributes)
char *attrib; char *attrib;
tree list, decl, *attributes; tree list, decl, *attributes;
{ {
while (list != NULL_TREE while (list != NULL_TREE
&& IDENTIFIER_POINTER (TREE_PURPOSE (list)) && IDENTIFIER_POINTER (TREE_PURPOSE (list))
!= IDENTIFIER_POINTER (DECL_NAME (decl))) != IDENTIFIER_POINTER (DECL_NAME (decl)))
list = TREE_CHAIN(list); list = TREE_CHAIN (list);
if (list) if (list)
*attributes = chainon (*attributes, *attributes = chainon (*attributes,
build_tree_list (get_identifier (attrib), build_tree_list (get_identifier (attrib),
TREE_VALUE(list))); TREE_VALUE (list)));
} }
......
...@@ -2127,8 +2127,6 @@ dtors_section () \ ...@@ -2127,8 +2127,6 @@ dtors_section () \
fprintf (FILE, "\n"); \ fprintf (FILE, "\n"); \
} }
#define ASM_FILE_END(FILE) fprintf (FILE, "\t.end\n")
/* We need to have a data section we can identify so that we can set /* We need to have a data section we can identify so that we can set
the DP register back to a data pointer in the small memory model. the DP register back to a data pointer in the small memory model.
This is only required for ISRs if we are paranoid that someone This is only required for ISRs if we are paranoid that someone
...@@ -2211,25 +2209,21 @@ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0); ...@@ -2211,25 +2209,21 @@ do { assemble_name (FILE, NAME); fputs (":\n", FILE); } while (0);
fprintf (FILE, "\t.global\t"); \ fprintf (FILE, "\t.global\t"); \
assemble_name (FILE, NAME); \ assemble_name (FILE, NAME); \
fputs ("\n", FILE); \ fputs ("\n", FILE); \
c4x_global_label (NAME); \
} while (0); } while (0);
#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ #define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
do { \ c4x_external_ref (NAME)
fprintf (FILE, "\t.ref\t"); \
assemble_name (FILE, NAME); \
fputc ('\n', FILE); \
} while (0);
/* A C statement to output on FILE an assembler pseudo-op to /* A C statement to output on FILE an assembler pseudo-op to
declare a library function named external. declare a library function named external.
(Only needed to keep asm30 happy for ___divqf3 etc.) */ (Only needed to keep asm30 happy for ___divqf3 etc.) */
#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
do { \ c4x_external_ref (XSTR (FUN, 0))
fprintf (FILE, "\t.ref\t"); \
assemble_name (FILE, XSTR (FUN, 0)); \ #define ASM_FILE_END(FILE) \
fprintf (FILE, "\n"); \ c4x_file_end (FILE)
} while (0);
/* The prefix to add to user-visible assembler symbols. */ /* The prefix to add to user-visible assembler symbols. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment