Changeset 694ca93f in mainline for uspace/lib
- Timestamp:
- 2011-05-01T19:34:26Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0e26444
- Parents:
- 1ff896e (diff), 042fbe0 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib
- Files:
-
- 16 added
- 69 edited
- 16 moved
-
block/libblock.c (modified) (1 diff)
-
c/Makefile (modified) (4 diffs)
-
c/arch/abs32le/Makefile.inc (modified) (1 diff)
-
c/arch/abs32le/_link.ld.in (modified) (1 diff)
-
c/arch/abs32le/src/entryjmp.c (moved) (moved from uspace/srv/loader/arch/abs32le/abs32le.c ) (1 diff)
-
c/arch/amd64/Makefile.inc (modified) (1 diff)
-
c/arch/amd64/_link.ld.in (modified) (3 diffs)
-
c/arch/amd64/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/amd64/amd64.s ) (1 diff)
-
c/arch/arm32/Makefile.inc (modified) (1 diff)
-
c/arch/arm32/_link.ld.in (modified) (2 diffs)
-
c/arch/arm32/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/arm32/arm32.s ) (1 diff)
-
c/arch/ia32/Makefile.inc (modified) (2 diffs)
-
c/arch/ia32/_link.ld.in (modified) (4 diffs)
-
c/arch/ia32/include/config.h (modified) (1 diff)
-
c/arch/ia32/include/ddi.h (modified) (1 diff)
-
c/arch/ia32/include/faddr.h (modified) (1 diff)
-
c/arch/ia32/include/fibril.h (modified) (2 diffs)
-
c/arch/ia32/include/rtld/dynamic.h (moved) (moved from uspace/srv/loader/include/arch.h ) (1 diff)
-
c/arch/ia32/include/rtld/elf_dyn.h (moved) (moved from kernel/arch/arm32/include/memstr.h ) (2 diffs)
-
c/arch/ia32/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/ia32/ia32.s ) (1 diff)
-
c/arch/ia32/src/rtld/dynamic.c (moved) (moved from kernel/arch/ia64/include/memstr.h ) (2 diffs)
-
c/arch/ia32/src/rtld/reloc.c (added)
-
c/arch/ia32/src/stacktrace.c (modified) (1 diff)
-
c/arch/ia32/src/syscall.S (modified) (3 diffs)
-
c/arch/ia32/src/tls.c (modified) (2 diffs)
-
c/arch/ia64/Makefile.inc (modified) (1 diff)
-
c/arch/ia64/_link.ld.in (modified) (3 diffs)
-
c/arch/ia64/src/entry.s (modified) (1 diff)
-
c/arch/ia64/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/ia64/ia64.s ) (1 diff)
-
c/arch/ia64/src/thread_entry.s (modified) (1 diff)
-
c/arch/mips32/Makefile.inc (modified) (1 diff)
-
c/arch/mips32/_link.ld.in (modified) (2 diffs)
-
c/arch/mips32/include/atomic.h (modified) (1 diff)
-
c/arch/mips32/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/mips32/mips32.s ) (1 diff)
-
c/arch/mips32eb/Makefile.inc (modified) (1 diff)
-
c/arch/ppc32/Makefile.inc (modified) (1 diff)
-
c/arch/ppc32/_link.ld.in (modified) (2 diffs)
-
c/arch/ppc32/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/ppc32/ppc32.s ) (1 diff)
-
c/arch/sparc64/Makefile.inc (modified) (1 diff)
-
c/arch/sparc64/_link.ld.in (modified) (2 diffs)
-
c/arch/sparc64/src/entryjmp.s (moved) (moved from uspace/srv/loader/arch/sparc64/sparc64.s ) (1 diff)
-
c/generic/adt/measured_strings.c (modified) (1 diff)
-
c/generic/assert.c (moved) (moved from kernel/arch/abs32le/include/memstr.h ) (2 diffs)
-
c/generic/async.c (modified) (3 diffs)
-
c/generic/async_sess.c (modified) (1 diff)
-
c/generic/devman.c (modified) (3 diffs)
-
c/generic/dlfcn.c (added)
-
c/generic/errno.c (modified) (1 diff)
-
c/generic/fibril_synch.c (modified) (1 diff)
-
c/generic/io/io.c (modified) (1 diff)
-
c/generic/io/log.c (added)
-
c/generic/libc.c (modified) (2 diffs)
-
c/generic/malloc.c (modified) (1 diff)
-
c/generic/net/packet.c (modified) (1 diff)
-
c/generic/net/socket_client.c (modified) (1 diff)
-
c/generic/rtld/dynamic.c (added)
-
c/generic/rtld/elf_load.c (added)
-
c/generic/rtld/module.c (added)
-
c/generic/rtld/rtld.c (added)
-
c/generic/rtld/symbol.c (added)
-
c/generic/stacktrace.c (modified) (1 diff)
-
c/generic/str.c (modified) (2 diffs)
-
c/generic/vfs/vfs.c (modified) (3 diffs)
-
c/include/adt/generic_char_map.h (modified) (6 diffs)
-
c/include/adt/generic_field.h (modified) (4 diffs)
-
c/include/adt/int_map.h (modified) (10 diffs)
-
c/include/assert.h (modified) (3 diffs)
-
c/include/async.h (modified) (2 diffs)
-
c/include/devman.h (modified) (1 diff)
-
c/include/dlfcn.h (added)
-
c/include/entry_point.h (moved) (moved from kernel/arch/sparc64/include/mm/cache.h ) (3 diffs)
-
c/include/errno.h (modified) (1 diff)
-
c/include/fibril_synch.h (modified) (2 diffs)
-
c/include/io/log.h (added)
-
c/include/ipc/devman.h (modified) (1 diff)
-
c/include/ipc/services.h (modified) (1 diff)
-
c/include/loader/pcb.h (modified) (1 diff)
-
c/include/macros.h (modified) (1 diff)
-
c/include/rtld/dynamic.h (added)
-
c/include/rtld/elf_dyn.h (added)
-
c/include/rtld/module.h (moved) (moved from kernel/generic/include/proc/tasklet.h ) (2 diffs)
-
c/include/rtld/rtld.h (added)
-
c/include/rtld/rtld_arch.h (added)
-
c/include/rtld/rtld_debug.h (moved) (moved from kernel/arch/amd64/include/memstr.h ) (3 diffs)
-
c/include/rtld/symbol.h (added)
-
c/include/str.h (modified) (1 diff)
-
drv/Makefile (modified) (1 diff)
-
drv/generic/driver.c (modified) (5 diffs)
-
drv/generic/log.c (moved) (moved from kernel/generic/src/proc/tasklet.c ) (2 diffs)
-
drv/include/ddf/log.h (added)
-
fs/libfs.c (modified) (2 diffs)
-
net/generic/generic.c (modified) (4 diffs)
-
net/generic/net_checksum.c (modified) (6 diffs)
-
net/generic/packet_client.c (modified) (2 diffs)
-
net/il/ip_client.c (modified) (4 diffs)
-
net/tl/icmp_client.c (modified) (1 diff)
-
net/tl/socket_core.c (modified) (23 diffs)
-
net/tl/tl_common.c (modified) (7 diffs)
-
packet/generic/packet_server.c (modified) (2 diffs)
-
softint/Makefile (modified) (1 diff)
-
softint/generic/multiplication.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/block/libblock.c
r1ff896e r694ca93f 52 52 #include <macros.h> 53 53 #include <mem.h> 54 #include <malloc.h> 55 #include <stdio.h> 54 56 #include <sys/typefmt.h> 55 57 #include <stacktrace.h> -
uspace/lib/c/Makefile
r1ff896e r694ca93f 41 41 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config 42 42 43 LINKER_SCRIPTS = \ 44 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld \ 45 $(LIBC_PREFIX)/arch/$(UARCH)/_link-loader.ld \ 46 $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld \ 47 $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld 48 43 49 PRE_DEPEND = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(COMMON_HEADER_ARCH) 44 EXTRA_OUTPUT = $(LINKER_SCRIPT )45 EXTRA_CLEAN = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(COMMON_HEADER_ARCH) $(LINKER_SCRIPT )50 EXTRA_OUTPUT = $(LINKER_SCRIPTS) 51 EXTRA_CLEAN = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(COMMON_HEADER_ARCH) $(LINKER_SCRIPTS) 46 52 LIBRARY = libc 53 SLIBRARY = libc.so.0.0 54 LSONAME = libc.so0 55 47 56 48 57 -include $(COMMON_MAKEFILE) 49 58 -include $(CONFIG_MAKEFILE) 50 59 -include arch/$(UARCH)/Makefile.inc 60 61 EXTRA_CFLAGS += -I../../srv/loader/include 51 62 52 63 GENERIC_SOURCES = \ … … 76 87 generic/io/io.c \ 77 88 generic/io/printf.c \ 89 generic/io/log.c \ 78 90 generic/io/klog.c \ 79 91 generic/io/snprintf.c \ … … 112 124 generic/arg_parse.c \ 113 125 generic/sort.c \ 114 generic/stats.c 126 generic/stats.c \ 127 generic/assert.c 128 129 ifeq ($(CONFIG_RTLD), y) 130 GENERIC_SOURCES += \ 131 generic/dlfcn.c \ 132 generic/rtld/rtld.c \ 133 generic/rtld/elf_load.c \ 134 generic/rtld/dynamic.c \ 135 generic/rtld/module.c \ 136 generic/rtld/symbol.c 137 endif 115 138 116 139 SOURCES = \ … … 131 154 ln -sfn ../$< $@ 132 155 133 $(LI NKER_SCRIPT): $(LINKER_SCRIPT).in156 $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 134 157 $(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -E -x c $< | grep -v "^\#" > $@ 158 159 $(LIBC_PREFIX)/arch/$(UARCH)/_link-loader.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 160 $(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DLOADER -E -x c $< | grep -v "^\#" > $@ 161 162 $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 163 $(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DSHLIB -E -x c $< | grep -v "^\#" > $@ 164 165 $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in 166 $(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@ 135 167 136 168 $(COMMON_HEADER_ARCH): $(COMMON_HEADER) -
uspace/lib/c/arch/abs32le/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.c \ 31 arch/$(UARCH)/src/entryjmp.c \ 31 32 arch/$(UARCH)/src/thread_entry.c \ 32 33 arch/$(UARCH)/src/fibril.c \ -
uspace/lib/c/arch/abs32le/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x70001000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x1000 + SIZEOF_HEADERS; 11 23 #endif 12 24 .text : { 13 *(.text );14 *(.rodata *);25 *(.text .text.*); 26 *(.rodata .rodata.*); 15 27 } :text 16 28 -
uspace/lib/c/arch/abs32le/src/entryjmp.c
r1ff896e r694ca93f 31 31 32 32 #include <bool.h> 33 #include "arch.h"33 #include <entry_point.h> 34 34 35 void program_run(void *entry_point, void *pcb) 35 /** Jump to program entry point. */ 36 void entry_point_jmp(void *entry_point, void *pcb) 36 37 { 37 38 while (true); -
uspace/lib/c/arch/amd64/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.S \ -
uspace/lib/c/arch/amd64/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 debug PT_NOTE; … … 9 14 10 15 SECTIONS { 16 #ifdef LOADER 17 .interp : { 18 *(.interp); 19 } :interp 20 21 . = 0x70001000 + SIZEOF_HEADERS; 22 #else 11 23 . = 0x1000 + SIZEOF_HEADERS; 12 24 #endif 13 25 .init : { 14 26 *(.init); … … 16 28 17 29 .text : { 18 *(.text );19 *(.rodata *);30 *(.text .text.*); 31 *(.rodata .rodata.*); 20 32 } :text 21 33 -
uspace/lib/c/arch/amd64/src/entryjmp.s
r1ff896e r694ca93f 27 27 # 28 28 29 .globl program_run29 .globl entry_point_jmp 30 30 31 ## void program_run(void *entry_point, void *pcb);31 ## void entry_point_jmp(void *entry_point, void *pcb); 32 32 # 33 33 # %rdi contains entry_point 34 34 # %rsi contains pcb 35 35 # 36 # Jump to aprogram entry point37 program_run:36 # Jump to program entry point 37 entry_point_jmp: 38 38 # pcb must be passed in %rdi, use %rdx as a scratch register 39 39 mov %rdi, %rdx -
uspace/lib/c/arch/arm32/Makefile.inc
r1ff896e r694ca93f 30 30 ARCH_SOURCES = \ 31 31 arch/$(UARCH)/src/entry.s \ 32 arch/$(UARCH)/src/entryjmp.s \ 32 33 arch/$(UARCH)/src/thread_entry.s \ 33 34 arch/$(UARCH)/src/syscall.c \ -
uspace/lib/c/arch/arm32/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x70001000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x1000 + SIZEOF_HEADERS; 11 23 #endif 12 24 .init : { 13 25 *(.init); … … 15 27 16 28 .text : { 17 *(.text );18 *(.rodata *);29 *(.text .text.*); 30 *(.rodata .rodata.*); 19 31 } :text 20 32 -
uspace/lib/c/arch/arm32/src/entryjmp.s
r1ff896e r694ca93f 27 27 # 28 28 29 .globl program_run29 .globl entry_point_jmp 30 30 31 ## void program_run(void *entry_point, void *pcb);31 ## void entry_point_jmp(void *entry_point, void *pcb); 32 32 # 33 33 # r0 contains entry_point 34 34 # r1 contains pcb 35 35 # 36 # Jump to aprogram entry point37 program_run:36 # Jump to program entry point 37 entry_point_jmp: 38 38 # load ras_page address to r2 39 39 ldr r2, =ras_page -
uspace/lib/c/arch/ia32/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.S \ … … 35 36 arch/$(UARCH)/src/setjmp.S \ 36 37 arch/$(UARCH)/src/stacktrace.c \ 37 arch/$(UARCH)/src/stacktrace_asm.S 38 arch/$(UARCH)/src/stacktrace_asm.S \ 39 arch/$(UARCH)/src/rtld/dynamic.c \ 40 arch/$(UARCH)/src/rtld/reloc.c 38 41 39 42 .PRECIOUS: arch/$(UARCH)/src/entry.o -
uspace/lib/c/arch/ia32/_link.ld.in
r1ff896e r694ca93f 1 #ifndef SHLIB 1 2 STARTUP(LIBC_PATH/arch/UARCH/src/entry.o) 2 3 ENTRY(__entry) 4 #endif 3 5 4 6 PHDRS { 7 #if defined(LOADER) || defined(DLEXE) 8 interp PT_INTERP; 9 text PT_LOAD FILEHDR PHDRS FLAGS(5); 10 #else 5 11 text PT_LOAD FLAGS(5); 12 #endif 6 13 data PT_LOAD FLAGS(6); 14 #if defined(SHLIB) || defined(DLEXE) 15 dynamic PT_DYNAMIC; 16 #endif 7 17 debug PT_NOTE; 8 18 } 9 19 10 20 SECTIONS { 21 #if defined(LOADER) || defined(DLEXE) 22 .interp : { 23 *(.interp); 24 } :interp 25 #endif 26 #ifdef LOADER 27 . = 0x70001000 + SIZEOF_HEADERS; 28 #else 11 29 . = 0x1000 + SIZEOF_HEADERS; 12 30 #endif 13 31 .init : { 14 32 *(.init); … … 16 34 17 35 .text : { 18 *(.text); 19 *(.rodata*); 36 *(.text .text.*); 37 *(.rodata .rodata.*); 38 } :text 39 40 #if defined(SHLIB) || defined(DLEXE) 41 .rel.plt : { 42 *(.rel.plt); 43 } 44 /* 45 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 46 * without alignment gap or DT_REL will be broken 47 */ 48 .rel.dyn : { 49 *(.rel.*); 20 50 } :text 21 51 52 .plt : { 53 *(.plt); 54 } :text 55 56 .dynsym : { 57 *(.dynsym); 58 } :text 59 60 .dynstr : { 61 *(.dynstr); 62 } :text 63 64 .hash : { 65 *(.hash); 66 } :text 67 #endif 22 68 . = . + 0x1000; 69 70 #if defined(SHLIB) || defined(DLEXE) 71 .dynamic : { 72 *(.dynamic); 73 } :data :dynamic 74 #endif 23 75 24 76 .data : { … … 26 78 } :data 27 79 80 #if defined(SHLIB) || defined(DLEXE) 81 .data.rel : { 82 *(.data.rel .data.rel.*); 83 } :data 84 85 .got : { 86 *(.got); 87 } :data 88 .got.plt : { 89 *(.got.plt); 90 } :data 91 #endif 92 93 #ifndef DLEXE 28 94 .tdata : { 29 95 _tdata_start = .; … … 37 103 38 104 _tls_alignment = ALIGNOF(.tdata); 105 #endif 39 106 40 107 .bss : { 108 *(.dynbss); 41 109 *(COMMON); 42 110 *(.bss); -
uspace/lib/c/arch/ia32/include/config.h
r1ff896e r694ca93f 36 36 #define LIBC_ia32_CONFIG_H_ 37 37 38 #define PAGE_WIDTH 12 39 #define PAGE_SIZE (1 << PAGE_WIDTH) 38 #define PAGE_WIDTH 12 39 #define PAGE_SIZE (1 << PAGE_WIDTH) 40 41 #define USER_ADDRESS_SPACE_START_ARCH UINT32_C(0x00000000) 42 #define USER_ADDRESS_SPACE_END_ARCH UINT32_C(0x7fffffff) 40 43 41 44 #endif -
uspace/lib/c/arch/ia32/include/ddi.h
r1ff896e r694ca93f 37 37 #include <libarch/types.h> 38 38 39 #define IO_SPACE_BOUNDARY ((void *) (64 * 1024))39 #define IO_SPACE_BOUNDARY ((void *) (64 * 1024)) 40 40 41 41 static inline uint8_t pio_read_8(ioport8_t *port) -
uspace/lib/c/arch/ia32/include/faddr.h
r1ff896e r694ca93f 38 38 #include <libarch/types.h> 39 39 40 #define FADDR(fptr) ((uintptr_t) (fptr))40 #define FADDR(fptr) ((uintptr_t) (fptr)) 41 41 42 42 #endif -
uspace/lib/c/arch/ia32/include/fibril.h
r1ff896e r694ca93f 42 42 * panic sooner or later 43 43 */ 44 #define SP_DELTA (12)44 #define SP_DELTA 12 45 45 46 46 #define context_set(c, _pc, stack, size, ptls) \ … … 51 51 (c)->ebp = 0; \ 52 52 } while (0) 53 54 /* We include only registers that must be preserved 53 54 /* 55 * We include only registers that must be preserved 55 56 * during function call 56 57 */ -
uspace/lib/c/arch/ia32/include/rtld/dynamic.h
r1ff896e r694ca93f 27 27 */ 28 28 29 /** @addtogroup fs29 /** @addtogroup generic 30 30 * @{ 31 31 */ 32 32 /** @file 33 * @brief34 33 */ 35 34 36 #ifndef L OADER_ARCH_H_37 #define L OADER_ARCH_H_35 #ifndef LIBC_ia32_RTLD_DYNAMIC_H_ 36 #define LIBC_ia32_RTLD_DYNAMIC_H_ 38 37 39 extern void program_run(void *entry_point, void *pcb); 38 #include <sys/types.h> 39 40 typedef struct { 41 /* Empty. */ 42 } dyn_info_arch_t; 40 43 41 44 #endif 42 45 43 /** 44 * @} 46 /** @} 45 47 */ -
uspace/lib/c/arch/ia32/include/rtld/elf_dyn.h
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 200 5 Sergey Bondari2 * Copyright (c) 2008 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup arm3229 /** @addtogroup generic 30 30 * @{ 31 31 */ 32 32 /** @file 33 * @brief Memory manipulating functions declarations.34 33 */ 35 34 36 #ifndef KERN_arm32_MEMSTR_H_37 #define KERN_arm32_MEMSTR_H_35 #ifndef LIBC_ia32_RTLD_ELF_DYN_H_ 36 #define LIBC_ia32_RTLD_ELF_DYN_H_ 38 37 39 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) 38 /* 39 * ia32 dynamic relocation types 40 */ 40 41 41 extern void memsetw(void *, size_t, uint16_t); 42 extern void memsetb(void *, size_t, uint8_t); 42 #define R_386_32 1 43 #define R_386_PC32 2 44 #define R_386_COPY 5 45 #define R_386_GLOB_DAT 6 46 #define R_386_JUMP_SLOT 7 47 #define R_386_RELATIVE 8 48 49 #define R_386_TLS_DTPMOD32 35 43 50 44 51 #endif -
uspace/lib/c/arch/ia32/src/entryjmp.s
r1ff896e r694ca93f 27 27 # 28 28 29 .globl program_run29 .globl entry_point_jmp 30 30 31 ## void program_run(void *entry_point, void *pcb);31 ## void entry_point_jmp(void *entry_point, void *pcb); 32 32 # 33 # Jump to aprogram entry point34 program_run:33 # Jump to program entry point 34 entry_point_jmp: 35 35 # Use standard ia32 prologue not to confuse anybody 36 36 push %ebp -
uspace/lib/c/arch/ia32/src/rtld/dynamic.c
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 200 5 Sergey Bondari2 * Copyright (c) 2008 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup ia64 29 /** @addtogroup libcia32 30 * @brief 30 31 * @{ 31 32 */ 32 /** @file 33 /** 34 * @file 33 35 */ 34 36 35 #i fndef KERN_ia64_MEMSTR_H_36 # define KERN_ia64_MEMSTR_H_37 #include <stdio.h> 38 #include <stdlib.h> 37 39 38 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) 40 #include <rtld/elf_dyn.h> 41 #include <rtld/dynamic.h> 39 42 40 extern void memsetw(void *, size_t, uint16_t); 41 extern void memsetb(void *, size_t, uint8_t); 42 43 #endif 43 void dyn_parse_arch(elf_dyn_t *dp, size_t bias, dyn_info_t *info) 44 { 45 (void) dp; 46 (void) bias; 47 (void) info; 48 } 44 49 45 50 /** @} -
uspace/lib/c/arch/ia32/src/stacktrace.c
r1ff896e r694ca93f 35 35 */ 36 36 37 #include <libarch/config.h> 37 38 #include <sys/types.h> 38 39 #include <bool.h> 39 40 40 #include <stacktrace.h> 41 41 42 #define FRAME_OFFSET_FP_PREV 043 #define FRAME_OFFSET_RA 442 #define FRAME_OFFSET_FP_PREV 0 43 #define FRAME_OFFSET_RA 4 44 44 45 45 bool stacktrace_fp_valid(stacktrace_t *st, uintptr_t fp) 46 46 { 47 47 (void) st; 48 return fp != 0;48 return (fp != 0) && (fp <= USER_ADDRESS_SPACE_END_ARCH); 49 49 } 50 50 -
uspace/lib/c/arch/ia32/src/syscall.S
r1ff896e r694ca93f 32 32 __syscall_fast_func: 33 33 .long __syscall_slow 34 .size __syscall_fast_func, . - __syscall_fast_func 34 35 35 36 .text … … 71 72 */ 72 73 .global __syscall_fast 74 .type __syscall_fast, @function 75 73 76 __syscall_fast: 74 77 pushl %ebx … … 95 98 popl %ebx 96 99 ret 100 101 .size __syscall_fast, . - __syscall_fast -
uspace/lib/c/arch/ia32/src/tls.c
r1ff896e r694ca93f 37 37 #include <tls.h> 38 38 #include <sys/types.h> 39 #include <align.h> 39 40 40 41 tcb_t * __alloc_tls(void **data, size_t size) … … 48 49 } 49 50 51 /* 52 * Rtld TLS support 53 */ 54 55 typedef struct { 56 unsigned long int ti_module; 57 unsigned long int ti_offset; 58 } tls_index; 59 60 void __attribute__ ((__regparm__ (1))) 61 *___tls_get_addr(tls_index *ti); 62 63 void __attribute__ ((__regparm__ (1))) 64 *___tls_get_addr(tls_index *ti) 65 { 66 size_t tls_size; 67 uint8_t *tls; 68 69 /* Calculate size of TLS block */ 70 tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment); 71 72 /* The TLS block is just before TCB */ 73 tls = (uint8_t *)__tcb_get() - tls_size; 74 75 return tls + ti->ti_offset; 76 } 77 50 78 /** @} 51 79 */ -
uspace/lib/c/arch/ia64/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.S \ -
uspace/lib/c/arch/ia64/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 5 7 text PT_LOAD FLAGS(5); 8 #else 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x800000000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x4000 + SIZEOF_HEADERS; 11 23 #endif 24 /* 25 * XXX This is just a work around. Problem: .init section does not 26 * have the proper alignment. 27 */ 28 . = ALIGN(., 16); 29 12 30 .init : { 13 31 *(.init); … … 15 33 16 34 .text : { 17 *(.text );18 *(.rodata *);35 *(.text .text.*); 36 *(.rodata .rodata.*); 19 37 } :text 20 38 … … 22 40 23 41 .got : { 24 _gp = .; 25 *(.got*); 42 /* Tell the linker where we expect GP to point. */ 43 __gp = .; 44 *(.got .got.*); 26 45 } :data 27 46 -
uspace/lib/c/arch/ia64/src/entry.s
r1ff896e r694ca93f 39 39 __entry: 40 40 alloc loc0 = ar.pfs, 0, 1, 2, 0 41 movl gp = _ gp41 movl gp = __gp 42 42 43 43 # Pass PCB pointer as the first argument to __main -
uspace/lib/c/arch/ia64/src/entryjmp.s
r1ff896e r694ca93f 28 28 29 29 .text 30 .globl program_run30 .globl entry_point_jmp 31 31 32 ## void program_run(void *entry_point, void *pcb);32 ## void entry_point_jmp(void *entry_point, void *pcb); 33 33 # 34 34 # in0 (r32) contains entry_point 35 35 # in1 (r33) contains pcb 36 36 # 37 # Jump to aprogram entry point38 program_run:37 # Jump to program entry point 38 entry_point_jmp: 39 39 # Pass pcb to the entry point in r2 40 40 -
uspace/lib/c/arch/ia64/src/thread_entry.s
r1ff896e r694ca93f 37 37 alloc loc0 = ar.pfs, 0, 1, 1, 0 38 38 39 movl gp = _ gp39 movl gp = __gp 40 40 41 41 # -
uspace/lib/c/arch/mips32/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.c \ -
uspace/lib/c/arch/mips32/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x70004000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x4000 + SIZEOF_HEADERS; 11 23 #endif 12 24 .init : { 13 25 *(.init); … … 15 27 16 28 .text : { 17 *(.text );18 *(.rodata *);29 *(.text .text.*); 30 *(.rodata .rodata.*); 19 31 } :text 20 32 -
uspace/lib/c/arch/mips32/include/atomic.h
r1ff896e r694ca93f 70 70 " sc %0, %1\n" 71 71 " beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ 72 /* nop */ /* nop is inserted automatically by compiler */73 72 " nop\n" 74 73 : "=&r" (tmp), -
uspace/lib/c/arch/mips32/src/entryjmp.s
r1ff896e r694ca93f 29 29 .text 30 30 .section .text 31 .global program_run31 .global entry_point_jmp 32 32 .set noreorder 33 33 34 ## void program_run(void *entry_point, void *pcb);34 ## void entry_point_jmp(void *entry_point, void *pcb); 35 35 # 36 36 # $a0 (=$4) contains entry_point 37 37 # $a1 (=$5) contains pcb 38 38 # 39 # Jump to aprogram entry point40 .ent program_run41 program_run:39 # Jump to program entry point 40 .ent entry_point_jmp 41 entry_point_jmp: 42 42 # tmp := entry_point 43 43 move $25, $a0 -
uspace/lib/c/arch/mips32eb/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.c \ -
uspace/lib/c/arch/ppc32/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/syscall.c \ -
uspace/lib/c/arch/ppc32/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x70001000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x1000 + SIZEOF_HEADERS; 11 23 #endif 12 24 .init : { 13 25 *(.init); … … 15 27 16 28 .text : { 17 *(.text );18 *(.rodata *);29 *(.text .text.*); 30 *(.rodata .rodata.*); 19 31 } :text 20 32 -
uspace/lib/c/arch/ppc32/src/entryjmp.s
r1ff896e r694ca93f 27 27 # 28 28 29 .globl program_run29 .globl entry_point_jmp 30 30 31 ## void program_run(void *entry_point, void *pcb);31 ## void entry_point_jmp(void *entry_point, void *pcb); 32 32 # 33 33 # %r3 contains entry_point 34 34 # %r4 contains pcb 35 35 # 36 # Jump to aprogram entry point37 program_run:36 # Jump to program entry point 37 entry_point_jmp: 38 38 mtctr %r3 39 39 mr %r6, %r4 # Pass pcb to the entry point in %r6 -
uspace/lib/c/arch/sparc64/Makefile.inc
r1ff896e r694ca93f 29 29 ARCH_SOURCES = \ 30 30 arch/$(UARCH)/src/entry.s \ 31 arch/$(UARCH)/src/entryjmp.s \ 31 32 arch/$(UARCH)/src/thread_entry.s \ 32 33 arch/$(UARCH)/src/fibril.S \ -
uspace/lib/c/arch/sparc64/_link.ld.in
r1ff896e r694ca93f 3 3 4 4 PHDRS { 5 #ifdef LOADER 6 interp PT_INTERP; 7 text PT_LOAD FILEHDR PHDRS FLAGS(5); 8 #else 5 9 text PT_LOAD FLAGS(5); 10 #endif 6 11 data PT_LOAD FLAGS(6); 7 12 } 8 13 9 14 SECTIONS { 15 #ifdef LOADER 16 .interp : { 17 *(.interp); 18 } :interp 19 20 . = 0x70004000 + SIZEOF_HEADERS; 21 #else 10 22 . = 0x4000 + SIZEOF_HEADERS; 11 23 #endif 12 24 .init : { 13 25 *(.init); … … 15 27 16 28 .text : { 17 *(.text );18 *(.rodata *);29 *(.text .text.*); 30 *(.rodata .rodata.*); 19 31 } :text 20 32 -
uspace/lib/c/arch/sparc64/src/entryjmp.s
r1ff896e r694ca93f 27 27 # 28 28 29 .globl program_run29 .globl entry_point_jmp 30 30 31 ## void program_run(void *entry_point, void *pcb);31 ## void entry_point_jmp(void *entry_point, void *pcb); 32 32 # 33 33 # %o0 contains entry_point 34 34 # %o1 contains pcb 35 35 # 36 # Jump to aprogram entry point37 program_run:36 # Jump to program entry point 37 entry_point_jmp: 38 38 # Pass pcb pointer to entry point in %o1. As it is already 39 39 # there, no action is needed. -
uspace/lib/c/generic/adt/measured_strings.c
r1ff896e r694ca93f 74 74 new->length = length; 75 75 new->value = ((uint8_t *) new) + sizeof(measured_string_t); 76 / / append terminating zero explicitly - to be safe76 /* Append terminating zero explicitly - to be safe */ 77 77 memcpy(new->value, string, new->length); 78 78 new->value[new->length] = '\0'; -
uspace/lib/c/generic/assert.c
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 201 0Martin Decky2 * Copyright (c) 2011 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup abs32le29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 /** @file33 */34 32 35 #ifndef KERN_abs32le_MEMSTR_H_ 36 #define KERN_abs32le_MEMSTR_H_ 33 #include <assert.h> 34 #include <stdio.h> 35 #include <stdlib.h> 36 #include <stacktrace.h> 37 37 38 #define memcpy(dst, src, cnt) _memcpy((dst), (src), (cnt)) 39 #define memsetb(dst, cnt, val) _memsetb((dst), (cnt), (val)) 40 #define memsetw(dst, cnt, val) _memsetw((dst), (cnt), (val)) 41 42 #endif 38 void assert_abort(const char *cond, const char *file, unsigned int line) 39 { 40 printf("Assertion failed (%s) in file \"%s\", line %u.\n", 41 cond, file, line); 42 stacktrace_print(); 43 abort(); 44 } 43 45 44 46 /** @} -
uspace/lib/c/generic/async.c
r1ff896e r694ca93f 102 102 #include <arch/barrier.h> 103 103 #include <bool.h> 104 #include <stdlib.h> 105 #include <malloc.h> 104 106 #include "private/async.h" 105 107 … … 1572 1574 * @param dst Address of the beginning of the destination buffer. 1573 1575 * @param size Size of the destination buffer. 1576 * @param flags Flags to control the data transfer. 1574 1577 * 1575 1578 * @return Zero on success or a negative error code from errno.h. 1576 1579 * 1577 1580 */ 1578 int async_data_read_start(int phoneid, void *dst, size_t size) 1579 { 1580 return async_req_2_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst, 1581 (sysarg_t) size); 1581 int 1582 async_data_read_start_generic(int phoneid, void *dst, size_t size, int flags) 1583 { 1584 return async_req_3_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst, 1585 (sysarg_t) size, (sysarg_t) flags); 1582 1586 } 1583 1587 … … 1669 1673 * @param src Address of the beginning of the source buffer. 1670 1674 * @param size Size of the source buffer. 1675 * @param flags Flags to control the data transfer. 1671 1676 * 1672 1677 * @return Zero on success or a negative error code from errno.h. 1673 1678 * 1674 1679 */ 1675 int async_data_write_start(int phoneid, const void *src, size_t size) 1676 { 1677 return async_req_2_0(phoneid, IPC_M_DATA_WRITE, (sysarg_t) src, 1678 (sysarg_t) size); 1680 int 1681 async_data_write_start_generic(int phoneid, const void *src, size_t size, 1682 int flags) 1683 { 1684 return async_req_3_0(phoneid, IPC_M_DATA_WRITE, (sysarg_t) src, 1685 (sysarg_t) size, (sysarg_t) flags); 1679 1686 } 1680 1687 -
uspace/lib/c/generic/async_sess.c
r1ff896e r694ca93f 105 105 #include <errno.h> 106 106 #include <assert.h> 107 #include <async.h> 107 108 #include "private/async_sess.h" 108 109 -
uspace/lib/c/generic/devman.c
r1ff896e r694ca93f 147 147 ret = devman_send_match_id(phone, match_id); 148 148 if (ret != EOK) { 149 printf("Driver failed to send match id, error %d\n",150 ret);151 149 return ret; 152 150 } … … 195 193 } 196 194 197 devman_send_match_ids(phone, match_ids); 198 199 async_wait_for(req, &retval); 200 201 async_serialize_end(); 202 195 int match_ids_rc = devman_send_match_ids(phone, match_ids); 196 197 async_wait_for(req, &retval); 198 199 async_serialize_end(); 200 201 /* Prefer the answer to DEVMAN_ADD_FUNCTION in case of errors. */ 202 if ((match_ids_rc != EOK) && (retval == EOK)) { 203 retval = match_ids_rc; 204 } 205 203 206 if (retval == EOK) 204 207 fun_handle = (int) IPC_GET_ARG1(answer); … … 326 329 } 327 330 331 int devman_device_get_handle_by_class(const char *classname, 332 const char *devname, devman_handle_t *handle, unsigned int flags) 333 { 334 int phone = devman_get_phone(DEVMAN_CLIENT, flags); 335 336 if (phone < 0) 337 return phone; 338 339 async_serialize_start(); 340 341 ipc_call_t answer; 342 aid_t req = async_send_1(phone, DEVMAN_DEVICE_GET_HANDLE_BY_CLASS, 343 flags, &answer); 344 345 sysarg_t retval = async_data_write_start(phone, classname, 346 str_size(classname)); 347 if (retval != EOK) { 348 async_wait_for(req, NULL); 349 async_serialize_end(); 350 return retval; 351 } 352 retval = async_data_write_start(phone, devname, 353 str_size(devname)); 354 if (retval != EOK) { 355 async_wait_for(req, NULL); 356 async_serialize_end(); 357 return retval; 358 } 359 360 async_wait_for(req, &retval); 361 362 async_serialize_end(); 363 364 if (retval != EOK) { 365 if (handle != NULL) 366 *handle = (devman_handle_t) -1; 367 return retval; 368 } 369 370 if (handle != NULL) 371 *handle = (devman_handle_t) IPC_GET_ARG1(answer); 372 373 return retval; 374 } 375 328 376 329 377 /** @} -
uspace/lib/c/generic/errno.c
r1ff896e r694ca93f 36 36 #include <fibril.h> 37 37 38 int _errno; 38 static fibril_local int fibril_errno; 39 40 int *__errno(void) 41 { 42 return &fibril_errno; 43 } 39 44 40 45 /** @} -
uspace/lib/c/generic/fibril_synch.c
r1ff896e r694ca93f 43 43 #include <stacktrace.h> 44 44 #include <stdlib.h> 45 #include <stdio.h> 45 46 #include "private/async.h" 46 47 -
uspace/lib/c/generic/io/io.c
r1ff896e r694ca93f 173 173 } 174 174 *flags = (O_APPEND | O_CREAT) | (plus ? O_RDWR : O_WRONLY); 175 break; 175 176 default: 176 177 errno = EINVAL; -
uspace/lib/c/generic/libc.c
r1ff896e r694ca93f 53 53 #include "private/io.h" 54 54 55 #ifdef CONFIG_RTLD 56 #include <rtld/rtld.h> 57 #endif 58 55 59 static bool env_setup = false; 56 60 … … 77 81 char **argv; 78 82 83 #ifdef __IN_SHARED_LIBC__ 84 if (__pcb != NULL && __pcb->rtld_runtime != NULL) { 85 runtime_env = (runtime_env_t *) __pcb->rtld_runtime; 86 } 87 #endif 79 88 /* 80 89 * Get command line arguments and initialize -
uspace/lib/c/generic/malloc.c
r1ff896e r694ca93f 44 44 #include <mem.h> 45 45 #include <futex.h> 46 #include <stdlib.h> 46 47 #include <adt/gcdlcm.h> 47 48 #include "private/malloc.h" -
uspace/lib/c/generic/net/packet.c
r1ff896e r694ca93f 190 190 } 191 191 } 192 gpm_destroy(&pm_globals.packet_map );192 gpm_destroy(&pm_globals.packet_map, free); 193 193 /* leave locked */ 194 194 } -
uspace/lib/c/generic/net/socket_client.c
r1ff896e r694ca93f 749 749 dyn_fifo_destroy(&socket->received); 750 750 dyn_fifo_destroy(&socket->accepted); 751 sockets_exclude(socket_get_sockets(), socket->socket_id );751 sockets_exclude(socket_get_sockets(), socket->socket_id, free); 752 752 } 753 753 -
uspace/lib/c/generic/stacktrace.c
r1ff896e r694ca93f 61 61 stacktrace_prepare(); 62 62 stacktrace_print_fp_pc(stacktrace_fp_get(), stacktrace_pc_get()); 63 63 64 /* 64 65 * Prevent the tail call optimization of the previous call by 65 66 * making it a non-tail call. 66 67 */ 67 (void) stacktrace_fp_get(); 68 69 printf("-- end of stack trace --\n"); 68 70 } 69 71 -
uspace/lib/c/generic/str.c
r1ff896e r694ca93f 1215 1215 void order_suffix(const uint64_t val, uint64_t *rv, char *suffix) 1216 1216 { 1217 if (val > 10000000000000000000ULL) {1218 *rv = val / 1000000000000000000ULL;1217 if (val > UINT64_C(10000000000000000000)) { 1218 *rv = val / UINT64_C(1000000000000000000); 1219 1219 *suffix = 'Z'; 1220 } else if (val > 1000000000000000000ULL) {1221 *rv = val / 1000000000000000ULL;1220 } else if (val > UINT64_C(1000000000000000000)) { 1221 *rv = val / UINT64_C(1000000000000000); 1222 1222 *suffix = 'E'; 1223 } else if (val > 1000000000000000ULL) {1224 *rv = val / 1000000000000ULL;1223 } else if (val > UINT64_C(1000000000000000)) { 1224 *rv = val / UINT64_C(1000000000000); 1225 1225 *suffix = 'T'; 1226 } else if (val > 1000000000000ULL) {1227 *rv = val / 1000000000ULL;1226 } else if (val > UINT64_C(1000000000000)) { 1227 *rv = val / UINT64_C(1000000000); 1228 1228 *suffix = 'G'; 1229 } else if (val > 1000000000ULL) {1230 *rv = val / 1000000ULL;1229 } else if (val > UINT64_C(1000000000)) { 1230 *rv = val / UINT64_C(1000000); 1231 1231 *suffix = 'M'; 1232 } else if (val > 1000000ULL) {1233 *rv = val / 1000ULL;1232 } else if (val > UINT64_C(1000000)) { 1233 *rv = val / UINT64_C(1000); 1234 1234 *suffix = 'k'; 1235 1235 } else { … … 1239 1239 } 1240 1240 1241 void bin_order_suffix(const uint64_t val, uint64_t *rv, const char **suffix, 1242 bool fixed) 1243 { 1244 if (val > UINT64_C(1152921504606846976)) { 1245 *rv = val / UINT64_C(1125899906842624); 1246 *suffix = "EiB"; 1247 } else if (val > UINT64_C(1125899906842624)) { 1248 *rv = val / UINT64_C(1099511627776); 1249 *suffix = "TiB"; 1250 } else if (val > UINT64_C(1099511627776)) { 1251 *rv = val / UINT64_C(1073741824); 1252 *suffix = "GiB"; 1253 } else if (val > UINT64_C(1073741824)) { 1254 *rv = val / UINT64_C(1048576); 1255 *suffix = "MiB"; 1256 } else if (val > UINT64_C(1048576)) { 1257 *rv = val / UINT64_C(1024); 1258 *suffix = "KiB"; 1259 } else { 1260 *rv = val; 1261 if (fixed) 1262 *suffix = "B "; 1263 else 1264 *suffix = "B"; 1265 } 1266 } 1267 1241 1268 /** @} 1242 1269 */ -
uspace/lib/c/generic/vfs/vfs.c
r1ff896e r694ca93f 378 378 379 379 req = async_send_1(vfs_phone, VFS_IN_READ, fildes, &answer); 380 rc = async_data_read_start(vfs_phone, (void *)buf, nbyte); 380 rc = async_data_read_start_generic(vfs_phone, (void *) buf, nbyte, 381 IPC_XF_RESTRICT); 381 382 if (rc != EOK) { 382 383 vfs_exchange_end(vfs_phone); … … 407 408 408 409 req = async_send_1(vfs_phone, VFS_IN_WRITE, fildes, &answer); 409 rc = async_data_write_start(vfs_phone, (void *)buf, nbyte); 410 rc = async_data_write_start_generic(vfs_phone, (void *) buf, nbyte, 411 IPC_XF_RESTRICT); 410 412 if (rc != EOK) { 411 413 vfs_exchange_end(vfs_phone); … … 756 758 { 757 759 struct stat stat; 758 int rc; 759 760 rc = fstat(fildes, &stat); 761 760 761 int rc = fstat(fildes, &stat); 762 if (rc != 0) 763 return rc; 764 762 765 if (!stat.device) 763 766 return -1; -
uspace/lib/c/include/adt/generic_char_map.h
r1ff896e r694ca93f 47 47 #define GENERIC_CHAR_MAP_MAGIC_VALUE 0x12345622 48 48 49 /** Generic destructor function pointer. */ 50 #define DTOR_T(identifier) \ 51 void (*identifier)(const void *) 52 49 53 /** Character string to generic type map declaration. 50 54 * @param[in] name Name of the map. … … 64 68 int name##_add(name##_t *, const uint8_t *, const size_t, type *); \ 65 69 int name##_count(name##_t *); \ 66 void name##_destroy(name##_t * ); \67 void name##_exclude(name##_t *, const uint8_t *, const size_t ); \70 void name##_destroy(name##_t *, DTOR_T()); \ 71 void name##_exclude(name##_t *, const uint8_t *, const size_t, DTOR_T()); \ 68 72 type *name##_find(name##_t *, const uint8_t *, const size_t); \ 69 73 int name##_initialize(name##_t *); \ … … 84 88 type *value) \ 85 89 { \ 86 int rc; \87 90 int index; \ 88 91 if (!name##_is_valid(map)) \ … … 91 94 if (index < 0) \ 92 95 return index; \ 93 rc = char_map_add(&map->names, name, length, index); \ 94 if (rc != EOK) { \ 95 name##_items_exclude_index(&map->values, index); \ 96 return rc; \ 97 } \ 98 return EOK; \ 96 return char_map_add(&map->names, name, length, index); \ 99 97 } \ 100 98 \ … … 105 103 } \ 106 104 \ 107 void name##_destroy(name##_t *map ) \105 void name##_destroy(name##_t *map, DTOR_T(dtor)) \ 108 106 { \ 109 107 if (name##_is_valid(map)) { \ 110 108 char_map_destroy(&map->names); \ 111 name##_items_destroy(&map->values ); \109 name##_items_destroy(&map->values, dtor); \ 112 110 } \ 113 111 } \ 114 112 \ 115 113 void name##_exclude(name##_t *map, const uint8_t *name, \ 116 const size_t length ) \114 const size_t length, DTOR_T(dtor)) \ 117 115 { \ 118 116 if (name##_is_valid(map)) { \ … … 121 119 if (index != CHAR_MAP_NULL) \ 122 120 name##_items_exclude_index(&map->values, \ 123 index ); \121 index, dtor); \ 124 122 } \ 125 123 } \ -
uspace/lib/c/include/adt/generic_field.h
r1ff896e r694ca93f 46 46 #define GENERIC_FIELD_MAGIC_VALUE 0x55667788 47 47 48 /** Generic destructor function pointer. */ 49 #define DTOR_T(identifier) \ 50 void (*identifier)(const void *) 51 48 52 /** Generic type field declaration. 49 53 * … … 63 67 int name##_add(name##_t *, type *); \ 64 68 int name##_count(name##_t *); \ 65 void name##_destroy(name##_t * ); \66 void name##_exclude_index(name##_t *, int ); \69 void name##_destroy(name##_t *, DTOR_T()); \ 70 void name##_exclude_index(name##_t *, int, DTOR_T()); \ 67 71 type **name##_get_field(name##_t *); \ 68 72 type *name##_get_index(name##_t *, int); \ … … 103 107 } \ 104 108 \ 105 void name##_destroy(name##_t *field ) \109 void name##_destroy(name##_t *field, DTOR_T(dtor)) \ 106 110 { \ 107 111 if (name##_is_valid(field)) { \ 108 112 int index; \ 109 113 field->magic = 0; \ 110 for (index = 0; index < field->next; index++) { \ 111 if (field->items[index]) \ 112 free(field->items[index]); \ 114 if (dtor) { \ 115 for (index = 0; index < field->next; index++) { \ 116 if (field->items[index]) \ 117 dtor(field->items[index]); \ 118 } \ 113 119 } \ 114 120 free(field->items); \ … … 116 122 } \ 117 123 \ 118 void name##_exclude_index(name##_t *field, int index ) \124 void name##_exclude_index(name##_t *field, int index, DTOR_T(dtor)) \ 119 125 { \ 120 126 if (name##_is_valid(field) && (index >= 0) && \ 121 127 (index < field->next) && (field->items[index])) { \ 122 free(field->items[index]); \ 128 if (dtor) \ 129 dtor(field->items[index]); \ 123 130 field->items[index] = NULL; \ 124 131 } \ -
uspace/lib/c/include/adt/int_map.h
r1ff896e r694ca93f 49 49 #define INT_MAP_ITEM_MAGIC_VALUE 0x55667788 50 50 51 /** Generic destructor function pointer. */ 52 #define DTOR_T(identifier) \ 53 void (*identifier)(const void *) 54 51 55 /** Integer to generic type map declaration. 52 56 * … … 72 76 \ 73 77 int name##_add(name##_t *, int, type *); \ 74 void name##_clear(name##_t * ); \78 void name##_clear(name##_t *, DTOR_T()); \ 75 79 int name##_count(name##_t *); \ 76 void name##_destroy(name##_t * ); \77 void name##_exclude(name##_t *, int ); \78 void name##_exclude_index(name##_t *, int ); \80 void name##_destroy(name##_t *, DTOR_T()); \ 81 void name##_exclude(name##_t *, int, DTOR_T()); \ 82 void name##_exclude_index(name##_t *, int, DTOR_T()); \ 79 83 type *name##_find(name##_t *, int); \ 80 84 int name##_update(name##_t *, int, int); \ … … 82 86 int name##_initialize(name##_t *); \ 83 87 int name##_is_valid(name##_t *); \ 84 void name##_item_destroy(name##_item_t * ); \88 void name##_item_destroy(name##_item_t *, DTOR_T()); \ 85 89 int name##_item_is_valid(name##_item_t *); 86 90 … … 115 119 } \ 116 120 \ 117 void name##_clear(name##_t *map ) \121 void name##_clear(name##_t *map, DTOR_T(dtor)) \ 118 122 { \ 119 123 if (name##_is_valid(map)) { \ … … 122 126 if (name##_item_is_valid(&map->items[index])) { \ 123 127 name##_item_destroy( \ 124 &map->items[index] ); \128 &map->items[index], dtor); \ 125 129 } \ 126 130 } \ … … 135 139 } \ 136 140 \ 137 void name##_destroy(name##_t *map ) \141 void name##_destroy(name##_t *map, DTOR_T(dtor)) \ 138 142 { \ 139 143 if (name##_is_valid(map)) { \ … … 143 147 if (name##_item_is_valid(&map->items[index])) { \ 144 148 name##_item_destroy( \ 145 &map->items[index] ); \149 &map->items[index], dtor); \ 146 150 } \ 147 151 } \ … … 150 154 } \ 151 155 \ 152 void name##_exclude(name##_t *map, int key ) \156 void name##_exclude(name##_t *map, int key, DTOR_T(dtor)) \ 153 157 { \ 154 158 if (name##_is_valid(map)) { \ … … 158 162 (map->items[index].key == key)) { \ 159 163 name##_item_destroy( \ 160 &map->items[index] ); \161 } \ 162 } \ 163 } \ 164 } \ 165 \ 166 void name##_exclude_index(name##_t *map, int index ) \164 &map->items[index], dtor); \ 165 } \ 166 } \ 167 } \ 168 } \ 169 \ 170 void name##_exclude_index(name##_t *map, int index, DTOR_T(dtor)) \ 167 171 { \ 168 172 if (name##_is_valid(map) && (index >= 0) && \ 169 173 (index < map->next) && \ 170 174 name##_item_is_valid(&map->items[index])) { \ 171 name##_item_destroy(&map->items[index] ); \175 name##_item_destroy(&map->items[index], dtor); \ 172 176 } \ 173 177 } \ … … 236 240 } \ 237 241 \ 238 void name##_item_destroy(name##_item_t *item ) \242 void name##_item_destroy(name##_item_t *item, DTOR_T(dtor)) \ 239 243 { \ 240 244 if (name##_item_is_valid(item)) { \ 241 245 item->magic = 0; \ 242 246 if (item->value) { \ 243 free(item->value); \ 247 if (dtor) \ 248 dtor(item->value); \ 244 249 item->value = NULL; \ 245 250 } \ -
uspace/lib/c/include/assert.h
r1ff896e r694ca93f 40 40 * 41 41 * If NDEBUG is not set, the assert() macro 42 * evaluates expr and if it is false prints 42 * evaluates expr and if it is false prints 43 43 * error message and terminate program. 44 44 * … … 47 47 */ 48 48 49 #include <stdio.h>50 #include <stdlib.h>51 52 49 #ifndef NDEBUG 53 50 54 51 #define assert(expr) \ 55 52 do { \ 56 if (!(expr)) { \ 57 printf("Assertion failed (%s) at file '%s', " \ 58 "line %d.\n", #expr, __FILE__, __LINE__); \ 59 abort(); \ 60 } \ 53 if (!(expr)) \ 54 assert_abort(#expr, __FILE__, __LINE__); \ 61 55 } while (0) 62 56 … … 67 61 #endif /* NDEBUG */ 68 62 63 extern void assert_abort(const char *, const char *, unsigned int) 64 __attribute__((noreturn)); 65 69 66 #endif 70 67 -
uspace/lib/c/include/async.h
r1ff896e r694ca93f 340 340 (arg4), (answer)) 341 341 342 extern int async_data_read_start(int, void *, size_t); 342 #define async_data_read_start(p, buf, len) \ 343 async_data_read_start_generic((p), (buf), (len), IPC_XF_NONE) 344 345 extern int async_data_read_start_generic(int, void *, size_t, int); 343 346 extern bool async_data_read_receive(ipc_callid_t *, size_t *); 344 347 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t); … … 379 382 (arg4), (answer)) 380 383 381 extern int async_data_write_start(int, const void *, size_t); 384 #define async_data_write_start(p, buf, len) \ 385 async_data_write_start_generic((p), (buf), (len), IPC_XF_NONE) 386 387 extern int async_data_write_start_generic(int, const void *, size_t, int); 382 388 extern bool async_data_write_receive(ipc_callid_t *, size_t *); 383 389 extern int async_data_write_finalize(ipc_callid_t, void *, size_t); -
uspace/lib/c/include/devman.h
r1ff896e r694ca93f 53 53 extern int devman_device_get_handle(const char *, devman_handle_t *, 54 54 unsigned int); 55 extern int devman_device_get_handle_by_class(const char *, const char *, 56 devman_handle_t *, unsigned int); 55 57 56 58 extern int devman_add_device_to_class(devman_handle_t, const char *); -
uspace/lib/c/include/entry_point.h
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 20 06 Jakub Jermar2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup sparc64mm29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_sparc64_CACHE_H_36 #define KERN_sparc64_CACHE_H_35 #ifndef LIBC_ENTRY_POINT_H_ 36 #define LIBC_ENTRY_POINT_H_ 37 37 38 #include <mm/page.h> 39 #include <mm/frame.h> 38 /* Defined in arch/ARCH/src/entryjmp.[c|s] */ 39 void entry_point_jmp(void *, void *); 40 40 41 41 #endif -
uspace/lib/c/include/errno.h
r1ff896e r694ca93f 39 39 #include <fibril.h> 40 40 41 #define errno _errno41 #define errno (*(__errno())) 42 42 43 extern int _errno;43 extern int *__errno(void) __attribute__((const)); 44 44 45 45 #define EMFILE (-18) -
uspace/lib/c/include/fibril_synch.h
r1ff896e r694ca93f 36 36 #define LIBC_FIBRIL_SYNCH_H_ 37 37 38 #include <async.h>39 38 #include <fibril.h> 40 39 #include <adt/list.h> 41 40 #include <libarch/tls.h> 42 41 #include <sys/time.h> 42 #include <bool.h> 43 43 44 44 typedef struct { 45 fibril_owner_info_t oi; /*Keep this the first thing. */45 fibril_owner_info_t oi; /**< Keep this the first thing. */ 46 46 int counter; 47 47 link_t waiters; … … 64 64 65 65 typedef struct { 66 fibril_owner_info_t oi; /*Keep this the first thing. */66 fibril_owner_info_t oi; /**< Keep this the first thing. */ 67 67 unsigned writers; 68 68 unsigned readers; -
uspace/lib/c/include/ipc/devman.h
r1ff896e r694ca93f 148 148 149 149 typedef enum { 150 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD 150 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD, 151 DEVMAN_DEVICE_GET_HANDLE_BY_CLASS 151 152 } client_to_devman_t; 152 153 -
uspace/lib/c/include/ipc/services.h
r1ff896e r694ca93f 47 47 SERVICE_DEVMAP, 48 48 SERVICE_DEVMAN, 49 SERVICE_FHC, 50 SERVICE_OBIO, 51 SERVICE_APIC, 52 SERVICE_I8259, 49 SERVICE_IRC, 53 50 SERVICE_CLIPBOARD, 54 51 SERVICE_NETWORKING, -
uspace/lib/c/include/loader/pcb.h
r1ff896e r694ca93f 72 72 /** Pointer to ELF dynamic section of the program. */ 73 73 void *dynamic; 74 /** Pointer to dynamic linker state structure (runtime_env_t). */ 75 void *rtld_runtime; 74 76 } pcb_t; 75 77 -
uspace/lib/c/include/macros.h
r1ff896e r694ca93f 39 39 #define max(a, b) ((a) > (b) ? (a) : (b)) 40 40 41 #define SIZE2KB(size) ((size) >> 10) 42 #define SIZE2MB(size) ((size) >> 20) 43 44 #define KB2SIZE(kb) ((kb) << 10) 45 #define MB2SIZE(mb) ((mb) << 20) 41 #define KiB2SIZE(kb) ((kb) << 10) 42 #define MiB2SIZE(mb) ((mb) << 20) 46 43 47 44 #define STRING(arg) STRING_ARG(arg) -
uspace/lib/c/include/rtld/module.h
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 2007 Jan Hudecek 3 * Copyright (c) 2008 Martin Decky 2 * Copyright (c) 2008 Jiri Svoboda 4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup genericproc29 /** @addtogroup libc 31 30 * @{ 32 31 */ 33 /** @file tasklet.h 34 * @brief Tasklets declarations 32 /** @file 35 33 */ 36 34 37 #ifndef KERN_TASKLET_H_38 #define KERN_TASKLET_H_35 #ifndef LIBC_RTLD_MODULE_H_ 36 #define LIBC_RTLD_MODULE_H_ 39 37 38 #include <sys/types.h> 39 #include <rtld/dynamic.h> 40 40 #include <adt/list.h> 41 41 42 /** Tasklet callback type */ 43 typedef void (* tasklet_callback_t)(void *arg); 42 typedef struct module { 43 dyn_info_t dyn; 44 size_t bias; 44 45 45 /** Tasklet state */ 46 typedef enum { 47 NotActive, 48 Scheduled, 49 InProgress, 50 Disabled 51 } tasklet_state_t; 46 /** Array of pointers to directly dependent modules */ 47 struct module **deps; 48 /** Number of fields in deps */ 49 size_t n_deps; 52 50 53 /** Structure describing a tasklet */ 54 typedef struct tasklet_descriptor { 55 link_t link; 56 57 /** Callback to call */ 58 tasklet_callback_t callback; 59 60 /** Argument passed to the callback */ 61 void *arg; 62 63 /** State of the tasklet */ 64 tasklet_state_t state; 65 } tasklet_descriptor_t; 51 /** True iff relocations have already been processed in this module. */ 52 bool relocated; 66 53 54 /** Link to list of all modules in runtime environment */ 55 link_t modules_link; 67 56 68 extern void tasklet_init(void); 57 /** Link to BFS queue. Only used when doing a BFS of the module graph */ 58 link_t queue_link; 59 /** Tag for modules already processed during a BFS */ 60 bool bfs_tag; 61 } module_t; 62 63 void module_process_relocs(module_t *m); 64 module_t *module_find(const char *name); 65 module_t *module_load(const char *name); 66 void module_load_deps(module_t *m); 67 68 void modules_process_relocs(module_t *start); 69 void modules_untag(void); 69 70 70 71 #endif -
uspace/lib/c/include/rtld/rtld_debug.h
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 20 05 Sergey Bondari2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup amd6429 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #ifndef KERN_amd64_MEMSTR_H_36 #define KERN_amd64_MEMSTR_H_35 #ifndef LIBC_RTLD_RTLD_DEBUG_H_ 36 #define LIBC_RTLD_RTLD_DEBUG_H_ 37 37 38 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) 38 /* Define to enable debugging mode. */ 39 #undef RTLD_DEBUG 39 40 40 extern void memsetw(void *, size_t, uint16_t); 41 extern void memsetb(void *, size_t, uint8_t); 41 #ifdef RTLD_DEBUG 42 #define DPRINTF(format, ...) printf(format, ##__VA_ARGS__) 43 #else 44 #define DPRINTF(format, ...) if (0) printf(format, ##__VA_ARGS__) 45 #endif 42 46 43 47 #endif -
uspace/lib/c/include/str.h
r1ff896e r694ca93f 89 89 extern int str_size_t(const char *, char **, unsigned int, bool, size_t *); 90 90 91 extern void order_suffix(const uint64_t val, uint64_t *rv, char *suffix); 91 extern void order_suffix(const uint64_t, uint64_t *, char *); 92 extern void bin_order_suffix(const uint64_t, uint64_t *, const char **, bool); 92 93 93 94 /* -
uspace/lib/drv/Makefile
r1ff896e r694ca93f 35 35 generic/driver.c \ 36 36 generic/dev_iface.c \ 37 generic/log.c \ 37 38 generic/remote_hw_res.c \ 38 39 generic/remote_char_dev.c -
uspace/lib/drv/generic/driver.c
r1ff896e r694ca93f 47 47 #include <stdlib.h> 48 48 #include <str.h> 49 #include <str_error.h> 49 50 #include <ctype.h> 50 51 #include <errno.h> … … 273 274 274 275 res = driver->driver_ops->add_device(dev); 275 if (res == EOK) { 276 printf("%s: new device with handle=%" PRIun " was added.\n", 277 driver->name, dev_handle); 278 } else { 279 printf("%s: failed to add a new device with handle = %" PRIun ".\n", 280 driver->name, dev_handle); 276 if (res != EOK) 281 277 delete_device(dev); 282 }283 278 284 279 async_answer_0(iid, res); … … 408 403 get_remote_method(rem_iface, iface_method_idx); 409 404 if (iface_method_ptr == NULL) { 410 / / the interface has not such method405 /* The interface has not such method */ 411 406 printf("%s: driver_connection_gen error - " 412 407 "invalid interface method.", driver->name); … … 661 656 int ddf_driver_main(driver_t *drv) 662 657 { 658 int rc; 659 663 660 /* 664 661 * Remember the driver structure - driver_ops will be called by generic … … 674 671 675 672 /* 676 * Register driver by device manager with generic handler for incoming677 * connections.673 * Register driver with device manager using generic handler for 674 * incoming connections. 678 675 */ 679 devman_driver_register(driver->name, driver_connection); 680 676 rc = devman_driver_register(driver->name, driver_connection); 677 if (rc != EOK) { 678 printf("Error: Failed to register driver with device manager " 679 "(%s).\n", (rc == EEXISTS) ? "driver already started" : 680 str_error(rc)); 681 682 return 1; 683 } 684 685 /* Return success from the task since server has started. */ 686 rc = task_retval(0); 687 if (rc != EOK) 688 return 1; 689 681 690 async_manager(); 682 691 -
uspace/lib/drv/generic/log.c
r1ff896e r694ca93f 1 1 /* 2 * Copyright (c) 2007 Jan Hudecek 3 * Copyright (c) 2008 Martin Decky 2 * Copyright (c) 2011 Jiri Svoboda 4 3 * All rights reserved. 5 4 * … … 28 27 */ 29 28 30 /** @addtogroup genericproc29 /** @addtogroup libdrv 31 30 * @{ 32 31 */ 33 /** @file tasklet.c 34 * @brief Tasklet implementation 32 33 #include <io/log.h> 34 #include <stdarg.h> 35 36 #include <ddf/log.h> 37 38 /** Initialize the logging system. 39 * 40 * @param drv_name Driver name, will be printed as part of message 41 * @param level Minimum message level to print 35 42 */ 36 37 #include <proc/tasklet.h> 38 #include <synch/spinlock.h> 39 #include <mm/slab.h> 40 #include <config.h> 41 42 /** Spinlock protecting list of tasklets */ 43 SPINLOCK_INITIALIZE(tasklet_lock); 44 45 /** Array of tasklet lists for every CPU */ 46 tasklet_descriptor_t **tasklet_list; 47 48 void tasklet_init(void) 43 int ddf_log_init(const char *drv_name, log_level_t level) 49 44 { 50 unsigned int i; 51 52 tasklet_list = malloc(sizeof(tasklet_descriptor_t *) * config.cpu_count, 0); 53 if (!tasklet_list) 54 panic("Error initializing tasklets."); 55 56 for (i = 0; i < config.cpu_count; i++) 57 tasklet_list[i] = NULL; 58 59 spinlock_initialize(&tasklet_lock, "tasklet_lock"); 45 return log_init(drv_name, level); 60 46 } 61 47 48 /** Log a driver message. 49 * 50 * @param level Message verbosity level. Message is only printed 51 * if verbosity is less than or equal to current 52 * reporting level. 53 * @param fmt Format string (no trailing newline) 54 */ 55 void ddf_msg(log_level_t level, const char *fmt, ...) 56 { 57 va_list args; 58 59 va_start(args, fmt); 60 log_msgv(level, fmt, args); 61 va_end(args); 62 } 62 63 63 64 /** @} -
uspace/lib/fs/libfs.c
r1ff896e r694ca93f 391 391 if (lflag & L_CREATE) 392 392 (void) ops->destroy(fn); 393 else 394 (void) ops->node_put(fn); 393 395 async_answer_0(rid, rc); 394 396 } else { … … 473 475 if (lflag & L_CREATE) 474 476 (void) ops->destroy(fn); 477 else 478 (void) ops->node_put(fn); 475 479 async_answer_0(rid, rc); 476 480 } else { -
uspace/lib/net/generic/generic.c
r1ff896e r694ca93f 106 106 return EBADMEM; 107 107 108 / / request the address108 /* Request the address */ 109 109 message_id = async_send_1(phone, (sysarg_t) message, 110 110 (sysarg_t) device_id, NULL); … … 112 112 async_wait_for(message_id, &result); 113 113 114 / / if not successful114 /* If not successful */ 115 115 if ((string == EOK) && (result != EOK)) { 116 / / clear the data116 /* Clear the data */ 117 117 free(*address); 118 118 free(*data); … … 242 242 return EBADMEM; 243 243 244 / / request the translation244 /* Request the translation */ 245 245 message_id = async_send_3(phone, (sysarg_t) message, 246 246 (sysarg_t) device_id, (sysarg_t) count, (sysarg_t) service, NULL); … … 249 249 async_wait_for(message_id, &result); 250 250 251 / / if not successful251 /* If not successful */ 252 252 if ((string == EOK) && (result != EOK)) { 253 / / clear the data253 /* Clear the data */ 254 254 free(*translation); 255 255 free(*data); -
uspace/lib/net/generic/net_checksum.c
r1ff896e r694ca93f 52 52 uint16_t compact_checksum(uint32_t sum) 53 53 { 54 / / shorten to the 16 bits54 /* Shorten to the 16 bits */ 55 55 while (sum >> 16) 56 56 sum = (sum & 0xffff) + (sum >> 16); … … 72 72 size_t index; 73 73 74 / / sum all the 16 bit fields74 /* Sum all the 16 bit fields */ 75 75 for (index = 0; index + 1 < length; index += 2) 76 76 seed += (data[index] << 8) + data[index + 1]; 77 77 78 / / last odd byte with zero padding78 /* Last odd byte with zero padding */ 79 79 if (index + 1 == length) 80 80 seed += data[index] << 8; … … 94 94 size_t index; 95 95 96 / / process full bytes96 /* Process full bytes */ 97 97 while (length >= 8) { 98 / / add the data98 /* Add the data */ 99 99 seed ^= (*data) << 24; 100 100 101 / / for each added bit101 /* For each added bit */ 102 102 for (index = 0; index < 8; ++index) { 103 / / if the first bit is set103 /* If the first bit is set */ 104 104 if (seed & 0x80000000) { 105 / / shift and divide the checksum105 /* Shift and divide the checksum */ 106 106 seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE); 107 107 } else { 108 / / shift otherwise108 /* Shift otherwise */ 109 109 seed <<= 1; 110 110 } 111 111 } 112 112 113 / / move to the next byte113 /* Move to the next byte */ 114 114 ++data; 115 115 length -= 8; 116 116 } 117 117 118 / / process the odd bits118 /* Process the odd bits */ 119 119 if (length > 0) { 120 / / add the data with zero padding120 /* Add the data with zero padding */ 121 121 seed ^= ((*data) & (0xff << (8 - length))) << 24; 122 122 123 / / for each added bit123 /* For each added bit */ 124 124 for (index = 0; index < length; ++index) { 125 / / if the first bit is set125 /* If the first bit is set */ 126 126 if (seed & 0x80000000) { 127 / / shift and divide the checksum127 /* Shift and divide the checksum */ 128 128 seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE); 129 129 } else { 130 / / shift otherwise130 /* Shift otherwise */ 131 131 seed <<= 1; 132 132 } … … 148 148 size_t index; 149 149 150 / / process full bytes150 /* Process full bytes */ 151 151 while (length >= 8) { 152 / / add the data152 /* Add the data */ 153 153 seed ^= (*data); 154 154 155 / / for each added bit155 /* For each added bit */ 156 156 for (index = 0; index < 8; ++index) { 157 / / if the last bit is set157 /* If the last bit is set */ 158 158 if (seed & 1) { 159 / / shift and divide the checksum159 /* Shift and divide the checksum */ 160 160 seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE); 161 161 } else { 162 / / shift otherwise162 /* Shift otherwise */ 163 163 seed >>= 1; 164 164 } 165 165 } 166 166 167 / / move to the next byte167 /* Move to the next byte */ 168 168 ++data; 169 169 length -= 8; 170 170 } 171 171 172 / / process the odd bits172 /* Process the odd bits */ 173 173 if (length > 0) { 174 / / add the data with zero padding174 /* Add the data with zero padding */ 175 175 seed ^= (*data) >> (8 - length); 176 176 177 177 for (index = 0; index < length; ++index) { 178 / / if the last bit is set178 /* If the last bit is set */ 179 179 if (seed & 1) { 180 / / shift and divide the checksum180 /* Shift and divide the checksum */ 181 181 seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE); 182 182 } else { 183 / / shift otherwise183 /* Shift otherwise */ 184 184 seed >>= 1; 185 185 } … … 198 198 uint16_t flip_checksum(uint16_t checksum) 199 199 { 200 / / flip, zero is returned as 0xFFFF (not flipped)200 /* Flip, zero is returned as 0xFFFF (not flipped) */ 201 201 checksum = ~checksum; 202 202 return checksum ? checksum : IP_CHECKSUM_ZERO; … … 216 216 uint16_t ip_checksum(uint8_t *data, size_t length) 217 217 { 218 / / compute, compact and flip the data checksum218 /* Compute, compact and flip the data checksum */ 219 219 return flip_checksum(compact_checksum(compute_checksum(0, data, 220 220 length))); -
uspace/lib/net/generic/packet_client.c
r1ff896e r694ca93f 267 267 return NULL; 268 268 269 / / get a new packet269 /* Get a new packet */ 270 270 copy = packet_get_4_remote(phone, PACKET_DATA_LENGTH(packet), 271 271 PACKET_MAX_ADDRESS_LENGTH(packet), packet->max_prefix, … … 274 274 return NULL; 275 275 276 / / get addresses276 /* Get addresses */ 277 277 addrlen = packet_get_addr(packet, &src, &dest); 278 / / copy data278 /* Copy data */ 279 279 if ((packet_copy_data(copy, packet_get_data(packet), 280 280 PACKET_DATA_LENGTH(packet)) == EOK) && 281 / / copy addresses if present281 /* Copy addresses if present */ 282 282 ((addrlen <= 0) || 283 283 (packet_set_addr(copy, src, dest, addrlen) == EOK))) { -
uspace/lib/net/il/ip_client.c
r1ff896e r694ca93f 124 124 125 125 // TODO IPv6 126 /* case AF_INET6: 126 #if 0 127 case AF_INET6: 127 128 if (addrlen != sizeof(struct sockaddr_in6)) 128 129 return EINVAL; … … 130 131 address_in6 = (struct sockaddr_in6 *) addr; 131 132 return EOK; 132 */ 133 #endif 133 134 134 135 default: … … 159 160 size_t padding; 160 161 161 // compute the padding if IP options are set 162 // multiple of 4 bytes 162 /* 163 * Compute the padding if IP options are set 164 * multiple of 4 bytes 165 */ 163 166 padding = ipopt_length % 4; 164 167 if (padding) { … … 167 170 } 168 171 169 / / prefix the header172 /* Prefix the header */ 170 173 data = (uint8_t *) packet_prefix(packet, sizeof(ip_header_t) + padding); 171 174 if (!data) 172 175 return ENOMEM; 173 176 174 / / add the padding177 /* Add the padding */ 175 178 while (padding--) 176 179 data[sizeof(ip_header_t) + padding] = IPOPT_NOOP; 177 180 178 / / set the header181 /* Set the header */ 179 182 header = (ip_header_t *) data; 180 183 header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) + -
uspace/lib/net/tl/icmp_client.c
r1ff896e r694ca93f 81 81 *mtu = header->un.frag.mtu; 82 82 83 / / remove debug dump83 /* Remove debug dump */ 84 84 #ifdef CONFIG_DEBUG 85 85 printf("ICMP error %d (%d) in packet %d\n", header->type, header->code, -
uspace/lib/net/tl/socket_core.c
r1ff896e r694ca93f 91 91 int packet_id; 92 92 93 / / if bound93 /* If bound */ 94 94 if (socket->port) { 95 / / release the port95 /* Release the port */ 96 96 socket_port_release(global_sockets, socket); 97 97 } 98 98 99 / / release all received packets99 /* Release all received packets */ 100 100 while ((packet_id = dyn_fifo_pop(&socket->received)) >= 0) 101 101 pq_release_remote(packet_phone, packet_id); … … 107 107 socket_release(socket); 108 108 109 socket_cores_exclude(local_sockets, socket->socket_id );109 socket_cores_exclude(local_sockets, socket->socket_id, free); 110 110 } 111 111 … … 166 166 int rc; 167 167 168 / / create a wrapper168 /* Create a wrapper */ 169 169 socket_ref = malloc(sizeof(*socket_ref)); 170 170 if (!socket_ref) … … 172 172 173 173 *socket_ref = socket; 174 / / add the wrapper174 /* Add the wrapper */ 175 175 rc = socket_port_map_add(&socket_port->map, key, key_length, 176 176 socket_ref); … … 206 206 int rc; 207 207 208 / / create a wrapper208 /* Create a wrapper */ 209 209 socket_port = malloc(sizeof(*socket_port)); 210 210 if (!socket_port) … … 221 221 goto fail; 222 222 223 / / register the incomming port223 /* Register the incoming port */ 224 224 rc = socket_ports_add(global_sockets, port, socket_port); 225 225 if (rc < 0) … … 230 230 231 231 fail: 232 socket_port_map_destroy(&socket_port->map );232 socket_port_map_destroy(&socket_port->map, free); 233 233 free(socket_port); 234 234 return rc; … … 277 277 278 278 address_in = (struct sockaddr_in *) addr; 279 / / find the socket279 /* Find the socket */ 280 280 socket = socket_cores_find(local_sockets, socket_id); 281 281 if (!socket) 282 282 return ENOTSOCK; 283 283 284 / / bind a free port?284 /* Bind a free port? */ 285 285 if (address_in->sin_port <= 0) 286 286 return socket_bind_free_port(global_sockets, socket, 287 287 free_ports_start, free_ports_end, last_used_port); 288 288 289 / / try to find the port289 /* Try to find the port */ 290 290 socket_port = socket_ports_find(global_sockets, 291 291 ntohs(address_in->sin_port)); 292 292 if (socket_port) { 293 / / already used293 /* Already used */ 294 294 return EADDRINUSE; 295 295 } 296 296 297 / / if bound297 /* If bound */ 298 298 if (socket->port) { 299 / / release the port299 /* Release the port */ 300 300 socket_port_release(global_sockets, socket); 301 301 } … … 333 333 int index; 334 334 335 / / from the last used one335 /* From the last used one */ 336 336 index = last_used_port; 337 337 … … 339 339 ++index; 340 340 341 / / til the range end341 /* Till the range end */ 342 342 if (index >= free_ports_end) { 343 / / start from the range beginning343 /* Start from the range beginning */ 344 344 index = free_ports_start - 1; 345 345 do { 346 346 ++index; 347 / / til the last used one347 /* Till the last used one */ 348 348 if (index >= last_used_port) { 349 / / none found349 /* None found */ 350 350 return ENOTCONN; 351 351 } 352 352 } while (socket_ports_find(global_sockets, index)); 353 353 354 / / found, break immediately354 /* Found, break immediately */ 355 355 break; 356 356 } … … 376 376 377 377 count = 0; 378 // socket_id = socket_globals.last_id; 378 #if 0 379 socket_id = socket_globals.last_id; 380 #endif 379 381 do { 380 382 if (count < SOCKET_ID_TRIES) { … … 384 386 socket_id = 1; 385 387 ++count; 386 / / only this branch for last_id388 /* Only this branch for last_id */ 387 389 } else { 388 390 if (socket_id < INT_MAX) { 389 391 ++ socket_id; 390 /* } else if(socket_globals.last_id) { 391 * socket_globals.last_id = 0; 392 * socket_id = 1; 393 */ } else { 392 #if 0 393 } else if(socket_globals.last_id) { 394 socket_globals.last_id = 0; 395 socket_id = 1; 396 #endif 397 } else { 394 398 return ELIMIT; 395 399 } … … 425 429 return EINVAL; 426 430 427 / / store the socket431 /* Store the socket */ 428 432 if (*socket_id <= 0) { 429 433 positive = (*socket_id == 0); … … 441 445 return ENOMEM; 442 446 443 / / initialize447 /* Initialize */ 444 448 socket->phone = app_phone; 445 449 socket->port = -1; … … 493 497 int accepted_id; 494 498 495 / / find the socket499 /* Find the socket */ 496 500 socket = socket_cores_find(local_sockets, socket_id); 497 501 if (!socket) 498 502 return ENOTSOCK; 499 503 500 / / destroy all accepted sockets504 /* Destroy all accepted sockets */ 501 505 while ((accepted_id = dyn_fifo_pop(&socket->accepted)) >= 0) 502 506 socket_destroy(packet_phone, accepted_id, local_sockets, … … 535 539 next_packet = pq_next(packet); 536 540 if (!next_packet) { 537 / / write all if only one fragment541 /* Write all if only one fragment */ 538 542 rc = data_reply(packet_get_data(packet), 539 543 packet_get_data_length(packet)); 540 544 if (rc != EOK) 541 545 return rc; 542 / / store the total length546 /* Store the total length */ 543 547 *length = packet_get_data_length(packet); 544 548 } else { 545 / / count the packet fragments549 /* Count the packet fragments */ 546 550 fragments = 1; 547 551 next_packet = pq_next(packet); … … 549 553 ++fragments; 550 554 551 / / compute and store the fragment lengths555 /* Compute and store the fragment lengths */ 552 556 lengths = (size_t *) malloc(sizeof(size_t) * fragments + 553 557 sizeof(size_t)); … … 565 569 } 566 570 567 / / write the fragment lengths571 /* Write the fragment lengths */ 568 572 rc = data_reply(lengths, sizeof(int) * (fragments + 1)); 569 573 if (rc != EOK) { … … 573 577 next_packet = packet; 574 578 575 / / write the fragments579 /* Write the fragments */ 576 580 for (index = 0; index < fragments; ++index) { 577 581 rc = data_reply(packet_get_data(next_packet), … … 584 588 } 585 589 586 / / store the total length590 /* Store the total length */ 587 591 *length = lengths[fragments]; 588 592 free(lengths); … … 636 640 return; 637 641 638 / / find ports642 /* Find ports */ 639 643 socket_port = socket_ports_find(global_sockets, socket->port); 640 644 if (socket_port) { 641 / / find the socket645 /* Find the socket */ 642 646 socket_ref = socket_port_map_find(&socket_port->map, 643 647 socket->key, socket->key_length); … … 646 650 --socket_port->count; 647 651 648 / / release if empty652 /* Release if empty */ 649 653 if (socket_port->count <= 0) { 650 / / destroy the map651 socket_port_map_destroy(&socket_port->map );652 / / release the port654 /* Destroy the map */ 655 socket_port_map_destroy(&socket_port->map, free); 656 /* Release the port */ 653 657 socket_ports_exclude(global_sockets, 654 socket->port );658 socket->port, free); 655 659 } else { 656 / / remove660 /* Remove */ 657 661 socket_port_map_exclude(&socket_port->map, 658 socket->key, socket->key_length );662 socket->key, socket->key_length, free); 659 663 } 660 664 } … … 685 689 int rc; 686 690 687 / / find ports691 /* Find ports */ 688 692 socket_port = socket_ports_find(global_sockets, port); 689 693 if (!socket_port) 690 694 return ENOENT; 691 695 692 / / add the socket696 /* Add the socket */ 693 697 rc = socket_port_add_core(socket_port, socket, key, key_length); 694 698 if (rc != EOK) -
uspace/lib/net/tl/tl_common.c
r1ff896e r694ca93f 182 182 else 183 183 packet_dimensions_exclude(packet_dimensions, 184 DEVICE_INVALID_ID );184 DEVICE_INVALID_ID, free); 185 185 } 186 186 } … … 255 255 int length; 256 256 257 / / detach the first packet and release the others257 /* Detach the first packet and release the others */ 258 258 next = pq_detach(packet); 259 259 if (next) … … 262 262 length = packet_get_addr(packet, &src, NULL); 263 263 if ((length > 0) && (!error) && (icmp_phone >= 0) && 264 // set both addresses to the source one (avoids the source address 265 // deletion before setting the destination one) 264 /* 265 * Set both addresses to the source one (avoids the source address 266 * deletion before setting the destination one) 267 */ 266 268 (packet_set_addr(packet, src, src, (size_t) length) == EOK)) { 267 269 return EOK; … … 299 301 return EINVAL; 300 302 301 / / get the data length303 /* Get the data length */ 302 304 if (!async_data_write_receive(&callid, &length)) 303 305 return EINVAL; 304 306 305 / / get a new packet307 /* Get a new packet */ 306 308 *packet = packet_get_4_remote(packet_phone, length, dimension->addr_len, 307 309 prefix + dimension->prefix, dimension->suffix); … … 309 311 return ENOMEM; 310 312 311 / / allocate space in the packet313 /* Allocate space in the packet */ 312 314 data = packet_suffix(*packet, length); 313 315 if (!data) { … … 316 318 } 317 319 318 / / read the data into the packet320 /* Read the data into the packet */ 319 321 rc = async_data_write_finalize(callid, data, length); 320 322 if (rc != EOK) { … … 323 325 } 324 326 325 / / set the packet destination address327 /* Set the packet destination address */ 326 328 rc = packet_set_addr(*packet, NULL, (uint8_t *) addr, addrlen); 327 329 if (rc != EOK) { -
uspace/lib/packet/generic/packet_server.c
r1ff896e r694ca93f 112 112 size_t max_content, size_t max_suffix) 113 113 { 114 / / clear the packet content114 /* Clear the packet content */ 115 115 bzero(((void *) packet) + sizeof(packet_t), 116 116 packet->length - sizeof(packet_t)); 117 117 118 / / clear the packet header118 /* Clear the packet header */ 119 119 packet->order = 0; 120 120 packet->metric = 0; … … 151 151 assert(fibril_mutex_is_locked(&ps_globals.lock)); 152 152 153 / / already locked153 /* Already locked */ 154 154 packet = (packet_t *) mmap(NULL, length, PROTO_READ | PROTO_WRITE, 155 155 MAP_SHARED | MAP_ANONYMOUS, 0, 0); -
uspace/lib/softint/Makefile
r1ff896e r694ca93f 31 31 EXTRA_CFLAGS = -Iinclude 32 32 LIBRARY = libsoftint 33 SLIBRARY = libsoftint.so.0.0 34 LSONAME = libsofti.so0 33 35 34 36 SOURCES = \ 35 generic/division.c \37 generic/division.c \ 36 38 generic/multiplication.c 37 39 -
uspace/lib/softint/generic/multiplication.c
r1ff896e r694ca93f 109 109 * result does not fit in signed one */ 110 110 if (SOFTINT_CHECK_OF && ((t2 < t1) || (t2 & (1ull << 63)))) { 111 / / error, overflow111 /* Error, overflow */ 112 112 return (neg ? INT64_MIN : INT64_MAX); 113 113 }
Note:
See TracChangeset
for help on using the changeset viewer.
