Generate .type directives.
This commit is contained in:
parent
6ce2870e56
commit
a0cac79431
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: tm.h,v 1.1 1993/11/25 01:26:29 paulus Exp $ */
|
/* $Id: tm.h,v 1.2 1993/11/26 07:18:45 pk Exp $ */
|
||||||
|
|
||||||
#include <machine/ansi.h>
|
#include <machine/ansi.h>
|
||||||
#include "da30/m68k.h"
|
#include "da30/m68k.h"
|
||||||
|
@ -77,18 +77,90 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some imports from svr4.h in support of shared libraries.
|
* Some imports from svr4.h in support of shared libraries.
|
||||||
* Currently, we need the DECLARE_OBJECT_SIZE stuff.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Define the strings used for the special svr4 .type and .size directives.
|
||||||
|
These strings generally do not vary from one system running svr4 to
|
||||||
|
another, but if a given system (e.g. m88k running svr) needs to use
|
||||||
|
different pseudo-op names for these, they may be overridden in the
|
||||||
|
file which includes this one. */
|
||||||
|
|
||||||
|
#define TYPE_ASM_OP ".type"
|
||||||
#define SIZE_ASM_OP ".size"
|
#define SIZE_ASM_OP ".size"
|
||||||
|
#define WEAK_ASM_OP ".weak"
|
||||||
|
|
||||||
|
/* The following macro defines the format used to output the second
|
||||||
|
operand of the .type assembler directive. Different svr4 assemblers
|
||||||
|
expect various different forms for this operand. The one given here
|
||||||
|
is just a default. You may need to override it in your machine-
|
||||||
|
specific tm.h file (depending upon the particulars of your assembler). */
|
||||||
|
|
||||||
|
#define TYPE_OPERAND_FMT "@%s"
|
||||||
|
|
||||||
|
/* Write the extra assembler code needed to declare a function's result.
|
||||||
|
Most svr4 assemblers don't require any special declaration of the
|
||||||
|
result value, but there are exceptions. */
|
||||||
|
|
||||||
|
#ifndef ASM_DECLARE_RESULT
|
||||||
|
#define ASM_DECLARE_RESULT(FILE, RESULT)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* These macros generate the special .type and .size directives which
|
||||||
|
are used to set the corresponding fields of the linker symbol table
|
||||||
|
entries in an ELF object file under SVR4. These macros also output
|
||||||
|
the starting labels for the relevant functions/objects. */
|
||||||
|
|
||||||
|
/* Write the extra assembler code needed to declare a function properly.
|
||||||
|
Some svr4 assemblers need to also have something extra said about the
|
||||||
|
function's return value. We allow for that here. */
|
||||||
|
|
||||||
|
#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
|
||||||
|
do { \
|
||||||
|
fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
|
||||||
|
assemble_name (FILE, NAME); \
|
||||||
|
putc (',', FILE); \
|
||||||
|
fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
|
||||||
|
putc ('\n', FILE); \
|
||||||
|
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
|
||||||
|
ASM_OUTPUT_LABEL(FILE, NAME); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Write the extra assembler code needed to declare an object properly. */
|
||||||
|
|
||||||
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
|
#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
|
||||||
do { \
|
do { \
|
||||||
|
fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
|
||||||
|
assemble_name (FILE, NAME); \
|
||||||
|
putc (',', FILE); \
|
||||||
|
fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
|
||||||
|
putc ('\n', FILE); \
|
||||||
if (!flag_inhibit_size_directive) \
|
if (!flag_inhibit_size_directive) \
|
||||||
{ \
|
{ \
|
||||||
fprintf (FILE, "\t%s ", SIZE_ASM_OP); \
|
fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
|
||||||
assemble_name (FILE, NAME); \
|
assemble_name (FILE, NAME); \
|
||||||
fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (decl))); \
|
fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (decl))); \
|
||||||
} \
|
} \
|
||||||
ASM_OUTPUT_LABEL(FILE, NAME); \
|
ASM_OUTPUT_LABEL(FILE, NAME); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* This is how to declare the size of a function. */
|
||||||
|
|
||||||
|
#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
|
||||||
|
do { \
|
||||||
|
if (!flag_inhibit_size_directive) \
|
||||||
|
{ \
|
||||||
|
char label[256]; \
|
||||||
|
static int labelno; \
|
||||||
|
labelno++; \
|
||||||
|
ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
|
||||||
|
ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
|
||||||
|
fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
|
||||||
|
assemble_name (FILE, (FNAME)); \
|
||||||
|
fprintf (FILE, ","); \
|
||||||
|
assemble_name (FILE, label); \
|
||||||
|
fprintf (FILE, "-"); \
|
||||||
|
assemble_name (FILE, (FNAME)); \
|
||||||
|
putc ('\n', FILE); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue