Changeset ee820ff in mainline


Ignore:
Timestamp:
2018-02-22T19:39:53Z (6 years ago)
Author:
Jenda <jenda.jzqk73@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0539c14
Parents:
5fe3f954 (diff), df368491 (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.
Message:

Merge commit 'df368491aa1c0ce3024a51c602b7d0cbe4bd84d3'

Files:
21 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    r5fe3f954 ree820ff  
    380380uspace/lib/label/test-liblabel
    381381uspace/lib/pcut/test-libpcut-*
    382 uspace/lib/posix/collisions.list
     382uspace/lib/posix/gcc.specs
    383383uspace/lib/posix/include/libc
     384uspace/lib/posix/link.ld
    384385uspace/lib/posix/redefs-hide-libc-symbols.list
    385 uspace/lib/posix/redefs-hide-libc.xargs
    386 uspace/lib/posix/redefs-show-posix-symbols.list
    387 uspace/lib/posix/redefs-show-posix.xargs
    388386uspace/lib/posix/test-libposix
    389387uspace/lib/uri/test-liburi
  • Makefile

    r5fe3f954 ree820ff  
    4848ERRNO_INPUT = abi/include/abi/errno.in
    4949
    50 .PHONY: all precheck cscope cscope_parts autotool config_auto config_default config distclean clean check releasefile release common boot kernel uspace
     50.PHONY: all precheck cscope cscope_parts autotool config_auto config_default config distclean clean check releasefile release common boot kernel uspace export-posix
    5151
    5252all: kernel uspace
     
    6060uspace: common
    6161        $(MAKE) -r -C uspace PRECHECK=$(PRECHECK)
     62
     63export-posix: common
     64ifndef EXPORT_DIR
     65        @echo ERROR: Variable EXPORT_DIR is not defined. && false
     66else
     67        $(MAKE) -r -C uspace export EXPORT_DIR=$(abspath $(EXPORT_DIR))
     68endif
    6269
    6370precheck: clean
  • boot/arch/arm32/src/asm.S

    r5fe3f954 ree820ff  
    6868        mrc     p15, 0, r4, c1, c0, 0
    6969       
    70         # D-cache before the kernel is started.
     70        # Disable D-cache before the kernel is started.
    7171        bic     r4, r4, #(1 << CP15_C1_DC)
    7272
  • kernel/arch/amd64/src/amd64.c

    r5fe3f954 ree820ff  
    216216#endif
    217217        ns16550_instance_t *ns16550_instance
    218             = ns16550_init((ns16550_t *) NS16550_BASE, IRQ_NS16550, NULL, NULL,
     218            = ns16550_init(NS16550_BASE, 0, IRQ_NS16550, NULL, NULL,
    219219            ns16550_out_ptr);
    220220        if (ns16550_instance) {
  • kernel/arch/arm32/include/arch/security_ext.h

    r5fe3f954 ree820ff  
    8282
    8383#endif
     84
    8485/** @}
    8586 */
  • kernel/arch/ia32/include/arch/drivers/i8259.h

    r5fe3f954 ree820ff  
    4444#define PIC_PIC1PORT2  ((ioport8_t *) 0xa1U)
    4545
    46 #define PIC_NEEDICW4  (1 << 0)
    47 #define PIC_ICW1      (1 << 4)
     46/* ICW1 bits */
     47#define PIC_ICW1           (1 << 4)
     48#define PIC_ICW1_NEEDICW4  (1 << 0)
     49
     50/* OCW4 bits */
     51#define PIC_OCW4           (0 << 3)
     52#define PIC_OCW4_NSEOI     (1 << 5)
    4853
    4954extern void i8259_init(void);
  • kernel/arch/ia32/src/drivers/i8259.c

    r5fe3f954 ree820ff  
    5050{
    5151        /* ICW1: this is ICW1, ICW4 to follow */
    52         pio_write_8(PIC_PIC0PORT1, PIC_ICW1 | PIC_NEEDICW4);
     52        pio_write_8(PIC_PIC0PORT1, PIC_ICW1 | PIC_ICW1_NEEDICW4);
    5353
    5454        /* ICW2: IRQ 0 maps to INT IRQBASE */
     
    6262
    6363        /* ICW1: ICW1, ICW4 to follow */
    64         pio_write_8(PIC_PIC1PORT1, PIC_ICW1 | PIC_NEEDICW4);
     64        pio_write_8(PIC_PIC1PORT1, PIC_ICW1 | PIC_ICW1_NEEDICW4);
    6565
    6666        /* ICW2: IRQ 8 maps to INT (IVT_IRQBASE + 8) */
     
    122122void pic_eoi(void)
    123123{
    124         pio_write_8((ioport8_t *) 0x20, 0x20);
    125         pio_write_8((ioport8_t *) 0xa0, 0x20);
     124        pio_write_8(PIC_PIC0PORT1, PIC_OCW4 | PIC_OCW4_NSEOI);
     125        pio_write_8(PIC_PIC1PORT1, PIC_OCW4 | PIC_OCW4_NSEOI);
    126126}
    127127
  • kernel/arch/ia32/src/ia32.c

    r5fe3f954 ree820ff  
    201201#endif
    202202        ns16550_instance_t *ns16550_instance
    203             = ns16550_init((ns16550_t *) NS16550_BASE, IRQ_NS16550, NULL, NULL,
     203            = ns16550_init(NS16550_BASE, 0, IRQ_NS16550, NULL, NULL,
    204204            ns16550_out_ptr);
    205205        if (ns16550_instance) {
  • kernel/arch/ia64/src/ia64.c

    r5fe3f954 ree820ff  
    181181#ifdef CONFIG_NS16550
    182182        ns16550_instance_t *ns16550_instance
    183             = ns16550_init((ns16550_t *) NS16550_BASE, NS16550_IRQ, NULL, NULL,
     183            = ns16550_init(NS16550_BASE, 0, NS16550_IRQ, NULL, NULL,
    184184            NULL);
    185185        if (ns16550_instance) {
  • kernel/arch/sparc64/src/drivers/kbd.c

    r5fe3f954 ree820ff  
    118118        size_t offset = pa - aligned_addr;
    119119       
    120         ns16550_t *ns16550 = (ns16550_t *) (km_map(aligned_addr, offset + size,
     120        ioport8_t *ns16550 = (ioport8_t *) (km_map(aligned_addr, offset + size,
    121121            PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
    122122       
    123         ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, inr, cir,
     123        ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, 0, inr, cir,
    124124            cir_arg, NULL);
    125125        if (ns16550_instance) {
  • kernel/genarch/include/genarch/drivers/ns16550/ns16550.h

    r5fe3f954 ree820ff  
    5050
    5151/** NS16550 registers. */
    52 typedef struct {
    53         union {
    54                 ioport8_t rbr;      /**< Receiver Buffer Register (read). */
    55                 ioport8_t thr;      /**< Transmitter Holder Register (write). */
    56         } __attribute__ ((packed));
    57         ioport8_t ier;      /**< Interrupt Enable Register. */
    58         union {
    59                 ioport8_t iir;  /**< Interrupt Ident Register (read). */
    60                 ioport8_t fcr;  /**< FIFO control register (write). */
    61         } __attribute__ ((packed));
    62         ioport8_t lcr;      /**< Line Control register. */
    63         ioport8_t mcr;      /**< Modem Control Register. */
    64         ioport8_t lsr;      /**< Line Status Register. */
    65 } __attribute__ ((packed)) ns16550_t;
     52typedef enum {
     53        NS16550_REG_RBR = 0,  /**< Receiver Buffer Register (read). */
     54        NS16550_REG_THR = 0,  /**< Transmitter Holder Register (write). */
     55        NS16550_REG_IER = 1,  /**< Interrupt Enable Register. */
     56        NS16550_REG_IIR = 2,  /**< Interrupt Ident Register (read). */
     57        NS16550_REG_FCR = 2,  /**< FIFO control register (write). */
     58        NS16550_REG_LCR = 3,  /**< Line Control register. */
     59        NS16550_REG_MCR = 4,  /**< Modem Control Register. */
     60        NS16550_REG_LSR = 5,  /**< Line Status Register. */
     61} ns16550_reg_t;
    6662
    6763/** Structure representing the ns16550 device. */
    6864typedef struct {
    6965        irq_t irq;
    70         ns16550_t *ns16550;
     66        volatile ioport8_t *ns16550;
    7167        indev_t *input;
    7268        outdev_t *output;
    7369        parea_t parea;
     70        int reg_shift;
    7471} ns16550_instance_t;
    7572
    76 extern ns16550_instance_t *ns16550_init(ns16550_t *, inr_t, cir_t, void *,
    77     outdev_t **);
     73extern ns16550_instance_t *ns16550_init(ioport8_t *, unsigned, inr_t, cir_t,
     74    void *, outdev_t **);
    7875extern void ns16550_wire(ns16550_instance_t *, indev_t *);
    7976
  • kernel/genarch/src/drivers/ns16550/ns16550.c

    r5fe3f954 ree820ff  
    11/*
    22 * Copyright (c) 2009 Jakub Jermar
     3 * Copyright (c) 2018 CZ.NIC, z.s.p.o.
    34 * All rights reserved.
    45 *
     
    4647#define LSR_TH_READY    0x20
    4748
     49static uint8_t ns16550_reg_read(ns16550_instance_t *inst, ns16550_reg_t reg)
     50{
     51        return pio_read_8(&inst->ns16550[reg << inst->reg_shift]);
     52}
     53
     54static void ns16550_reg_write(ns16550_instance_t *inst, ns16550_reg_t reg,
     55    uint8_t val)
     56{
     57        pio_write_8(&inst->ns16550[reg << inst->reg_shift], val);
     58}
     59
    4860static irq_ownership_t ns16550_claim(irq_t *irq)
    4961{
    5062        ns16550_instance_t *instance = irq->instance;
    51         ns16550_t *dev = instance->ns16550;
    52        
    53         if (pio_read_8(&dev->lsr) & LSR_DATA_READY)
     63
     64        if (ns16550_reg_read(instance, NS16550_REG_LSR) & LSR_DATA_READY)
    5465                return IRQ_ACCEPT;
    5566        else
     
    6071{
    6172        ns16550_instance_t *instance = irq->instance;
    62         ns16550_t *dev = instance->ns16550;
    6373       
    64         if (pio_read_8(&dev->lsr) & LSR_DATA_READY) {
    65                 uint8_t data = pio_read_8(&dev->rbr);
     74        while (ns16550_reg_read(instance, NS16550_REG_LSR) & LSR_DATA_READY) {
     75                uint8_t data = ns16550_reg_read(instance, NS16550_REG_RBR);
    6676                indev_push_character(instance->input, data);
    6777        }
     
    6979
    7080/**< Clear input buffer. */
    71 static void ns16550_clear_buffer(ns16550_t *dev)
     81static void ns16550_clear_buffer(ns16550_instance_t *instance)
    7282{
    73         while ((pio_read_8(&dev->lsr) & LSR_DATA_READY))
    74                 (void) pio_read_8(&dev->rbr);
     83        while (ns16550_reg_read(instance, NS16550_REG_LSR) & LSR_DATA_READY)
     84                (void) ns16550_reg_read(instance, NS16550_REG_RBR);
    7585}
    7686
    77 static void ns16550_sendb(ns16550_t *dev, uint8_t byte)
     87static void ns16550_sendb(ns16550_instance_t *instance, uint8_t byte)
    7888{
    79         while (!(pio_read_8(&dev->lsr) & LSR_TH_READY))
     89        while (!(ns16550_reg_read(instance, NS16550_REG_LSR) & LSR_TH_READY))
    8090                ;
    81         pio_write_8(&dev->thr, byte);
     91        ns16550_reg_write(instance, NS16550_REG_THR, byte);
    8292}
    8393
     
    8898        if ((!instance->parea.mapped) || (console_override)) {
    8999                if (ascii_check(ch))
    90                         ns16550_sendb(instance->ns16550, (uint8_t) ch);
     100                        ns16550_sendb(instance, (uint8_t) ch);
    91101                else
    92                         ns16550_sendb(instance->ns16550, U_SPECIAL);
     102                        ns16550_sendb(instance, U_SPECIAL);
    93103        }
    94104}
     
    101111/** Initialize ns16550.
    102112 *
    103  * @param dev      Addrress of the beginning of the device in I/O space.
    104  * @param inr      Interrupt number.
    105  * @param cir      Clear interrupt function.
    106  * @param cir_arg  First argument to cir.
    107  * @param output   Where to store pointer to the output device
    108  *                 or NULL if the caller is not interested in
    109  *                 writing to the serial port.
     113 * @param dev        Address of the beginning of the device in I/O space.
     114 * @param reg_shift  Spacing between individual register addresses, in log2.
     115 *                   The individual register location is calculated as
     116 *                   `base + (register offset << reg_shift)`.
     117 * @param inr        Interrupt number.
     118 * @param cir        Clear interrupt function.
     119 * @param cir_arg    First argument to cir.
     120 * @param output     Where to store pointer to the output device
     121 *                   or NULL if the caller is not interested in
     122 *                   writing to the serial port.
    110123 *
    111124 * @return Keyboard instance or NULL on failure.
    112125 *
    113126 */
    114 ns16550_instance_t *ns16550_init(ns16550_t *dev, inr_t inr, cir_t cir,
    115     void *cir_arg, outdev_t **output)
     127ns16550_instance_t *ns16550_init(ioport8_t *dev, unsigned reg_shift, inr_t inr,
     128    cir_t cir, void *cir_arg, outdev_t **output)
    116129{
    117130        ns16550_instance_t *instance
     
    119132        if (instance) {
    120133                instance->ns16550 = dev;
     134                instance->reg_shift = reg_shift;
    121135                instance->input = NULL;
    122136                instance->output = NULL;
     
    162176        irq_register(&instance->irq);
    163177       
    164         ns16550_clear_buffer(instance->ns16550);
     178        ns16550_clear_buffer(instance);
    165179       
    166180        /* Enable interrupts */
    167         pio_write_8(&instance->ns16550->ier, IER_ERBFI);
    168         pio_write_8(&instance->ns16550->mcr, MCR_OUT2);
     181        ns16550_reg_write(instance, NS16550_REG_IER, IER_ERBFI);
     182        ns16550_reg_write(instance, NS16550_REG_MCR, MCR_OUT2);
    169183}
    170184
  • kernel/generic/include/macros.h

    r5fe3f954 ree820ff  
    6262        if (sz2)
    6363                return ((s1 >= s2) && (s1 <= e2));
     64       
    6465        if (sz1)
    6566                return ((s2 >= s1) && (s2 <= e1));
     
    8687        if (sz1 == 0)
    8788                return (s1 == s2) && (sz2 == 0);
    88         e1 = s1 + sz1 - 1;     
     89       
     90        e1 = s1 + sz1 - 1;
    8991        if (sz2 == 0)
    9092                return (s1 <= s2) && (s2 <= e1);
     93       
    9194        e2 = s2 + sz2 - 1;
    9295
     
    97100#endif /* __ASM__ */
    98101
    99 #define ispwr2(x)       (((x) & ((x) - 1)) == 0)
     102#define ispwr2(x)  (((x) & ((x) - 1)) == 0)
    100103
    101104#define isdigit(d)     (((d) >= '0') && ((d) <= '9'))
     
    142145
    143146/* Test for sum overflow into positive numbers. */
    144 #define overflows_into_positive(a, b)   \
     147#define overflows_into_positive(a, b) \
    145148        (overflows((a), (b)) && ((a) + (b) > 0))
    146149
     
    157160        })
    158161
    159 
    160 #ifndef member_to_inst
    161162#define member_to_inst(ptr_member, type, member_identif) \
    162         ((type*) (((void*)(ptr_member)) - ((void*)&(((type*)0)->member_identif))))
    163 #endif
    164 
     163        ((type *) (((void *) (ptr_member)) - \
     164            ((void *) &(((type *) 0)->member_identif))))
    165165
    166166#endif
  • kernel/generic/src/mm/slab.c

    r5fe3f954 ree820ff  
    125125/** Cache for cache descriptors */
    126126static slab_cache_t slab_cache_cache;
     127
     128/** Cache for per-CPU magazines of caches */
     129static slab_cache_t slab_mag_cache;
    127130
    128131/** Cache for external slab descriptors
     
    589592        assert(_slab_initialized >= 2);
    590593       
    591         cache->mag_cache = malloc(sizeof(slab_mag_cache_t) * config.cpu_count,
    592             FRAME_ATOMIC);
     594        cache->mag_cache = slab_alloc(&slab_mag_cache, FRAME_ATOMIC);
    593595        if (!cache->mag_cache)
    594596                return false;
     
    723725}
    724726
     727/** Return object to cache, use slab if known
     728 *
     729 */
     730NO_TRACE static void _slab_free(slab_cache_t *cache, void *obj, slab_t *slab)
     731{
     732        ipl_t ipl = interrupts_disable();
     733       
     734        if ((cache->flags & SLAB_CACHE_NOMAGAZINE) ||
     735            (magazine_obj_put(cache, obj)))
     736                slab_obj_destroy(cache, obj, slab);
     737       
     738        interrupts_restore(ipl);
     739        atomic_dec(&cache->allocated_objs);
     740}
     741
    725742/** Check that there are no slabs and remove cache from system
    726743 *
     
    751768                panic("Destroying cache that is not empty.");
    752769       
    753         if (!(cache->flags & SLAB_CACHE_NOMAGAZINE))
    754                 free(cache->mag_cache);
     770        if (!(cache->flags & SLAB_CACHE_NOMAGAZINE)) {
     771                slab_t *mag_slab = obj2slab(cache->mag_cache);
     772                _slab_free(mag_slab->cache, cache->mag_cache, mag_slab);
     773        }
    755774       
    756775        slab_free(&slab_cache_cache, cache);
     
    779798       
    780799        return result;
    781 }
    782 
    783 /** Return object to cache, use slab if known
    784  *
    785  */
    786 NO_TRACE static void _slab_free(slab_cache_t *cache, void *obj, slab_t *slab)
    787 {
    788         ipl_t ipl = interrupts_disable();
    789        
    790         if ((cache->flags & SLAB_CACHE_NOMAGAZINE) ||
    791             (magazine_obj_put(cache, obj)))
    792                 slab_obj_destroy(cache, obj, slab);
    793        
    794         interrupts_restore(ipl);
    795         atomic_dec(&cache->allocated_objs);
    796800}
    797801
     
    931935#endif
    932936       
     937        _slab_cache_create(&slab_mag_cache, "slab_mag_cache",
     938            sizeof(slab_mag_cache_t) * config.cpu_count, sizeof(uintptr_t),
     939            NULL, NULL, SLAB_CACHE_NOMAGAZINE | SLAB_CACHE_SLINSIDE);
     940       
    933941        irq_spinlock_lock(&slab_cache_lock, false);
    934942       
  • tools/autotool.py

    r5fe3f954 ree820ff  
    615615                                path = "%s/%s/bin" % (cross_prefix, platform)
    616616               
     617                common['TARGET'] = target
    617618                prefix = "%s-" % target
    618619               
  • tools/toolchain.sh

    r5fe3f954 ree820ff  
    554554       
    555555        # Symlink clang and lld to the install path.
    556         CLANG=`which clang 2> /dev/null || echo "/usr/bin/clang"`
    557         LLD=`which ld.lld 2> /dev/null || echo "/usr/bin/ld.lld"`
     556        CLANG="`which clang 2> /dev/null || echo "/usr/bin/clang"`"
     557        LLD="`which ld.lld 2> /dev/null || echo "/usr/bin/ld.lld"`"
    558558       
    559559        ln -s $CLANG "${INSTALL_DIR}/${PREFIX}/bin/${TARGET}-clang"
  • uspace/Makefile

    r5fe3f954 ree820ff  
    258258CLEANS := $(addsuffix .clean,$(DIRS) $(LIBS) $(BASE_LIBS))
    259259
    260 .PHONY: all $(BASE_BUILDS) $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean
     260.PHONY: all $(BASE_BUILDS) $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean export
    261261
    262262all: $(BUILDS) $(BUILDS_TESTS)
     
    264264$(BUILDS_TESTS): $(BASE_BUILDS) $(BUILDS)
    265265        $(MAKE) -r -C $(basename $@) all-test PRECHECK=$(PRECHECK)
     266
     267export: lib/posix.build lib/math.build lib/clui.build
     268        $(MAKE) -r -C lib/posix export EXPORT_DIR=$(EXPORT_DIR)
    266269
    267270clean: $(CLEANS)
  • uspace/Makefile.common

    r5fe3f954 ree820ff  
    174174endif
    175175
    176 COMMON_CFLAGS = $(INCLUDES_FLAGS) -O$(OPTIMIZATION) -imacros $(CONFIG_HEADER) \
    177         -ffreestanding -nostdlib -nostdinc -fexec-charset=UTF-8 \
    178         -finput-charset=UTF-8 -D__$(ENDIANESS)__ -D_HELENOS_SOURCE -fno-common \
     176# Flags that are not necessary, and can be overriden, but are used by default.
     177DEFAULT_CFLAGS = \
     178        -O$(OPTIMIZATION) \
     179        -ffunction-sections \
     180        -pipe \
     181        -Wall \
     182        -Wextra \
     183        -Wno-unused-parameter \
     184        -Wmissing-prototypes \
     185        -Wwrite-strings \
     186        -Werror-implicit-function-declaration
     187
     188ifeq ($(CONFIG_DEBUG),y)
     189        DEFAULT_CFLAGS += -Werror
     190endif
     191
     192ifeq ($(COMPILER),clang)
     193        DEFAULT_CFLAGS += \
     194                -Wno-missing-field-initializers \
     195                -Wno-typedef-redefinition \
     196                -Wno-unused-command-line-argument
     197else
     198        DEFAULT_CFLAGS += \
     199                -Wno-clobbered
     200endif
     201
     202ifeq ($(CONFIG_LINE_DEBUG),y)
     203        DEFAULT_CFLAGS += -ggdb
     204endif
     205
     206# Flags that should always be used, even for third-party software.
     207COMMON_CPPFLAGS = \
     208        -nostdinc \
     209        -D__$(ENDIANESS)__
     210
     211COMMON_CFLAGS = \
     212        -ffreestanding \
     213        -nostdlib
     214
     215# Flags that are always used for HelenOS code, but not for third-party.
     216HELENOS_CFLAGS = \
     217        -std=gnu99 \
     218        $(INCLUDES_FLAGS) \
     219        -imacros $(CONFIG_HEADER) \
     220        -D_HELENOS_SOURCE \
     221        -fexec-charset=UTF-8 \
     222        -finput-charset=UTF-8 \
     223        -fno-common \
    179224        -fdebug-prefix-map=$(realpath $(ROOT_PATH))=.
    180225
    181 GCC_CFLAGS = -ffunction-sections -Wall -Wextra -Wno-clobbered \
    182         -Wno-unused-parameter -Wmissing-prototypes -std=gnu99 \
    183         -Werror-implicit-function-declaration \
    184         -Wwrite-strings -pipe
    185 
    186 # -Wno-missing-prototypes is there because it warns about main().
    187 # This should be fixed elsewhere.
    188 CLANG_CFLAGS = -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wno-typedef-redefinition \
    189         -Wno-missing-prototypes -Wno-unused-command-line-argument \
    190         -std=gnu99 -Werror-implicit-function-declaration -Wwrite-strings \
    191         -pipe -fno-stack-protector -fno-PIC
    192 
    193 ifeq ($(CONFIG_DEBUG),y)
    194         COMMON_CFLAGS += -Werror
    195 endif
    196 
    197 ifeq ($(CONFIG_LINE_DEBUG),y)
    198         GCC_CFLAGS += -ggdb
    199         CLANG_CFLAGS += -g
    200 endif
     226# TODO: Use a different name.
     227# CFLAGS variable is traditionally used for overridable flags.
     228CFLAGS = $(COMMON_CPPFLAGS) $(COMMON_CFLAGS) $(HELENOS_CFLAGS) $(DEFAULT_CFLAGS)
    201229
    202230## Setup platform configuration
     
    216244endif
    217245
    218 ifeq ($(COMPILER),clang)
    219         CFLAGS += $(COMMON_CFLAGS) $(CLANG_CFLAGS)
    220 else
    221         CFLAGS += $(COMMON_CFLAGS) $(GCC_CFLAGS)
    222 endif
    223 
    224246ifeq ($(CONFIG_STRIP_BINARIES),y)
    225247        LFLAGS += --strip-all
     
    246268all-test: $(TEST_OUTPUTS)
    247269
    248 clean:
    249         rm -f $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk
     270clean: fasterclean
    250271        find . -name '*.o' -follow -exec rm \{\} \;
    251272        find . -name '*.lo' -follow -exec rm \{\} \;
     
    253274
    254275fasterclean:
    255         rm -f $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk
     276        rm -rf $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk
    256277
    257278depend: $(PRE_DEPEND)
  • uspace/lib/c/arch/amd64/Makefile.common

    r5fe3f954 ree820ff  
    3131# XXX: clang doesn't support this flag, but the optimization is OS-specific,
    3232#      so it isn't used for amd64-unknown-elf target.
    33 GCC_CFLAGS += -mno-tls-direct-seg-refs
     33
     34ifneq ($(COMPILER),clang)
     35        COMMON_CFLAGS += -mno-tls-direct-seg-refs
     36endif
    3437
    3538LFLAGS += --gc-sections
  • uspace/lib/c/include/macros.h

    r5fe3f954 ree820ff  
    5555            | ((((uint64_t) (up)) & 0xffffffff) << 32))
    5656
    57 #ifndef member_to_inst
    5857#define member_to_inst(ptr_member, type, member_identif) \
    59         ((type*) (((void*)(ptr_member)) - ((void*)&(((type*)0)->member_identif))))
    60 #endif
     58        ((type *) (((void *) (ptr_member)) - \
     59            ((void *) &(((type *) 0)->member_identif))))
    6160
     61#define _paddname(line)     PADD_ ## line ## __
     62#define _padd(width, line)  uint ## width ## _t _paddname(line)
     63
     64#define PADD32  _padd(32, __LINE__)
     65#define PADD16  _padd(16, __LINE__)
     66#define PADD8   _padd(8, __LINE__)
    6267
    6368#endif
    6469
    65 #define _paddname(line) PADD_ ## line ## __
    66 #define _padd(width, line) uint ## width ## _t _paddname(line)
    67 #define PADD32 _padd(32, __LINE__)
    68 #define PADD16 _padd(16, __LINE__)
    69 #define PADD8 _padd(8, __LINE__)
    70 
    7170/** @}
    7271 */
  • uspace/lib/posix/Makefile

    r5fe3f954 ree820ff  
    4545        $(LIBSOFTINT_PREFIX)/libsoftint.a
    4646
     47SPECS = gcc.specs
     48LIBC_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
     49LIBC_STARTUP_FILE = $(shell sed -n -e 's/^.*STARTUP(\(.*\)).*$$/\1/p' $(LIBC_LINKER_SCRIPT))
     50EXPORT_LINKER_SCRIPT = link.ld
     51EXPORT_STARTUP_FILE = crt0.o
     52
     53EXPORT_FILES = \
     54        ../math/libmath.a \
     55        ../clui/libclui.a \
     56        $(MERGED_C_LIBRARY) \
     57        $(EXPORT_STARTUP_FILE) \
     58        $(EXPORT_LINKER_SCRIPT) \
     59        $(SPECS)
     60
    4761REDEFS_HIDE_LIBC = redefs-hide-libc-symbols.list
    4862
     
    5367        libc.o
    5468
    55 EXTRA_OUTPUT = $(FIXED_C_LIBRARY) $(FIXED_POSIX_LIBRARY) $(MERGED_C_LIBRARY)
     69EXTRA_OUTPUT = $(FIXED_C_LIBRARY) $(FIXED_POSIX_LIBRARY) $(MERGED_C_LIBRARY) $(SPECS) $(EXPORT_LINKER_SCRIPT) $(EXPORT_STARTUP_FILE)
    5670
    5771SOURCES = \
     
    8397        test/scanf.c
    8498
     99EXPORT_CPPFLAGS = \
     100        -specs $$(HELENOS_EXPORT_ROOT)/lib/gcc.specs \
     101        -isystem $$(HELENOS_EXPORT_ROOT)/include
     102
     103EXPORT_LDFLAGS = \
     104        -L$$(HELENOS_EXPORT_ROOT)/lib \
     105        -T link.ld
     106
     107EXPORT_LDLIBS = \
     108        -lmath -lc
     109
     110EXPORT_CFLAGS = \
     111        -specs $$(HELENOS_EXPORT_ROOT)/lib/gcc.specs
     112
    85113include $(USPACE_PREFIX)/Makefile.common
    86114
    87 $(INCLUDE_LIBC): ../c/include
    88         ln -s -f -n ../$^ $@
     115$(SPECS): $(CONFIG_MAKEFILE)
     116        echo '*self_spec:' > $@.new
     117        echo '+ $(COMMON_CFLAGS)' >> $@.new
     118        echo >> $@.new
     119        echo '*cpp:' >> $@.new
     120        echo '+ $(COMMON_CPPFLAGS)' >> $@.new
     121        echo >> $@.new
     122        echo '*lib:' >> $@.new
     123        echo '$(EXPORT_LDLIBS)' >> $@.new
     124        mv $@.new $@
     125
     126$(EXPORT_LINKER_SCRIPT): $(LIBC_LINKER_SCRIPT)
     127        sed 's/STARTUP(.*)/STARTUP(crt0.o)/' $< > $@
     128
     129$(EXPORT_STARTUP_FILE): $(LIBC_STARTUP_FILE)
     130        cp $< $@
     131
     132$(INCLUDE_LIBC): $(shell find ../c/include -name '*.h')
     133        cp -r -L --remove-destination -T ../c/include $@
     134        find ../c/include -type f -and -not -name '*.h' -delete
     135
     136export: $(EXPORT_DIR)/config.mk $(EXPORT_DIR)/config.rc
     137
     138$(EXPORT_DIR)/config.mk: export-libs export-includes
     139        echo '# Generated file, do not modify.' >> $@.new
     140        echo '# Do not forget to set HELENOS_EXPORT_ROOT.' >> $@.new
     141        echo 'HELENOS_CROSS_PATH="$(shell dirname $(CC))"' >> $@.new
     142        echo 'HELENOS_ARCH="$(firstword $(subst -, ,$(TARGET)))"' >> $@.new
     143        echo 'HELENOS_TARGET="$(TARGET)"' >> $@.new
     144        echo 'HELENOS_CPPFLAGS="$(EXPORT_CPPFLAGS)"' >> $@.new
     145        echo 'HELENOS_CFLAGS="$(EXPORT_CFLAGS)"' >> $@.new
     146        echo 'HELENOS_CXXFLAGS="$(EXPORT_CFLAGS)"' >> $@.new
     147        echo 'HELENOS_LDFLAGS="$(EXPORT_LDFLAGS)"' >> $@.new
     148        echo 'HELENOS_LDLIBS="$(EXPORT_LDLIBS)"' >> $@.new
     149        mv $@.new $@
     150
     151$(EXPORT_DIR)/config.rc: $(EXPORT_DIR)/config.mk
     152        sed 's:$$(HELENOS_EXPORT_ROOT):$$HELENOS_EXPORT_ROOT:g' < $< >$@
     153
     154export-libs: $(EXPORT_FILES) export-includes
     155        mkdir -p $(EXPORT_DIR)/lib
     156        cp -L $(EXPORT_FILES) $(EXPORT_DIR)/lib
     157
     158export-includes: $(INCLUDE_LIBC) $(shell find ./include ../c/arch/$(UARCH)/include $(ROOT_PATH)/abi/include -name '*.h')
     159        mkdir -p $(EXPORT_DIR)/include
     160        rm -rf $(EXPORT_DIR)/include.new
     161        cp -r -L -T ./include/posix $(EXPORT_DIR)/include.new
     162        cp -r -L -T ./include/libc $(EXPORT_DIR)/include.new/libc
     163        cp -r -L ../c/arch/$(UARCH)/include/* $(EXPORT_DIR)/include.new/libc
     164        cp -r -L $(ROOT_PATH)/abi/include/* $(EXPORT_DIR)/include.new
     165        mkdir -p $(EXPORT_DIR)/include.new/libclui
     166        cp -L ../clui/tinput.h $(EXPORT_DIR)/include.new/libclui
     167       
     168        find "$(EXPORT_DIR)/include.new/libc" "$(EXPORT_DIR)/include.new/libclui" -name '*.h' -exec sed \
     169                -e 's:#include <:#include <libc/:' \
     170                -e 's:#include <libc/abi/:#include <abi/:' \
     171                -e 's:#include <libc/_bits/:#include <_bits/:' \
     172                -e 's:#include <libc/libc/:#include <libc/:' \
     173                -i {} \;
     174        find "$(EXPORT_DIR)/include.new" -name '*.h' -exec sed \
     175                -e 's:#include "posix/:#include ":' \
     176                -e 's:#include <posix/:#include <:' \
     177                -i {} \;
     178       
     179        rm -rf $(EXPORT_DIR)/include
     180        mv $(EXPORT_DIR)/include.new $(EXPORT_DIR)/include
    89181
    90182$(FIXED_C_LIBRARY): $(LIBC_FILE) $(REDEFS_HIDE_LIBC)
     
    97189$(REDEFS_HIDE_LIBC): $(SOURCES)
    98190        sed -n -e 's/_HIDE_LIBC_SYMBOL(\(.*\))/\1 __helenos_libc_\1/p' $(SOURCES) >$@
    99 
Note: See TracChangeset for help on using the changeset viewer.