Thanks MUCH Jordan! Adding EFIAPI to the function declararion solved the
problem
as in,
UINTN
EFIAPI
fooprint (
IN CONST CHAR16 *Format,
...
)
I inherited a mixture of working EDK production code and some working, and
some not,
EDK2 code. This problem arose in some code ported from EDK to EDK2 that I
inherited
in midstream development. Was a headache to track down since it involved
pointers that
eventually got whacked. The fact the EDK production code works fine added
to the debug
confusion. BTW, I am using GCC 4.7 with the build tools patch for GCC47.
Looks like a
filter script is in order to sniff the source code for more instances of
this issue.
On Tue, Oct 23, 2012 at 11:44 AM, Jordan Justen <[email protected]> wrote:
> On Tue, Oct 23, 2012 at 5:43 AM, duck wilson <[email protected]> wrote:
> > UnicodeVSPrint is not returning the correct (expected) string length. The
> > simple program below demonstrates
> > the problem. The build environment is UDK2010.SR1.UP1. This demo was
> built
> > as a module in MdeModulePkg.
> > When the demo program is run the output is:
> >
> > fooprint:Count: 6
> > Count = 6
> > fooprint:Count: 127
> > Count = 127
> > fooprint:Count: 127
> > Count = 127
> >
> > Any recommendations? I am not seeing any problem with the code so I have
> no
> > idea what is going on.
> > (This has led to a mind-bend debug exercise in live code due to pointer
> > arithmetic not being as intended...pfew!)
>
> Are you using GCC44~GCC46? If so, you might be seeing a mismatch in
> parameter calling conventions. Can you try adding EFIAPI to fooprint?
>
> The VA_* macros assume EFIAPI...
>
> -Jordan
>
> >
> > TIA!
> >
> > -------- Vprint.c --------
> >
> > #include <Uefi.h>
> > #include <Library/UefiLib.h>
> > #include <Library/UefiApplicationEntryPoint.h>
> > #include <Library/PrintLib.h>
> >
> > CHAR16 Buffer[128];
> > CHAR16 String1[] = L"a string";
> > CHAR16 String2[] = L"a longer string";
> > CHAR16 String3[] = L"an even longer string";
> >
> > UINTN
> > fooprint (
> > IN CONST CHAR16 *Format,
> > ...
> > )
> > {
> > UINTN Count;
> > VA_LIST Marker;
> >
> > VA_START (Marker, Format);
> > Count = UnicodeVSPrint (Buffer, sizeof Buffer, Format, Marker);
> > VA_END (Marker);
> > Print (L"fooprint:Count: %d\n", Count);
> > return Count;
> > }
> >
> > EFI_STATUS
> > EFIAPI
> > UefiMain (
> > IN EFI_HANDLE ImageHandle,
> > IN EFI_SYSTEM_TABLE *SystemTable
> > )
> > {
> > UINTN Count;
> >
> > Count = fooprint (L"%s", String1);
> > Print (L"Count = %d\n", Count);
> > Count = fooprint (L"%s", String2);
> > Print (L"Count = %d\n", Count);
> > Count = fooprint (L"%s", String3);
> > Print (L"Count = %d\n", Count);
> >
> > return EFI_SUCCESS;
> > }
> >
> > -------- Vprint.inf --------
> >
> > [Defines]
> > INF_VERSION = 0x00010005
> > BASE_NAME = Vprint
> > FILE_GUID = f9bfca86-a0b5-41f8-ba8a-1f2e9428ec06
> > MODULE_TYPE = UEFI_APPLICATION
> > VERSION_STRING = 1.0
> > ENTRY_POINT = UefiMain
> >
> >
> > [Sources]
> > Vprint.c
> >
> > [Packages]
> > MdePkg/MdePkg.dec
> > MdeModulePkg/MdeModulePkg.dec
> >
> > [LibraryClasses]
> > UefiApplicationEntryPoint
> > UefiLib
> > PrintLib
> >
> >
> >
> ------------------------------------------------------------------------------
> > 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_sfd2d_oct
> > _______________________________________________
> > edk2-devel mailing list
> > [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_sfd2d_oct
> _______________________________________________
> edk2-devel mailing list
> [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_sfd2d_oct
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel