From: Alan Modra Date: Wed, 19 Aug 2015 03:02:54 +0000 (+0930) Subject: Remove link_info.pic X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=64d94ba01a4f56ac10bb277e66bb00d82bd97f10;p=deliverable%2Fbinutils-gdb.git 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 ): Simplify. --- diff --git a/include/ChangeLog b/include/ChangeLog index 5197abfffd..e4dad82d52 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,10 @@ +2015-08-19 Alan Modra + + * 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 * bfdlink.h (bfd_link_pde): Define. diff --git a/include/bfdlink.h b/include/bfdlink.h index 62309a5c68..458a768b21 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 67821df6fd..222ef3d160 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2015-08-19 Alan Modra + + * 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 ): Simplify. + 2015-08-18 H.J. Lu * ld/ldctor.c: Replace shared, executable, relocatable and pie diff --git a/ld/emultempl/aix.em b/ld/emultempl/aix.em index d4147f3bef..3975e2f097 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 e817b4707a..72e2f11406 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 8b30b1cf5d..c82e496d42 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 c026e35a5e..4422f19d0d 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 777d6e241a..ace1803356 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 5f7bbd8950..8e53255ecd 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;