From 5ab368dd00b178f7af5f4f932af44585a4eba34e Mon Sep 17 00:00:00 2001 From: Xu Jun <693788454@qq.com> Date: Sun, 24 Apr 2022 10:39:18 +0800 Subject: [PATCH] Support va_args in libc-builtin (#1117) Implement vprintf/sprintf/snprintf wrapper functions for libc-builtin. --- .../libc-builtin/libc_builtin_wrapper.c | 3 +++ .../app/libc-builtin-sysroot/include/stdarg.h | 27 +++++++++++++++++++ .../share/defined-symbols.txt | 3 +++ 3 files changed, 33 insertions(+) create mode 100644 wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h diff --git a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c index f2c97afb..239ff38a 100644 --- a/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c +++ b/core/iwasm/libraries/libc-builtin/libc_builtin_wrapper.c @@ -1067,6 +1067,9 @@ static NativeSymbol native_symbols_libc_builtin[] = { REG_NATIVE_FUNC(printf, "($*)i"), REG_NATIVE_FUNC(sprintf, "($$*)i"), REG_NATIVE_FUNC(snprintf, "(*~$*)i"), + { "vprintf", printf_wrapper, "($*)i", NULL }, + { "vsprintf", sprintf_wrapper, "($$*)i", NULL }, + { "vsnprintf", snprintf_wrapper, "(*~$*)i", NULL }, REG_NATIVE_FUNC(puts, "($)i"), REG_NATIVE_FUNC(putchar, "(i)i"), REG_NATIVE_FUNC(memcmp, "(**~)i"), diff --git a/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h b/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h new file mode 100644 index 00000000..50959573 --- /dev/null +++ b/wamr-sdk/app/libc-builtin-sysroot/include/stdarg.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2019 Intel Corporation. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + */ + +#ifndef _WAMR_LIBC_STDARG_H +#define _WAMR_LIBC_STDARG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _VA_LIST +typedef __builtin_va_list va_list; +#define _VA_LIST +#endif +#define va_start(ap, param) __builtin_va_start(ap, param) +#define va_end(ap) __builtin_va_end(ap) +#define va_arg(ap, type) __builtin_va_arg(ap, type) + +#define __va_copy(d, s) __builtin_va_copy(d, s) + +#ifdef __cplusplus +} +#endif + +#endif /* end of _WAMR_LIBC_STDARG_H */ diff --git a/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt b/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt index 332aedb7..fc9c400a 100644 --- a/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt +++ b/wamr-sdk/app/libc-builtin-sysroot/share/defined-symbols.txt @@ -26,6 +26,9 @@ wasm_get_sys_tick_ms printf sprintf snprintf +vprintf +vsprintf +vsnprintf puts putchar memcmp