реклама на сайте
подробности

 
 
> Сборка arm-elf- toolchain, Не удается собрать newlib
Bulya
сообщение Oct 28 2009, 12:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-08
Из: Харьков
Пользователь №: 40 874



Здравствуйте.
Собираю
binutils-2.20, gcc-4.3.4, newlib-1.17.0
с ключами
--target=arm-elf --enable-interwork --enable-multilib --enable-languages="c,c++" --with-gnu-as --with-gnu-ld
--disable-shared --disable-nls --disable-newlib-supplied-syscalls --disable-newlib-io-float

компиляция newlib прекращается с ошибками в linux-syscalls0.S
.../newlib-1.17.0/libgloss/arm/linux-syscalls0.S:37: Error: missing expression -- `swi'
.../newlib-1.17.0/libgloss/arm/linux-syscalls0.S:102: Error: missing expression -- `swi'
...

linux-syscalls0.S:
CODE

#include "linux-syscall.h"

#if __thumb__
# define FUNC(name) .type name, %function; .thumb_func; name:
# define SET .thumb_set
#else
# define FUNC(name) .type name, %function; name:
# define SET .set
#endif

#define GLOBAL(name) .global name; FUNC(name)
#define SIZE(name) .size name, .-name

#if __thumb__

# define SYSCALL0(name) \
GLOBAL(_ ## name); \
mov r12, r7; \
mov r7, #SYS_ ## name; \
swi; \
mov r7, r12; \
b _set_errno; \
SIZE(_ ## name)

/* static int _syscall3(int a, int b, int c, int number); */
FUNC(_syscall3)
push { r7 }
mov r7, r3
swi
pop { r7 }
b _set_errno
SIZE(_syscall3)

# define SYSCALL3(name) \
GLOBAL(_ ## name); \
mov r3, #SYS_ ## name; \
b _syscall3; \
SIZE(_ ## name)

# define SYSCALL6(name) \
GLOBAL(_ ## name); \
push { r4 - r5, r7 }; \
ldr r4, [sp, #12]; \
ldr r5, [sp, #16]; \
mov r7, #SYS_ ## name; \
swi; \
pop { r4 - r5, r7 }; \
b _set_errno; \
SIZE(_ ## name)

# define SYSCALL4(name) SYSCALL6(name)

#else /* __thumb__ */

# define SYSCALL4(name) \
GLOBAL(_ ## name); \
swi #SYS_ ## name; \
b _set_errno; \
SIZE(_ ## name)

# define SYSCALL6(name) \
GLOBAL(_ ## name); \
push { r4 - r5 }; \
ldr r4, [sp, #8]; \
ldr r5, [sp, #12]; \
swi #SYS_ ## name; \
pop { r4 - r5 }; \
b _set_errno; \
SIZE(_ ## name)

#define SYSCALL0(name) SYSCALL3(name)
#define SYSCALL3(name) SYSCALL4(name)

#endif /* __thumb__ */

#define SYSCALL1(name) SYSCALL3(name)
#define SYSCALL2(name) SYSCALL3(name)
#define SYSCALL5(name) SYSCALL6(name)

SYSCALL1(alarm)
SYSCALL1(brk)
SYSCALL1(chdir)
SYSCALL2(chmod)
SYSCALL3(chown)
SYSCALL1(close)
SYSCALL1(dup)
SYSCALL2(dup2)
SYSCALL3(execve)
SYSCALL1(exit)
SYSCALL3(fcntl)
SYSCALL2(fstat)
SYSCALL2(ftruncate)
SYSCALL3(getdents)
SYSCALL0(getegid)
SYSCALL0(geteuid)
SYSCALL0(getgid)
SYSCALL2(getgroups)
SYSCALL1(getpgid)
SYSCALL0(getpgrp)
SYSCALL0(getpid)
SYSCALL0(getuid)
SYSCALL2(gettimeofday)
SYSCALL3(ioctl)
SYSCALL2(kill)
SYSCALL3(lchown)
SYSCALL2(link)
SYSCALL3(lseek)
SYSCALL2(lstat)
SYSCALL2(mkdir)
SYSCALL3(mknod)
SYSCALL2(nanosleep)
SYSCALL3(open)
SYSCALL0(pause)
SYSCALL1(pipe)
SYSCALL3(read)
SYSCALL3(readlink)
SYSCALL4(reboot)
SYSCALL1(rmdir)
SYSCALL5(select)
SYSCALL2(setpgid)
SYSCALL1(setgid)
SYSCALL0(setsid)
SYSCALL1(setuid)
SYSCALL3(sigprocmask)
SYSCALL2(socketcall)
SYSCALL2(stat)
SYSCALL1(stime)
SYSCALL2(symlink)
SYSCALL1(sync)
SYSCALL1(sysinfo)
SYSCALL1(times)
SYSCALL2(truncate)
SYSCALL1(umask)
SYSCALL1(uname)
SYSCALL1(unlink)
SYSCALL2(utime)
SYSCALL0(vfork)
SYSCALL4(wait4)
SYSCALL3(write)

т.е. передача номера прерывания через регистр r7 (в __thumb__), а не в инструкции swi вызывает ошибку.

Что характерно, системные вызовы linux мне вообще не нужны для arm-elf.
Подскажите, пожалуйста, решение проблемы (правильную конфигурацию при сборке или правильный синтаксис системных вызовов).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Doka
сообщение Nov 14 2009, 07:19
Сообщение #2


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



а о каком CVS newlib речь??.. я брал отсюда ftp://sources.redhat.com/pub/newlib/
версия newlib-1.17.0.tar.gz датирована 22.12.2008 (собирал с правкой configure.ac как описано на http://eluaproject.dreamhosters.com/en/Bui..._GCC_for_Cortex )


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 14 2009, 10:55
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



http://ru.wikipedia.org/wiki/CVS
читать до конца

ставить CVS клиета, забирать им текщий срез дерева исходников, править и закладывать сои измения в дерево(для продвинутых smile.gif)

также читать по теме SVN,GIT,Mercurial
Go to the top of the page
 
+Quote Post
Doka
сообщение Nov 14 2009, 12:37
Сообщение #4


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Цитата(klen @ Nov 14 2009, 13:55) *
http://ru.wikipedia.org/wiki/CVS
читать до конца


LOL..

версия 1.17.0 согласно ftp RedHat выпущена 22.12.2008
если в системе контроля ревизий не работает автоинкремент этих самых ревизий - это уже не система контроля ревизий..
как может текущий срез называться номеров уже выпущеной (freeze) ревизии?


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 14 2009, 13:42
Сообщение #5


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(Doka @ Nov 14 2009, 15:37) *
LOL..

версия 1.17.0 согласно ftp RedHat выпущена 22.12.2008
если в системе контроля ревизий не работает автоинкремент этих самых ревизий - это уже не система контроля ревизий..
как может текущий срез называться номеров уже выпущеной (freeze) ревизии?


уважаемый, Вы не до конца дочитали.

1.17.0 - это всего лишь релиз, конкретный срез который приняли как "релизный".

чтоб получить самые свежее состояние дерева исходников в Вашем случае нужно в консоли жмякнуть
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib

и потом перед сборкой при желании обновить дерево в тойже консоли с темже текущим путем жмякнуть
cvs update
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 06:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016