mips 和标准 android2.1 的 bionic 区别
一、以下部分是 mips 和标准版都有的.c 或.h 文件
(1) libc/bionic/libc_init_common.c
mips: A. 多了一个头文件#include <linux/auxvec.h>
B. 开始时多了一个条件编译,如:
#if defined(PAGE_SIZE_DYNAMIC)
……
C.在 void __libc_init_common(uintptr_t *elfdata)函数里,多调了一个接口函数:
findpagesize(envp);
(2) libc/bionic/md5.c
mips: A. 多了一个头文件#include <endian.h>
(3) libc/bionic/pthread.c
mips: 主要是多了两个条件编译,如:
A. 在 pthread_attr_t gDefaultPthreadAttr 结构体中
#if !defined(PAGE_SIZE_DYNAMIC)
.guard_size = PAGE_SIZE,
#endif
B. 在函数_init_thread 里,多了
#if defined(PAGE_SIZE_DYNAMIC)
thread->attr.guard_size = PAGE_SIZE;
#endif
(4) libc/netbsd/net/getservent.c
mips: A. 多了一个头文件#include <arpa/inet.h>
(5) libc/string/memmove.c
mips: 主要有一个接口函数 void *memmove(void *dst, const void *src, size_t n),里面
实现方式很不一样,mips 改了很多地方。
(6) libc/string/memset.c
mips: void* memset(void* dst, int c, size_t n)里面的判断条件和标准版的想法
if (q >= end) break; *q++ = (char) c; // 标准版的是<
if (q >= end) break; *q++ = (char) c; // 标准版的是<
if (q >= end) break; *q++ = (char) c; // 标准版的是<
if (q >= end) break; *q++ = (char) c; // 标准版的是<
(7) libc/string/strerror_r.c
static const CodeString _sys_error_strings[]里面有个宏定义不一样。
mips: #define __BIONIC_ERRDEF(x,y,z) { x, z },
标准版: #define __BIONIC_ERRDEF(x,y,z) { y, z },