The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/2975
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === The returns_twice attribute tells the compiler that a function may return more than one time. The compiler will ensure that all registers are dead before calling such a function and will emit a warning about the variables that may be clobbered after the second return from the function. Examples of such functions are setjmp and vfork. The longjmp-like counterpart of such function, if any, might need to be marked with the noreturn attribute. Signed-off-by: Christian Brauner <[email protected]>
From 633cb8bee31b0ce075adbe8a143f88f533605552 Mon Sep 17 00:00:00 2001 From: Christian Brauner <[email protected]> Date: Sat, 4 May 2019 13:35:51 +0200 Subject: [PATCH] compiler: add __returns_twice attribute The returns_twice attribute tells the compiler that a function may return more than one time. The compiler will ensure that all registers are dead before calling such a function and will emit a warning about the variables that may be clobbered after the second return from the function. Examples of such functions are setjmp and vfork. The longjmp-like counterpart of such function, if any, might need to be marked with the noreturn attribute. Signed-off-by: Christian Brauner <[email protected]> --- src/lxc/compiler.h | 4 ++++ src/lxc/raw_syscalls.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lxc/compiler.h b/src/lxc/compiler.h index 65457cb31b..9b0de394a5 100644 --- a/src/lxc/compiler.h +++ b/src/lxc/compiler.h @@ -59,6 +59,10 @@ # define __hot __attribute__((hot)) #endif +#ifndef __returns_twice +#define __returns_twice __attribute__((returns_twice)) +#endif + #define __cgfsng_ops #endif /* __LXC_COMPILER_H */ diff --git a/src/lxc/raw_syscalls.c b/src/lxc/raw_syscalls.c index a4db306919..2e15575870 100644 --- a/src/lxc/raw_syscalls.c +++ b/src/lxc/raw_syscalls.c @@ -9,6 +9,7 @@ #include <sys/syscall.h> #include <unistd.h> +#include "compiler.h" #include "config.h" #include "macro.h" #include "raw_syscalls.h" @@ -32,7 +33,7 @@ int lxc_raw_execveat(int dirfd, const char *pathname, char *const argv[], * The nice thing about this is that we get fork() behavior. That is * lxc_raw_clone() returns 0 in the child and the child pid in the parent. */ -pid_t lxc_raw_clone(unsigned long flags) +__returns_twice pid_t lxc_raw_clone(unsigned long flags) { /* * These flags don't interest at all so we don't jump through any hoops
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
