I'll go through the issues in reverse order.

There is an error in gdtoaimp.h in the definition for the union U.  (used by 
the word0 and word1 macros).  The correct version is commented out right after 
the offending definition.  The fix will be checked in as soon as I have 
completed testing.
286 typedef union { double d; ULong L[2]; } U;  // WRONG, comment out
287 //typedef union { double d; UINT32 L[2]; } U;  // GOOD, uncomment this line

_fltused is a VC++ specific variable.  It is supplied by LibC.  wchar_t is 
defined in wchar.h and stdlib.h, as specified by the C standard.  It is 
necessary to use /Zc:wchar_t for Msft builds because otherwise the compiler 
will not allow wchar_t to be defined.

The majority of errors reported in this thread appear to be the result of 
attempting to build without specifying required library files or other build 
components.  Please re-read the StdLib\ReadMe.txt file paying particular 
attention to the USAGE, BUILD CONFIGURATION, and TARGET-SYSTEM INSTALLATION 
sections.

The standard C library passes a third-party standards compliance and 
functionality test.  All samples in AppPkg, including Python 2.7.2, build and 
function.  To be absolutely sure, I checked the HEAD version of EDK II out from 
www.tianocore.org<http://www.tianocore.org> today and built everything using 
GCC 4.5, Visual Studio 2005, Visual Studio 2008, Visual Studio 2010, and the 
Intel Compiler v11.5.  They all compiled without error and produced working 
applications for both IA32 and X64.

While there are some issues with the libraries, they should all be listed in 
the ISSUES.txt file.  The ISSUES files exist in both StdLib and AppPkg and list 
known issues for those two packages.

Daryl McDaniel
SSG/SSD/PTAC/Platform Software Infrastructure
+1 503-712-4670

"In the pun, two strings of thought are tangled into one acoustic knot."
-- Arthur Koestler

From: David F. [mailto:[email protected]]
Sent: Monday, February 04, 2013 2:50 PM
To: [email protected]
Subject: Re: [edk2] Adding printf via StdLib

The problem with the uninitialized at line 382 is actually a correct error.  
There is a problem with two header files.  gdtoaimp.h and gdtoa.h - they should 
be using int32_t and uint32_t for the Long and ULong defines and not EFI_ types 
because under X64 builds the EFI_ types are 64bit numbers which throws off the 
routines which are accessing the two 32 bit values in the 64bit double types 
(word0 and word1 macros for example).

On Sun, Feb 3, 2013 at 1:40 AM, David F. 
<[email protected]<mailto:[email protected]>> wrote:
i was also getting some weird results (vs2008x64) on link with missing external 
_fltused - if I defined it in the app it would complain that it's already 
defined (errno.c), if I /force:multiple it still couldn't find _fltused, so I 
went to dump the .obj file (isnand_ieee754.obj) it kept referring to but 
couldn't because the tool said it couldn't dump whole program optimization, so 
I changed tools to disable whole program optimization and went to rebuild after 
clean, now the build failed because warning that in gdtoa.c eps was being used 
uninitialized at line 382, so I changed tools to not use /WX (treat warning as 
errors to at least get it built) and then it completed.  The point of this is 
of course to make the next stdlib to handle builds without requiring 
/Zc:wchar_t and without whole program optimization.

On Sat, Feb 2, 2013 at 11:43 PM, David F. 
<[email protected]<mailto:[email protected]>> wrote:
Thanks that will be great - and I've noticed the way stdlib is currently 
implemented, it conflicts with trying to build with a .cpp module.  Things like 
/Zc:wchar_t conflicts with other things that specifically need /Zc:wchar_t- 
(#error in EfiCdefs.h) and then attempting to use <wchar.h> causes issues 
because it doesn't define the wchar_t type.

On Fri, Feb 1, 2013 at 5:15 PM, Mcdaniel, Daryl 
<[email protected]<mailto:[email protected]>> wrote:
Currently, StdLib is only for building applications which run under the Shell.  
StdLib also constructs an environment, as specified by ISO/IEC 9899:199409 (the 
C Language Specification), to support the signal(), abort(), exit handlers, and 
environment variables (NOT EFI variables).  Currently, this environment is 
monolithic and, even though dynamically generated, a bit too large for drivers.

A version suitable for writing device drivers as well as OS loaders should be 
available later this year.

Please examine the ReadMe.txt files in StdLib and AppPkg.  Also, the AppPkg.dsc 
file and StdLib.dsc files are intended to be used as examples that can be 
copied to become the basis of new projects.  There are numerous comments 
pertaining to use with StdLib in them.  The applications in AppPkg are examples 
of several types of applications with varying complexity.

Daryl McDaniel

From: David F. [mailto:[email protected]<mailto:[email protected]>]
Sent: Friday, February 01, 2013 4:02 PM
To: [email protected]<mailto:[email protected]>
Subject: Re: [edk2] Adding printf via StdLib

Okay, I found some of the examples in AppPkg and got my hello to work by 
setting the ENTRY_POINT to ShellCEntryLib and the other stuff below.  But then 
looking at what ShellCEntryLib does is use a protocol 
gEfiShellParametersProtocolGuid which is setup by the Shell when it executes 
the application.  So does that mean you can only use StdLib through the Shell 
or is it simply that the sample apps used the shell to take care of command 
line arguments and the rest of StdLib doesn't rely on anything from the shell?

The Other Stuff mentioned above:
[Packages]
  StdLib/StdLib.dec
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec

[LibraryClasses]
  LibC
  LibStdio
  DevShell

On Fri, Feb 1, 2013 at 11:06 AM, Andrew Fish 
<[email protected]<mailto:[email protected]>> wrote:

On Feb 1, 2013, at 10:46 AM, "David F." 
<[email protected]<mailto:[email protected]>> wrote:

Is that an optional thing some packages may include, some type of .inc file?  
Anyway, did that and that leads to:

Yes that .inc is just connivence, and not common.

c:\edk2\testpkg\testpkg.dsc(...): error 4000: Instance of library class 
[HiiLib] is not found
        in [c:\edk2\ShellPkg\Library\UefiShellLib\UefiShellLib.inf] [X64]
        consumed by module [c:\edk2\testpkg\hello\hello.inf]
But I didn't see any .inc file in the EdkCompatibilityPkg folder which is the 
only place I found HiiLib via:

Don't use the EdkCompatiblityPkg it is for backwards compatibility with EDK 
code, not new code.

C:\edk2>dir hiilib /s
 Volume in drive C is Windows 7
 Volume Serial Number is 5233-4330

 Directory of 
C:\edk2\EdkCompatibilityPkg\Foundation\Library\EdkIIGlueLib\Library

01/31/2013  06:37 PM    <DIR>          HiiLib
               0 File(s)              0 bytes


You need to search .INF files for a LIBRARY_CLASS =  HiiLib statement in the 
[Defines] section.
https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf

A library class is a name (HiiLib) that is associated with a public include 
file 
(https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdeModulePkg/Include/Library/HiiLib.h).

There can be a large number of instances of the lib 
(https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf).
 The instance is the implementation of the lib.

The DSC file maps the library class to the library implementation that you want 
to use when you compile your application/driver.

Thanks,

Andrew Fish


On Fri, Feb 1, 2013 at 10:16 AM, Tim Lewis 
<[email protected]<mailto:[email protected]>> wrote:
David -

The easiest way is just to put

!include StdLib\StdLib.inc

At the end of your testpkg.dsc



From: David F. [mailto:[email protected]<mailto:[email protected]>]
Sent: Friday, February 01, 2013 10:11 AM
To: [email protected]<mailto:[email protected]>
Subject: [edk2] Adding printf via StdLib

Hi,
Still learning the build system - I used the driver wizard to create a new 
package and driver, modified to be application, and used the SystemTable to 
print out some text.  That all worked fine, so my next step is to use printf 
instead.  So I added Stdio|StdLib/LibC/Stdio/Stdio.inf to the .dsc file and in 
the .inf file added   StdLib/StdLib.dec under [Packages] and Stdio under 
[LibraryClasses], changed code to use printf(L"text"), then tried to build but 
it stops with

c:\edk2\testpkg\testpkg.dsc(...): error 4000: Instance of library class [LibC] 
is not found
        in [c:\edk2\StdLib\LibC\Stdio\Stdio.inf] [X64]
        consumed by module [c:\edk2\testpkg\hello\hello.inf]
Do I have to somehow figure out all the different library classes and add them 
to the .dsc file, or can't it just find itself??

TIA!!

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
edk2-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan_______________________________________________
edk2-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
edk2-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/edk2-devel


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_jan
_______________________________________________
edk2-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/edk2-devel



------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to