1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-22 21:23:07 +03:00
Ivan Grokhotkov d7d98d03ca Use libc from newlib (#1752)
* Use newlib libc library

This change adds libcmin.a, which is created from newlib libc by selectively removing some of the object files (mostly related to heap management).
The list of files is available in tools/sdk/lib/make_libcmin.sh. Files which are not needed are commented out.
This change adds support for various functions which were missing, like sscanf, strftime, etc.

* Fix some of the time functions

* Redirect stdout to serial

* Implement __putc_r

* Switch to custom newlib build

Built from https://github.com/igrr/newlib-xtensa using:
./configure --with-newlib --enable-multilib --disable-newlib-io-c99-formats --enable-newlib-supplied-syscalls --enable-target-optspace --program-transform-name="s&^&xtensa-lx106-elf-&" --disable-option-checking --with-target-subdir=xtensa-lx106-elf --target=xtensa-lx106-elf --enable-newlib-nano-formatted-io --enable-newlib-reent-small  --prefix=path-to-arduino-core/tools/sdk/libc
CROSS_CFLAGS="-DMALLOC_PROVIDED -DSIGNAL_PROVIDED -DABORT_PROVIDED" make
make install

* Update tests
2016-06-23 17:27:57 +08:00

51 lines
1.8 KiB
C

#ifndef _XTENSA_LOCK_H__
#define _XTENSA_LOCK_H__
/* generic lock implementation.
Weak linked stub _lock functions in lock.c, can be
replaced with a lock implementation at link time.
*/
typedef int _lock_t;
typedef _lock_t _LOCK_RECURSIVE_T;
typedef _lock_t _LOCK_T;
#include <_ansi.h>
/* NOTE: some parts of newlib statically initialise locks via
__LOCK_INIT, some initialise at runtime via __lock_init. So need to
support possibility that a _lock_t is null during first call to
_lock_acquire or _lock_try_acquire.
Lock functions all take a pointer to the _lock_t entry, so the
value stored there can be manipulated.
*/
#define __LOCK_INIT(CLASS,NAME) CLASS _lock_t NAME = 0;
#define __LOCK_INIT_RECURSIVE(CLASS,NAME) CLASS _lock_t NAME = 0;
void _lock_init(_lock_t *lock);
void _lock_init_recursive(_lock_t *lock);
void _lock_close(_lock_t *lock);
void _lock_close_recursive(_lock_t *lock);
void _lock_acquire(_lock_t *lock);
void _lock_acquire_recursive(_lock_t *lock);
int _lock_try_acquire(_lock_t *lock);
int _lock_try_acquire_recursive(_lock_t *lock);
void _lock_release(_lock_t *lock);
void _lock_release_recursive(_lock_t *lock);
#define __lock_init(lock) _lock_init(&(lock))
#define __lock_init_recursive(lock) _lock_init_recursive(&(lock))
#define __lock_close(lock) _lock_close(&(lock))
#define __lock_close_recursive(lock) _lock_close_recursive(&(lock))
#define __lock_acquire(lock) _lock_acquire(&(lock))
#define __lock_acquire_recursive(lock) _lock_acquire_recursive(&(lock))
#define __lock_try_acquire(lock) _lock_try_acquire(&(lock))
#define __lock_try_acquire_recursive(lock) _lock_try_acquire_recursive(&(lock))
#define __lock_release(lock) _lock_release(&(lock))
#define __lock_release_recursive(lock) _lock_release_recursive(&(lock))
#endif /* _XTENSA_LOCK_H__ */