From 2f4ddfcdd5538cf2ed1aa2f9f90d4601d2225b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20B=C5=B1rmen?= Date: Sat, 6 Jul 2024 23:11:44 +0200 Subject: [PATCH 1/4] OpenVAF-reloaded compiled model support. --- src/osdi/osdiregistry.c | 48 ++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/osdi/osdiregistry.c b/src/osdi/osdiregistry.c index cbab2624b..36472435a 100644 --- a/src/osdi/osdiregistry.c +++ b/src/osdi/osdiregistry.c @@ -312,6 +312,10 @@ static size_t calc_osdi_noise_off(const OsdiDescriptor *descr) { } \ const ty *name = (ty *)sym; +#define GET_PTR_NOCHECK(name, ty) \ + sym = GET_SYM(handle, STRINGIFY(name)); \ + const ty *name = (ty *)sym; + #define INIT_CALLBACK(name, ty) \ sym = GET_SYM(handle, STRINGIFY(name)); \ if (sym) { \ @@ -373,18 +377,40 @@ extern OsdiObjectFile load_object_file(const char *input) { return EMPTY_OBJECT; } + // Try to get OSDI_DESCRIPTOR_SIZE + GET_PTR_NOCHECK(OSDI_DESCRIPTOR_SIZE, uint32_t); + size_t descriptor_size; + + // Get major and minor OSDI version GET_CONST(OSDI_VERSION_MAJOR, uint32_t); GET_CONST(OSDI_VERSION_MINOR, uint32_t); - if (OSDI_VERSION_MAJOR != OSDI_VERSION_MAJOR_CURR || + if (OSDI_DESCRIPTOR_SIZE) { + // This must be openvaf-reloaded + // Must be version>=0.4 + if (!( + (OSDI_VERSION_MAJOR == 0 && OSDI_VERSION_MINOR >= 4) || + OSDI_VERSION_MAJOR >= 1 + )) { + printf("NGSPICE supports OpenVAF-reloaded OSDI >= 0.4 but \"%s\" uses v%d.%d!", + path, OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); + txfree(path); + return INVALID_OBJECT; + } + descriptor_size = *OSDI_DESCRIPTOR_SIZE; + } else { + // Original OpenVAF, must be version==0.3 + if (OSDI_VERSION_MAJOR != OSDI_VERSION_MAJOR_CURR || OSDI_VERSION_MINOR != OSDI_VERSION_MINOR_CURR) { - printf("NGSPICE only supports OSDI v%d.%d but \"%s\" targets v%d.%d!", - OSDI_VERSION_MAJOR_CURR, OSDI_VERSION_MINOR_CURR, path, - OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); - txfree(path); - return INVALID_OBJECT; + printf("NGSPICE only supports OSDI v%d.%d but \"%s\" uses v%d.%d!", + OSDI_VERSION_MAJOR_CURR, OSDI_VERSION_MINOR_CURR, path, + OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); + txfree(path); + return INVALID_OBJECT; + } + descriptor_size = sizeof(OsdiDescriptor); } - + GET_CONST(OSDI_NUM_DESCRIPTORS, uint32_t); GET_PTR(OSDI_DESCRIPTORS, OsdiDescriptor); @@ -420,10 +446,12 @@ extern OsdiObjectFile load_object_file(const char *input) { } OsdiRegistryEntry *dst = TMALLOC(OsdiRegistryEntry, OSDI_NUM_DESCRIPTORS); - + + char* desc_ptr = (char*)OSDI_DESCRIPTORS; for (uint32_t i = 0; i < OSDI_NUM_DESCRIPTORS; i++) { - const OsdiDescriptor *descr = &OSDI_DESCRIPTORS[i]; - + const OsdiDescriptor *descr = (OsdiDescriptor*)desc_ptr; + desc_ptr += descriptor_size; + uint32_t dt = descr->num_params + descr->num_opvars; bool has_m = false; uint32_t temp = descr->num_params + descr->num_opvars + 1; From fe97da873c1102ee169020d5a27702193d45fbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20B=C5=B1rmen?= Date: Sat, 6 Jul 2024 23:20:07 +0200 Subject: [PATCH 2/4] Minor change. --- src/osdi/osdiregistry.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/osdi/osdiregistry.c b/src/osdi/osdiregistry.c index 36472435a..10744cc1c 100644 --- a/src/osdi/osdiregistry.c +++ b/src/osdi/osdiregistry.c @@ -392,9 +392,9 @@ extern OsdiObjectFile load_object_file(const char *input) { (OSDI_VERSION_MAJOR == 0 && OSDI_VERSION_MINOR >= 4) || OSDI_VERSION_MAJOR >= 1 )) { - printf("NGSPICE supports OpenVAF-reloaded OSDI >= 0.4 but \"%s\" uses v%d.%d!", + printf("NGSPICE supports OpenVAF-reloaded OSDI>=0.4 but \"%s\" uses v%d.%d!", path, OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); - txfree(path); + txfree(path); return INVALID_OBJECT; } descriptor_size = *OSDI_DESCRIPTOR_SIZE; From 74ae0168725b3990dac7950f7b1c3184042f9bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20B=C5=B1rmen?= Date: Sat, 6 Jul 2024 23:20:58 +0200 Subject: [PATCH 3/4] Minor change. --- src/osdi/osdiregistry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osdi/osdiregistry.c b/src/osdi/osdiregistry.c index 10744cc1c..8bee5bd86 100644 --- a/src/osdi/osdiregistry.c +++ b/src/osdi/osdiregistry.c @@ -392,7 +392,7 @@ extern OsdiObjectFile load_object_file(const char *input) { (OSDI_VERSION_MAJOR == 0 && OSDI_VERSION_MINOR >= 4) || OSDI_VERSION_MAJOR >= 1 )) { - printf("NGSPICE supports OpenVAF-reloaded OSDI>=0.4 but \"%s\" uses v%d.%d!", + printf("NGSPICE supports OpenVAF-reloaded OSDI>=v0.4 but \"%s\" uses v%d.%d!", path, OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); txfree(path); return INVALID_OBJECT; From a65cc7f395fa846ff4355b5de18d880774226980 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81rp=C3=A1d=20B=C5=B1rmen?= Date: Sat, 6 Jul 2024 23:24:11 +0200 Subject: [PATCH 4/4] Minor change. --- src/osdi/osdiregistry.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/osdi/osdiregistry.c b/src/osdi/osdiregistry.c index 8bee5bd86..5e18807c3 100644 --- a/src/osdi/osdiregistry.c +++ b/src/osdi/osdiregistry.c @@ -392,7 +392,7 @@ extern OsdiObjectFile load_object_file(const char *input) { (OSDI_VERSION_MAJOR == 0 && OSDI_VERSION_MINOR >= 4) || OSDI_VERSION_MAJOR >= 1 )) { - printf("NGSPICE supports OpenVAF-reloaded OSDI>=v0.4 but \"%s\" uses v%d.%d!", + printf("NGSPICE supports OpenVAF-reloaded OSDI version >= 0.4 but \"%s\" uses v%d.%d!", path, OSDI_VERSION_MAJOR, OSDI_VERSION_MINOR); txfree(path); return INVALID_OBJECT;