mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-05 23:26:51 +08:00
elfcpp/
* elfcpp.h (DF_1_NOW, DF_1_GLOBAL, DF_1_GROUP, DF_1_NODELETE, DF_1_LOADFLTR, DF_1_INITFIRST, DF_1_NOOPEN, DF_1_ORIGIN, DF_1_DIRECT, DF_1_TRANS, DF_1_INTERPOSE, DF_1_NODEFLIB, DF_1_NODUMP, DF_1_CONLFAT): New enum constants. gold/ * options.h (DEFINE_enable): New macro. (new_dtags): New enable option. (initfirst, interpose, loadfltr, nodefaultlib, nodelete, nodlopen, nodump): New -z options. * layout.cc (Layout:finish_dynamic_section): If new dtags enabled, emit DT_RUNPATH. Also, emit a DT_FLAGS_1 containing any specified -z flags.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2008-04-16 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
* elfcpp.h (DF_1_NOW, DF_1_GLOBAL, DF_1_GROUP,
|
||||||
|
DF_1_NODELETE, DF_1_LOADFLTR, DF_1_INITFIRST,
|
||||||
|
DF_1_NOOPEN, DF_1_ORIGIN, DF_1_DIRECT, DF_1_TRANS,
|
||||||
|
DF_1_INTERPOSE, DF_1_NODEFLIB, DF_1_NODUMP,
|
||||||
|
DF_1_CONLFAT): New enum constants.
|
||||||
|
|
||||||
2008-04-15 David S. Miller <davem@davemloft.net>
|
2008-04-15 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
* sparc.h (EF_SPARC_EXT_MASK, EF_SPARC_32PLUS_MASK,
|
* sparc.h (EF_SPARC_EXT_MASK, EF_SPARC_32PLUS_MASK,
|
||||||
|
@ -688,6 +688,26 @@ enum DF
|
|||||||
DF_STATIC_TLS = 0x10
|
DF_STATIC_TLS = 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Flags found in the DT_FLAGS_1 dynamic element.
|
||||||
|
|
||||||
|
enum DF_1
|
||||||
|
{
|
||||||
|
DF_1_NOW = 0x1,
|
||||||
|
DF_1_GLOBAL = 0x2,
|
||||||
|
DF_1_GROUP = 0x4,
|
||||||
|
DF_1_NODELETE = 0x8,
|
||||||
|
DF_1_LOADFLTR = 0x10,
|
||||||
|
DF_1_INITFIRST = 0x20,
|
||||||
|
DF_1_NOOPEN = 0x40,
|
||||||
|
DF_1_ORIGIN = 0x80,
|
||||||
|
DF_1_DIRECT = 0x100,
|
||||||
|
DF_1_TRANS = 0x200,
|
||||||
|
DF_1_INTERPOSE = 0x400,
|
||||||
|
DF_1_NODEFLIB = 0x800,
|
||||||
|
DF_1_NODUMP = 0x1000,
|
||||||
|
DF_1_CONLFAT = 0x2000,
|
||||||
|
};
|
||||||
|
|
||||||
// Version numbers which appear in the vd_version field of a Verdef
|
// Version numbers which appear in the vd_version field of a Verdef
|
||||||
// structure.
|
// structure.
|
||||||
|
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2008-04-16 David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
* options.h (DEFINE_enable): New macro.
|
||||||
|
(new_dtags): New enable option.
|
||||||
|
(initfirst, interpose, loadfltr, nodefaultlib,
|
||||||
|
nodelete, nodlopen, nodump): New -z options.
|
||||||
|
* layout.cc (Layout:finish_dynamic_section): If new
|
||||||
|
dtags enabled, emit DT_RUNPATH. Also, emit a
|
||||||
|
DT_FLAGS_1 containing any specified -z flags.
|
||||||
|
|
||||||
2008-04-16 Ian Lance Taylor <iant@google.com>
|
2008-04-16 Ian Lance Taylor <iant@google.com>
|
||||||
|
|
||||||
* copy-relocs.cc: New file.
|
* copy-relocs.cc: New file.
|
||||||
|
@ -2459,6 +2459,8 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
|
|||||||
}
|
}
|
||||||
|
|
||||||
odyn->add_string(elfcpp::DT_RPATH, rpath_val);
|
odyn->add_string(elfcpp::DT_RPATH, rpath_val);
|
||||||
|
if (parameters->options().enable_new_dtags())
|
||||||
|
odyn->add_string(elfcpp::DT_RUNPATH, rpath_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look for text segments that have dynamic relocations.
|
// Look for text segments that have dynamic relocations.
|
||||||
@ -2509,6 +2511,28 @@ Layout::finish_dynamic_section(const Input_objects* input_objects,
|
|||||||
if (parameters->options().shared() && this->has_static_tls())
|
if (parameters->options().shared() && this->has_static_tls())
|
||||||
flags |= elfcpp::DF_STATIC_TLS;
|
flags |= elfcpp::DF_STATIC_TLS;
|
||||||
odyn->add_constant(elfcpp::DT_FLAGS, flags);
|
odyn->add_constant(elfcpp::DT_FLAGS, flags);
|
||||||
|
|
||||||
|
flags = 0;
|
||||||
|
if (parameters->options().initfirst())
|
||||||
|
flags |= elfcpp::DF_1_INITFIRST;
|
||||||
|
if (parameters->options().interpose())
|
||||||
|
flags |= elfcpp::DF_1_INTERPOSE;
|
||||||
|
if (parameters->options().loadfltr())
|
||||||
|
flags |= elfcpp::DF_1_LOADFLTR;
|
||||||
|
if (parameters->options().nodefaultlib())
|
||||||
|
flags |= elfcpp::DF_1_NODEFLIB;
|
||||||
|
if (parameters->options().nodelete())
|
||||||
|
flags |= elfcpp::DF_1_NODELETE;
|
||||||
|
if (parameters->options().nodlopen())
|
||||||
|
flags |= elfcpp::DF_1_NOOPEN;
|
||||||
|
if (parameters->options().nodump())
|
||||||
|
flags |= elfcpp::DF_1_NODUMP;
|
||||||
|
if (!parameters->options().shared())
|
||||||
|
flags &= ~(elfcpp::DF_1_INITFIRST
|
||||||
|
| elfcpp::DF_1_NODELETE
|
||||||
|
| elfcpp::DF_1_NOOPEN);
|
||||||
|
if (flags)
|
||||||
|
odyn->add_constant(elfcpp::DT_FLAGS_1, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The mapping of .gnu.linkonce section names to real section names.
|
// The mapping of .gnu.linkonce section names to real section names.
|
||||||
|
@ -286,6 +286,28 @@ struct Struct_special : public Struct_var
|
|||||||
}; \
|
}; \
|
||||||
Struct_no_##varname__ no_##varname__##_initializer_
|
Struct_no_##varname__ no_##varname__##_initializer_
|
||||||
|
|
||||||
|
#define DEFINE_enable(varname__, dashes__, shortname__, default_value__, \
|
||||||
|
helpstring__, no_helpstring__) \
|
||||||
|
DEFINE_var(enable_##varname__, dashes__, shortname__, default_value__, \
|
||||||
|
default_value__ ? "true" : "false", helpstring__, NULL, \
|
||||||
|
false, bool, bool, options::parse_bool) \
|
||||||
|
struct Struct_disable_##varname__ : public options::Struct_var \
|
||||||
|
{ \
|
||||||
|
Struct_disable_##varname__() : option("disable-" #varname__, \
|
||||||
|
dashes__, '\0', \
|
||||||
|
default_value__ ? "false" : "true", \
|
||||||
|
no_helpstring__, NULL, false, this) \
|
||||||
|
{ } \
|
||||||
|
\
|
||||||
|
void \
|
||||||
|
parse_to_value(const char*, const char*, \
|
||||||
|
Command_line*, General_options* options) \
|
||||||
|
{ options->set_enable_##varname__(false); } \
|
||||||
|
\
|
||||||
|
options::One_option option; \
|
||||||
|
}; \
|
||||||
|
Struct_disable_##varname__ disable_##varname__##_initializer_
|
||||||
|
|
||||||
#define DEFINE_uint(varname__, dashes__, shortname__, default_value__, \
|
#define DEFINE_uint(varname__, dashes__, shortname__, default_value__, \
|
||||||
helpstring__, helparg__) \
|
helpstring__, helparg__) \
|
||||||
DEFINE_var(varname__, dashes__, shortname__, default_value__, \
|
DEFINE_var(varname__, dashes__, shortname__, default_value__, \
|
||||||
@ -538,6 +560,10 @@ class General_options
|
|||||||
DEFINE_string(m, options::EXACTLY_ONE_DASH, 'm', "",
|
DEFINE_string(m, options::EXACTLY_ONE_DASH, 'm', "",
|
||||||
N_("Ignored for compatibility"), N_("EMULATION"));
|
N_("Ignored for compatibility"), N_("EMULATION"));
|
||||||
|
|
||||||
|
DEFINE_enable(new_dtags, options::EXACTLY_TWO_DASHES, '\0', false,
|
||||||
|
N_("Enable use of DT_RUNPATH and DT_FLAGS"),
|
||||||
|
N_("Disable use of DT_RUNPATH and DT_FLAGS"));
|
||||||
|
|
||||||
DEFINE_bool(noinhibit_exec, options::TWO_DASHES, '\0', false,
|
DEFINE_bool(noinhibit_exec, options::TWO_DASHES, '\0', false,
|
||||||
N_("Create an output file even if errors occur"), NULL);
|
N_("Create an output file even if errors occur"), NULL);
|
||||||
|
|
||||||
@ -653,6 +679,27 @@ class General_options
|
|||||||
N_("Set maximum page size to SIZE"), N_("SIZE"));
|
N_("Set maximum page size to SIZE"), N_("SIZE"));
|
||||||
DEFINE_bool(noexecstack, options::DASH_Z, '\0', false,
|
DEFINE_bool(noexecstack, options::DASH_Z, '\0', false,
|
||||||
N_("Mark output as not requiring executable stack"), NULL);
|
N_("Mark output as not requiring executable stack"), NULL);
|
||||||
|
DEFINE_bool(initfirst, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark DSO to be initialized first at runtime"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(interpose, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark object to interpose all DSOs but executable"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(loadfltr, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark object requiring immediate process"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(nodefaultlib, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark object not to use default search paths"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(nodelete, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark DSO non-deletable at runtime"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(nodlopen, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark DSO not available to dlopen"),
|
||||||
|
NULL);
|
||||||
|
DEFINE_bool(nodump, options::DASH_Z, '\0', false,
|
||||||
|
N_("Mark DSO not available to dldump"),
|
||||||
|
NULL);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef options::Dir_list Dir_list;
|
typedef options::Dir_list Dir_list;
|
||||||
|
Reference in New Issue
Block a user