about summary refs log tree commit diff stats
path: root/src/libtools/obstack.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-02-02 16:39:01 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-02-02 16:39:01 +0100
commit87b66b8db89a28b641553d9d471b3b9aab67d5f7 (patch)
tree467ecfdd195f677ee2aecdfc6c8d6b1dd1be972e /src/libtools/obstack.c
parenta4ffa3de7ac52dd8acfd3df863095f1651f6d93b (diff)
downloadbox64-87b66b8db89a28b641553d9d471b3b9aab67d5f7.tar.gz
box64-87b66b8db89a28b641553d9d471b3b9aab67d5f7.zip
Don't wrap struct obstack, alignment should be the same (for #504)
Diffstat (limited to 'src/libtools/obstack.c')
-rwxr-xr-xsrc/libtools/obstack.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/libtools/obstack.c b/src/libtools/obstack.c
index 3ebd770a..42b93569 100755
--- a/src/libtools/obstack.c
+++ b/src/libtools/obstack.c
@@ -107,7 +107,7 @@ static void* reverse_freefunFct(library_t* lib, void* fct)
 }
 
 #undef SUPER
-
+#if 0
 struct i386_obstack
 {
   long	chunk_size;
@@ -160,7 +160,6 @@ void from_i386_obstack(struct i386_obstack *_i386, struct obstack *native)
     native->freefun = reverse_freefunFct(my_context->libclib, _i386->freefun);
 }
 #undef SUPER
-
 EXPORT int my__obstack_begin(struct i386_obstack * obstack, size_t size, size_t alignment, void* chunkfun, void* freefun)
 {
     struct obstack native = {0};
@@ -201,6 +200,37 @@ EXPORT int32_t my_obstack_vprintf(x64emu_t* emu, struct i386_obstack* obstack, v
     to_i386_obstack(obstack, &native);  //usefull??
     return r;
 }
+#else
+
+EXPORT int my__obstack_begin(struct obstack * obstack, size_t size, size_t alignment, void* chunkfun, void* freefun)
+{
+    int ret = _obstack_begin(obstack, size, alignment, findchunkfunFct(chunkfun), findfreefunFct(freefun));
+    return ret;
+}
+
+EXPORT void my_obstack_free(struct obstack * obstack, void* block)
+{
+    obstack_free(obstack, block);
+}
+EXPORT void my__obstack_free(struct obstack * obstack, void* block) __attribute__((alias("my_obstack_free")));
+
+EXPORT void my__obstack_newchunk(x64emu_t* emu, struct obstack* obstack, int s)
+{
+    _obstack_newchunk(obstack, s);
+}
+
+EXPORT int32_t my_obstack_vprintf(x64emu_t* emu, struct obstack* obstack, void* fmt, x64_va_list_t V)
+{
+    #ifdef CONVERT_VALIST
+    CONVERT_VALIST(V);
+    #else
+    myStackAlignValist(emu, (const char*)fmt, emu->scratch, V);
+    PREPARE_VALIST;
+    #endif
+    int r = obstack_vprintf(obstack, (const char*)fmt, VARARGS);
+    return r;
+}
+#endif
 
 EXPORT void* my_obstack_alloc_failed_handler = NULL;
 void* ref_obstack_alloc_failed_handler = NULL;