Changeset 615e83d in mainline for uspace/lib/c/include


Ignore:
Timestamp:
2018-03-08T18:25:31Z (8 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Children:
55f068c
Parents:
e0a4686
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-08 17:43:06)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-08 18:25:31)
Message:

Turn context_save/context_restore into standard setjmp/longjmp.

Location:
uspace/lib/c/include
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/context.h

    re0a4686 r615e83d  
    4646extern uintptr_t context_get_pc(context_t *ctx);
    4747
    48 // TODO: These should go away.
    49 
    50 extern int context_save(context_t *ctx) __attribute__((returns_twice));
    51 extern void context_restore(context_t *ctx) __attribute__((noreturn));
    52 
    5348#endif
    5449
  • uspace/lib/c/include/setjmp.h

    re0a4686 r615e83d  
    11/*
    2  * Copyright (c) 2008 Josef Cejka
    3  * Copyright (c) 2013 Vojtech Horky
     2 * Copyright (c) 2018 CZ.NIC, z.s.p.o.
    43 * All rights reserved.
    54 *
     
    3130 * @{
    3231 */
    33 /** @file Long jump implementation.
    34  *
    35  * Implementation inspired by Jiri Zarevucky's code from
    36  * http://bazaar.launchpad.net/~zarevucky-jiri/helenos/stdc/revision/1544/uspace/lib/posix/setjmp.h
    37  */
    3832
    3933#ifndef LIBC_SETJMP_H_
    4034#define LIBC_SETJMP_H_
    4135
    42 #include <libarch/fibril.h>
     36#include <libarch/fibril_context.h>
    4337
    44 struct jmp_buf_interal {
    45         context_t context;
    46         int return_value;
    47 };
    48 typedef struct jmp_buf_interal jmp_buf[1];
     38typedef context_t jmp_buf[1];
    4939
    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));
    55 
    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));
     40extern int setjmp(jmp_buf) __attribute__((returns_twice));
     41extern void longjmp(jmp_buf, int) __attribute__((noreturn));
     42extern void __longjmp(jmp_buf, int) __attribute__((noreturn));
    7243
    7344#endif
Note: See TracChangeset for help on using the changeset viewer.