Changeset d5a89a3 in mainline for uspace/lib/c/arch/arm32
- Timestamp:
- 2019-02-11T22:31:04Z (7 years ago)
- Children:
- aaf9789c
- Parents:
- e3272101 (diff), 4805495 (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/c/arch/arm32
- Files:
-
- 4 added
- 17 edited
- 1 moved
-
Makefile.common (modified) (1 diff)
-
Makefile.inc (modified) (1 diff)
-
include/libarch/config.h (modified) (1 diff)
-
include/libarch/ddi.h (modified) (1 diff)
-
include/libarch/elf_linux.h (modified) (1 diff)
-
include/libarch/faddr.h (modified) (1 diff)
-
include/libarch/fibril.h (modified) (1 diff)
-
include/libarch/fibril_context.h (modified) (3 diffs)
-
include/libarch/rtld/dynamic.h (moved) (moved from uspace/lib/cpp/include/__bits/common.hpp ) (2 diffs)
-
include/libarch/rtld/elf_dyn.h (added)
-
include/libarch/rtld/module.h (added)
-
include/libarch/stackarg.h (modified) (1 diff)
-
include/libarch/syscall.h (modified) (1 diff)
-
include/libarch/thread.h (modified) (1 diff)
-
include/libarch/tls.h (modified) (2 diffs)
-
src/atomic.c (modified) (1 diff)
-
src/entry.S (modified) (1 diff)
-
src/fibril.S (modified) (3 diffs)
-
src/rtld/dynamic.c (added)
-
src/rtld/reloc.c (added)
-
src/syscall.c (modified) (1 diff)
-
src/tls.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/arch/arm32/Makefile.common
re3272101 rd5a89a3 29 29 30 30 COMMON_CFLAGS += -ffixed-r9 -mtp=soft -fno-omit-frame-pointer -mapcs-frame \ 31 -mcpu=$(subst _,-,$(PROCESSOR)) 31 -mcpu=$(subst _,-,$(PROCESSOR)) -Wl,-z,max-page-size=0x1000 32 32 33 33 LDFLAGS += -Wl,--gc-sections -
uspace/lib/c/arch/arm32/Makefile.inc
re3272101 rd5a89a3 37 37 arch/$(UARCH)/src/eabi.S \ 38 38 arch/$(UARCH)/src/stacktrace.c \ 39 arch/$(UARCH)/src/stacktrace_asm.S 39 arch/$(UARCH)/src/stacktrace_asm.S \ 40 arch/$(UARCH)/src/rtld/dynamic.c \ 41 arch/$(UARCH)/src/rtld/reloc.c -
uspace/lib/c/arch/arm32/include/libarch/config.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_CONFIG_H_37 #define LIBC_arm32_CONFIG_H_36 #ifndef _LIBC_arm32_CONFIG_H_ 37 #define _LIBC_arm32_CONFIG_H_ 38 38 39 39 #define PAGE_WIDTH 12 -
uspace/lib/c/arch/arm32/include/libarch/ddi.h
re3272101 rd5a89a3 31 31 */ 32 32 33 #ifndef LIBC_arm32_DDI_H_34 #define LIBC_arm32_DDI_H_33 #ifndef _LIBC_arm32_DDI_H_ 34 #define _LIBC_arm32_DDI_H_ 35 35 36 36 #include <ddi.h> -
uspace/lib/c/arch/arm32/include/libarch/elf_linux.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_arm32_ELF_LINUX_H_36 #define LIBC_arm32_ELF_LINUX_H_35 #ifndef _LIBC_arm32_ELF_LINUX_H_ 36 #define _LIBC_arm32_ELF_LINUX_H_ 37 37 38 38 #include <libarch/istate.h> -
uspace/lib/c/arch/arm32/include/libarch/faddr.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_FADDR_H_37 #define LIBC_arm32_FADDR_H_36 #ifndef _LIBC_arm32_FADDR_H_ 37 #define _LIBC_arm32_FADDR_H_ 38 38 39 39 #include <types/common.h> -
uspace/lib/c/arch/arm32/include/libarch/fibril.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_FIBRIL_H_37 #define LIBC_arm32_FIBRIL_H_36 #ifndef _LIBC_arm32_FIBRIL_H_ 37 #define _LIBC_arm32_FIBRIL_H_ 38 38 39 39 #include <types/common.h> -
uspace/lib/c/arch/arm32/include/libarch/fibril_context.h
re3272101 rd5a89a3 27 27 */ 28 28 29 #ifndef LIBC_ARCH_FIBRIL_CONTEXT_H_30 #define LIBC_ARCH_FIBRIL_CONTEXT_H_29 #ifndef _LIBC_ARCH_FIBRIL_CONTEXT_H_ 30 #define _LIBC_ARCH_FIBRIL_CONTEXT_H_ 31 31 32 32 #include <stdint.h> … … 41 41 // XXX: This struct must match the assembly code in src/fibril.S 42 42 43 typedef struct context {43 typedef struct __context { 44 44 uintptr_t sp; 45 45 uintptr_t pc; … … 54 54 /* r11 */ 55 55 uint32_t fp; 56 } context_t;56 } __context_t; 57 57 58 58 #endif -
uspace/lib/c/arch/arm32/include/libarch/rtld/dynamic.h
re3272101 rd5a89a3 1 1 /* 2 * Copyright (c) 201 8 Jaroslav Jindrak2 * Copyright (c) 2019 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 #ifndef LIBCPP_BITS_COMMON 30 #define LIBCPP_BITS_COMMON 29 /** @addtogroup libc 30 * @{ 31 */ 32 /** @file 33 */ 31 34 32 /** 33 * According to section 17.2 of the standard, 34 * the restrict qualifier shall be omitted. 35 */ 36 #define restrict 35 #ifndef _LIBC_arm32_RTLD_DYNAMIC_H_ 36 #define _LIBC_arm32_RTLD_DYNAMIC_H_ 37 37 38 #undef NULL 39 #define NULL nullptr 38 typedef struct { 39 /* Empty. */ 40 } dyn_info_arch_t; 40 41 41 42 #endif 43 44 /** @} 45 */ -
uspace/lib/c/arch/arm32/include/libarch/stackarg.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_STACKARG_H_37 #define LIBC_arm32_STACKARG_H_36 #ifndef _LIBC_arm32_STACKARG_H_ 37 #define _LIBC_arm32_STACKARG_H_ 38 38 39 39 #endif -
uspace/lib/c/arch/arm32/include/libarch/syscall.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_SYSCALL_H_37 #define LIBC_arm32_SYSCALL_H_36 #ifndef _LIBC_arm32_SYSCALL_H_ 37 #define _LIBC_arm32_SYSCALL_H_ 38 38 39 39 #define LIBARCH_SYSCALL_GENERIC -
uspace/lib/c/arch/arm32/include/libarch/thread.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_THREAD_H_37 #define LIBC_arm32_THREAD_H_36 #ifndef _LIBC_arm32_THREAD_H_ 37 #define _LIBC_arm32_THREAD_H_ 38 38 39 39 #endif -
uspace/lib/c/arch/arm32/include/libarch/tls.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_arm32_TLS_H_37 #define LIBC_arm32_TLS_H_36 #ifndef _LIBC_arm32_TLS_H_ 37 #define _LIBC_arm32_TLS_H_ 38 38 39 39 #include <stdint.h> … … 49 49 */ 50 50 typedef struct { 51 void **dtv; 52 void *pad; 51 53 /** Fibril data. */ 52 54 void *fibril_data; -
uspace/lib/c/arch/arm32/src/atomic.c
re3272101 rd5a89a3 35 35 #include <stdbool.h> 36 36 37 externvolatile unsigned *ras_page;37 volatile unsigned *ras_page; 38 38 39 39 bool __atomic_compare_exchange_4(volatile unsigned *mem, unsigned *expected, unsigned desired, bool weak, int success, int failure) -
uspace/lib/c/arch/arm32/src/entry.S
re3272101 rd5a89a3 56 56 57 57 .data 58 59 SYMBOL(ras_page)60 .long 0 -
uspace/lib/c/arch/arm32/src/fibril.S
re3272101 rd5a89a3 31 31 .text 32 32 33 FUNCTION_BEGIN(__ setjmp)33 FUNCTION_BEGIN(__context_save) 34 34 stmia r0!, {sp, lr} 35 35 stmia r0!, {r4-r11} … … 38 38 mov r0, #0 39 39 mov pc, lr 40 FUNCTION_END(__ setjmp)40 FUNCTION_END(__context_save) 41 41 42 FUNCTION_BEGIN(__ longjmp)42 FUNCTION_BEGIN(__context_restore) 43 43 ldmia r0!, {sp, lr} 44 44 ldmia r0!, {r4-r11} … … 47 47 mov r0, r1 48 48 mov pc, lr 49 FUNCTION_END(__ longjmp)49 FUNCTION_END(__context_restore) 50 50 -
uspace/lib/c/arch/arm32/src/syscall.c
re3272101 rd5a89a3 70 70 "r" (__arm_reg_r5), 71 71 "r" (__arm_reg_r6) 72 : 73 /* 74 * Clobber memory too as some arguments might be 75 * actually pointers. 76 */ 77 "memory" 72 78 ); 73 79 -
uspace/lib/c/arch/arm32/src/tls.c
re3272101 rd5a89a3 1 1 /* 2 * Copyright (c) 2019 Jiri Svoboda 2 3 * Copyright (c) 2007 Pavel Jancik 3 4 * All rights reserved. … … 38 39 #include <stddef.h> 39 40 41 #ifdef CONFIG_RTLD 42 #include <rtld/rtld.h> 43 #endif 44 40 45 tcb_t *tls_alloc_arch(size_t size, size_t align) 41 46 { … … 48 53 } 49 54 55 /* 56 * Rtld TLS support 57 */ 58 59 typedef struct { 60 unsigned long int ti_module; 61 unsigned long int ti_offset; 62 } tls_index; 63 64 int __tls_debug = 0; 65 66 void *__tls_get_addr(tls_index *ti); 67 68 void *__tls_get_addr(tls_index *ti) 69 { 70 uint8_t *tls; 71 72 #ifdef CONFIG_RTLD 73 if (runtime_env != NULL) { 74 return rtld_tls_get_addr(runtime_env, __tcb_get(), 75 ti->ti_module, ti->ti_offset); 76 } 77 #endif 78 /* Get address of static TLS block */ 79 tls = tls_get(); 80 return tls + ti->ti_offset; 81 } 82 50 83 /** @} 51 84 */
Note:
See TracChangeset
for help on using the changeset viewer.
