diff options
author | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-12 21:42:28 +0000 |
---|---|---|
committer | zack <zack@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-12 21:42:28 +0000 |
commit | 73ae3ef72f8c419fc963cd401e8cc2ef53d9434b (patch) | |
tree | cfa7bbb13d0bfc85e73ea5724b507a1d241d14d5 /gcc/xcoffout.c | |
parent | cdfbccf4aec52c4f8777f857e7b34e5f0fd24627 (diff) | |
download | gcc-73ae3ef72f8c419fc963cd401e8cc2ef53d9434b.tar.gz |
* debug.h (struct gcc_debug_hooks): Add type_decl field.
(debug_nothing_tree_int): Prototype.
(dwarf_debug_hooks): Delete, unused.
* debug.c (do_nothing_debug_hooks): Update.
(debug_nothing_tree_int): New function.
* langhooks.h (struct lang_hooks_for_decls):
Remove builtin_type_decls field.
* langhooks-def.h (LANG_HOOKS_BUILTIN_TYPE_DECLS): Delete.
(LANG_HOOKS_DECLS): Update.
* toplev.c (rest_of_decl_compilation, rest_of_type_compilation):
Use debug_hooks->type_decl.
* dbxout.c (preinit_symbols): New static.
(dbx_debug_hooks, xcoff_debug_hooks): Update.
(dbxout_init): Don't call DBX_OUTPUT_STANDARD_TYPES or
lang_hooks.decls.builtin_type_decls. Do scan preinit_symbols
for symbols to output.
(dbxout_type_decl): New function.
(dbxout_symbol): If called before dbxout_init has run, queue
the symbol for later. Apply DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER
to TYPE_DECLs before emitting them.
* xcoffout.c (assign_type_number): Delete.
(xcoff_type_numbers): New static table.
(xcoff_assign_fundamental_type_number): New function.
* xcoffout.h: Define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER, not
DBX_OUTPUT_STANDARD_TYPES. Remove unnecessary #ifdefs.
* sdbout.c: Include varray.h.
(deferred_global_decls): New static.
(sdb_debug_hooks): Update.
(sdbout_global_decl): If we can't emit something right now,
remember it in deferred_global_decls.
(sdbout_finish): Just scan deferred_global_decls; don't call getdecls.
(sdbout_init): Initialize deferred_global_decls.
* Makefile.in: Update dependencies of sdbout.o.
* dwarf2out.c (dwarf2out_type_decl): New function.
(dwarf2_debug_hooks): Update.
* vmsdbgout.c (vmsdbg_debug_hooks): Update.
* c-decl.c (getdecls): Just return 0.
(check_for_loop_decls): Don't use getdecls.
(record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL.
* c-objc-common.c (c_objc_common_finish_file): Don't use getdecls.
cp:
* cp-lang.c: Don't define LANG_HOOKS_BUILTIN_TYPE_DECLS.
* cp-tree.h: Don't declare cxx_builtin_type_decls.
* decl.c (builtin_type_decls, cxx_builtin_type_decls): Delete.
(record_builtin_type): Call debug_hooks->type_decl on the TYPE_DECL.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77730 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/xcoffout.c')
-rw-r--r-- | gcc/xcoffout.c | 94 |
1 files changed, 53 insertions, 41 deletions
diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index 324c5d5fa5b..447da746ac4 100644 --- a/gcc/xcoffout.c +++ b/gcc/xcoffout.c @@ -112,59 +112,71 @@ const char *xcoff_lastfile; #define ASM_OUTPUT_LBE(FILE,LINENUM,BLOCKNUM) \ fprintf (FILE, "\t.eb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)) -static void assign_type_number (tree, const char *, int); static void xcoffout_block (tree, int, tree); static void xcoffout_source_file (FILE *, const char *, int); /* Support routines for XCOFF debugging info. */ -/* Assign NUMBER as the stabx type number for the type described by NAME. - Search all decls in the list SYMS to find the type NAME. */ - -static void -assign_type_number (tree syms, const char *name, int number) +struct xcoff_type_number { - tree decl; - - for (decl = syms; decl; decl = TREE_CHAIN (decl)) - if (DECL_NAME (decl) - && strcmp (IDENTIFIER_POINTER (DECL_NAME (decl)), name) == 0) - { - TREE_ASM_WRITTEN (decl) = 1; - TYPE_SYMTAB_ADDRESS (TREE_TYPE (decl)) = number; - } -} - -/* Setup gcc primitive types to use the XCOFF built-in type numbers where - possible. */ - -void -xcoff_output_standard_types (tree syms) -{ - /* Handle built-in C types here. */ - - assign_type_number (syms, "int", -1); - assign_type_number (syms, "char", -2); - assign_type_number (syms, "short int", -3); - assign_type_number (syms, "long int", (TARGET_64BIT ? -31 : -4)); - assign_type_number (syms, "unsigned char", -5); - assign_type_number (syms, "signed char", -6); - assign_type_number (syms, "short unsigned int", -7); - assign_type_number (syms, "unsigned int", -8); + const char *name; + int number; +}; +static const struct xcoff_type_number xcoff_type_numbers[] = { + { "int", -1 }, + { "char", -2 }, + { "short int", -3 }, + { "long int", -4 }, /* fiddled to -31 if 64 bits */ + { "unsigned char", -5 }, + { "signed char", -6 }, + { "short unsigned int", -7 }, + { "unsigned int", -8 }, /* No such type "unsigned". */ - assign_type_number (syms, "long unsigned int", (TARGET_64BIT ? -32 : -10)); - assign_type_number (syms, "void", -11); - assign_type_number (syms, "float", -12); - assign_type_number (syms, "double", -13); - assign_type_number (syms, "long double", -14); + { "long unsigned int", -10 }, /* fiddled to -32 if 64 bits */ + { "void", -11 }, + { "float", -12 }, + { "double", -13 }, + { "long double", -14 }, /* Pascal and Fortran types run from -15 to -29. */ - assign_type_number (syms, "wchar", -30); - assign_type_number (syms, "long long int", -31); - assign_type_number (syms, "long long unsigned int", -32); + { "wchar", -30 }, /* XXX Should be "wchar_t" ? */ + { "long long int", -31 }, + { "long long unsigned int", -32 }, /* Additional Fortran types run from -33 to -37. */ /* ??? Should also handle built-in C++ and Obj-C types. There perhaps aren't any that C doesn't already have. */ +}; + +/* Returns an XCOFF fundamental type number for DECL (assumed to be a + TYPE_DECL), or 0 if dbxout.c should assign a type number normally. */ +int +xcoff_assign_fundamental_type_number (tree decl) +{ + const char *name = IDENTIFIER_POINTER (DECL_NAME (decl)); + size_t i; + + /* Do not waste time searching the list for non-intrinsic types. */ + if (DECL_SOURCE_LINE (decl) > 0) + return 0; + + /* Linear search, blech, but the list is too small to bother + doing anything else. */ + for (i = 0; i < ARRAY_SIZE (xcoff_type_numbers); i++) + if (!strcmp (xcoff_type_numbers[i].name, name)) + goto found; + return 0; + + found: + /* -4 and -10 should be replaced with -31 and -32, respectively, + when used for a 64-bit type. */ + if (int_size_in_bytes (TREE_TYPE (decl)) == 8) + { + if (xcoff_type_numbers[i].number == -4) + return -31; + if (xcoff_type_numbers[i].number == -10) + return -32; + } + return xcoff_type_numbers[i].number; } /* Print an error message for unrecognized stab codes. */ |