I tried the following, which works for me in full-system mode programs:

The code to give you the functions is in m5/util//m5/m5op_alpha.S, and  
the header that provides them for C programs is m5/util/m5/m5op.h. The  
following program:

        #include "m5/util/m5/m5op.h"
        void _start() { m5_exit(0); }

Compiles with:

        alpha-unknown-linux-gnu-gcc -nostdlib nm.c abi-tag.o m5/util/m5/ 
m5op_alpha.S

But M5 chokes on it. I don't normally use syscall-emulation, but do  
you know if the M5 instructions are supported in SE mode? I directly  
dropped the assembly bit into the program, and M5 then gave me an  
error about an invalid instruction. You may have to handcode a syscall  
to signal a UNIX exit, instead.

        - Clint

On Nov 13, 2008, at 2:08 AM, Shoaib Akram wrote:

> Where do you suggest I put m5_exit, in c program? How?
>
> ---- Original message ----
>> Date: Wed, 12 Nov 2008 19:35:41 -0500
>> From: Clint Smullen <[EMAIL PROTECTED]>
>> Subject: Re: [m5-users] statictics
>> To: M5 users mailing list <[email protected]>
>>
>> Different platforms choose whether or not to automatically prefix
>> underscores and whether start or _start is the default symbol. On a
>> linux system, I was able to compile and link the following program:
>>
>>      void _start() { }
>>
>> Using just:
>>
>>      gcc -nostdlib nm.c
>>
>> The resulting program crashes, however, since it does not have what  
>> is
>> typically contained within crt0. The important thing to keep in mind,
>> is that start() should never return. Adding a trivial loop proves
>> this, as with the following variant:
>>
>>      void start() { while (1) { } }
>>
>> Since you are running it within M5, I would suggest putting a  
>> trailing
>> m5_exit to keep it from running of into no-man's land.
>>
>>      - Clint
>>
>> On Nov 12, 2008, at 7:18 PM, nathan binkert wrote:
>>
>>> You should be able to just create a function called _start.  Does  
>>> that
>>> not work?  What does nm say when you do that?
>>>
>>> I think the thing you're missing here is that you need to tell the
>>> linker that you're using _start as the entry point for your program.
>>> The kernel doesn't actually look for _start (you should be able to
>>> call it whatever you want).  It looks in the elf header for the
>>> address of an entry point.  Because you've told it not to use the
>>> stdlib, I'm guessing that the linker might not add the entry point  
>>> if
>>> you don't tell it which symbol it is.
>>>
>>> Good luck.
>>>
>>> Nate
>>>
>>> On Wed, Nov 12, 2008 at 4:12 PM, Shoaib Akram <[EMAIL PROTECTED]>
>>> wrote:
>>>> Kind of not related to m5, but do you know how do I define my own
>>>> _start symbol in a c program?
>>>>
>>>> ---- Original message ----
>>>>> Date: Tue, 11 Nov 2008 01:05:35 -0800
>>>>> From: Gabe Black <[EMAIL PROTECTED]>
>>>>> Subject: Re: [m5-users] statictics
>>>>> To: M5 users mailing list <[email protected]>
>>>>>
>>>>> I believe you use the -nostdlib option to leave out all of the
>>>>> standard
>>>>> library stuff, including _start which kicks off all the things Ali
>>>>> mentioned and more and then finally calls main(). In your program
>>>>> you'll
>>>>> then need to define _start yourself. If you're writing your
>>>>> program in
>>>>> assembly, then all you need to do is include a label called _start
>>>>> and
>>>>> put everything you want to run after it. If your program uses any
>>>>> system
>>>>> calls you'll have to implement stubs for those since those are
>>>>> part of
>>>>> the standard library too.
>>>>>
>>>>> Gabe
>>>>>
>>>>> Ali Saidi wrote:
>>>>>> No it's probably from all the libc _start code that is executed.
>>>>>> Even
>>>>>> if main() is a single line there is much more code that is
>>>>>> included in
>>>>>> the binary to setup the environment properly, get the arguments  
>>>>>> in
>>>>>> order, see if the terminal is character or line buffered, etc.  
>>>>>> You
>>>>>> should be able to convince the linker to not include all of  
>>>>>> this -
>>>>>> fno-
>>>>>> builtin, but you'll need to define a _start symbol.
>>>>>>
>>>>>> Ali
>>>>>>
>>>>>> On Nov 10, 2008, at 11:21 PM, Shoaib Akram wrote:
>>>>>>
>>>>>>
>>>>>>> I wrote a simple program with 3 branches and ran it on m5. The
>>>>>>> statstics show much more branches and the number of instructions
>>>>>>> executed are also more than the assembly generated. Is it
>>>>>>> because of
>>>>>>> noise from emulated system calls?
>>>>>>> _______________________________________________
>>>>>>> m5-users mailing list
>>>>>>> [email protected]
>>>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> m5-users mailing list
>>>>>> [email protected]
>>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> m5-users mailing list
>>>>> [email protected]
>>>>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>>> _______________________________________________
>>>> m5-users mailing list
>>>> [email protected]
>>>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>>>
>>>>
>>> _______________________________________________
>>> m5-users mailing list
>>> [email protected]
>>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
>>
>> _______________________________________________
>> m5-users mailing list
>> [email protected]
>> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users
> _______________________________________________
> m5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

_______________________________________________
m5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/m5-users

Reply via email to