diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-02-10 18:40:14 -0700 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-02-12 16:31:13 -0700 |
| commit | 7250e7ecab292ac5debd1e11bed31e3fda034baa (patch) | |
| tree | 3c3f7c9b56037328992dda571783b0b14362889d /include | |
| parent | 22ec3a52c48963ef92a87fd32a9cc27dae617868 (diff) | |
| download | usermoji-7250e7ecab292ac5debd1e11bed31e3fda034baa.tar.xz | |
icd: add loader magic word to verify ICD is compatible
We wanted a more explicit way to determine if the driver
ICD being loaded is providing compatible objects. To do
that we check for a magic dword value at the beginning
of the object. Non-compliant ICDs will assert in the loader
or the loader's dispatch functions if an object does
not have the correct value.
Dispatch checks are debug only.
Diffstat (limited to 'include')
| -rw-r--r-- | include/xglIcd.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/include/xglIcd.h b/include/xglIcd.h new file mode 100644 index 00000000..3efffe6d --- /dev/null +++ b/include/xglIcd.h @@ -0,0 +1,32 @@ +#ifndef XGLICD_H +#define XGLICD_H + +#include <stdint.h> +#include <stdbool.h> +#include "xglPlatform.h" + +/* + * The ICD must reserve space for a pointer for the loader's dispatch + * table, at the start of <each object>. + * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro. + */ + +#define ICD_LOADER_MAGIC 0x01CDC0DE + +typedef union _XGL_LOADER_DATA { + uint32_t loaderMagic; + void *loaderData; +} XGL_LOADER_DATA; + +STATIC_INLINE void set_loader_magic_value(void *pNewObject) { + XGL_LOADER_DATA *loader_info = (XGL_LOADER_DATA *) pNewObject; + loader_info->loaderMagic = ICD_LOADER_MAGIC; +} + +STATIC_INLINE bool valid_loader_magic_value(void *pNewObject) { + const XGL_LOADER_DATA *loader_info = (XGL_LOADER_DATA *) pNewObject; + return loader_info->loaderMagic == ICD_LOADER_MAGIC; +} + +#endif // XGLICD_H + |
