Changeset a35a3d8 in mainline for uspace/lib/c/include/setjmp.h
- Timestamp:
- 2018-03-12T17:13:46Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b127e4af
- Parents:
- f3d47c97
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-12 17:13:46)
- git-committer:
- GitHub <noreply@…> (2018-03-12 17:13:46)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/include/setjmp.h
rf3d47c97 ra35a3d8 1 1 /* 2 * Copyright (c) 2008 Josef Cejka 3 * Copyright (c) 2013 Vojtech Horky 2 * Copyright (c) 2018 CZ.NIC, z.s.p.o. 4 3 * All rights reserved. 5 4 * … … 31 30 * @{ 32 31 */ 33 /** @file Long jump implementation.34 *35 * Implementation inspired by Jiri Zarevucky's code from36 * http://bazaar.launchpad.net/~zarevucky-jiri/helenos/stdc/revision/1544/uspace/lib/posix/setjmp.h37 */38 32 39 33 #ifndef LIBC_SETJMP_H_ 40 34 #define LIBC_SETJMP_H_ 41 35 42 #include <libarch/fibril .h>36 #include <libarch/fibril_context.h> 43 37 44 struct jmp_buf_interal { 45 context_t context; 46 int return_value; 47 }; 48 typedef struct jmp_buf_interal jmp_buf[1]; 38 typedef context_t jmp_buf[1]; 49 39 50 /* 51 * Specified as extern to minimize number of included headers 52 * because this file is used as is in libposix too. 53 */ 54 extern int context_save(context_t *ctx) __attribute__((returns_twice)); 40 extern int __setjmp(jmp_buf) __attribute__((returns_twice)); 41 extern _Noreturn void __longjmp(jmp_buf, int); 55 42 56 /** 57 * Save current environment (registers). 58 * 59 * This function may return twice. 60 * 61 * @param env Variable where to save the environment (of type jmp_buf). 62 * @return Whether the call returned after longjmp. 63 * @retval 0 Environment was saved, normal execution. 64 * @retval other longjmp was executed and returned here. 65 */ 66 #define setjmp(env) \ 67 ((env)[0].return_value = 0, \ 68 context_save(&(env)[0].context), \ 69 (env)[0].return_value) 70 71 extern void longjmp(jmp_buf env, int val) __attribute__((noreturn)); 43 #define setjmp __setjmp 44 extern _Noreturn void longjmp(jmp_buf, int); 72 45 73 46 #endif
Note:
See TracChangeset
for help on using the changeset viewer.