From 156621f3447ad88981645265931ab2e75aebce9f Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Thu, 19 Mar 2009 11:02:09 +0000 Subject: [PATCH] 2009-03-19 Kai Tietz * bfd-in2.h: Regenerated. * coffcode.h (sec_to_styp_flags): For pe-coff add SEC_READONLY for debugging sections and map memory read/write dependent on SEC_COFF_NOREAD. (styp_to_sec_flags): Set SEC_COFF_NOREAD for sections without memory read flags set. * section.c: Add SEC_COFF_NOREAD to section flags. --- bfd/ChangeLog | 10 ++++++++++ bfd/bfd-in2.h | 4 ++++ bfd/coffcode.h | 29 ++++++++++++++--------------- bfd/section.c | 4 ++++ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 945504c6792..dc5454b0338 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2009-03-19 Kai Tietz + + * bfd-in2.h: Regenerated. + * coffcode.h (sec_to_styp_flags): For pe-coff add SEC_READONLY + for debugging sections and map memory read/write dependent on + SEC_COFF_NOREAD. + (styp_to_sec_flags): Set SEC_COFF_NOREAD for sections + without memory read flags set. + * section.c: Add SEC_COFF_NOREAD to section flags. + 2009-03-19 Andreas Schwab * elf32-hppa.c (final_link_relocate): Cast bfd_vma values to long diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index a173f568ed1..78a5bd92d25 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1304,6 +1304,10 @@ typedef struct bfd_section TMS320C54X only. */ #define SEC_TIC54X_CLINK 0x20000000 + /* Indicate that section has the no read flag set. This happens + when memory read flag isn't set. */ +#define SEC_COFF_NOREAD 0x40000000 + /* End of section flags. */ /* Some internal packed boolean fields. */ diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 44ac08008d6..484fb6b7ec7 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -637,7 +637,7 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags) /* FIXME: There is no gas syntax to specify the debug section flag. */ if (CONST_STRNEQ (sec_name, DOT_DEBUG) || CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)) - sec_flags = SEC_DEBUGGING; + sec_flags = SEC_DEBUGGING | SEC_READONLY; /* skip LOAD */ /* READONLY later */ @@ -666,19 +666,14 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags) /* skip LINK_DUPLICATES */ /* skip LINKER_CREATED */ - if (sec_flags & (SEC_ALLOC | SEC_LOAD)) - { - /* For now, the read/write bits are mapped onto SEC_READONLY, even - though the semantics don't quite match. The bits from the input - are retained in pei_section_data(abfd, section)->pe_flags. */ - styp_flags |= IMAGE_SCN_MEM_READ; /* Always readable. */ - if ((sec_flags & SEC_READONLY) == 0) - styp_flags |= IMAGE_SCN_MEM_WRITE; /* Invert READONLY for write. */ - if (sec_flags & SEC_CODE) - styp_flags |= IMAGE_SCN_MEM_EXECUTE; /* CODE->EXECUTE. */ - if (sec_flags & SEC_COFF_SHARED) - styp_flags |= IMAGE_SCN_MEM_SHARED; /* Shared remains meaningful. */ - } + if ((sec_flags & SEC_COFF_NOREAD) == 0) + styp_flags |= IMAGE_SCN_MEM_READ; /* Invert NOREAD for read. */ + if ((sec_flags & SEC_READONLY) == 0) + styp_flags |= IMAGE_SCN_MEM_WRITE; /* Invert READONLY for write. */ + if (sec_flags & SEC_CODE) + styp_flags |= IMAGE_SCN_MEM_EXECUTE; /* CODE->EXECUTE. */ + if (sec_flags & SEC_COFF_SHARED) + styp_flags |= IMAGE_SCN_MEM_SHARED; /* Shared remains meaningful. */ return styp_flags; } @@ -1117,6 +1112,10 @@ styp_to_sec_flags (bfd *abfd, /* Assume read only unless IMAGE_SCN_MEM_WRITE is specified. */ sec_flags = SEC_READONLY; + /* If section disallows read, then set the NOREAD flag. */ + if ((styp_flags & IMAGE_SCN_MEM_READ) == 0) + sec_flags |= SEC_COFF_NOREAD; + /* Process each flag bit in styp_flags in turn. */ while (styp_flags) { @@ -1149,7 +1148,7 @@ styp_to_sec_flags (bfd *abfd, break; #endif case IMAGE_SCN_MEM_READ: - /* Ignored, assume it always to be true. */ + sec_flags &= ~SEC_COFF_NOREAD; break; case IMAGE_SCN_TYPE_NO_PAD: /* Skip. */ diff --git a/bfd/section.c b/bfd/section.c index d804dd614b7..5a335a62909 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -343,6 +343,10 @@ CODE_FRAGMENT . TMS320C54X only. *} .#define SEC_TIC54X_CLINK 0x20000000 . +. {* Indicate that section has the no read flag set. This happens +. when memory read flag isn't set. *} +.#define SEC_COFF_NOREAD 0x40000000 +. . {* End of section flags. *} . . {* Some internal packed boolean fields. *} -- 2.30.2