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] Remove link_info.pic


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

commit 64d94ba01a4f56ac10bb277e66bb00d82bd97f10
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Aug 19 12:32:54 2015 +0930

    Remove link_info.pic
    
    Adding type_pie to output_type allows us to remove link_info.pic and
    with some reordering of the enum, produces better code.
    
    include/
    	* bfdlink.h (enum output_type): Delete type_executable, add type_pde
    	and type_pie.  Reorder.
    	(struct bfd_link_info): Delete pic field.
    	(bfd_link_executable, bfd_link_pde, bfd_link_pie, bfd_link_pic): Adjust.
    ld/
    	* emultempl/aix.em: Don't set link_info.pic.
    	* emultempl/pe.em: Likewise.
    	* emultempl/pep.em: Likewise.
    	* emultempl/sunos.em: Likewise.
    	* lexsup.c (parse_args): Likewise.  Set type_pie for -pie.
    	* plugin.c (set_tv_header <LDPT_LINKER_OUTPUT>): Simplify.

Diff:
---
 include/ChangeLog     |  7 +++++++
 include/bfdlink.h     | 18 +++++++-----------
 ld/ChangeLog          |  9 +++++++++
 ld/emultempl/aix.em   |  1 -
 ld/emultempl/pe.em    |  5 +----
 ld/emultempl/pep.em   |  5 +----
 ld/emultempl/sunos.em |  1 -
 ld/lexsup.c           |  4 +---
 ld/plugin.c           |  9 ++++-----
 9 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/include/ChangeLog b/include/ChangeLog
index 5197abf..e4dad82 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,5 +1,12 @@
 2015-08-19  Alan Modra  <amodra@gmail.com>
 
+	* bfdlink.h (enum output_type): Delete type_executable, add type_pde
+	and type_pie.  Reorder.
+	(struct bfd_link_info): Delete pic field.
+	(bfd_link_executable, bfd_link_pde, bfd_link_pie, bfd_link_pic): Adjust.
+
+2015-08-19  Alan Modra  <amodra@gmail.com>
+
 	* bfdlink.h (bfd_link_pde): Define.
 
 2015-08-18  H.J. Lu  <hongjiu.lu@intel.com>
diff --git a/include/bfdlink.h b/include/bfdlink.h
index 62309a5..458a768 100644
--- a/include/bfdlink.h
+++ b/include/bfdlink.h
@@ -263,19 +263,18 @@ struct bfd_elf_version_tree;
 
 enum output_type
 {
-  type_executable = 0,
+  type_pde,
+  type_relocatable,
+  type_pie,
   type_dll,
-  type_relocatable
 };
 
-#define bfd_link_executable(info)  ((info)->type == type_executable)
+#define bfd_link_pde(info)	   ((info)->type == type_pde)
 #define bfd_link_dll(info)	   ((info)->type == type_dll)
 #define bfd_link_relocatable(info) ((info)->type == type_relocatable)
-#define bfd_link_pic(info)	   (info)->pic
-#define bfd_link_pie(info)	   (bfd_link_executable (info) \
-				    && bfd_link_pic (info))
-#define bfd_link_pde(info)	   (bfd_link_executable (info) \
-				    && !bfd_link_pic (info))
+#define bfd_link_pie(info)	   ((info)->type == type_pie)
+#define bfd_link_executable(info)  (bfd_link_pde (info) || bfd_link_pie (info))
+#define bfd_link_pic(info)	   (bfd_link_dll (info) || bfd_link_pie (info))
 
 /* This structure holds all the information needed to communicate
    between BFD and the linker when doing a link.  */
@@ -285,9 +284,6 @@ struct bfd_link_info
   /* Output type.  */
   ENUM_BITFIELD (output_type) type : 2;
 
-  /* TRUE if BFD should generate a position independent object.  */
-  unsigned int pic : 1;
-
   /* TRUE if BFD should pre-bind symbols in a shared object.  */
   unsigned int symbolic: 1;
 
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 67821df..222ef3d 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,12 @@
+2015-08-19  Alan Modra  <amodra@gmail.com>
+
+	* emultempl/aix.em: Don't set link_info.pic.
+	* emultempl/pe.em: Likewise.
+	* emultempl/pep.em: Likewise.
+	* emultempl/sunos.em: Likewise.
+	* lexsup.c (parse_args): Likewise.  Set type_pie for -pie.
+	* plugin.c (set_tv_header <LDPT_LINKER_OUTPUT>): Simplify.
+
 2015-08-18  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* ld/ldctor.c: Replace shared, executable, relocatable and pie
diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em
index d4147f3..3975e2f 100644
--- a/ld/emultempl/aix.em
+++ b/ld/emultempl/aix.em
@@ -533,7 +533,6 @@ gld${EMULATION_NAME}_handle_option (int optc)
       if (*optarg == 'S')
 	{
 	  link_info.type = type_dll;
-	  link_info.pic = TRUE;
 	  ++optarg;
 	}
       if (*optarg == '\0' || optarg[1] == '\0')
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index e817b47..72e2f11 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -1956,10 +1956,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
 
 	  /* def_file_print (stdout, pe_def_file); */
 	  if (pe_def_file->is_dll == 1)
-	    {
-	      link_info.type = type_dll;
-	      link_info.pic = 1;
-	    }
+	    link_info.type = type_dll;
 
 	  if (pe_def_file->base_address != (bfd_vma)(-1))
 	    {
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index 8b30b1c..c82e496 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -1789,10 +1789,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
 
 	  /* def_file_print (stdout, pep_def_file); */
 	  if (pep_def_file->is_dll == 1)
-	    {
-	      link_info.type = type_dll;
-	      link_info.pic = 1;
-	    }
+	    link_info.type = type_dll;
 
 	  if (pep_def_file->base_address != (bfd_vma)(-1))
 	    {
diff --git a/ld/emultempl/sunos.em b/ld/emultempl/sunos.em
index c026e35..4422f19 100644
--- a/ld/emultempl/sunos.em
+++ b/ld/emultempl/sunos.em
@@ -689,7 +689,6 @@ gld${EMULATION_NAME}_before_allocation (void)
 	      if (! found_assign)
 		{
 		  link_info.type = type_dll;
-		  link_info.pic = TRUE;
 		  break;
 		}
 	    }
diff --git a/ld/lexsup.c b/ld/lexsup.c
index 777d6e2..ace1803 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -1121,7 +1121,6 @@ parse_args (unsigned argc, char **argv)
 		einfo (_("%P%F: -r and -shared may not be used together\n"));
 
 	      link_info.type = type_dll;
-	      link_info.pic = TRUE;
 	      /* When creating a shared library, the default
 		 behaviour is to ignore any unresolved references.  */
 	      if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
@@ -1138,8 +1137,7 @@ parse_args (unsigned argc, char **argv)
 	      if (bfd_link_relocatable (&link_info))
 		einfo (_("%P%F: -r and -pie may not be used together\n"));
 
-	      link_info.type = type_executable;
-	      link_info.pic = TRUE;
+	      link_info.type = type_pie;
 	    }
 	  else
 	    einfo (_("%P%F: -pie not supported\n"));
diff --git a/ld/plugin.c b/ld/plugin.c
index 5f7bbd8..8e53255 100644
--- a/ld/plugin.c
+++ b/ld/plugin.c
@@ -872,11 +872,10 @@ set_tv_header (struct ld_plugin_tv *tv)
 	  TVU(val) = major * 100 + minor;
 	  break;
 	case LDPT_LINKER_OUTPUT:
-	  TVU(val) = (bfd_link_relocatable (&link_info)
-		      ? LDPO_REL
-		      : (bfd_link_executable (&link_info)
-			 ? (bfd_link_pic (&link_info) ? LDPO_PIE : LDPO_EXEC)
-			 : LDPO_DYN));
+	  TVU(val) = (bfd_link_relocatable (&link_info) ? LDPO_REL
+		      : bfd_link_pde (&link_info) ? LDPO_EXEC
+		      : bfd_link_pie (&link_info) ? LDPO_PIE
+		      : LDPO_DYN);
 	  break;
 	case LDPT_OUTPUT_NAME:
 	  TVU(string) = output_filename;


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