Changeset 1ea99cc in mainline for uspace/lib


Ignore:
Timestamp:
2009-08-20T20:47:35Z (16 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b50b5af2
Parents:
24edc18
Message:

Merge changes from original Subversion dynload branch.

Location:
uspace/lib
Files:
43 added
11 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/Makefile

    r24edc18 r1ea99cc  
    11#
    22# Copyright (c) 2005 Martin Decky
     3# Copyright (c) 2008 Jiri Svoboda
    34# All rights reserved.
    45#
     
    3839
    3940include $(LIBC_PREFIX)/Makefile.toolchain
     41-include rtld/arch/$(UARCH)/Makefile.inc
    4042
     43CFLAGS += -Irtld/include -I../../srv/loader/include -D__32_BITS__
     44PIC_CFLAGS := $(CFLAGS) -fPIC -D__IN_SHARED_LIBC__
    4145
    4246## Sources
     
    7478        generic/ipc.c \
    7579        generic/async.c \
     80        generic/dlfcn.c \
    7681        generic/loader.c \
    7782        generic/getopt.c \
     
    8489        generic/udebug.c \
    8590        generic/vfs/vfs.c \
    86         generic/vfs/canonify.c
     91        generic/vfs/canonify.c \
     92        rtld/rtld.c \
     93        rtld/elf_load.c \
     94        rtld/dynamic.c \
     95        rtld/module.c \
     96        rtld/symbol.c
     97
    8798
    8899ARCH_SOURCES += \
     
    93104ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
    94105OBJECTS := $(GENERIC_OBJECTS) $(ARCH_OBJECTS)
     106PIC_OBJECTS := $(addsuffix .pio,$(basename $(OBJECTS)))
     107
     108OUTPUT := libc.a
     109
     110ifeq ($(CONFIG_BUILD_SHARED_LIBC), y)
     111        OUTPUT += libc.pic.a
     112endif
    95113
    96114.PHONY: all clean depend kerninc
    97115
    98 all: kerninc libc.a arch/$(UARCH)/_link.ld
     116all: kerninc $(OUTPUT) arch/$(UARCH)/_link.ld
    99117
    100118kerninc:
     
    102120        ln -sfn kernel/arch include/arch
    103121        ln -sfn ../arch/$(UARCH)/include include/libarch
     122        ln -sfn ../arch/$(UARCH)/include rtld/include/arch
    104123
    105124-include Makefile.depend
    106125
    107126clean:
    108         -rm -f include/kernel include/arch include/libarch libc.a arch/$(UARCH)/_link.ld Makefile.depend
    109         find generic/ arch/$(UARCH)/ -name '*.o' -follow -exec rm \{\} \;
     127        -rm -f include/kernel include/arch include/libarch rtld/include/arch libc.a libc.pic.a arch/$(UARCH)/_link.ld Makefile.depend
     128        find . \( -name '*.o' -o -name '*.pio' \) -follow -exec rm \{\} \;
    110129
    111130depend: kerninc
    112131        -makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
     132        -makedepend $(DEFS) $(PIC_CFLAGS) -o.pio -f - $(ARCH_SOURCES) $(GENERIC_SOURCES) >> Makefile.depend 2> /dev/null
    113133
    114 libc.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
    115         $(AR) rc libc.a $(LIBS) $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
     134libc.a: depend $(OBJECTS)
     135        $(AR) rc $@ $(LIBS) $(OBJECTS)
     136
     137libc.pic.a: depend $(PIC_OBJECTS)
     138        $(AR) rc $@ $(LIBS) $(PIC_OBJECTS)
    116139
    117140arch/$(UARCH)/_link.ld: arch/$(UARCH)/_link.ld.in
     
    126149%.o: %.c
    127150        $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
     151
     152%.pio: %.S
     153        $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
     154
     155%.pio: %.s
     156        $(AS) $(AFLAGS) $< -o $@
     157
     158%.pio: %.c
     159        $(CC) $(DEFS) $(PIC_CFLAGS) -c $< -o $@
  • uspace/lib/libc/arch/ia32/src/syscall.S

    r24edc18 r1ea99cc  
    6565 */
    6666.global __syscall_sysenter
     67        .type __syscall_sysenter, @function
     68
    6769__syscall_sysenter:
    6870        pushl %ebx
     
    8991        popl %ebx
    9092        ret
     93
     94        .size __syscall_sysenter, . - __syscall_sysenter
  • uspace/lib/libc/arch/ia32/src/tls.c

    r24edc18 r1ea99cc  
    3737#include <tls.h>
    3838#include <sys/types.h>
     39#include <align.h>
    3940
    4041tcb_t * __alloc_tls(void **data, size_t size)
     
    4849}
    4950
     51//#ifdef __SHARED__
     52
     53typedef struct {
     54        unsigned long int ti_module;
     55        unsigned long int ti_offset;
     56} tls_index;
     57
     58void __attribute__ ((__regparm__ (1)))
     59    *___tls_get_addr(tls_index *ti);
     60
     61void __attribute__ ((__regparm__ (1)))
     62    *___tls_get_addr(tls_index *ti)
     63{
     64        size_t tls_size;
     65        uint8_t *tls;
     66
     67        /* Calculate size of TLS block */
     68        tls_size = ALIGN_UP(&_tbss_end - &_tdata_start, &_tls_alignment);
     69
     70        /* The TLS block is just before TCB */
     71        tls = (uint8_t *)__tcb_get() - tls_size;
     72
     73        return tls + ti->ti_offset;
     74}
     75
     76//#endif
     77
    5078/** @}
    5179 */
  • uspace/lib/libc/arch/mips32/src/tls.c

    r24edc18 r1ea99cc  
    4747}
    4848
     49typedef struct {
     50        unsigned long ti_module;
     51        unsigned long ti_offset;
     52} tls_index;
     53
     54void *__tls_get_addr(tls_index *ti);
     55
     56/* mips32 uses TLS variant 1 */
     57void *__tls_get_addr(tls_index *ti)
     58{
     59        uint8_t *tls;
     60        uint32_t v;
     61
     62        tls = (uint8_t *)__tcb_get() + sizeof(tcb_t);
     63
     64        /* Hopefully this is right. No docs found. */
     65        v = (uint32_t) (tls + ti->ti_offset + 0x8000);
     66        return (void *) v;
     67}
     68
    4969/** @}
    5070 */
  • uspace/lib/libc/arch/ppc32/src/tls.c

    r24edc18 r1ea99cc  
    11/*
    22 * Copyright (c) 2006 Ondrej Palkovsky
     3 * Copyright (c) 2008 Jiri Svoboda
    34 * All rights reserved.
    45 *
     
    3435
    3536#include <tls.h>
     37#include <align.h>
    3638#include <sys/types.h>
    3739
     
    4648}
    4749
     50static void kputint(unsigned i)
     51{
     52        asm volatile (
     53                "mr %%r3, %0\n"
     54                "li %%r9, 32\n"
     55                "sc\n"
     56                :
     57                : "r" (i)
     58                : "%r3","%r9"
     59        ) ;
     60}
     61
     62typedef struct {
     63        unsigned long int ti_module;
     64        unsigned long int ti_offset;
     65} tls_index;
     66
     67void *__tls_get_addr(tls_index *ti);
     68
     69/* ppc32 uses TLS variant 1 */
     70void *__tls_get_addr(tls_index *ti)
     71{
     72        uint8_t *tls;
     73
     74        /* The TLS section is just after TCB */
     75        tls = (uint8_t *)__tcb_get() + sizeof(tcb_t);
     76
     77        /* Hopefully this is right. No docs found. */
     78        return tls + ti->ti_offset + 32768;
     79}
     80
    4881/** @}
    4982 */
  • uspace/lib/libc/generic/async.c

    r24edc18 r1ea99cc  
    175175
    176176/** Identifier of the incoming connection handled by the current fibril. */
    177 fibril_local connection_t *FIBRIL_connection;
     177static fibril_local connection_t *FIBRIL_connection;
    178178
    179179static void default_client_connection(ipc_callid_t callid, ipc_call_t *call);
  • uspace/lib/libc/generic/libc.c

    r24edc18 r1ea99cc  
    5353#include <loader/pcb.h>
    5454
     55/* From librtld. */
     56#include <rtld.h>
     57#include <string.h>
     58
    5559extern int main(int argc, char *argv[]);
    5660
     
    7579        char **argv;
    7680       
     81#ifdef __IN_SHARED_LIBC__
     82        if (__pcb != NULL && __pcb->rtld_runtime != NULL) {
     83                runtime_env = (runtime_env_t *) __pcb->rtld_runtime;
     84        }
     85#endif
     86
    7787        if (__pcb == NULL) {
    7888                argc = 0;
  • uspace/lib/libc/generic/time.c

    r24edc18 r1ea99cc  
    148148                if (res) {
    149149                        printf("Failed to initialize timeofday memarea\n");
     150                        printf("Address was 0x%x\n", (unsigned)mapping);
    150151                        _exit(1);
    151152                }
  • uspace/lib/libc/include/as.h

    r24edc18 r1ea99cc  
    4343extern void *as_area_create(void *address, size_t size, int flags);
    4444extern int as_area_resize(void *address, size_t size, int flags);
    45 extern int as_area_change_flags(void *address, int flags);
     45int as_area_change_flags(void *address, int flags);
    4646extern int as_area_destroy(void *address);
    4747extern void *set_maxheapsize(size_t mhs);
  • uspace/lib/libc/include/loader/pcb.h

    r24edc18 r1ea99cc  
    6969        /** Pointer to ELF dynamic section of the program. */
    7070        void *dynamic;
     71        /** Pointer to dynamic linker state structure (runtime_env_t). */
     72        void *rtld_runtime;
    7173} pcb_t;
    7274
  • uspace/lib/softint/Makefile

    r24edc18 r1ea99cc  
    11#
    22# Copyright (c) 2005 Martin Decky
     3# Copyright (c) 2008 Jiri Svoboda
    34# All rights reserved.
    45#
     
    3839
    3940CFLAGS += -Iinclude
     41PIC_CFLAGS := $(CFLAGS) -fPIC -D__PIC__
    4042
    4143## Sources
     
    4951GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
    5052
     53OBJECTS := $(GENERIC_OBJECTS)
     54PIC_OBJECTS := $(addsuffix .pio,$(basename $(OBJECTS)))
     55
    5156.PHONY: all clean depend
    5257
    53 all: libsoftint.a
     58all: libsoftint.a libsoftint.pic.a
    5459
    5560-include Makefile.depend
    5661
    5762clean:
    58         -rm -f libsoftint.a Makefile.depend
    59         find generic/ -name '*.o' -follow -exec rm \{\} \;
     63        -rm -f libsoftint.a libsoftint.pic.a Makefile.depend
     64        find generic/ \( -name '*.o' -o -name '*.pio' \) -follow -exec rm \{\} \;
    6065
    6166depend:
    6267        -makedepend -f - -- $(DEPEMD_DEFS) $(CFLAGS) -- $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null
     68        -makedepend $(DEFS) $(PIC_CFLAGS) -o.pio -f - $(GENERIC_SOURCES) >> Makefile.depend 2> /dev/null
    6369
    64 libsoftint.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
    65         $(AR) rc libsoftint.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS)
     70libsoftint.a: depend $(OBJECTS)
     71        $(AR) rc $@ $(OBJECTS)
     72
     73libsoftint.pic.a: depend $(PIC_OBJECTS)
     74        $(AR) rc $@ $(PIC_OBJECTS)
    6675
    6776%.o: %.S
     
    7382%.o: %.c
    7483        $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
     84
     85%.pio: %.S
     86        $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
     87
     88%.pio: %.s
     89        $(AS) $(AFLAGS) $< -o $@
     90
     91%.pio: %.c
     92        $(CC) $(DEFS) $(PIC_CFLAGS) -c $< -o $@
Note: See TracChangeset for help on using the changeset viewer.