aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRobert Lipe <robertl@dgii.com>1998-01-13 22:27:40 +0000
committerJeff Law <law@gcc.gnu.org>1998-01-13 15:27:40 -0700
commit0e2b736c8077b268b5beb83fb6ab3745405a5407 (patch)
tree01c03d40cd731f60b59c224af8c1cbfc8606c2a0 /gcc
parenta3aa3d8c2c1d5551389125a3ee37f4e47c75de3d (diff)
downloadgcc-0e2b736c8077b268b5beb83fb6ab3745405a5407.zip
gcc-0e2b736c8077b268b5beb83fb6ab3745405a5407.tar.gz
gcc-0e2b736c8077b268b5beb83fb6ab3745405a5407.tar.bz2
* sco5.h (ASM_OUTPUT_SECTION_NAME): Refresh from ../svr4.h.
From-SVN: r17351
Diffstat (limited to 'gcc')
-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 ba1b6ae..6483c61 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 adc2317..6180bd3 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