diff options
| author | Lenny Komow <lenny@lunarg.com> | 2017-06-16 16:42:46 -0600 |
|---|---|---|
| committer | Lenny Komow <lenny@lunarg.com> | 2017-07-05 15:02:04 -0600 |
| commit | e6f063f1f066b0053c85745d3e38287e4a81c369 (patch) | |
| tree | 88b885014a5256078c6e2c6a53ba293c1b5384fd /loader/asm_offset.c | |
| parent | e38bf2aa68d0853d589151aee7d608af9c897a61 (diff) | |
| download | usermoji-e6f063f1f066b0053c85745d3e38287e4a81c369.tar.xz | |
loader: Fix unknown phys dev terms on Windows
Change-Id: I04636aef6ebfcc092d58971574ba5fa0359e08d0
Diffstat (limited to 'loader/asm_offset.c')
| -rw-r--r-- | loader/asm_offset.c | 70 |
1 files changed, 61 insertions, 9 deletions
diff --git a/loader/asm_offset.c b/loader/asm_offset.c index cfc2f4dd..64639aee 100644 --- a/loader/asm_offset.c +++ b/loader/asm_offset.c @@ -23,6 +23,19 @@ #include <stdio.h> #include "loader.h" +#if !defined(_MSC_VER) || (_MSC_VER >= 1900) +#define SIZE_T_FMT "%-8zu" +#else +#define SIZE_T_FMT "%-8lu" +#endif + +struct ValueInfo +{ + const char *name; + size_t value; + const char *comment; +}; + int main(int argc, char **argv) { const char *assembler = NULL; for (int i = 0; i < argc; ++i) { @@ -36,23 +49,62 @@ int main(int argc, char **argv) { return 1; } + struct loader_instance instance; + size_t hash_offset = ((size_t) &instance.phys_dev_ext_disp_hash) - ((size_t) &instance); + struct loader_instance_dispatch_table disp; - size_t offset = (size_t) ((size_t) &disp.phys_dev_ext) - ((size_t) &disp); + size_t phys_dev_offset_dispatch = ((size_t) &disp.phys_dev_ext) - ((size_t) &disp); + + struct loader_physical_device_tramp phys_dev_tramp; + size_t phys_dev_offset_tramp = ((size_t) &phys_dev_tramp.phys_dev) - ((size_t) &phys_dev_tramp); + + struct loader_physical_device_term phys_dev_term; + size_t icd_term_offset = ((size_t) &phys_dev_term.this_icd_term) - ((size_t) &phys_dev_term); + size_t phys_dev_offset_term = ((size_t) &phys_dev_term.phys_dev) - ((size_t) &phys_dev_term); + + struct loader_icd_term icd_term; + size_t instance_offset = ((size_t) &icd_term.this_instance) - ((size_t) &icd_term); + size_t dispatch_offset = ((size_t) &icd_term.phys_dev_ext) - ((size_t) &icd_term); + + struct loader_dispatch_hash_entry hash; + size_t func_name_offset = ((size_t) &hash.func_name) - ((size_t) &hash); + + struct ValueInfo values[] = { + { .name = "VK_DEBUG_REPORT_ERROR_BIT_EXT", .value = (size_t) VK_DEBUG_REPORT_ERROR_BIT_EXT, + .comment = "The numerical value of the enum value 'VK_DEBUG_REPORT_ERROR_BIT_EXT'" }, + { .name = "PTR_SIZE", .value = sizeof(void*), + .comment = "The size of a pointer" }, + { .name = "HASH_SIZE", .value = sizeof(struct loader_dispatch_hash_entry), + .comment = "The size of a 'loader_dispatch_hash_entry' struct" }, + { .name = "HASH_OFFSET_INSTANCE", .value = hash_offset, + .comment = "The offset of 'phys_dev_ext_disp_hash' within a 'loader_instance' struct" }, + { .name = "PHYS_DEV_OFFSET_INST_DISPATCH", .value = phys_dev_offset_dispatch, + .comment = "The offset of 'phys_dev_ext' within in 'loader_instance_dispatch_table' struct" }, + { .name = "PHYS_DEV_OFFSET_PHYS_DEV_TRAMP", .value = phys_dev_offset_tramp, + .comment = "The offset of 'phys_dev' within a 'loader_physical_device_tramp' struct" }, + { .name = "ICD_TERM_OFFSET_PHYS_DEV_TERM", .value = icd_term_offset, + .comment = "The offset of 'this_icd_term' within a 'loader_physical_device_term' struct" }, + { .name = "PHYS_DEV_OFFSET_PHYS_DEV_TERM", .value = phys_dev_offset_term, + .comment = "The offset of 'phys_dev' within a 'loader_physical_device_term' struct" }, + { .name = "INSTANCE_OFFSET_ICD_TERM", .value = instance_offset, + .comment = "The offset of 'this_instance' within a 'loader_icd_term' struct" }, + { .name = "DISPATCH_OFFSET_ICD_TERM", .value = dispatch_offset, + .comment = "The offset of 'phys_dev_ext' within a 'loader_icd_term' struct" }, + { .name = "FUNC_NAME_OFFSET_HASH", .value = func_name_offset, + .comment = "The offset of 'func_name' within a 'loader_dispatch_hash_entry' struct" }, + }; FILE *file = fopen("gen_defines.asm", "w"); + fprintf(file, "\n"); if (!strcmp(assembler, "MASM")) { -#if !defined(_MSC_VER) || (_MSC_VER >= 1900) - fprintf(file, "\nPHYS_DEV_DISP_OFFSET equ %zu\n", offset); -#else - fprintf(file, "\nPHYS_DEV_DISP_OFFSET equ %lu\n", offset); -#endif + for (size_t i = 0; i < sizeof(values)/sizeof(values[0]); ++i) { + fprintf(file, "%-32s equ " SIZE_T_FMT "; %s\n", values[i].name, values[i].value, values[i].comment); + } } else if (!strcmp(assembler, "GAS")) { -#if !defined(_MSC_VER) - fprintf(file, "\n.set PHYS_DEV_DISP_OFFSET, %zu\n", offset); + fprintf(file, "\n.set PHYS_DEV_DISP_OFFSET, " SIZE_T_FMT "\n", phys_dev_offset_dispatch); #ifdef __x86_64__ fprintf(file, ".set X86_64, 1\n"); #endif // __x86_64__ -#endif // _MSC_VER } return fclose(file); } |
