summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-01-13 22:27:40 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-01-13 22:27:40 +0000
commit0ce4e497e81fc3e280556978b9d24054e39f8aed (patch)
tree01c03d40cd731f60b59c224af8c1cbfc8606c2a0
parentb289a3910321628b021c494a77b525851bcdf2ec (diff)
downloadgcc-0ce4e497e81fc3e280556978b9d24054e39f8aed.tar.gz
* sco5.h (ASM_OUTPUT_SECTION_NAME): Refresh from ../svr4.h.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@17351 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/sco5.h57
2 files changed, 51 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ba1b6aed714..6483c61f2fb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Tue Jan 13 23:27:54 1998 Robert Lipe (robertl@dgii.com)
+
+ * sco5.h (ASM_OUTPUT_SECTION_NAME): Refresh from ../svr4.h.
+
Tue Jan 13 22:47:02 1998 Herman ten Brugge <herman@htbrug.net.HCC.nl>
* cppexp.c: Include gansidecl.h
diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h
index adc2317f449..6180bd33f34 100644
--- a/gcc/config/i386/sco5.h
+++ b/gcc/config/i386/sco5.h
@@ -508,19 +508,56 @@ do { \
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
+/*
+ * Compensate for the difference between ELF and COFF assembler syntax.
+ * Otherwise, this is cribbed from ../svr4.h.
+ * We rename 'gcc_except_table' to the shorter name in preparation
+ * for the day when we're ready to do DWARF2 eh unwinding under COFF
+ */
#undef ASM_OUTPUT_SECTION_NAME
#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
do { \
- char *snam = NAME ; \
- if (strcmp(NAME, ".gcc_except_table") == 0) snam = ".gccexc" ; \
- if (TARGET_ELF) \
- fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
- (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
- (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "aw"); \
- else \
- fprintf (FILE, ".section\t%s,\"%s\"\n", snam, \
- (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "x" : \
- (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "w"); \
+ static struct section_info \
+ { \
+ struct section_info *next; \
+ char *name; \
+ enum sect_enum {SECT_RW, SECT_RO, SECT_EXEC} type; \
+ } *sections; \
+ struct section_info *s; \
+ char *mode; \
+ enum sect_enum type; \
+ char *sname = NAME ; \
+ if (strcmp(NAME, ".gcc_except_table") == 0) sname = ".gccexc" ; \
+ \
+ for (s = sections; s; s = s->next) \
+ if (!strcmp (NAME, s->name)) \
+ break; \
+ \
+ if (DECL && TREE_CODE (DECL) == FUNCTION_DECL) \
+ type = SECT_EXEC, mode = (TARGET_ELF) ? "ax" : "x" ; \
+ else if (DECL && DECL_READONLY_SECTION (DECL, RELOC)) \
+ type = SECT_RO, mode = "a"; \
+ else \
+ type = SECT_RW, mode = (TARGET_ELF) ? "aw" : "w" ; \
+ \
+ if (s == 0) \
+ { \
+ s = (struct section_info *) xmalloc (sizeof (struct section_info)); \
+ s->name = xmalloc ((strlen (NAME) + 1) * sizeof (*NAME)); \
+ strcpy (s->name, NAME); \
+ s->type = type; \
+ s->next = sections; \
+ sections = s; \
+ fprintf (FILE, ".section\t%s,\"%s\"%s\n", sname, mode, \
+ (TARGET_ELF) ? ",@progbits" : "" ); \
+ } \
+ else \
+ { \
+ if (DECL && s->type != type) \
+ error_with_decl (DECL, "%s causes a section type conflict"); \
+ \
+ fprintf (FILE, ".section\t%s\n", sname); \
+ } \
} while (0)
#undef ASM_OUTPUT_SKIP