[PATCH] Add config option to prefer Linux kernel versions by substring match

2014-09-07 Thread Doug Brunner
Hi all,

First time submitting - please let me know if I'm doing anything wrong.

This patch adds an option, GRUB_LINUX_PREF_VERSION_SUBSTR, that can be set to 
prioritize Linux kernels containing a
given substring. This takes precedence over version ordering, so if you have 
3.14.1-generic, 3.14.2-generic,
3.8.13-fnord1, and 3.8.13-fnord2 and the substring is 'fnord', the order is:
3.8.13-fnord2
3.8.13-fnord1
3.14.2-generic
3.14.1-generic

Rationale: I and others, (see e.g. 
http://askubuntu.com/questions/216398/set-older-kernel-as-default-grub-entry) 
needed
to change the Linux kernel version GRUB sets as default. The process is 
error-prone: you have to figure out where in the
GRUB menu it will appear, then enter that in /etc/default/grub, and if the menu 
position changes due to new kernels
added to the system you have to do it all over again. I had older kernels with 
a distinctive local version naming scheme
that I wanted preferred over the stock kernels, but it could also be used to 
specify a particular kernel version.

* util/grub-mkconfig.in: Add export of GRUB_LINUX_PREF_VERSION_SUBSTR
* util/grub.d/10_linux.in: Handle GRUB_LINUX_PREF_VERSION_SUBSTR when adding 
kernels

Signed-off-by: Doug Brunner 
---
 util/grub-mkconfig.in   |  3 ++-
 util/grub.d/10_linux.in | 22 ++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
index d1fae49..9a3a3e9 100644
--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -224,7 +224,8 @@ export GRUB_DEFAULT \
   GRUB_ENABLE_CRYPTODISK \
   GRUB_BADRAM \
   GRUB_OS_PROBER_SKIP_LIST \
-  GRUB_DISABLE_SUBMENU
+  GRUB_DISABLE_SUBMENU \
+  GRUB_LINUX_PREF_VERSION_SUBSTR
 
 if test "x${grub_cfg}" != "x"; then
   rm -f "${grub_cfg}.new"
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index d2e2a8f..0c447f6 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -173,9 +173,25 @@ title_correction_code=
 # yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
 submenu_indentation=""
 
+pref_list=""
+non_pref_list=""
+for entry in $list; do
+  if [[ "$entry" == *$GRUB_LINUX_PREF_VERSION_SUBSTR* ]]; then
+pref_list="$pref_list $entry"
+  else
+non_pref_list="$non_pref_list $entry"
+  fi
+done
+
 is_top_level=true
-while [ "x$list" != "x" ] ; do
-  linux=`version_find_latest $list`
+while [ "x$pref_list$non_pref_list" != "x" ] ; do
+  if [ "x$pref_list" != "x" ]; then
+linux=`version_find_latest $pref_list`
+pref_list=`echo $pref_list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' 
'`
+  else
+linux=`version_find_latest $non_pref_list`
+non_pref_list=`echo $non_pref_list | tr ' ' '\n' | fgrep -vx "$linux" | tr 
'\n' ' '`
+  fi
   gettext_printf "Found linux image: %s\n" "$linux" >&2
   basename=`basename $linux`
   dirname=`dirname $linux`
@@ -240,8 +256,6 @@ while [ "x$list" != "x" ] ; do
 linux_entry "${OS}" "${version}" recovery \
 "single ${GRUB_CMDLINE_LINUX}"
   fi
-
-  list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
 done
 
 # If at least one kernel was found, then we need to


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[PATCH] Add a new "none" platform that only builds utilities

2014-09-07 Thread Colin Watson
This makes it possible to build generally-useful utilities such as
grub-mount even if the rest of GRUB has not been ported to the target
CPU.

* configure.ac: Add "none" platform.  Default to it for unsupported
CPUs rather than stopping with a fatal error.  Don't downgrade
x86_64-none to i386.  Define COND_real_platform Automake conditional
if the platform is anything other than "none".  Don't do any include
directory linking for "none".
* Makefile.am: Skip building grub-core and all bootcheck targets if
!COND_real_platform.
* include/grub/time.h: Don't include  if GRUB_UTIL
is defined.
---
 ChangeLog   | 14 ++
 Makefile.am | 14 +++---
 configure.ac| 46 +-
 include/grub/time.h |  2 +-
 4 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 572ee50..8d86b3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2014-09-08  Colin Watson  
+
+   Add a new "none" platform that only builds utilities
+
+   * configure.ac: Add "none" platform.  Default to it for unsupported
+   CPUs rather than stopping with a fatal error.  Don't downgrade
+   x86_64-none to i386.  Define COND_real_platform Automake conditional
+   if the platform is anything other than "none".  Don't do any include
+   directory linking for "none".
+   * Makefile.am: Skip building grub-core and all bootcheck targets if
+   !COND_real_platform.
+   * include/grub/time.h: Don't include  if GRUB_UTIL
+   is defined.
+
 2014-09-07  Colin Watson  
 
Support grub-emu on x32 (ILP32 but with x86-64 instruction set)
diff --git a/Makefile.am b/Makefile.am
index f02ae0a..cc537a2 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,11 @@
 AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
 
 DEPDIR = .deps-util
-SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d
+SUBDIRS = grub-core/gnulib .
+if COND_real_platform
+SUBDIRS += grub-core
+endif
+SUBDIRS += po docs util/bash-completion.d
 
 include $(top_srcdir)/conf/Makefile.common
 include $(top_srcdir)/conf/Makefile.extra-dist
@@ -132,6 +136,8 @@ nodist_platform_HEADERS = config.h
 pkgdata_DATA += grub-mkconfig_lib
 
 
+if COND_real_platform
+
 if COND_i386_coreboot
 QEMU32=qemu-system-i386
 endif
@@ -383,8 +389,6 @@ if COND_powerpc_ieee1275
 BOOTCHECKS = bootcheck-linux-ppc
 endif
 
-EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S 
grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt 
grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S 
grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg 
grub-core/tests/boot/kfreebsd.init-i386.S 
grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg 
grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt 
grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg 
grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S 
grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S 
grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg 
grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg 
grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
-
 .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
@@ -402,6 +406,10 @@ default_payload.elf: grub-mkstandalone grub-mkimage
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O 
i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms 
part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' 
--install-modules='ls linux search configfile normal cbtime cbls memrw iorw 
minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain 
test serial multiboot cbmemc linux16 gzio echo help' --fonts= --themes= 
--locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
 endif
 
+endif
+
+EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S 
grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt 
grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S 
grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg 
grub-core/tests/boot/kfreebsd.init-i386.S 
grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg 
grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt 
grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg 
grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S 
grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S 
grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg 
grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg 
grub-core/tests/boot/pc-chainloader.cfg grub-core/t

Re: [RFC PATCH 2/3] Files reorganization and include some libgcc fuctions

2014-09-07 Thread Colin Watson
On Thu, Aug 28, 2014 at 04:56:04PM -0300, Paulo Flabiano Smorigo wrote:
> diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
> index c5c815d..353a207 100644
> --- a/grub-core/kern/misc.c
> +++ b/grub-core/kern/misc.c
> @@ -1342,3 +1342,110 @@ grub_real_boot_time (const char *file,
>grub_error_pop ();
>  }
>  #endif
> +
> +#if defined (NO_LIBGCC)

Should this perhaps be restricted to __powerpc__ as well?
Alternatively, the prototypes in include/grub/compiler.h (or
include/grub/misc.h; see below) should be used on other architectures
too.  Either way, the declarations and definitions should match.

> diff --git a/include/grub/compiler.h b/include/grub/compiler.h
> index c9e1d7a..a9a684c 100644
> --- a/include/grub/compiler.h
> +++ b/include/grub/compiler.h
> @@ -48,4 +48,65 @@
>  #  define WARN_UNUSED_RESULT
>  #endif
>  
> +#include "types.h"

Shouldn't this be #include , assuming that you need this
for grub_uint*_t?  Also, includes should generally be grouped at the top
of the file.

> +union component64
> +{
> +  grub_uint64_t full;
> +  struct
> +  {
> +#ifdef GRUB_CPU_WORDS_BIGENDIAN
> +grub_uint32_t high;
> +grub_uint32_t low;
> +#else
> +grub_uint32_t low;
> +grub_uint32_t high;
> +#endif
> +  };
> +};

This is only used by grub-core/kern/misc.c.  Please move it there rather
than putting it somewhere that's included by everything in GRUB.

> +#if defined (__powerpc__)

Should this be #if defined (__powerpc__) && defined (NO_LIBGCC) or
something similar, to match the general way things are set up in
configure.ac?  (Also see comment above about declarations matching
definitions.)

Relatedly, have you tested this patch set with a native build on a
32-bit BE powerpc system, as opposed to 32-bit BE built on a 64-bit LE
system?  This looks like a potential problem there.

> +grub_uint64_t EXPORT_FUNC (__lshrdi3) (grub_uint64_t u, int b);
> +grub_uint64_t EXPORT_FUNC (__ashrdi3) (grub_uint64_t u, int b);
> +grub_uint64_t EXPORT_FUNC (__ashldi3) (grub_uint64_t u, int b);
> +int EXPORT_FUNC(__ucmpdi2) (grub_uint64_t a, grub_uint64_t b);
> +void EXPORT_FUNC (_restgpr_14_x) (void);
[...]

These aren't compiler features, so don't belong in
include/grub/compiler.h.  Other architectures seem to have this kind of
thing in include/grub/misc.h inside a big #ifndef GRUB_UTIL conditional,
so please move all this to there.

> diff --git a/include/grub/libgcc.h b/include/grub/libgcc.h
> index 8e93b67..5bdb8fb 100644
> --- a/include/grub/libgcc.h
> +++ b/include/grub/libgcc.h
> @@ -16,73 +16,6 @@
>   *  along with GRUB.  If not, see .
>   */
>  
> -/* We need to include config-util.h.in for HAVE_*.  */
> -#ifndef __STDC_VERSION__
> -#define __STDC_VERSION__ 0
> -#endif
> -#include 
> -
> -/* On x86 these functions aren't really needed. Save some space.  */
> -#if !defined (__i386__) && !defined (__x86_64__)
> -# ifdef HAVE___ASHLDI3
> -void EXPORT_FUNC (__ashldi3) (void);
> -# endif
> -# ifdef HAVE___ASHRDI3
> -void EXPORT_FUNC (__ashrdi3) (void);
> -# endif
> -# ifdef HAVE___LSHRDI3
> -void EXPORT_FUNC (__lshrdi3) (void);
> -# endif
> -# ifdef HAVE___UCMPDI2
> -void EXPORT_FUNC (__ucmpdi2) (void);
> -# endif
> -# ifdef HAVE___BSWAPSI2
> -void EXPORT_FUNC (__bswapsi2) (void);
> -# endif
> -# ifdef HAVE___BSWAPDI2
> -void EXPORT_FUNC (__bswapdi2) (void);
> -# endif
> -#endif
> -
> -#ifdef HAVE__RESTGPR_14_X
> -void EXPORT_FUNC (_restgpr_14_x) (void);
> -void EXPORT_FUNC (_restgpr_15_x) (void);
> -void EXPORT_FUNC (_restgpr_16_x) (void);
> -void EXPORT_FUNC (_restgpr_17_x) (void);
> -void EXPORT_FUNC (_restgpr_18_x) (void);
> -void EXPORT_FUNC (_restgpr_19_x) (void);
> -void EXPORT_FUNC (_restgpr_20_x) (void);
> -void EXPORT_FUNC (_restgpr_21_x) (void);
> -void EXPORT_FUNC (_restgpr_22_x) (void);
> -void EXPORT_FUNC (_restgpr_23_x) (void);
> -void EXPORT_FUNC (_restgpr_24_x) (void);
> -void EXPORT_FUNC (_restgpr_25_x) (void);
> -void EXPORT_FUNC (_restgpr_26_x) (void);
> -void EXPORT_FUNC (_restgpr_27_x) (void);
> -void EXPORT_FUNC (_restgpr_28_x) (void);
> -void EXPORT_FUNC (_restgpr_29_x) (void);
> -void EXPORT_FUNC (_restgpr_30_x) (void);
> -void EXPORT_FUNC (_restgpr_31_x) (void);
> -void EXPORT_FUNC (_savegpr_14) (void);
> -void EXPORT_FUNC (_savegpr_15) (void);
> -void EXPORT_FUNC (_savegpr_16) (void);
> -void EXPORT_FUNC (_savegpr_17) (void);
> -void EXPORT_FUNC (_savegpr_18) (void);
> -void EXPORT_FUNC (_savegpr_19) (void);
> -void EXPORT_FUNC (_savegpr_20) (void);
> -void EXPORT_FUNC (_savegpr_21) (void);
> -void EXPORT_FUNC (_savegpr_22) (void);
> -void EXPORT_FUNC (_savegpr_23) (void);
> -void EXPORT_FUNC (_savegpr_24) (void);
> -void EXPORT_FUNC (_savegpr_25) (void);
> -void EXPORT_FUNC (_savegpr_26) (void);
> -void EXPORT_FUNC (_savegpr_27) (void);
> -void EXPORT_FUNC (_savegpr_28) (void);
> -void EXPORT_FUNC (_savegpr_29) (void);
> -void EXPORT_FUNC (_savegpr_30) (void);
> -void EXPORT_FUNC (_savegpr_31) (void);
> -#endif
> -
>  #if defined (__arm__)
>