aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2015-08-19 12:32:54 +0930
committerAlan Modra <amodra@gmail.com>2015-08-19 12:53:54 +0930
commit64d94ba01a4f56ac10bb277e66bb00d82bd97f10 (patch)
tree62c874d41a10602671ff90819aef826e06ed57c5
parent3cbc1e5e68341e53a03fe7e9d38fc02e0d78c418 (diff)
downloadgdb-64d94ba01a4f56ac10bb277e66bb00d82bd97f10.zip
gdb-64d94ba01a4f56ac10bb277e66bb00d82bd97f10.tar.gz
gdb-64d94ba01a4f56ac10bb277e66bb00d82bd97f10.tar.bz2
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.
-rw-r--r--include/ChangeLog7
-rw-r--r--include/bfdlink.h18
-rw-r--r--ld/ChangeLog9
-rw-r--r--ld/emultempl/aix.em1
-rw-r--r--ld/emultempl/pe.em5
-rw-r--r--ld/emultempl/pep.em5
-rw-r--r--ld/emultempl/sunos.em1
-rw-r--r--ld/lexsup.c4
-rw-r--r--ld/plugin.c9
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;