Module: xenomai-forge Branch: next Commit: 44d83a876f0fdb3eb2f150f7b2fcf2821e479e12 URL: http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=44d83a876f0fdb3eb2f150f7b2fcf2821e479e12
Author: Philippe Gerum <r...@xenomai.org> Date: Tue Jul 1 21:23:52 2014 +0200 boilerplate: introduce __weak annotation --- include/boilerplate/compiler.h | 4 ++ lib/boilerplate/ancillaries.c | 8 +-- lib/cobalt/arch/nios2/features.c | 3 +- lib/cobalt/arch/sh/features.c | 7 +-- lib/cobalt/init.c | 6 +- lib/cobalt/printf.c | 4 +- lib/cobalt/wrappers.c | 117 +++++++++++++++++++------------------- lib/copperplate/wrappers.c | 4 +- lib/psos/task.c | 6 +- lib/vxworks/taskLib.c | 6 +- 10 files changed, 81 insertions(+), 84 deletions(-) diff --git a/include/boilerplate/compiler.h b/include/boilerplate/compiler.h index f73b326..2ee52b1 100644 --- a/include/boilerplate/compiler.h +++ b/include/boilerplate/compiler.h @@ -39,4 +39,8 @@ #define __must_check __attribute__((__warn_unused_result__)) #endif +#ifndef __weak +#define __weak __attribute__((__weak__)) +#endif + #endif /* _BOILERPLATE_COMPILER_H */ diff --git a/lib/boilerplate/ancillaries.c b/lib/boilerplate/ancillaries.c index 4e25fbb..09b88d9 100644 --- a/lib/boilerplate/ancillaries.c +++ b/lib/boilerplate/ancillaries.c @@ -81,8 +81,7 @@ void __panic(const char *name, const char *fmt, va_list ap) exit(1); } -__attribute__ ((weak)) -void error_hook(struct error_frame *ef) /* NULL in non-debug mode */ +__weak void error_hook(struct error_frame *ef) /* NULL in non-debug mode */ { } @@ -213,13 +212,12 @@ char *generate_name(char *buf, const char *radix, * pointer validation in their own context (e.g. copperplate). */ -__attribute__ ((weak)) -int pshared_check(void *heap, void *addr) +__weak int pshared_check(void *heap, void *addr) { return 1; } -__attribute__ ((weak)) void *__main_heap = NULL; +__weak void *__main_heap = NULL; #endif /* !CONFIG_XENO_PSHARED */ diff --git a/lib/cobalt/arch/nios2/features.c b/lib/cobalt/arch/nios2/features.c index 009d777..dd5838d 100644 --- a/lib/cobalt/arch/nios2/features.c +++ b/lib/cobalt/arch/nios2/features.c @@ -26,9 +26,10 @@ #include <cobalt/wrappers.h> #include <asm/xenomai/features.h> #include <asm/xenomai/uapi/fptest.h> +#include <boilerplate/compiler.h> #include "internal.h" -__attribute__((weak)) volatile void *__cobalt_nios2_hrclock = NULL; +__weak volatile void *__cobalt_nios2_hrclock = NULL; void cobalt_check_features(struct xnfeatinfo *finfo) { diff --git a/lib/cobalt/arch/sh/features.c b/lib/cobalt/arch/sh/features.c index e5104aa..38983f0 100644 --- a/lib/cobalt/arch/sh/features.c +++ b/lib/cobalt/arch/sh/features.c @@ -26,15 +26,14 @@ #include <limits.h> #include <cobalt/wrappers.h> #include <asm/xenomai/uapi/features.h> +#include <boilerplate/compiler.h> #include "internal.h" struct xnarch_tsc_area; -__attribute__((weak)) -volatile struct xnarch_tsc_area *__cobalt_sh_tsc = NULL; +__weak volatile struct xnarch_tsc_area *__cobalt_sh_tsc = NULL; -__attribute__((weak)) -volatile unsigned long *__cobalt_sh_tcnt = NULL; +__weak volatile unsigned long *__cobalt_sh_tcnt = NULL; static volatile void *map_kmem(unsigned long pa, unsigned int pagesz) { diff --git a/lib/cobalt/init.c b/lib/cobalt/init.c index 899f4d9..f00733d 100644 --- a/lib/cobalt/init.c +++ b/lib/cobalt/init.c @@ -44,11 +44,9 @@ * Single Unix specification</a> over the Cobalt core. */ -__attribute__ ((weak)) -int __cobalt_defer_init = 0; +__weak int __cobalt_defer_init = 0; -__attribute__ ((weak)) -int __cobalt_main_prio = -1; +__weak int __cobalt_main_prio = -1; int __cobalt_muxid = -1; diff --git a/lib/cobalt/printf.c b/lib/cobalt/printf.c index ba75ef5..32fdfd5 100644 --- a/lib/cobalt/printf.c +++ b/lib/cobalt/printf.c @@ -27,6 +27,7 @@ #include <unistd.h> #include <syslog.h> #include <nocore/atomic.h> +#include <boilerplate/compiler.h> #include "current.h" #include "internal.h" @@ -71,8 +72,7 @@ struct print_buffer { off_t read_pos; }; -__attribute__ ((weak)) -int __cobalt_print_bufsz = RT_PRINT_DEFAULT_BUFFER; +__weak int __cobalt_print_bufsz = RT_PRINT_DEFAULT_BUFFER; static struct print_buffer *first_buffer; static int buffers; diff --git a/lib/cobalt/wrappers.c b/lib/cobalt/wrappers.c index 55e120d..6fbdab4 100644 --- a/lib/cobalt/wrappers.c +++ b/lib/cobalt/wrappers.c @@ -41,42 +41,43 @@ #include <memory.h> #include <unistd.h> #include <malloc.h> +#include <boilerplate/compiler.h> /* sched */ -__attribute__ ((weak)) +__weak int __real_pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param) { return pthread_setschedparam(thread, policy, param); } -__attribute__ ((weak)) +__weak int __real_pthread_getschedparam(pthread_t thread, int *policy, struct sched_param *param) { return pthread_getschedparam(thread, policy, param); } -__attribute__ ((weak)) +__weak int __real_sched_yield(void) { return sched_yield(); } -__attribute__ ((weak)) +__weak int __real_sched_get_priority_min(int policy) { return sched_get_priority_min(policy); } -__attribute__ ((weak)) +__weak int __real_sched_get_priority_max(int policy) { return sched_get_priority_max(policy); } /* pthread */ -__attribute__ ((weak)) +__weak int __real_pthread_create(pthread_t *ptid_r, const pthread_attr_t * attr, void *(*start) (void *), void *arg) @@ -84,45 +85,45 @@ int __real_pthread_create(pthread_t *ptid_r, return pthread_create(ptid_r, attr, start, arg); } -__attribute__ ((weak)) +__weak int __real_pthread_kill(pthread_t ptid, int sig) { return pthread_kill(ptid, sig); } -__attribute__ ((weak)) +__weak int __real_pthread_join(pthread_t ptid, void **retval) { return pthread_join(ptid, retval); } /* semaphores */ -__attribute__ ((weak)) +__weak int __real_sem_init(sem_t * sem, int pshared, unsigned value) { return sem_init(sem, pshared, value); } -__attribute__ ((weak)) +__weak int __real_sem_destroy(sem_t * sem) { return sem_destroy(sem); } -__attribute__ ((weak)) +__weak int __real_sem_post(sem_t * sem) { return sem_post(sem); } -__attribute__ ((weak)) +__weak int __real_sem_wait(sem_t * sem) { return sem_wait(sem); } /* rtdm */ -__attribute__ ((weak)) +__weak int __real_open(const char *path, int oflag, ...) { va_list ap; @@ -137,19 +138,19 @@ int __real_open(const char *path, int oflag, ...) return open(path, oflag); } -__attribute__ ((weak)) +__weak int __real_socket(int protocol_family, int socket_type, int protocol) { return socket(protocol_family, socket_type, protocol); } -__attribute__ ((weak)) +__weak int __real_close(int fd) { return close(fd); } -__attribute__ ((weak)) +__weak int __real_ioctl(int fd, unsigned long int request, ...) { va_list ap; @@ -162,113 +163,113 @@ int __real_ioctl(int fd, unsigned long int request, ...) return ioctl(fd, request, arg); } -__attribute__ ((weak)) +__weak ssize_t __real_read(int fd, void *buf, size_t nbyte) { return read(fd, buf, nbyte); } -__attribute__ ((weak)) +__weak ssize_t __real_write(int fd, const void *buf, size_t nbyte) { return write(fd, buf, nbyte); } -__attribute__ ((weak)) +__weak ssize_t __real_recvmsg(int fd, struct msghdr * msg, int flags) { return recvmsg(fd, msg, flags); } -__attribute__ ((weak)) +__weak ssize_t __real_sendmsg(int fd, const struct msghdr * msg, int flags) { return sendmsg(fd, msg, flags); } -__attribute__ ((weak)) +__weak ssize_t __real_recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr * from, socklen_t * fromlen) { return recvfrom(fd, buf, len, flags, from, fromlen); } -__attribute__ ((weak)) +__weak ssize_t __real_sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr * to, socklen_t tolen) { return sendto(fd, buf, len, flags, to, tolen); } -__attribute__ ((weak)) +__weak ssize_t __real_recv(int fd, void *buf, size_t len, int flags) { return recv(fd, buf, len, flags); } -__attribute__ ((weak)) +__weak ssize_t __real_send(int fd, const void *buf, size_t len, int flags) { return send(fd, buf, len, flags); } -__attribute__ ((weak)) +__weak int __real_getsockopt(int fd, int level, int optname, void *optval, socklen_t * optlen) { return getsockopt(fd, level, optname, optval, optlen); } -__attribute__ ((weak)) +__weak int __real_setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen) { return setsockopt(fd, level, optname, optval, optlen); } -__attribute__ ((weak)) +__weak int __real_bind(int fd, const struct sockaddr *my_addr, socklen_t addrlen) { return bind(fd, my_addr, addrlen); } -__attribute__ ((weak)) +__weak int __real_connect(int fd, const struct sockaddr *serv_addr, socklen_t addrlen) { return connect(fd, serv_addr, addrlen); } -__attribute__ ((weak)) +__weak int __real_listen(int fd, int backlog) { return listen(fd, backlog); } -__attribute__ ((weak)) +__weak int __real_accept(int fd, struct sockaddr *addr, socklen_t * addrlen) { return accept(fd, addr, addrlen); } -__attribute__ ((weak)) +__weak int __real_getsockname(int fd, struct sockaddr *name, socklen_t * namelen) { return getsockname(fd, name, namelen); } -__attribute__ ((weak)) +__weak int __real_getpeername(int fd, struct sockaddr *name, socklen_t * namelen) { return getpeername(fd, name, namelen); } -__attribute__ ((weak)) +__weak int __real_shutdown(int fd, int how) { return shutdown(fd, how); } -__attribute__ ((weak)) +__weak int __real_select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, @@ -277,19 +278,19 @@ int __real_select (int __nfds, fd_set *__restrict __readfds, return select(__nfds, __readfds, __writefds, __exceptfds, __timeout); } -__attribute__ ((weak)) +__weak int __real_vfprintf(FILE *stream, const char *fmt, va_list args) { return vfprintf(stream, fmt, args); } -__attribute__ ((weak)) +__weak int __real_vprintf(const char *fmt, va_list args) { return vprintf(fmt, args); } -__attribute__ ((weak)) +__weak int __real_fprintf(FILE *stream, const char *fmt, ...) { va_list args; @@ -302,7 +303,7 @@ int __real_fprintf(FILE *stream, const char *fmt, ...) return rc; } -__attribute__ ((weak)) +__weak int __real_printf(const char *fmt, ...) { va_list args; @@ -317,13 +318,13 @@ int __real_printf(const char *fmt, ...) #ifdef CONFIG_XENO_FORTIFY -__attribute__ ((weak)) +__weak int __real___vfprintf_chk(FILE *stream, int level, const char *fmt, va_list ap) { return __vfprintf_chk(stream, level, fmt, ap); } -__attribute__ ((weak)) +__weak void __real___vsyslog_chk(int priority, int level, const char *fmt, va_list ap) { extern void __vsyslog_chk(int, int, const char *, va_list); @@ -333,13 +334,13 @@ void __real___vsyslog_chk(int priority, int level, const char *fmt, va_list ap) #endif -__attribute__ ((weak)) +__weak int __real_puts(const char *s) { return puts(s); } -__attribute__ ((weak)) +__weak int __real_fputs(const char *s, FILE *stream) { return fputs(s, stream); @@ -347,13 +348,13 @@ int __real_fputs(const char *s, FILE *stream) #if !defined(__UCLIBC__) || !defined(__STDIO_PUTC_MACRO) -__attribute__ ((weak)) +__weak int __real_fputc(int c, FILE *stream) { return fputc(c, stream); } -__attribute__ ((weak)) +__weak int __real_putchar(int c) { return putchar(c); @@ -361,19 +362,19 @@ int __real_putchar(int c) #endif /* !(__UCLIBC__ && __STDIO_PUTC_MACRO) */ -__attribute__ ((weak)) +__weak size_t __real_fwrite(const void *ptr, size_t sz, size_t nmemb, FILE *stream) { return fwrite(ptr, sz, nmemb, stream); } -__attribute__ ((weak)) +__weak int __real_fclose(FILE *stream) { return fclose(stream); } -__attribute__ ((weak)) +__weak void __real_syslog(int priority, const char *fmt, ...) { va_list args; @@ -383,68 +384,68 @@ void __real_syslog(int priority, const char *fmt, ...) va_end(args); } -__attribute__ ((weak)) +__weak void __real_vsyslog(int priority, const char *fmt, va_list ap) { vsyslog(priority, fmt, ap); } -__attribute__ ((weak)) +__weak void *__real_malloc(size_t size) { return malloc(size); } -__attribute__ ((weak)) +__weak void __real_free(void *ptr) { free(ptr); } -__attribute__ ((weak)) +__weak int __real_gettimeofday(struct timeval *tv, struct timezone *tz) { return gettimeofday(tv, tz); } -__attribute__ ((weak)) +__weak int __real_clock_gettime(clockid_t clk_id, struct timespec *tp) { return clock_gettime(clk_id, tp); } -__attribute__ ((weak)) +__weak int __real_sigwait(const sigset_t *set, int *sig) { return sigwait(set, sig); } -__attribute__ ((weak)) +__weak int __real_sigwaitinfo(const sigset_t *set, siginfo_t *si) { return sigwaitinfo(set, si); } -__attribute__ ((weak)) +__weak int __real_sigtimedwait(const sigset_t *set, siginfo_t *si, const struct timespec *timeout) { return sigtimedwait(set, si, timeout); } -__attribute__ ((weak)) +__weak int __real_sigpending(sigset_t *set) { return sigpending(set); } -__attribute__ ((weak)) +__weak int __real_kill(pid_t pid, int sig) { return kill(pid, sig); } -__attribute__ ((weak)) +__weak unsigned int __real_sleep(unsigned int seconds) { return sleep(seconds); diff --git a/lib/copperplate/wrappers.c b/lib/copperplate/wrappers.c index b031f08..9d2490c 100644 --- a/lib/copperplate/wrappers.c +++ b/lib/copperplate/wrappers.c @@ -15,13 +15,13 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <boilerplate/compiler.h> int main(int argc, char *const argv[]); int __real_main(int argc, char *const argv[]); -__attribute__((weak)) -int __real_main(int argc, char *const argv[]) +__weak int __real_main(int argc, char *const argv[]) { return main(argc, argv); } diff --git a/lib/psos/task.c b/lib/psos/task.c index e705a93..780d954 100644 --- a/lib/psos/task.c +++ b/lib/psos/task.c @@ -227,8 +227,7 @@ static void *task_trampoline(void *arg) * returned by this routine must be in the range [ 1 * .. sched_get_priority_max(SCHED_FIFO) - 1 ] inclusive. */ -__attribute__ ((weak)) -int psos_task_normalize_priority(unsigned long psos_prio) +__weak int psos_task_normalize_priority(unsigned long psos_prio) { if (psos_prio > threadobj_high_prio) panic("current implementation restricts pSOS " @@ -245,8 +244,7 @@ int psos_task_normalize_priority(unsigned long psos_prio) * weak and application code may be override the call and implement * the mapping differently. */ -__attribute__ ((weak)) -unsigned long psos_task_denormalize_priority(int core_prio) +__weak unsigned long psos_task_denormalize_priority(int core_prio) { /* Map a SCHED_FIFO priority level to a pSOS one. */ return core_prio; diff --git a/lib/vxworks/taskLib.c b/lib/vxworks/taskLib.c index c3840bd..be50e49 100644 --- a/lib/vxworks/taskLib.c +++ b/lib/vxworks/taskLib.c @@ -296,8 +296,7 @@ static void *task_trampoline(void *arg) * priorities returned by this routine must be in the range [ 1 * .. sched_get_priority_max(SCHED_FIFO) - 1 ] inclusive. */ -__attribute__ ((weak)) -int wind_task_normalize_priority(int wind_prio) +__weak int wind_task_normalize_priority(int wind_prio) { /* * SCHED_FIFO priorities are always 1-based regardless of the @@ -314,8 +313,7 @@ int wind_task_normalize_priority(int wind_prio) return threadobj_high_prio - wind_prio - 1; } -__attribute__ ((weak)) -int wind_task_denormalize_priority(int core_prio) +__weak int wind_task_denormalize_priority(int core_prio) { /* Map a SCHED_FIFO priority level to a VxWorks one. */ return threadobj_high_prio - core_prio - 1; _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git