On Feb 19, 2014, at 10:26 AM, Stephen Polkowski <step...@centtech.com> wrote:
> Thanks for the reply Andrew!
>
> I admit there are but a few reasons to program without
> "C". I can think of two. For example, educators might want to offer a
> course in assembly language programming to their students. An other reason
> would
> be to build an embedded OS without using the EDK2. No offense, but
> the EDK2 is a configuration mess and way too complicated for a college
> freshman.
> It would be way easier to give them one header file "uefi.inc" with some
> structures
> and a template block of code.
>
I think you would be better off using SetupEfi(), and adding a printf(),
getch(), and other EFI abstractions via C functions.
> Anyhow, I guess I'll take a look at the Linux UEFI Stub. Somehow, they
> figured out how to boot linux in UEFI without using the EDK2 build
> environment.
>
The tricky bits for X64 (x86_64) is the calling conventions, and the need to
generate a PE/COFF file.
The linker flags in edk2 force the entry point to _ModuleEntryPoint, so if you
have that function you don’t need libraries. Most, but not all, flavors of gcc
pre-pend an extra ‘_’ to the C names so that is why the assembly is
__ModuleEntryPoint().
The edk2 build system will generate a makefile in the Build directory. You
could probably hack that up a bit and make a stand alone makefile project that
to build an app. You could then use the headers from the MdePkg (just delete
the Library/ and Include/Library/ directory). Just pick the tools you want to
standardize on and do the edk2 build. You just need to point WORKSPACE at the
location of the MdePkg.
Thanks,
Andrew Fish
> Regards,
>
> Stephen
>
> Andrew Fish wrote:
>>
>> On Feb 19, 2014, at 8:36 AM, Stephen Polkowski <step...@centtech.com
>> <mailto:step...@centtech.com>> wrote:
>>
>>> Hi all,
>>>
>>> Does the EDK2 have a assembler only example of doing
>>> a simple "Hello World" app? I would like a GNU GAS example,
>>> but any would do.
>>>
>>
>> No. The BaseLib has assembler (and inline assembler)
>> examples:
>> https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdePkg/Library/BaseLib/
>>
>>> If there isn't an example, shouldn't the EDK2 have one?
>>> I need to write an embedded OS that isn't tied to he EDK2
>>> build environment.
>>>
>>
>> The point of the BaseLib is to write code in C. So no there is not an
>> assembly example. It is trivial.
>>
>> // typedef
>> // EFI_STATUS
>> // (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
>> // IN EFI_HANDLE ImageHandle, // RCX
>> // IN EFI_SYSTEM_TABLE *SystemTable // RDX
>> // );
>> //
>> // VOID
>> // SetupEfi (
>> // IN EFI_HANDLE ImageHandle,
>> // IN EFI_SYSTEM_TABLE *SystemTable
>> // );
>> //
>>
>> .globl __ModuleEntryPoint:
>> __ModuleEntryPoint:
>> pushq %rbp
>> movq %rsp, %rbp // Not required, but it makes debuggers happy
>> callq _SetupEfi // Call C library constructor for EFI.
>> // Do your thing
>> movabsq $0, %rax // return EFI_SUCCESS
>> popq %rbp
>> ret
>>
>> So in this example you write all things EFI in C, like a sensible
>> person. SetupEfi() can set globals like gBS, gRT, and gST, and you can
>> call C code to do things EFI.
>>
>> Assuming you are generating the correct calling conventions 'clang -S
>> -Os’ is your friend (works with gcc too).
>>
>> You could write the entry point in C and call the assembly too. Don’t
>> know why you would write it all in assembly, especially since doing the
>> pointer math on C structures is not going to be fun.
>>
>> Well I guess you could be using a different calling convention.
>>
>> Thanks,
>>
>> Andrew Fish
>>
>> PS If you are using a different calling convention look
>> at:
>> https://svn.code.sf.net/p/edk2/code/trunk/edk2/EmulatorPkg/Unix/Host/X64/Gasket.S
>>
>> The emulator application uses Unix calling conventions while the EFI
>> modules use EFI ABI:
>> ReverseGasket* == Unix ABI code calling EFI ABI code
>> Gasket* == EFI ABI Code calling Unix ABI code
>>
>>
>>> Thanks,
>>>
>>> Stephen
>>>
>>>
>>>
>>>
>>> --
>>> Stephen Polkowski
>>> Centaur Technology
>>> Austin, TX
>>> (512) 418-5730
>>>
>>> ------------------------------------------------------------------------------
>>> Managing the Performance of Cloud-Based Applications
>>> Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
>>> Read the Whitepaper.
>>> http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
>>>
>>> <http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk>
>>> _______________________________________________
>>> edk2-devel mailing list
>>> edk2-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>>
>>
>> ------------------------------------------------------------------------
>>
>> ------------------------------------------------------------------------------
>> Managing the Performance of Cloud-Based Applications
>> Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
>> Read the Whitepaper.
>> http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> edk2-devel mailing list
>> edk2-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
>
> --
> Stephen Polkowski
> Centaur Technology
> Austin, TX
> (512) 418-5730
>
> ------------------------------------------------------------------------------
> Managing the Performance of Cloud-Based Applications
> Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
> Read the Whitepaper.
> http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel