Merge pull request #1563 from ertugerata/master
syslinux new in main repo
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "http://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
@@ -14,7 +13,7 @@
|
||||
<IsA>app:console</IsA>
|
||||
<Summary>Tools to create graphical boot logos</Summary>
|
||||
<Description>Set of tools to create graphical boot logos, for grub, lilo and syslinux. It supports arch-specific boot menus, advanced help menus, multiple keymaps, animated images, and more graphical pretty things.</Description>
|
||||
<Archive sha1sum="5a087821613adc605fce8be55fb0366642d1bc48" type="targz">https://github.com/openSUSE/gfxboot/archive/4.5.7.tar.gz</Archive>
|
||||
<Archive sha1sum="fe0174f38b5001b6173c9cbea0108a332ea1628b" type="targz">https://github.com/openSUSE/gfxboot/archive/4.5.12.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>xmlto</Dependency>
|
||||
<Dependency>freetype-devel</Dependency>
|
||||
@@ -43,9 +42,9 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="1">
|
||||
<Date>2015-08-05</Date>
|
||||
<Version>4.5.7</Version>
|
||||
<Update release="1">
|
||||
<Date>2016-04-04</Date>
|
||||
<Version>4.5.12</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Ertuğrul Erata</Name>
|
||||
<Email>ertugrulerata@gmail.com</Email>
|
||||
|
||||
@@ -9,29 +9,38 @@ from pisi.actionsapi import autotools
|
||||
from pisi.actionsapi import pisitools
|
||||
from pisi.actionsapi import shelltools
|
||||
|
||||
tools = ["sha1pass", "md5pass", "mkdiskimage", "keytab-lilo", "syslinux2ansi", "lss16toppm","pxelinux-options"]
|
||||
tools = ["sha1pass", "md5pass", "mkdiskimage*", "keytab-lilo", "syslinux2ansi", "lss16toppm","pxelinux-options"]
|
||||
datadir = "/usr/lib/syslinux"
|
||||
|
||||
NoStrip = ["/sbin", "/usr/lib"]
|
||||
|
||||
pisitools.flags.remove("-fPIC")
|
||||
|
||||
def build():
|
||||
# shelltools.export("CFLAGS", "-Werror -Wno-unused -finline-limit=2000")
|
||||
shelltools.export("CFLAGS", get.CFLAGS())
|
||||
shelltools.export("LDFLAGS", "")
|
||||
# do not swallow efi compilation output to make debugging easier
|
||||
shelltools.system("sed 's|> /dev/null 2>&1||' -i efi/check-gnu-efi.sh")
|
||||
|
||||
# disable debug and development flags to reduce bootloader size
|
||||
shelltools.system("truncate --size 0 mk/devel.mk")
|
||||
|
||||
autotools.make('DATE="PisiLinux" spotless')
|
||||
autotools.make('DATE="PisiLinux"')
|
||||
# autotools.make('DATE="PARDUS" installer')
|
||||
# autotools.make('DATE="PARDUS" -C sample tidy')
|
||||
autotools.make("-j1 PYTHON=python bios efi64 efi32")
|
||||
|
||||
def install():
|
||||
autotools.rawInstall('INSTALLROOT=%s MANDIR="/usr/share/man" AUXDIR="/usr/lib/syslinux"' % get.installDIR())
|
||||
for f in tools:
|
||||
pisitools.insinto(datadir, "utils/"+f)
|
||||
|
||||
#pisitools.domove("/usr/lib/syslinux/libutil_com.c32","/usr/lib/syslinux/com32/libutil")
|
||||
#pisitools.domove("/usr/lib/syslinux/libcom32.c32","/usr/lib/syslinux/com32/lib")
|
||||
#pisitools.removeDir("/usr/lib/syslinux/com32")
|
||||
#pisitools.removeDir("/usr/lib/syslinux/dosutil")
|
||||
#pisitools.remove("/usr/lib/syslinux/syslinux.com")
|
||||
|
||||
# pisitools.dodir("/usr/lib/syslinux/bios")
|
||||
|
||||
# pisitools.domove("/usr/lib/syslinux/*.c32", "/usr/lib/syslinux/bios")
|
||||
# pisitools.domove("/usr/lib/syslinux/*.bin", "/usr/lib/syslinux/bios")
|
||||
# pisitools.domove("/usr/lib/syslinux/*.0", "/usr/lib/syslinux/bios")
|
||||
# pisitools.domove("/usr/lib/syslinux/memdisk", "/usr/lib/syslinux/bios")
|
||||
|
||||
for f in tools:
|
||||
pisitools.insinto(datadir, "utils/"+f)
|
||||
|
||||
pisitools.dodoc("README", "NEWS", "doc/*.txt", "doc/logo/LICENSE")
|
||||
pisitools.remove("/usr/bin/gethostip")
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
From ca745cdfc27b83b6bcef9f856d858a68c64429de Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Tue, 8 Apr 2014 15:28:12 -0400
|
||||
Subject: [PATCH] Add "install-all target" to top side of HAVE_FIRMWARE.
|
||||
|
||||
---
|
||||
Makefile | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index fb387c5..3429058 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -273,6 +273,16 @@ efi64:
|
||||
FIRMWARE=EFI64 \
|
||||
$(MAKECMDGOALS)
|
||||
|
||||
+install-all:
|
||||
+
|
||||
+install:
|
||||
+
|
||||
+netinstall:
|
||||
+
|
||||
+clean:
|
||||
+
|
||||
+all:
|
||||
+
|
||||
else # ifeq($(HAVE_FIRMWARE),)
|
||||
|
||||
all: all-local subdirs
|
||||
--
|
||||
1.9.3
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
From 3106dcd19061b4443c5beba4f0e09412e8d37fbe Mon Sep 17 00:00:00 2001
|
||||
From: Dany St-Amant <dany.ephemeral.2014@icloud.com>
|
||||
Date: Fri, 28 Nov 2014 13:48:32 -0500
|
||||
Subject: [PATCH 35/74] SYSAPPEND: Fix space stripping
|
||||
|
||||
The description of SYSAPPEND for the DMI information states that the spaces
|
||||
are replaced by underscores, but this replacement does not occur in 6.03.
|
||||
|
||||
Signed-off-by: Dany St-Amant <dany.ephemeral.2014@icloud.com>
|
||||
Signed-off-by: Gene Cumm <gene.cumm@gmail.com>
|
||||
---
|
||||
com32/elflink/ldlinux/readconfig.c | 2 +-
|
||||
com32/menu/readconfig.c | 2 +-
|
||||
core/sysappend.c | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c
|
||||
index 347f826..24f1cc9 100644
|
||||
--- a/com32/elflink/ldlinux/readconfig.c
|
||||
+++ b/com32/elflink/ldlinux/readconfig.c
|
||||
@@ -330,7 +330,7 @@ static char *copy_sysappend_string(char *dst, const char *src)
|
||||
char c;
|
||||
|
||||
while ((c = *src++)) {
|
||||
- if (c <= ' ' && c == '\x7f') {
|
||||
+ if (c <= ' ' || c == '\x7f') {
|
||||
if (!was_space)
|
||||
*dst++ = '_';
|
||||
was_space = true;
|
||||
diff --git a/com32/menu/readconfig.c b/com32/menu/readconfig.c
|
||||
index b7814be..257b042 100644
|
||||
--- a/com32/menu/readconfig.c
|
||||
+++ b/com32/menu/readconfig.c
|
||||
@@ -299,7 +299,7 @@ static char *copy_sysappend_string(char *dst, const char *src)
|
||||
char c;
|
||||
|
||||
while ((c = *src++)) {
|
||||
- if (c <= ' ' && c == '\x7f') {
|
||||
+ if (c <= ' ' || c == '\x7f') {
|
||||
if (!was_space)
|
||||
*dst++ = '_';
|
||||
was_space = true;
|
||||
diff --git a/core/sysappend.c b/core/sysappend.c
|
||||
index 5c3f650..758703e 100644
|
||||
--- a/core/sysappend.c
|
||||
+++ b/core/sysappend.c
|
||||
@@ -35,7 +35,7 @@ static char *copy_and_mangle(char *dst, const char *src)
|
||||
char c;
|
||||
|
||||
while ((c = *src++)) {
|
||||
- if (c <= ' ' && c == '\x7f') {
|
||||
+ if (c <= ' ' || c == '\x7f') {
|
||||
if (!was_space)
|
||||
*dst++ = '_';
|
||||
was_space = true;
|
||||
--
|
||||
2.4.5
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
From 548386049cd41e887079cdb904d3954365eb28f3 Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Alcantara <pcacjr@zytor.com>
|
||||
Date: Thu, 24 Dec 2015 01:48:13 -0200
|
||||
Subject: [PATCH 1/1] btrfs: Fix logical to physical block address mapping
|
||||
|
||||
The current btrfs support did not handled multiple stripes stored in
|
||||
chunk items, hence skipping the physical addresses that were needed to
|
||||
do the mapping.
|
||||
|
||||
Besides, the chunk tree may contain DEV_ITEM keys which store
|
||||
information on all of the underlying block devices, so we must skip them
|
||||
instead of finishing lookup.
|
||||
|
||||
The bug was reproduced with btrfs-progs v4.2.2.
|
||||
|
||||
Cc: Gene Cumm <gene.cumm@gmail.com>
|
||||
Cc: H. Peter Anvin <hpa@zytor.com>
|
||||
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
|
||||
---
|
||||
v1 -> v2:
|
||||
* Do not set ignore_key multiple times. Set it before parsing chunk
|
||||
tree.
|
||||
v2 -> v3:
|
||||
* Replace an unnecessary goto with a continue statement.
|
||||
---
|
||||
core/fs/btrfs/btrfs.c | 49 +++++++++++++++++++++++++++++++++----------------
|
||||
core/fs/btrfs/btrfs.h | 2 ++
|
||||
2 files changed, 35 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/core/fs/btrfs/btrfs.c b/core/fs/btrfs/btrfs.c
|
||||
index 53e1105..58e1fe6 100644
|
||||
--- a/core/fs/btrfs/btrfs.c
|
||||
+++ b/core/fs/btrfs/btrfs.c
|
||||
@@ -81,7 +81,8 @@ static int btrfs_comp_chunk_map(struct btrfs_chunk_map_item *m1,
|
||||
}
|
||||
|
||||
/* insert a new chunk mapping item */
|
||||
-static void insert_map(struct fs_info *fs, struct btrfs_chunk_map_item *item)
|
||||
+static void insert_chunk_item(struct fs_info *fs,
|
||||
+ struct btrfs_chunk_map_item *item)
|
||||
{
|
||||
struct btrfs_info * const bfs = fs->fs_info;
|
||||
struct btrfs_chunk_map *chunk_map = &bfs->chunk_map;
|
||||
@@ -113,6 +114,22 @@ static void insert_map(struct fs_info *fs, struct btrfs_chunk_map_item *item)
|
||||
chunk_map->cur_length++;
|
||||
}
|
||||
|
||||
+static inline void insert_map(struct fs_info *fs, struct btrfs_disk_key *key,
|
||||
+ struct btrfs_chunk *chunk)
|
||||
+{
|
||||
+ struct btrfs_stripe *stripe = &chunk->stripe;
|
||||
+ struct btrfs_stripe *stripe_end = stripe + chunk->num_stripes;
|
||||
+ struct btrfs_chunk_map_item item;
|
||||
+
|
||||
+ item.logical = key->offset;
|
||||
+ item.length = chunk->length;
|
||||
+ for ( ; stripe < stripe_end; stripe++) {
|
||||
+ item.devid = stripe->devid;
|
||||
+ item.physical = stripe->offset;
|
||||
+ insert_chunk_item(fs, &item);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* from sys_chunk_array or chunk_tree, we can convert a logical address to
|
||||
* a physical address we can not support multi device case yet
|
||||
@@ -330,7 +347,6 @@ static int next_slot(struct fs_info *fs, struct btrfs_disk_key *key,
|
||||
static void btrfs_read_sys_chunk_array(struct fs_info *fs)
|
||||
{
|
||||
struct btrfs_info * const bfs = fs->fs_info;
|
||||
- struct btrfs_chunk_map_item item;
|
||||
struct btrfs_disk_key *key;
|
||||
struct btrfs_chunk *chunk;
|
||||
int cur;
|
||||
@@ -342,12 +358,7 @@ static void btrfs_read_sys_chunk_array(struct fs_info *fs)
|
||||
cur += sizeof(*key);
|
||||
chunk = (struct btrfs_chunk *)(bfs->sb.sys_chunk_array + cur);
|
||||
cur += btrfs_chunk_item_size(chunk->num_stripes);
|
||||
- /* insert to mapping table, ignore multi stripes */
|
||||
- item.logical = key->offset;
|
||||
- item.length = chunk->length;
|
||||
- item.devid = chunk->stripe.devid;
|
||||
- item.physical = chunk->stripe.offset;/*ignore other stripes */
|
||||
- insert_map(fs, &item);
|
||||
+ insert_map(fs, key, chunk);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,14 +366,18 @@ static void btrfs_read_sys_chunk_array(struct fs_info *fs)
|
||||
static void btrfs_read_chunk_tree(struct fs_info *fs)
|
||||
{
|
||||
struct btrfs_info * const bfs = fs->fs_info;
|
||||
+ struct btrfs_disk_key ignore_key;
|
||||
struct btrfs_disk_key search_key;
|
||||
struct btrfs_chunk *chunk;
|
||||
- struct btrfs_chunk_map_item item;
|
||||
struct btrfs_path path;
|
||||
|
||||
if (!(bfs->sb.flags & BTRFS_SUPER_FLAG_METADUMP)) {
|
||||
if (bfs->sb.num_devices > 1)
|
||||
printf("warning: only support single device btrfs\n");
|
||||
+
|
||||
+ ignore_key.objectid = BTRFS_DEV_ITEMS_OBJECTID;
|
||||
+ ignore_key.type = BTRFS_DEV_ITEM_KEY;
|
||||
+
|
||||
/* read chunk from chunk_tree */
|
||||
search_key.objectid = BTRFS_FIRST_CHUNK_TREE_OBJECTID;
|
||||
search_key.type = BTRFS_CHUNK_ITEM_KEY;
|
||||
@@ -371,16 +386,18 @@ static void btrfs_read_chunk_tree(struct fs_info *fs)
|
||||
search_tree(fs, bfs->sb.chunk_root, &search_key, &path);
|
||||
do {
|
||||
do {
|
||||
+ /* skip information about underlying block
|
||||
+ * devices.
|
||||
+ */
|
||||
+ if (!btrfs_comp_keys_type(&ignore_key,
|
||||
+ &path.item.key))
|
||||
+ continue;
|
||||
if (btrfs_comp_keys_type(&search_key,
|
||||
- &path.item.key))
|
||||
+ &path.item.key))
|
||||
break;
|
||||
+
|
||||
chunk = (struct btrfs_chunk *)(path.data);
|
||||
- /* insert to mapping table, ignore stripes */
|
||||
- item.logical = path.item.key.offset;
|
||||
- item.length = chunk->length;
|
||||
- item.devid = chunk->stripe.devid;
|
||||
- item.physical = chunk->stripe.offset;
|
||||
- insert_map(fs, &item);
|
||||
+ insert_map(fs, &path.item.key, chunk);
|
||||
} while (!next_slot(fs, &search_key, &path));
|
||||
if (btrfs_comp_keys_type(&search_key, &path.item.key))
|
||||
break;
|
||||
diff --git a/core/fs/btrfs/btrfs.h b/core/fs/btrfs/btrfs.h
|
||||
index 8f519a9..32e7c70 100644
|
||||
--- a/core/fs/btrfs/btrfs.h
|
||||
+++ b/core/fs/btrfs/btrfs.h
|
||||
@@ -56,6 +56,8 @@ typedef u64 __le64;
|
||||
#define BTRFS_MAX_LEVEL 8
|
||||
#define BTRFS_MAX_CHUNK_ENTRIES 256
|
||||
|
||||
+#define BTRFS_DEV_ITEMS_OBJECTID 1ULL
|
||||
+
|
||||
#define BTRFS_FT_REG_FILE 1
|
||||
#define BTRFS_FT_DIR 2
|
||||
#define BTRFS_FT_SYMLINK 7
|
||||
--
|
||||
2.5.5.GIT
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
From 0cc9a99e560a2f52bcf052fd85b1efae35ee812f Mon Sep 17 00:00:00 2001
|
||||
From: Sylvain Gault <sylvain.gault@gmail.com>
|
||||
Date: Tue, 29 Sep 2015 04:45:09 +0200
|
||||
Subject: [PATCH 1/1] bios: Don't try to guess the sections alignment
|
||||
|
||||
For the compression / decompression to succeed, the sections layout must
|
||||
be the same between the virtual memory and load memory. The section
|
||||
alignment was kept in sync by introducing aligment that should be
|
||||
greater or equal to the actual section alignment.
|
||||
|
||||
This patch compute the load memory addresses of the sections so that
|
||||
the layout is the same as the virtual memory addresses.
|
||||
|
||||
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
|
||||
Tested-by: poma <pomidorabelisima@gmail.com>
|
||||
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
|
||||
---
|
||||
core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
|
||||
core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
|
||||
2 files changed, 24 insertions(+), 102 deletions(-)
|
||||
|
||||
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
|
||||
index 7390451..92b75b1 100644
|
||||
--- a/core/i386/syslinux.ld
|
||||
+++ b/core/i386/syslinux.ld
|
||||
@@ -255,10 +255,9 @@ SECTIONS
|
||||
. = 0x100000;
|
||||
|
||||
__pm_code_start = .;
|
||||
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
|
||||
|
||||
- __text_vma = .;
|
||||
- __text_lma = __pm_code_lma;
|
||||
- .text : AT(__text_lma) {
|
||||
+ .text : AT(ADDR(.text) + __vma_to_lma) {
|
||||
FILL(0x90909090)
|
||||
__text_start = .;
|
||||
*(.text)
|
||||
@@ -266,106 +265,68 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __rodata_vma = .;
|
||||
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
- .rodata : AT(__rodata_lma) {
|
||||
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
|
||||
__rodata_start = .;
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
__rodata_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __ctors_vma = .;
|
||||
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
|
||||
- .ctors : AT(__ctors_lma) {
|
||||
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
|
||||
__ctors_start = .;
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__ctors_end = .;
|
||||
}
|
||||
|
||||
- __dtors_vma = .;
|
||||
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
|
||||
- .dtors : AT(__dtors_lma) {
|
||||
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
|
||||
__dtors_start = .;
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__dtors_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynsym_vma = .;
|
||||
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
|
||||
- .dynsym : AT(__dynsym_lma) {
|
||||
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
|
||||
__dynsym_start = .;
|
||||
*(.dynsym)
|
||||
__dynsym_end = .;
|
||||
}
|
||||
__dynsym_len = __dynsym_end - __dynsym_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynstr_vma = .;
|
||||
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
|
||||
- .dynstr : AT(__dynstr_lma) {
|
||||
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
|
||||
__dynstr_start = .;
|
||||
*(.dynstr)
|
||||
__dynstr_end = .;
|
||||
}
|
||||
__dynstr_len = __dynstr_end - __dynstr_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __gnu_hash_vma = .;
|
||||
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
|
||||
- .gnu.hash : AT(__gnu_hash_lma) {
|
||||
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
|
||||
__gnu_hash_start = .;
|
||||
*(.gnu.hash)
|
||||
__gnu_hash_end = .;
|
||||
}
|
||||
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynlink_vma = .;
|
||||
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
|
||||
- .dynlink : AT(__dynlink_lma) {
|
||||
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
|
||||
__dynlink_start = .;
|
||||
*(.dynlink)
|
||||
__dynlink_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __got_vma = .;
|
||||
- __got_lma = __got_vma + __text_lma - __text_vma;
|
||||
- .got : AT(__got_lma) {
|
||||
+ .got : AT(ADDR(.got) + __vma_to_lma) {
|
||||
__got_start = .;
|
||||
KEEP (*(.got.plt))
|
||||
KEEP (*(.got))
|
||||
__got_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynamic_vma = .;
|
||||
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
|
||||
- .dynamic : AT(__dynamic_lma) {
|
||||
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
|
||||
__dynamic_start = .;
|
||||
*(.dynamic)
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __data_vma = .;
|
||||
- __data_lma = __data_vma + __text_lma - __text_vma;
|
||||
- .data : AT(__data_lma) {
|
||||
+ .data : AT(ADDR(.data) + __vma_to_lma) {
|
||||
__data_start = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
|
||||
index bf815c4..70c6e00 100644
|
||||
--- a/core/x86_64/syslinux.ld
|
||||
+++ b/core/x86_64/syslinux.ld
|
||||
@@ -255,10 +255,9 @@ SECTIONS
|
||||
. = 0x100000;
|
||||
|
||||
__pm_code_start = .;
|
||||
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
|
||||
|
||||
- __text_vma = .;
|
||||
- __text_lma = __pm_code_lma;
|
||||
- .text : AT(__text_lma) {
|
||||
+ .text : AT(ADDR(.text) + __vma_to_lma) {
|
||||
FILL(0x90909090)
|
||||
__text_start = .;
|
||||
*(.text)
|
||||
@@ -266,106 +265,68 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __rodata_vma = .;
|
||||
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
- .rodata : AT(__rodata_lma) {
|
||||
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
|
||||
__rodata_start = .;
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
__rodata_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __ctors_vma = .;
|
||||
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
|
||||
- .ctors : AT(__ctors_lma) {
|
||||
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
|
||||
__ctors_start = .;
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__ctors_end = .;
|
||||
}
|
||||
|
||||
- __dtors_vma = .;
|
||||
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
|
||||
- .dtors : AT(__dtors_lma) {
|
||||
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
|
||||
__dtors_start = .;
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__dtors_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynsym_vma = .;
|
||||
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
|
||||
- .dynsym : AT(__dynsym_lma) {
|
||||
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
|
||||
__dynsym_start = .;
|
||||
*(.dynsym)
|
||||
__dynsym_end = .;
|
||||
}
|
||||
__dynsym_len = __dynsym_end - __dynsym_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynstr_vma = .;
|
||||
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
|
||||
- .dynstr : AT(__dynstr_lma) {
|
||||
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
|
||||
__dynstr_start = .;
|
||||
*(.dynstr)
|
||||
__dynstr_end = .;
|
||||
}
|
||||
__dynstr_len = __dynstr_end - __dynstr_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __gnu_hash_vma = .;
|
||||
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
|
||||
- .gnu.hash : AT(__gnu_hash_lma) {
|
||||
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
|
||||
__gnu_hash_start = .;
|
||||
*(.gnu.hash)
|
||||
__gnu_hash_end = .;
|
||||
}
|
||||
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynlink_vma = .;
|
||||
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
|
||||
- .dynlink : AT(__dynlink_lma) {
|
||||
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
|
||||
__dynlink_start = .;
|
||||
*(.dynlink)
|
||||
__dynlink_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __got_vma = .;
|
||||
- __got_lma = __got_vma + __text_lma - __text_vma;
|
||||
- .got : AT(__got_lma) {
|
||||
+ .got : AT(ADDR(.got) + __vma_to_lma) {
|
||||
__got_start = .;
|
||||
KEEP (*(.got.plt))
|
||||
KEEP (*(.got))
|
||||
__got_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynamic_vma = .;
|
||||
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
|
||||
- .dynamic : AT(__dynamic_lma) {
|
||||
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
|
||||
__dynamic_start = .;
|
||||
*(.dynamic)
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __data_vma = .;
|
||||
- __data_lma = __data_vma + __text_lma - __text_vma;
|
||||
- .data : AT(__data_lma) {
|
||||
+ .data : AT(ADDR(.data) + __vma_to_lma) {
|
||||
__data_start = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
--
|
||||
2.5.5.GIT
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
From: Sylvain Gault <sylvain.gault at gmail.com>
|
||||
|
||||
For the compression / decompression to succeed, the sections layout must
|
||||
be the same between the virtual memory and load memory. The section
|
||||
alignment was kept in sync by introducing aligment that should be
|
||||
greater or equal to the actual section alignment.
|
||||
|
||||
This patch compute the load memory addresses of the sections so that
|
||||
the layout is the same as the virtual memory addresses.
|
||||
|
||||
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
|
||||
---
|
||||
core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
|
||||
core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
|
||||
2 files changed, 24 insertions(+), 102 deletions(-)
|
||||
|
||||
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
|
||||
index 7390451..92b75b1 100644
|
||||
--- a/core/i386/syslinux.ld
|
||||
+++ b/core/i386/syslinux.ld
|
||||
@@ -255,10 +255,9 @@ SECTIONS
|
||||
. = 0x100000;
|
||||
|
||||
__pm_code_start = .;
|
||||
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
|
||||
|
||||
- __text_vma = .;
|
||||
- __text_lma = __pm_code_lma;
|
||||
- .text : AT(__text_lma) {
|
||||
+ .text : AT(ADDR(.text) + __vma_to_lma) {
|
||||
FILL(0x90909090)
|
||||
__text_start = .;
|
||||
*(.text)
|
||||
@@ -266,106 +265,68 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __rodata_vma = .;
|
||||
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
- .rodata : AT(__rodata_lma) {
|
||||
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
|
||||
__rodata_start = .;
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
__rodata_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __ctors_vma = .;
|
||||
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
|
||||
- .ctors : AT(__ctors_lma) {
|
||||
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
|
||||
__ctors_start = .;
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__ctors_end = .;
|
||||
}
|
||||
|
||||
- __dtors_vma = .;
|
||||
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
|
||||
- .dtors : AT(__dtors_lma) {
|
||||
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
|
||||
__dtors_start = .;
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__dtors_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynsym_vma = .;
|
||||
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
|
||||
- .dynsym : AT(__dynsym_lma) {
|
||||
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
|
||||
__dynsym_start = .;
|
||||
*(.dynsym)
|
||||
__dynsym_end = .;
|
||||
}
|
||||
__dynsym_len = __dynsym_end - __dynsym_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynstr_vma = .;
|
||||
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
|
||||
- .dynstr : AT(__dynstr_lma) {
|
||||
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
|
||||
__dynstr_start = .;
|
||||
*(.dynstr)
|
||||
__dynstr_end = .;
|
||||
}
|
||||
__dynstr_len = __dynstr_end - __dynstr_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __gnu_hash_vma = .;
|
||||
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
|
||||
- .gnu.hash : AT(__gnu_hash_lma) {
|
||||
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
|
||||
__gnu_hash_start = .;
|
||||
*(.gnu.hash)
|
||||
__gnu_hash_end = .;
|
||||
}
|
||||
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynlink_vma = .;
|
||||
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
|
||||
- .dynlink : AT(__dynlink_lma) {
|
||||
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
|
||||
__dynlink_start = .;
|
||||
*(.dynlink)
|
||||
__dynlink_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __got_vma = .;
|
||||
- __got_lma = __got_vma + __text_lma - __text_vma;
|
||||
- .got : AT(__got_lma) {
|
||||
+ .got : AT(ADDR(.got) + __vma_to_lma) {
|
||||
__got_start = .;
|
||||
KEEP (*(.got.plt))
|
||||
KEEP (*(.got))
|
||||
__got_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynamic_vma = .;
|
||||
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
|
||||
- .dynamic : AT(__dynamic_lma) {
|
||||
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
|
||||
__dynamic_start = .;
|
||||
*(.dynamic)
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __data_vma = .;
|
||||
- __data_lma = __data_vma + __text_lma - __text_vma;
|
||||
- .data : AT(__data_lma) {
|
||||
+ .data : AT(ADDR(.data) + __vma_to_lma) {
|
||||
__data_start = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
|
||||
index bf815c4..70c6e00 100644
|
||||
--- a/core/x86_64/syslinux.ld
|
||||
+++ b/core/x86_64/syslinux.ld
|
||||
@@ -255,10 +255,9 @@ SECTIONS
|
||||
. = 0x100000;
|
||||
|
||||
__pm_code_start = .;
|
||||
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
|
||||
|
||||
- __text_vma = .;
|
||||
- __text_lma = __pm_code_lma;
|
||||
- .text : AT(__text_lma) {
|
||||
+ .text : AT(ADDR(.text) + __vma_to_lma) {
|
||||
FILL(0x90909090)
|
||||
__text_start = .;
|
||||
*(.text)
|
||||
@@ -266,106 +265,68 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __rodata_vma = .;
|
||||
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
- .rodata : AT(__rodata_lma) {
|
||||
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
|
||||
__rodata_start = .;
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
__rodata_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __ctors_vma = .;
|
||||
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
|
||||
- .ctors : AT(__ctors_lma) {
|
||||
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
|
||||
__ctors_start = .;
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__ctors_end = .;
|
||||
}
|
||||
|
||||
- __dtors_vma = .;
|
||||
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
|
||||
- .dtors : AT(__dtors_lma) {
|
||||
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
|
||||
__dtors_start = .;
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__dtors_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynsym_vma = .;
|
||||
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
|
||||
- .dynsym : AT(__dynsym_lma) {
|
||||
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
|
||||
__dynsym_start = .;
|
||||
*(.dynsym)
|
||||
__dynsym_end = .;
|
||||
}
|
||||
__dynsym_len = __dynsym_end - __dynsym_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynstr_vma = .;
|
||||
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
|
||||
- .dynstr : AT(__dynstr_lma) {
|
||||
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
|
||||
__dynstr_start = .;
|
||||
*(.dynstr)
|
||||
__dynstr_end = .;
|
||||
}
|
||||
__dynstr_len = __dynstr_end - __dynstr_start;
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __gnu_hash_vma = .;
|
||||
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
|
||||
- .gnu.hash : AT(__gnu_hash_lma) {
|
||||
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
|
||||
__gnu_hash_start = .;
|
||||
*(.gnu.hash)
|
||||
__gnu_hash_end = .;
|
||||
}
|
||||
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynlink_vma = .;
|
||||
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
|
||||
- .dynlink : AT(__dynlink_lma) {
|
||||
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
|
||||
__dynlink_start = .;
|
||||
*(.dynlink)
|
||||
__dynlink_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __got_vma = .;
|
||||
- __got_lma = __got_vma + __text_lma - __text_vma;
|
||||
- .got : AT(__got_lma) {
|
||||
+ .got : AT(ADDR(.got) + __vma_to_lma) {
|
||||
__got_start = .;
|
||||
KEEP (*(.got.plt))
|
||||
KEEP (*(.got))
|
||||
__got_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(4);
|
||||
-
|
||||
- __dynamic_vma = .;
|
||||
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
|
||||
- .dynamic : AT(__dynamic_lma) {
|
||||
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
|
||||
__dynamic_start = .;
|
||||
*(.dynamic)
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(32);
|
||||
-
|
||||
- __data_vma = .;
|
||||
- __data_lma = __data_vma + __text_lma - __text_vma;
|
||||
- .data : AT(__data_lma) {
|
||||
+ .data : AT(ADDR(.data) + __vma_to_lma) {
|
||||
__data_start = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
--
|
||||
2.5.3
|
||||
@@ -0,0 +1,75 @@
|
||||
From: Sylvain Gault <sylvain.gault at gmail.com>
|
||||
|
||||
The section aligment specified in the ld scripts have to be greater or
|
||||
equal to those in the .o files generated by gcc.
|
||||
|
||||
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
|
||||
---
|
||||
core/i386/syslinux.ld | 6 +++---
|
||||
core/x86_64/syslinux.ld | 6 +++---
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
|
||||
index 7b4e012..7390451 100644
|
||||
--- a/core/i386/syslinux.ld
|
||||
+++ b/core/i386/syslinux.ld
|
||||
@@ -266,7 +266,7 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__rodata_vma = .;
|
||||
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
@@ -361,7 +361,7 @@ SECTIONS
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__data_vma = .;
|
||||
__data_lma = __data_vma + __text_lma - __text_vma;
|
||||
@@ -377,7 +377,7 @@ SECTIONS
|
||||
__pm_code_dwords = (__pm_code_len + 3) >> 2;
|
||||
|
||||
. = ALIGN(128);
|
||||
-
|
||||
+
|
||||
__bss_vma = .;
|
||||
__bss_lma = .; /* Dummy */
|
||||
.bss (NOLOAD) : AT (__bss_lma) {
|
||||
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
|
||||
index 1057112..bf815c4 100644
|
||||
--- a/core/x86_64/syslinux.ld
|
||||
+++ b/core/x86_64/syslinux.ld
|
||||
@@ -266,7 +266,7 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__rodata_vma = .;
|
||||
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
@@ -361,7 +361,7 @@ SECTIONS
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__data_vma = .;
|
||||
__data_lma = __data_vma + __text_lma - __text_vma;
|
||||
@@ -377,7 +377,7 @@ SECTIONS
|
||||
__pm_code_dwords = (__pm_code_len + 3) >> 2;
|
||||
|
||||
. = ALIGN(128);
|
||||
-
|
||||
+
|
||||
__bss_vma = .;
|
||||
__bss_lma = .; /* Dummy */
|
||||
.bss (NOLOAD) : AT (__bss_lma) {
|
||||
--
|
||||
2.5.3
|
||||
@@ -0,0 +1,81 @@
|
||||
From e5f2b577ded109291c9632dacb6eaa621d8a59fe Mon Sep 17 00:00:00 2001
|
||||
From: Sylvain Gault <sylvain.gault@gmail.com>
|
||||
Date: Tue, 29 Sep 2015 02:38:25 +0200
|
||||
Subject: [PATCH 1/1] bios: Fix alignment change with gcc 5
|
||||
|
||||
The section aligment specified in the ld scripts have to be greater or
|
||||
equal to those in the .o files generated by gcc.
|
||||
|
||||
Signed-off-by: Sylvain Gault <sylvain.gault@gmail.com>
|
||||
Tested-by: poma <pomidorabelisima@gmail.com>
|
||||
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
|
||||
---
|
||||
core/i386/syslinux.ld | 6 +++---
|
||||
core/x86_64/syslinux.ld | 6 +++---
|
||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
|
||||
index 7b4e012..7390451 100644
|
||||
--- a/core/i386/syslinux.ld
|
||||
+++ b/core/i386/syslinux.ld
|
||||
@@ -266,7 +266,7 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__rodata_vma = .;
|
||||
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
@@ -361,7 +361,7 @@ SECTIONS
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__data_vma = .;
|
||||
__data_lma = __data_vma + __text_lma - __text_vma;
|
||||
@@ -377,7 +377,7 @@ SECTIONS
|
||||
__pm_code_dwords = (__pm_code_len + 3) >> 2;
|
||||
|
||||
. = ALIGN(128);
|
||||
-
|
||||
+
|
||||
__bss_vma = .;
|
||||
__bss_lma = .; /* Dummy */
|
||||
.bss (NOLOAD) : AT (__bss_lma) {
|
||||
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
|
||||
index 1057112..bf815c4 100644
|
||||
--- a/core/x86_64/syslinux.ld
|
||||
+++ b/core/x86_64/syslinux.ld
|
||||
@@ -266,7 +266,7 @@ SECTIONS
|
||||
__text_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__rodata_vma = .;
|
||||
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
|
||||
@@ -361,7 +361,7 @@ SECTIONS
|
||||
__dynamic_end = .;
|
||||
}
|
||||
|
||||
- . = ALIGN(16);
|
||||
+ . = ALIGN(32);
|
||||
|
||||
__data_vma = .;
|
||||
__data_lma = __data_vma + __text_lma - __text_vma;
|
||||
@@ -377,7 +377,7 @@ SECTIONS
|
||||
__pm_code_dwords = (__pm_code_len + 3) >> 2;
|
||||
|
||||
. = ALIGN(128);
|
||||
-
|
||||
+
|
||||
__bss_vma = .;
|
||||
__bss_lma = .; /* Dummy */
|
||||
.bss (NOLOAD) : AT (__bss_lma) {
|
||||
--
|
||||
2.5.5.GIT
|
||||
|
||||
@@ -0,0 +1,464 @@
|
||||
#!/usr/bin/bash
|
||||
#
|
||||
# Syslinux Installer / Updater Script (for BIOS only)
|
||||
# Copyright (C) 2011-2013 Matthew Gyurgyik <pyther@pyther.net>
|
||||
# Copyright (C) 2013 Keshav Padram Amburay <(the) (ddoott) (ridikulus) (ddoott) (rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
|
||||
#
|
||||
# This program 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 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
#-----------------
|
||||
# ChangeLog:
|
||||
# 2013-10-23 : Keshav Padram Amburay : Updated script to work with Syslinux 6.02 Arch Linux pkg
|
||||
#-----------------
|
||||
# Exit Codes:
|
||||
# 1 - get_boot_device or other function failed
|
||||
# 2 - install/update failed
|
||||
# 3 - set_active failed
|
||||
# 4 - install_mbr failed
|
||||
#-----------------
|
||||
|
||||
shopt -s nullglob
|
||||
|
||||
bios_libpath="/usr/lib/syslinux/bios"
|
||||
bios_bootpath="/boot/syslinux"
|
||||
EXTLINUX="/usr/bin/extlinux"
|
||||
|
||||
bios_autoupdate_file="/boot/syslinux/SYSLINUX_AUTOUPDATE"
|
||||
pciids_file="/usr/share/hwdata/pci.ids"
|
||||
|
||||
## Helper functions ##
|
||||
# Taken from libui-sh
|
||||
# $1 needle
|
||||
# $2 set (array) haystack
|
||||
check_is_in() {
|
||||
local needle="$1" element
|
||||
shift
|
||||
for element; do
|
||||
[[ $element = $needle ]] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
get_disk() {
|
||||
local part=$1
|
||||
if [[ ! -b "${part}" ]]; then
|
||||
echo >&2 "error: '$part' is not a valid block device!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$part" in
|
||||
*[[:digit:]]p[[:digit:]]*)
|
||||
local disk="${part%%p$partnum}" # get everything before p1
|
||||
;;
|
||||
*)
|
||||
local disk="${part%%[[:digit:]]*}"
|
||||
;;
|
||||
esac
|
||||
if [[ ! -b "${disk}" ]]; then
|
||||
echo >&2 "error: '$disk' is not a valid block device!"
|
||||
exit 1
|
||||
fi
|
||||
echo $disk
|
||||
}
|
||||
|
||||
# return true when blockdevice is an md raid, otherwise return a unset value
|
||||
# get all devices that are part of raid device $1
|
||||
device_is_raid() {
|
||||
[[ $1 && -f /proc/mdstat ]] || return 1
|
||||
local devmajor=$(stat -c %t "$1")
|
||||
(( devmajor == 9 ))
|
||||
}
|
||||
|
||||
mdraid_all_slaves() {
|
||||
local slave slaves
|
||||
for slave in /sys/class/block/${1##*/}/slaves/*; do
|
||||
source "$slave/uevent"
|
||||
slaves="$slaves/dev/$DEVNAME "
|
||||
unset DEVNAME
|
||||
done
|
||||
echo $slaves
|
||||
}
|
||||
|
||||
# Check /sys/block to see if device is partitioned
|
||||
# If we have a partitioned block device (sda1) /sys/block/sda1/dev will not exist
|
||||
# However, if we have an unpartitioned block device (sda) /sys/block/sda/dev will exist
|
||||
dev_is_part() {
|
||||
# $1 - blockdevice
|
||||
local dev=$1
|
||||
|
||||
# If block device uevent file should be found
|
||||
# If a partition is passed in path shouldn't exist
|
||||
if [[ $dev = *cciss* ]]; then
|
||||
[[ -f /sys/block/cciss\!${dev##*/}/dev ]] && return 1
|
||||
elif [[ $dev = *ida* ]]; then
|
||||
[[ -f /sys/block/ida\!${dev##*/}/dev ]] && return 1
|
||||
else
|
||||
[[ -f /sys/block/${dev##*/}/dev ]] && return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# If EFI PART is present in the first 8 bytes then it must be a GPT disk
|
||||
device_is_gpt() {
|
||||
local partsig=$(dd if="$1" skip=64 bs=8 count=1 2>/dev/null)
|
||||
[[ $partsig = "EFI PART" ]]
|
||||
}
|
||||
|
||||
clear_gpt_attr2() {
|
||||
# $1 - Block Device, no partitions
|
||||
local disk=$1
|
||||
|
||||
# Special Exception for cciss controllers
|
||||
if [[ $disk = *cciss* ]]; then
|
||||
for part in /dev/cciss/${disk##*/}*p*; do
|
||||
local partnum="${part##*[[:alpha:]]}"
|
||||
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
|
||||
done
|
||||
# Smart 2 Controllers
|
||||
elif [[ $disk = *ida* ]]; then
|
||||
for part in /dev/ida/${disk##*/}*p*; do
|
||||
local partnum="${part##*[[:alpha:]]}"
|
||||
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
|
||||
done
|
||||
else
|
||||
for part in /sys/block/${disk##*/}/${disk##*/}*; do
|
||||
local partnum="${part##*[[:alpha:]]}"
|
||||
sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
|
||||
done
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat << EOF
|
||||
usage: $0 options
|
||||
|
||||
This script will install or upgrade Syslinux (for BIOS only)
|
||||
|
||||
OPTIONS:
|
||||
-h Show this message
|
||||
-i Install Syslinux
|
||||
-u Update Syslinux
|
||||
-a Set Boot flag on boot partiton
|
||||
-m Install Syslinux MBR
|
||||
-s Updates Syslinux if /boot/syslinux/SYSLINUX_AUTOUPDATE exists
|
||||
|
||||
Arguments Required:
|
||||
-c Chroot install (ex: -c /mnt)
|
||||
|
||||
Example Usage: $0 -i -a -m # (install, set boot flag, install mbr)
|
||||
$0 -u # (update)
|
||||
EOF
|
||||
}
|
||||
|
||||
# Trys to find the partition that /boot resides on
|
||||
# This will either be on /boot or / (root)
|
||||
getBoot() {
|
||||
if [[ ! -d "$bios_bootpath" ]]; then
|
||||
echo "Could not find $bios_bootpath"
|
||||
echo "Is boot mounted? Is Syslinux installed?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
syslinux_fs=(ext2 ext3 ext4 btrfs vfat)
|
||||
|
||||
# Use DATA from findmnt see rc.sysint for more info
|
||||
if [[ -f /proc/self/mountinfo ]]; then
|
||||
read rootdev rootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/")
|
||||
read bootdev bootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/boot")
|
||||
else
|
||||
echo "Could not find /proc/self/mountinfo"
|
||||
echo "Are you running a kernel greater than 2.6.24?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $bootfs ]]; then
|
||||
if ! check_is_in "$bootfs" "${syslinux_fs[@]}"; then
|
||||
echo "/boot file system is not supported by Syslinux"
|
||||
exit 1
|
||||
fi
|
||||
boot="boot"
|
||||
bootpart="$(readlink -f "$bootdev")"
|
||||
elif [[ $rootfs ]]; then
|
||||
if ! check_is_in "$rootfs" "${syslinux_fs[@]}"; then
|
||||
echo "/ (root) file system is not supported by Syslinux"
|
||||
exit 1
|
||||
fi
|
||||
boot="root"
|
||||
bootpart="$(readlink -f "$rootdev")"
|
||||
else
|
||||
echo "Could not find filesystem on / (root) or /boot."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# We store the partition table type either gpt or mbr in var ptb
|
||||
# In rare cases a user could have one raid disk using mbr and another using gpt
|
||||
# In such cases we accept that the output may be incomplete
|
||||
|
||||
# Calls get_ptb() for $bootpart or for all device in RAID
|
||||
declare -A bootdevs
|
||||
get_boot_devices() {
|
||||
if device_is_raid "$bootpart"; then
|
||||
slaves=$(mdraid_all_slaves "$bootpart")
|
||||
|
||||
for slave in ${slaves[@]}; do
|
||||
local disk=$(get_disk "$slave")
|
||||
device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
|
||||
bootdevs[$slave]="$ptb"
|
||||
done
|
||||
else
|
||||
local disk=$(get_disk "$bootpart")
|
||||
device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
|
||||
bootdevs[$bootpart]="$ptb"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function Assumes the boot partition should be marked as active
|
||||
# All other partitions should not have the boot flag set
|
||||
set_active() {
|
||||
# If any bootdev is a block device without partitions bail
|
||||
# we want to set the boot flag on partitioned disk
|
||||
for dev in "${!bootdevs[@]}"; do
|
||||
dev_is_part $dev || { echo "$dev - is a block device. Aborting set_active!"; return 1; }
|
||||
done
|
||||
|
||||
# Clear BIOS Bootable Legacy Attribute for GPT drives
|
||||
# In rare cases where a RAID device has slaves on the same block device
|
||||
# Attribute 2 will be cleared for each partition multiple times
|
||||
for dev in "${!bootdevs[@]}"; do
|
||||
local ptb="${bootdevs[$dev]}"
|
||||
if [[ "$ptb" = GPT ]]; then
|
||||
local disk=$(get_disk "$dev")
|
||||
clear_gpt_attr2 "$disk"
|
||||
fi
|
||||
done
|
||||
|
||||
# Set the boot flag on bootdevs (generated from get_boot_devices)
|
||||
for part in "${!bootdevs[@]}"; do
|
||||
local ptb="${bootdevs[$part]}"
|
||||
local partnum="${part##*[[:alpha:]]}"
|
||||
local disk=$(get_disk "$part")
|
||||
|
||||
if [[ "$ptb" = MBR ]]; then
|
||||
if sfdisk "$disk" --activate "$partnum" &>/dev/null; then
|
||||
echo "Boot Flag Set - $part"
|
||||
else
|
||||
echo "FAILED to Set the boot flag on $part"
|
||||
exit 3
|
||||
fi
|
||||
elif [[ "$ptb" = GPT ]]; then
|
||||
if [[ ! -e /usr/bin/sgdisk ]]; then
|
||||
echo "FAILED to set attribute Legacy BIOS Bootable. sgdisk is not found - please install 'gptfdisk' package."
|
||||
exit 3
|
||||
fi
|
||||
|
||||
if sgdisk "$disk" --attributes="$partnum":set:2 &>/dev/null; then
|
||||
echo "Attribute Legacy Bios Bootable Set - $part"
|
||||
else
|
||||
echo "FAILED to set attribute Legacy BIOS Bootable on $part"
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
install_mbr() {
|
||||
# If any bootdev is a block device without partitions bail
|
||||
# we want to install the mbr to a partitioned disk
|
||||
for dev in "${!bootdevs[@]}"; do
|
||||
dev_is_part "$dev" || { echo "$dev - is a block device. Aborting MBR install"; return 1; }
|
||||
done
|
||||
|
||||
for part in "${!bootdevs[@]}"; do
|
||||
local partnum="${part##*[[:alpha:]]}"
|
||||
local disk=$(get_disk "$part")
|
||||
local ptb="${bootdevs[$part]}"
|
||||
|
||||
# We want to install to the root of the block device
|
||||
# If the device is a partition - ABORT!
|
||||
dev_is_part "$disk" && \
|
||||
{ echo "ABORT! MBR installation to partition ($disk)!"; exit 4;}
|
||||
|
||||
if [[ "$ptb" = MBR ]]; then
|
||||
mbrfile="$bios_libpath/mbr.bin"
|
||||
elif [[ "$ptb" = GPT ]]; then
|
||||
mbrfile="$bios_libpath/gptmbr.bin"
|
||||
fi
|
||||
|
||||
if dd bs=440 count=1 conv=notrunc if="$mbrfile" of="$disk" &> /dev/null; then
|
||||
echo "Installed MBR ($mbrfile) to $disk"
|
||||
else
|
||||
echo "Error Installing MBR ($mbrfile) to $disk"
|
||||
exit 4
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
|
||||
install_modules() {
|
||||
# Copy all syslinux *.c32 modules to /boot
|
||||
rm "$bios_bootpath"/*.c32 &> /dev/null
|
||||
cp "$bios_libpath"/*.c32 "$bios_bootpath"/ &> /dev/null
|
||||
|
||||
# Copy / Symlink pci.ids if pci.ids exists on the FS
|
||||
if [[ -f "$pciids_file" ]]; then
|
||||
rm "$bios_bootpath/pci.ids" &> /dev/null
|
||||
cp "$pciids_file" "$bios_bootpath/pci.ids" &> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
_install() {
|
||||
install_modules
|
||||
|
||||
if device_is_raid "$bootpart" ; then
|
||||
echo "Detected RAID on /boot - installing Syslinux with --raid"
|
||||
"$EXTLINUX" --install "$bios_bootpath" --raid &> /dev/null
|
||||
else
|
||||
"$EXTLINUX" --install "$bios_bootpath" &> /dev/null
|
||||
fi
|
||||
|
||||
if (( $? )); then
|
||||
echo "Syslinux BIOS install failed"
|
||||
exit 2
|
||||
else
|
||||
echo "Syslinux BIOS install successful"
|
||||
fi
|
||||
|
||||
touch "$CHROOT/$bios_autoupdate_file"
|
||||
}
|
||||
|
||||
update() {
|
||||
install_modules
|
||||
|
||||
if device_is_raid "$bootpart" ; then
|
||||
echo "Detected RAID on /boot - updating Syslinux with --raid"
|
||||
"$EXTLINUX" --update "$bios_bootpath" --raid &> /dev/null
|
||||
else
|
||||
"$EXTLINUX" --update "$bios_bootpath" &> /dev/null
|
||||
fi
|
||||
|
||||
if (($?)); then
|
||||
echo "Syslinux BIOS update failed"
|
||||
exit 2
|
||||
else
|
||||
echo "Syslinux BIOS update successful"
|
||||
fi
|
||||
}
|
||||
|
||||
if (( $# == 0 )); then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while getopts "c:uihmas" opt; do
|
||||
case $opt in
|
||||
c)
|
||||
CHROOT=$(readlink -e "$OPTARG")
|
||||
if [[ -z $CHROOT ]]; then
|
||||
echo "error: chroot path ``$OPTARG does not exist";
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
h)
|
||||
USAGE="True"
|
||||
;;
|
||||
i)
|
||||
INSTALL="True"
|
||||
;;
|
||||
u)
|
||||
UPDATE="True"
|
||||
;;
|
||||
m)
|
||||
MBR="True"
|
||||
;;
|
||||
a)
|
||||
SET_ACTIVE="True"
|
||||
;;
|
||||
s)
|
||||
# If AUTOUPDATE_FILE does not exist exit the script
|
||||
if [[ -f $bios_autoupdate_file ]]; then
|
||||
UPDATE="True"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ $USAGE ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Display Usage Information if both Install and Update are passed
|
||||
if [[ $INSTALL && $UPDATE ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Make sure only root can run our script
|
||||
if (( $(id -u) != 0 )); then
|
||||
echo "This script must be run as root" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# If a chroot dir is path set variables to reflect chroot
|
||||
if [[ "$CHROOT" ]]; then
|
||||
bios_libpath="$CHROOT$bios_libpath"
|
||||
bios_bootpath="$CHROOT$bios_bootpath"
|
||||
EXTLINUX="$CHROOT$EXTLINUX"
|
||||
fi
|
||||
|
||||
# Exit if no /boot path exists
|
||||
if ( f=("$bios_bootpath"/*); (( ! ${#f[@]} )) ); then
|
||||
echo "Error: $bios_bootpath is empty!"
|
||||
echo "Is /boot mounted?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the boot device if any of these options are passed
|
||||
if [[ $INSTALL || $UPDATE || $SET_ACTIVE || $MBR ]]; then
|
||||
getBoot
|
||||
fi
|
||||
|
||||
# Install or Update
|
||||
if [[ $INSTALL ]]; then
|
||||
_install || exit
|
||||
elif [[ $UPDATE ]]; then
|
||||
update || exit
|
||||
fi
|
||||
|
||||
|
||||
# SET_ACTIVE and MBR
|
||||
if [[ $SET_ACTIVE ]] || [[ $MBR ]]; then
|
||||
get_boot_devices
|
||||
|
||||
if [[ $SET_ACTIVE ]]; then
|
||||
set_active || exit
|
||||
fi
|
||||
|
||||
if [[ $MBR ]]; then
|
||||
install_mbr || exit
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -13,14 +13,21 @@
|
||||
<IsA>app:console</IsA>
|
||||
<Summary>SysLinux, IsoLinux and PXELinux bootloader</Summary>
|
||||
<Description>Lightweight bootloaders for floppy media (SYSLINUX), network booting (PXELINUX), and bootable "El Torito" CD-ROMs (ISOLINUX). The project also includes MEMDISK, a tool to boot legacy operating systems (such as DOS) from nontraditional media; it is usually used in conjunction with PXELINUX and ISOLINUX.</Description>
|
||||
<Archive sha1sum="ceda70713fd575bd46fc497b503ed90f121ab3b1" type="tarxz">https://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/syslinux-4.07.tar.xz</Archive>
|
||||
<Archive sha1sum="1bea76b97b4e32a017dd4168e819934b7c6592cc" type="tarxz">https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>nasm</Dependency>
|
||||
<Dependency>glibc-32bit</Dependency>
|
||||
<Dependency>asciidoc</Dependency>
|
||||
<Dependency>efibootmgr-devel</Dependency>
|
||||
<Dependency>upx</Dependency><!--1-->
|
||||
<Dependency>libutil-linux-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<Patch level="1">nopie.patch</Patch>
|
||||
<Patch level="1">fixisohybrid.patch</Patch>
|
||||
<Patch level="1">0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch</Patch>
|
||||
<Patch level="1">0035-SYSAPPEND-Fix-space-stripping.patch</Patch>
|
||||
<Patch level="1">gcc-fix-alignment.patch</Patch>
|
||||
<Patch level="1">dont-guess-alignment.patch</Patch>
|
||||
<Patch level="1">btrfs-fix.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -28,7 +35,12 @@
|
||||
<Name>syslinux</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency>mtools</Dependency>
|
||||
<Dependency>libutil-linux</Dependency>
|
||||
<Dependency>libutil-linux</Dependency>
|
||||
<Dependency>mtools</Dependency>
|
||||
<Dependency>efibootmgr</Dependency>
|
||||
<Dependency>util-linux</Dependency>
|
||||
<Dependency>dosfstools</Dependency>
|
||||
<Dependency>gptfdisk</Dependency>
|
||||
<Dependency>perl-Crypt-PasswdMD5</Dependency>
|
||||
<Dependency>perl-Digest-SHA1</Dependency>
|
||||
</RuntimeDependencies>
|
||||
@@ -42,13 +54,14 @@
|
||||
<AdditionalFiles>
|
||||
<AdditionalFile target="/usr/lib/syslinux/isolinux.cfg" permission="0644" owner="root">pisi-iso/isolinux.cfg</AdditionalFile>
|
||||
<AdditionalFile target="/usr/lib/syslinux/background.png" permission="0644" owner="root">pisi-iso/background.png</AdditionalFile>
|
||||
<!--AdditionalFile target="/usr/bin/syslinux-install_update" permission="0755" owner="root">syslinux-install_update</AdditionalFile-->
|
||||
</AdditionalFiles>
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="1">
|
||||
<Date>2014-06-14</Date>
|
||||
<Version>4.07</Version>
|
||||
<Date>2016-04-02</Date>
|
||||
<Version>6.03</Version>
|
||||
<Comment>First release</Comment>
|
||||
<Name>Alihan Öztürk</Name>
|
||||
<Email>alihan@pisilinux.org</Email>
|
||||
|
||||
Reference in New Issue
Block a user