* PCH Target:: Validity checking for precompiled headers.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
decls will be emitted as weak symbols. The default is @code{false}.
@end deftypevr
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@deftypefn {Rust Target Hook} void TARGET_RUST_CPU_INFO (void)
+Declare all environmental CPU info and features relating to the target CPU
+using the function @code{rust_add_target_info}, which takes a string
+representing the feature key and a string representing the feature value.
+Configuration pairs predefined by this hook apply to all files that are being
+compiled.
+@end deftypefn
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
* PCH Target:: Validity checking for precompiled headers.
* C++ ABI:: Controlling C++ ABI changes.
* D Language and ABI:: Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
* Named Address Spaces:: Adding support for named address spaces
* Misc:: Everything else.
@end menu
@hook TARGET_D_TEMPLATES_ALWAYS_COMDAT
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@hook TARGET_RUST_CPU_INFO
+
@node Named Address Spaces
@section Adding support for named address spaces
@cindex named address spaces
void
rust_add_target_info (const char *key, const char *value)
{
- sorry ("TODO");
-
Rust::Session::get_instance ().options.target_data.insert_key_value_pair (
key, value);
}
#include "diagnostic.h"
#include "input.h"
#include "selftest.h"
-#include "target.h"
+#include "tm.h"
+#include "rust-target.h"
extern bool
saw_errors (void);
void
Session::init ()
{
+ // initialize target hooks
+ targetrustm.rust_cpu_info ();
+
+ // target-independent values that should exist in all targets
options.target_data.insert_key_value_pair ("target_pointer_width",
std::to_string (POINTER_SIZE));
options.target_data.insert_key_value_pair ("target_endian", BYTES_BIG_ENDIAN
#undef HOOK_PREFIX
#define HOOK_PREFIX "TARGET_"
+/* Environmental CPU info and features (e.g. endianness, pointer size) relating
+ to the target CPU. */
+DEFHOOK
+(rust_cpu_info,
+ "Declare all environmental CPU info and features relating to the target CPU\n\
+using the function @code{rust_add_target_info}, which takes a string\n\
+representing the feature key and a string representing the feature value.\n\
+Configuration pairs predefined by this hook apply to all files that are being\n\
+compiled.",
+ void, (void),
+ hook_void_void)
+
/* Close the 'struct gcc_targetrustm' definition. */
HOOK_VECTOR_END (C90_EMPTY_HACK)
#include "rust-target.def"
+/* Used by target to add target-related info. */
+extern void
+rust_add_target_info (const char *, const char *);
+
/* Each target can provide their own. */
extern struct gcc_targetrustm targetrustm;