Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Dec 2002 22:22:25 -0800 (PST)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/boot/efi/include efilib.h src/sys/boot/efi/libefi Makefile libefi.c src/sys/boot/efi/loader main.c
Message-ID:  <200212100622.gBA6MPHZ065314@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
marcel      2002/12/09 22:22:25 PST

  Modified files:
    sys/boot/efi/include efilib.h 
    sys/boot/efi/libefi  Makefile libefi.c 
    sys/boot/efi/loader  main.c 
  Log:
  Change the startup code to fix a memory leak and to allow us to
  accept load options (=command line options).
  
  The call graph changes from *entry*->efi_main->efi_init, where
  efi_main is the EFI equivalent of main to *entry*->efi_main->main,
  where main is what you'd expect. efi_main now is what efi_init was.
  The prototype of main follows that of C. The first argument is argc
  and the second is argv. There is no third argument.
  Allocation of heap pages is now handled by the EFI library and it
  now deallocates the pages when main() returns or when exit() is
  called. This allows us to safely return to the boot manager (or
  EFI shell) without leaks. EFI applications are responsible to free
  all memory themselves.
  
  Handling of the load options is a bit tricky. There are either no
  load options, load options in ASCII or load options in Unicode.
  The EFI library will translate the ASCII options to Unicode options
  as to simplify user code. Since the load options are passed as a
  single string (if present) and main() accepts argc and argv, the
  startup code also has to split the string into words and build the
  argv vector. Here the trickiness starts. When the loader is started
  from the EFI shell, argv[0] will automaticly load the program name.
  In all other cases (ie through the boot manager), this is not the
  case. Unfortunately, there's no trivial way to check. Hence, a
  set of conditions is checked to determine if we need to fill in
  argv[0] ourselves or not. This checking is not perfect. There are
  known cases where it fails to do the right thing. The logic works
  for most expected cases, though. This includes the case where no
  options are given.
  
  Approved by: re (blanket)
  
  Revision  Changes    Path
  1.2       +4 -1      src/sys/boot/efi/include/efilib.h
  1.11      +1 -1      src/sys/boot/efi/libefi/Makefile
  1.3       +130 -1    src/sys/boot/efi/libefi/libefi.c
  1.15      +3 -19     src/sys/boot/efi/loader/main.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200212100622.gBA6MPHZ065314>