Changes in / [5fe3f954:ee820ff] in mainline
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
r5fe3f954 ree820ff 380 380 uspace/lib/label/test-liblabel 381 381 uspace/lib/pcut/test-libpcut-* 382 uspace/lib/posix/ collisions.list382 uspace/lib/posix/gcc.specs 383 383 uspace/lib/posix/include/libc 384 uspace/lib/posix/link.ld 384 385 uspace/lib/posix/redefs-hide-libc-symbols.list 385 uspace/lib/posix/redefs-hide-libc.xargs386 uspace/lib/posix/redefs-show-posix-symbols.list387 uspace/lib/posix/redefs-show-posix.xargs388 386 uspace/lib/posix/test-libposix 389 387 uspace/lib/uri/test-liburi -
Makefile
r5fe3f954 ree820ff 48 48 ERRNO_INPUT = abi/include/abi/errno.in 49 49 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 51 51 52 52 all: kernel uspace … … 60 60 uspace: common 61 61 $(MAKE) -r -C uspace PRECHECK=$(PRECHECK) 62 63 export-posix: common 64 ifndef EXPORT_DIR 65 @echo ERROR: Variable EXPORT_DIR is not defined. && false 66 else 67 $(MAKE) -r -C uspace export EXPORT_DIR=$(abspath $(EXPORT_DIR)) 68 endif 62 69 63 70 precheck: clean -
boot/arch/arm32/src/asm.S
r5fe3f954 ree820ff 68 68 mrc p15, 0, r4, c1, c0, 0 69 69 70 # D -cache before the kernel is started.70 # Disable D-cache before the kernel is started. 71 71 bic r4, r4, #(1 << CP15_C1_DC) 72 72 -
kernel/arch/amd64/src/amd64.c
r5fe3f954 ree820ff 216 216 #endif 217 217 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, 219 219 ns16550_out_ptr); 220 220 if (ns16550_instance) { -
kernel/arch/arm32/include/arch/security_ext.h
r5fe3f954 ree820ff 82 82 83 83 #endif 84 84 85 /** @} 85 86 */ -
kernel/arch/ia32/include/arch/drivers/i8259.h
r5fe3f954 ree820ff 44 44 #define PIC_PIC1PORT2 ((ioport8_t *) 0xa1U) 45 45 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) 48 53 49 54 extern void i8259_init(void); -
kernel/arch/ia32/src/drivers/i8259.c
r5fe3f954 ree820ff 50 50 { 51 51 /* 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); 53 53 54 54 /* ICW2: IRQ 0 maps to INT IRQBASE */ … … 62 62 63 63 /* 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); 65 65 66 66 /* ICW2: IRQ 8 maps to INT (IVT_IRQBASE + 8) */ … … 122 122 void pic_eoi(void) 123 123 { 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); 126 126 } 127 127 -
kernel/arch/ia32/src/ia32.c
r5fe3f954 ree820ff 201 201 #endif 202 202 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, 204 204 ns16550_out_ptr); 205 205 if (ns16550_instance) { -
kernel/arch/ia64/src/ia64.c
r5fe3f954 ree820ff 181 181 #ifdef CONFIG_NS16550 182 182 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, 184 184 NULL); 185 185 if (ns16550_instance) { -
kernel/arch/sparc64/src/drivers/kbd.c
r5fe3f954 ree820ff 118 118 size_t offset = pa - aligned_addr; 119 119 120 ns16550_t *ns16550 = (ns16550_t *) (km_map(aligned_addr, offset + size,120 ioport8_t *ns16550 = (ioport8_t *) (km_map(aligned_addr, offset + size, 121 121 PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset); 122 122 123 ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, inr, cir,123 ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, 0, inr, cir, 124 124 cir_arg, NULL); 125 125 if (ns16550_instance) { -
kernel/genarch/include/genarch/drivers/ns16550/ns16550.h
r5fe3f954 ree820ff 50 50 51 51 /** 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; 52 typedef 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; 66 62 67 63 /** Structure representing the ns16550 device. */ 68 64 typedef struct { 69 65 irq_t irq; 70 ns16550_t *ns16550;66 volatile ioport8_t *ns16550; 71 67 indev_t *input; 72 68 outdev_t *output; 73 69 parea_t parea; 70 int reg_shift; 74 71 } ns16550_instance_t; 75 72 76 extern ns16550_instance_t *ns16550_init( ns16550_t *, inr_t, cir_t, void *,77 outdev_t **);73 extern ns16550_instance_t *ns16550_init(ioport8_t *, unsigned, inr_t, cir_t, 74 void *, outdev_t **); 78 75 extern void ns16550_wire(ns16550_instance_t *, indev_t *); 79 76 -
kernel/genarch/src/drivers/ns16550/ns16550.c
r5fe3f954 ree820ff 1 1 /* 2 2 * Copyright (c) 2009 Jakub Jermar 3 * Copyright (c) 2018 CZ.NIC, z.s.p.o. 3 4 * All rights reserved. 4 5 * … … 46 47 #define LSR_TH_READY 0x20 47 48 49 static 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 54 static 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 48 60 static irq_ownership_t ns16550_claim(irq_t *irq) 49 61 { 50 62 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) 54 65 return IRQ_ACCEPT; 55 66 else … … 60 71 { 61 72 ns16550_instance_t *instance = irq->instance; 62 ns16550_t *dev = instance->ns16550;63 73 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); 66 76 indev_push_character(instance->input, data); 67 77 } … … 69 79 70 80 /**< Clear input buffer. */ 71 static void ns16550_clear_buffer(ns16550_ t *dev)81 static void ns16550_clear_buffer(ns16550_instance_t *instance) 72 82 { 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); 75 85 } 76 86 77 static void ns16550_sendb(ns16550_ t *dev, uint8_t byte)87 static void ns16550_sendb(ns16550_instance_t *instance, uint8_t byte) 78 88 { 79 while (!( pio_read_8(&dev->lsr) & LSR_TH_READY))89 while (!(ns16550_reg_read(instance, NS16550_REG_LSR) & LSR_TH_READY)) 80 90 ; 81 pio_write_8(&dev->thr, byte);91 ns16550_reg_write(instance, NS16550_REG_THR, byte); 82 92 } 83 93 … … 88 98 if ((!instance->parea.mapped) || (console_override)) { 89 99 if (ascii_check(ch)) 90 ns16550_sendb(instance ->ns16550, (uint8_t) ch);100 ns16550_sendb(instance, (uint8_t) ch); 91 101 else 92 ns16550_sendb(instance ->ns16550, U_SPECIAL);102 ns16550_sendb(instance, U_SPECIAL); 93 103 } 94 104 } … … 101 111 /** Initialize ns16550. 102 112 * 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. 110 123 * 111 124 * @return Keyboard instance or NULL on failure. 112 125 * 113 126 */ 114 ns16550_instance_t *ns16550_init( ns16550_t *dev, inr_t inr, cir_t cir,115 void *cir_arg, outdev_t **output)127 ns16550_instance_t *ns16550_init(ioport8_t *dev, unsigned reg_shift, inr_t inr, 128 cir_t cir, void *cir_arg, outdev_t **output) 116 129 { 117 130 ns16550_instance_t *instance … … 119 132 if (instance) { 120 133 instance->ns16550 = dev; 134 instance->reg_shift = reg_shift; 121 135 instance->input = NULL; 122 136 instance->output = NULL; … … 162 176 irq_register(&instance->irq); 163 177 164 ns16550_clear_buffer(instance ->ns16550);178 ns16550_clear_buffer(instance); 165 179 166 180 /* 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); 169 183 } 170 184 -
kernel/generic/include/macros.h
r5fe3f954 ree820ff 62 62 if (sz2) 63 63 return ((s1 >= s2) && (s1 <= e2)); 64 64 65 if (sz1) 65 66 return ((s2 >= s1) && (s2 <= e1)); … … 86 87 if (sz1 == 0) 87 88 return (s1 == s2) && (sz2 == 0); 88 e1 = s1 + sz1 - 1; 89 90 e1 = s1 + sz1 - 1; 89 91 if (sz2 == 0) 90 92 return (s1 <= s2) && (s2 <= e1); 93 91 94 e2 = s2 + sz2 - 1; 92 95 … … 97 100 #endif /* __ASM__ */ 98 101 99 #define ispwr2(x) 102 #define ispwr2(x) (((x) & ((x) - 1)) == 0) 100 103 101 104 #define isdigit(d) (((d) >= '0') && ((d) <= '9')) … … 142 145 143 146 /* Test for sum overflow into positive numbers. */ 144 #define overflows_into_positive(a, b) 147 #define overflows_into_positive(a, b) \ 145 148 (overflows((a), (b)) && ((a) + (b) > 0)) 146 149 … … 157 160 }) 158 161 159 160 #ifndef member_to_inst161 162 #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)))) 165 165 166 166 #endif -
kernel/generic/src/mm/slab.c
r5fe3f954 ree820ff 125 125 /** Cache for cache descriptors */ 126 126 static slab_cache_t slab_cache_cache; 127 128 /** Cache for per-CPU magazines of caches */ 129 static slab_cache_t slab_mag_cache; 127 130 128 131 /** Cache for external slab descriptors … … 589 592 assert(_slab_initialized >= 2); 590 593 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); 593 595 if (!cache->mag_cache) 594 596 return false; … … 723 725 } 724 726 727 /** Return object to cache, use slab if known 728 * 729 */ 730 NO_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 725 742 /** Check that there are no slabs and remove cache from system 726 743 * … … 751 768 panic("Destroying cache that is not empty."); 752 769 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 } 755 774 756 775 slab_free(&slab_cache_cache, cache); … … 779 798 780 799 return result; 781 }782 783 /** Return object to cache, use slab if known784 *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);796 800 } 797 801 … … 931 935 #endif 932 936 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 933 941 irq_spinlock_lock(&slab_cache_lock, false); 934 942 -
tools/autotool.py
r5fe3f954 ree820ff 615 615 path = "%s/%s/bin" % (cross_prefix, platform) 616 616 617 common['TARGET'] = target 617 618 prefix = "%s-" % target 618 619 -
tools/toolchain.sh
r5fe3f954 ree820ff 554 554 555 555 # 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"`" 558 558 559 559 ln -s $CLANG "${INSTALL_DIR}/${PREFIX}/bin/${TARGET}-clang" -
uspace/Makefile
r5fe3f954 ree820ff 258 258 CLEANS := $(addsuffix .clean,$(DIRS) $(LIBS) $(BASE_LIBS)) 259 259 260 .PHONY: all $(BASE_BUILDS) $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean 260 .PHONY: all $(BASE_BUILDS) $(BUILDS) $(BUILDS_TESTS) $(CLEANS) clean export 261 261 262 262 all: $(BUILDS) $(BUILDS_TESTS) … … 264 264 $(BUILDS_TESTS): $(BASE_BUILDS) $(BUILDS) 265 265 $(MAKE) -r -C $(basename $@) all-test PRECHECK=$(PRECHECK) 266 267 export: lib/posix.build lib/math.build lib/clui.build 268 $(MAKE) -r -C lib/posix export EXPORT_DIR=$(EXPORT_DIR) 266 269 267 270 clean: $(CLEANS) -
uspace/Makefile.common
r5fe3f954 ree820ff 174 174 endif 175 175 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. 177 DEFAULT_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 188 ifeq ($(CONFIG_DEBUG),y) 189 DEFAULT_CFLAGS += -Werror 190 endif 191 192 ifeq ($(COMPILER),clang) 193 DEFAULT_CFLAGS += \ 194 -Wno-missing-field-initializers \ 195 -Wno-typedef-redefinition \ 196 -Wno-unused-command-line-argument 197 else 198 DEFAULT_CFLAGS += \ 199 -Wno-clobbered 200 endif 201 202 ifeq ($(CONFIG_LINE_DEBUG),y) 203 DEFAULT_CFLAGS += -ggdb 204 endif 205 206 # Flags that should always be used, even for third-party software. 207 COMMON_CPPFLAGS = \ 208 -nostdinc \ 209 -D__$(ENDIANESS)__ 210 211 COMMON_CFLAGS = \ 212 -ffreestanding \ 213 -nostdlib 214 215 # Flags that are always used for HelenOS code, but not for third-party. 216 HELENOS_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 \ 179 224 -fdebug-prefix-map=$(realpath $(ROOT_PATH))=. 180 225 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. 228 CFLAGS = $(COMMON_CPPFLAGS) $(COMMON_CFLAGS) $(HELENOS_CFLAGS) $(DEFAULT_CFLAGS) 201 229 202 230 ## Setup platform configuration … … 216 244 endif 217 245 218 ifeq ($(COMPILER),clang)219 CFLAGS += $(COMMON_CFLAGS) $(CLANG_CFLAGS)220 else221 CFLAGS += $(COMMON_CFLAGS) $(GCC_CFLAGS)222 endif223 224 246 ifeq ($(CONFIG_STRIP_BINARIES),y) 225 247 LFLAGS += --strip-all … … 246 268 all-test: $(TEST_OUTPUTS) 247 269 248 clean: 249 rm -f $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk 270 clean: fasterclean 250 271 find . -name '*.o' -follow -exec rm \{\} \; 251 272 find . -name '*.lo' -follow -exec rm \{\} \; … … 253 274 254 275 fasterclean: 255 rm - f $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk276 rm -rf $(JOB) $(OUTPUTS) $(EXTRA_CLEAN) tag deps.mk 256 277 257 278 depend: $(PRE_DEPEND) -
uspace/lib/c/arch/amd64/Makefile.common
r5fe3f954 ree820ff 31 31 # XXX: clang doesn't support this flag, but the optimization is OS-specific, 32 32 # so it isn't used for amd64-unknown-elf target. 33 GCC_CFLAGS += -mno-tls-direct-seg-refs 33 34 ifneq ($(COMPILER),clang) 35 COMMON_CFLAGS += -mno-tls-direct-seg-refs 36 endif 34 37 35 38 LFLAGS += --gc-sections -
uspace/lib/c/include/macros.h
r5fe3f954 ree820ff 55 55 | ((((uint64_t) (up)) & 0xffffffff) << 32)) 56 56 57 #ifndef member_to_inst58 57 #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)))) 61 60 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__) 62 67 63 68 #endif 64 69 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 71 70 /** @} 72 71 */ -
uspace/lib/posix/Makefile
r5fe3f954 ree820ff 45 45 $(LIBSOFTINT_PREFIX)/libsoftint.a 46 46 47 SPECS = gcc.specs 48 LIBC_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld 49 LIBC_STARTUP_FILE = $(shell sed -n -e 's/^.*STARTUP(\(.*\)).*$$/\1/p' $(LIBC_LINKER_SCRIPT)) 50 EXPORT_LINKER_SCRIPT = link.ld 51 EXPORT_STARTUP_FILE = crt0.o 52 53 EXPORT_FILES = \ 54 ../math/libmath.a \ 55 ../clui/libclui.a \ 56 $(MERGED_C_LIBRARY) \ 57 $(EXPORT_STARTUP_FILE) \ 58 $(EXPORT_LINKER_SCRIPT) \ 59 $(SPECS) 60 47 61 REDEFS_HIDE_LIBC = redefs-hide-libc-symbols.list 48 62 … … 53 67 libc.o 54 68 55 EXTRA_OUTPUT = $(FIXED_C_LIBRARY) $(FIXED_POSIX_LIBRARY) $(MERGED_C_LIBRARY) 69 EXTRA_OUTPUT = $(FIXED_C_LIBRARY) $(FIXED_POSIX_LIBRARY) $(MERGED_C_LIBRARY) $(SPECS) $(EXPORT_LINKER_SCRIPT) $(EXPORT_STARTUP_FILE) 56 70 57 71 SOURCES = \ … … 83 97 test/scanf.c 84 98 99 EXPORT_CPPFLAGS = \ 100 -specs $$(HELENOS_EXPORT_ROOT)/lib/gcc.specs \ 101 -isystem $$(HELENOS_EXPORT_ROOT)/include 102 103 EXPORT_LDFLAGS = \ 104 -L$$(HELENOS_EXPORT_ROOT)/lib \ 105 -T link.ld 106 107 EXPORT_LDLIBS = \ 108 -lmath -lc 109 110 EXPORT_CFLAGS = \ 111 -specs $$(HELENOS_EXPORT_ROOT)/lib/gcc.specs 112 85 113 include $(USPACE_PREFIX)/Makefile.common 86 114 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 136 export: $(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 154 export-libs: $(EXPORT_FILES) export-includes 155 mkdir -p $(EXPORT_DIR)/lib 156 cp -L $(EXPORT_FILES) $(EXPORT_DIR)/lib 157 158 export-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 89 181 90 182 $(FIXED_C_LIBRARY): $(LIBC_FILE) $(REDEFS_HIDE_LIBC) … … 97 189 $(REDEFS_HIDE_LIBC): $(SOURCES) 98 190 sed -n -e 's/_HIDE_LIBC_SYMBOL(\(.*\))/\1 __helenos_libc_\1/p' $(SOURCES) >$@ 99
Note:
See TracChangeset
for help on using the changeset viewer.