Merge branch 'master' into elflink
authorMatt Fleming <matt.fleming@intel.com>
Thu, 19 Jul 2012 15:03:19 +0000 (16:03 +0100)
committerMatt Fleming <matt.fleming@intel.com>
Thu, 19 Jul 2012 15:07:01 +0000 (16:07 +0100)
The reason for this merge is that we need the fix to core/fs/cache.c
without which we can potentially dereference an invalid pointer.

The below conflict is a result of the new setup_data blob code being
merged from the master branch.

Conflicts:
com32/lib/Makefile

1  2 
com32/elflink/ldlinux/kernel.c
com32/lib/Makefile
com32/lib/syslinux/load_linux.c
com32/modules/linux.c
core/fs/fat/fat.c

index 62eec75,0000000..b8f9cb8
mode 100644,000000..100644
--- /dev/null
@@@ -1,139 -1,0 +1,139 @@@
-       syslinux_boot_linux(kernel_data, kernel_len, initramfs, cmdline);
 +#include <stdbool.h>
 +#include <stdlib.h>
 +#include <stdio.h>
 +#include <string.h>
 +#include <console.h>
 +#include <dprintf.h>
 +#include <syslinux/loadfile.h>
 +#include <syslinux/linux.h>
 +#include <syslinux/pxe.h>
 +#include "core.h"
 +
 +const char *globaldefault = NULL;
 +const char *append = NULL;
 +
 +/* Will be called from readconfig.c */
 +int new_linux_kernel(char *okernel, char *ocmdline)
 +{
 +      const char *kernel_name = NULL;
 +      struct initramfs *initramfs = NULL;
 +      char *temp;
 +      void *kernel_data;
 +      size_t kernel_len;
 +      bool opt_quiet = false;
 +      char initrd_name[256];
 +      char cmdline_buf[256], *cmdline;
 +
 +      dprintf("okernel = %s, ocmdline = %s", okernel, ocmdline);
 +
 +      cmdline = cmdline_buf;
 +
 +      temp = cmdline;
 +      /*
 +      strcpy(temp, "BOOT_IMAGE=");
 +      temp += 11;
 +      */
 +
 +      if (okernel)
 +              kernel_name = okernel;
 +      else if (globaldefault)
 +              kernel_name = globaldefault;
 +
 +      strcpy(temp, kernel_name);
 +      temp += strlen(kernel_name);
 +
 +      /* in elflink branch, KernelCName no more exist */      
 +      /*
 +      else {
 +              strcpy(temp, KernelCName);
 +              temp += strlen(KernelCName);
 +              kernel_name = KernelCName;
 +      }
 +      */
 +
 +      *temp = ' ';
 +      temp++;
 +      if (ocmdline)
 +              strcpy(temp, ocmdline);
 +      else if (append)
 +              strcpy(temp, append);
 +      /*      
 +      else if (*(char *)CmdOptPtr)
 +              strcpy(temp, (char *)CmdOptPtr);
 +      else if (AppendLen) {
 +              for (i = 0; i < AppendLen; i++)
 +                      *temp++ = AppendBuf[i];
 +              *temp = '\0';
 +      }
 +      */
 +
 +      printf("cmdline = %s\n", cmdline);
 +      /*
 +      printf("VkernelEnd = %x\n", VKernelEnd);
 +      printf("HighMemSize = %x\n", __com32.cs_memsize);
 +      */
 +
 +      /* "keeppxe" handling */
 +#if IS_PXELINUX
 +      extern char KeepPXE;
 +
 +      if (strstr(cmdline, "keeppxe"))
 +              KeepPXE |= 1;
 +#endif
 +
 +      if (strstr(cmdline, "quiet"))
 +              opt_quiet = true;
 +
 +      if (!opt_quiet)
 +              printf("Loading %s... ", kernel_name);
 +
 +      if (loadfile(kernel_name, &kernel_data, &kernel_len)) {
 +              if (opt_quiet)
 +                      printf("Loading %s ", kernel_name);
 +              printf("failed!\n");
 +              goto bail;
 +      }
 +
 +      if (!opt_quiet)
 +              printf("ok\n");
 +
 +      /* Find and load initramfs */
 +      temp = strstr(cmdline, "initrd=");
 +      if (temp) {
 +              /* Initialize the initramfs chain */
 +              initramfs = initramfs_init();
 +              if (!initramfs)
 +                      goto bail;
 +
 +              temp += 6; /* strlen("initrd") */
 +              do {
 +                  char *p = initrd_name;
 +
 +                  temp++;     /* Skip = or , */
 +
 +                  while (*temp != ' ' && *temp != ',' && *temp)
 +                      *p++ = *temp++;
 +                  *p = '\0';
 +
 +                  if (!opt_quiet)
 +                      printf("Loading %s...", initrd_name);
 +
 +                  if (initramfs_load_archive(initramfs, initrd_name)) {
 +                      if (opt_quiet)
 +                          printf("Loading %s ", initrd_name);
 +                      printf("failed!\n");
 +                      goto bail;
 +                  }
 +
 +                  if (!opt_quiet)
 +                      printf("ok\n");
 +              } while (*temp == ',');
 +      }
 +
 +      /* This should not return... */
++      syslinux_boot_linux(kernel_data, kernel_len, initramfs, NULL, cmdline);
 +
 +bail:
 +      printf("Kernel load failure (insufficient memory?)\n");
 +      return 1;
 +}
@@@ -109,68 -67,86 +109,70 @@@ LIBCONSOLE_OBJS = 
        \
        sys/ansi.o                                                      \
        \
 -      sys/libansi.o                                                   \
 -      \
 -      sys/gpxe.o                                                      \
 -      \
 -      sys/ansicon_write.o sys/ansiserial_write.o                      \
 -      \
 -      sys/vesacon_write.o sys/vesaserial_write.o                      \
 -      sys/vesa/initvesa.o sys/vesa/drawtxt.o  sys/vesa/background.o   \
 -      sys/vesa/alphatbl.o sys/vesa/screencpy.o sys/vesa/fmtpixel.o    \
 -      sys/vesa/i915resolution.o                                       \
 -      \
 -      pci/cfgtype.o pci/scan.o pci/bios.o                             \
 -      pci/readb.o pci/readw.o pci/readl.o                             \
 -      pci/writeb.o pci/writew.o pci/writel.o                          \
 -      \
 -      zlib/adler32.o zlib/compress.o zlib/crc32.o                     \
 -      zlib/uncompr.o zlib/deflate.o zlib/trees.o zlib/zutil.o         \
 -      zlib/inflate.o zlib/infback.o zlib/inftrees.o zlib/inffast.o    \
 -      \
 -      libpng/png.o libpng/pngset.o libpng/pngget.o libpng/pngrutil.o  \
 -      libpng/pngtrans.o libpng/pngwutil.o libpng/pngread.o            \
 -      libpng/pngrio.o libpng/pngwio.o libpng/pngwrite.o               \
 -      libpng/pngrtran.o libpng/pngwtran.o libpng/pngmem.o             \
 -      libpng/pngerror.o libpng/pngpread.o                             \
 -      \
 -      jpeg/tinyjpeg.o jpeg/jidctflt.o jpeg/decode1.o jpeg/decode3.o   \
 -      jpeg/grey.o jpeg/yuv420p.o                                      \
 -      jpeg/rgb24.o jpeg/bgr24.o                                       \
 -      jpeg/rgba32.o jpeg/bgra32.o                                     \
 -      \
 -      sys/x86_init_fpu.o math/pow.o math/strtod.o                     \
 +      sys/ansicon_write.o sys/ansiserial_write.o      \
        \
 -      syslinux/idle.o syslinux/reboot.o                               \
 -      syslinux/features.o syslinux/config.o syslinux/serial.o         \
 -      syslinux/ipappend.o syslinux/dsinfo.o syslinux/version.o        \
 -      syslinux/keyboard.o                                             \
 +      syslinux/serial.o
 +
 +LIBOTHER_OBJS = \
 +      atoi.o atol.o atoll.o calloc.o creat.o          \
 +      fgets.o fprintf.o fputc.o       \
 +      putchar.o                               \
 +      getopt.o getopt_long.o                                          \
 +      lrand48.o stack.o memccpy.o memchr.o            \
 +      mempcpy.o memmem.o memmove.o memswap.o  \
 +      perror.o qsort.o seed48.o \
 +      srand48.o sscanf.o strcasecmp.o strcat.o        \
 +      strerror.o              \
 +      strnlen.o                                                       \
 +      strncat.o strndup.o             \
 +      stpncpy.o                                               \
 +      strntoimax.o strntoumax.o strsep.o strspn.o strstr.o    \
 +      strtoimax.o strtok.o strtol.o strtoll.o strtoul.o strtoull.o    \
 +      strtoumax.o vprintf.o vsprintf.o                \
 +      asprintf.o vasprintf.o                  \
 +      vsscanf.o                                                       \
 +      skipspace.o                                                     \
 +      chrreplace.o                                                    \
 +      bufprintf.o                                                     \
 +      inet.o dhcppack.o dhcpunpack.o                                  \
 +      strreplace.o                                                    \
 +      lstrdup.o                                               \
        \
 -      syslinux/memscan.o                                              \
 +      suffix_number.o                                                 \
        \
 -      syslinux/addlist.o syslinux/freelist.o syslinux/memmap.o        \
 -      syslinux/movebits.o syslinux/shuffle.o syslinux/shuffle_pm.o    \
 -      syslinux/shuffle_rm.o syslinux/zonelist.o                       \
 -      syslinux/dump_mmap.o syslinux/dump_movelist.o                   \
 +      getcwd.o fdopendir.o    \
        \
 -      syslinux/run_default.o syslinux/run_command.o                   \
 -      syslinux/cleanup.o syslinux/localboot.o syslinux/runimage.o     \
 +      sys/line_input.o                                \
 +      sys/colortable.o sys/screensize.o                               \
        \
 -      syslinux/loadfile.o syslinux/floadfile.o syslinux/zloadfile.o   \
 +      sys/stdcon_read.o sys/stdcon_write.o sys/rawcon_read.o          \
 +      sys/rawcon_write.o              \
 +      sys/null_read.o sys/null_write.o sys/serial_write.o             \
        \
 -      syslinux/load_linux.o syslinux/initramfs.o                      \
 -      syslinux/initramfs_file.o syslinux/initramfs_loadfile.o         \
 -      syslinux/initramfs_archive.o                                    \
 +      sys/xserial_write.o                                             \
        \
 -      syslinux/pxe_get_cached.o syslinux/pxe_get_nic.o                \
 -      syslinux/pxe_dns.o                                              \
 +      sys/ansi.o                                                      \
        \
 -      syslinux/adv.o syslinux/advwrite.o syslinux/getadv.o            \
 -      syslinux/setadv.o                                               \
 +      sys/ansicon_write.o sys/ansiserial_write.o                      \
        \
 -      syslinux/video/fontquery.o syslinux/video/forcetext.o           \
 -      syslinux/video/reportmode.o                                     \
 +      pci/cfgtype.o pci/scan.o pci/bios.o                                     \
 +      pci/readb.o pci/readw.o pci/readl.o                     \
 +      pci/writeb.o pci/writew.o pci/writel.o  \
        \
-       syslinux/disk.o
 +      sys/x86_init_fpu.o math/pow.o math/strtod.o                     \
+       syslinux/disk.o                                                 \
+       \
+       syslinux/setup_data.o
  
 -# These are the objects which are also imported into the core
 -LIBCOREOBJS =         \
 -      memcpy.o mempcpy.o memset.o memcmp.o memmove.o                  \
 -      strlen.o stpcpy.o strcpy.o strcmp.o strlcpy.o strlcat.o         \
 -      strchr.o strncmp.o strncpy.o                                    \
 -      \
 -      snprintf.o sprintf.o vsnprintf.o                                \
 -      \
 -      dprintf.o vdprintf.o                                            \
 -      \
 -      zalloc.o strdup.o                                               \
 -      \
 -      sys/intcall.o sys/farcall.o sys/cfarcall.o sys/zeroregs.o       \
 -      \
 +CORELIBOBJS = \
 +      memcpy.o memset.o memcmp.o printf.o strncmp.o vfprintf.o        \
 +      strlen.o vsnprintf.o snprintf.o stpcpy.o strcmp.o strdup.o      \
 +      strcpy.o strncpy.o setjmp.o fopen.o fread.o fread2.o puts.o     \
 +      sprintf.o strlcat.o strchr.o strlcpy.o strncasecmp.o ctypes.o   \
 +      fputs.o fwrite2.o fwrite.o fgetc.o fclose.o errno.o lmalloc.o   \
 +      sys/err_read.o sys/err_write.o sys/null_read.o                  \
 +      sys/stdcon_write.o sys/openconsole.o                            \
 +      syslinux/memscan.o strrchr.o                                    \
        libgcc/__ashldi3.o libgcc/__udivdi3.o                           \
        libgcc/__negdi2.o libgcc/__ashrdi3.o libgcc/__lshrdi3.o         \
        libgcc/__muldi3.o libgcc/__udivmoddi4.o libgcc/__umoddi3.o      \
  #include <inttypes.h>
  #include <string.h>
  #include <minmax.h>
+ #include <errno.h>
  #include <suffix_number.h>
 +#include <graphics.h>
 +#include <dprintf.h>
 +
  #include <syslinux/align.h>
  #include <syslinux/linux.h>
  #include <syslinux/bootrm.h>
@@@ -121,8 -142,10 +142,8 @@@ int main(int argc, char *argv[]
      bool opt_quiet = false;
      void *dhcpdata;
      size_t dhcplen;
-     char **argp, *arg, *p;
+     char **argp, **argl, *arg, *p;
  
 -    openconsole(&dev_null_r, &dev_stdcon_w);
 -
      (void)argc;
      argp = argv + 1;
  
Simple merge