Hi Gabe,

I can see where the register should be stored (line 59 in
pseudo_inst_abi.hh) but I put a print there and it never gets called for
the calls that I am making at least.

When i try to use m5_exit_addr and other functions with that suffix I get a
"error: 'm5_exit_addr' was not declared in this scope"
Which makes sense because m5ops.h doesn't declare the functions, I can see
they are built by macro though.

I've also tried to run map_m5_mem() but I get the "Can't open /dev/mem"
error message.

Could you point me to, or could you quickly throw together an example
'hello-world' type program and build process for SE mode?

Thanks,

Dan




On Mon, Nov 9, 2020 at 6:48 PM Matt Sinclair via gem5-users <
gem5-users@gem5.org> wrote:

> Hi Gabe,
>
> I don't have the broken build in front of me, and it's possible it is
> because I'm running on an Ubuntu 16 machine, but I had to add c+11 per the
> error message I got when debugging this.  If c++14 works though, great.
>
> Thanks for the updated info -- I built the tutorial out of the old one, so
> next time I'll make sure to update it accordingly.
>
> Thanks,
> Matt
>
> On Mon, Nov 9, 2020 at 5:44 PM Gabe Black via gem5-users <
> gem5-users@gem5.org> wrote:
>
>> BTW, I do think I need to explicitly set the c++ version in the scons
>> file, like in Matt's original email above. I'd probably set it to c++14
>> though, to be consistent with gem5 proper. I think that will likely fix a
>> build issue Bobby had with an older (7.x I think) version of gcc, where the
>> default version is probably different from the compiler I'm using (10.x I
>> think).
>>
>> Gabe
>>
>> On Mon, Nov 9, 2020 at 1:50 PM Gabe Black <gabe.bl...@gmail.com> wrote:
>>
>>> Hi folks. If you're using the magic address based version of the gem5
>>> ops, then you should call, for instance, m5_exit_addr and not just m5_exit.
>>> The "normal" functions are now always the magic instructions which
>>> essentially only gem5 CPU models know how to execute. All call mechanisms
>>> are built into the library at once now so you can use the same binary on
>>> the KVM CPU, native gem5 CPUs, etc.
>>>
>>> You also should not change the scons files when you build. The old
>>> Makefile based setup required tinkering with things to get the build you
>>> wanted, but that is no longer necessary. If you need to, that's a bug and
>>> we should look into it. The lines you're commenting out just set the
>>> default magic address, and that's only there for legacy reasons. You can
>>> set the address to use from the command line if you're using the m5
>>> utility, or by setting the m5op_addr variable if using the library. You
>>> still have to run map_m5_mem to make the magic physical address visible to
>>> userspace for the library to work, or otherwise set up a virtual to
>>> physical mapping if you were, for instance, running in the kernel which
>>> somebody was doing recently.
>>>
>>> If you try to use a call mechanism that isn't supported by your CPU
>>> model, then the behavior will be unpredictable. For x86 on the KVM CPU for
>>> example, the special gem5 instructions will do whatever they look like they
>>> should do on real hardware. That may be a nop, it may be to generate an
>>> undefined instruction exception, etc. If it's a nop, it will just leave
>>> whatever is in RAX in RAX.
>>>
>>> Also, argument values and return values are now handled by a layer which
>>> knows and applies the actual ABI rules for a given ISA and for the specific
>>> types of the arguments and return value. There should be no reason to
>>> change the code which is calling the pseudo instruction to explicitly set
>>> RAX, especially if you're using the address based calling mechanism which
>>> doesn't go through that path at all.
>>>
>>> Gabe
>>>
>>> On Mon, Nov 9, 2020 at 1:06 PM Matt Sinclair via gem5-users <
>>> gem5-users@gem5.org> wrote:
>>>
>>>> Hi Dan,
>>>>
>>>> My comment was just a general comment on the m5ops -- I thought you
>>>> were using the "old" format for building m5ops and that might have been the
>>>> problem.  Sounds like it wasn't.
>>>>
>>>> I think pushing a fix to develop and tagging Gabe and Jason as
>>>> reviewers is probably the right strategy.
>>>>
>>>> Thanks,
>>>> Matt
>>>>
>>>> On Mon, Nov 9, 2020 at 2:33 PM Daniel Gerzhoy <daniel.gerz...@gmail.com>
>>>> wrote:
>>>>
>>>>> I found the issue and fixed it.
>>>>>
>>>>> The return value wasn't being put into the Rax register in
>>>>> src/arch/x86/isa/decoder/two_byte_opcodes.isa
>>>>>
>>>>>             0x4: BasicOperate::gem5Op({{
>>>>>                 uint64_t ret;
>>>>>                 bool recognized =
>>>>> PseudoInst::pseudoInst<X86PseudoInstABI>(
>>>>>                         xc->tcBase(), IMMEDIATE, ret);
>>>>>                 if (!recognized)
>>>>>                     fault = std::make_shared<InvalidOpcode>();
>>>>>                 Rax = ret;
>>>>>
>>>>> //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Added This
>>>>>             }}, IsNonSpeculative);
>>>>>
>>>>>   This code was simplified with the new abi stuff and the Rax = ret;
>>>>> must have been lost in the shuffle.
>>>>>
>>>>> I could push the fix to develop, or should I just make an issue on
>>>>> Jira?
>>>>>
>>>>> Best,
>>>>>
>>>>> Dan
>>>>>
>>>>> On Mon, Nov 9, 2020 at 2:50 PM Daniel Gerzhoy <
>>>>> daniel.gerz...@gmail.com> wrote:
>>>>>
>>>>>> Let me further say that I know that the magic instructions are being
>>>>>> called. I am just getting bogus return values.
>>>>>>
>>>>>> On Mon, Nov 9, 2020 at 2:18 PM Daniel Gerzhoy <
>>>>>> daniel.gerz...@gmail.com> wrote:
>>>>>>
>>>>>>> Hi Matt,
>>>>>>>
>>>>>>> Thanks for this, it's very helpful. However after following the
>>>>>>> instructions (I had to extrapolate a little because of the directory
>>>>>>> structure changes you mentioned) I get the same result: Nill returns 
>>>>>>> from
>>>>>>> the magic instructions.
>>>>>>> Actually It isn't nill, but a constant no matter what. If I compile
>>>>>>> my program with -O0 its nill, if with -O2 its: 4198192, which is 
>>>>>>> suspicious.
>>>>>>>
>>>>>>> To clarify, are these updated instructions specifically meant to fix
>>>>>>> this issue I am running into? Or just general instructions to build 
>>>>>>> m5op.o
>>>>>>>
>>>>>>> Here are the specific changes I made according to the link you
>>>>>>> provided, the supplemental instructions, and extrapolating based on the
>>>>>>> directory structure change.
>>>>>>>
>>>>>>> 1. In SConsopts I commented both:
>>>>>>>
>>>>>>> --- a/util/m5/src/abi/x86/SConsopts
>>>>>>> +++ b/util/m5/src/abi/x86/SConsopts
>>>>>>> @@ -27,8 +27,8 @@ Import('*')
>>>>>>>
>>>>>>>  env['ABI'] = 'x86'
>>>>>>>  get_abi_opt('CROSS_COMPILE', '')
>>>>>>> -env.Append(CXXFLAGS='-DM5OP_ADDR=0xFFFF0000')
>>>>>>> -env.Append(CCFLAGS='-DM5OP_ADDR=0xFFFF0000')
>>>>>>> +#env.Append(CXXFLAGS='-DM5OP_ADDR=0xFFFF0000')
>>>>>>> +#env.Append(CCFLAGS='-DM5OP_ADDR=0xFFFF0000')
>>>>>>>
>>>>>>>  env['CALL_TYPE']['inst'].impl('m5op.S', 'verify_inst.cc')
>>>>>>>  env['CALL_TYPE']['addr'].impl('m5op_addr.S', default=True)
>>>>>>>
>>>>>>> 2. In SConstruct I added:
>>>>>>>
>>>>>>> --- a/util/m5/SConstruct
>>>>>>> +++ b/util/m5/SConstruct
>>>>>>> @@ -44,7 +44,9 @@ def abspath(d):
>>>>>>>
>>>>>>>  # Universal settings.
>>>>>>>  main.Append(CXXFLAGS=[ '-O2' ])
>>>>>>> +main.Append(CXXFLAGS=[ '-std=c++11' ])
>>>>>>>  main.Append(CCFLAGS=[ '-O2' ])
>>>>>>>  main.Append(CPPPATH=[ common_include ])
>>>>>>>
>>>>>>> The compilation process compiles m5op.S with gcc though, so c++11
>>>>>>> doesn't have any effect on it. Not sure if that matters.
>>>>>>>
>>>>>>> 3. Finally I linked both m5_mmap.o and m5op.o as per the
>>>>>>> instructions but I am a little wary of m5_mmap
>>>>>>>
>>>>>>> What does m5_mmap actually do if I don't have M5OP_ADDR defined. It
>>>>>>> looks like nothing? Do I need to link it?
>>>>>>>
>>>>>>> *Is there something inside the program I need to do before calling
>>>>>>> magic instructions that has to do with m5_mmap?*
>>>>>>>
>>>>>>> Thanks for your help,
>>>>>>>
>>>>>>> Dan
>>>>>>>
>>>>>>> On Mon, Nov 9, 2020 at 12:12 PM Matt Sinclair <
>>>>>>> mattdsincl...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi Dan,
>>>>>>>>
>>>>>>>> In recent weeks, Gabe (if I recall correctly) updated how the m5ops
>>>>>>>> are created.  I had created a homework assignment for my course about 
>>>>>>>> it:
>>>>>>>> https://pages.cs.wisc.edu/~sinclair/courses/cs752/fall2020/handouts/hw3.html
>>>>>>>> (see #2), but this is now already out of date as the location of some 
>>>>>>>> files
>>>>>>>> changed.  The updated instructions are:
>>>>>>>>
>>>>>>>> 1.  Update $GEM5_ROOT/util/m5/SConstruct, add a new line between
>>>>>>>> the current lines 46 and 47:
>>>>>>>>
>>>>>>>> main.Append(CXXFLAGS=[ '-O2' ])
>>>>>>>> *+main.Append(CXXFLAGS=[ '-std=c++11' ])*
>>>>>>>>
>>>>>>>> main.Append(CCFLAGS=[ '-O2' ])
>>>>>>>>
>>>>>>>> 2.  Now run the same command you ran in step 2 of the above link:
>>>>>>>>
>>>>>>>> scons build/x86/out/m5
>>>>>>>>
>>>>>>>> 3.  This will create the same two .o files in step 2 of the above
>>>>>>>> link, in the same places (although the location of m5op.o may have
>>>>>>>> changed to include/gem5 util/m5/build/x86/abi/x86/ according to
>>>>>>>> some of the students in my course).
>>>>>>>> Matt
>>>>>>>>
>>>>>>>> On Mon, Nov 9, 2020 at 9:25 AM Daniel Gerzhoy via gem5-users <
>>>>>>>> gem5-users@gem5.org> wrote:
>>>>>>>>
>>>>>>>>> Hey all,
>>>>>>>>>
>>>>>>>>> I've recently updated to using the dev branch for my GCN3
>>>>>>>>> simulations. I've noticed that I am now getting return values of 0 for
>>>>>>>>> every magic instruction (m5_rpns for instance).
>>>>>>>>>
>>>>>>>>> Is there a special way I need to be compiling/linking m5ops.S to
>>>>>>>>> get the return values to show up correctly? Or might this be a bug?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Dan
>>>>>>>>> _______________________________________________
>>>>>>>>> gem5-users mailing list -- gem5-users@gem5.org
>>>>>>>>> To unsubscribe send an email to gem5-users-le...@gem5.org
>>>>>>>>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>>>>>>>>
>>>>>>>> _______________________________________________
>>>> gem5-users mailing list -- gem5-users@gem5.org
>>>> To unsubscribe send an email to gem5-users-le...@gem5.org
>>>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>>>
>>> _______________________________________________
>> gem5-users mailing list -- gem5-users@gem5.org
>> To unsubscribe send an email to gem5-users-le...@gem5.org
>> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
>
> _______________________________________________
> gem5-users mailing list -- gem5-users@gem5.org
> To unsubscribe send an email to gem5-users-le...@gem5.org
> %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________
gem5-users mailing list -- gem5-users@gem5.org
To unsubscribe send an email to gem5-users-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to