Changes in / [3b10ae36:42964a7] in mainline
- Location:
- uspace
- Files:
-
- 20 added
- 10 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/Makefile
r3b10ae36 r42964a7 67 67 app/redir \ 68 68 app/rcutest \ 69 app/rcubench \ 69 70 app/sbi \ 70 71 app/sportdmp \ -
uspace/Makefile.common
r3b10ae36 r42964a7 35 35 # DEFS compiler defines 36 36 # EXTRA_CFLAGS additional flags to pass to C compiler 37 # LINKER_SCRIPT linker script 37 38 # PRE_DEPEND targets required for dependency check 38 39 # … … 152 153 BASE_LIBS += $(LIBSOFTFLOAT_PREFIX)/libsoftfloat.a $(LIBSOFTINT_PREFIX)/libsoftint.a 153 154 154 ifneq ($(LINK_DYNAMIC),y) 155 ifeq ($(LINK_DYNAMIC),y) 156 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld 157 else 155 158 LDFLAGS += -static 156 endif 159 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld 160 endif 161 162 LIB_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld 157 163 158 164 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS) … … 255 261 endif 256 262 257 COMMON_CXXFLAGS = $(COMMON_CFLAGS) -fno-exceptions263 COMMON_CXXFLAGS = $(COMMON_CFLAGS) 258 264 HELENOS_CXXFLAGS = \ 259 265 -std=c++17 -frtti \ … … 345 351 346 352 ifneq ($(filter %.cpp %.cc %.cxx, $(SOURCES)),) 347 $(BINARY): $( OBJECTS) $(LIBTAGS)348 $(CXX) $(CXXFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) - Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(CXX_BASE_LIBS)349 else 350 $(BINARY): $( OBJECTS) $(LIBTAGS)351 $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) - Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(BASE_LIBS)353 $(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBTAGS) 354 $(CXX) $(CXXFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(CXX_BASE_LIBS) 355 else 356 $(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBTAGS) 357 $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(BASE_LIBS) 352 358 endif 353 359 … … 355 361 356 362 ifneq ($(TEST_BINARY),) 357 $(TEST_BINARY): $( TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBTAGS)358 $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) - Wl,-Map,$@.map -o $@ $(START_FILES) $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBARGS) $(BASE_LIBS)363 $(TEST_BINARY): $(LINKER_SCRIPT) $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBTAGS) 364 $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ $(START_FILES) $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBARGS) $(BASE_LIBS) 359 365 endif 360 366 … … 372 378 $(AR) rc $@ $(LOBJECTS) 373 379 374 $(SLIBRARY): $(LIB RARY).la375 $(CC) $(CFLAGS) $(LIB_LDFLAGS) $(EXTRA_LDFLAGS) - Wl,-Map,$@.map -o $@ -Wl,--whole-archive $(LIBRARY).la -Wl,--no-whole-archive $(LIBARGS) $(BASE_LIBS)380 $(SLIBRARY): $(LIB_LINKER_SCRIPT) $(LIBRARY).la 381 $(CC) $(CFLAGS) $(LIB_LDFLAGS) $(EXTRA_LDFLAGS) -T $(LIB_LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ -Wl,--whole-archive $(LIBRARY).la -Wl,--no-whole-archive $(LIBARGS) $(BASE_LIBS) 376 382 377 383 $(LSONAME): -
uspace/app/rcutest/rcutest.c
r3b10ae36 r42964a7 46 46 #include <fibril_synch.h> 47 47 #include <compiler/barrier.h> 48 #include <futex.h> 48 49 #include <str.h> 49 50 -
uspace/lib/c/Makefile
r3b10ae36 r42964a7 33 33 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config 34 34 35 EXTRA_OUTPUT = $(START_FILES) 35 LINKER_SCRIPTS = \ 36 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld \ 37 $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld \ 38 $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld 39 40 PRE_DEPEND = 41 EXTRA_OUTPUT = $(LINKER_SCRIPTS) $(START_FILES) 42 EXTRA_CLEAN = $(LINKER_SCRIPTS) 36 43 EXTRA_TEST_CFLAGS = -Wno-deprecated-declarations 37 44 LIBRARY = libc … … 44 51 generic/libc.c \ 45 52 generic/ddi.c \ 53 generic/atomic.c \ 46 54 generic/as.c \ 47 55 generic/bd.c \ … … 77 85 generic/strtol.c \ 78 86 generic/l18n/langs.c \ 87 generic/fibril.c \ 88 generic/fibril_synch.c \ 79 89 generic/pcb.c \ 80 90 generic/smc.c \ 81 91 generic/smp_memory_barrier.c \ 92 generic/thread.c \ 93 generic/tls.c \ 82 94 generic/task.c \ 95 generic/futex.c \ 83 96 generic/imath.c \ 84 97 generic/inet/addr.c \ … … 129 142 generic/stdio/sstream.c \ 130 143 generic/stdio/vsprintf.c \ 131 generic/thread/atomic.c \132 generic/thread/fibril.c \133 generic/thread/fibril_synch.c \134 generic/thread/thread.c \135 generic/thread/tls.c \136 generic/thread/futex.c \137 generic/thread/rcu.c \138 generic/thread/mpsc.c \139 144 generic/sysinfo.c \ 140 145 generic/ipc.c \ … … 160 165 generic/vfs/mtab.c \ 161 166 generic/vfs/vfs.c \ 167 generic/rcu.c \ 162 168 generic/setjmp.c \ 163 169 generic/stack.c \ … … 212 218 cp $< $@ 213 219 220 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 221 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -E -x c $< | grep -v "^\#" > $@ 222 223 $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 224 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DSHLIB -E -x c $< | grep -v "^\#" > $@ 225 226 $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 227 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@ 228 214 229 AUTOCHECK = $(realpath $(ROOT_PATH)/tools/autocheck.awk) 215 230 -
uspace/lib/c/generic/async/ports.c
r3b10ae36 r42964a7 51 51 #include <abi/mm/as.h> 52 52 #include "../private/libc.h" 53 #include "../private/fibril.h"54 53 55 54 /** Interface data */ -
uspace/lib/c/generic/async/server.c
r3b10ae36 r42964a7 124 124 #define DPRINTF(...) ((void) 0) 125 125 126 /** Call data */ 127 typedef struct { 128 link_t link; 129 ipc_call_t call; 130 } msg_t; 131 126 132 /* Client connection data */ 127 133 typedef struct { … … 150 156 client_t *client; 151 157 152 /** Channel for messages that should be delivered to this fibril. */ 153 mpsc_t *msg_channel; 158 /** Message event. */ 159 fibril_event_t msg_arrived; 160 161 /** Messages that should be delivered to this fibril. */ 162 list_t msg_queue; 154 163 155 164 /** Call data of the opening call. */ 156 165 ipc_call_t call; 166 167 /** Identification of the closing call. */ 168 cap_call_handle_t close_chandle; 157 169 158 170 /** Fibril function that will be used to handle the connection. */ … … 411 423 async_client_put(client); 412 424 413 fibril_rmutex_lock(&conn_mutex);414 415 425 /* 416 426 * Remove myself from the connection hash table. 417 427 */ 428 fibril_rmutex_lock(&conn_mutex); 418 429 hash_table_remove(&conn_hash_table, &(conn_key_t){ 419 430 .task_id = fibril_connection->in_task_id, 420 431 .phone_hash = fibril_connection->in_phone_hash 421 432 }); 422 423 /*424 * Close the channel, if it isn't closed already.425 */426 mpsc_t *c = fibril_connection->msg_channel;427 mpsc_close(c);428 429 433 fibril_rmutex_unlock(&conn_mutex); 430 434 … … 432 436 * Answer all remaining messages with EHANGUP. 433 437 */ 434 ipc_call_t call; 435 while (mpsc_receive(c, &call, NULL) == EOK) 436 ipc_answer_0(call.cap_handle, EHANGUP); 438 while (!list_empty(&fibril_connection->msg_queue)) { 439 msg_t *msg = 440 list_get_instance(list_first(&fibril_connection->msg_queue), 441 msg_t, link); 442 443 list_remove(&msg->link); 444 ipc_answer_0(msg->call.cap_handle, EHANGUP); 445 free(msg); 446 } 437 447 438 448 /* 439 * Clean up memory. 449 * If the connection was hung-up, answer the last call, 450 * i.e. IPC_M_PHONE_HUNGUP. 440 451 */ 441 mpsc_destroy(c); 452 if (fibril_connection->close_chandle) 453 ipc_answer_0(fibril_connection->close_chandle, EOK); 454 442 455 free(fibril_connection); 443 456 return EOK; … … 475 488 conn->in_task_id = in_task_id; 476 489 conn->in_phone_hash = in_phone_hash; 477 conn->msg_channel = mpsc_create(sizeof(ipc_call_t)); 490 conn->msg_arrived = FIBRIL_EVENT_INIT; 491 list_initialize(&conn->msg_queue); 492 conn->close_chandle = CAP_NIL; 478 493 conn->handler = handler; 479 494 conn->data = data; … … 488 503 489 504 if (conn->fid == 0) { 490 mpsc_destroy(conn->msg_channel);491 505 free(conn); 492 506 … … 592 606 * @param call Data of the incoming call. 593 607 * 594 * @return EOK if the call was successfully passed to the respective fibril. 595 * @return ENOENT if the call doesn't match any connection. 596 * @return Other error code if routing failed for other reasons. 597 * 598 */ 599 static errno_t route_call(ipc_call_t *call) 608 * @return False if the call doesn't match any connection. 609 * @return True if the call was passed to the respective connection fibril. 610 * 611 */ 612 static bool route_call(ipc_call_t *call) 600 613 { 601 614 assert(call); … … 609 622 if (!link) { 610 623 fibril_rmutex_unlock(&conn_mutex); 611 return ENOENT;624 return false; 612 625 } 613 626 614 627 connection_t *conn = hash_table_get_inst(link, connection_t, link); 615 628 616 errno_t rc = mpsc_send(conn->msg_channel, call); 617 618 if (IPC_GET_IMETHOD(*call) == IPC_M_PHONE_HUNGUP) { 619 /* Close the channel, but let the connection fibril answer. */ 620 mpsc_close(conn->msg_channel); 621 // FIXME: Ideally, we should be able to discard/answer the 622 // hungup message here and just close the channel without 623 // passing it out. Unfortunatelly, somehow that breaks 624 // handling of CPU exceptions. 625 } 629 // FIXME: malloc in critical section 630 msg_t *msg = malloc(sizeof(*msg)); 631 if (!msg) { 632 fibril_rmutex_unlock(&conn_mutex); 633 return false; 634 } 635 636 msg->call = *call; 637 list_append(&msg->link, &conn->msg_queue); 638 639 if (IPC_GET_IMETHOD(*call) == IPC_M_PHONE_HUNGUP) 640 conn->close_chandle = call->cap_handle; 626 641 627 642 fibril_rmutex_unlock(&conn_mutex); 628 return rc; 643 644 /* If the connection fibril is waiting for an event, activate it */ 645 fibril_notify(&conn->msg_arrived); 646 return true; 629 647 } 630 648 … … 921 939 assert(fibril_connection); 922 940 941 /* 942 * Why doing this? 943 * GCC 4.1.0 coughs on fibril_connection-> dereference. 944 * GCC 4.1.1 happilly puts the rdhwr instruction in delay slot. 945 * I would never expect to find so many errors in 946 * a compiler. 947 */ 948 connection_t *conn = fibril_connection; 949 923 950 struct timeval tv; 924 951 struct timeval *expires = NULL; … … 929 956 } 930 957 931 errno_t rc = mpsc_receive(fibril_connection->msg_channel, 932 call, expires); 933 934 if (rc == ETIMEOUT) 935 return false; 936 937 if (rc != EOK) { 938 /* 939 * The async_get_call_timeout() interface doesn't support 940 * propagating errors. Return a null call instead. 941 */ 942 943 memset(call, 0, sizeof(ipc_call_t)); 944 } 945 958 fibril_rmutex_lock(&conn_mutex); 959 960 /* If nothing in queue, wait until something arrives */ 961 while (list_empty(&conn->msg_queue)) { 962 if (conn->close_chandle) { 963 /* 964 * Handle the case when the connection was already 965 * closed by the client but the server did not notice 966 * the first IPC_M_PHONE_HUNGUP call and continues to 967 * call async_get_call_timeout(). Repeat 968 * IPC_M_PHONE_HUNGUP until the caller notices. 969 */ 970 memset(call, 0, sizeof(ipc_call_t)); 971 IPC_SET_IMETHOD(*call, IPC_M_PHONE_HUNGUP); 972 fibril_rmutex_unlock(&conn_mutex); 973 return true; 974 } 975 976 // TODO: replace with cvar 977 fibril_rmutex_unlock(&conn_mutex); 978 979 errno_t rc = fibril_wait_timeout(&conn->msg_arrived, expires); 980 if (rc == ETIMEOUT) 981 return false; 982 983 fibril_rmutex_lock(&conn_mutex); 984 } 985 986 msg_t *msg = list_get_instance(list_first(&conn->msg_queue), 987 msg_t, link); 988 list_remove(&msg->link); 989 990 *call = msg->call; 991 free(msg); 992 993 fibril_rmutex_unlock(&conn_mutex); 946 994 return true; 947 995 } … … 1023 1071 1024 1072 /* Try to route the call through the connection hash table */ 1025 errno_t rc = route_call(call); 1026 if (rc == EOK) 1073 if (route_call(call)) 1027 1074 return; 1028 1075 1029 // TODO: Log the error. 1030 1031 if (call->cap_handle != CAP_NIL) 1032 /* Unknown call from unknown phone - hang it up */ 1033 ipc_answer_0(call->cap_handle, EHANGUP); 1076 /* Unknown call from unknown phone - hang it up */ 1077 ipc_answer_0(call->cap_handle, EHANGUP); 1034 1078 } 1035 1079 -
uspace/lib/c/generic/io/kio.c
r3b10ae36 r42964a7 44 44 #include <macros.h> 45 45 #include <libarch/config.h> 46 47 #include "../private/futex.h" 46 #include <futex.h> 48 47 49 48 #define KIO_BUFFER_SIZE PAGE_SIZE -
uspace/lib/c/generic/ipc.c
r3b10ae36 r42964a7 46 46 #include <errno.h> 47 47 #include <adt/list.h> 48 #include <futex.h> 48 49 #include <fibril.h> 49 50 #include <macros.h> -
uspace/lib/c/generic/malloc.c
r3b10ae36 r42964a7 44 44 #include <bitops.h> 45 45 #include <mem.h> 46 #include <fibril_synch.h> 46 47 #include <stdlib.h> 47 48 #include <adt/gcdlcm.h> 48 49 49 #include "private/malloc.h" 50 #include "private/fibril.h"51 50 52 51 /** Magic used in heap headers. */ -
uspace/lib/c/generic/private/fibril.h
r3b10ae36 r42964a7 35 35 #include <abi/proc/uarg.h> 36 36 #include <atomic.h> 37 #include <fibril.h> 38 39 #include "./futex.h" 40 41 typedef struct { 42 fibril_t *fibril; 43 } fibril_event_t; 44 45 #define FIBRIL_EVENT_INIT ((fibril_event_t) {0}) 37 #include <futex.h> 46 38 47 39 struct fibril { … … 81 73 extern void __fibrils_init(void); 82 74 83 extern void fibril_wait_for(fibril_event_t *);84 extern errno_t fibril_wait_timeout(fibril_event_t *, const struct timeval *);85 extern void fibril_notify(fibril_event_t *);86 87 extern errno_t fibril_ipc_wait(ipc_call_t *, const struct timeval *);88 extern void fibril_ipc_poke(void);89 90 /**91 * "Restricted" fibril mutex.92 *93 * Similar to `fibril_mutex_t`, but has a set of restrictions placed on its94 * use. Within a rmutex critical section, you95 * - may not use any other synchronization primitive,96 * save for another `fibril_rmutex_t`. This includes nonblocking97 * operations like cvar signal and mutex unlock, unless otherwise98 * specified.99 * - may not read IPC messages100 * - may not start a new thread/fibril101 * (creating fibril without starting is fine)102 *103 * Additionally, locking with a timeout is not possible on this mutex,104 * and there is no associated condition variable type.105 * This is a design constraint, not a lack of implementation effort.106 */107 typedef struct {108 // TODO: At this point, this is just silly handwaving to hide current109 // futex use behind a fibril based abstraction. Later, the imple-110 // mentation will change, but the restrictions placed on this type111 // will allow it to be simpler and faster than a regular mutex.112 // There might also be optional debug checking of the assumptions.113 //114 // Note that a consequence of the restrictions is that if we are115 // running on a single thread, no other fibril can ever get to run116 // while a fibril has a rmutex locked. That means that for117 // single-threaded programs, we can reduce all rmutex locks and118 // unlocks to simple branches on a global bool variable.119 120 futex_t futex;121 } fibril_rmutex_t;122 123 #define FIBRIL_RMUTEX_INITIALIZER(name) \124 { .futex = FUTEX_INITIALIZE(1) }125 126 #define FIBRIL_RMUTEX_INITIALIZE(name) \127 fibril_rmutex_t name = FIBRIL_RMUTEX_INITIALIZER(name)128 129 extern void fibril_rmutex_initialize(fibril_rmutex_t *);130 extern void fibril_rmutex_lock(fibril_rmutex_t *);131 extern bool fibril_rmutex_trylock(fibril_rmutex_t *);132 extern void fibril_rmutex_unlock(fibril_rmutex_t *);133 134 135 75 #endif -
uspace/lib/c/include/fibril.h
r3b10ae36 r42964a7 49 49 typedef fibril_t *fid_t; 50 50 51 typedef struct { 52 fibril_t *fibril; 53 } fibril_event_t; 54 55 #define FIBRIL_EVENT_INIT ((fibril_event_t) {0}) 56 51 57 /** Fibril-local variable specifier */ 52 58 #define fibril_local __thread … … 76 82 extern __noreturn void fibril_exit(long); 77 83 84 extern void fibril_wait_for(fibril_event_t *); 85 extern errno_t fibril_wait_timeout(fibril_event_t *, const struct timeval *); 86 extern void fibril_notify(fibril_event_t *); 87 88 extern errno_t fibril_ipc_wait(ipc_call_t *, const struct timeval *); 89 extern void fibril_ipc_poke(void); 90 78 91 #endif 79 92 -
uspace/lib/c/include/fibril_synch.h
r3b10ae36 r42964a7 41 41 #include <sys/time.h> 42 42 #include <stdbool.h> 43 #include <futex.h> 44 45 /** 46 * "Restricted" fibril mutex. 47 * 48 * Similar to `fibril_mutex_t`, but has a set of restrictions placed on its 49 * use. Within a rmutex critical section, you 50 * - may not use any other synchronization primitive, 51 * save for another `fibril_rmutex_t`. This includes nonblocking 52 * operations like cvar signal and mutex unlock. 53 * - may not read IPC messages 54 * - may not start a new thread/fibril 55 * (creating fibril without starting is fine) 56 * 57 * Additionally, locking with a timeout is not possible on this mutex, 58 * and there is no associated condition variable type. 59 * This is a design constraint, not a lack of implementation effort. 60 */ 61 typedef struct { 62 // TODO: At this point, this is just silly handwaving to hide current 63 // futex use behind a fibril based abstraction. Later, the imple- 64 // mentation will change, but the restrictions placed on this type 65 // will allow it to be simpler and faster than a regular mutex. 66 // There might also be optional debug checking of the assumptions. 67 // 68 // Note that a consequence of the restrictions is that if we are 69 // running on a single thread, no other fibril can ever get to run 70 // while a fibril has a rmutex locked. That means that for 71 // single-threaded programs, we can reduce all rmutex locks and 72 // unlocks to simple branches on a global bool variable. 73 74 futex_t futex; 75 } fibril_rmutex_t; 76 77 #define FIBRIL_RMUTEX_INITIALIZER(name) \ 78 { .futex = FUTEX_INITIALIZE(1) } 79 80 #define FIBRIL_RMUTEX_INITIALIZE(name) \ 81 fibril_rmutex_t name = FIBRIL_RMUTEX_INITIALIZER(name) 43 82 44 83 typedef struct { … … 147 186 long int count; 148 187 list_t waiters; 149 bool closed;150 188 } fibril_semaphore_t; 151 189 … … 163 201 #define FIBRIL_SEMAPHORE_INITIALIZE(name, cnt) \ 164 202 fibril_semaphore_t name = FIBRIL_SEMAPHORE_INITIALIZER(name, cnt) 203 204 extern void fibril_rmutex_initialize(fibril_rmutex_t *); 205 extern void fibril_rmutex_lock(fibril_rmutex_t *); 206 extern bool fibril_rmutex_trylock(fibril_rmutex_t *); 207 extern void fibril_rmutex_unlock(fibril_rmutex_t *); 165 208 166 209 extern void fibril_mutex_initialize(fibril_mutex_t *); … … 198 241 extern void fibril_semaphore_up(fibril_semaphore_t *); 199 242 extern void fibril_semaphore_down(fibril_semaphore_t *); 200 extern errno_t fibril_semaphore_down_timeout(fibril_semaphore_t *, suseconds_t);201 extern void fibril_semaphore_close(fibril_semaphore_t *);202 203 typedef struct mpsc mpsc_t;204 extern mpsc_t *mpsc_create(size_t);205 extern void mpsc_destroy(mpsc_t *);206 extern errno_t mpsc_send(mpsc_t *, const void *);207 extern errno_t mpsc_receive(mpsc_t *, void *, const struct timeval *);208 extern void mpsc_close(mpsc_t *);209 243 210 244 #endif -
uspace/lib/c/include/ipc/common.h
r3b10ae36 r42964a7 37 37 38 38 #include <abi/ipc/ipc.h> 39 #include <atomic.h> 39 40 #include <abi/proc/task.h> 41 #include <futex.h> 40 42 #include <abi/cap.h> 41 #include <types/common.h>42 43 43 44 #define IPC_FLAG_BLOCKING 0x01 -
uspace/lib/drv/include/dev_iface.h
r3b10ae36 r42964a7 38 38 #include <ipc/common.h> 39 39 #include <ipc/dev_iface.h> 40 #include <stdbool.h>41 40 42 41 /* -
uspace/lib/pcut/Makefile
r3b10ae36 r42964a7 36 36 37 37 test-libpcut-%: $(LIBRARY).a 38 $(CC) $(CFLAGS) $(LDFLAGS) - o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS)38 $(CC) $(CFLAGS) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS) 39 39 -
uspace/lib/pcut/update-from-master.sh
r3b10ae36 r42964a7 80 80 81 81 test-libpcut-%: $(LIBRARY).a 82 $(CC) $(CFLAGS) $(LDFLAGS) - o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS)82 $(CC) $(CFLAGS) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS) 83 83 84 84 EOF_MAKEFILE_TAIL -
uspace/lib/posix/Makefile
r3b10ae36 r42964a7 36 36 37 37 SPECS = gcc.specs 38 LIBC_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld 39 EXPORT_LINKER_SCRIPT = link.ld 38 40 39 41 EXPORT_FILES = \ … … 46 48 $(LIBC_PREFIX)/crt1.o \ 47 49 $(LIBRARY).a \ 50 $(EXPORT_LINKER_SCRIPT) \ 48 51 $(SPECS) 49 52 … … 51 54 EXTRA_CLEAN = $(INCLUDE_LIBC) 52 55 53 EXTRA_OUTPUT = $(SPECS) 56 EXTRA_OUTPUT = $(SPECS) $(EXPORT_LINKER_SCRIPT) $(EXPORT_STARTUP_FILE) 54 57 55 58 SOURCES = \ … … 89 92 EXPORT_LDFLAGS = \ 90 93 -L$$(HELENOS_EXPORT_ROOT)/lib \ 94 -T link.ld \ 91 95 $$(HELENOS_EXPORT_ROOT)/lib/crt0.o \ 92 96 $$(HELENOS_EXPORT_ROOT)/lib/crt1.o … … 110 114 echo '$(EXPORT_LDLIBS)' >> $@.new 111 115 mv $@.new $@ 116 117 $(EXPORT_LINKER_SCRIPT): $(LIBC_LINKER_SCRIPT) 118 cp $< $@ 119 120 $(EXPORT_STARTUP_FILE): $(LIBC_STARTUP_FILE) 121 cp $< $@ 112 122 113 123 $(INCLUDE_LIBC): $(shell find ../c/include -name '*.h') -
uspace/srv/hid/input/ctl/stty.c
r3b10ae36 r42964a7 38 38 */ 39 39 40 #include <errno.h>41 40 #include <io/keycode.h> 42 41 #include "../stroke.h" -
uspace/srv/loader/Makefile
r3b10ae36 r42964a7 29 29 30 30 USPACE_PREFIX = ../.. 31 ROOT_PATH = $(USPACE_PREFIX)/..32 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config33 31 34 include $(CONFIG_MAKEFILE) 35 36 ifeq ($(UARCH),ia64) 37 # IA64 has a peculiar linker script with a fixed data segment address. 38 # Because the loader is a separate nonrelocatable binary in the same 39 # address space as the application, we provide a modified copy of 40 # the default linker script to work around that. 41 EXTRA_LDFLAGS = -T elf64_ia64_loader.x 42 else 43 # On all other architectures, we can simply move the text segment. 44 EXTRA_LDFLAGS = -Wl,-Ttext-segment=0x70000000 45 endif 32 EXTRA_LDFLAGS = -Wl,-Ttext-segment=0x70000000 46 33 47 34 BINARY = loader
Note:
See TracChangeset
for help on using the changeset viewer.