All of lore.kernel.org
 help / color / mirror / Atom feed
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
>>    
>>
>
>
>  
>


  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.