This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Fixes a problem with the linker script parser not always handling the ! character in memort region a


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f0673d2040a49ecebfc0d3a03993d09fb4dd3e17

commit f0673d2040a49ecebfc0d3a03993d09fb4dd3e17
Author: Nick Clifton <nickc@redhat.com>
Date:   Fri Feb 27 16:19:57 2015 +0000

    Fixes a problem with the linker script parser not always handling the ! character in memort region attributes.
    
    	PR ld/17900
    	* ldlang.c (lang_set_flags): Allow exclamation mark to reverse the
    	sense of the following memory region attribute characters.

Diff:
---
 ld/ChangeLog |  6 ++++++
 ld/ldlang.c  | 10 +++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index 7db30ea..65aadc0 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-27  Nick Clifton  <nickc@redhat.com>
+
+	PR ld/17900
+	* ldlang.c (lang_set_flags): Allow exclamation mark to reverse the
+	sense of the following memory region attribute characters.
+
 2015-02-27  Alan Modra  <amodra@gmail.com>
 
 	* Makefile.am (ALL_EMULATION_SOURCES): Sort new h8300 entries.
diff --git a/ld/ldlang.c b/ld/ldlang.c
index ce333b4..8880821 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -6125,10 +6125,18 @@ lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
   flagword *ptr_flags;
 
   ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
+
   while (*flags)
     {
       switch (*flags)
 	{
+	  /* PR 17900: An exclamation mark in the attributes reverses
+	     the sense of any of the attributes that follow.  */
+	case '!':
+	  invert = ! invert;
+	  ptr_flags = invert ? &ptr->not_flags : &ptr->flags;
+	  break;
+
 	case 'A': case 'a':
 	  *ptr_flags |= SEC_ALLOC;
 	  break;
@@ -6151,7 +6159,7 @@ lang_set_flags (lang_memory_region_type *ptr, const char *flags, int invert)
 	  break;
 
 	default:
-	  einfo (_("%P%F: invalid syntax in flags\n"));
+	  einfo (_("%P%F: invalid character %c (%d) in flags\n"), * flags, * flags);
 	  break;
 	}
       flags++;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]