mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-18 16:53:50 +08:00
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.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
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>
|
2015-08-19 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* bfdlink.h (bfd_link_pde): Define.
|
* bfdlink.h (bfd_link_pde): Define.
|
||||||
|
@ -263,19 +263,18 @@ struct bfd_elf_version_tree;
|
|||||||
|
|
||||||
enum output_type
|
enum output_type
|
||||||
{
|
{
|
||||||
type_executable = 0,
|
type_pde,
|
||||||
|
type_relocatable,
|
||||||
|
type_pie,
|
||||||
type_dll,
|
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_dll(info) ((info)->type == type_dll)
|
||||||
#define bfd_link_relocatable(info) ((info)->type == type_relocatable)
|
#define bfd_link_relocatable(info) ((info)->type == type_relocatable)
|
||||||
#define bfd_link_pic(info) (info)->pic
|
#define bfd_link_pie(info) ((info)->type == type_pie)
|
||||||
#define bfd_link_pie(info) (bfd_link_executable (info) \
|
#define bfd_link_executable(info) (bfd_link_pde (info) || bfd_link_pie (info))
|
||||||
&& bfd_link_pic (info))
|
#define bfd_link_pic(info) (bfd_link_dll (info) || bfd_link_pie (info))
|
||||||
#define bfd_link_pde(info) (bfd_link_executable (info) \
|
|
||||||
&& !bfd_link_pic (info))
|
|
||||||
|
|
||||||
/* This structure holds all the information needed to communicate
|
/* This structure holds all the information needed to communicate
|
||||||
between BFD and the linker when doing a link. */
|
between BFD and the linker when doing a link. */
|
||||||
@ -285,9 +284,6 @@ struct bfd_link_info
|
|||||||
/* Output type. */
|
/* Output type. */
|
||||||
ENUM_BITFIELD (output_type) type : 2;
|
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. */
|
/* TRUE if BFD should pre-bind symbols in a shared object. */
|
||||||
unsigned int symbolic: 1;
|
unsigned int symbolic: 1;
|
||||||
|
|
||||||
|
@ -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>
|
2015-08-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* ld/ldctor.c: Replace shared, executable, relocatable and pie
|
* ld/ldctor.c: Replace shared, executable, relocatable and pie
|
||||||
|
@ -533,7 +533,6 @@ gld${EMULATION_NAME}_handle_option (int optc)
|
|||||||
if (*optarg == 'S')
|
if (*optarg == 'S')
|
||||||
{
|
{
|
||||||
link_info.type = type_dll;
|
link_info.type = type_dll;
|
||||||
link_info.pic = TRUE;
|
|
||||||
++optarg;
|
++optarg;
|
||||||
}
|
}
|
||||||
if (*optarg == '\0' || optarg[1] == '\0')
|
if (*optarg == '\0' || optarg[1] == '\0')
|
||||||
|
@ -1956,10 +1956,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
|
|||||||
|
|
||||||
/* def_file_print (stdout, pe_def_file); */
|
/* def_file_print (stdout, pe_def_file); */
|
||||||
if (pe_def_file->is_dll == 1)
|
if (pe_def_file->is_dll == 1)
|
||||||
{
|
link_info.type = type_dll;
|
||||||
link_info.type = type_dll;
|
|
||||||
link_info.pic = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pe_def_file->base_address != (bfd_vma)(-1))
|
if (pe_def_file->base_address != (bfd_vma)(-1))
|
||||||
{
|
{
|
||||||
|
@ -1789,10 +1789,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
|
|||||||
|
|
||||||
/* def_file_print (stdout, pep_def_file); */
|
/* def_file_print (stdout, pep_def_file); */
|
||||||
if (pep_def_file->is_dll == 1)
|
if (pep_def_file->is_dll == 1)
|
||||||
{
|
link_info.type = type_dll;
|
||||||
link_info.type = type_dll;
|
|
||||||
link_info.pic = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pep_def_file->base_address != (bfd_vma)(-1))
|
if (pep_def_file->base_address != (bfd_vma)(-1))
|
||||||
{
|
{
|
||||||
|
@ -689,7 +689,6 @@ gld${EMULATION_NAME}_before_allocation (void)
|
|||||||
if (! found_assign)
|
if (! found_assign)
|
||||||
{
|
{
|
||||||
link_info.type = type_dll;
|
link_info.type = type_dll;
|
||||||
link_info.pic = TRUE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1121,7 +1121,6 @@ parse_args (unsigned argc, char **argv)
|
|||||||
einfo (_("%P%F: -r and -shared may not be used together\n"));
|
einfo (_("%P%F: -r and -shared may not be used together\n"));
|
||||||
|
|
||||||
link_info.type = type_dll;
|
link_info.type = type_dll;
|
||||||
link_info.pic = TRUE;
|
|
||||||
/* When creating a shared library, the default
|
/* When creating a shared library, the default
|
||||||
behaviour is to ignore any unresolved references. */
|
behaviour is to ignore any unresolved references. */
|
||||||
if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
|
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))
|
if (bfd_link_relocatable (&link_info))
|
||||||
einfo (_("%P%F: -r and -pie may not be used together\n"));
|
einfo (_("%P%F: -r and -pie may not be used together\n"));
|
||||||
|
|
||||||
link_info.type = type_executable;
|
link_info.type = type_pie;
|
||||||
link_info.pic = TRUE;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
einfo (_("%P%F: -pie not supported\n"));
|
einfo (_("%P%F: -pie not supported\n"));
|
||||||
|
@ -872,11 +872,10 @@ set_tv_header (struct ld_plugin_tv *tv)
|
|||||||
TVU(val) = major * 100 + minor;
|
TVU(val) = major * 100 + minor;
|
||||||
break;
|
break;
|
||||||
case LDPT_LINKER_OUTPUT:
|
case LDPT_LINKER_OUTPUT:
|
||||||
TVU(val) = (bfd_link_relocatable (&link_info)
|
TVU(val) = (bfd_link_relocatable (&link_info) ? LDPO_REL
|
||||||
? LDPO_REL
|
: bfd_link_pde (&link_info) ? LDPO_EXEC
|
||||||
: (bfd_link_executable (&link_info)
|
: bfd_link_pie (&link_info) ? LDPO_PIE
|
||||||
? (bfd_link_pic (&link_info) ? LDPO_PIE : LDPO_EXEC)
|
: LDPO_DYN);
|
||||||
: LDPO_DYN));
|
|
||||||
break;
|
break;
|
||||||
case LDPT_OUTPUT_NAME:
|
case LDPT_OUTPUT_NAME:
|
||||||
TVU(string) = output_filename;
|
TVU(string) = output_filename;
|
||||||
|
Reference in New Issue
Block a user