From: Lawrence <law@cbf.chinese2000.net>
To: linux-assembly@vger.kernel.org
Subject: Re: how to use linux system call in cross compiling environment
Date: Thu, 18 Nov 2004 09:17:38 +0800 [thread overview]
Message-ID: <419BF832.60804@cbf.chinese2000.net> (raw)
In-Reply-To: <20041117151719.GA26478@mail.13thfloor.at>
Dear Herbert,
Thanks for your reply.
I have to apologize that I am not much familiar with C, thus I have some
difficulty to digest the code.
I assume the purpose of the C code is to generate the swi call in
assembly format. From the objdump I see "swi 0x009000de", therefore I
just add this to my assembly code and comment out the other swi. After
the asm->ld->run procedure I still got the same answer from arm-elf-run
of "sim: unknow SWI encountered - 0999de - ignoring". Besides, I can't
find of any linux syscall that correspondent with 0x9000de, is that a
new syscall in kernerl 2.6?
Once I am thinking if it is because the GNU ARM toolchain doesn't have
an arm linux kernel that make any swi syscall impossible. If this is
the case, is there a way to load an arm kernerl first and then debug the
assembly program?
I've also tried a simple "Hello World" program with the toolchain and
arm-elf-run can show the printf string to the screen. I wonder how they
do this without a kernel.
Thanks and Regards,
Lawrence
>On Wed, Nov 17, 2004 at 04:39:06PM +0800, Lawrence wrote:
>
>
>>Hi all,
>>
>>I'm figuring out the linux-arm assembly right now. I use the GNU ARM
>>toolchain 3.4.1 provided by www.gnuarm.com on my x86 Linux hosts.
>>
>>I've successfully assembled and linked the following code:
>>
>>@filename: hello.s
>>
>>.text
>> .align 2
>> .global _start
>>_start:
>> adr r1, msg @ address
>> mov r0, #1 @ stdout
>> mov r2, #13 @ length
>> swi #0x900004 @ sys_write
>>
>> mov r0, #0
>> swi #0x900001 @ sys_exit
>>
>> .align 2
>>msg:
>> .asciz "hello, world\n"
>>
>>the commands I used are as follows:
>>
>>arm-elf-as -gdwarf2 -o hello.o hello.s
>>arm-elf-ld -o hello hello.o
>>
>>
>
>hmm,
>
>static inline long mhelper(uint32_t cmd, uint32_t addr, uint32_t value)
>{
> register long _r2 asm("r2")=(long)(value);
> register long _r1 asm("r1")=(long)(addr);
> register long _r0 asm("r0")=(long)(cmd);
> asm volatile(
> "swi %1"
> : "=r"(_r0)
> : "i"(__NR_mhelper), "r"(_r0), "r"(_r1), "r"(_r2)
> : "memory");
> if(_r0 >=(unsigned long) -4095) {
> long err = _r0;
> (*__errno_location())=(-err);
> _r0=(unsigned long) -1;
> }
> return (long) _r0;
>}
>
>
>which looks like this in objdump:
>
> 844c: e1a0200a mov r2, sl
> 8450: e1a0100a mov r1, sl
> 8454: e1a0000a mov r0, sl
> 8458: ef9000de swi 0x009000de
> 845c: e3700a01 cmn r0, #4096 ; 0x1000
> 8460: 9a000004 bls 0x8478
> ...
>
>
>works fine here ...
>
>HTH,
>Herbert
>
>
>
>>When I run the program as "arm-elf-run hello", I got the reply sim:
>>unknown SWI encountered - 900004 - ignoring. I got the same result when
>>debugging the program with insight and gdb.
>>
>>I would like to know if there is a way to use the arm linux system call
>>under such simulation environment. Thanks.
>>
>>Regards,
>>Lawrence
>>
>>
>>-
>>To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
>>the body of a message to majordomo@vger.kernel.org
>>More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
>
>
next prev parent reply other threads:[~2004-11-18 1:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-17 8:39 how to use linux system call in cross compiling environment Lawrence
2004-11-17 15:17 ` Herbert Poetzl
2004-11-18 1:17 ` Lawrence [this message]
2004-11-18 9:48 ` Herbert Poetzl
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=419BF832.60804@cbf.chinese2000.net \
--to=law@cbf.chinese2000.net \
--cc=linux-assembly@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.