Changeset d6b81941 in mainline for kernel/generic/src/lib/memfnc.c


Ignore:
Timestamp:
2011-03-29T21:59:55Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
563b538, ad7a6c9
Parents:
ebebd38 (diff), 3abfe9a8 (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 toolchain upgrade and related changes. Highlights:

  • GCC 4.6, binutils 2.21
  • change the default CROSS_PREFIX to /usr/local/cross to avoid ugly pollution in the /usr/local directory (closes #252)
  • amd64: use a silly workaround to avoid possible GCC 4.6 bug (going to report to GCC's bugzilla)
  • toolchain.sh now supports parallel toolchain build (i.e. all targets at once)
  • improve linker scripts to support the newest compiler input sections
  • remove unused variables and other various fixes for GCC 4.6 warnings (GCC 4.5.1 also passes compilation)
  • unification of kernel memcpy() and memstr() functions (use compiler builtins whenever possible, keep plain C fallback implementations in a sepearate object file)
File:
1 moved

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/lib/memfnc.c

    rebebd38 rd6b81941  
    1 /*
    2  * Copyright (c) 2005 Sergey Bondari
     1        /*
     2 * Copyright (c) 2011 Martin Decky
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup amd64
     29/** @addtogroup generic
    3030 * @{
    3131 */
    32 /** @file
     32
     33/**
     34 * @file
     35 * @brief Memory string functions.
     36 *
     37 * This file provides architecture independent functions to manipulate blocks
     38 * of memory. These functions are optimized as much as generic functions of
     39 * this type can be.
    3340 */
    3441
    35 #ifndef KERN_amd64_MEMSTR_H_
    36 #define KERN_amd64_MEMSTR_H_
     42#include <lib/memfnc.h>
     43#include <typedefs.h>
    3744
    38 #define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
     45/** Fill block of memory.
     46 *
     47 * Fill cnt bytes at dst address with the value val.
     48 *
     49 * @param dst Destination address to fill.
     50 * @param val Value to fill.
     51 * @param cnt Number of bytes to fill.
     52 *
     53 * @return Destination address.
     54 *
     55 */
     56void *memset(void *dst, int val, size_t cnt)
     57{
     58        size_t i;
     59        uint8_t *ptr = (uint8_t *) dst;
     60       
     61        for (i = 0; i < cnt; i++)
     62                ptr[i] = val;
     63       
     64        return dst;
     65}
    3966
    40 extern void memsetw(void *, size_t, uint16_t);
    41 extern void memsetb(void *, size_t, uint8_t);
    42 
    43 #endif
     67/** Move memory block without overlapping.
     68 *
     69 * Copy cnt bytes from src address to dst address. The source
     70 * and destination memory areas cannot overlap.
     71 *
     72 * @param dst Destination address to copy to.
     73 * @param src Source address to copy from.
     74 * @param cnt Number of bytes to copy.
     75 *
     76 * @return Destination address.
     77 *
     78 */
     79void *memcpy(void *dst, const void *src, size_t cnt)
     80{
     81        uint8_t *dp = (uint8_t *) dst;
     82        const uint8_t *sp = (uint8_t *) src;
     83       
     84        while (cnt-- != 0)
     85                        *dp++ = *sp++;
     86       
     87        return dst;
     88}
    4489
    4590/** @}
Note: See TracChangeset for help on using the changeset viewer.