From 7f27395d16254459d87430cfc00a02e2b276c396 Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Tue, 7 Oct 2003 09:36:34 +0000 Subject: [PATCH] cygming.h (READONLY_DATA_SECTION_ASM_OP): Define. * config/i386/cygming.h (READONLY_DATA_SECTION_ASM_OP): Define. (switch_to_section): Handle in_readonly_data. * config/i386/winnt.c (i386_pe_asm_named_section): Handle readonly data. From-SVN: r72189 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/cygming.h | 5 +++++ gcc/config/i386/winnt.c | 22 ++++++++++++++++------ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f8e3e054510..b6836c2e8c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-10-07 Danny Smith + + * config/i386/cygming.h (READONLY_DATA_SECTION_ASM_OP): Define. + (switch_to_section): Handle in_readonly_data. + * config/i386/winnt.c (i386_pe_asm_named_section): Handle + readonly data. + 2003-10-07 Richard Earnshaw * arm.md (cmpsi2_addneg): New ARM pattern. Add peephole2 to generate diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index d0e019e5805..dfdb4994927 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -132,6 +132,10 @@ drectve_section (void) \ } void drectve_section (void); +/* Older versions of gas don't handle 'r' as data. + Explicitly set data flag with 'd'. */ +#define READONLY_DATA_SECTION_ASM_OP "\t.section .rdata,\"dr\"" + /* Switch to SECTION (an `enum in_section'). ??? This facility should be provided by GCC proper. @@ -147,6 +151,7 @@ switch_to_section (enum in_section section, tree decl) \ { \ case in_text: text_section (); break; \ case in_data: data_section (); break; \ + case in_readonly_data: readonly_data_section (); break; \ case in_named: named_section (decl, NULL, 0); break; \ case in_drectve: drectve_section (); break; \ default: abort (); break; \ diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c index 666b9bd35b0..c1c54956fdc 100644 --- a/gcc/config/i386/winnt.c +++ b/gcc/config/i386/winnt.c @@ -710,12 +710,22 @@ i386_pe_asm_named_section (const char *name, unsigned int flags) { char flagchars[8], *f = flagchars; - if (flags & SECTION_CODE) - *f++ = 'x'; - if (flags & SECTION_WRITE) - *f++ = 'w'; - if (flags & SECTION_PE_SHARED) - *f++ = 's'; + if ((flags & (SECTION_CODE | SECTION_WRITE)) == 0) + /* readonly data */ + { + *f++ ='d'; /* This is necessary for older versions of gas. */ + *f++ ='r'; + } + else + { + if (flags & SECTION_CODE) + *f++ = 'x'; + if (flags & SECTION_WRITE) + *f++ = 'w'; + if (flags & SECTION_PE_SHARED) + *f++ = 's'; + } + *f = '\0'; fprintf (asm_out_file, "\t.section\t%s,\"%s\"\n", name, flagchars); -- 2.30.2