Accepting request 362771 from home:arvidjaar:grub2-next
- new upstream version 2.02~beta3 * highlights of user visible changes not yet present in openSUSE package - arm-uboot now generates position independent self relocating image, so single binary should run on all supported systems - loader for Xen on aarch64. grub-mkconfig support was not in time for beta3 yet. - improved ZFS support (extensible_dataset, large_blocks, embedded_data, hole_birth features) - support for IPv6 Router Advertisements - support for persistent memory (we do not overwrite it and pass correct information to OS) - try to display more specific icons for os-prober generated menu entries - grub-install detects EFI bit size and selects correct platform (x86_64-efi or i386-efi) independent of OS bit size; needs kernel 4.0 or higher. - LVM RAID1 support - xnu loader fixes which should make OS X menu entry generated by os-prober work again - ... and lot of fixes over entire tree OBS-URL: https://build.opensuse.org/request/show/362771 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=205
This commit is contained in:
parent
5cb1d7f770
commit
49eb9d2678
@ -1,372 +0,0 @@
|
||||
From 0787fba15352ef47958e0c9fcc912b8bbcf8ab4e Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
|
||||
Date: Mon, 30 Jun 2014 10:31:59 -0300
|
||||
Subject: [PATCH 1/2] Add bootargs parser for open firmware.
|
||||
|
||||
It enables net boot even when there is no bootp/dhcp server.
|
||||
---
|
||||
ChangeLog | 16 +++++
|
||||
grub-core/kern/ieee1275/init.c | 7 +--
|
||||
grub-core/net/bootp.c | 63 +++++--------------
|
||||
grub-core/net/drivers/ieee1275/ofnet.c | 107 ++++++++++++++++++++++++++++++++-
|
||||
grub-core/net/net.c | 38 ++++++++++++
|
||||
include/grub/ieee1275/ieee1275.h | 3 +-
|
||||
include/grub/net.h | 4 ++
|
||||
7 files changed, 185 insertions(+), 53 deletions(-)
|
||||
|
||||
diff --git a/ChangeLog b/ChangeLog
|
||||
index 41bcebf..a659369 100644
|
||||
--- a/ChangeLog
|
||||
+++ b/ChangeLog
|
||||
@@ -1,3 +1,19 @@
|
||||
+2014-01-24 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||
+
|
||||
+ Add bootargs parser for open firmware.
|
||||
+
|
||||
+ It enables net boot even when there is no bootp/dhcp server.
|
||||
+
|
||||
+ * grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootargs
|
||||
+ and call it at grub_ieee1275_net_config_real.
|
||||
+
|
||||
+2013-12-23 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||
+
|
||||
+ Add grub_env_set_net_property function.
|
||||
+
|
||||
+ * grub-core/net/bootp.c: Remove set_env_limn_ro.
|
||||
+ * grub-core/net/net.c: Add grub_env_set_net_property.
|
||||
+
|
||||
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||
|
||||
* configure.ac: Set version to 2.02~beta2.
|
||||
diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
|
||||
index 89b2822..d5bd74d 100644
|
||||
--- a/grub-core/kern/ieee1275/init.c
|
||||
+++ b/grub-core/kern/ieee1275/init.c
|
||||
@@ -80,9 +80,8 @@ grub_translate_ieee1275_path (char *filepath)
|
||||
}
|
||||
}
|
||||
|
||||
-void (*grub_ieee1275_net_config) (const char *dev,
|
||||
- char **device,
|
||||
- char **path);
|
||||
+void (*grub_ieee1275_net_config) (const char *dev, char **device, char **path,
|
||||
+ char *bootpath);
|
||||
void
|
||||
grub_machine_get_bootlocation (char **device, char **path)
|
||||
{
|
||||
@@ -126,7 +125,7 @@ grub_machine_get_bootlocation (char **device, char **path)
|
||||
*ptr = 0;
|
||||
|
||||
if (grub_ieee1275_net_config)
|
||||
- grub_ieee1275_net_config (canon, device, path);
|
||||
+ grub_ieee1275_net_config (canon, device, path, bootpath);
|
||||
grub_free (dev);
|
||||
grub_free (canon);
|
||||
}
|
||||
diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
|
||||
index c14e9de..6310ed4 100644
|
||||
--- a/grub-core/net/bootp.c
|
||||
+++ b/grub-core/net/bootp.c
|
||||
@@ -25,41 +25,6 @@
|
||||
#include <grub/net/udp.h>
|
||||
#include <grub/datetime.h>
|
||||
|
||||
-static char *
|
||||
-grub_env_write_readonly (struct grub_env_var *var __attribute__ ((unused)),
|
||||
- const char *val __attribute__ ((unused)))
|
||||
-{
|
||||
- return NULL;
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-set_env_limn_ro (const char *intername, const char *suffix,
|
||||
- const char *value, grub_size_t len)
|
||||
-{
|
||||
- char *varname, *varvalue;
|
||||
- char *ptr;
|
||||
- varname = grub_xasprintf ("net_%s_%s", intername, suffix);
|
||||
- if (!varname)
|
||||
- return;
|
||||
- for (ptr = varname; *ptr; ptr++)
|
||||
- if (*ptr == ':')
|
||||
- *ptr = '_';
|
||||
- varvalue = grub_malloc (len + 1);
|
||||
- if (!varvalue)
|
||||
- {
|
||||
- grub_free (varname);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- grub_memcpy (varvalue, value, len);
|
||||
- varvalue[len] = 0;
|
||||
- grub_env_set (varname, varvalue);
|
||||
- grub_register_variable_hook (varname, 0, grub_env_write_readonly);
|
||||
- grub_env_export (varname);
|
||||
- grub_free (varname);
|
||||
- grub_free (varvalue);
|
||||
-}
|
||||
-
|
||||
static void
|
||||
parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask)
|
||||
{
|
||||
@@ -136,20 +101,24 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask)
|
||||
}
|
||||
continue;
|
||||
case GRUB_NET_BOOTP_HOSTNAME:
|
||||
- set_env_limn_ro (name, "hostname", (const char *) ptr, taglength);
|
||||
- break;
|
||||
+ grub_env_set_net_property (name, "hostname", (const char *) ptr,
|
||||
+ taglength);
|
||||
+ break;
|
||||
|
||||
case GRUB_NET_BOOTP_DOMAIN:
|
||||
- set_env_limn_ro (name, "domain", (const char *) ptr, taglength);
|
||||
- break;
|
||||
+ grub_env_set_net_property (name, "domain", (const char *) ptr,
|
||||
+ taglength);
|
||||
+ break;
|
||||
|
||||
case GRUB_NET_BOOTP_ROOT_PATH:
|
||||
- set_env_limn_ro (name, "rootpath", (const char *) ptr, taglength);
|
||||
- break;
|
||||
+ grub_env_set_net_property (name, "rootpath", (const char *) ptr,
|
||||
+ taglength);
|
||||
+ break;
|
||||
|
||||
case GRUB_NET_BOOTP_EXTENSIONS_PATH:
|
||||
- set_env_limn_ro (name, "extensionspath", (const char *) ptr, taglength);
|
||||
- break;
|
||||
+ grub_env_set_net_property (name, "extensionspath", (const char *) ptr,
|
||||
+ taglength);
|
||||
+ break;
|
||||
|
||||
/* If you need any other options please contact GRUB
|
||||
development team. */
|
||||
@@ -211,8 +180,8 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
||||
}
|
||||
|
||||
if (size > OFFSET_OF (boot_file, bp))
|
||||
- set_env_limn_ro (name, "boot_file", (char *) bp->boot_file,
|
||||
- sizeof (bp->boot_file));
|
||||
+ grub_env_set_net_property (name, "boot_file", bp->boot_file,
|
||||
+ sizeof (bp->boot_file));
|
||||
if (is_def)
|
||||
grub_net_default_server = 0;
|
||||
if (is_def && !grub_net_default_server && bp->server_ip)
|
||||
@@ -243,8 +212,8 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
||||
if (size > OFFSET_OF (server_name, bp)
|
||||
&& bp->server_name[0])
|
||||
{
|
||||
- set_env_limn_ro (name, "dhcp_server_name", (char *) bp->server_name,
|
||||
- sizeof (bp->server_name));
|
||||
+ grub_env_set_net_property (name, "dhcp_server_name", bp->server_name,
|
||||
+ sizeof (bp->server_name));
|
||||
if (is_def && !grub_net_default_server)
|
||||
{
|
||||
grub_net_default_server = grub_strdup (bp->server_name);
|
||||
diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
index ceb5931..a079065 100644
|
||||
--- a/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
+++ b/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
@@ -127,8 +127,111 @@ bootp_response_properties[] =
|
||||
{ .name = "bootpreply-packet", .offset = 0x2a},
|
||||
};
|
||||
|
||||
+enum
|
||||
+{
|
||||
+ BOOTARGS_SERVER_ADDR,
|
||||
+ BOOTARGS_FILENAME,
|
||||
+ BOOTARGS_CLIENT_ADDR,
|
||||
+ BOOTARGS_GATEWAY_ADDR,
|
||||
+ BOOTARGS_BOOTP_RETRIES,
|
||||
+ BOOTARGS_TFTP_RETRIES,
|
||||
+ BOOTARGS_SUBNET_MASK,
|
||||
+ BOOTARGS_BLOCKSIZE
|
||||
+};
|
||||
+
|
||||
+static int
|
||||
+grub_ieee1275_parse_bootargs (const char *devpath, char *bootpath,
|
||||
+ char **device, struct grub_net_card **card)
|
||||
+{
|
||||
+ char *args;
|
||||
+ char *comma_char = 0;
|
||||
+ char *equal_char = 0;
|
||||
+ grub_size_t field_counter = 0;
|
||||
+
|
||||
+ grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask;
|
||||
+ grub_net_link_level_address_t hw_addr;
|
||||
+ grub_net_interface_flags_t flags = 0;
|
||||
+ struct grub_net_network_level_interface *inter;
|
||||
+
|
||||
+ hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
||||
+
|
||||
+ args = bootpath + grub_strlen (devpath) + 1;
|
||||
+ do
|
||||
+ {
|
||||
+ comma_char = grub_strchr (args, ',');
|
||||
+ if (comma_char != 0)
|
||||
+ *comma_char = 0;
|
||||
+
|
||||
+ /* Check if it's an option (like speed=auto) and not a default parameter */
|
||||
+ equal_char = grub_strchr (args, '=');
|
||||
+ if (equal_char != 0)
|
||||
+ {
|
||||
+ *equal_char = 0;
|
||||
+ grub_env_set_net_property ((*card)->name, args, equal_char + 1,
|
||||
+ grub_strlen(equal_char + 1));
|
||||
+ *equal_char = '=';
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ switch (field_counter++)
|
||||
+ {
|
||||
+ case BOOTARGS_SERVER_ADDR:
|
||||
+ *device = grub_xasprintf ("tftp,%s", args);
|
||||
+ if (!*device)
|
||||
+ return grub_errno;
|
||||
+ break;
|
||||
+
|
||||
+ case BOOTARGS_CLIENT_ADDR:
|
||||
+ grub_net_resolve_address (args, &client_addr);
|
||||
+ break;
|
||||
+
|
||||
+ case BOOTARGS_GATEWAY_ADDR:
|
||||
+ grub_net_resolve_address (args, &gateway_addr);
|
||||
+ break;
|
||||
+
|
||||
+ case BOOTARGS_SUBNET_MASK:
|
||||
+ grub_net_resolve_address (args, &subnet_mask);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ args = comma_char + 1;
|
||||
+ if (comma_char != 0)
|
||||
+ *comma_char = ',';
|
||||
+ } while (comma_char != 0);
|
||||
+
|
||||
+ if ((client_addr.ipv4 != 0) && (subnet_mask.ipv4 != 0))
|
||||
+ {
|
||||
+ grub_ieee1275_phandle_t devhandle;
|
||||
+ grub_ieee1275_finddevice (devpath, &devhandle);
|
||||
+ grub_ieee1275_get_property (devhandle, "mac-address",
|
||||
+ hw_addr.mac, sizeof(hw_addr.mac), 0);
|
||||
+ inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr,
|
||||
+ flags);
|
||||
+ grub_net_add_ipv4_local (inter,
|
||||
+ __builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4)));
|
||||
+ }
|
||||
+
|
||||
+ if (gateway_addr.ipv4 != 0)
|
||||
+ {
|
||||
+ grub_net_network_level_netaddress_t target;
|
||||
+ char *rname;
|
||||
+
|
||||
+ target.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4;
|
||||
+ target.ipv4.base = 0;
|
||||
+ target.ipv4.masksize = 0;
|
||||
+ rname = grub_xasprintf ("%s:default", ((*card)->name));
|
||||
+ if (rname)
|
||||
+ grub_net_add_route_gw (rname, target, gateway_addr);
|
||||
+ else
|
||||
+ return grub_errno;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
-grub_ieee1275_net_config_real (const char *devpath, char **device, char **path)
|
||||
+grub_ieee1275_net_config_real (const char *devpath, char **device, char **path,
|
||||
+ char *bootpath)
|
||||
{
|
||||
struct grub_net_card *card;
|
||||
|
||||
@@ -158,6 +261,8 @@ grub_ieee1275_net_config_real (const char *devpath, char **device, char **path)
|
||||
}
|
||||
grub_free (canon);
|
||||
|
||||
+ grub_ieee1275_parse_bootargs (devpath, bootpath, device, &card);
|
||||
+
|
||||
for (i = 0; i < ARRAY_SIZE (bootp_response_properties); i++)
|
||||
if (grub_ieee1275_get_property_length (grub_ieee1275_chosen,
|
||||
bootp_response_properties[i].name,
|
||||
diff --git a/grub-core/net/net.c b/grub-core/net/net.c
|
||||
index 0e57e93..8f9d183 100644
|
||||
--- a/grub-core/net/net.c
|
||||
+++ b/grub-core/net/net.c
|
||||
@@ -1480,6 +1480,44 @@ receive_packets (struct grub_net_card *card, int *stop_condition)
|
||||
grub_print_error ();
|
||||
}
|
||||
|
||||
+static char *
|
||||
+grub_env_write_readonly (struct grub_env_var *var __attribute__ ((unused)),
|
||||
+ const char *val __attribute__ ((unused)))
|
||||
+{
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+grub_err_t
|
||||
+grub_env_set_net_property (const char *intername, const char *suffix,
|
||||
+ const char *value, grub_size_t len)
|
||||
+{
|
||||
+ char *varname, *varvalue;
|
||||
+ char *ptr;
|
||||
+
|
||||
+ varname = grub_xasprintf ("net_%s_%s", intername, suffix);
|
||||
+ if (!varname)
|
||||
+ return grub_errno;
|
||||
+ for (ptr = varname; *ptr; ptr++)
|
||||
+ if (*ptr == ':')
|
||||
+ *ptr = '_';
|
||||
+ varvalue = grub_malloc (len + 1);
|
||||
+ if (!varvalue)
|
||||
+ {
|
||||
+ grub_free (varname);
|
||||
+ return grub_errno;
|
||||
+ }
|
||||
+
|
||||
+ grub_memcpy (varvalue, value, len);
|
||||
+ varvalue[len] = 0;
|
||||
+ grub_err_t ret = grub_env_set (varname, varvalue);
|
||||
+ grub_register_variable_hook (varname, 0, grub_env_write_readonly);
|
||||
+ grub_env_export (varname);
|
||||
+ grub_free (varname);
|
||||
+ grub_free (varvalue);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
void
|
||||
grub_net_poll_cards (unsigned time, int *stop_condition)
|
||||
{
|
||||
diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h
|
||||
index 7fefd16..f8b3d79 100644
|
||||
--- a/include/grub/ieee1275/ieee1275.h
|
||||
+++ b/include/grub/ieee1275/ieee1275.h
|
||||
@@ -73,7 +73,8 @@ struct grub_ieee1275_devalias
|
||||
|
||||
extern void (*EXPORT_VAR(grub_ieee1275_net_config)) (const char *dev,
|
||||
char **device,
|
||||
- char **path);
|
||||
+ char **path,
|
||||
+ char *bootargs);
|
||||
|
||||
/* Maps a device alias to a pathname. */
|
||||
extern grub_ieee1275_phandle_t EXPORT_VAR(grub_ieee1275_chosen);
|
||||
diff --git a/include/grub/net.h b/include/grub/net.h
|
||||
index de6259e..843f74f 100644
|
||||
--- a/include/grub/net.h
|
||||
+++ b/include/grub/net.h
|
||||
@@ -480,6 +480,10 @@ grub_net_addr_to_str (const grub_net_network_level_address_t *target,
|
||||
void
|
||||
grub_net_hwaddr_to_str (const grub_net_link_level_address_t *addr, char *str);
|
||||
|
||||
+grub_err_t
|
||||
+grub_env_set_net_property (const char *intername, const char *suffix,
|
||||
+ const char *value, grub_size_t len);
|
||||
+
|
||||
void
|
||||
grub_net_poll_cards (unsigned time, int *stop_condition);
|
||||
|
||||
--
|
||||
1.9.3
|
@ -1,54 +0,0 @@
|
||||
From 451d80e52d851432e109771bb8febafca7a5f1f2 Mon Sep 17 00:00:00 2001
|
||||
From: Hector Marco-Gisbert <hecmargi@upv.es>
|
||||
Date: Wed, 16 Dec 2015 07:57:18 +0300
|
||||
Subject: [PATCH] Fix security issue when reading username and password
|
||||
|
||||
This patch fixes two integer underflows at:
|
||||
* grub-core/lib/crypto.c
|
||||
* grub-core/normal/auth.c
|
||||
|
||||
CVE-2015-8370
|
||||
|
||||
Signed-off-by: Hector Marco-Gisbert <hecmargi@upv.es>
|
||||
Signed-off-by: Ismael Ripoll-Ripoll <iripoll@disca.upv.es>
|
||||
Also-By: Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
---
|
||||
grub-core/lib/crypto.c | 3 ++-
|
||||
grub-core/normal/auth.c | 7 +++++--
|
||||
2 files changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c
|
||||
index 010e550..683a8aa 100644
|
||||
--- a/grub-core/lib/crypto.c
|
||||
+++ b/grub-core/lib/crypto.c
|
||||
@@ -470,7 +470,8 @@ grub_password_get (char buf[], unsigned buf_size)
|
||||
|
||||
if (key == '\b')
|
||||
{
|
||||
- cur_len--;
|
||||
+ if (cur_len)
|
||||
+ cur_len--;
|
||||
continue;
|
||||
}
|
||||
|
||||
diff --git a/grub-core/normal/auth.c b/grub-core/normal/auth.c
|
||||
index c6bd96e..8615c48 100644
|
||||
--- a/grub-core/normal/auth.c
|
||||
+++ b/grub-core/normal/auth.c
|
||||
@@ -174,8 +174,11 @@ grub_username_get (char buf[], unsigned buf_size)
|
||||
|
||||
if (key == '\b')
|
||||
{
|
||||
- cur_len--;
|
||||
- grub_printf ("\b");
|
||||
+ if (cur_len)
|
||||
+ {
|
||||
+ cur_len--;
|
||||
+ grub_printf ("\b");
|
||||
+ }
|
||||
continue;
|
||||
}
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,207 +0,0 @@
|
||||
From 7b386b703154c0901c4616badf18ddb260954bc1 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Thu, 7 May 2015 20:37:16 +0300
|
||||
Subject: [PATCH 1/3] efidisk: move device path helpers in core for efinet
|
||||
|
||||
---
|
||||
grub-core/disk/efi/efidisk.c | 61 ++++++++------------------------------------
|
||||
grub-core/kern/efi/efi.c | 41 +++++++++++++++++++++++++++++
|
||||
include/grub/efi/efi.h | 4 +++
|
||||
3 files changed, 55 insertions(+), 51 deletions(-)
|
||||
|
||||
diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c
|
||||
index 60a6d3c..a8783a3 100644
|
||||
--- a/grub-core/disk/efi/efidisk.c
|
||||
+++ b/grub-core/disk/efi/efidisk.c
|
||||
@@ -43,47 +43,6 @@ static struct grub_efidisk_data *fd_devices;
|
||||
static struct grub_efidisk_data *hd_devices;
|
||||
static struct grub_efidisk_data *cd_devices;
|
||||
|
||||
-/* Duplicate a device path. */
|
||||
-static grub_efi_device_path_t *
|
||||
-duplicate_device_path (const grub_efi_device_path_t *dp)
|
||||
-{
|
||||
- grub_efi_device_path_t *p;
|
||||
- grub_size_t total_size = 0;
|
||||
-
|
||||
- for (p = (grub_efi_device_path_t *) dp;
|
||||
- ;
|
||||
- p = GRUB_EFI_NEXT_DEVICE_PATH (p))
|
||||
- {
|
||||
- total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p);
|
||||
- if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p))
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- p = grub_malloc (total_size);
|
||||
- if (! p)
|
||||
- return 0;
|
||||
-
|
||||
- grub_memcpy (p, dp, total_size);
|
||||
- return p;
|
||||
-}
|
||||
-
|
||||
-/* Return the device path node right before the end node. */
|
||||
-static grub_efi_device_path_t *
|
||||
-find_last_device_path (const grub_efi_device_path_t *dp)
|
||||
-{
|
||||
- grub_efi_device_path_t *next, *p;
|
||||
-
|
||||
- if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
|
||||
- return 0;
|
||||
-
|
||||
- for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p);
|
||||
- ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next);
|
||||
- p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next))
|
||||
- ;
|
||||
-
|
||||
- return p;
|
||||
-}
|
||||
-
|
||||
static struct grub_efidisk_data *
|
||||
make_devices (void)
|
||||
{
|
||||
@@ -110,7 +69,7 @@ make_devices (void)
|
||||
if (! dp)
|
||||
continue;
|
||||
|
||||
- ldp = find_last_device_path (dp);
|
||||
+ ldp = grub_efi_find_last_device_path (dp);
|
||||
if (! ldp)
|
||||
/* This is empty. Why? */
|
||||
continue;
|
||||
@@ -150,11 +109,11 @@ find_parent_device (struct grub_efidisk_data *devices,
|
||||
grub_efi_device_path_t *dp, *ldp;
|
||||
struct grub_efidisk_data *parent;
|
||||
|
||||
- dp = duplicate_device_path (d->device_path);
|
||||
+ dp = grub_efi_duplicate_device_path (d->device_path);
|
||||
if (! dp)
|
||||
return 0;
|
||||
|
||||
- ldp = find_last_device_path (dp);
|
||||
+ ldp = grub_efi_find_last_device_path (dp);
|
||||
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||
ldp->length = sizeof (*ldp);
|
||||
@@ -180,11 +139,11 @@ is_child (struct grub_efidisk_data *child,
|
||||
grub_efi_device_path_t *dp, *ldp;
|
||||
int ret;
|
||||
|
||||
- dp = duplicate_device_path (child->device_path);
|
||||
+ dp = grub_efi_duplicate_device_path (child->device_path);
|
||||
if (! dp)
|
||||
return 0;
|
||||
|
||||
- ldp = find_last_device_path (dp);
|
||||
+ ldp = grub_efi_find_last_device_path (dp);
|
||||
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||
ldp->length = sizeof (*ldp);
|
||||
@@ -207,8 +166,8 @@ add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d)
|
||||
{
|
||||
int ret;
|
||||
|
||||
- ret = grub_efi_compare_device_paths (find_last_device_path ((*p)->device_path),
|
||||
- find_last_device_path (d->device_path));
|
||||
+ ret = grub_efi_compare_device_paths (grub_efi_find_last_device_path ((*p)->device_path),
|
||||
+ grub_efi_find_last_device_path (d->device_path));
|
||||
if (ret == 0)
|
||||
ret = grub_efi_compare_device_paths ((*p)->device_path,
|
||||
d->device_path);
|
||||
@@ -795,7 +754,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
||||
if (! dp)
|
||||
return 0;
|
||||
|
||||
- ldp = find_last_device_path (dp);
|
||||
+ ldp = grub_efi_find_last_device_path (dp);
|
||||
if (! ldp)
|
||||
return 0;
|
||||
|
||||
@@ -810,14 +769,14 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
||||
|
||||
/* It is necessary to duplicate the device path so that GRUB
|
||||
can overwrite it. */
|
||||
- dup_dp = duplicate_device_path (dp);
|
||||
+ dup_dp = grub_efi_duplicate_device_path (dp);
|
||||
if (! dup_dp)
|
||||
return 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
grub_efi_device_path_t *dup_ldp;
|
||||
- dup_ldp = find_last_device_path (dup_dp);
|
||||
+ dup_ldp = grub_efi_find_last_device_path (dup_dp);
|
||||
if (!(GRUB_EFI_DEVICE_PATH_TYPE (dup_ldp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE
|
||||
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
||||
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)))
|
||||
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
|
||||
index b9eb1ab..49a1501 100644
|
||||
--- a/grub-core/kern/efi/efi.c
|
||||
+++ b/grub-core/kern/efi/efi.c
|
||||
@@ -394,6 +394,47 @@ grub_efi_get_device_path (grub_efi_handle_t handle)
|
||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
||||
}
|
||||
|
||||
+/* Return the device path node right before the end node. */
|
||||
+grub_efi_device_path_t *
|
||||
+grub_efi_find_last_device_path (const grub_efi_device_path_t *dp)
|
||||
+{
|
||||
+ grub_efi_device_path_t *next, *p;
|
||||
+
|
||||
+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
|
||||
+ return 0;
|
||||
+
|
||||
+ for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p);
|
||||
+ ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next);
|
||||
+ p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next))
|
||||
+ ;
|
||||
+
|
||||
+ return p;
|
||||
+}
|
||||
+
|
||||
+/* Duplicate a device path. */
|
||||
+grub_efi_device_path_t *
|
||||
+grub_efi_duplicate_device_path (const grub_efi_device_path_t *dp)
|
||||
+{
|
||||
+ grub_efi_device_path_t *p;
|
||||
+ grub_size_t total_size = 0;
|
||||
+
|
||||
+ for (p = (grub_efi_device_path_t *) dp;
|
||||
+ ;
|
||||
+ p = GRUB_EFI_NEXT_DEVICE_PATH (p))
|
||||
+ {
|
||||
+ total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p);
|
||||
+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ p = grub_malloc (total_size);
|
||||
+ if (! p)
|
||||
+ return 0;
|
||||
+
|
||||
+ grub_memcpy (p, dp, total_size);
|
||||
+ return p;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
dump_vendor_path (const char *type, grub_efi_vendor_device_path_t *vendor)
|
||||
{
|
||||
diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h
|
||||
index 489cf9e..0e6fd86 100644
|
||||
--- a/include/grub/efi/efi.h
|
||||
+++ b/include/grub/efi/efi.h
|
||||
@@ -53,6 +53,10 @@ void EXPORT_FUNC(grub_efi_print_device_path) (grub_efi_device_path_t *dp);
|
||||
char *EXPORT_FUNC(grub_efi_get_filename) (grub_efi_device_path_t *dp);
|
||||
grub_efi_device_path_t *
|
||||
EXPORT_FUNC(grub_efi_get_device_path) (grub_efi_handle_t handle);
|
||||
+grub_efi_device_path_t *
|
||||
+EXPORT_FUNC(grub_efi_find_last_device_path) (const grub_efi_device_path_t *dp);
|
||||
+grub_efi_device_path_t *
|
||||
+EXPORT_FUNC(grub_efi_duplicate_device_path) (const grub_efi_device_path_t *dp);
|
||||
grub_err_t EXPORT_FUNC (grub_efi_finish_boot_services) (grub_efi_uintn_t *outbuf_size, void *outbuf,
|
||||
grub_efi_uintn_t *map_key,
|
||||
grub_efi_uintn_t *efi_desc_size,
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,51 +0,0 @@
|
||||
From cf2b4a36c408084852c44dea045331f039b895d2 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Wilck <martin.wilck@ts.fujitsu.com>
|
||||
Date: Fri, 27 Mar 2015 14:27:56 +0100
|
||||
Subject: [PATCH] efinet: Check for immediate completition.
|
||||
|
||||
This both speeds GRUB up and workarounds unexpected EFI behaviour.
|
||||
---
|
||||
grub-core/net/drivers/efi/efinet.c | 16 ++++++++++++++--
|
||||
1 file changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||
index 2b344d6..f171f20 100644
|
||||
--- a/grub-core/net/drivers/efi/efinet.c
|
||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||
@@ -37,11 +37,12 @@ send_card_buffer (struct grub_net_card *dev,
|
||||
grub_efi_status_t st;
|
||||
grub_efi_simple_network_t *net = dev->efi_net;
|
||||
grub_uint64_t limit_time = grub_get_time_ms () + 4000;
|
||||
+ void *txbuf;
|
||||
|
||||
if (dev->txbusy)
|
||||
while (1)
|
||||
{
|
||||
- void *txbuf = NULL;
|
||||
+ txbuf = NULL;
|
||||
st = efi_call_3 (net->get_status, net, 0, &txbuf);
|
||||
if (st != GRUB_EFI_SUCCESS)
|
||||
return grub_error (GRUB_ERR_IO,
|
||||
@@ -74,7 +75,18 @@ send_card_buffer (struct grub_net_card *dev,
|
||||
dev->txbuf, NULL, NULL, NULL);
|
||||
if (st != GRUB_EFI_SUCCESS)
|
||||
return grub_error (GRUB_ERR_IO, N_("couldn't send network packet"));
|
||||
- dev->txbusy = 1;
|
||||
+
|
||||
+ /*
|
||||
+ The card may have sent out the packet immediately - set txbusy
|
||||
+ to 0 in this case.
|
||||
+ Cases were observed where checking txbuf at the next call
|
||||
+ of send_card_buffer() is too late: 0 is returned in txbuf and
|
||||
+ we run in the GRUB_ERR_TIMEOUT case above.
|
||||
+ Perhaps a timeout in the FW has discarded the recycle buffer.
|
||||
+ */
|
||||
+ st = efi_call_3 (net->get_status, net, 0, &txbuf);
|
||||
+ dev->txbusy = !(st == GRUB_EFI_SUCCESS && txbuf == dev->txbuf);
|
||||
+
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1,107 +0,0 @@
|
||||
From f348aee7b33dd85e7da62b497a96a7319a0bf9dd Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Tue, 16 Jun 2015 19:52:45 +0300
|
||||
Subject: [PATCH] efinet: enable hardware filters when opening interface
|
||||
|
||||
Exclusive open on SNP will close all existing protocol instances which
|
||||
may disable all receive filters on interface. Reinstall them after we
|
||||
opened protocol exclusively.
|
||||
|
||||
Also follow UEFI specification recommendation and stop interfaces when
|
||||
closing them:
|
||||
|
||||
Unexpected system errors, reboots and hangs can occur if an OS is loaded
|
||||
and the network devices are not Shutdown() and Stopped().
|
||||
|
||||
Also by: Mark Salter <msalter@redhat.com>
|
||||
Closes: 45204
|
||||
---
|
||||
grub-core/net/drivers/efi/efinet.c | 25 +++++++++++++++++++++++++
|
||||
include/grub/efi/api.h | 20 +++++++++++++++++---
|
||||
2 files changed, 42 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||
index 5533515..70b26af 100644
|
||||
--- a/grub-core/net/drivers/efi/efinet.c
|
||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||
@@ -168,6 +168,29 @@ open_card (struct grub_net_card *dev)
|
||||
return grub_error (GRUB_ERR_NET_NO_CARD, "%s: net initialize failed",
|
||||
dev->name);
|
||||
|
||||
+ /* Enable hardware receive filters if driver declares support for it.
|
||||
+ We need unicast and broadcast and additionaly all nodes and
|
||||
+ solicited multicast for IPv6. Solicited multicast is per-IPv6
|
||||
+ address and we currently do not have API to do it so simply
|
||||
+ try to enable receive of all multicast packets or evertyhing in
|
||||
+ the worst case (i386 PXE driver always enables promiscuous too).
|
||||
+
|
||||
+ This does trust firmware to do what it claims to do.
|
||||
+ */
|
||||
+ if (net->mode->receive_filter_mask)
|
||||
+ {
|
||||
+ grub_uint32_t filters = GRUB_EFI_SIMPLE_NETWORK_RECEIVE_UNICAST |
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST |
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;
|
||||
+
|
||||
+ filters &= net->mode->receive_filter_mask;
|
||||
+ if (!(filters & GRUB_EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST))
|
||||
+ filters |= (net->mode->receive_filter_mask &
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS);
|
||||
+
|
||||
+ efi_call_6 (net->receive_filters, net, filters, 0, 0, 0, NULL);
|
||||
+ }
|
||||
+
|
||||
efi_call_4 (grub_efi_system_table->boot_services->close_protocol,
|
||||
dev->efi_net, &net_io_guid,
|
||||
grub_efi_image_handle, dev->efi_handle);
|
||||
@@ -181,6 +204,8 @@ open_card (struct grub_net_card *dev)
|
||||
static void
|
||||
close_card (struct grub_net_card *dev)
|
||||
{
|
||||
+ efi_call_1 (dev->efi_net->shutdown, dev->efi_net);
|
||||
+ efi_call_1 (dev->efi_net->stop, dev->efi_net);
|
||||
efi_call_4 (grub_efi_system_table->boot_services->close_protocol,
|
||||
dev->efi_net, &net_io_guid,
|
||||
grub_efi_image_handle, dev->efi_handle);
|
||||
diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
|
||||
index e5dd543..1a5e38c 100644
|
||||
--- a/include/grub/efi/api.h
|
||||
+++ b/include/grub/efi/api.h
|
||||
@@ -1501,17 +1501,31 @@ enum
|
||||
GRUB_EFI_NETWORK_INITIALIZED,
|
||||
};
|
||||
|
||||
+enum
|
||||
+ {
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_UNICAST = 0x01,
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST = 0x02,
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST = 0x04,
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS = 0x08,
|
||||
+ GRUB_EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST = 0x10,
|
||||
+ };
|
||||
+
|
||||
struct grub_efi_simple_network
|
||||
{
|
||||
grub_uint64_t revision;
|
||||
grub_efi_status_t (*start) (struct grub_efi_simple_network *this);
|
||||
- void (*stop) (void);
|
||||
+ grub_efi_status_t (*stop) (struct grub_efi_simple_network *this);
|
||||
grub_efi_status_t (*initialize) (struct grub_efi_simple_network *this,
|
||||
grub_efi_uintn_t extra_rx,
|
||||
grub_efi_uintn_t extra_tx);
|
||||
void (*reset) (void);
|
||||
- void (*shutdown) (void);
|
||||
- void (*receive_filters) (void);
|
||||
+ grub_efi_status_t (*shutdown) (struct grub_efi_simple_network *this);
|
||||
+ grub_efi_status_t (*receive_filters) (struct grub_efi_simple_network *this,
|
||||
+ grub_uint32_t enable,
|
||||
+ grub_uint32_t disable,
|
||||
+ grub_efi_boolean_t reset_mcast_filter,
|
||||
+ grub_efi_uintn_t mcast_filter_count,
|
||||
+ grub_efi_mac_address_t *mcast_filter);
|
||||
void (*station_address) (void);
|
||||
void (*statistics) (void);
|
||||
void (*mcastiptomac) (void);
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1,75 +0,0 @@
|
||||
From 7e7293d745ef7c0a13d8cbf12f474843edfdd0ab Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Serbinenko <phcoder@gmail.com>
|
||||
Date: Sat, 18 Jan 2014 16:41:47 +0100
|
||||
Subject: [PATCH] * grub-core/kern/efi/efi.c: Ensure that the result
|
||||
starts with / and has no //.
|
||||
|
||||
---
|
||||
ChangeLog | 5 +++++
|
||||
grub-core/kern/efi/efi.c | 25 +++++++++++++++++--------
|
||||
2 files changed, 22 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
|
||||
index b253141..b9eb1ab 100644
|
||||
--- a/grub-core/kern/efi/efi.c
|
||||
+++ b/grub-core/kern/efi/efi.c
|
||||
@@ -309,7 +309,7 @@ grub_efi_modules_addr (void)
|
||||
char *
|
||||
grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
||||
{
|
||||
- char *name = 0, *p;
|
||||
+ char *name = 0, *p, *pi;
|
||||
grub_size_t filesize = 0;
|
||||
grub_efi_device_path_t *dp;
|
||||
|
||||
@@ -328,7 +328,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
||||
grub_efi_uint16_t len;
|
||||
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
||||
/ sizeof (grub_efi_char16_t));
|
||||
- filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 1;
|
||||
+ filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 2;
|
||||
}
|
||||
|
||||
dp = GRUB_EFI_NEXT_DEVICE_PATH (dp);
|
||||
@@ -356,12 +356,12 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
||||
grub_efi_file_path_device_path_t *fp;
|
||||
grub_efi_uint16_t len;
|
||||
|
||||
- if (p != name)
|
||||
- *p++ = '/';
|
||||
+ *p++ = '/';
|
||||
|
||||
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
||||
/ sizeof (grub_efi_char16_t));
|
||||
fp = (grub_efi_file_path_device_path_t *) dp;
|
||||
+
|
||||
p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
|
||||
}
|
||||
|
||||
@@ -370,10 +370,19 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
||||
|
||||
*p = '\0';
|
||||
|
||||
- /* EFI breaks paths with backslashes. */
|
||||
- for (p = name; *p; p++)
|
||||
- if (*p == '\\')
|
||||
- *p = '/';
|
||||
+ for (pi = name, p = name; *pi;)
|
||||
+ {
|
||||
+ /* EFI breaks paths with backslashes. */
|
||||
+ if (*pi == '\\' || *pi == '/')
|
||||
+ {
|
||||
+ *p++ = '/';
|
||||
+ while (*pi == '\\' || *pi == '/')
|
||||
+ pi++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ *p++ = *pi++;
|
||||
+ }
|
||||
+ *p = '\0';
|
||||
|
||||
return name;
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,28 +0,0 @@
|
||||
From 2e62352bc28bd5d3efafc1b5cbe211ff9e9987fd Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Serbinenko <phcoder@gmail.com>
|
||||
Date: Tue, 20 Jan 2015 21:07:08 +0100
|
||||
Subject: [PATCH] * grub-core/kern/i386/tsc.c (calibrate_tsc): Ensure
|
||||
that no division by 0 occurs.
|
||||
|
||||
---
|
||||
ChangeLog | 5 +++++
|
||||
grub-core/kern/i386/tsc.c | 6 +++++-
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/kern/i386/tsc.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/i386/tsc.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/i386/tsc.c
|
||||
@@ -122,7 +122,11 @@ calibrate_tsc (void)
|
||||
grub_pit_wait (0xffff);
|
||||
end_tsc = grub_get_tsc ();
|
||||
|
||||
- grub_tsc_rate = grub_divmod64 ((55ULL << 32), end_tsc - tsc_boot_time, 0);
|
||||
+ grub_tsc_rate = 0;
|
||||
+ if (end_tsc > tsc_boot_time)
|
||||
+ grub_tsc_rate = grub_divmod64 ((55ULL << 32), end_tsc - tsc_boot_time, 0);
|
||||
+ if (grub_tsc_rate == 0)
|
||||
+ grub_tsc_rate = 5368;/* 800 MHz */
|
||||
}
|
||||
#endif
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 2b1fbf23b49586e414d3212544395e18b1c0b9cb Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Sun, 12 Jan 2014 16:16:26 +0400
|
||||
Subject: [PATCH] look for DejaVu also in /usr/share/fonts/truetype
|
||||
|
||||
It is installed in this path on openSUSE.
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7c5d080..e80c074 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1375,7 +1375,7 @@ fi
|
||||
|
||||
if test x"$starfield_excuse" = x; then
|
||||
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
|
||||
- for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do
|
||||
+ for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
|
||||
if test -f "$dir/DejaVuSans.$ext"; then
|
||||
DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
|
||||
break 2
|
||||
--
|
||||
1.8.4
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 7c1f98869a1aedc2210c4d9e5ad9828eeb2dda72 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Mon, 28 Dec 2015 19:48:44 +0300
|
||||
Subject: [PATCH] menu: fix line count calculation for long lines
|
||||
|
||||
It gave one extra screen line if length was exactly equal to screen
|
||||
width.
|
||||
|
||||
Reported by Michael Chang.
|
||||
Also-By: Michael Chang <mchang@suse.com>
|
||||
---
|
||||
grub-core/normal/menu_entry.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c
|
||||
index 62c7e16..2b73225 100644
|
||||
--- a/grub-core/normal/menu_entry.c
|
||||
+++ b/grub-core/normal/menu_entry.c
|
||||
@@ -126,9 +126,13 @@ ensure_space (struct line *linep, int extra)
|
||||
static int
|
||||
get_logical_num_lines (struct line *linep, struct per_term_screen *term_screen)
|
||||
{
|
||||
- return (grub_getstringwidth (linep->buf, linep->buf + linep->len,
|
||||
- term_screen->term)
|
||||
- / (unsigned) term_screen->geo.entry_width) + 1;
|
||||
+ grub_size_t width = grub_getstringwidth (linep->buf, linep->buf + linep->len,
|
||||
+ term_screen->term);
|
||||
+
|
||||
+ /* Empty line still consumes space on screen */
|
||||
+ return width ? (width + (unsigned) term_screen->geo.entry_width - 1) /
|
||||
+ (unsigned) term_screen->geo.entry_width
|
||||
+ : 1;
|
||||
}
|
||||
|
||||
static void
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,42 +0,0 @@
|
||||
From 6a46cbcc5c1c746562fd7181bf0f2337db065201 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Wed, 18 Nov 2015 22:23:58 +0300
|
||||
Subject: [PATCH] unix: do not close stdin in grub_passwd_get
|
||||
|
||||
This makes it impossible to read from stdin without controlling tty:
|
||||
|
||||
10:/mnt # echo -e passwd\\npasswd | setsid ./grub-mkpasswd-pbkdf2
|
||||
Enter password:
|
||||
Reenter password: ./grub-mkpasswd-pbkdf2: error: failure to read password.
|
||||
10:/mnt
|
||||
---
|
||||
grub-core/osdep/unix/password.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/osdep/unix/password.c b/grub-core/osdep/unix/password.c
|
||||
index 4b9507b..9996b24 100644
|
||||
--- a/grub-core/osdep/unix/password.c
|
||||
+++ b/grub-core/osdep/unix/password.c
|
||||
@@ -54,7 +54,8 @@ grub_password_get (char buf[], unsigned buf_size)
|
||||
grub_memset (buf, 0, buf_size);
|
||||
if (!fgets (buf, buf_size, stdin))
|
||||
{
|
||||
- fclose (in);
|
||||
+ if (in != stdin)
|
||||
+ fclose (in);
|
||||
return 0;
|
||||
}
|
||||
ptr = buf + strlen (buf) - 1;
|
||||
@@ -67,7 +68,8 @@ grub_password_get (char buf[], unsigned buf_size)
|
||||
grub_xputs ("\n");
|
||||
grub_refresh ();
|
||||
|
||||
- fclose (in);
|
||||
+ if (in != stdin)
|
||||
+ fclose (in);
|
||||
|
||||
return 1;
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 810254093959708aa6a260c59ad3cf3a1d250755 Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Serbinenko <phcoder@gmail.com>
|
||||
Date: Mon, 26 Jan 2015 09:53:03 +0100
|
||||
Subject: [PATCH] unix/password: Fix file descriptor leak.
|
||||
|
||||
Found by: Coverity scan.
|
||||
---
|
||||
grub-core/osdep/unix/password.c | 7 ++++++-
|
||||
1 files changed, 6 insertions(+), 1 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/osdep/unix/password.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/unix/password.c 2013-12-25 00:29:26.000000000 +0800
|
||||
+++ grub-2.02~beta2/grub-core/osdep/unix/password.c 2015-09-22 17:10:01.109530851 +0800
|
||||
@@ -53,7 +53,10 @@
|
||||
tty_changed = 0;
|
||||
grub_memset (buf, 0, buf_size);
|
||||
if (!fgets (buf, buf_size, stdin))
|
||||
- return 0;
|
||||
+ {
|
||||
+ fclose (in);
|
||||
+ return 0;
|
||||
+ }
|
||||
ptr = buf + strlen (buf) - 1;
|
||||
while (buf <= ptr && (*ptr == '\n' || *ptr == '\r'))
|
||||
*ptr-- = 0;
|
||||
@@ -64,5 +67,7 @@
|
||||
grub_xputs ("\n");
|
||||
grub_refresh ();
|
||||
|
||||
+ fclose (in);
|
||||
+
|
||||
return 1;
|
||||
}
|
@ -19,36 +19,11 @@ http://en.wikipedia.org/wiki/IEEE_802.1Q
|
||||
include/grub/net/ip.h | 3 ++-
|
||||
8 files changed, 124 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/ChangeLog b/ChangeLog
|
||||
index a659369..188c882 100644
|
||||
--- a/ChangeLog
|
||||
+++ b/ChangeLog
|
||||
@@ -1,3 +1,20 @@
|
||||
+2014-02-04 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||
+
|
||||
+ Add Virtual LAN support.
|
||||
+
|
||||
+ This patch adds support for virtual LAN (VLAN) tagging. VLAN tagging allows
|
||||
+ multiple VLANs in a bridged network to share the same physical network link
|
||||
+ but maintain isolation:
|
||||
+
|
||||
+ http://en.wikipedia.org/wiki/IEEE_802.1Q
|
||||
+
|
||||
+ * grub-core/net/ethernet.c: Add check, get, and set vlan tag id.
|
||||
+ * grub-core/net/drivers/ieee1275/ofnet.c: Get vlan tag id from bootargs.
|
||||
+ * grub-core/net/arp.c: Add check.
|
||||
+ * grub-core/net/ip.c: Likewise.
|
||||
+ * include/grub/net/arp.h: Add vlantag attribute.
|
||||
+ * include/grub/net/ip.h: Likewise.
|
||||
+
|
||||
2014-01-24 Paulo Flabiano Smorigo <pfsmorigo@br.ibm.com>
|
||||
|
||||
Add bootargs parser for open firmware.
|
||||
diff --git a/grub-core/net/arp.c b/grub-core/net/arp.c
|
||||
index e92c7e7..3a3ee29 100644
|
||||
--- a/grub-core/net/arp.c
|
||||
+++ b/grub-core/net/arp.c
|
||||
@@ -121,8 +121,8 @@ grub_net_arp_send_request (struct grub_net_network_level_interface *inf,
|
||||
Index: grub-2.02~beta3/grub-core/net/arp.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/grub-core/net/arp.c 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/grub-core/net/arp.c 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -111,8 +111,8 @@
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
@ -57,9 +32,9 @@ index e92c7e7..3a3ee29 100644
|
||||
+grub_net_arp_receive (struct grub_net_buff *nb, struct grub_net_card *card,
|
||||
+ grub_uint16_t vlantag_vid)
|
||||
{
|
||||
struct arphdr *arp_header = (struct arphdr *) nb->data;
|
||||
grub_uint8_t *sender_hardware_address;
|
||||
@@ -157,6 +157,12 @@ grub_net_arp_receive (struct grub_net_buff *nb,
|
||||
struct arppkt *arp_packet = (struct arppkt *) nb->data;
|
||||
grub_net_network_level_address_t sender_addr, target_addr;
|
||||
@@ -138,6 +138,12 @@
|
||||
|
||||
FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
|
||||
{
|
||||
@ -71,12 +46,12 @@ index e92c7e7..3a3ee29 100644
|
||||
+
|
||||
/* Am I the protocol address target? */
|
||||
if (grub_net_addr_cmp (&inf->address, &target_addr) == 0
|
||||
&& grub_be_to_cpu16 (arp_header->op) == ARP_REQUEST)
|
||||
diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
index a079065..2a4f27c 100644
|
||||
--- a/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
+++ b/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
@@ -147,11 +147,11 @@ grub_ieee1275_parse_bootargs (const char *devpath, char *bootpath,
|
||||
&& arp_packet->op == grub_cpu_to_be16_compile_time (ARP_REQUEST))
|
||||
Index: grub-2.02~beta3/grub-core/net/drivers/ieee1275/ofnet.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/grub-core/net/drivers/ieee1275/ofnet.c 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/grub-core/net/drivers/ieee1275/ofnet.c 2016-02-28 19:24:47.004878566 +0300
|
||||
@@ -147,11 +147,11 @@
|
||||
char *comma_char = 0;
|
||||
char *equal_char = 0;
|
||||
grub_size_t field_counter = 0;
|
||||
@ -84,12 +59,12 @@ index a079065..2a4f27c 100644
|
||||
grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask;
|
||||
grub_net_link_level_address_t hw_addr;
|
||||
grub_net_interface_flags_t flags = 0;
|
||||
struct grub_net_network_level_interface *inter;
|
||||
struct grub_net_network_level_interface *inter = NULL;
|
||||
+ grub_uint32_t vlantag = 0;
|
||||
|
||||
hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
||||
|
||||
@@ -169,6 +169,18 @@ grub_ieee1275_parse_bootargs (const char *devpath, char *bootpath,
|
||||
@@ -169,6 +169,18 @@
|
||||
*equal_char = 0;
|
||||
grub_env_set_net_property ((*card)->name, args, equal_char + 1,
|
||||
grub_strlen(equal_char + 1));
|
||||
@ -108,7 +83,7 @@ index a079065..2a4f27c 100644
|
||||
*equal_char = '=';
|
||||
}
|
||||
else
|
||||
@@ -207,6 +219,12 @@ grub_ieee1275_parse_bootargs (const char *devpath, char *bootpath,
|
||||
@@ -207,6 +219,12 @@
|
||||
hw_addr.mac, sizeof(hw_addr.mac), 0);
|
||||
inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr,
|
||||
flags);
|
||||
@ -121,10 +96,10 @@ index a079065..2a4f27c 100644
|
||||
grub_net_add_ipv4_local (inter,
|
||||
__builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4)));
|
||||
}
|
||||
diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c
|
||||
index c397b1b..3a526b3 100644
|
||||
--- a/grub-core/net/ethernet.c
|
||||
+++ b/grub-core/net/ethernet.c
|
||||
Index: grub-2.02~beta3/grub-core/net/ethernet.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/grub-core/net/ethernet.c 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/grub-core/net/ethernet.c 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <grub/misc.h>
|
||||
@ -133,7 +108,7 @@ index c397b1b..3a526b3 100644
|
||||
#include <grub/net/ethernet.h>
|
||||
#include <grub/net/ip.h>
|
||||
#include <grub/net/arp.h>
|
||||
@@ -56,10 +57,16 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
|
||||
@@ -56,10 +57,16 @@
|
||||
{
|
||||
struct etherhdr *eth;
|
||||
grub_err_t err;
|
||||
@ -152,7 +127,7 @@ index c397b1b..3a526b3 100644
|
||||
if (err)
|
||||
return err;
|
||||
eth = (struct etherhdr *) nb->data;
|
||||
@@ -76,6 +83,21 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
|
||||
@@ -76,6 +83,21 @@
|
||||
return err;
|
||||
inf->card->opened = 1;
|
||||
}
|
||||
@ -174,7 +149,7 @@ index c397b1b..3a526b3 100644
|
||||
return inf->card->driver->send (inf->card, nb);
|
||||
}
|
||||
|
||||
@@ -90,10 +112,26 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
|
||||
@@ -90,10 +112,26 @@
|
||||
grub_net_link_level_address_t hwaddress;
|
||||
grub_net_link_level_address_t src_hwaddress;
|
||||
grub_err_t err;
|
||||
@ -202,7 +177,7 @@ index c397b1b..3a526b3 100644
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -121,13 +159,14 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
|
||||
@@ -121,13 +159,14 @@
|
||||
{
|
||||
/* ARP packet. */
|
||||
case GRUB_NET_ETHERTYPE_ARP:
|
||||
@ -219,11 +194,11 @@ index c397b1b..3a526b3 100644
|
||||
}
|
||||
grub_netbuff_free (nb);
|
||||
return GRUB_ERR_NONE;
|
||||
diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c
|
||||
index c6971f9..8041905 100644
|
||||
--- a/grub-core/net/ip.c
|
||||
+++ b/grub-core/net/ip.c
|
||||
@@ -225,12 +225,13 @@ handle_dgram (struct grub_net_buff *nb,
|
||||
Index: grub-2.02~beta3/grub-core/net/ip.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/grub-core/net/ip.c 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/grub-core/net/ip.c 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -228,12 +228,13 @@
|
||||
grub_net_ip_protocol_t proto,
|
||||
const grub_net_network_level_address_t *source,
|
||||
const grub_net_network_level_address_t *dest,
|
||||
@ -238,7 +213,7 @@ index c6971f9..8041905 100644
|
||||
/* DHCP needs special treatment since we don't know IP yet. */
|
||||
{
|
||||
struct udphdr *udph;
|
||||
@@ -290,6 +291,13 @@ handle_dgram (struct grub_net_buff *nb,
|
||||
@@ -293,6 +294,13 @@
|
||||
&& grub_net_addr_cmp (&inf->address, dest) == 0
|
||||
&& grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0)
|
||||
break;
|
||||
@ -252,7 +227,7 @@ index c6971f9..8041905 100644
|
||||
/* Solicited node multicast. */
|
||||
if (inf->card == card
|
||||
&& inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
|
||||
@@ -378,7 +386,8 @@ static grub_err_t
|
||||
@@ -381,7 +389,8 @@
|
||||
grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
||||
struct grub_net_card *card,
|
||||
const grub_net_link_level_address_t *hwaddress,
|
||||
@ -262,7 +237,7 @@ index c6971f9..8041905 100644
|
||||
{
|
||||
struct iphdr *iph = (struct iphdr *) nb->data;
|
||||
grub_err_t err;
|
||||
@@ -453,7 +462,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
||||
@@ -456,7 +465,7 @@
|
||||
dest.ipv4 = iph->dest;
|
||||
|
||||
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
||||
@ -271,7 +246,7 @@ index c6971f9..8041905 100644
|
||||
}
|
||||
|
||||
for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev)
|
||||
@@ -589,7 +598,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
||||
@@ -592,7 +601,7 @@
|
||||
dest.ipv4 = dst;
|
||||
|
||||
return handle_dgram (ret, card, src_hwaddress,
|
||||
@ -280,7 +255,7 @@ index c6971f9..8041905 100644
|
||||
ttl);
|
||||
}
|
||||
}
|
||||
@@ -644,7 +653,8 @@ static grub_err_t
|
||||
@@ -650,7 +659,8 @@
|
||||
grub_net_recv_ip6_packets (struct grub_net_buff *nb,
|
||||
struct grub_net_card *card,
|
||||
const grub_net_link_level_address_t *hwaddress,
|
||||
@ -290,7 +265,7 @@ index c6971f9..8041905 100644
|
||||
{
|
||||
struct ip6hdr *iph = (struct ip6hdr *) nb->data;
|
||||
grub_err_t err;
|
||||
@@ -695,21 +705,24 @@ grub_net_recv_ip6_packets (struct grub_net_buff *nb,
|
||||
@@ -701,21 +711,24 @@
|
||||
grub_memcpy (dest.ipv6, &iph->dest, sizeof (dest.ipv6));
|
||||
|
||||
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
||||
@ -319,11 +294,11 @@ index c6971f9..8041905 100644
|
||||
grub_dprintf ("net", "Bad IP version: %d\n", (iph->verhdrlen >> 4));
|
||||
grub_netbuff_free (nb);
|
||||
return GRUB_ERR_NONE;
|
||||
diff --git a/include/grub/net.h b/include/grub/net.h
|
||||
index 843f74f..db5f6b3 100644
|
||||
--- a/include/grub/net.h
|
||||
+++ b/include/grub/net.h
|
||||
@@ -268,6 +268,12 @@ typedef struct grub_net
|
||||
Index: grub-2.02~beta3/include/grub/net.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/include/grub/net.h 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/include/grub/net.h 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -280,6 +280,12 @@
|
||||
|
||||
extern grub_net_t (*EXPORT_VAR (grub_net_open)) (const char *name);
|
||||
|
||||
@ -336,7 +311,7 @@ index 843f74f..db5f6b3 100644
|
||||
struct grub_net_network_level_interface
|
||||
{
|
||||
struct grub_net_network_level_interface *next;
|
||||
@@ -279,6 +285,7 @@ struct grub_net_network_level_interface
|
||||
@@ -291,6 +297,7 @@
|
||||
grub_net_interface_flags_t flags;
|
||||
struct grub_net_bootp_packet *dhcp_ack;
|
||||
grub_size_t dhcp_acklen;
|
||||
@ -344,17 +319,17 @@ index 843f74f..db5f6b3 100644
|
||||
void *data;
|
||||
};
|
||||
|
||||
@@ -537,4 +544,6 @@ extern char *grub_net_default_server;
|
||||
#define GRUB_NET_TRIES 40
|
||||
@@ -561,4 +568,6 @@
|
||||
#define GRUB_NET_INTERVAL 400
|
||||
#define GRUB_NET_INTERVAL_ADDITION 20
|
||||
|
||||
+#define VLANTAG_IDENTIFIER 0x8100
|
||||
+
|
||||
#endif /* ! GRUB_NET_HEADER */
|
||||
diff --git a/include/grub/net/arp.h b/include/grub/net/arp.h
|
||||
index bb17036..56336b3 100644
|
||||
--- a/include/grub/net/arp.h
|
||||
+++ b/include/grub/net/arp.h
|
||||
Index: grub-2.02~beta3/include/grub/net/arp.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/include/grub/net/arp.h 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/include/grub/net/arp.h 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -22,10 +22,11 @@
|
||||
#include <grub/net.h>
|
||||
|
||||
@ -369,11 +344,11 @@ index bb17036..56336b3 100644
|
||||
+ const grub_net_network_level_address_t *proto_addr);
|
||||
|
||||
#endif
|
||||
diff --git a/include/grub/net/ip.h b/include/grub/net/ip.h
|
||||
index 7a8e614..e79dec9 100644
|
||||
--- a/include/grub/net/ip.h
|
||||
+++ b/include/grub/net/ip.h
|
||||
@@ -48,7 +48,8 @@ grub_err_t
|
||||
Index: grub-2.02~beta3/include/grub/net/ip.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta3.orig/include/grub/net/ip.h 2016-02-28 19:23:27.060877621 +0300
|
||||
+++ grub-2.02~beta3/include/grub/net/ip.h 2016-02-28 19:23:27.056877621 +0300
|
||||
@@ -48,7 +48,8 @@
|
||||
grub_net_recv_ip_packets (struct grub_net_buff *nb,
|
||||
struct grub_net_card *card,
|
||||
const grub_net_link_level_address_t *hwaddress,
|
||||
@ -383,5 +358,3 @@ index 7a8e614..e79dec9 100644
|
||||
|
||||
grub_err_t
|
||||
grub_net_send_ip_packet (struct grub_net_network_level_interface *inf,
|
||||
--
|
||||
1.9.3
|
||||
|
@ -1,97 +0,0 @@
|
||||
From c52ae40570c3bfbcca22d2195f5e6b31009d8a3f Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Thu, 7 May 2015 20:37:17 +0300
|
||||
Subject: [PATCH 2/3] efinet: skip virtual IPv4 and IPv6 devices when
|
||||
enumerating cards
|
||||
|
||||
EDK2 PXE driver creates two child devices - IPv4 and IPv6 - with
|
||||
bound SNP instance. This means we get three cards for every physical
|
||||
adapter when enumerating. Not only is this confusing, this may result
|
||||
in grub ignoring packets that come in via the "wrong" card.
|
||||
|
||||
Example of device hierarchy is
|
||||
|
||||
Ctrl[91] PciRoot(0x0)/Pci(0x3,0x0)
|
||||
Ctrl[95] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)
|
||||
Ctrl[B4] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/IPv4(0.0.0.0)
|
||||
Ctrl[BC] PciRoot(0x0)/Pci(0x3,0x0)/MAC(525400123456,0x1)/IPv6(0000:0000:0000:0000:0000:0000:0000:0000)
|
||||
|
||||
Skip PXE created virtual devices when enumerating cards. Make sure to
|
||||
find real card when applying initial autoconfiguration during PXE boot,
|
||||
this information is associated with one of child devices.
|
||||
---
|
||||
grub-core/net/drivers/efi/efinet.c | 51 +++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 50 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||
index f171f20..2b53e9e 100644
|
||||
--- a/grub-core/net/drivers/efi/efinet.c
|
||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||
@@ -174,6 +174,29 @@ grub_efinet_findcards (void)
|
||||
{
|
||||
grub_efi_simple_network_t *net;
|
||||
struct grub_net_card *card;
|
||||
+ grub_efi_device_path_t *dp, *parent = NULL, *child = NULL;
|
||||
+
|
||||
+ /* EDK2 UEFI PXE driver creates IPv4 and IPv6 messaging devices as
|
||||
+ children of main MAC messaging device. We only need one device with
|
||||
+ bound SNP per physical card, otherwise they compete with each other
|
||||
+ when polling for incoming packets.
|
||||
+ */
|
||||
+ dp = grub_efi_get_device_path (*handle);
|
||||
+ if (!dp)
|
||||
+ continue;
|
||||
+ for (; ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp); dp = GRUB_EFI_NEXT_DEVICE_PATH (dp))
|
||||
+ {
|
||||
+ parent = child;
|
||||
+ child = dp;
|
||||
+ }
|
||||
+ if (child
|
||||
+ && GRUB_EFI_DEVICE_PATH_TYPE (child) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE
|
||||
+ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (child) == GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE
|
||||
+ || GRUB_EFI_DEVICE_PATH_SUBTYPE (child) == GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE)
|
||||
+ && parent
|
||||
+ && GRUB_EFI_DEVICE_PATH_TYPE (parent) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE
|
||||
+ && GRUB_EFI_DEVICE_PATH_SUBTYPE (parent) == GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE)
|
||||
+ continue;
|
||||
|
||||
net = grub_efi_open_protocol (*handle, &net_io_guid,
|
||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
||||
@@ -251,7 +274,33 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device,
|
||||
if (! cdp)
|
||||
continue;
|
||||
if (grub_efi_compare_device_paths (dp, cdp) != 0)
|
||||
- continue;
|
||||
+ {
|
||||
+ grub_efi_device_path_t *ldp, *dup_dp, *dup_ldp;
|
||||
+ int match;
|
||||
+
|
||||
+ /* EDK2 UEFI PXE driver creates pseudo devices with type IPv4/IPv6
|
||||
+ as children of Ethernet card and binds PXE and Load File protocols
|
||||
+ to it. Loaded Image Device Path protocol will point to these pseudo
|
||||
+ devices. We skip them when enumerating cards, so here we need to
|
||||
+ find matching MAC device.
|
||||
+ */
|
||||
+ ldp = grub_efi_find_last_device_path (dp);
|
||||
+ if (GRUB_EFI_DEVICE_PATH_TYPE (ldp) != GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE
|
||||
+ || (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE
|
||||
+ && GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) != GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE))
|
||||
+ continue;
|
||||
+ dup_dp = grub_efi_duplicate_device_path (dp);
|
||||
+ if (!dup_dp)
|
||||
+ continue;
|
||||
+ dup_ldp = grub_efi_find_last_device_path (dup_dp);
|
||||
+ dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||
+ dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||
+ dup_ldp->length = sizeof (*dup_ldp);
|
||||
+ match = grub_efi_compare_device_paths (dup_dp, cdp) == 0;
|
||||
+ grub_free (dup_dp);
|
||||
+ if (!match)
|
||||
+ continue;
|
||||
+ }
|
||||
pxe = grub_efi_open_protocol (hnd, &pxe_io_guid,
|
||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
||||
if (! pxe)
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 50ebc8f5f35a322b3736c03e16de7108932126b0 Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Serbinenko <phcoder@gmail.com>
|
||||
Date: Sun, 22 Feb 2015 13:12:44 +0100
|
||||
Subject: [PATCH] i386/tsc: Fix unused function warning on xen.
|
||||
|
||||
---
|
||||
grub-core/kern/i386/tsc.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/kern/i386/tsc.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/i386/tsc.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/i386/tsc.c
|
||||
@@ -57,6 +57,8 @@ grub_get_tsc (void)
|
||||
return (((grub_uint64_t) hi) << 32) | lo;
|
||||
}
|
||||
|
||||
+#ifndef GRUB_MACHINE_XEN
|
||||
+
|
||||
static __inline int
|
||||
grub_cpu_is_tsc_supported (void)
|
||||
{
|
||||
@@ -69,8 +71,6 @@ grub_cpu_is_tsc_supported (void)
|
||||
return (d & (1 << 4)) != 0;
|
||||
}
|
||||
|
||||
-#ifndef GRUB_MACHINE_XEN
|
||||
-
|
||||
static void
|
||||
grub_pit_wait (grub_uint16_t tics)
|
||||
{
|
@ -1,24 +0,0 @@
|
||||
From 6704abade6674a91d8c652a7e4596ca3421411b6 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Mon, 26 Jan 2015 21:38:40 +0300
|
||||
Subject: [PATCH] linux/getroot: fix descriptor leak.
|
||||
|
||||
Found by: Coverity scan.
|
||||
---
|
||||
grub-core/osdep/linux/getroot.c | 4 +++-
|
||||
1 files changed, 3 insertions(+), 1 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/linux/getroot.c 2015-09-22 17:10:33.177530851 +0800
|
||||
+++ grub-2.02~beta2/grub-core/osdep/linux/getroot.c 2015-09-22 17:13:27.269530851 +0800
|
||||
@@ -368,7 +368,8 @@
|
||||
ret[1+namelen] = '\0';
|
||||
}
|
||||
if (!ret)
|
||||
- return xstrdup ("/");
|
||||
+ ret = xstrdup ("/");
|
||||
+ close (fd);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1,80 +0,0 @@
|
||||
From 07258815e96aab2c72593d0129d17051cbf68d27 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Fri, 8 May 2015 06:15:16 +0300
|
||||
Subject: [PATCH] acpi: do not skip BIOS scan if EBDA length is zero
|
||||
|
||||
EBDA layout is not standardized so we cannot assume first two bytes
|
||||
are length. Neither is it required by ACPI standard. HP 8710W is known
|
||||
to contain zeroes here.
|
||||
|
||||
Closes: 45002
|
||||
---
|
||||
grub-core/commands/acpi.c | 4 ++++
|
||||
grub-core/commands/i386/pc/acpi.c | 10 ++++++----
|
||||
2 files changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/commands/acpi.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/commands/acpi.c
|
||||
+++ grub-2.02~beta2/grub-core/commands/acpi.c
|
||||
@@ -179,8 +179,10 @@ grub_acpi_create_ebda (void)
|
||||
struct grub_acpi_rsdp_v20 *v2;
|
||||
|
||||
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
||||
+ grub_dprintf ("acpi", "EBDA @%p\n", ebda);
|
||||
if (ebda)
|
||||
ebda_kb_len = *(grub_uint16_t *) ebda;
|
||||
+ grub_dprintf ("acpi", "EBDA length 0x%x\n", ebda_kb_len);
|
||||
if (ebda_kb_len > 16)
|
||||
ebda_kb_len = 0;
|
||||
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
||||
@@ -494,6 +496,8 @@ grub_cmd_acpi (struct grub_extcmd_contex
|
||||
if (! rsdp)
|
||||
rsdp = grub_machine_acpi_get_rsdpv1 ();
|
||||
|
||||
+ grub_dprintf ("acpi", "RSDP @%p\n", rsdp);
|
||||
+
|
||||
if (rsdp)
|
||||
{
|
||||
grub_uint32_t *entry_ptr;
|
||||
Index: grub-2.02~beta2/grub-core/commands/i386/pc/acpi.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/commands/i386/pc/acpi.c
|
||||
+++ grub-2.02~beta2/grub-core/commands/i386/pc/acpi.c
|
||||
@@ -29,14 +29,15 @@ grub_machine_acpi_get_rsdpv1 (void)
|
||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
||||
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
||||
ebda_len = * (grub_uint16_t *) ebda;
|
||||
- if (! ebda_len)
|
||||
- return 0;
|
||||
+ if (! ebda_len) /* FIXME do we really need this check? */
|
||||
+ goto scan_bios;
|
||||
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
||||
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
||||
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
||||
&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
|
||||
return (struct grub_acpi_rsdp_v10 *) ptr;
|
||||
|
||||
+scan_bios:
|
||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
||||
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
||||
ptr += 16)
|
||||
@@ -56,8 +57,8 @@ grub_machine_acpi_get_rsdpv2 (void)
|
||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
||||
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
||||
ebda_len = * (grub_uint16_t *) ebda;
|
||||
- if (! ebda_len)
|
||||
- return 0;
|
||||
+ if (! ebda_len) /* FIXME do we really need this check? */
|
||||
+ goto scan_bios;
|
||||
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
||||
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
||||
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
||||
@@ -67,6 +68,7 @@ grub_machine_acpi_get_rsdpv2 (void)
|
||||
== 0)
|
||||
return (struct grub_acpi_rsdp_v20 *) ptr;
|
||||
|
||||
+scan_bios:
|
||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
||||
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
||||
ptr += 16)
|
@ -1,89 +0,0 @@
|
||||
From 49426e9fd2e562c73a4f1206f32eff9e424a1a73 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Thu, 7 May 2015 20:37:17 +0300
|
||||
Subject: [PATCH 3/3] efinet: open Simple Network Protocol exclusively
|
||||
|
||||
EDK2 network stack is based on Managed Network Protocol which is layered
|
||||
on top of Simple Management Protocol and does background polling. This
|
||||
polling races with grub for received (and probably trasmitted) packets
|
||||
which causes either serious slowdown or complete failure to load files.
|
||||
|
||||
Open SNP device exclusively. This destroys all child MNP instances and
|
||||
stops background polling.
|
||||
|
||||
Exclusive open cannot be done when enumerating cards, as it would destroy
|
||||
PXE information we need to autoconfigure interface; and it cannot be done
|
||||
during autoconfiguration as we need to do it for non-PXE boot as well. So
|
||||
move SNP open to card ->open method and add matching ->close to clean up.
|
||||
|
||||
Based on patch from Mark Salter <msalter@redhat.com>
|
||||
|
||||
Also-By: Mark Salter <msalter@redhat.com>
|
||||
Closes: 41731
|
||||
---
|
||||
grub-core/net/drivers/efi/efinet.c | 46 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 46 insertions(+)
|
||||
|
||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||
index 2b53e9e..5533515 100644
|
||||
--- a/grub-core/net/drivers/efi/efinet.c
|
||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||
@@ -142,9 +142,55 @@ get_card_packet (struct grub_net_card *dev)
|
||||
return nb;
|
||||
}
|
||||
|
||||
+static grub_err_t
|
||||
+open_card (struct grub_net_card *dev)
|
||||
+{
|
||||
+ grub_efi_simple_network_t *net;
|
||||
+
|
||||
+ /* Try to reopen SNP exlusively to close any active MNP protocol instance
|
||||
+ that may compete for packet polling
|
||||
+ */
|
||||
+ net = grub_efi_open_protocol (dev->efi_handle, &net_io_guid,
|
||||
+ GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE);
|
||||
+ if (net)
|
||||
+ {
|
||||
+ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED
|
||||
+ && efi_call_1 (net->start, net) != GRUB_EFI_SUCCESS)
|
||||
+ return grub_error (GRUB_ERR_NET_NO_CARD, "%s: net start failed",
|
||||
+ dev->name);
|
||||
+
|
||||
+ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED)
|
||||
+ return grub_error (GRUB_ERR_NET_NO_CARD, "%s: card stopped",
|
||||
+ dev->name);
|
||||
+
|
||||
+ if (net->mode->state == GRUB_EFI_NETWORK_STARTED
|
||||
+ && efi_call_3 (net->initialize, net, 0, 0) != GRUB_EFI_SUCCESS)
|
||||
+ return grub_error (GRUB_ERR_NET_NO_CARD, "%s: net initialize failed",
|
||||
+ dev->name);
|
||||
+
|
||||
+ efi_call_4 (grub_efi_system_table->boot_services->close_protocol,
|
||||
+ dev->efi_net, &net_io_guid,
|
||||
+ grub_efi_image_handle, dev->efi_handle);
|
||||
+ dev->efi_net = net;
|
||||
+ }
|
||||
+
|
||||
+ /* If it failed we just try to run as best as we can */
|
||||
+ return GRUB_ERR_NONE;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+close_card (struct grub_net_card *dev)
|
||||
+{
|
||||
+ efi_call_4 (grub_efi_system_table->boot_services->close_protocol,
|
||||
+ dev->efi_net, &net_io_guid,
|
||||
+ grub_efi_image_handle, dev->efi_handle);
|
||||
+}
|
||||
+
|
||||
static struct grub_net_card_driver efidriver =
|
||||
{
|
||||
.name = "efinet",
|
||||
+ .open = open_card,
|
||||
+ .close = close_card,
|
||||
.send = send_card_buffer,
|
||||
.recv = get_card_packet
|
||||
};
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,22 +0,0 @@
|
||||
From 1a87156e01e3cb873f3479c31c34c97fb690eb71 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Mon, 26 Jan 2015 22:24:28 +0300
|
||||
Subject: [PATCH] util/grub-mount: fix descriptor leak.
|
||||
|
||||
Found by: Coverity scan.
|
||||
---
|
||||
util/grub-mount.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/util/grub-mount.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-mount.c 2013-12-25 00:29:28.000000000 +0800
|
||||
+++ grub-2.02~beta2/util/grub-mount.c 2015-09-22 17:15:44.525530851 +0800
|
||||
@@ -511,6 +511,7 @@
|
||||
return 0;
|
||||
}
|
||||
grub_zfs_add_key (buf, real_size, 0);
|
||||
+ fclose (f);
|
||||
}
|
||||
return 0;
|
||||
|
@ -1,23 +0,0 @@
|
||||
From 637fc62699e7ae3f0057e1c56d330eb193fd40b6 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Tue, 27 Jan 2015 20:29:00 +0300
|
||||
Subject: [PATCH] linux/ofpath: fix descriptor leak
|
||||
|
||||
Found by: Coverity scan
|
||||
---
|
||||
grub-core/osdep/linux/ofpath.c | 2 ++
|
||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/osdep/linux/ofpath.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/linux/ofpath.c 2013-12-25 00:29:26.000000000 +0800
|
||||
+++ grub-2.02~beta2/grub-core/osdep/linux/ofpath.c 2015-09-22 17:16:06.869530851 +0800
|
||||
@@ -122,6 +122,8 @@
|
||||
fd = open(path, O_RDONLY);
|
||||
if (fd < 0 || fstat (fd, &st) < 0)
|
||||
{
|
||||
+ if (fd >= 0)
|
||||
+ close (fd);
|
||||
snprintf(path, path_size, "%s/devspec", sysfs_path);
|
||||
fd = open(path, O_RDONLY);
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,28 +0,0 @@
|
||||
From 151c19a42a8ea76395fdb579221198156da9c026 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Fri, 30 Jan 2015 22:45:58 +0300
|
||||
Subject: [PATCH] grub-fstest: fix descriptor leak
|
||||
|
||||
Found by: Coverity scan.
|
||||
---
|
||||
util/grub-fstest.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/util/grub-fstest.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-fstest.c 2013-12-25 00:40:31.000000000 +0800
|
||||
+++ grub-2.02~beta2/util/grub-fstest.c 2015-09-22 17:16:23.177530851 +0800
|
||||
@@ -570,12 +570,12 @@
|
||||
return 0;
|
||||
}
|
||||
real_size = fread (buf, 1, 1024, f);
|
||||
+ fclose (f);
|
||||
if (real_size < 0)
|
||||
{
|
||||
printf (_("%s: error:"), program_name);
|
||||
printf (_("cannot read `%s': %s"), arg, strerror (errno));
|
||||
printf ("\n");
|
||||
- fclose (f);
|
||||
return 0;
|
||||
}
|
||||
grub_zfs_add_key (buf, real_size, 0);
|
@ -1,27 +0,0 @@
|
||||
From a03c1034f6062e69075056c8f31b90e159ce5244 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Chang <mchang@suse.com>
|
||||
Date: Tue, 1 Dec 2015 18:49:38 +0300
|
||||
Subject: [PATCH] i386: fix TSC calibration using PIT
|
||||
|
||||
Condition was accidentally reversed, so PIT calibration always failed
|
||||
when PIT was present and always succeeded when PIT was missing, but in
|
||||
the latter case resulted in absurdly fast clock.
|
||||
|
||||
Reported and tested by Vitaly Kuznetsov <vkuznets@redhat.com>
|
||||
---
|
||||
grub-core/kern/i386/tsc_pit.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/kern/i386/tsc_pit.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/i386/tsc_pit.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/i386/tsc_pit.c
|
||||
@@ -49,7 +49,7 @@ grub_pit_wait (void)
|
||||
| GRUB_PIT_SPK_TMR2,
|
||||
GRUB_PIT_SPEAKER_PORT);
|
||||
|
||||
- if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH)) {
|
||||
+ if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00) {
|
||||
ret = 1;
|
||||
/* Wait. */
|
||||
while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00);
|
@ -1,27 +0,0 @@
|
||||
From 668add258ff7ffcfdc2c501fe5eb32e53c69b6f4 Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Mon, 30 Dec 2013 12:56:19 +0000
|
||||
Subject: [PATCH] strip .eh_frame section from arm64-efi kernel
|
||||
|
||||
Fixes grub-mkimage error "relocation 0x105 is not implemented yet."
|
||||
---
|
||||
ChangeLog | 4 ++++
|
||||
grub-core/Makefile.core.def | 2 +-
|
||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
|
||||
index c916246..42443bc 100644
|
||||
--- a/grub-core/Makefile.core.def
|
||||
+++ b/grub-core/Makefile.core.def
|
||||
@@ -66,7 +66,7 @@ kernel = {
|
||||
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||
|
||||
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||
- arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||
+ arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
||||
|
||||
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
||||
--
|
||||
2.1.0
|
||||
|
201
biendian.patch
201
biendian.patch
@ -1,201 +0,0 @@
|
||||
From 9facac630985467ee1ad40beaed07d50ee18062c Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
|
||||
Date: Fri, 15 Aug 2014 14:39:53 -0300
|
||||
Subject: [PATCH 143/143] Suport for bi-endianess in elf file
|
||||
|
||||
* grub-core/kern/elf.c: check and switch endianess with grub_{be,le}_to
|
||||
cpu functions.
|
||||
* grub-core/kern/elfXX.c: Likewise.
|
||||
|
||||
Also-by: Tomohiro B Berry <tbberry@us.ibm.com>
|
||||
---
|
||||
grub-core/kern/elf.c | 60 +++++++++++++++++++++++++++++++++++++++--
|
||||
grub-core/kern/elfXX.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 131 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/kern/elf.c b/grub-core/kern/elf.c
|
||||
index 5f99c43..de90811 100644
|
||||
--- a/grub-core/kern/elf.c
|
||||
+++ b/grub-core/kern/elf.c
|
||||
@@ -28,6 +28,11 @@
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
+void grub_elf32_check_endianess (grub_elf_t elf);
|
||||
+void grub_elf64_check_endianess (grub_elf_t elf);
|
||||
+grub_err_t grub_elf32_check_version (grub_elf_t elf);
|
||||
+grub_err_t grub_elf64_check_version (grub_elf_t elf);
|
||||
+
|
||||
/* Check if EHDR is a valid ELF header. */
|
||||
static grub_err_t
|
||||
grub_elf_check_header (grub_elf_t elf)
|
||||
@@ -38,10 +43,22 @@ grub_elf_check_header (grub_elf_t elf)
|
||||
|| e->e_ident[EI_MAG1] != ELFMAG1
|
||||
|| e->e_ident[EI_MAG2] != ELFMAG2
|
||||
|| e->e_ident[EI_MAG3] != ELFMAG3
|
||||
- || e->e_ident[EI_VERSION] != EV_CURRENT
|
||||
- || e->e_version != EV_CURRENT)
|
||||
+ || e->e_ident[EI_VERSION] != EV_CURRENT)
|
||||
return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-independent ELF magic"));
|
||||
|
||||
+ if (grub_elf_is_elf32 (elf))
|
||||
+ {
|
||||
+ grub_elf32_check_endianess (elf);
|
||||
+ grub_elf32_check_version (elf);
|
||||
+ }
|
||||
+ else if (grub_elf_is_elf64 (elf))
|
||||
+ {
|
||||
+ grub_elf64_check_endianess (elf);
|
||||
+ grub_elf64_check_version (elf);
|
||||
+ }
|
||||
+ else
|
||||
+ return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic"));
|
||||
+
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
@@ -127,7 +144,20 @@ grub_elf_open (const char *name)
|
||||
#define grub_elf_is_elfXX grub_elf_is_elf32
|
||||
#define grub_elfXX_load_phdrs grub_elf32_load_phdrs
|
||||
#define ElfXX_Phdr Elf32_Phdr
|
||||
+#define ElfXX_Ehdr Elf32_Ehdr
|
||||
#define grub_uintXX_t grub_uint32_t
|
||||
+#define grub_be_to_halfXX grub_be_to_cpu16
|
||||
+#define grub_be_to_wordXX grub_be_to_cpu32
|
||||
+#define grub_be_to_addrXX grub_be_to_cpu32
|
||||
+#define grub_be_to_offXX grub_be_to_cpu32
|
||||
+#define grub_be_to_XwordXX grub_be_to_wordXX
|
||||
+#define grub_le_to_halfXX grub_le_to_cpu16
|
||||
+#define grub_le_to_wordXX grub_le_to_cpu32
|
||||
+#define grub_le_to_addrXX grub_le_to_cpu32
|
||||
+#define grub_le_to_offXX grub_le_to_cpu32
|
||||
+#define grub_le_to_XwordXX grub_le_to_wordXX
|
||||
+#define grub_elfXX_check_endianess grub_elf32_check_endianess
|
||||
+#define grub_elfXX_check_version grub_elf32_check_version
|
||||
|
||||
#include "elfXX.c"
|
||||
|
||||
@@ -140,7 +170,20 @@ grub_elf_open (const char *name)
|
||||
#undef grub_elf_is_elfXX
|
||||
#undef grub_elfXX_load_phdrs
|
||||
#undef ElfXX_Phdr
|
||||
+#undef ElfXX_Ehdr
|
||||
#undef grub_uintXX_t
|
||||
+#undef grub_be_to_halfXX
|
||||
+#undef grub_be_to_wordXX
|
||||
+#undef grub_be_to_addrXX
|
||||
+#undef grub_be_to_offXX
|
||||
+#undef grub_be_to_XwordXX
|
||||
+#undef grub_le_to_halfXX
|
||||
+#undef grub_le_to_wordXX
|
||||
+#undef grub_le_to_addrXX
|
||||
+#undef grub_le_to_offXX
|
||||
+#undef grub_le_to_XwordXX
|
||||
+#undef grub_elfXX_check_endianess
|
||||
+#undef grub_elfXX_check_version
|
||||
|
||||
|
||||
/* 64-bit */
|
||||
@@ -153,6 +196,19 @@ grub_elf_open (const char *name)
|
||||
#define grub_elf_is_elfXX grub_elf_is_elf64
|
||||
#define grub_elfXX_load_phdrs grub_elf64_load_phdrs
|
||||
#define ElfXX_Phdr Elf64_Phdr
|
||||
+#define ElfXX_Ehdr Elf64_Ehdr
|
||||
#define grub_uintXX_t grub_uint64_t
|
||||
+#define grub_be_to_halfXX grub_be_to_cpu16
|
||||
+#define grub_be_to_wordXX grub_be_to_cpu32
|
||||
+#define grub_be_to_addrXX grub_be_to_cpu64
|
||||
+#define grub_be_to_offXX grub_be_to_cpu64
|
||||
+#define grub_be_to_XwordXX grub_be_to_cpu64
|
||||
+#define grub_le_to_halfXX grub_le_to_cpu16
|
||||
+#define grub_le_to_wordXX grub_le_to_cpu32
|
||||
+#define grub_le_to_addrXX grub_le_to_cpu64
|
||||
+#define grub_le_to_offXX grub_le_to_cpu64
|
||||
+#define grub_le_to_XwordXX grub_le_to_cpu64
|
||||
+#define grub_elfXX_check_endianess grub_elf64_check_endianess
|
||||
+#define grub_elfXX_check_version grub_elf64_check_version
|
||||
|
||||
#include "elfXX.c"
|
||||
diff --git a/grub-core/kern/elfXX.c b/grub-core/kern/elfXX.c
|
||||
index 1d09971..ecf9df6 100644
|
||||
--- a/grub-core/kern/elfXX.c
|
||||
+++ b/grub-core/kern/elfXX.c
|
||||
@@ -154,3 +154,76 @@ grub_elfXX_load (grub_elf_t elf, const char *filename,
|
||||
|
||||
return grub_errno;
|
||||
}
|
||||
+
|
||||
+void
|
||||
+grub_elfXX_check_endianess (grub_elf_t elf)
|
||||
+{
|
||||
+ ElfXX_Ehdr *e = &(elf->ehdr.ehdrXX);
|
||||
+ ElfXX_Phdr *phdr;
|
||||
+
|
||||
+ if (e->e_ident[EI_DATA] == ELFDATA2MSB)
|
||||
+ {
|
||||
+ e->e_type = grub_be_to_halfXX (e->e_type);
|
||||
+ e->e_machine = grub_be_to_halfXX (e->e_machine);
|
||||
+ e->e_version = grub_be_to_wordXX (e->e_version);
|
||||
+ e->e_entry = grub_be_to_addrXX (e->e_entry);
|
||||
+ e->e_phoff = grub_be_to_offXX (e->e_phoff);
|
||||
+ e->e_shoff = grub_be_to_offXX (e->e_shoff);
|
||||
+ e->e_flags = grub_be_to_wordXX (e->e_flags);
|
||||
+ e->e_ehsize = grub_be_to_halfXX (e->e_ehsize);
|
||||
+ e->e_phentsize = grub_be_to_halfXX (e->e_phentsize);
|
||||
+ e->e_phnum = grub_be_to_halfXX (e->e_phnum);
|
||||
+ e->e_shentsize = grub_be_to_halfXX (e->e_shentsize);
|
||||
+ e->e_shnum = grub_be_to_halfXX (e->e_shnum);
|
||||
+ e->e_shstrndx = grub_be_to_halfXX (e->e_shstrndx);
|
||||
+
|
||||
+ FOR_ELFXX_PHDRS (elf,phdr)
|
||||
+ {
|
||||
+ phdr->p_type = grub_be_to_wordXX (phdr->p_type);
|
||||
+ phdr->p_flags = grub_be_to_wordXX (phdr->p_flags);
|
||||
+ phdr->p_offset = grub_be_to_offXX (phdr->p_offset);
|
||||
+ phdr->p_vaddr = grub_be_to_addrXX (phdr->p_vaddr);
|
||||
+ phdr->p_paddr = grub_be_to_addrXX (phdr->p_paddr);
|
||||
+ phdr->p_filesz = grub_be_to_XwordXX (phdr->p_filesz);
|
||||
+ phdr->p_memsz = grub_be_to_XwordXX (phdr->p_memsz);
|
||||
+ phdr->p_align = grub_be_to_XwordXX (phdr->p_align);
|
||||
+ }
|
||||
+ }
|
||||
+ else if (e->e_ident[EI_DATA] == ELFDATA2LSB)
|
||||
+ {
|
||||
+ e->e_type = grub_le_to_halfXX (e->e_type);
|
||||
+ e->e_machine = grub_le_to_halfXX (e->e_machine);
|
||||
+ e->e_version = grub_le_to_wordXX (e->e_version);
|
||||
+ e->e_entry = grub_le_to_addrXX (e->e_entry);
|
||||
+ e->e_phoff = grub_le_to_offXX (e->e_phoff);
|
||||
+ e->e_shoff = grub_le_to_offXX (e->e_shoff);
|
||||
+ e->e_flags = grub_le_to_wordXX (e->e_flags);
|
||||
+ e->e_ehsize = grub_le_to_halfXX (e->e_ehsize);
|
||||
+ e->e_phentsize = grub_le_to_halfXX (e->e_phentsize);
|
||||
+ e->e_phnum = grub_le_to_halfXX (e->e_phnum);
|
||||
+ e->e_shentsize = grub_le_to_halfXX (e->e_shentsize);
|
||||
+ e->e_shnum = grub_le_to_halfXX (e->e_shnum);
|
||||
+ e->e_shstrndx = grub_le_to_halfXX (e->e_shstrndx);
|
||||
+
|
||||
+ FOR_ELFXX_PHDRS (elf,phdr)
|
||||
+ {
|
||||
+ phdr->p_type = grub_le_to_wordXX (phdr->p_type);
|
||||
+ phdr->p_flags = grub_le_to_wordXX (phdr->p_flags);
|
||||
+ phdr->p_offset = grub_le_to_offXX (phdr->p_offset);
|
||||
+ phdr->p_vaddr = grub_le_to_addrXX (phdr->p_vaddr);
|
||||
+ phdr->p_paddr = grub_le_to_addrXX (phdr->p_paddr);
|
||||
+ phdr->p_filesz = grub_le_to_XwordXX (phdr->p_filesz);
|
||||
+ phdr->p_memsz = grub_le_to_XwordXX (phdr->p_memsz);
|
||||
+ phdr->p_align = grub_le_to_XwordXX (phdr->p_align);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+grub_err_t
|
||||
+grub_elfXX_check_version (grub_elf_t elf)
|
||||
+{
|
||||
+ if (elf->ehdr.ehdrXX.e_version != EV_CURRENT)
|
||||
+ return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-independent ELF magic"));
|
||||
+
|
||||
+ return GRUB_ERR_NONE;
|
||||
+}
|
||||
--
|
||||
1.9.3
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f6c702b2a8ea58f27a2b02928bb77973cb5a827af08f63db38c471c0a01b418d
|
||||
size 5798740
|
3
grub-2.02~beta3.tar.xz
Normal file
3
grub-2.02~beta3.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:30ec3d555e52a702c3eef449872ef874eff28b320f40b55ffc47f70db8e5ada1
|
||||
size 6030784
|
@ -21,7 +21,7 @@ Index: grub-2.02~beta2/util/grub-mkconfig.in
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-mkconfig.in
|
||||
+++ grub-2.02~beta2/util/grub-mkconfig.in
|
||||
@@ -224,7 +224,8 @@ export GRUB_DEFAULT \
|
||||
@@ -227,7 +227,8 @@ export GRUB_DEFAULT \
|
||||
GRUB_ENABLE_CRYPTODISK \
|
||||
GRUB_BADRAM \
|
||||
GRUB_OS_PROBER_SKIP_LIST \
|
||||
@ -35,7 +35,7 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub.d/10_linux.in
|
||||
+++ grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
@@ -238,7 +238,7 @@ while [ "x$list" != "x" ] ; do
|
||||
@@ -240,7 +240,7 @@ while [ "x$list" != "x" ] ; do
|
||||
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
|
||||
if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
|
||||
linux_entry "${OS}" "${version}" recovery \
|
||||
@ -43,4 +43,4 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_RECOVERY}"
|
||||
fi
|
||||
|
||||
list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
|
||||
list=`echo $list | tr ' ' '\n' | fgrep -vx "$linux" | tr '\n' ' '`
|
||||
|
@ -1,134 +0,0 @@
|
||||
From c1be7e90be547f6e3f2d7a5c0519f2efa31f495b Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Wed, 17 Sep 2014 16:30:11 -0400
|
||||
Subject: [PATCH] Initialized initrd_ctx so we don't free a random pointer from
|
||||
the stack.
|
||||
|
||||
Currently, if "linux" fails, the "goto fail;" in grub_cmd_initrd sends us
|
||||
into grub_initrd_close() without grub_initrd_init() being called, and thus
|
||||
it never clears initrd_ctx->components. grub_initrd_close() then frees that
|
||||
address, which is stale data from the stack. If the stack happens to have a
|
||||
stale *address* there that matches a recent allocation, then you'll get a
|
||||
double free later.
|
||||
|
||||
So initialize the memory up front.
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
grub-core/loader/arm/linux.c | 2 +-
|
||||
grub-core/loader/arm64/linux.c | 2 +-
|
||||
grub-core/loader/i386/linux.c | 2 +-
|
||||
grub-core/loader/i386/pc/linux.c | 2 +-
|
||||
grub-core/loader/ia64/efi/linux.c | 2 +-
|
||||
grub-core/loader/mips/linux.c | 2 +-
|
||||
grub-core/loader/powerpc/ieee1275/linux.c | 2 +-
|
||||
grub-core/loader/sparc64/ieee1275/linux.c | 2 +-
|
||||
8 files changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
|
||||
index e6770d9..62cbe75 100644
|
||||
--- a/grub-core/loader/arm/linux.c
|
||||
+++ b/grub-core/loader/arm/linux.c
|
||||
@@ -396,7 +396,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
{
|
||||
grub_file_t file;
|
||||
grub_size_t size = 0;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||
index f1d10a1..0dc144e 100644
|
||||
--- a/grub-core/loader/arm64/linux.c
|
||||
+++ b/grub-core/loader/arm64/linux.c
|
||||
@@ -328,7 +328,7 @@ static grub_err_t
|
||||
grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
int initrd_size, initrd_pages;
|
||||
void *initrd_mem = NULL;
|
||||
|
||||
diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c
|
||||
index 31fb91e..2ae1763 100644
|
||||
--- a/grub-core/loader/i386/linux.c
|
||||
+++ b/grub-core/loader/i386/linux.c
|
||||
@@ -1050,7 +1050,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
grub_addr_t addr_min, addr_max;
|
||||
grub_addr_t addr;
|
||||
grub_err_t err;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c
|
||||
index 672c013..b481e46 100644
|
||||
--- a/grub-core/loader/i386/pc/linux.c
|
||||
+++ b/grub-core/loader/i386/pc/linux.c
|
||||
@@ -388,7 +388,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
grub_uint8_t *initrd_chunk;
|
||||
grub_addr_t initrd_addr;
|
||||
grub_err_t err;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
diff --git a/grub-core/loader/ia64/efi/linux.c b/grub-core/loader/ia64/efi/linux.c
|
||||
index 87ac49f..eb78e6e 100644
|
||||
--- a/grub-core/loader/ia64/efi/linux.c
|
||||
+++ b/grub-core/loader/ia64/efi/linux.c
|
||||
@@ -568,7 +568,7 @@ static grub_err_t
|
||||
grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
int argc, char *argv[])
|
||||
{
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c
|
||||
index ef64a5b..4a3e8c5 100644
|
||||
--- a/grub-core/loader/mips/linux.c
|
||||
+++ b/grub-core/loader/mips/linux.c
|
||||
@@ -415,7 +415,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
void *initrd_src;
|
||||
grub_addr_t initrd_dest;
|
||||
grub_err_t err;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||
diff --git a/grub-core/loader/powerpc/ieee1275/linux.c b/grub-core/loader/powerpc/ieee1275/linux.c
|
||||
index 4a14f66..787d7dc 100644
|
||||
--- a/grub-core/loader/powerpc/ieee1275/linux.c
|
||||
+++ b/grub-core/loader/powerpc/ieee1275/linux.c
|
||||
@@ -333,7 +333,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
grub_size_t size = 0;
|
||||
grub_addr_t first_addr;
|
||||
grub_addr_t addr;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
diff --git a/grub-core/loader/sparc64/ieee1275/linux.c b/grub-core/loader/sparc64/ieee1275/linux.c
|
||||
index de6ee2f..c5e8dfa 100644
|
||||
--- a/grub-core/loader/sparc64/ieee1275/linux.c
|
||||
+++ b/grub-core/loader/sparc64/ieee1275/linux.c
|
||||
@@ -373,7 +373,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||
grub_addr_t paddr;
|
||||
grub_addr_t addr;
|
||||
int ret;
|
||||
- struct grub_linux_initrd_context initrd_ctx;
|
||||
+ struct grub_linux_initrd_context initrd_ctx = { 0, };
|
||||
|
||||
if (argc == 0)
|
||||
{
|
||||
--
|
||||
1.8.4.5
|
||||
|
@ -1,40 +0,0 @@
|
||||
From 3aed1012cb8f559a0241569d6ec6b1be23844b05 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Salter <msalter@redhat.com>
|
||||
Date: Thu, 20 Feb 2014 12:54:52 -0500
|
||||
Subject: [PATCH 139/152] Reduce timer event frequency by 10
|
||||
|
||||
Timer event to keep grub msec counter was running at 1000HZ. This was too
|
||||
fast for UEFI timer driver and resulted in a 10x slowdown in grub time
|
||||
versus wallclock. Reduce the timer event frequency and increase tick
|
||||
increment accordingly to keep better time.
|
||||
|
||||
Signed-off-by: Mark Salter <msalter@redhat.com>
|
||||
---
|
||||
grub-core/kern/arm/efi/init.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/kern/arm/efi/init.c b/grub-core/kern/arm/efi/init.c
|
||||
index a6ae034..0c17d83 100644
|
||||
--- a/grub-core/kern/arm/efi/init.c
|
||||
+++ b/grub-core/kern/arm/efi/init.c
|
||||
@@ -38,7 +38,7 @@ static void
|
||||
increment_timer (grub_efi_event_t event __attribute__ ((unused)),
|
||||
void *context __attribute__ ((unused)))
|
||||
{
|
||||
- tmr++;
|
||||
+ tmr += 10;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -52,7 +52,7 @@ grub_machine_init (void)
|
||||
|
||||
efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL,
|
||||
GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt);
|
||||
- efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 10000);
|
||||
+ efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 100000);
|
||||
|
||||
grub_install_get_time_ms (grub_efi_get_time_ms);
|
||||
}
|
||||
--
|
||||
1.9.3
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 4fe8e6d4a1279b1840171d8e797d911cd8443333 Mon Sep 17 00:00:00 2001
|
||||
From: Josef Bacik <jbacik@fb.com>
|
||||
Date: Thu, 6 Aug 2015 10:49:46 -0700
|
||||
Subject: [PATCH] efinet: handle get_status() on buggy firmware properly
|
||||
|
||||
The EFI spec indicates that get_status() should return the address of the buffer
|
||||
we passed into transmit to indicate the the buffer was transmitted. However we
|
||||
have boxes where the firmware returns some arbitrary address instead, which
|
||||
makes grub think that we've not sent anything. So since we have the SNP stuff
|
||||
opened in exclusive mode just assume any non-NULL txbuf means that our transmit
|
||||
occurred properly. This makes grub able to do its networking stuff properly on
|
||||
our broken firmware. Thanks,
|
||||
|
||||
cc: Peter Jones <pjones@redhat.com>
|
||||
Signed-off-by: Josef Bacik <jbacik@fb.com>
|
||||
---
|
||||
grub-core/net/drivers/efi/efinet.c | 21 +++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c
|
||||
index 70b26af..5388f95 100644
|
||||
--- a/grub-core/net/drivers/efi/efinet.c
|
||||
+++ b/grub-core/net/drivers/efi/efinet.c
|
||||
@@ -47,19 +47,19 @@ send_card_buffer (struct grub_net_card *dev,
|
||||
if (st != GRUB_EFI_SUCCESS)
|
||||
return grub_error (GRUB_ERR_IO,
|
||||
N_("couldn't send network packet"));
|
||||
- if (txbuf == dev->txbuf)
|
||||
+ /*
|
||||
+ Some buggy firmware could return an arbitrary address instead of the
|
||||
+ txbuf address we trasmitted, so just check that txbuf is non NULL
|
||||
+ for success. This is ok because we open the SNP protocol in
|
||||
+ exclusive mode so we know we're the only ones transmitting on this
|
||||
+ box and since we only transmit one packet at a time we know our
|
||||
+ transmit was successfull.
|
||||
+ */
|
||||
+ if (txbuf)
|
||||
{
|
||||
dev->txbusy = 0;
|
||||
break;
|
||||
}
|
||||
- if (txbuf)
|
||||
- {
|
||||
- st = efi_call_7 (net->transmit, net, 0, dev->last_pkt_size,
|
||||
- dev->txbuf, NULL, NULL, NULL);
|
||||
- if (st != GRUB_EFI_SUCCESS)
|
||||
- return grub_error (GRUB_ERR_IO,
|
||||
- N_("couldn't send network packet"));
|
||||
- }
|
||||
if (limit_time < grub_get_time_ms ())
|
||||
return grub_error (GRUB_ERR_TIMEOUT,
|
||||
N_("couldn't send network packet"));
|
||||
@@ -84,8 +84,9 @@ send_card_buffer (struct grub_net_card *dev,
|
||||
we run in the GRUB_ERR_TIMEOUT case above.
|
||||
Perhaps a timeout in the FW has discarded the recycle buffer.
|
||||
*/
|
||||
+ txbuf = NULL;
|
||||
st = efi_call_3 (net->get_status, net, 0, &txbuf);
|
||||
- dev->txbusy = !(st == GRUB_EFI_SUCCESS && txbuf == dev->txbuf);
|
||||
+ dev->txbusy = !(st == GRUB_EFI_SUCCESS && txbuf);
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
--
|
||||
2.5.1
|
||||
|
@ -1,31 +0,0 @@
|
||||
From 4d21c1019904598a991e847eef049c65f9c49bd9 Mon Sep 17 00:00:00 2001
|
||||
From: Leif Lindholm <leif.lindholm@linaro.org>
|
||||
Date: Tue, 7 Jan 2014 17:52:50 +0000
|
||||
Subject: [PATCH] arm64: set correct length of device path end entry
|
||||
|
||||
The length of the Device Path End entry in the grub_linux_boot()
|
||||
function was incorrectly set to 0. This triggers an assert failure
|
||||
in debug builds of Tianocore.
|
||||
|
||||
Set it to sizeof (grub_efi_device_path_t).
|
||||
---
|
||||
ChangeLog | 4 ++++
|
||||
grub-core/loader/arm64/linux.c | 2 +-
|
||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||
index 9d15aad..75ad871 100644
|
||||
--- a/grub-core/loader/arm64/linux.c
|
||||
+++ b/grub-core/loader/arm64/linux.c
|
||||
@@ -268,7 +268,7 @@ grub_linux_boot (void)
|
||||
|
||||
mempath[1].header.type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||
mempath[1].header.subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||
- mempath[1].header.length = 0;
|
||||
+ mempath[1].header.length = sizeof (grub_efi_device_path_t);
|
||||
|
||||
b = grub_efi_system_table->boot_services;
|
||||
status = b->load_image (0, grub_efi_image_handle,
|
||||
--
|
||||
2.3.2
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 3ac342205dc81293bb8e2d91b8c5ebe124b4ad35 Mon Sep 17 00:00:00 2001
|
||||
From: dann frazier <dann.frazier@canonical.com>
|
||||
Date: Thu, 21 May 2015 10:28:48 -0600
|
||||
Subject: [PATCH 1/2] arm64/setjmp: Add missing license macro
|
||||
|
||||
Including the setjmp module in an arm64-efi image will cause it to
|
||||
immediately exit with an "incompatible license" error.
|
||||
|
||||
The source file includes a GPLv3+ boilerplate, so fix this by declaring a
|
||||
GPLv3+ license using the GRUB_MOD_LICENSE macro.
|
||||
|
||||
Signed-off-by: dann frazier <dann.frazier@canonical.com>
|
||||
---
|
||||
grub-core/lib/arm64/setjmp.S | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/grub-core/lib/arm64/setjmp.S b/grub-core/lib/arm64/setjmp.S
|
||||
index adaafe4..eabfd99 100644
|
||||
--- a/grub-core/lib/arm64/setjmp.S
|
||||
+++ b/grub-core/lib/arm64/setjmp.S
|
||||
@@ -17,8 +17,10 @@
|
||||
*/
|
||||
|
||||
#include <grub/symbol.h>
|
||||
+#include <grub/dl.h>
|
||||
|
||||
.file "setjmp.S"
|
||||
+GRUB_MOD_LICENSE "GPLv3+"
|
||||
.text
|
||||
|
||||
/*
|
||||
--
|
||||
2.4.1
|
||||
|
@ -26,8 +26,8 @@ Index: grub-2.02~beta2/grub-core/osdep/unix/config.c
|
||||
*ptr++ = *iptr;
|
||||
}
|
||||
|
||||
- strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\", "
|
||||
- "\"$GRUB_ENABLE_CRYPTODISK\", \"$GRUB_DISTRIBUTOR\"");
|
||||
- strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\n\" "
|
||||
- "\"$GRUB_ENABLE_CRYPTODISK\" \"$GRUB_DISTRIBUTOR\"");
|
||||
+ strcpy (ptr, "'; printf \"GRUB_ENABLE_CRYPTODISK=%s\\nGRUB_DISTRIBUTOR=%s\\nSUSE_BTRFS_SNAPSHOT_BOOTING=%s\\n\" "
|
||||
+ "\"$GRUB_ENABLE_CRYPTODISK\" \"$GRUB_DISTRIBUTOR\" \"$SUSE_BTRFS_SNAPSHOT_BOOTING\"");
|
||||
|
||||
@ -70,7 +70,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-install.c
|
||||
+++ grub-2.02~beta2/util/grub-install.c
|
||||
@@ -816,6 +816,8 @@ fill_core_services (const char *core_ser
|
||||
@@ -828,6 +828,8 @@ fill_core_services (const char *core_ser
|
||||
free (sysv_plist);
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
@@ -849,6 +851,9 @@ main (int argc, char *argv[])
|
||||
@@ -861,6 +863,9 @@ main (int argc, char *argv[])
|
||||
|
||||
grub_util_load_config (&config);
|
||||
|
||||
@ -89,7 +89,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
if (!bootloader_id && config.grub_distributor)
|
||||
{
|
||||
char *ptr;
|
||||
@@ -1334,6 +1339,16 @@ main (int argc, char *argv[])
|
||||
@@ -1346,6 +1351,16 @@ main (int argc, char *argv[])
|
||||
fprintf (load_cfg_f, "set debug='%s'\n",
|
||||
debug_image);
|
||||
}
|
||||
@ -110,15 +110,15 @@ Index: grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/linux/getroot.c
|
||||
+++ grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
@@ -364,6 +364,7 @@ get_btrfs_fs_prefix (const char *mount_p
|
||||
return ret;
|
||||
@@ -370,6 +370,7 @@ get_btrfs_fs_prefix (const char *mount_p
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+int use_relative_path_on_btrfs = 0;
|
||||
|
||||
char **
|
||||
grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
|
||||
@@ -502,6 +503,12 @@ grub_find_root_devices_from_mountinfo (c
|
||||
@@ -508,6 +509,12 @@ grub_find_root_devices_from_mountinfo (c
|
||||
{
|
||||
ret = grub_find_root_devices_from_btrfs (dir);
|
||||
fs_prefix = get_btrfs_fs_prefix (entries[i].enc_path);
|
||||
|
@ -28,7 +28,7 @@ Index: grub-2.02~beta2/util/grub.d/00_header.in
|
||||
+++ grub-2.02~beta2/util/grub.d/00_header.in
|
||||
@@ -27,6 +27,14 @@ export TEXTDOMAINDIR="@localedir@"
|
||||
|
||||
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
||||
. "$pkgdatadir/grub-mkconfig_lib"
|
||||
|
||||
+if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] &&
|
||||
+ [ "x${GRUB_FS}" = "xbtrfs" ] ; then
|
||||
@ -72,7 +72,7 @@ Index: grub-2.02~beta2/util/grub-mkconfig.in
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-mkconfig.in
|
||||
+++ grub-2.02~beta2/util/grub-mkconfig.in
|
||||
@@ -255,7 +255,8 @@ export GRUB_DEFAULT \
|
||||
@@ -262,7 +262,8 @@ export GRUB_DEFAULT \
|
||||
GRUB_OS_PROBER_SKIP_LIST \
|
||||
GRUB_DISABLE_SUBMENU \
|
||||
GRUB_CMDLINE_LINUX_RECOVERY \
|
||||
@ -101,7 +101,7 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
fi;;
|
||||
xzfs)
|
||||
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
||||
@@ -237,7 +241,12 @@ while [ "x$list" != "x" ] ; do
|
||||
@@ -236,7 +240,12 @@ while [ "x$list" != "x" ] ; do
|
||||
if [ $PLATFORM != "emu" ]; then
|
||||
hotkey=0
|
||||
else
|
||||
|
@ -1,28 +0,0 @@
|
||||
From 4afd0107efa6a2d9cbe6fc71c529264dc2b9fb8a Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
|
||||
Date: Mon, 31 Mar 2014 15:32:30 +0100
|
||||
Subject: [PATCH] btrfs: fix get_root key comparison failures due to endianness
|
||||
|
||||
* grub-core/fs/btrfs.c (get_root): Convert
|
||||
GRUB_BTRFS_ROOT_VOL_OBJECTID to little-endian.
|
||||
---
|
||||
ChangeLog | 7 +++++++
|
||||
grub-core/fs/btrfs.c | 2 +-
|
||||
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c
|
||||
index 89666b6..f7b6c15 100644
|
||||
--- a/grub-core/fs/btrfs.c
|
||||
+++ b/grub-core/fs/btrfs.c
|
||||
@@ -1201,7 +1201,7 @@ get_root (struct grub_btrfs_data *data, struct grub_btrfs_key *key,
|
||||
struct grub_btrfs_key key_out, key_in;
|
||||
struct grub_btrfs_root_item ri;
|
||||
|
||||
- key_in.object_id = GRUB_BTRFS_ROOT_VOL_OBJECTID;
|
||||
+ key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_ROOT_VOL_OBJECTID);
|
||||
key_in.offset = 0;
|
||||
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
|
||||
err = lower_bound (data, &key_in, &key_out,
|
||||
--
|
||||
1.8.4.5
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: grub-2.02~beta2/grub-core/fs/btrfs.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/fs/btrfs.c
|
||||
+++ grub-2.02~beta2/grub-core/fs/btrfs.c
|
||||
@@ -1051,7 +1051,7 @@ grub_btrfs_extent_read (struct grub_btrf
|
||||
|
||||
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
|
||||
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
|
||||
- && (char *) &data->extent + elemsize
|
||||
+ && (char *) data->extent + elemsize
|
||||
>= (char *) &data->extent->filled + sizeof (data->extent->filled))
|
||||
data->extend =
|
||||
data->extstart + grub_le_to_cpu64 (data->extent->filled);
|
@ -78,16 +78,16 @@ Index: grub-2.02~beta2/grub-core/kern/efi/init.c
|
||||
|
||||
void
|
||||
grub_machine_get_bootlocation (char **device, char **path)
|
||||
@@ -67,6 +129,12 @@ grub_machine_get_bootlocation (char **de
|
||||
p = grub_strrchr (*path, '/');
|
||||
if (p)
|
||||
*p = '\0';
|
||||
@@ -69,6 +131,12 @@ grub_machine_get_bootlocation (char **de
|
||||
p = grub_strrchr (*path, '/');
|
||||
if (p)
|
||||
*p = '\0';
|
||||
+
|
||||
+ if ((p = workaround_efi_firmware_path (*device, *path)))
|
||||
+ {
|
||||
+ grub_free (*path);
|
||||
+ *path = p;
|
||||
+ }
|
||||
+ if ((p = workaround_efi_firmware_path (*device, *path)))
|
||||
+ {
|
||||
+ grub_free (*path);
|
||||
+ *path = p;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -34,7 +34,7 @@ Index: grub-2.02~beta2/util/grub.d/20_linux_xen.in
|
||||
|
||||
+ME=$(basename $0)
|
||||
+
|
||||
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
||||
. "$pkgdatadir/grub-mkconfig_lib"
|
||||
|
||||
export TEXTDOMAIN=@PACKAGE@
|
||||
@@ -36,9 +38,11 @@ CLASS="--class gnu-linux --class gnu --c
|
||||
@ -152,7 +152,7 @@ Index: grub-2.02~beta2/util/grub.d/20_linux_xen.in
|
||||
if [ x"$is_top_level" != xtrue ]; then
|
||||
echo ' }'
|
||||
fi
|
||||
- xen_list=`echo $xen_list | tr ' ' '\n' | grep -vx $current_xen | tr '\n' ' '`
|
||||
- xen_list=`echo $xen_list | tr ' ' '\n' | fgrep -vx "$current_xen" | tr '\n' ' '`
|
||||
done
|
||||
|
||||
# If at least one kernel was found, then we need to
|
||||
|
@ -33,8 +33,8 @@ Index: grub-2.02~beta2/util/grub-mkconfig_lib.in
|
||||
+++ grub-2.02~beta2/util/grub-mkconfig_lib.in
|
||||
@@ -248,6 +248,11 @@ version_test_gt ()
|
||||
*.old:*.old) ;;
|
||||
*.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
|
||||
*:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
|
||||
*.old:*) version_test_gt_a="`echo "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
|
||||
*:*.old) version_test_gt_b="`echo "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
|
||||
+# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
|
||||
+# The dbg version should be placed after release version
|
||||
+ dbg-*:dbg-*) ;;
|
||||
@ -60,11 +60,14 @@ Index: grub-2.02~beta2/util/grub.d/20_linux_xen.in
|
||||
CLASS="--class gnu-linux --class gnu --class os --class xen"
|
||||
|
||||
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
||||
@@ -165,9 +171,17 @@ file_is_not_sym () {
|
||||
@@ -166,10 +172,18 @@ file_is_not_sym () {
|
||||
esac
|
||||
}
|
||||
|
||||
-xen_list=`for i in /boot/xen*; do
|
||||
-xen_list=
|
||||
-for i in /boot/xen*; do
|
||||
- if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then xen_list="$xen_list $i" ; fi
|
||||
-done
|
||||
+# bnc#877040 - Duplicate entries for boot menu created
|
||||
+# only create /boot/xen.gz symlink boot entry
|
||||
+if test -L /boot/xen.gz; then
|
||||
@ -72,10 +75,10 @@ Index: grub-2.02~beta2/util/grub.d/20_linux_xen.in
|
||||
+else
|
||||
+ # bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
|
||||
+ # wildcard expasion with correct suffix (.gz) for not generating many duplicated menu entries
|
||||
+ xen_list=`for i in /boot/xen*.gz; do
|
||||
if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi
|
||||
- done`
|
||||
+ done`
|
||||
+ xen_list=
|
||||
+ for i in /boot/xen*.gz; do
|
||||
+ if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then xen_list="$xen_list $i" ; fi
|
||||
+ done
|
||||
+fi
|
||||
prepare_boot_cache=
|
||||
boot_device_id=
|
||||
@ -84,7 +87,7 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub.d/10_linux.in
|
||||
+++ grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
@@ -207,6 +207,40 @@ while [ "x$list" != "x" ] ; do
|
||||
@@ -209,6 +209,40 @@ while [ "x$list" != "x" ] ; do
|
||||
fi
|
||||
done
|
||||
|
||||
|
@ -1,25 +0,0 @@
|
||||
Index: grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/linux/getroot.c
|
||||
+++ grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
@@ -324,9 +324,9 @@ get_btrfs_fs_prefix (const char *mount_p
|
||||
|
||||
tree_id = sargs.buf[2];
|
||||
br = (struct grub_btrfs_root_backref *) (sargs.buf + 4);
|
||||
- inode_id = br->inode_id;
|
||||
+ inode_id = grub_le_to_cpu64 (br->inode_id);
|
||||
name = br->name;
|
||||
- namelen = br->n;
|
||||
+ namelen = grub_le_to_cpu16 (br->n);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -353,7 +353,7 @@ get_btrfs_fs_prefix (const char *mount_p
|
||||
|
||||
ir = (struct grub_btrfs_inode_ref *) (sargs.buf + 4);
|
||||
name = ir->name;
|
||||
- namelen = ir->n;
|
||||
+ namelen = grub_le_to_cpu16 (ir->n);
|
||||
}
|
||||
old = ret;
|
||||
ret = xmalloc (namelen + (old ? strlen (old) : 0) + 2);
|
@ -1,36 +0,0 @@
|
||||
From 9706066791b994a55fb2d3d532a86aa1fde2a457 Mon Sep 17 00:00:00 2001
|
||||
From: Vladimir Serbinenko <phcoder@gmail.com>
|
||||
Date: Thu, 3 Apr 2014 21:31:12 +0200
|
||||
Subject: [PATCH] * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Support NVMe device names.
|
||||
References: bnc#873132
|
||||
|
||||
---
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/osdep/linux/getroot.c
|
||||
+++ grub-2.02~beta2/grub-core/osdep/linux/getroot.c
|
||||
@@ -883,6 +883,23 @@ grub_util_part_to_disk (const char *os_d
|
||||
*pp = '\0';
|
||||
return path;
|
||||
}
|
||||
+
|
||||
+ /* If this is a NVMe device */
|
||||
+ if ((strncmp ("nvme", p, 4) == 0) && p[4] >= '0' && p[4] <= '9')
|
||||
+ {
|
||||
+ char *pp = p + 4;
|
||||
+ while (*pp >= '0' && *pp <= '9')
|
||||
+ pp++;
|
||||
+ if (*pp == 'n')
|
||||
+ pp++;
|
||||
+ while (*pp >= '0' && *pp <= '9')
|
||||
+ pp++;
|
||||
+ if (*pp == 'p')
|
||||
+ *is_part = 1;
|
||||
+ /* /dev/nvme[0-9]+n[0-9]+p[0-9]* */
|
||||
+ *pp = '\0';
|
||||
+ return path;
|
||||
+ }
|
||||
}
|
||||
|
||||
return path;
|
@ -1,34 +0,0 @@
|
||||
* grub-core/kern/emu/hostfs.c: squahes below warning
|
||||
warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
|
||||
|
||||
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
||||
|
||||
Upstream-Status: Submitted
|
||||
---
|
||||
grub-core/kern/emu/hostfs.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/grub-core/kern/emu/hostfs.c b/grub-core/kern/emu/hostfs.c
|
||||
index 7e725f6..823116d 100644
|
||||
--- a/grub-core/kern/emu/hostfs.c
|
||||
+++ b/grub-core/kern/emu/hostfs.c
|
||||
@@ -19,7 +19,11 @@
|
||||
|
||||
#include <config-util.h>
|
||||
|
||||
+/* Legacy feature macro.*/
|
||||
#define _BSD_SOURCE
|
||||
+/* New feature macro that provides everything _BSD_SOURCE and
|
||||
+ * _SVID_SOURCE provided and possibly more. */
|
||||
+#define _DEFAULT_SOURCE
|
||||
#include <grub/fs.h>
|
||||
#include <grub/file.h>
|
||||
#include <grub/disk.h>
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
||||
_______________________________________________
|
||||
Grub-devel mailing list
|
||||
Grub-devel@gnu.org
|
||||
https://lists.gnu.org/mailman/listinfo/grub-devel
|
@ -6,9 +6,9 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
+++ grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
@@ -190,6 +190,7 @@ EOF
|
||||
machine=`uname -m`
|
||||
case "$machine" in
|
||||
i?86 | x86_64) klist="/boot/vmlinuz-* /vmlinuz-* /boot/kernel-*" ;;
|
||||
+ aarch64) klist="/boot/Image-* /Image-* /boot/kernel-*" ;;
|
||||
s390 | s390x) klist="/boot/image-* /boot/kernel-*" ;;
|
||||
case "x$machine" in
|
||||
xi?86 | xx86_64) klist="/boot/vmlinuz-* /vmlinuz-* /boot/kernel-*" ;;
|
||||
+ xaarch64) klist="/boot/Image-* /Image-* /boot/kernel-*" ;;
|
||||
xs390 | xs390x) klist="/boot/image-* /boot/kernel-*" ;;
|
||||
*) klist="/boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* \
|
||||
/boot/kernel-*" ;;
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: grub-2.02~beta2/grub-core/net/net.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/net/net.c
|
||||
+++ grub-2.02~beta2/grub-core/net/net.c
|
||||
@@ -1453,7 +1453,7 @@ receive_packets (struct grub_net_card *c
|
||||
}
|
||||
card->opened = 1;
|
||||
}
|
||||
- while (1)
|
||||
+ while (received < 100)
|
||||
{
|
||||
/* Maybe should be better have a fixed number of packets for each card
|
||||
and just mark them as used and not used. */
|
@ -26,9 +26,9 @@ parameters
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/kern/ieee1275/openfw.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/ieee1275/openfw.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/ieee1275/openfw.c
|
||||
@@ -561,3 +561,65 @@ grub_ieee1275_canonicalise_devname (cons
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/ieee1275/openfw.c 2016-01-29 23:08:47.560532720 +0300
|
||||
+++ grub-2.02~beta2/grub-core/kern/ieee1275/openfw.c 2016-01-29 23:08:47.556532720 +0300
|
||||
@@ -590,3 +590,65 @@
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -96,19 +96,19 @@ Index: grub-2.02~beta2/grub-core/kern/ieee1275/openfw.c
|
||||
+}
|
||||
Index: grub-2.02~beta2/grub-core/normal/main.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/normal/main.c
|
||||
+++ grub-2.02~beta2/grub-core/normal/main.c
|
||||
@@ -32,6 +32,9 @@
|
||||
#include <grub/i18n.h>
|
||||
--- grub-2.02~beta2.orig/grub-core/normal/main.c 2016-01-29 23:08:47.560532720 +0300
|
||||
+++ grub-2.02~beta2/grub-core/normal/main.c 2016-01-29 23:09:59.812533575 +0300
|
||||
@@ -33,6 +33,9 @@
|
||||
#include <grub/charset.h>
|
||||
#include <grub/script_sh.h>
|
||||
#include <grub/bufio.h>
|
||||
+#ifdef GRUB_MACHINE_IEEE1275
|
||||
+#include <grub/ieee1275/ieee1275.h>
|
||||
+#endif
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
@@ -267,6 +270,21 @@ grub_normal_execute (const char *config,
|
||||
@@ -275,6 +278,21 @@
|
||||
{
|
||||
menu = read_config_file (config);
|
||||
|
||||
@ -132,8 +132,8 @@ Index: grub-2.02~beta2/grub-core/normal/main.c
|
||||
}
|
||||
Index: grub-2.02~beta2/grub-core/script/execute.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/script/execute.c
|
||||
+++ grub-2.02~beta2/grub-core/script/execute.c
|
||||
--- grub-2.02~beta2.orig/grub-core/script/execute.c 2016-01-29 23:08:47.560532720 +0300
|
||||
+++ grub-2.02~beta2/grub-core/script/execute.c 2016-01-29 23:08:47.560532720 +0300
|
||||
@@ -27,6 +27,9 @@
|
||||
#include <grub/normal.h>
|
||||
#include <grub/extcmd.h>
|
||||
@ -144,7 +144,7 @@ Index: grub-2.02~beta2/grub-core/script/execute.c
|
||||
|
||||
/* Max digits for a char is 3 (0xFF is 255), similarly for an int it
|
||||
is sizeof (int) * 3, and one extra for a possible -ve sign. */
|
||||
@@ -861,6 +864,10 @@ grub_script_execute_sourcecode (const ch
|
||||
@@ -877,6 +880,10 @@
|
||||
grub_err_t ret = 0;
|
||||
struct grub_script *parsed_script;
|
||||
|
||||
@ -157,9 +157,9 @@ Index: grub-2.02~beta2/grub-core/script/execute.c
|
||||
char *line;
|
||||
Index: grub-2.02~beta2/include/grub/ieee1275/ieee1275.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/ieee1275/ieee1275.h
|
||||
+++ grub-2.02~beta2/include/grub/ieee1275/ieee1275.h
|
||||
@@ -234,6 +234,8 @@ int EXPORT_FUNC(grub_ieee1275_devalias_n
|
||||
--- grub-2.02~beta2.orig/include/grub/ieee1275/ieee1275.h 2016-01-29 23:08:47.560532720 +0300
|
||||
+++ grub-2.02~beta2/include/grub/ieee1275/ieee1275.h 2016-01-29 23:08:47.560532720 +0300
|
||||
@@ -242,6 +242,8 @@
|
||||
void EXPORT_FUNC(grub_ieee1275_children_peer) (struct grub_ieee1275_devalias *alias);
|
||||
void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath,
|
||||
struct grub_ieee1275_devalias *alias);
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 90f6eed0b4ffdfe361c2966e62fcb8ed11b528bc Mon Sep 17 00:00:00 2001
|
||||
From: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
|
||||
Date: Thu, 20 Mar 2014 16:39:29 +0530
|
||||
Subject: [PATCH] ieee1275: check for IBM pseries emulated machine
|
||||
|
||||
As there is no check for IBM pSeries qemu machine, is_qemu is not
|
||||
set. So feature like GRUB_IEEE1275_FLAG_HAS_CURSORONOFF is not
|
||||
enabled. This results in cursor not being displayed during the
|
||||
grub-menu.
|
||||
|
||||
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
|
||||
---
|
||||
grub-core/kern/ieee1275/cmain.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c
|
||||
index d92ae14..3e12e6b 100644
|
||||
--- a/grub-core/kern/ieee1275/cmain.c
|
||||
+++ b/grub-core/kern/ieee1275/cmain.c
|
||||
@@ -84,8 +84,10 @@ grub_ieee1275_find_options (void)
|
||||
|
||||
rc = grub_ieee1275_get_property (root, "model",
|
||||
tmp, sizeof (tmp), 0);
|
||||
- if (rc >= 0 && !grub_strcmp (tmp, "Emulated PC"))
|
||||
+ if (rc >= 0 && (!grub_strcmp (tmp, "Emulated PC")
|
||||
+ || !grub_strcmp (tmp, "IBM pSeries (emulated by qemu)"))) {
|
||||
is_qemu = 1;
|
||||
+ }
|
||||
|
||||
if (rc >= 0 && grub_strncmp (tmp, "IBM", 3) == 0)
|
||||
grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS);
|
||||
--
|
||||
1.8.3.1
|
@ -11,12 +11,12 @@
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.core.def
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
@@ -1674,9 +1674,9 @@ module = {
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.core.def 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.core.def 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -1667,9 +1667,9 @@
|
||||
ia64_efi = loader/ia64/efi/linux.c;
|
||||
arm = loader/arm/linux.c;
|
||||
arm64 = loader/arm64/linux.c;
|
||||
fdt = lib/fdt.c;
|
||||
+ emu = loader/emu/linux.c;
|
||||
common = loader/linux.c;
|
||||
common = lib/cmdline.c;
|
||||
@ -26,8 +26,8 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
module = {
|
||||
Index: grub-2.02~beta2/grub-core/loader/emu/linux.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02~beta2/grub-core/loader/emu/linux.c
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ grub-2.02~beta2/grub-core/loader/emu/linux.c 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -0,0 +1,173 @@
|
||||
+/*
|
||||
+ * GRUB -- GRand Unified Bootloader
|
||||
@ -204,8 +204,8 @@ Index: grub-2.02~beta2/grub-core/loader/emu/linux.c
|
||||
+}
|
||||
Index: grub-2.02~beta2/include/grub/emu/hostfile.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/hostfile.h
|
||||
+++ grub-2.02~beta2/include/grub/emu/hostfile.h
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/hostfile.h 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/include/grub/emu/hostfile.h 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <grub/disk.h>
|
||||
#include <grub/partition.h>
|
||||
@ -214,7 +214,7 @@ Index: grub-2.02~beta2/include/grub/emu/hostfile.h
|
||||
#include <grub/osdep/hostfile.h>
|
||||
|
||||
int
|
||||
@@ -29,7 +30,7 @@ grub_util_is_directory (const char *path
|
||||
@@ -29,7 +30,7 @@
|
||||
int
|
||||
grub_util_is_special_file (const char *path);
|
||||
int
|
||||
@ -225,8 +225,8 @@ Index: grub-2.02~beta2/include/grub/emu/hostfile.h
|
||||
grub_util_path_concat (size_t n, ...);
|
||||
Index: grub-2.02~beta2/include/grub/emu/exec.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/exec.h
|
||||
+++ grub-2.02~beta2/include/grub/emu/exec.h
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/exec.h 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/include/grub/emu/exec.h 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -23,6 +23,8 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
@ -236,7 +236,7 @@ Index: grub-2.02~beta2/include/grub/emu/exec.h
|
||||
pid_t
|
||||
grub_util_exec_pipe (const char *const *argv, int *fd);
|
||||
pid_t
|
||||
@@ -32,7 +34,7 @@ int
|
||||
@@ -32,7 +34,7 @@
|
||||
grub_util_exec_redirect_all (const char *const *argv, const char *stdin_file,
|
||||
const char *stdout_file, const char *stderr_file);
|
||||
int
|
||||
@ -247,9 +247,9 @@ Index: grub-2.02~beta2/include/grub/emu/exec.h
|
||||
const char *stdout_file);
|
||||
Index: grub-2.02~beta2/grub-core/Makefile.am
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.am
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.am
|
||||
@@ -243,6 +243,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/inc
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.am 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.am 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -258,6 +258,7 @@
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostdisk.h
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostfile.h
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||
@ -259,9 +259,9 @@ Index: grub-2.02~beta2/grub-core/Makefile.am
|
||||
endif
|
||||
Index: grub-2.02~beta2/grub-core/kern/emu/main.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/emu/main.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/emu/main.c
|
||||
@@ -95,6 +95,7 @@ static struct argp_option options[] = {
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/emu/main.c 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/grub-core/kern/emu/main.c 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -106,6 +106,7 @@
|
||||
N_("use GRUB files in the directory DIR [default=%s]"), 0},
|
||||
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
|
||||
{"hold", 'H', N_("SECS"), OPTION_ARG_OPTIONAL, N_("wait until a debugger will attach"), 0},
|
||||
@ -269,7 +269,7 @@ Index: grub-2.02~beta2/grub-core/kern/emu/main.c
|
||||
{ 0, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
@@ -148,6 +149,9 @@ argp_parser (int key, char *arg, struct
|
||||
@@ -163,6 +164,9 @@
|
||||
case 'v':
|
||||
verbosity++;
|
||||
break;
|
||||
@ -281,9 +281,9 @@ Index: grub-2.02~beta2/grub-core/kern/emu/main.c
|
||||
{
|
||||
Index: grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/emu/misc.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
@@ -38,6 +38,7 @@
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/emu/misc.c 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/grub-core/kern/emu/misc.c 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <grub/emu/misc.h>
|
||||
|
||||
int verbosity;
|
||||
@ -291,7 +291,7 @@ Index: grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
|
||||
void
|
||||
grub_util_warn (const char *fmt, ...)
|
||||
@@ -81,7 +82,7 @@ grub_util_error (const char *fmt, ...)
|
||||
@@ -80,7 +81,7 @@
|
||||
vfprintf (stderr, fmt, ap);
|
||||
va_end (ap);
|
||||
fprintf (stderr, ".\n");
|
||||
@ -300,7 +300,7 @@ Index: grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
}
|
||||
|
||||
void *
|
||||
@@ -138,6 +139,9 @@ xasprintf (const char *fmt, ...)
|
||||
@@ -138,6 +139,9 @@
|
||||
void
|
||||
grub_exit (void)
|
||||
{
|
||||
@ -309,10 +309,10 @@ Index: grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
+#endif
|
||||
exit (1);
|
||||
}
|
||||
#endif
|
||||
@@ -199,3 +203,15 @@
|
||||
|
||||
@@ -150,3 +154,15 @@ grub_get_time_ms (void)
|
||||
|
||||
return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
|
||||
fclose (fp);
|
||||
}
|
||||
+
|
||||
+void
|
||||
@ -328,15 +328,15 @@ Index: grub-2.02~beta2/grub-core/kern/emu/misc.c
|
||||
+}
|
||||
Index: grub-2.02~beta2/include/grub/emu/misc.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/misc.h
|
||||
+++ grub-2.02~beta2/include/grub/emu/misc.h
|
||||
@@ -59,6 +59,9 @@ void EXPORT_FUNC(grub_util_warn) (const
|
||||
void EXPORT_FUNC(grub_util_info) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
||||
void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2), noreturn));
|
||||
--- grub-2.02~beta2.orig/include/grub/emu/misc.h 2016-01-29 22:59:52.244526390 +0300
|
||||
+++ grub-2.02~beta2/include/grub/emu/misc.h 2016-01-29 22:59:52.240526390 +0300
|
||||
@@ -60,6 +60,9 @@
|
||||
void EXPORT_FUNC(grub_util_info) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2)));
|
||||
void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2), noreturn));
|
||||
|
||||
+void EXPORT_FUNC(grub_util_set_kexecute) (void);
|
||||
+int EXPORT_FUNC(grub_util_get_kexecute) (void) WARN_UNUSED_RESULT;
|
||||
+
|
||||
grub_uint64_t EXPORT_FUNC (grub_util_get_cpu_time_ms) (void);
|
||||
|
||||
extern char * canonicalize_file_name (const char *path);
|
||||
#ifdef HAVE_DEVICE_MAPPER
|
||||
|
@ -81,7 +81,7 @@ Index: grub-2.02~beta2/Makefile.util.def
|
||||
@@ -385,6 +387,7 @@ program = {
|
||||
ldadd = libgrubkern.a;
|
||||
ldadd = grub-core/gnulib/libgnu.a;
|
||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)';
|
||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||
+ emu_condition = COND_NOT_s390x;
|
||||
};
|
||||
|
||||
@ -94,16 +94,7 @@ Index: grub-2.02~beta2/Makefile.util.def
|
||||
};
|
||||
|
||||
data = {
|
||||
@@ -620,7 +624,7 @@ program = {
|
||||
common = grub-core/disk/host.c;
|
||||
|
||||
common = util/resolve.c;
|
||||
- enable = noemu;
|
||||
+ emu_condition = COND_s390x;
|
||||
common = grub-core/kern/emu/argp_common.c;
|
||||
common = grub-core/osdep/init.c;
|
||||
|
||||
@@ -688,6 +692,38 @@ script = {
|
||||
@@ -687,6 +691,38 @@ script = {
|
||||
};
|
||||
|
||||
script = {
|
||||
@ -142,7 +133,7 @@ Index: grub-2.02~beta2/Makefile.util.def
|
||||
name = grub-mkconfig_lib;
|
||||
common = util/grub-mkconfig_lib.in;
|
||||
installdir = noinst;
|
||||
@@ -1281,6 +1317,7 @@ program = {
|
||||
@@ -1282,6 +1318,7 @@ program = {
|
||||
ldadd = libgrubkern.a;
|
||||
ldadd = grub-core/gnulib/libgnu.a;
|
||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||
@ -154,12 +145,12 @@ Index: grub-2.02~beta2/configure.ac
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/configure.ac
|
||||
+++ grub-2.02~beta2/configure.ac
|
||||
@@ -177,9 +177,9 @@ if test x$platform != xemu ; then
|
||||
@@ -181,9 +181,9 @@ if test x$platform != xemu ; then
|
||||
esac
|
||||
fi
|
||||
|
||||
-if test x"$target_cpu-$platform" = xsparc64-emu ; then
|
||||
- target_m64=1 ;
|
||||
- target_m64=1
|
||||
-fi
|
||||
+case x"$target_cpu-$platform" in
|
||||
+ xsparc64-emu | xs390x-emu) target_m64=1 ;;
|
||||
@ -167,7 +158,7 @@ Index: grub-2.02~beta2/configure.ac
|
||||
|
||||
case "$target_os" in
|
||||
windows* | mingw32*) target_os=cygwin ;;
|
||||
@@ -1665,6 +1665,9 @@ AM_CONDITIONAL([COND_arm_uboot], [test x
|
||||
@@ -1845,6 +1845,9 @@ AM_CONDITIONAL([COND_arm_uboot], [test x
|
||||
AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
|
||||
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
|
||||
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
|
||||
@ -181,7 +172,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.core.def
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
@@ -1064,6 +1064,7 @@ module = {
|
||||
@@ -1050,6 +1050,7 @@ module = {
|
||||
module = {
|
||||
name = videotest;
|
||||
common = commands/videotest.c;
|
||||
@ -189,7 +180,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
@@ -1477,6 +1478,7 @@ module = {
|
||||
@@ -1462,6 +1463,7 @@ module = {
|
||||
common = gfxmenu/gui_progress_bar.c;
|
||||
common = gfxmenu/gui_util.c;
|
||||
common = gfxmenu/gui_string_util.c;
|
||||
@ -197,7 +188,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
@@ -1856,11 +1858,13 @@ module = {
|
||||
@@ -1841,11 +1843,13 @@ module = {
|
||||
name = gfxterm;
|
||||
common = term/gfxterm.c;
|
||||
enable = videomodules;
|
||||
@ -211,7 +202,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
@@ -1975,6 +1979,7 @@ module = {
|
||||
@@ -1960,6 +1964,7 @@ module = {
|
||||
enable = x86_64_efi;
|
||||
enable = emu;
|
||||
enable = xen;
|
||||
@ -219,7 +210,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
@@ -1990,6 +1995,7 @@ module = {
|
||||
@@ -2006,6 +2011,7 @@ module = {
|
||||
module = {
|
||||
name = gfxterm_menu;
|
||||
common = tests/gfxterm_menu.c;
|
||||
@ -227,7 +218,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
};
|
||||
|
||||
module = {
|
||||
@@ -2142,6 +2148,7 @@ module = {
|
||||
@@ -2158,6 +2164,7 @@ module = {
|
||||
enable = x86_64_efi;
|
||||
enable = emu;
|
||||
enable = xen;
|
||||
@ -295,7 +286,7 @@ Index: grub-2.02~beta2/include/grub/util/install.h
|
||||
GRUB_INSTALL_PLATFORM_MAX
|
||||
};
|
||||
|
||||
@@ -217,6 +218,9 @@ void
|
||||
@@ -219,6 +220,9 @@ void
|
||||
grub_install_sgi_setup (const char *install_device,
|
||||
const char *imgfile, const char *destname);
|
||||
|
||||
@ -309,7 +300,7 @@ Index: grub-2.02~beta2/util/grub-install-common.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/util/grub-install-common.c
|
||||
+++ grub-2.02~beta2/util/grub-install-common.c
|
||||
@@ -665,6 +665,7 @@ static struct
|
||||
@@ -666,6 +666,7 @@ static struct
|
||||
[GRUB_INSTALL_PLATFORM_ARM_EFI] = { "arm", "efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM64_EFI] = { "arm64", "efi" },
|
||||
[GRUB_INSTALL_PLATFORM_ARM_UBOOT] = { "arm", "uboot" },
|
||||
@ -329,7 +320,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
static int force = 0;
|
||||
static int have_abstractions = 0;
|
||||
static int have_cryptodisk = 0;
|
||||
@@ -107,6 +108,7 @@ enum
|
||||
@@ -106,6 +107,7 @@ enum
|
||||
OPTION_NO_BOOTSECTOR,
|
||||
OPTION_NO_RS_CODES,
|
||||
OPTION_MACPPC_DIRECTORY,
|
||||
@ -337,7 +328,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
OPTION_LABEL_FONT,
|
||||
OPTION_LABEL_COLOR,
|
||||
OPTION_LABEL_BGCOLOR,
|
||||
@@ -182,6 +184,11 @@ argp_parser (int key, char *arg, struct
|
||||
@@ -181,6 +183,11 @@ argp_parser (int key, char *arg, struct
|
||||
efidir = xstrdup (arg);
|
||||
return 0;
|
||||
|
||||
@ -349,7 +340,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
case OPTION_DISK_MODULE:
|
||||
free (disk_module);
|
||||
disk_module = xstrdup (arg);
|
||||
@@ -299,6 +306,8 @@ static struct argp_option options[] = {
|
||||
@@ -298,6 +305,8 @@ static struct argp_option options[] = {
|
||||
N_("use DIR as the EFI System Partition root."), 2},
|
||||
{"macppc-directory", OPTION_MACPPC_DIRECTORY, N_("DIR"), 0,
|
||||
N_("use DIR for PPC MAC install."), 2},
|
||||
@ -358,7 +349,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
{"label-font", OPTION_LABEL_FONT, N_("FILE"), 0, N_("use FILE as font for label"), 2},
|
||||
{"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2},
|
||||
{"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2},
|
||||
@@ -325,6 +334,8 @@ get_default_platform (void)
|
||||
@@ -324,6 +333,8 @@ get_default_platform (void)
|
||||
return "arm64-efi";
|
||||
#elif defined (__amd64__) || defined (__x86_64__) || defined (__i386__)
|
||||
return grub_install_get_default_x86_platform ();
|
||||
@ -367,7 +358,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
@@ -484,6 +495,8 @@ have_bootdev (enum grub_install_plat pl)
|
||||
@@ -495,6 +506,8 @@ have_bootdev (enum grub_install_plat pl)
|
||||
|
||||
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||
@ -376,7 +367,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
return 0;
|
||||
|
||||
/* pacify warning. */
|
||||
@@ -895,6 +908,7 @@ main (int argc, char *argv[])
|
||||
@@ -907,6 +920,7 @@ main (int argc, char *argv[])
|
||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||
@ -384,7 +375,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
break;
|
||||
|
||||
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
||||
@@ -940,6 +954,7 @@ main (int argc, char *argv[])
|
||||
@@ -952,6 +966,7 @@ main (int argc, char *argv[])
|
||||
case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
|
||||
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||
@ -392,7 +383,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
free (install_device);
|
||||
install_device = NULL;
|
||||
break;
|
||||
@@ -1201,6 +1216,20 @@ main (int argc, char *argv[])
|
||||
@@ -1213,6 +1228,20 @@ main (int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
@ -413,7 +404,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
grub_install_copy_files (grub_install_source_directory,
|
||||
grubdir, platform);
|
||||
|
||||
@@ -1445,6 +1474,7 @@ main (int argc, char *argv[])
|
||||
@@ -1457,6 +1486,7 @@ main (int argc, char *argv[])
|
||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||
@ -421,7 +412,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
grub_util_warn ("%s", _("no hints available for your platform. Expect reduced performance"));
|
||||
break;
|
||||
/* pacify warning. */
|
||||
@@ -1557,6 +1587,10 @@ main (int argc, char *argv[])
|
||||
@@ -1569,6 +1599,10 @@ main (int argc, char *argv[])
|
||||
strcpy (mkimage_target, "sparc64-ieee1275-raw");
|
||||
core_name = "core.img";
|
||||
break;
|
||||
@ -432,7 +423,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
/* pacify warning. */
|
||||
case GRUB_INSTALL_PLATFORM_MAX:
|
||||
break;
|
||||
@@ -1572,6 +1606,7 @@ main (int argc, char *argv[])
|
||||
@@ -1584,6 +1618,7 @@ main (int argc, char *argv[])
|
||||
core_name);
|
||||
char *prefix = xasprintf ("%s%s", prefix_drive ? : "",
|
||||
relative_grubdir);
|
||||
@ -440,7 +431,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
grub_install_make_image_wrap (/* source dir */ grub_install_source_directory,
|
||||
/*prefix */ prefix,
|
||||
/* output */ imgfile,
|
||||
@@ -1610,6 +1645,10 @@ main (int argc, char *argv[])
|
||||
@@ -1622,6 +1657,10 @@ main (int argc, char *argv[])
|
||||
/* image target */ mkimage_target, 0);
|
||||
}
|
||||
break;
|
||||
@ -451,7 +442,7 @@ Index: grub-2.02~beta2/util/grub-install.c
|
||||
case GRUB_INSTALL_PLATFORM_ARM_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_ARM64_EFI:
|
||||
case GRUB_INSTALL_PLATFORM_IA64_EFI:
|
||||
@@ -1871,6 +1910,10 @@ main (int argc, char *argv[])
|
||||
@@ -1883,6 +1922,10 @@ main (int argc, char *argv[])
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -81,34 +81,33 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
message="$(gettext_printf "Loading Linux %s ..." ${version})"
|
||||
if [ -d /sys/firmware/efi ] && [ "x${GRUB_USE_LINUXEFI}" = "xtrue" ]; then
|
||||
sed "s/^/$submenu_indentation/" << EOF
|
||||
@@ -165,16 +188,17 @@ EOF
|
||||
}
|
||||
@@ -166,17 +189,15 @@ EOF
|
||||
|
||||
machine=`uname -m`
|
||||
-case "x$machine" in
|
||||
case "x$machine" in
|
||||
- xi?86 | xx86_64)
|
||||
- list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
|
||||
- done` ;;
|
||||
- list=
|
||||
- for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
- done ;;
|
||||
- *)
|
||||
- list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
|
||||
- done` ;;
|
||||
+case "$machine" in
|
||||
+ i?86 | x86_64) klist="/boot/vmlinuz-* /vmlinuz-* /boot/kernel-*" ;;
|
||||
+ s390 | s390x) klist="/boot/image-* /boot/kernel-*" ;;
|
||||
- list=
|
||||
- for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
|
||||
- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
- done ;;
|
||||
+ xi?86 | xx86_64) klist="/boot/vmlinuz-* /vmlinuz-* /boot/kernel-*" ;;
|
||||
+ xs390 | xs390x) klist="/boot/image-* /boot/kernel-*" ;;
|
||||
+ *) klist="/boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* \
|
||||
+ /boot/kernel-*" ;;
|
||||
esac
|
||||
+list=`for i in $klist; do
|
||||
+ if grub_file_is_not_garbage "$i" ; then
|
||||
+ echo -n "$i " ;
|
||||
+ fi
|
||||
+ done`
|
||||
+list=
|
||||
+for i in $klist ; do
|
||||
+ if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi
|
||||
+done
|
||||
|
||||
case "$machine" in
|
||||
i?86) GENKERNEL_ARCH="x86" ;;
|
||||
@@ -184,6 +208,15 @@ case "$machine" in
|
||||
@@ -186,6 +207,15 @@ case "$machine" in
|
||||
*) GENKERNEL_ARCH="$machine" ;;
|
||||
esac
|
||||
|
||||
@ -124,7 +123,7 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
prepare_boot_cache=
|
||||
prepare_root_cache=
|
||||
boot_device_id=
|
||||
@@ -200,6 +233,11 @@ while [ "x$list" != "x" ] ; do
|
||||
@@ -202,6 +232,11 @@ while [ "x$list" != "x" ] ; do
|
||||
basename=`basename $linux`
|
||||
dirname=`dirname $linux`
|
||||
rel_dirname=`make_system_path_relative_to_its_root $dirname`
|
||||
@ -136,7 +135,7 @@ Index: grub-2.02~beta2/util/grub.d/10_linux.in
|
||||
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
|
||||
alt_version=`echo $version | sed -e "s,\.old$,,g"`
|
||||
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
|
||||
@@ -284,7 +322,8 @@ while [ "x$list" != "x" ] ; do
|
||||
@@ -286,7 +321,8 @@ while [ "x$list" != "x" ] ; do
|
||||
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
|
||||
fi
|
||||
# TRANSLATORS: %s is replaced with an OS name
|
||||
|
@ -19,7 +19,7 @@ Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.core.def
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
@@ -1706,6 +1706,14 @@ module = {
|
||||
@@ -1691,6 +1691,14 @@ module = {
|
||||
};
|
||||
|
||||
module = {
|
||||
@ -320,7 +320,7 @@ Index: grub-2.02~beta2/grub-core/loader/i386/efi/linux.c
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ memset (params, 0, 16384);
|
||||
+ grub_memset (params, 0, 16384);
|
||||
+
|
||||
+ if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
||||
+ {
|
||||
@ -408,7 +408,7 @@ Index: grub-2.02~beta2/grub-core/loader/i386/efi/linux.c
|
||||
+ lh.code32_start = (grub_uint32_t)(grub_addr_t) kernel_mem;
|
||||
+ }
|
||||
+
|
||||
+ memcpy(params, &lh, 2 * 512);
|
||||
+ grub_memcpy(params, &lh, 2 * 512);
|
||||
+
|
||||
+ params->type_of_loader = 0x21;
|
||||
+
|
||||
|
@ -642,9 +642,9 @@ Index: grub-2.02~beta2/grub-core/loader/efi/chainloader.c
|
||||
&image_handle);
|
||||
if (status != GRUB_EFI_SUCCESS)
|
||||
{
|
||||
@@ -352,33 +853,10 @@ grub_cmd_chainloader (grub_command_t cmd
|
||||
|
||||
grub_file_close (file);
|
||||
@@ -350,33 +851,10 @@ grub_cmd_chainloader (grub_command_t cmd
|
||||
}
|
||||
loaded_image->device_handle = dev_handle;
|
||||
|
||||
- if (argc > 1)
|
||||
+ if (cmdline)
|
||||
@ -677,8 +677,8 @@ Index: grub-2.02~beta2/grub-core/loader/efi/chainloader.c
|
||||
+ loaded_image->load_options_size = cmdline_len;
|
||||
}
|
||||
|
||||
grub_loader_set (grub_chainloader_boot, grub_chainloader_unload, 0);
|
||||
@@ -397,6 +875,9 @@ grub_cmd_chainloader (grub_command_t cmd
|
||||
grub_file_close (file);
|
||||
@@ -398,6 +876,9 @@ grub_cmd_chainloader (grub_command_t cmd
|
||||
if (address)
|
||||
efi_call_2 (b->free_pages, address, pages);
|
||||
|
||||
|
@ -1,112 +0,0 @@
|
||||
From: Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Subject: [PATCH] accept also hdX as alias to native Xen disk name
|
||||
References: bnc#863821
|
||||
Patch-Mainline: no
|
||||
|
||||
To assign correct disk numbers, sort disks by increasing order of handle
|
||||
value. This allows reusing legacy pv-grub menu.lst which is using hdX names.
|
||||
|
||||
Suggested-By: Michael Chang <mchang@suse.com>
|
||||
|
||||
---
|
||||
grub-core/disk/xen/xendisk.c | 45 +++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 36 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c
|
||||
index 2b11c2a..b18a923 100644
|
||||
--- a/grub-core/disk/xen/xendisk.c
|
||||
+++ b/grub-core/disk/xen/xendisk.c
|
||||
@@ -40,6 +40,7 @@ struct virtdisk
|
||||
grub_xen_evtchn_t evtchn;
|
||||
void *dma_page;
|
||||
grub_xen_grant_t dma_grant;
|
||||
+ struct virtdisk *compat_next;
|
||||
};
|
||||
|
||||
#define xen_wmb() mb()
|
||||
@@ -47,6 +48,7 @@ struct virtdisk
|
||||
|
||||
static struct virtdisk *virtdisks;
|
||||
static grub_size_t vdiskcnt;
|
||||
+struct virtdisk *compat_head;
|
||||
|
||||
static int
|
||||
grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||||
@@ -66,20 +68,32 @@ grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||||
static grub_err_t
|
||||
grub_virtdisk_open (const char *name, grub_disk_t disk)
|
||||
{
|
||||
- grub_size_t i;
|
||||
+ int i;
|
||||
grub_uint32_t secsize;
|
||||
char fdir[200];
|
||||
char *buf;
|
||||
+ int num = -1;
|
||||
+ struct virtdisk *vd;
|
||||
|
||||
- for (i = 0; i < vdiskcnt; i++)
|
||||
- if (grub_strcmp (name, virtdisks[i].fullname) == 0)
|
||||
+ /* For compatibility with pv-grub legacy menu.lst accept hdX as disk name */
|
||||
+ if (name[0] == 'h' && name[1] == 'd' && name[2])
|
||||
+ {
|
||||
+ num = grub_strtoul (name + 2, 0, 10);
|
||||
+ if (grub_errno)
|
||||
+ {
|
||||
+ grub_errno = 0;
|
||||
+ num = -1;
|
||||
+ }
|
||||
+ }
|
||||
+ for (i = 0, vd = compat_head; vd; vd = vd->compat_next, i++)
|
||||
+ if (i == num || grub_strcmp (name, vd->fullname) == 0)
|
||||
break;
|
||||
- if (i == vdiskcnt)
|
||||
+ if (!vd)
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
|
||||
- disk->data = &virtdisks[i];
|
||||
- disk->id = i;
|
||||
+ disk->data = vd;
|
||||
+ disk->id = vd - virtdisks;
|
||||
|
||||
- grub_snprintf (fdir, sizeof (fdir), "%s/sectors", virtdisks[i].backend_dir);
|
||||
+ grub_snprintf (fdir, sizeof (fdir), "%s/sectors", vd->backend_dir);
|
||||
buf = grub_xenstore_get_file (fdir, NULL);
|
||||
if (!buf)
|
||||
return grub_errno;
|
||||
@@ -87,8 +101,7 @@ grub_virtdisk_open (const char *name, grub_disk_t disk)
|
||||
if (grub_errno)
|
||||
return grub_errno;
|
||||
|
||||
- grub_snprintf (fdir, sizeof (fdir), "%s/sector-size",
|
||||
- virtdisks[i].backend_dir);
|
||||
+ grub_snprintf (fdir, sizeof (fdir), "%s/sector-size", vd->backend_dir);
|
||||
buf = grub_xenstore_get_file (fdir, NULL);
|
||||
if (!buf)
|
||||
return grub_errno;
|
||||
@@ -264,6 +277,7 @@ fill (const char *dir, void *data)
|
||||
grub_err_t err;
|
||||
void *buf;
|
||||
struct evtchn_alloc_unbound alloc_unbound;
|
||||
+ struct virtdisk **prev = &compat_head, *vd = compat_head;
|
||||
|
||||
/* Shouldn't happen unles some hotplug happened. */
|
||||
if (vdiskcnt >= *ctr)
|
||||
@@ -374,6 +388,19 @@ fill (const char *dir, void *data)
|
||||
|
||||
virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
|
||||
|
||||
+ /* For compatibility with pv-grub maintain linked list sorted by handle
|
||||
+ value in increasing order. This allows mapping of (hdX) disk names
|
||||
+ from legacy menu.lst */
|
||||
+ while (vd)
|
||||
+ {
|
||||
+ if (vd->handle > virtdisks[vdiskcnt].handle)
|
||||
+ break;
|
||||
+ prev = &vd->compat_next;
|
||||
+ vd = vd->compat_next;
|
||||
+ }
|
||||
+ virtdisks[vdiskcnt].compat_next = vd;
|
||||
+ *prev = &virtdisks[vdiskcnt];
|
||||
+
|
||||
vdiskcnt++;
|
||||
return 0;
|
||||
|
@ -1,76 +0,0 @@
|
||||
From 34231b28cbb6b2e10d7668c5b6d2432e8563bd1d Mon Sep 17 00:00:00 2001
|
||||
From: Jan Kara <jack@suse.cz>
|
||||
Date: Thu, 5 Jun 2014 20:56:21 +0200
|
||||
Subject: [PATCH 1/4] xfs: Add helper for inode size
|
||||
|
||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
||||
---
|
||||
grub-core/fs/xfs.c | 17 +++++++++++------
|
||||
1 file changed, 11 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
||||
index 16ffd3f1ebd9..a2fc942707c1 100644
|
||||
--- a/grub-core/fs/xfs.c
|
||||
+++ b/grub-core/fs/xfs.c
|
||||
@@ -255,6 +255,11 @@ grub_xfs_inode_offset (struct grub_xfs_data *data,
|
||||
data->sblock.log2_inode);
|
||||
}
|
||||
|
||||
+static inline int
|
||||
+grub_xfs_inode_size(struct grub_xfs_data *data)
|
||||
+{
|
||||
+ return 1 << data->sblock.log2_inode;
|
||||
+}
|
||||
|
||||
static grub_err_t
|
||||
grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
|
||||
@@ -264,8 +269,8 @@ grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
|
||||
int offset = grub_xfs_inode_offset (data, ino);
|
||||
|
||||
/* Read the inode. */
|
||||
- if (grub_disk_read (data->disk, block, offset,
|
||||
- 1 << data->sblock.log2_inode, inode))
|
||||
+ if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
||||
+ inode))
|
||||
return grub_errno;
|
||||
|
||||
if (grub_strncmp ((char *) inode->magic, "IN", 2))
|
||||
@@ -297,7 +302,7 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
||||
if (node->inode.fork_offset)
|
||||
recoffset = (node->inode.fork_offset - 1) / 2;
|
||||
else
|
||||
- recoffset = ((1 << node->data->sblock.log2_inode)
|
||||
+ recoffset = (grub_xfs_inode_size(node->data)
|
||||
- ((char *) &node->inode.data.btree.keys
|
||||
- (char *) &node->inode))
|
||||
/ (2 * sizeof (grub_uint64_t));
|
||||
@@ -458,7 +463,7 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename,
|
||||
|
||||
fdiro = grub_malloc (sizeof (struct grub_fshelp_node)
|
||||
- sizeof (struct grub_xfs_inode)
|
||||
- + (1 << ctx->diro->data->sblock.log2_inode) + 1);
|
||||
+ + grub_xfs_inode_size(ctx->diro->data) + 1);
|
||||
if (!fdiro)
|
||||
{
|
||||
grub_print_error ();
|
||||
@@ -684,7 +689,7 @@ grub_xfs_mount (grub_disk_t disk)
|
||||
data = grub_realloc (data,
|
||||
sizeof (struct grub_xfs_data)
|
||||
- sizeof (struct grub_xfs_inode)
|
||||
- + (1 << data->sblock.log2_inode) + 1);
|
||||
+ + grub_xfs_inode_size(data) + 1);
|
||||
|
||||
if (! data)
|
||||
goto fail;
|
||||
@@ -802,7 +807,7 @@ grub_xfs_open (struct grub_file *file, const char *name)
|
||||
grub_memcpy (&data->diropen, fdiro,
|
||||
sizeof (struct grub_fshelp_node)
|
||||
- sizeof (struct grub_xfs_inode)
|
||||
- + (1 << data->sblock.log2_inode));
|
||||
+ + grub_xfs_inode_size(data));
|
||||
grub_free (fdiro);
|
||||
}
|
||||
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,82 +0,0 @@
|
||||
From 57ae4073cc28fa74014a62aca397a40ce1f73763 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Kara <jack@suse.cz>
|
||||
Date: Thu, 12 Jun 2014 11:01:11 +0200
|
||||
Subject: [PATCH 3/4] xfs: Convert inode numbers to cpu endianity immediately
|
||||
after reading
|
||||
|
||||
Currently XFS driver converted inode numbers to native endianity only
|
||||
when using them to compute inode position. Although this works, it is
|
||||
somewhat confusing. So convert inode numbers when reading them from disk
|
||||
structures as every other field.
|
||||
|
||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
||||
---
|
||||
grub-core/fs/xfs.c | 13 ++++++-------
|
||||
1 file changed, 6 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
||||
index ef3bc787e968..7e247a32df5c 100644
|
||||
--- a/grub-core/fs/xfs.c
|
||||
+++ b/grub-core/fs/xfs.c
|
||||
@@ -180,14 +180,14 @@ static inline grub_uint64_t
|
||||
GRUB_XFS_INO_INOINAG (struct grub_xfs_data *data,
|
||||
grub_uint64_t ino)
|
||||
{
|
||||
- return (grub_be_to_cpu64 (ino) & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1));
|
||||
+ return (ino & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1));
|
||||
}
|
||||
|
||||
static inline grub_uint64_t
|
||||
GRUB_XFS_INO_AG (struct grub_xfs_data *data,
|
||||
grub_uint64_t ino)
|
||||
{
|
||||
- return (grub_be_to_cpu64 (ino) >> GRUB_XFS_INO_AGBITS (data));
|
||||
+ return (ino >> GRUB_XFS_INO_AGBITS (data));
|
||||
}
|
||||
|
||||
static inline grub_disk_addr_t
|
||||
@@ -511,13 +511,12 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
||||
if (smallino)
|
||||
{
|
||||
parent = grub_be_to_cpu32 (diro->inode.data.dir.dirhead.parent.i4);
|
||||
- parent = grub_cpu_to_be64 (parent);
|
||||
/* The header is a bit smaller than usual. */
|
||||
de = (struct grub_xfs_dir_entry *) ((char *) de - 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
- parent = diro->inode.data.dir.dirhead.parent.i8;
|
||||
+ parent = grub_be_to_cpu64(diro->inode.data.dir.dirhead.parent.i8);
|
||||
}
|
||||
|
||||
/* Synthesize the direntries for `.' and `..'. */
|
||||
@@ -550,7 +549,6 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
||||
| (((grub_uint64_t) inopos[5]) << 16)
|
||||
| (((grub_uint64_t) inopos[6]) << 8)
|
||||
| (((grub_uint64_t) inopos[7]) << 0);
|
||||
- ino = grub_cpu_to_be64 (ino);
|
||||
|
||||
c = de->name[de->len];
|
||||
de->name[de->len] = '\0';
|
||||
@@ -632,7 +630,8 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
||||
is not used by GRUB. So it can be overwritten. */
|
||||
filename[direntry->len] = '\0';
|
||||
|
||||
- if (iterate_dir_call_hook (direntry->inode, filename, &ctx))
|
||||
+ if (iterate_dir_call_hook (grub_be_to_cpu64(direntry->inode),
|
||||
+ filename, &ctx))
|
||||
{
|
||||
grub_free (dirblock);
|
||||
return 1;
|
||||
@@ -694,7 +693,7 @@ grub_xfs_mount (grub_disk_t disk)
|
||||
goto fail;
|
||||
|
||||
data->diropen.data = data;
|
||||
- data->diropen.ino = data->sblock.rootino;
|
||||
+ data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino);
|
||||
data->diropen.inode_read = 1;
|
||||
data->bsize = grub_be_to_cpu32 (data->sblock.bsize);
|
||||
data->agsize = grub_be_to_cpu32 (data->sblock.agsize);
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,32 +0,0 @@
|
||||
From a7d584c005bde09bb86475a79d714215b3480821 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Kara <jack@suse.cz>
|
||||
Date: Wed, 11 Jun 2014 18:36:59 +0200
|
||||
Subject: [PATCH 2/4] xfs: Fix termination loop for directory iteration
|
||||
|
||||
Directory iteration used wrong position (sizeof wrong structure) for
|
||||
termination of iteration inside a directory block. Luckily the position
|
||||
ended up being wrong by just 1 byte and directory entries are larger so
|
||||
things worked out fine in practice. But fix the problem anyway.
|
||||
|
||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
||||
---
|
||||
grub-core/fs/xfs.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c
|
||||
index a2fc942707c1..ef3bc787e968 100644
|
||||
--- a/grub-core/fs/xfs.c
|
||||
+++ b/grub-core/fs/xfs.c
|
||||
@@ -608,8 +608,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
||||
- grub_be_to_cpu32 (tail->leaf_stale));
|
||||
|
||||
/* Iterate over all entries within this block. */
|
||||
- while (pos < (dirblk_size
|
||||
- - (int) sizeof (struct grub_xfs_dir2_entry)))
|
||||
+ while (pos < tail_start)
|
||||
{
|
||||
struct grub_xfs_dir2_entry *direntry;
|
||||
grub_uint8_t *freetag;
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,478 +0,0 @@
|
||||
From 2f725e644d8ccf001a4dccddc8abb2c9479352a7 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Kara <jack@suse.cz>
|
||||
Date: Wed, 11 Jun 2014 18:36:01 +0200
|
||||
Subject: [PATCH] xfs: V5 filesystem format support
|
||||
|
||||
Signed-off-by: Jan Kara <jack@suse.cz>
|
||||
---
|
||||
grub-core/fs/xfs.c | 245 +++++++++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 173 insertions(+), 72 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/fs/xfs.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/fs/xfs.c
|
||||
+++ grub-2.02~beta2/grub-core/fs/xfs.c
|
||||
@@ -34,6 +34,15 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
||||
#define XFS_INODE_FORMAT_EXT 2
|
||||
#define XFS_INODE_FORMAT_BTREE 3
|
||||
|
||||
+/* Superblock version field flags */
|
||||
+#define XFS_SB_VERSION_NUMBITS 0x000f
|
||||
+#define XFS_SB_VERSION_MOREBITSBIT 0x8000
|
||||
+
|
||||
+/* features2 field flags */
|
||||
+#define XFS_SB_VERSION2_FTYPE 0x00000200 /* inode type in dir */
|
||||
+
|
||||
+/* incompat feature flags */
|
||||
+#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
||||
|
||||
struct grub_xfs_sblock
|
||||
{
|
||||
@@ -45,7 +54,9 @@ struct grub_xfs_sblock
|
||||
grub_uint64_t rootino;
|
||||
grub_uint8_t unused3[20];
|
||||
grub_uint32_t agsize;
|
||||
- grub_uint8_t unused4[20];
|
||||
+ grub_uint8_t unused4[12];
|
||||
+ grub_uint16_t version;
|
||||
+ grub_uint8_t unused5[6];
|
||||
grub_uint8_t label[12];
|
||||
grub_uint8_t log2_bsize;
|
||||
grub_uint8_t log2_sect;
|
||||
@@ -54,12 +65,19 @@ struct grub_xfs_sblock
|
||||
grub_uint8_t log2_agblk;
|
||||
grub_uint8_t unused6[67];
|
||||
grub_uint8_t log2_dirblk;
|
||||
+ grub_uint8_t unused7[7];
|
||||
+ grub_uint32_t features2;
|
||||
+ grub_uint8_t unused8[4];
|
||||
+ grub_uint32_t sb_features_compat;
|
||||
+ grub_uint32_t sb_features_ro_compat;
|
||||
+ grub_uint32_t sb_features_incompat;
|
||||
+ grub_uint32_t sb_features_log_incompat;
|
||||
} GRUB_PACKED;
|
||||
|
||||
struct grub_xfs_dir_header
|
||||
{
|
||||
grub_uint8_t count;
|
||||
- grub_uint8_t smallino;
|
||||
+ grub_uint8_t largeino;
|
||||
union
|
||||
{
|
||||
grub_uint32_t i4;
|
||||
@@ -67,14 +85,16 @@ struct grub_xfs_dir_header
|
||||
} GRUB_PACKED parent;
|
||||
} GRUB_PACKED;
|
||||
|
||||
+/* Structure for directory entry inlined in the inode */
|
||||
struct grub_xfs_dir_entry
|
||||
{
|
||||
grub_uint8_t len;
|
||||
grub_uint16_t offset;
|
||||
char name[1];
|
||||
- /* Inode number follows, 32 bits. */
|
||||
+ /* Inode number follows, 32 / 64 bits. */
|
||||
} GRUB_PACKED;
|
||||
|
||||
+/* Structure for directory entry in a block */
|
||||
struct grub_xfs_dir2_entry
|
||||
{
|
||||
grub_uint64_t inode;
|
||||
@@ -90,7 +110,8 @@ struct grub_xfs_btree_node
|
||||
grub_uint16_t numrecs;
|
||||
grub_uint64_t left;
|
||||
grub_uint64_t right;
|
||||
- grub_uint64_t keys[1];
|
||||
+ /* In V5 here follow crc, uuid, etc. */
|
||||
+ /* Then follow keys and block pointers */
|
||||
} GRUB_PACKED;
|
||||
|
||||
struct grub_xfs_btree_root
|
||||
@@ -123,17 +144,6 @@ struct grub_xfs_inode
|
||||
grub_uint16_t unused3;
|
||||
grub_uint8_t fork_offset;
|
||||
grub_uint8_t unused4[17];
|
||||
- union
|
||||
- {
|
||||
- char raw[156];
|
||||
- struct dir
|
||||
- {
|
||||
- struct grub_xfs_dir_header dirhead;
|
||||
- struct grub_xfs_dir_entry direntry[1];
|
||||
- } dir;
|
||||
- grub_xfs_extent extents[XFS_INODE_EXTENTS];
|
||||
- struct grub_xfs_btree_root btree;
|
||||
- } GRUB_PACKED data;
|
||||
} GRUB_PACKED;
|
||||
|
||||
struct grub_xfs_dirblock_tail
|
||||
@@ -157,6 +167,8 @@ struct grub_xfs_data
|
||||
int pos;
|
||||
int bsize;
|
||||
grub_uint32_t agsize;
|
||||
+ unsigned int hasftype:1;
|
||||
+ unsigned int hascrc:1;
|
||||
struct grub_fshelp_node diropen;
|
||||
};
|
||||
|
||||
@@ -164,6 +176,24 @@ static grub_dl_t my_mod;
|
||||
|
||||
|
||||
|
||||
+static int grub_xfs_sb_hascrc(struct grub_xfs_data *data)
|
||||
+{
|
||||
+ return (grub_be_to_cpu16(data->sblock.version) & XFS_SB_VERSION_NUMBITS) == 5;
|
||||
+}
|
||||
+
|
||||
+static int grub_xfs_sb_hasftype(struct grub_xfs_data *data)
|
||||
+{
|
||||
+ grub_uint32_t version = grub_be_to_cpu16(data->sblock.version);
|
||||
+
|
||||
+ if ((version & XFS_SB_VERSION_NUMBITS) == 5 &&
|
||||
+ grub_be_to_cpu32(data->sblock.sb_features_incompat) & XFS_SB_FEAT_INCOMPAT_FTYPE)
|
||||
+ return 1;
|
||||
+ if (version & XFS_SB_VERSION_MOREBITSBIT &&
|
||||
+ grub_be_to_cpu32(data->sblock.features2) & XFS_SB_VERSION2_FTYPE)
|
||||
+ return 1;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/* Filetype information as used in inodes. */
|
||||
#define FILETYPE_INO_MASK 0170000
|
||||
#define FILETYPE_INO_REG 0100000
|
||||
@@ -219,18 +249,6 @@ GRUB_XFS_EXTENT_SIZE (grub_xfs_extent *e
|
||||
return (grub_be_to_cpu32 (exts[ex][3]) & ((1 << 21) - 1));
|
||||
}
|
||||
|
||||
-static inline int
|
||||
-GRUB_XFS_ROUND_TO_DIRENT (int pos)
|
||||
-{
|
||||
- return ((((pos) + 8 - 1) / 8) * 8);
|
||||
-}
|
||||
-
|
||||
-static inline int
|
||||
-GRUB_XFS_NEXT_DIRENT (int pos, int len)
|
||||
-{
|
||||
- return (pos) + GRUB_XFS_ROUND_TO_DIRENT (8 + 1 + len + 2);
|
||||
-}
|
||||
-
|
||||
|
||||
static inline grub_uint64_t
|
||||
grub_xfs_inode_block (struct grub_xfs_data *data,
|
||||
@@ -261,6 +279,92 @@ grub_xfs_inode_size(struct grub_xfs_data
|
||||
return 1 << data->sblock.log2_inode;
|
||||
}
|
||||
|
||||
+static void *
|
||||
+grub_xfs_inode_data(struct grub_xfs_inode *inode)
|
||||
+{
|
||||
+ if (inode->version <= 2)
|
||||
+ return ((char *)inode) + 100;
|
||||
+ return ((char *)inode) + 176;
|
||||
+}
|
||||
+
|
||||
+static struct grub_xfs_dir_entry *
|
||||
+grub_xfs_inline_de(struct grub_xfs_dir_header *head)
|
||||
+{
|
||||
+ /*
|
||||
+ * With small inode numbers the header is 4 bytes smaller because of
|
||||
+ * smaller parent pointer
|
||||
+ */
|
||||
+ return (void *)(((char *)head) + sizeof(struct grub_xfs_dir_header) -
|
||||
+ (head->largeino ? 0 : sizeof(grub_uint32_t)));
|
||||
+}
|
||||
+
|
||||
+static grub_uint8_t *
|
||||
+grub_xfs_inline_de_inopos(struct grub_xfs_data *data,
|
||||
+ struct grub_xfs_dir_entry *de)
|
||||
+{
|
||||
+ return ((grub_uint8_t *)(de + 1)) + de->len - 1 +
|
||||
+ (data->hasftype ? 1 : 0);
|
||||
+}
|
||||
+
|
||||
+static struct grub_xfs_dir_entry *
|
||||
+grub_xfs_inline_next_de(struct grub_xfs_data *data,
|
||||
+ struct grub_xfs_dir_header *head,
|
||||
+ struct grub_xfs_dir_entry *de)
|
||||
+{
|
||||
+ char *p = (char *)de + sizeof(struct grub_xfs_dir_entry) - 1 + de->len;
|
||||
+
|
||||
+ p += head->largeino ? sizeof(grub_uint64_t) : sizeof(grub_uint32_t);
|
||||
+ if (data->hasftype)
|
||||
+ p++;
|
||||
+
|
||||
+ return (struct grub_xfs_dir_entry *)p;
|
||||
+}
|
||||
+
|
||||
+static struct grub_xfs_dirblock_tail *
|
||||
+grub_xfs_dir_tail(struct grub_xfs_data *data, void *dirblock)
|
||||
+{
|
||||
+ int dirblksize = 1 << (data->sblock.log2_bsize + data->sblock.log2_dirblk);
|
||||
+
|
||||
+ return (struct grub_xfs_dirblock_tail *)
|
||||
+ ((char *)dirblock + dirblksize - sizeof (struct grub_xfs_dirblock_tail));
|
||||
+}
|
||||
+
|
||||
+static struct grub_xfs_dir2_entry *
|
||||
+grub_xfs_first_de(struct grub_xfs_data *data, void *dirblock)
|
||||
+{
|
||||
+ if (data->hascrc)
|
||||
+ return (struct grub_xfs_dir2_entry *)((char *)dirblock + 64);
|
||||
+ return (struct grub_xfs_dir2_entry *)((char *)dirblock + 16);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+grub_xfs_round_dirent_size (int len)
|
||||
+{
|
||||
+ return (len + 7) & ~7;
|
||||
+}
|
||||
+
|
||||
+static struct grub_xfs_dir2_entry *
|
||||
+grub_xfs_next_de(struct grub_xfs_data *data, struct grub_xfs_dir2_entry *de)
|
||||
+{
|
||||
+ int size = sizeof (struct grub_xfs_dir2_entry) + de->len + 2 /* Tag */;
|
||||
+
|
||||
+ if (data->hasftype)
|
||||
+ size++; /* File type */
|
||||
+ return (struct grub_xfs_dir2_entry *)
|
||||
+ (((char *)de) + grub_xfs_round_dirent_size (size));
|
||||
+}
|
||||
+
|
||||
+static grub_uint64_t *
|
||||
+grub_xfs_btree_keys(struct grub_xfs_data *data,
|
||||
+ struct grub_xfs_btree_node *leaf)
|
||||
+{
|
||||
+ char *p = (char *)(leaf + 1);
|
||||
+
|
||||
+ if (data->hascrc)
|
||||
+ p += 48; /* crc, uuid, ... */
|
||||
+ return (grub_uint64_t *)(void*)p;
|
||||
+}
|
||||
+
|
||||
static grub_err_t
|
||||
grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
|
||||
struct grub_xfs_inode *inode)
|
||||
@@ -268,6 +372,9 @@ grub_xfs_read_inode (struct grub_xfs_dat
|
||||
grub_uint64_t block = grub_xfs_inode_block (data, ino);
|
||||
int offset = grub_xfs_inode_offset (data, ino);
|
||||
|
||||
+ grub_dprintf("xfs", "Reading inode (%llu) - %llu, %d\n",
|
||||
+ (unsigned long long) ino,
|
||||
+ (unsigned long long) block, offset);
|
||||
/* Read the inode. */
|
||||
if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
||||
inode))
|
||||
@@ -290,6 +397,7 @@ grub_xfs_read_block (grub_fshelp_node_t
|
||||
|
||||
if (node->inode.format == XFS_INODE_FORMAT_BTREE)
|
||||
{
|
||||
+ struct grub_xfs_btree_root *root;
|
||||
const grub_uint64_t *keys;
|
||||
int recoffset;
|
||||
|
||||
@@ -297,15 +405,15 @@ grub_xfs_read_block (grub_fshelp_node_t
|
||||
if (leaf == 0)
|
||||
return 0;
|
||||
|
||||
- nrec = grub_be_to_cpu16 (node->inode.data.btree.numrecs);
|
||||
- keys = &node->inode.data.btree.keys[0];
|
||||
+ root = grub_xfs_inode_data(&node->inode);
|
||||
+ nrec = grub_be_to_cpu16 (root->numrecs);
|
||||
+ keys = &root->keys[0];
|
||||
if (node->inode.fork_offset)
|
||||
recoffset = (node->inode.fork_offset - 1) / 2;
|
||||
else
|
||||
recoffset = (grub_xfs_inode_size(node->data)
|
||||
- - ((char *) &node->inode.data.btree.keys
|
||||
- - (char *) &node->inode))
|
||||
- / (2 * sizeof (grub_uint64_t));
|
||||
+ - ((char *) keys - (char *) &node->inode))
|
||||
+ / (2 * sizeof (grub_uint64_t));
|
||||
do
|
||||
{
|
||||
int i;
|
||||
@@ -327,7 +435,10 @@ grub_xfs_read_block (grub_fshelp_node_t
|
||||
0, node->data->bsize, leaf))
|
||||
return 0;
|
||||
|
||||
- if (grub_strncmp ((char *) leaf->magic, "BMAP", 4))
|
||||
+ if ((!node->data->hascrc &&
|
||||
+ grub_strncmp ((char *) leaf->magic, "BMAP", 4)) ||
|
||||
+ (node->data->hascrc &&
|
||||
+ grub_strncmp ((char *) leaf->magic, "BMA3", 4)))
|
||||
{
|
||||
grub_free (leaf);
|
||||
grub_error (GRUB_ERR_BAD_FS, "not a correct XFS BMAP node");
|
||||
@@ -335,8 +446,8 @@ grub_xfs_read_block (grub_fshelp_node_t
|
||||
}
|
||||
|
||||
nrec = grub_be_to_cpu16 (leaf->numrecs);
|
||||
- keys = &leaf->keys[0];
|
||||
- recoffset = ((node->data->bsize - ((char *) &leaf->keys
|
||||
+ keys = grub_xfs_btree_keys(node->data, leaf);
|
||||
+ recoffset = ((node->data->bsize - ((char *) keys
|
||||
- (char *) leaf))
|
||||
/ (2 * sizeof (grub_uint64_t)));
|
||||
}
|
||||
@@ -346,7 +457,7 @@ grub_xfs_read_block (grub_fshelp_node_t
|
||||
else if (node->inode.format == XFS_INODE_FORMAT_EXT)
|
||||
{
|
||||
nrec = grub_be_to_cpu32 (node->inode.nextents);
|
||||
- exts = &node->inode.data.extents[0];
|
||||
+ exts = grub_xfs_inode_data(&node->inode);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -404,7 +515,7 @@ grub_xfs_read_symlink (grub_fshelp_node_
|
||||
switch (node->inode.format)
|
||||
{
|
||||
case XFS_INODE_FORMAT_INO:
|
||||
- return grub_strndup (node->inode.data.raw, size);
|
||||
+ return grub_strndup (grub_xfs_inode_data(&node->inode), size);
|
||||
|
||||
case XFS_INODE_FORMAT_EXT:
|
||||
{
|
||||
@@ -501,23 +612,18 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
{
|
||||
case XFS_INODE_FORMAT_INO:
|
||||
{
|
||||
- struct grub_xfs_dir_entry *de = &diro->inode.data.dir.direntry[0];
|
||||
- int smallino = !diro->inode.data.dir.dirhead.smallino;
|
||||
+ struct grub_xfs_dir_header *head = grub_xfs_inode_data(&diro->inode);
|
||||
+ struct grub_xfs_dir_entry *de = grub_xfs_inline_de(head);
|
||||
+ int smallino = !head->largeino;
|
||||
int i;
|
||||
grub_uint64_t parent;
|
||||
|
||||
/* If small inode numbers are used to pack the direntry, the
|
||||
parent inode number is small too. */
|
||||
if (smallino)
|
||||
- {
|
||||
- parent = grub_be_to_cpu32 (diro->inode.data.dir.dirhead.parent.i4);
|
||||
- /* The header is a bit smaller than usual. */
|
||||
- de = (struct grub_xfs_dir_entry *) ((char *) de - 4);
|
||||
- }
|
||||
+ parent = grub_be_to_cpu32 (head->parent.i4);
|
||||
else
|
||||
- {
|
||||
- parent = grub_be_to_cpu64(diro->inode.data.dir.dirhead.parent.i8);
|
||||
- }
|
||||
+ parent = grub_be_to_cpu64 (head->parent.i8);
|
||||
|
||||
/* Synthesize the direntries for `.' and `..'. */
|
||||
if (iterate_dir_call_hook (diro->ino, ".", &ctx))
|
||||
@@ -526,12 +632,10 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
if (iterate_dir_call_hook (parent, "..", &ctx))
|
||||
return 1;
|
||||
|
||||
- for (i = 0; i < diro->inode.data.dir.dirhead.count; i++)
|
||||
+ for (i = 0; i < head->count; i++)
|
||||
{
|
||||
grub_uint64_t ino;
|
||||
- grub_uint8_t *inopos = (((grub_uint8_t *) de)
|
||||
- + sizeof (struct grub_xfs_dir_entry)
|
||||
- + de->len - 1);
|
||||
+ grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de);
|
||||
grub_uint8_t c;
|
||||
|
||||
/* inopos might be unaligned. */
|
||||
@@ -556,10 +660,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
return 1;
|
||||
de->name[de->len] = c;
|
||||
|
||||
- de = ((struct grub_xfs_dir_entry *)
|
||||
- (((char *) de)+ sizeof (struct grub_xfs_dir_entry) + de->len
|
||||
- + ((smallino ? sizeof (grub_uint32_t)
|
||||
- : sizeof (grub_uint64_t))) - 1));
|
||||
+ de = grub_xfs_inline_next_de(dir->data, head, de);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -586,15 +687,11 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
>> dirblk_log2);
|
||||
blk++)
|
||||
{
|
||||
- /* The header is skipped, the first direntry is stored
|
||||
- from byte 16. */
|
||||
- int pos = 16;
|
||||
+ struct grub_xfs_dir2_entry *direntry =
|
||||
+ grub_xfs_first_de(dir->data, dirblock);
|
||||
int entries;
|
||||
- int tail_start = (dirblk_size
|
||||
- - sizeof (struct grub_xfs_dirblock_tail));
|
||||
-
|
||||
- struct grub_xfs_dirblock_tail *tail;
|
||||
- tail = (struct grub_xfs_dirblock_tail *) &dirblock[tail_start];
|
||||
+ struct grub_xfs_dirblock_tail *tail =
|
||||
+ grub_xfs_dir_tail(dir->data, dirblock);
|
||||
|
||||
numread = grub_xfs_read_file (dir, 0, 0,
|
||||
blk << dirblk_log2,
|
||||
@@ -606,13 +703,11 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
- grub_be_to_cpu32 (tail->leaf_stale));
|
||||
|
||||
/* Iterate over all entries within this block. */
|
||||
- while (pos < tail_start)
|
||||
+ while ((char *)direntry < (char *)tail)
|
||||
{
|
||||
- struct grub_xfs_dir2_entry *direntry;
|
||||
grub_uint8_t *freetag;
|
||||
char *filename;
|
||||
|
||||
- direntry = (struct grub_xfs_dir2_entry *) &dirblock[pos];
|
||||
freetag = (grub_uint8_t *) direntry;
|
||||
|
||||
if (grub_get_unaligned16 (freetag) == 0XFFFF)
|
||||
@@ -620,14 +715,16 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
grub_uint8_t *skip = (freetag + sizeof (grub_uint16_t));
|
||||
|
||||
/* This entry is not used, go to the next one. */
|
||||
- pos += grub_be_to_cpu16 (grub_get_unaligned16 (skip));
|
||||
+ direntry = (struct grub_xfs_dir2_entry *)
|
||||
+ (((char *)direntry) +
|
||||
+ grub_be_to_cpu16 (grub_get_unaligned16 (skip)));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
- filename = &dirblock[pos + sizeof (*direntry)];
|
||||
- /* The byte after the filename is for the tag, which
|
||||
- is not used by GRUB. So it can be overwritten. */
|
||||
+ filename = (char *)(direntry + 1);
|
||||
+ /* The byte after the filename is for the filetype, padding, or
|
||||
+ tag, which is not used by GRUB. So it can be overwritten. */
|
||||
filename[direntry->len] = '\0';
|
||||
|
||||
if (iterate_dir_call_hook (grub_be_to_cpu64(direntry->inode),
|
||||
@@ -644,8 +741,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t
|
||||
break;
|
||||
|
||||
/* Select the next directory entry. */
|
||||
- pos = GRUB_XFS_NEXT_DIRENT (pos, direntry->len);
|
||||
- pos = GRUB_XFS_ROUND_TO_DIRENT (pos);
|
||||
+ direntry = grub_xfs_next_de(dir->data, direntry);
|
||||
}
|
||||
}
|
||||
grub_free (dirblock);
|
||||
@@ -670,6 +766,7 @@ grub_xfs_mount (grub_disk_t disk)
|
||||
if (!data)
|
||||
return 0;
|
||||
|
||||
+ grub_dprintf("xfs", "Reading sb\n");
|
||||
/* Read the superblock. */
|
||||
if (grub_disk_read (disk, 0, 0,
|
||||
sizeof (struct grub_xfs_sblock), &data->sblock))
|
||||
@@ -697,9 +794,13 @@ grub_xfs_mount (grub_disk_t disk)
|
||||
data->diropen.inode_read = 1;
|
||||
data->bsize = grub_be_to_cpu32 (data->sblock.bsize);
|
||||
data->agsize = grub_be_to_cpu32 (data->sblock.agsize);
|
||||
+ data->hasftype = grub_xfs_sb_hasftype(data);
|
||||
+ data->hascrc = grub_xfs_sb_hascrc(data);
|
||||
|
||||
data->disk = disk;
|
||||
data->pos = 0;
|
||||
+ grub_dprintf("xfs", "Reading root ino %llu\n",
|
||||
+ (unsigned long long) grub_cpu_to_be64(data->sblock.rootino));
|
||||
|
||||
grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode);
|
||||
|
@ -1,3 +1,89 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Feb 29 03:40:22 UTC 2016 - arvidjaar@gmail.com
|
||||
|
||||
- new upstream version 2.02~beta3
|
||||
* highlights of user visible changes not yet present in openSUSE package
|
||||
- arm-uboot now generates position independent self relocating image, so
|
||||
single binary should run on all supported systems
|
||||
- loader for Xen on aarch64. grub-mkconfig support was not in time for
|
||||
beta3 yet.
|
||||
- improved ZFS support (extensible_dataset, large_blocks, embedded_data,
|
||||
hole_birth features)
|
||||
- support for IPv6 Router Advertisements
|
||||
- support for persistent memory (we do not overwrite it and pass correct
|
||||
information to OS)
|
||||
- try to display more specific icons for os-prober generated menu entries
|
||||
- grub-install detects EFI bit size and selects correct platform (x86_64-efi
|
||||
or i386-efi) independent of OS bit size; needs kernel 4.0 or higher.
|
||||
- LVM RAID1 support
|
||||
- xnu loader fixes which should make OS X menu entry generated by os-prober
|
||||
work again
|
||||
- ... and lot of fixes over entire tree
|
||||
* rediff
|
||||
- rename-grub-info-file-to-grub2.patch
|
||||
- use-grub2-as-a-package-name.patch
|
||||
- grub2-GRUB_CMDLINE_LINUX_RECOVERY-for-recovery-mode.patch
|
||||
- grub2-fix-menu-in-xen-host-server.patch
|
||||
- grub2-efi-HP-workaround.patch
|
||||
- grub2-secureboot-chainloader.patch
|
||||
- grub2-s390x-02-kexec-module-added-to-emu.patch
|
||||
- grub2-s390x-04-grub2-install.patch
|
||||
- grub2-s390x-05-grub2-mkconfig.patch
|
||||
- grub2-efi-xen-chainload.patch
|
||||
- grub2-mkconfig-aarch64.patch
|
||||
- grub2-btrfs-04-grub2-install.patch
|
||||
- grub2-ppc64-cas-reboot-support.patch
|
||||
- 0002-Add-Virtual-LAN-support.patch
|
||||
* fix grub2-secureboot-add-linuxefi.patch - use grub_memset and
|
||||
grub_memcpy instead of memset and memcpy (caused errors due to
|
||||
compiler warning)
|
||||
* drop upstream patches
|
||||
- 0001-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch
|
||||
- 0001-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch
|
||||
- 0001-efidisk-move-device-path-helpers-in-core-for-efinet.patch
|
||||
- 0002-efinet-skip-virtual-IPv4-and-IPv6-devices-when-enume.patch
|
||||
- 0003-efinet-open-Simple-Network-Protocol-exclusively.patch
|
||||
- 0001-efinet-Check-for-immediate-completition.patch
|
||||
- 0001-efinet-enable-hardware-filters-when-opening-interfac.patch
|
||||
- grub2-xen-legacy-config-device-name.patch
|
||||
- grub2-getroot-support-NVMe-device-names.patch
|
||||
- grub2-netboot-hang.patch
|
||||
- grub2-btrfs-fix-incorrect-address-reference.patch
|
||||
- aarch64-reloc.patch
|
||||
- grub2-glibc-2.20.patch (related code dropped upstream)
|
||||
- grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
|
||||
- grub2-btrfs-fix-get_root-key-comparison-failures-due-to-en.patch
|
||||
- grub2-getroot-fix-get-btrfs-fs-prefix-big-endian.patch
|
||||
- grub2-ppc64-qemu.patch
|
||||
- grub2-xfs-Add-helper-for-inode-size.patch
|
||||
- grub2-xfs-Fix-termination-loop-for-directory-iteration.patch
|
||||
- grub2-xfs-Convert-inode-numbers-to-cpu-endianity-immediate.patch
|
||||
- grub2-xfs-V5-filesystem-format-support.patch
|
||||
- 0001-Add-bootargs-parser-for-open-firmware.patch
|
||||
- grub2-arm64-set-correct-length.patch
|
||||
- grub2-arm64-setjmp-Add-missing-license-macro.patch
|
||||
- grub2-arm64-efinet-handle-get_status-on-buggy-firmware-properly.patch
|
||||
- 0001-unix-password-Fix-file-descriptor-leak.patch
|
||||
- 0002-linux-getroot-fix-descriptor-leak.patch
|
||||
- 0003-util-grub-mount-fix-descriptor-leak.patch
|
||||
- 0004-linux-ofpath-fix-descriptor-leak.patch
|
||||
- 0005-grub-fstest-fix-descriptor-leak.patch
|
||||
- ppc64le.patch
|
||||
- libgcc-prereq.patch
|
||||
- libgcc.patch
|
||||
- 0001-Fix-security-issue-when-reading-username-and-passwor.patch
|
||||
- 0001-menu-fix-line-count-calculation-for-long-lines.patch
|
||||
- grub2-arm64-Reduce-timer-event-frequency-by-10.patch
|
||||
- 0001-grub-core-kern-i386-tsc.c-calibrate_tsc-Ensure-that.patch
|
||||
- 0002-i386-tsc-Fix-unused-function-warning-on-xen.patch
|
||||
- 0003-acpi-do-not-skip-BIOS-scan-if-EBDA-length-is-zero.patch
|
||||
- 0004-tsc-Use-alternative-delay-sources-whenever-appropria.patch
|
||||
- 0005-i386-fix-TSC-calibration-using-PIT.patch
|
||||
- biendian.patch
|
||||
- ppc64_opt.patch
|
||||
* drop workarounds for gdb_grub and grub.chrp, they are now installed under fixed name
|
||||
* do not patch docs/Makefile.in, it is regenerated anyway
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 29 03:54:15 UTC 2016 - mchang@suse.com
|
||||
|
||||
|
106
grub2.spec
106
grub2.spec
@ -124,7 +124,7 @@ BuildRequires: systemd-rpm-macros
|
||||
%define only_x86_64 %{nil}
|
||||
%endif
|
||||
|
||||
Version: 2.02~beta2
|
||||
Version: 2.02~beta3
|
||||
Release: 0
|
||||
Summary: Bootloader with support for Linux, Multiboot and more
|
||||
License: GPL-3.0+
|
||||
@ -153,7 +153,6 @@ Source1000: PATCH_POLICY
|
||||
Patch1: rename-grub-info-file-to-grub2.patch
|
||||
Patch2: grub2-linux.patch
|
||||
Patch3: use-grub2-as-a-package-name.patch
|
||||
Patch4: 0001-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch
|
||||
Patch6: grub2-iterate-and-hook-for-extended-partition.patch
|
||||
Patch8: grub2-ppc-terminfo.patch
|
||||
Patch9: grub2-GRUB_CMDLINE_LINUX_RECOVERY-for-recovery-mode.patch
|
||||
@ -170,7 +169,6 @@ Patch24: grub2-secureboot-provide-linuxefi-config.patch
|
||||
Patch29: grub2-secureboot-chainloader.patch
|
||||
Patch34: grub2-secureboot-use-linuxefi-on-uefi-in-os-prober.patch
|
||||
Patch35: grub2-linguas.sh-no-rsync.patch
|
||||
Patch36: 0001-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch
|
||||
Patch37: grub2-use-Unifont-for-starfield-theme-terminal.patch
|
||||
Patch38: grub2-s390x-01-Changes-made-and-files-added-in-order-to-allow-s390x.patch
|
||||
Patch39: grub2-s390x-02-kexec-module-added-to-emu.patch
|
||||
@ -178,33 +176,16 @@ Patch40: grub2-s390x-03-output-7-bit-ascii.patch
|
||||
Patch41: grub2-s390x-04-grub2-install.patch
|
||||
Patch42: grub2-s390x-05-grub2-mkconfig.patch
|
||||
Patch43: grub2-use-rpmsort-for-version-sorting.patch
|
||||
Patch44: 0001-efidisk-move-device-path-helpers-in-core-for-efinet.patch
|
||||
Patch45: 0002-efinet-skip-virtual-IPv4-and-IPv6-devices-when-enume.patch
|
||||
Patch46: 0003-efinet-open-Simple-Network-Protocol-exclusively.patch
|
||||
Patch47: 0001-efinet-Check-for-immediate-completition.patch
|
||||
Patch48: 0001-efinet-enable-hardware-filters-when-opening-interfac.patch
|
||||
Patch51: grub2-xen-legacy-config-device-name.patch
|
||||
Patch52: grub2-getroot-support-NVMe-device-names.patch
|
||||
Patch53: grub2-getroot-treat-mdadm-ddf-as-simple-device.patch
|
||||
Patch56: grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch
|
||||
Patch57: grub2-netboot-hang.patch
|
||||
Patch58: grub2-xen-linux16.patch
|
||||
Patch59: grub2-efi-disable-video-cirrus-and-bochus.patch
|
||||
Patch60: grub2-editenv-add-warning-message.patch
|
||||
Patch61: grub2-vbe-blacklist-preferred-1440x900x32.patch
|
||||
Patch62: grub2-btrfs-fix-incorrect-address-reference.patch
|
||||
Patch63: aarch64-reloc.patch
|
||||
Patch64: grub2-btrfs-workaround-grub2-once.patch
|
||||
Patch65: grub2-mkconfig-aarch64.patch
|
||||
# Fix build with glibc 2.20+
|
||||
Patch66: grub2-glibc-2.20.patch
|
||||
Patch67: grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch
|
||||
Patch68: grub2-btrfs-fix-get_root-key-comparison-failures-due-to-en.patch
|
||||
Patch69: grub2-getroot-fix-get-btrfs-fs-prefix-big-endian.patch
|
||||
Patch70: grub2-default-distributor.patch
|
||||
Patch71: grub2-menu-unrestricted.patch
|
||||
Patch72: 0001-Fix-security-issue-when-reading-username-and-passwor.patch
|
||||
Patch73: 0001-menu-fix-line-count-calculation-for-long-lines.patch
|
||||
# Btrfs snapshot booting related patches
|
||||
Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
|
||||
Patch102: grub2-btrfs-02-export-subvolume-envvars.patch
|
||||
@ -217,40 +198,11 @@ Patch120: grub2-efi-xen-chainload.patch
|
||||
Patch121: grub2-efi-chainloader-root.patch
|
||||
Patch122: grub2-efi-xen-cmdline.patch
|
||||
# PPC64 LE support
|
||||
Patch201: ppc64le.patch
|
||||
Patch202: libgcc-prereq.patch
|
||||
Patch203: libgcc.patch
|
||||
Patch204: grub2-ppc64-qemu.patch
|
||||
Patch205: grub2-ppc64le-disable-video.patch
|
||||
Patch207: grub2-ppc64le-memory-map.patch
|
||||
Patch229: grub2-xfs-Add-helper-for-inode-size.patch
|
||||
Patch230: grub2-xfs-Fix-termination-loop-for-directory-iteration.patch
|
||||
Patch231: grub2-xfs-Convert-inode-numbers-to-cpu-endianity-immediate.patch
|
||||
Patch232: grub2-xfs-V5-filesystem-format-support.patch
|
||||
Patch233: grub2-use-stat-instead-of-udevadm-for-partition-lookup.patch
|
||||
Patch234: 0001-Add-bootargs-parser-for-open-firmware.patch
|
||||
Patch235: 0002-Add-Virtual-LAN-support.patch
|
||||
Patch236: grub2-efi_gop-avoid-low-resolution.patch
|
||||
Patch238: grub2-arm64-Reduce-timer-event-frequency-by-10.patch
|
||||
Patch239: grub2-arm64-set-correct-length.patch
|
||||
Patch240: grub2-arm64-setjmp-Add-missing-license-macro.patch
|
||||
Patch241: grub2-arm64-efinet-handle-get_status-on-buggy-firmware-properly.patch
|
||||
# Upstream patches for fixing file descriptor leakage (bsc#943784)
|
||||
Patch260: 0001-unix-password-Fix-file-descriptor-leak.patch
|
||||
Patch261: 0002-linux-getroot-fix-descriptor-leak.patch
|
||||
Patch262: 0003-util-grub-mount-fix-descriptor-leak.patch
|
||||
Patch263: 0004-linux-ofpath-fix-descriptor-leak.patch
|
||||
Patch264: 0005-grub-fstest-fix-descriptor-leak.patch
|
||||
# Upstream patch to fix patch 0001-unix-password-Fix-file-descriptor-leak.patch
|
||||
Patch265: 0001-unix-do-not-close-stdin-in-grub_passwd_get.patch
|
||||
# Backport upstream patches for HyperV gen2 TSC timer calbration without RTC (bsc#904647)
|
||||
Patch270: 0001-grub-core-kern-i386-tsc.c-calibrate_tsc-Ensure-that.patch
|
||||
Patch271: 0002-i386-tsc-Fix-unused-function-warning-on-xen.patch
|
||||
Patch272: 0003-acpi-do-not-skip-BIOS-scan-if-EBDA-length-is-zero.patch
|
||||
Patch273: 0004-tsc-Use-alternative-delay-sources-whenever-appropria.patch
|
||||
Patch274: 0005-i386-fix-TSC-calibration-using-PIT.patch
|
||||
Patch275: biendian.patch
|
||||
Patch276: ppc64_opt.patch
|
||||
Patch277: grub2-ppc64-cas-reboot-support.patch
|
||||
|
||||
Requires: gettext-runtime
|
||||
@ -419,7 +371,6 @@ mv docs/grub.texi docs/grub2.texi
|
||||
mv po/grub.pot po/%{name}.pot
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch6 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
@ -436,7 +387,6 @@ mv po/grub.pot po/%{name}.pot
|
||||
%patch29 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
@ -444,32 +394,16 @@ mv po/grub.pot po/%{name}.pot
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch43 -p1
|
||||
%patch44 -p1
|
||||
%patch45 -p1
|
||||
%patch46 -p1
|
||||
%patch47 -p1
|
||||
%patch48 -p1
|
||||
%patch51 -p1
|
||||
%patch52 -p1
|
||||
%patch53 -p1
|
||||
%patch56 -p1
|
||||
%patch57 -p1
|
||||
%patch58 -p1
|
||||
%patch59 -p1
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch63 -p1
|
||||
%patch64 -p1
|
||||
%patch65 -p1
|
||||
%patch66 -p1
|
||||
%patch67 -p1
|
||||
%patch68 -p1
|
||||
%patch69 -p1
|
||||
%patch70 -p1
|
||||
%patch71 -p1
|
||||
%patch72 -p1
|
||||
%patch73 -p1
|
||||
%patch101 -p1
|
||||
%patch102 -p1
|
||||
%patch103 -p1
|
||||
@ -479,37 +413,11 @@ mv po/grub.pot po/%{name}.pot
|
||||
%patch120 -p1
|
||||
%patch121 -p1
|
||||
%patch122 -p1
|
||||
%patch201 -p1
|
||||
%patch202 -p1
|
||||
%patch203 -p1
|
||||
%patch204 -p1
|
||||
%patch205 -p1
|
||||
%patch207 -p1
|
||||
%patch229 -p1
|
||||
%patch230 -p1
|
||||
%patch231 -p1
|
||||
%patch232 -p1
|
||||
%patch233 -p1
|
||||
%patch234 -p1
|
||||
%patch235 -p1
|
||||
%patch236 -p1
|
||||
%patch238 -p1
|
||||
%patch239 -p1
|
||||
%patch240 -p1
|
||||
%patch241 -p1
|
||||
%patch260 -p1
|
||||
%patch261 -p1
|
||||
%patch262 -p1
|
||||
%patch263 -p1
|
||||
%patch264 -p1
|
||||
%patch265 -p1
|
||||
%patch270 -p1
|
||||
%patch271 -p1
|
||||
%patch272 -p1
|
||||
%patch273 -p1
|
||||
%patch274 -p1
|
||||
%patch275 -p1
|
||||
%patch276 -p1
|
||||
%patch277 -p1
|
||||
|
||||
# Generate po/LINGUAS for message catalogs ...
|
||||
@ -727,12 +635,6 @@ install -m 644 -D %{SOURCE15} $RPM_BUILD_ROOT%{_unitdir}/grub2-once.service
|
||||
install -m 755 -D %{SOURCE17} $RPM_BUILD_ROOT%{_libdir}/systemd/system-sleep/grub2.sleep
|
||||
%endif
|
||||
|
||||
%ifarch ppc ppc64 ppc64le
|
||||
# Rename grub2.chrp back to grub.chrp so it is found by tools
|
||||
mv $RPM_BUILD_ROOT%{_libdir}/%{name}/%{grubarch}/%{name}.chrp \
|
||||
$RPM_BUILD_ROOT%{_libdir}/%{name}/%{grubarch}/grub.chrp
|
||||
%endif
|
||||
|
||||
R=$RPM_BUILD_ROOT
|
||||
%ifarch %{ix86} x86_64
|
||||
%else
|
||||
@ -996,9 +898,9 @@ fi
|
||||
%{_sbindir}/%{name}-ofpathname
|
||||
%{_sbindir}/%{name}-sparc64-setup
|
||||
%{_mandir}/man1/%{name}-glue-efi.1.*
|
||||
%{_mandir}/man1/%{name}-macbless.1.*
|
||||
%{_mandir}/man1/%{name}-mount.1.*
|
||||
%{_mandir}/man8/%{name}-bios-setup.8.*
|
||||
%{_mandir}/man8/%{name}-macbless.8.*
|
||||
%{_mandir}/man8/%{name}-ofpathname.8.*
|
||||
%{_mandir}/man8/%{name}-sparc64-setup.8.*
|
||||
%endif
|
||||
@ -1031,7 +933,7 @@ fi
|
||||
%ifarch x86_64
|
||||
%{_libdir}/%{name}/%{grubarch}/efiemu*.o
|
||||
%endif
|
||||
%{_libdir}/%{name}/%{grubarch}/gdb_grub2
|
||||
%{_libdir}/%{name}/%{grubarch}/gdb_grub
|
||||
%{_libdir}/%{name}/%{grubarch}/gmodule.pl
|
||||
%{_libdir}/%{name}/%{grubarch}/kernel.exec
|
||||
%{_libdir}/%{name}/%{grubarch}/modinfo.sh
|
||||
@ -1052,7 +954,7 @@ fi
|
||||
%{_libdir}/%{name}/%{grubefiarch}/*.lst
|
||||
%{_libdir}/%{name}/%{grubefiarch}/*.mod
|
||||
%{_libdir}/%{name}/%{grubefiarch}/*.module
|
||||
%{_libdir}/%{name}/%{grubefiarch}/gdb_grub2
|
||||
%{_libdir}/%{name}/%{grubefiarch}/gdb_grub
|
||||
%{_libdir}/%{name}/%{grubefiarch}/gmodule.pl
|
||||
%{_libdir}/%{name}/%{grubefiarch}/kernel.exec
|
||||
%{_libdir}/%{name}/%{grubefiarch}/modinfo.sh
|
||||
|
@ -1,256 +0,0 @@
|
||||
From f371dd5da81701f7bc3d28c67cb4c2c289728691 Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Borzenkov <arvidjaar@gmail.com>
|
||||
Date: Sat, 18 Jan 2014 21:22:57 +0400
|
||||
Subject: [PATCH] fix include loop on MinGW due to libintl.h pulling stdio.h
|
||||
|
||||
In file included from ./include/grub/dl.h:23:0,
|
||||
from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3:
|
||||
./include/grub/list.h:34:18: warning: conflicting types for 'grub_list_push' [en
|
||||
abled by default]
|
||||
void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
|
||||
^
|
||||
./include/grub/symbol.h:68:25: note: in definition of macro 'EXPORT_FUNC'
|
||||
# define EXPORT_FUNC(x) x
|
||||
^
|
||||
In file included from ./include/grub/fs.h:30:0,
|
||||
from ./include/grub/file.h:25,
|
||||
from ./grub-core/lib/posix_wrap/stdio.h:23,
|
||||
from c:\mingw\include\libintl.h:314,
|
||||
from ./include/grub/i18n.h:33,
|
||||
from ./include/grub/misc.h:27,
|
||||
from ./include/grub/list.h:25,
|
||||
from ./include/grub/dl.h:28,
|
||||
from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3:
|
||||
./include/grub/partition.h:106:3: note: previous implicit declaration of 'grub_l
|
||||
ist_push' was here
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_partition_map_list),
|
||||
^
|
||||
list.h needs just ATTRIBUTE_ERROR from misc.h; split compiler features
|
||||
into separate file grub/compiler.h and include it instead.
|
||||
---
|
||||
ChangeLog | 14 +++++++++++
|
||||
grub-core/commands/fileXX.c | 1 +
|
||||
grub-core/efiemu/prepare.c | 1 +
|
||||
grub-core/loader/i386/xen_file.c | 1 +
|
||||
grub-core/loader/i386/xen_fileXX.c | 1 +
|
||||
grub-core/video/capture.c | 1 +
|
||||
include/grub/command.h | 1 +
|
||||
include/grub/compiler.h | 51 ++++++++++++++++++++++++++++++++++++++
|
||||
include/grub/dl.h | 1 +
|
||||
include/grub/list.h | 4 +--
|
||||
include/grub/misc.h | 29 +---------------------
|
||||
include/grub/procfs.h | 1 +
|
||||
12 files changed, 76 insertions(+), 30 deletions(-)
|
||||
create mode 100644 include/grub/compiler.h
|
||||
|
||||
diff --git a/grub-core/commands/fileXX.c b/grub-core/commands/fileXX.c
|
||||
index c9857ff..58e1094 100644
|
||||
--- a/grub-core/commands/fileXX.c
|
||||
+++ b/grub-core/commands/fileXX.c
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <grub/fileid.h>
|
||||
#include <grub/elfload.h>
|
||||
+#include <grub/misc.h>
|
||||
|
||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||
|
||||
diff --git a/grub-core/efiemu/prepare.c b/grub-core/efiemu/prepare.c
|
||||
index fb1b25d..84c3368 100644
|
||||
--- a/grub-core/efiemu/prepare.c
|
||||
+++ b/grub-core/efiemu/prepare.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <grub/err.h>
|
||||
#include <grub/mm.h>
|
||||
#include <grub/types.h>
|
||||
+#include <grub/misc.h>
|
||||
#include <grub/efiemu/efiemu.h>
|
||||
#include <grub/crypto.h>
|
||||
|
||||
diff --git a/grub-core/loader/i386/xen_file.c b/grub-core/loader/i386/xen_file.c
|
||||
index ebbf6aa..ff23235 100644
|
||||
--- a/grub-core/loader/i386/xen_file.c
|
||||
+++ b/grub-core/loader/i386/xen_file.c
|
||||
@@ -18,6 +18,7 @@
|
||||
|
||||
#include <grub/xen_file.h>
|
||||
#include <grub/i386/linux.h>
|
||||
+#include <grub/misc.h>
|
||||
|
||||
grub_elf_t
|
||||
grub_xen_file (grub_file_t file)
|
||||
diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c
|
||||
index 6df0015..73a5f90 100644
|
||||
--- a/grub-core/loader/i386/xen_fileXX.c
|
||||
+++ b/grub-core/loader/i386/xen_fileXX.c
|
||||
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <grub/xen_file.h>
|
||||
+#include <grub/misc.h>
|
||||
|
||||
static grub_err_t
|
||||
parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
||||
diff --git a/grub-core/video/capture.c b/grub-core/video/capture.c
|
||||
index 67c8edd..4f83c74 100644
|
||||
--- a/grub-core/video/capture.c
|
||||
+++ b/grub-core/video/capture.c
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <grub/video.h>
|
||||
#include <grub/video_fb.h>
|
||||
#include <grub/mm.h>
|
||||
+#include <grub/misc.h>
|
||||
|
||||
static struct
|
||||
{
|
||||
diff --git a/include/grub/command.h b/include/grub/command.h
|
||||
index 8705a63..eee4e84 100644
|
||||
--- a/include/grub/command.h
|
||||
+++ b/include/grub/command.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <grub/symbol.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/list.h>
|
||||
+#include <grub/misc.h>
|
||||
|
||||
typedef enum grub_command_flags
|
||||
{
|
||||
diff --git a/include/grub/compiler.h b/include/grub/compiler.h
|
||||
new file mode 100644
|
||||
index 0000000..c9e1d7a
|
||||
--- /dev/null
|
||||
+++ b/include/grub/compiler.h
|
||||
@@ -0,0 +1,51 @@
|
||||
+/* compiler.h - macros for various compiler features */
|
||||
+/*
|
||||
+ * GRUB -- GRand Unified Bootloader
|
||||
+ * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2010,2014 Free Software Foundation, Inc.
|
||||
+ *
|
||||
+ * GRUB is free software: you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation, either version 3 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * GRUB is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+#ifndef GRUB_COMPILER_HEADER
|
||||
+#define GRUB_COMPILER_HEADER 1
|
||||
+
|
||||
+/* GCC version checking borrowed from glibc. */
|
||||
+#if defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||
+# define GNUC_PREREQ(maj,min) \
|
||||
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
+#else
|
||||
+# define GNUC_PREREQ(maj,min) 0
|
||||
+#endif
|
||||
+
|
||||
+/* Does this compiler support compile-time error attributes? */
|
||||
+#if GNUC_PREREQ(4,3)
|
||||
+# define ATTRIBUTE_ERROR(msg) \
|
||||
+ __attribute__ ((__error__ (msg)))
|
||||
+#else
|
||||
+# define ATTRIBUTE_ERROR(msg) __attribute__ ((noreturn))
|
||||
+#endif
|
||||
+
|
||||
+#if GNUC_PREREQ(4,4)
|
||||
+# define GNU_PRINTF gnu_printf
|
||||
+#else
|
||||
+# define GNU_PRINTF printf
|
||||
+#endif
|
||||
+
|
||||
+#if GNUC_PREREQ(3,4)
|
||||
+# define WARN_UNUSED_RESULT __attribute__ ((warn_unused_result))
|
||||
+#else
|
||||
+# define WARN_UNUSED_RESULT
|
||||
+#endif
|
||||
+
|
||||
+#endif /* ! GRUB_COMPILER_HEADER */
|
||||
diff --git a/include/grub/dl.h b/include/grub/dl.h
|
||||
index d29a899..9562fa6 100644
|
||||
--- a/include/grub/dl.h
|
||||
+++ b/include/grub/dl.h
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <grub/types.h>
|
||||
#include <grub/elf.h>
|
||||
#include <grub/list.h>
|
||||
+#include <grub/misc.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
diff --git a/include/grub/list.h b/include/grub/list.h
|
||||
index edd20ad..d170ff6 100644
|
||||
--- a/include/grub/list.h
|
||||
+++ b/include/grub/list.h
|
||||
@@ -21,8 +21,8 @@
|
||||
#define GRUB_LIST_HEADER 1
|
||||
|
||||
#include <grub/symbol.h>
|
||||
-#include <grub/types.h>
|
||||
-#include <grub/misc.h>
|
||||
+#include <grub/err.h>
|
||||
+#include <grub/compiler.h>
|
||||
|
||||
struct grub_list
|
||||
{
|
||||
diff --git a/include/grub/misc.h b/include/grub/misc.h
|
||||
index 2cf74b5..c6cd456 100644
|
||||
--- a/include/grub/misc.h
|
||||
+++ b/include/grub/misc.h
|
||||
@@ -25,34 +25,7 @@
|
||||
#include <grub/symbol.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/i18n.h>
|
||||
-
|
||||
-/* GCC version checking borrowed from glibc. */
|
||||
-#if defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||
-# define GNUC_PREREQ(maj,min) \
|
||||
- ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
|
||||
-#else
|
||||
-# define GNUC_PREREQ(maj,min) 0
|
||||
-#endif
|
||||
-
|
||||
-/* Does this compiler support compile-time error attributes? */
|
||||
-#if GNUC_PREREQ(4,3)
|
||||
-# define ATTRIBUTE_ERROR(msg) \
|
||||
- __attribute__ ((__error__ (msg)))
|
||||
-#else
|
||||
-# define ATTRIBUTE_ERROR(msg) __attribute__ ((noreturn))
|
||||
-#endif
|
||||
-
|
||||
-#if GNUC_PREREQ(4,4)
|
||||
-# define GNU_PRINTF gnu_printf
|
||||
-#else
|
||||
-# define GNU_PRINTF printf
|
||||
-#endif
|
||||
-
|
||||
-#if GNUC_PREREQ(3,4)
|
||||
-# define WARN_UNUSED_RESULT __attribute__ ((warn_unused_result))
|
||||
-#else
|
||||
-# define WARN_UNUSED_RESULT
|
||||
-#endif
|
||||
+#include <grub/compiler.h>
|
||||
|
||||
#define ALIGN_UP(addr, align) \
|
||||
((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1))
|
||||
diff --git a/include/grub/procfs.h b/include/grub/procfs.h
|
||||
index d393da7..8cc331d 100644
|
||||
--- a/include/grub/procfs.h
|
||||
+++ b/include/grub/procfs.h
|
||||
@@ -20,6 +20,7 @@
|
||||
#define GRUB_PROCFS_HEADER 1
|
||||
|
||||
#include <grub/list.h>
|
||||
+#include <grub/types.h>
|
||||
|
||||
struct grub_procfs_entry
|
||||
{
|
||||
--
|
||||
2.1.4
|
||||
|
440
libgcc.patch
440
libgcc.patch
@ -1,440 +0,0 @@
|
||||
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
|
||||
Date: Wed, 13 Aug 2014 19:00:19 +0000
|
||||
Subject: [PATCH 142/143] Files reorganization and include some libgcc fuctions
|
||||
|
||||
As we avoid libgcc dependency for powerpc64el, we moved some functions
|
||||
to other files and add the necessary ones.
|
||||
|
||||
* Makefile.core.def: Include compiler-rt.S.
|
||||
* misc.c: Add the necessary libgcc functions.
|
||||
* compiler-rt.S: New file.
|
||||
* libgcc.h: Move some content from here ...
|
||||
* compiler.h: ... to here.
|
||||
|
||||
Also-By: Brent Baude <bbaude@redhat.com>
|
||||
Also-By: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
|
||||
---
|
||||
grub-core/Makefile.core.def | 1 +
|
||||
grub-core/kern/misc.c | 107 ++++++++++++++++++++++++++++
|
||||
grub-core/kern/powerpc/compiler-rt.S | 130 +++++++++++++++++++++++++++++++++++
|
||||
include/grub/compiler.h | 61 ++++++++++++++++
|
||||
include/grub/libgcc.h | 67 ------------------
|
||||
5 files changed, 299 insertions(+), 67 deletions(-)
|
||||
create mode 100644 grub-core/kern/powerpc/compiler-rt.S
|
||||
|
||||
Index: grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/Makefile.core.def
|
||||
+++ grub-2.02~beta2/grub-core/Makefile.core.def
|
||||
@@ -252,6 +252,7 @@ kernel = {
|
||||
|
||||
powerpc_ieee1275 = kern/powerpc/cache.S;
|
||||
powerpc_ieee1275 = kern/powerpc/dl.c;
|
||||
+ powerpc_ieee1275 = kern/powerpc/compiler-rt.S;
|
||||
|
||||
sparc64_ieee1275 = kern/sparc64/cache.S;
|
||||
sparc64_ieee1275 = kern/sparc64/dl.c;
|
||||
Index: grub-2.02~beta2/grub-core/kern/misc.c
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/grub-core/kern/misc.c
|
||||
+++ grub-2.02~beta2/grub-core/kern/misc.c
|
||||
@@ -1339,3 +1339,110 @@ grub_real_boot_time (const char *file,
|
||||
grub_error_pop ();
|
||||
}
|
||||
#endif
|
||||
+
|
||||
+#if defined (NO_LIBGCC)
|
||||
+
|
||||
+/* Based on libgcc2.c from gcc suite. */
|
||||
+int
|
||||
+__ucmpdi2 (grub_uint64_t a, grub_uint64_t b)
|
||||
+{
|
||||
+ union component64 ac, bc;
|
||||
+ ac.full = a;
|
||||
+ bc.full = b;
|
||||
+
|
||||
+ if (ac.high < bc.high)
|
||||
+ return 0;
|
||||
+ else if (ac.high > bc.high)
|
||||
+ return 2;
|
||||
+
|
||||
+ if (ac.low < bc.low)
|
||||
+ return 0;
|
||||
+ else if (ac.low > bc.low)
|
||||
+ return 2;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* Based on libgcc2.c from gcc suite. */
|
||||
+grub_uint64_t
|
||||
+__lshrdi3 (grub_uint64_t u, int b)
|
||||
+{
|
||||
+ if (b == 0)
|
||||
+ return u;
|
||||
+
|
||||
+ const union component64 uu = {.full = u};
|
||||
+ const int bm = 32 - b;
|
||||
+ union component64 w;
|
||||
+
|
||||
+ if (bm <= 0)
|
||||
+ {
|
||||
+ w.high = 0;
|
||||
+ w.low = (grub_uint32_t) uu.high >> -bm;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ const grub_uint32_t carries = (grub_uint32_t) uu.high << bm;
|
||||
+
|
||||
+ w.high = (grub_uint32_t) uu.high >> b;
|
||||
+ w.low = ((grub_uint32_t) uu.low >> b) | carries;
|
||||
+ }
|
||||
+
|
||||
+ return w.full;
|
||||
+}
|
||||
+
|
||||
+/* Based on libgcc2.c from gcc suite. */
|
||||
+grub_uint64_t
|
||||
+__ashrdi3 (grub_uint64_t u, int b)
|
||||
+{
|
||||
+ if (b == 0)
|
||||
+ return u;
|
||||
+
|
||||
+ const union component64 uu = {.full = u};
|
||||
+ const int bm = 32 - b;
|
||||
+ union component64 w;
|
||||
+
|
||||
+ if (bm <= 0)
|
||||
+ {
|
||||
+ /* w.high = 1..1 or 0..0 */
|
||||
+ w.high = uu.high >> (32 - 1);
|
||||
+ w.low = uu.high >> -bm;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ const grub_uint32_t carries = (grub_uint32_t) uu.high << bm;
|
||||
+
|
||||
+ w.high = uu.high >> b;
|
||||
+ w.low = ((grub_uint32_t) uu.low >> b) | carries;
|
||||
+ }
|
||||
+
|
||||
+ return w.full;
|
||||
+}
|
||||
+
|
||||
+/* Based on libgcc2.c from gcc suite. */
|
||||
+grub_uint64_t
|
||||
+__ashldi3 (grub_uint64_t u, int b)
|
||||
+{
|
||||
+ if (b == 0)
|
||||
+ return u;
|
||||
+
|
||||
+ const union component64 uu = {.full = u};
|
||||
+ const int bm = 32 - b;
|
||||
+ union component64 w;
|
||||
+
|
||||
+ if (bm <= 0)
|
||||
+ {
|
||||
+ w.low = 0;
|
||||
+ w.high = (grub_uint32_t) uu.low << -bm;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ const grub_uint32_t carries = (grub_uint32_t) uu.low >> bm;
|
||||
+
|
||||
+ w.low = (grub_uint32_t) uu.low << b;
|
||||
+ w.high = ((grub_uint32_t) uu.high << b) | carries;
|
||||
+ }
|
||||
+
|
||||
+ return w.full;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
Index: grub-2.02~beta2/grub-core/kern/powerpc/compiler-rt.S
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ grub-2.02~beta2/grub-core/kern/powerpc/compiler-rt.S
|
||||
@@ -0,0 +1,130 @@
|
||||
+/*
|
||||
+ * Special support for eabi and SVR4
|
||||
+ *
|
||||
+ * Copyright (C) 1995-2014 Free Software Foundation, Inc.
|
||||
+ * Written By Michael Meissner
|
||||
+ * 64-bit support written by David Edelsohn
|
||||
+ *
|
||||
+ * This file is free software; you can redistribute it and/or modify it
|
||||
+ * under the terms of the GNU General Public License as published by the
|
||||
+ * Free Software Foundation; either version 3, or (at your option) any
|
||||
+ * later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful, but
|
||||
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * General Public License for more details.
|
||||
+ *
|
||||
+ * Under Section 7 of GPL version 3, you are granted additional
|
||||
+ * permissions described in the GCC Runtime Library Exception, version
|
||||
+ * 3.1, as published by the Free Software Foundation.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License and
|
||||
+ * a copy of the GCC Runtime Library Exception along with this program;
|
||||
+ * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
+ * <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+/* Do any initializations needed for the eabi environment */
|
||||
+
|
||||
+#include <grub/symbol.h>
|
||||
+#include <grub/dl.h>
|
||||
+
|
||||
+ .section ".text"
|
||||
+
|
||||
+#define CFI_RESTORE(reg) .cfi_restore reg
|
||||
+#define CFI_OFFSET(reg, off) .cfi_offset reg, off
|
||||
+#define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg
|
||||
+#define CFI_STARTPROC .cfi_startproc
|
||||
+#define CFI_ENDPROC .cfi_endproc
|
||||
+
|
||||
+/* Routines for restoring integer registers, called by the compiler. */
|
||||
+/* Called with r11 pointing to the stack header word of the caller of the */
|
||||
+/* function, just beyond the end of the integer restore area. */
|
||||
+
|
||||
+CFI_STARTPROC
|
||||
+CFI_DEF_CFA_REGISTER (11)
|
||||
+CFI_OFFSET (65, 4)
|
||||
+CFI_OFFSET (14, -72)
|
||||
+CFI_OFFSET (15, -68)
|
||||
+CFI_OFFSET (16, -64)
|
||||
+CFI_OFFSET (17, -60)
|
||||
+CFI_OFFSET (18, -56)
|
||||
+CFI_OFFSET (19, -52)
|
||||
+CFI_OFFSET (20, -48)
|
||||
+CFI_OFFSET (21, -44)
|
||||
+CFI_OFFSET (22, -40)
|
||||
+CFI_OFFSET (23, -36)
|
||||
+CFI_OFFSET (24, -32)
|
||||
+CFI_OFFSET (25, -28)
|
||||
+CFI_OFFSET (26, -24)
|
||||
+CFI_OFFSET (27, -20)
|
||||
+CFI_OFFSET (28, -16)
|
||||
+CFI_OFFSET (29, -12)
|
||||
+CFI_OFFSET (30, -8)
|
||||
+CFI_OFFSET (31, -4)
|
||||
+FUNCTION(_restgpr_14_x) lwz 14,-72(11) /* restore gp registers */
|
||||
+CFI_RESTORE (14)
|
||||
+FUNCTION(_restgpr_15_x) lwz 15,-68(11)
|
||||
+CFI_RESTORE (15)
|
||||
+FUNCTION(_restgpr_16_x) lwz 16,-64(11)
|
||||
+CFI_RESTORE (16)
|
||||
+FUNCTION(_restgpr_17_x) lwz 17,-60(11)
|
||||
+CFI_RESTORE (17)
|
||||
+FUNCTION(_restgpr_18_x) lwz 18,-56(11)
|
||||
+CFI_RESTORE (18)
|
||||
+FUNCTION(_restgpr_19_x) lwz 19,-52(11)
|
||||
+CFI_RESTORE (19)
|
||||
+FUNCTION(_restgpr_20_x) lwz 20,-48(11)
|
||||
+CFI_RESTORE (20)
|
||||
+FUNCTION(_restgpr_21_x) lwz 21,-44(11)
|
||||
+CFI_RESTORE (21)
|
||||
+FUNCTION(_restgpr_22_x) lwz 22,-40(11)
|
||||
+CFI_RESTORE (22)
|
||||
+FUNCTION(_restgpr_23_x) lwz 23,-36(11)
|
||||
+CFI_RESTORE (23)
|
||||
+FUNCTION(_restgpr_24_x) lwz 24,-32(11)
|
||||
+CFI_RESTORE (24)
|
||||
+FUNCTION(_restgpr_25_x) lwz 25,-28(11)
|
||||
+CFI_RESTORE (25)
|
||||
+FUNCTION(_restgpr_26_x) lwz 26,-24(11)
|
||||
+CFI_RESTORE (26)
|
||||
+FUNCTION(_restgpr_27_x) lwz 27,-20(11)
|
||||
+CFI_RESTORE (27)
|
||||
+FUNCTION(_restgpr_28_x) lwz 28,-16(11)
|
||||
+CFI_RESTORE (28)
|
||||
+FUNCTION(_restgpr_29_x) lwz 29,-12(11)
|
||||
+CFI_RESTORE (29)
|
||||
+FUNCTION(_restgpr_30_x) lwz 30,-8(11)
|
||||
+CFI_RESTORE (30)
|
||||
+FUNCTION(_restgpr_31_x) lwz 0,4(11)
|
||||
+ lwz 31,-4(11)
|
||||
+CFI_RESTORE (31)
|
||||
+ mtlr 0
|
||||
+CFI_RESTORE (65)
|
||||
+ mr 1,11
|
||||
+CFI_DEF_CFA_REGISTER (1)
|
||||
+ blr
|
||||
+CFI_ENDPROC
|
||||
+
|
||||
+CFI_STARTPROC
|
||||
+FUNCTION(_savegpr_14) stw 14,-72(11) /* save gp registers */
|
||||
+FUNCTION(_savegpr_15) stw 15,-68(11)
|
||||
+FUNCTION(_savegpr_16) stw 16,-64(11)
|
||||
+FUNCTION(_savegpr_17) stw 17,-60(11)
|
||||
+FUNCTION(_savegpr_18) stw 18,-56(11)
|
||||
+FUNCTION(_savegpr_19) stw 19,-52(11)
|
||||
+FUNCTION(_savegpr_20) stw 20,-48(11)
|
||||
+FUNCTION(_savegpr_21) stw 21,-44(11)
|
||||
+FUNCTION(_savegpr_22) stw 22,-40(11)
|
||||
+FUNCTION(_savegpr_23) stw 23,-36(11)
|
||||
+FUNCTION(_savegpr_24) stw 24,-32(11)
|
||||
+FUNCTION(_savegpr_25) stw 25,-28(11)
|
||||
+FUNCTION(_savegpr_26) stw 26,-24(11)
|
||||
+FUNCTION(_savegpr_27) stw 27,-20(11)
|
||||
+FUNCTION(_savegpr_28) stw 28,-16(11)
|
||||
+FUNCTION(_savegpr_29) stw 29,-12(11)
|
||||
+FUNCTION(_savegpr_30) stw 30,-8(11)
|
||||
+FUNCTION(_savegpr_31) stw 31,-4(11)
|
||||
+ blr
|
||||
+CFI_ENDPROC
|
||||
Index: grub-2.02~beta2/include/grub/compiler.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/compiler.h
|
||||
+++ grub-2.02~beta2/include/grub/compiler.h
|
||||
@@ -48,4 +48,65 @@
|
||||
# define WARN_UNUSED_RESULT
|
||||
#endif
|
||||
|
||||
+#include "types.h"
|
||||
+
|
||||
+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
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+#if defined (__powerpc__)
|
||||
+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);
|
||||
+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
|
||||
+
|
||||
#endif /* ! GRUB_COMPILER_HEADER */
|
||||
Index: grub-2.02~beta2/include/grub/libgcc.h
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/include/grub/libgcc.h
|
||||
+++ grub-2.02~beta2/include/grub/libgcc.h
|
||||
@@ -16,79 +16,6 @@
|
||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
-/* We need to include config-util.h.in for HAVE_*. */
|
||||
-#ifndef __STDC_VERSION__
|
||||
-#define __STDC_VERSION__ 0
|
||||
-#endif
|
||||
-#include <config-util.h>
|
||||
-
|
||||
-/* 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
|
||||
-# ifdef HAVE___CTZDI2
|
||||
-void EXPORT_FUNC (__ctzdi2) (void);
|
||||
-# endif
|
||||
-# ifdef HAVE___CTZSI2
|
||||
-void EXPORT_FUNC (__ctzsi2) (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__)
|
||||
void EXPORT_FUNC (__aeabi_lasr) (void);
|
||||
void EXPORT_FUNC (__aeabi_llsl) (void);
|
@ -1,26 +0,0 @@
|
||||
From afd0f21b2027310fda52b00ac1b964041d39a363 Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
|
||||
Date: Mon, 15 Jun 2015 09:10:19 -0300
|
||||
Subject: [PATCH] Add flag for powerpc ieee1275 to avoid unneeded optimizations
|
||||
|
||||
---
|
||||
conf/Makefile.common | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/conf/Makefile.common b/conf/Makefile.common
|
||||
index 96e58c9..fcb8d2e 100644
|
||||
--- a/conf/Makefile.common
|
||||
+++ b/conf/Makefile.common
|
||||
@@ -17,6 +17,9 @@ endif
|
||||
if COND_arm64
|
||||
CFLAGS_PLATFORM += -mcmodel=large
|
||||
endif
|
||||
+if COND_powerpc_ieee1275
|
||||
+ CFLAGS_PLATFORM += -mcpu=powerpc
|
||||
+endif
|
||||
|
||||
#FIXME: discover and check XEN headers
|
||||
CPPFLAGS_XEN = -I/usr/include
|
||||
--
|
||||
2.1.4
|
||||
|
@ -1,95 +0,0 @@
|
||||
From 8014cad21bb2cc986f10f0a927036851f490a8ec Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
|
||||
Date: Wed, 13 Aug 2014 18:59:58 +0000
|
||||
Subject: [PATCH 141/143] Add powerpc little-endian (ppc64le) flags
|
||||
|
||||
libgcc dependency was removed *just* for this target because
|
||||
the distros that use ppc64el doesn't have 32-bit support on it.
|
||||
|
||||
* configure.ac: Add targets for powerpc64el and skip libgcc.
|
||||
* Makefile.am: Likewise.
|
||||
---
|
||||
configure.ac | 17 +++++++++++++++--
|
||||
grub-core/Makefile.am | 2 ++
|
||||
2 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 2632e2d..53fd7c7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -142,6 +142,7 @@ if test "x$with_platform" = x; then
|
||||
x86_64-*) platform=pc ;;
|
||||
powerpc-*) platform=ieee1275 ;;
|
||||
powerpc64-*) platform=ieee1275 ;;
|
||||
+ powerpc64le-*) platform=ieee1275 ;;
|
||||
sparc64-*) platform=ieee1275 ;;
|
||||
mipsel-*) platform=loongson ;;
|
||||
mips-*) platform=arc ;;
|
||||
@@ -160,6 +161,7 @@ case "$target_cpu"-"$platform" in
|
||||
x86_64-xen) ;;
|
||||
x86_64-*) target_cpu=i386 ;;
|
||||
powerpc64-ieee1275) target_cpu=powerpc ;;
|
||||
+ powerpc64le-ieee1275) target_cpu=powerpc ;;
|
||||
esac
|
||||
|
||||
# Check if the platform is supported, make final adjustments.
|
||||
@@ -604,6 +606,13 @@ if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
|
||||
TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
|
||||
fi
|
||||
|
||||
+if test x$target_cpu = xpowerpc && test x$ac_cv_c_bigendian = xno; then
|
||||
+ LD_FORCE_LE=1
|
||||
+ TARGET_CFLAGS="$TARGET_CFLAGS -mbig-endian -DNO_LIBGCC=1"
|
||||
+ TARGET_CCASFLAGS="$TARGET_CCASFLAGS -mbig-endian"
|
||||
+ TARGET_LDFLAGS="$TARGET_LDFLAGS -static -mbig-endian"
|
||||
+fi
|
||||
+
|
||||
if test "x$target_m32" = x1; then
|
||||
# Force 32-bit mode.
|
||||
TARGET_CFLAGS="$TARGET_CFLAGS -m32"
|
||||
@@ -1047,7 +1056,8 @@ else
|
||||
CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
|
||||
fi
|
||||
CPPFLAGS="$TARGET_CPPFLAGS"
|
||||
-if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
|
||||
+if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes \
|
||||
+ || ( test x$target_cpu = xpowerpc && test x$ac_cv_c_bigendian = xno ); then
|
||||
TARGET_LIBGCC=
|
||||
else
|
||||
TARGET_LIBGCC=-lgcc
|
||||
@@ -1631,7 +1641,9 @@ if test x"$enable_werror" != xno ; then
|
||||
HOST_CFLAGS="$HOST_CFLAGS -Werror"
|
||||
fi
|
||||
|
||||
-if test "x$grub_cv_cc_target_clang" = xno; then
|
||||
+# if not clang or power LE, use static libgcc
|
||||
+if test "x$grub_cv_cc_target_clang" = xno \
|
||||
+ || ! ( test x$target_cpu = xpowerpc && test x$ac_cv_c_bigendian = xno ); then
|
||||
TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
|
||||
else
|
||||
TARGET_LDFLAGS_STATIC_LIBGCC=
|
||||
@@ -1694,6 +1706,7 @@ AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu =
|
||||
AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
|
||||
AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
|
||||
AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
|
||||
+AM_CONDITIONAL([COND_powerpc_le], [test x$target_cpu = xpowerpc -a x$ac_cv_c_bigendian = xno])
|
||||
AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
|
||||
AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
|
||||
AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
|
||||
diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am
|
||||
index 5c087c8..cb7fd9f 100644
|
||||
--- a/grub-core/Makefile.am
|
||||
+++ b/grub-core/Makefile.am
|
||||
@@ -84,8 +84,10 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
||||
if !COND_clang
|
||||
+if !COND_powerpc_le
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
|
||||
endif
|
||||
+endif
|
||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
||||
|
||||
if COND_i386_pc
|
||||
--
|
||||
1.9.3
|
@ -12,10 +12,10 @@ files - Makefile.core.am and Makefile.util.am - it may be necessary to
|
||||
manually rename it.
|
||||
---
|
||||
|
||||
Index: grub-2.02~beta1/docs/Makefile.am
|
||||
Index: grub-2.02~beta3/docs/Makefile.am
|
||||
===================================================================
|
||||
--- grub-2.02~beta1.orig/docs/Makefile.am
|
||||
+++ grub-2.02~beta1/docs/Makefile.am
|
||||
--- grub-2.02~beta3.orig/docs/Makefile.am 2016-02-28 19:19:14.788874638 +0300
|
||||
+++ grub-2.02~beta3/docs/Makefile.am 2016-02-28 19:19:14.780874638 +0300
|
||||
@@ -1,7 +1,7 @@
|
||||
AUTOMAKE_OPTIONS = subdir-objects
|
||||
|
||||
@ -25,91 +25,10 @@ Index: grub-2.02~beta1/docs/Makefile.am
|
||||
grub_TEXINFOS = fdl.texi
|
||||
|
||||
EXTRA_DIST = font_char_metrics.png font_char_metrics.txt
|
||||
Index: grub-2.02~beta1/docs/Makefile.in
|
||||
Index: grub-2.02~beta3/docs/grub.texi
|
||||
===================================================================
|
||||
--- grub-2.02~beta1.orig/docs/Makefile.in
|
||||
+++ grub-2.02~beta1/docs/Makefile.in
|
||||
@@ -79,7 +79,7 @@ host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = docs
|
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
- $(grub_TEXINFOS) $(top_srcdir)/build-aux/mdate-sh \
|
||||
+ $(top_srcdir)/build-aux/mdate-sh \
|
||||
$(srcdir)/version.texi $(srcdir)/stamp-vti \
|
||||
$(srcdir)/version-dev.texi $(srcdir)/stamp-1 \
|
||||
$(top_srcdir)/build-aux/texinfo.tex mdate-sh texinfo.tex
|
||||
@@ -184,14 +184,14 @@ AM_V_texidevnull = $(am__v_texidevnull_@
|
||||
am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
|
||||
am__v_texidevnull_0 = > /dev/null
|
||||
am__v_texidevnull_1 =
|
||||
-INFO_DEPS = $(srcdir)/grub.info $(srcdir)/grub-dev.info
|
||||
+INFO_DEPS = $(srcdir)/grub2.info $(srcdir)/grub-dev.info
|
||||
TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
|
||||
am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
|
||||
-DVIS = grub.dvi grub-dev.dvi
|
||||
-PDFS = grub.pdf grub-dev.pdf
|
||||
-PSS = grub.ps grub-dev.ps
|
||||
-HTMLS = grub.html grub-dev.html
|
||||
-TEXINFOS = grub.texi grub-dev.texi
|
||||
+DVIS = grub2.dvi grub-dev.dvi
|
||||
+PDFS = grub2.pdf grub-dev.pdf
|
||||
+PSS = grub2.ps grub-dev.ps
|
||||
+HTMLS = grub2.html grub-dev.html
|
||||
+TEXINFOS = grub2.texi grub-dev.texi
|
||||
TEXI2DVI = texi2dvi
|
||||
TEXI2PDF = $(TEXI2DVI) --pdf --batch
|
||||
MAKEINFOHTML = $(MAKEINFO) --html
|
||||
@@ -1068,7 +1068,7 @@ top_srcdir = @top_srcdir@
|
||||
AUTOMAKE_OPTIONS = subdir-objects
|
||||
|
||||
# AM_MAKEINFOFLAGS = --no-split --no-validate
|
||||
-info_TEXINFOS = grub.texi grub-dev.texi
|
||||
+info_TEXINFOS = grub2.texi grub-dev.texi
|
||||
grub_TEXINFOS = fdl.texi
|
||||
EXTRA_DIST = font_char_metrics.png font_char_metrics.txt
|
||||
all: all-am
|
||||
@@ -1149,14 +1149,14 @@ $(am__aclocal_m4_deps):
|
||||
else \
|
||||
rm -rf $(@:.html=.htp); exit 1; \
|
||||
fi
|
||||
-$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
|
||||
-grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
|
||||
-grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
|
||||
-grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
|
||||
+$(srcdir)/grub2.info: grub2.texi $(srcdir)/version.texi
|
||||
+grub2.dvi: grub2.texi $(srcdir)/version.texi
|
||||
+grub2.pdf: grub2.texi $(srcdir)/version.texi
|
||||
+grub2.html: grub2.texi $(srcdir)/version.texi
|
||||
$(srcdir)/version.texi: $(srcdir)/stamp-vti
|
||||
-$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure
|
||||
- @(dir=.; test -f ./grub.texi || dir=$(srcdir); \
|
||||
- set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/grub.texi`; \
|
||||
+$(srcdir)/stamp-vti: grub2.texi $(top_srcdir)/configure
|
||||
+ @(dir=.; test -f ./grub2.texi || dir=$(srcdir); \
|
||||
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/grub2.texi`; \
|
||||
echo "@set UPDATED $$1 $$2 $$3"; \
|
||||
echo "@set UPDATED-MONTH $$2 $$3"; \
|
||||
echo "@set EDITION $(VERSION)"; \
|
||||
@@ -1276,12 +1276,12 @@ dist-info: $(INFO_DEPS)
|
||||
done
|
||||
|
||||
mostlyclean-aminfo:
|
||||
- -rm -rf grub.t2d grub.t2p grub-dev.t2d grub-dev.t2p
|
||||
+ -rm -rf grub2.t2d grub2.t2p grub-dev.t2d grub-dev.t2p
|
||||
|
||||
clean-aminfo:
|
||||
- -test -z "grub.dvi grub.pdf grub.ps grub.html grub-dev.dvi grub-dev.pdf \
|
||||
+ -test -z "grub2.dvi grub2.pdf grub2.ps grub2.html grub-dev.dvi grub-dev.pdf \
|
||||
grub-dev.ps grub-dev.html" \
|
||||
- || rm -rf grub.dvi grub.pdf grub.ps grub.html grub-dev.dvi grub-dev.pdf \
|
||||
+ || rm -rf grub2.dvi grub2.pdf grub2.ps grub2.html grub-dev.dvi grub-dev.pdf \
|
||||
grub-dev.ps grub-dev.html
|
||||
|
||||
maintainer-clean-aminfo:
|
||||
Index: grub-2.02~beta1/docs/grub.texi
|
||||
===================================================================
|
||||
--- grub-2.02~beta1.orig/docs/grub.texi
|
||||
+++ grub-2.02~beta1/docs/grub.texi
|
||||
--- grub-2.02~beta3.orig/docs/grub.texi 2016-02-28 19:19:14.788874638 +0300
|
||||
+++ grub-2.02~beta3/docs/grub.texi 2016-02-28 19:19:14.784874638 +0300
|
||||
@@ -1,7 +1,7 @@
|
||||
\input texinfo
|
||||
@c -*-texinfo-*-
|
||||
|
@ -12,16 +12,16 @@ Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
|
||||
configure.ac | 2 +-
|
||||
2 files changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
Index: grub-2.02~beta2/configure.ac
|
||||
Index: grub-2.02~beta3/configure.ac
|
||||
===================================================================
|
||||
--- grub-2.02~beta2.orig/configure.ac
|
||||
+++ grub-2.02~beta2/configure.ac
|
||||
@@ -32,7 +32,7 @@ dnl type, so there is no conflict. Varia
|
||||
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
|
||||
dnl type.
|
||||
--- grub-2.02~beta3.orig/configure.ac 2016-02-28 19:22:28.028876923 +0300
|
||||
+++ grub-2.02~beta3/configure.ac 2016-02-28 19:22:57.596877272 +0300
|
||||
@@ -31,7 +31,7 @@
|
||||
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
||||
dnl used for the target type. See INSTALL for full list of variables.
|
||||
|
||||
-AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
|
||||
+AC_INIT([GRUB2],[2.02~beta2],[bug-grub@gnu.org])
|
||||
-AC_INIT([GRUB],[2.02~beta3],[bug-grub@gnu.org])
|
||||
+AC_INIT([GRUB2],[2.02~beta3],[bug-grub@gnu.org])
|
||||
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user