Changes in / [42964a7:3b10ae36] in mainline
- Location:
- uspace
- Files:
-
- 10 added
- 20 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/Makefile
r42964a7 r3b10ae36 67 67 app/redir \ 68 68 app/rcutest \ 69 app/rcubench \70 69 app/sbi \ 71 70 app/sportdmp \ -
uspace/Makefile.common
r42964a7 r3b10ae36 35 35 # DEFS compiler defines 36 36 # EXTRA_CFLAGS additional flags to pass to C compiler 37 # LINKER_SCRIPT linker script38 37 # PRE_DEPEND targets required for dependency check 39 38 # … … 153 152 BASE_LIBS += $(LIBSOFTFLOAT_PREFIX)/libsoftfloat.a $(LIBSOFTINT_PREFIX)/libsoftint.a 154 153 155 ifeq ($(LINK_DYNAMIC),y) 156 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld 157 else 154 ifneq ($(LINK_DYNAMIC),y) 158 155 LDFLAGS += -static 159 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld 160 endif 161 162 LIB_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld 156 endif 163 157 164 158 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS) … … 261 255 endif 262 256 263 COMMON_CXXFLAGS = $(COMMON_CFLAGS) 257 COMMON_CXXFLAGS = $(COMMON_CFLAGS) -fno-exceptions 264 258 HELENOS_CXXFLAGS = \ 265 259 -std=c++17 -frtti \ … … 351 345 352 346 ifneq ($(filter %.cpp %.cc %.cxx, $(SOURCES)),) 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)347 $(BINARY): $(OBJECTS) $(LIBTAGS) 348 $(CXX) $(CXXFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(CXX_BASE_LIBS) 355 349 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)350 $(BINARY): $(OBJECTS) $(LIBTAGS) 351 $(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ $(START_FILES) $(OBJECTS) $(LIBARGS) $(BASE_LIBS) 358 352 endif 359 353 … … 361 355 362 356 ifneq ($(TEST_BINARY),) 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)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) 365 359 endif 366 360 … … 378 372 $(AR) rc $@ $(LOBJECTS) 379 373 380 $(SLIBRARY): $(LIB _LINKER_SCRIPT) $(LIBRARY).la381 $(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)374 $(SLIBRARY): $(LIBRARY).la 375 $(CC) $(CFLAGS) $(LIB_LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ -Wl,--whole-archive $(LIBRARY).la -Wl,--no-whole-archive $(LIBARGS) $(BASE_LIBS) 382 376 383 377 $(LSONAME): -
uspace/app/rcutest/rcutest.c
r42964a7 r3b10ae36 46 46 #include <fibril_synch.h> 47 47 #include <compiler/barrier.h> 48 #include <futex.h>49 48 #include <str.h> 50 49 -
uspace/lib/c/Makefile
r42964a7 r3b10ae36 33 33 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config 34 34 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) 35 EXTRA_OUTPUT = $(START_FILES) 43 36 EXTRA_TEST_CFLAGS = -Wno-deprecated-declarations 44 37 LIBRARY = libc … … 51 44 generic/libc.c \ 52 45 generic/ddi.c \ 53 generic/atomic.c \54 46 generic/as.c \ 55 47 generic/bd.c \ … … 85 77 generic/strtol.c \ 86 78 generic/l18n/langs.c \ 87 generic/fibril.c \88 generic/fibril_synch.c \89 79 generic/pcb.c \ 90 80 generic/smc.c \ 91 81 generic/smp_memory_barrier.c \ 92 generic/thread.c \93 generic/tls.c \94 82 generic/task.c \ 95 generic/futex.c \96 83 generic/imath.c \ 97 84 generic/inet/addr.c \ … … 142 129 generic/stdio/sstream.c \ 143 130 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 \ 144 139 generic/sysinfo.c \ 145 140 generic/ipc.c \ … … 165 160 generic/vfs/mtab.c \ 166 161 generic/vfs/vfs.c \ 167 generic/rcu.c \168 162 generic/setjmp.c \ 169 163 generic/stack.c \ … … 218 212 cp $< $@ 219 213 220 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in221 $(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.in224 $(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.in227 $(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@228 229 214 AUTOCHECK = $(realpath $(ROOT_PATH)/tools/autocheck.awk) 230 215 -
uspace/lib/c/generic/async/ports.c
r42964a7 r3b10ae36 51 51 #include <abi/mm/as.h> 52 52 #include "../private/libc.h" 53 #include "../private/fibril.h" 53 54 54 55 /** Interface data */ -
uspace/lib/c/generic/async/server.c
r42964a7 r3b10ae36 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 132 126 /* Client connection data */ 133 127 typedef struct { … … 156 150 client_t *client; 157 151 158 /** Message event. */ 159 fibril_event_t msg_arrived; 160 161 /** Messages that should be delivered to this fibril. */ 162 list_t msg_queue; 152 /** Channel for messages that should be delivered to this fibril. */ 153 mpsc_t *msg_channel; 163 154 164 155 /** Call data of the opening call. */ 165 156 ipc_call_t call; 166 167 /** Identification of the closing call. */168 cap_call_handle_t close_chandle;169 157 170 158 /** Fibril function that will be used to handle the connection. */ … … 423 411 async_client_put(client); 424 412 413 fibril_rmutex_lock(&conn_mutex); 414 425 415 /* 426 416 * Remove myself from the connection hash table. 427 417 */ 428 fibril_rmutex_lock(&conn_mutex);429 418 hash_table_remove(&conn_hash_table, &(conn_key_t){ 430 419 .task_id = fibril_connection->in_task_id, 431 420 .phone_hash = fibril_connection->in_phone_hash 432 421 }); 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 433 429 fibril_rmutex_unlock(&conn_mutex); 434 430 … … 436 432 * Answer all remaining messages with EHANGUP. 437 433 */ 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 } 434 ipc_call_t call; 435 while (mpsc_receive(c, &call, NULL) == EOK) 436 ipc_answer_0(call.cap_handle, EHANGUP); 447 437 448 438 /* 449 * If the connection was hung-up, answer the last call, 450 * i.e. IPC_M_PHONE_HUNGUP. 439 * Clean up memory. 451 440 */ 452 if (fibril_connection->close_chandle) 453 ipc_answer_0(fibril_connection->close_chandle, EOK); 454 441 mpsc_destroy(c); 455 442 free(fibril_connection); 456 443 return EOK; … … 488 475 conn->in_task_id = in_task_id; 489 476 conn->in_phone_hash = in_phone_hash; 490 conn->msg_arrived = FIBRIL_EVENT_INIT; 491 list_initialize(&conn->msg_queue); 492 conn->close_chandle = CAP_NIL; 477 conn->msg_channel = mpsc_create(sizeof(ipc_call_t)); 493 478 conn->handler = handler; 494 479 conn->data = data; … … 503 488 504 489 if (conn->fid == 0) { 490 mpsc_destroy(conn->msg_channel); 505 491 free(conn); 506 492 … … 606 592 * @param call Data of the incoming call. 607 593 * 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) 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) 613 600 { 614 601 assert(call); … … 622 609 if (!link) { 623 610 fibril_rmutex_unlock(&conn_mutex); 624 return false;611 return ENOENT; 625 612 } 626 613 627 614 connection_t *conn = hash_table_get_inst(link, connection_t, link); 628 615 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; 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 } 641 626 642 627 fibril_rmutex_unlock(&conn_mutex); 643 644 /* If the connection fibril is waiting for an event, activate it */ 645 fibril_notify(&conn->msg_arrived); 646 return true; 628 return rc; 647 629 } 648 630 … … 939 921 assert(fibril_connection); 940 922 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 in946 * a compiler.947 */948 connection_t *conn = fibril_connection;949 950 923 struct timeval tv; 951 924 struct timeval *expires = NULL; … … 956 929 } 957 930 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); 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 994 946 return true; 995 947 } … … 1071 1023 1072 1024 /* Try to route the call through the connection hash table */ 1073 if (route_call(call)) 1025 errno_t rc = route_call(call); 1026 if (rc == EOK) 1074 1027 return; 1075 1028 1076 /* Unknown call from unknown phone - hang it up */ 1077 ipc_answer_0(call->cap_handle, EHANGUP); 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); 1078 1034 } 1079 1035 -
uspace/lib/c/generic/io/kio.c
r42964a7 r3b10ae36 44 44 #include <macros.h> 45 45 #include <libarch/config.h> 46 #include <futex.h> 46 47 #include "../private/futex.h" 47 48 48 49 #define KIO_BUFFER_SIZE PAGE_SIZE -
uspace/lib/c/generic/ipc.c
r42964a7 r3b10ae36 46 46 #include <errno.h> 47 47 #include <adt/list.h> 48 #include <futex.h>49 48 #include <fibril.h> 50 49 #include <macros.h> -
uspace/lib/c/generic/malloc.c
r42964a7 r3b10ae36 44 44 #include <bitops.h> 45 45 #include <mem.h> 46 #include <fibril_synch.h>47 46 #include <stdlib.h> 48 47 #include <adt/gcdlcm.h> 48 49 49 #include "private/malloc.h" 50 #include "private/fibril.h" 50 51 51 52 /** Magic used in heap headers. */ -
uspace/lib/c/generic/private/fibril.h
r42964a7 r3b10ae36 35 35 #include <abi/proc/uarg.h> 36 36 #include <atomic.h> 37 #include <futex.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}) 38 46 39 47 struct fibril { … … 73 81 extern void __fibrils_init(void); 74 82 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 its 94 * use. Within a rmutex critical section, you 95 * - may not use any other synchronization primitive, 96 * save for another `fibril_rmutex_t`. This includes nonblocking 97 * operations like cvar signal and mutex unlock, unless otherwise 98 * specified. 99 * - may not read IPC messages 100 * - may not start a new thread/fibril 101 * (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 current 109 // futex use behind a fibril based abstraction. Later, the imple- 110 // mentation will change, but the restrictions placed on this type 111 // 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 are 115 // running on a single thread, no other fibril can ever get to run 116 // while a fibril has a rmutex locked. That means that for 117 // single-threaded programs, we can reduce all rmutex locks and 118 // 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 75 135 #endif -
uspace/lib/c/include/fibril.h
r42964a7 r3b10ae36 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 57 51 /** Fibril-local variable specifier */ 58 52 #define fibril_local __thread … … 82 76 extern __noreturn void fibril_exit(long); 83 77 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 91 78 #endif 92 79 -
uspace/lib/c/include/fibril_synch.h
r42964a7 r3b10ae36 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 its49 * use. Within a rmutex critical section, you50 * - may not use any other synchronization primitive,51 * save for another `fibril_rmutex_t`. This includes nonblocking52 * operations like cvar signal and mutex unlock.53 * - may not read IPC messages54 * - may not start a new thread/fibril55 * (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 current63 // futex use behind a fibril based abstraction. Later, the imple-64 // mentation will change, but the restrictions placed on this type65 // 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 are69 // running on a single thread, no other fibril can ever get to run70 // while a fibril has a rmutex locked. That means that for71 // single-threaded programs, we can reduce all rmutex locks and72 // 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)82 43 83 44 typedef struct { … … 186 147 long int count; 187 148 list_t waiters; 149 bool closed; 188 150 } fibril_semaphore_t; 189 151 … … 201 163 #define FIBRIL_SEMAPHORE_INITIALIZE(name, cnt) \ 202 164 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 *);208 165 209 166 extern void fibril_mutex_initialize(fibril_mutex_t *); … … 241 198 extern void fibril_semaphore_up(fibril_semaphore_t *); 242 199 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 *); 243 209 244 210 #endif -
uspace/lib/c/include/ipc/common.h
r42964a7 r3b10ae36 37 37 38 38 #include <abi/ipc/ipc.h> 39 #include <atomic.h>40 39 #include <abi/proc/task.h> 41 #include <futex.h>42 40 #include <abi/cap.h> 41 #include <types/common.h> 43 42 44 43 #define IPC_FLAG_BLOCKING 0x01 -
uspace/lib/drv/include/dev_iface.h
r42964a7 r3b10ae36 38 38 #include <ipc/common.h> 39 39 #include <ipc/dev_iface.h> 40 #include <stdbool.h> 40 41 41 42 /* -
uspace/lib/pcut/Makefile
r42964a7 r3b10ae36 36 36 37 37 test-libpcut-%: $(LIBRARY).a 38 $(CC) $(CFLAGS) $(LDFLAGS) - T $(LINKER_SCRIPT) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS)38 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS) 39 39 -
uspace/lib/pcut/update-from-master.sh
r42964a7 r3b10ae36 80 80 81 81 test-libpcut-%: $(LIBRARY).a 82 $(CC) $(CFLAGS) $(LDFLAGS) - T $(LINKER_SCRIPT) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS)82 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(START_FILES) $^ $(LIBRARY).a $(BASE_LIBS) 83 83 84 84 EOF_MAKEFILE_TAIL -
uspace/lib/posix/Makefile
r42964a7 r3b10ae36 36 36 37 37 SPECS = gcc.specs 38 LIBC_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld39 EXPORT_LINKER_SCRIPT = link.ld40 38 41 39 EXPORT_FILES = \ … … 48 46 $(LIBC_PREFIX)/crt1.o \ 49 47 $(LIBRARY).a \ 50 $(EXPORT_LINKER_SCRIPT) \51 48 $(SPECS) 52 49 … … 54 51 EXTRA_CLEAN = $(INCLUDE_LIBC) 55 52 56 EXTRA_OUTPUT = $(SPECS) $(EXPORT_LINKER_SCRIPT) $(EXPORT_STARTUP_FILE)53 EXTRA_OUTPUT = $(SPECS) 57 54 58 55 SOURCES = \ … … 92 89 EXPORT_LDFLAGS = \ 93 90 -L$$(HELENOS_EXPORT_ROOT)/lib \ 94 -T link.ld \95 91 $$(HELENOS_EXPORT_ROOT)/lib/crt0.o \ 96 92 $$(HELENOS_EXPORT_ROOT)/lib/crt1.o … … 114 110 echo '$(EXPORT_LDLIBS)' >> $@.new 115 111 mv $@.new $@ 116 117 $(EXPORT_LINKER_SCRIPT): $(LIBC_LINKER_SCRIPT)118 cp $< $@119 120 $(EXPORT_STARTUP_FILE): $(LIBC_STARTUP_FILE)121 cp $< $@122 112 123 113 $(INCLUDE_LIBC): $(shell find ../c/include -name '*.h') -
uspace/srv/hid/input/ctl/stty.c
r42964a7 r3b10ae36 38 38 */ 39 39 40 #include <errno.h> 40 41 #include <io/keycode.h> 41 42 #include "../stroke.h" -
uspace/srv/loader/Makefile
r42964a7 r3b10ae36 29 29 30 30 USPACE_PREFIX = ../.. 31 ROOT_PATH = $(USPACE_PREFIX)/.. 32 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config 31 33 32 EXTRA_LDFLAGS = -Wl,-Ttext-segment=0x70000000 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 33 46 34 47 BINARY = loader
Note:
See TracChangeset
for help on using the changeset viewer.