}
void
+parse_double(const char* option_name, const char* arg, double* retval)
+{
+ char* endptr;
+ *retval = strtod(arg, &endptr);
+ if (*endptr != '\0')
+ gold_fatal(_("%s: invalid option value "
+ "(expected a floating point number): %s"),
+ option_name, arg);
+}
+
+void
parse_string(const char* option_name, const char* arg, const char** retval)
{
if (*arg == '\0')
&& (this->shared() || this->relocatable()))
gold_fatal(_("binary output format not compatible with -shared or -r"));
+ if (this->user_set_hash_bucket_empty_fraction()
+ && (this->hash_bucket_empty_fraction() < 0.0
+ || this->hash_bucket_empty_fraction() >= 1.0))
+ gold_fatal(_("--hash-bucket-empty-fraction value %g out of range "
+ "[0.0, 1.0)"),
+ this->hash_bucket_empty_fraction());
+
// FIXME: we can/should be doing a lot more sanity checking here.
}
parse_uint(const char* option_name, const char* arg, int* retval);
extern void
-parse_uint64(const char* option_name, const char* arg, uint64_t *retval);
+parse_uint64(const char* option_name, const char* arg, uint64_t* retval);
+
+extern void
+parse_double(const char* option_name, const char* arg, double* retval);
extern void
parse_string(const char* option_name, const char* arg, const char** retval);
#default_value__, helpstring__, helparg__, \
uint64_t, uint64_t, options::parse_uint64)
+#define DEFINE_double(varname__, dashes__, shortname__, default_value__, \
+ helpstring__, helparg__) \
+ DEFINE_var(varname__, dashes__, shortname__, default_value__, \
+ #default_value__, helpstring__, helparg__, \
+ double, double, options::parse_double)
+
#define DEFINE_string(varname__, dashes__, shortname__, default_value__, \
helpstring__, helparg__) \
DEFINE_var(varname__, dashes__, shortname__, default_value__, \
DEFINE_string(soname, options::ONE_DASH, 'h', NULL,
N_("Set shared library name"), N_("FILENAME"));
+ DEFINE_double(hash_bucket_empty_fraction, options::TWO_DASHES, '\0', 0.0,
+ N_("Min fraction of empty buckets in dynamic hash"),
+ N_("FRACTION"));
+
DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "sysv",
N_("Dynamic hash style"), N_("[sysv,gnu,both]"),
{"sysv", "gnu", "both"});