lists.linaro.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
List overview
Download
OpenEmbedded
March 2017
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
openembedded@lists.linaro.org
3 participants
4 discussions
Start a n
N
ew thread
[PATCH] ldconfig-native: remove local copy in favor of oe-core one
by Denys Dmytriyenko
From: Denys Dmytriyenko <denys(a)ti.com> They are mostly identical, but oe-core is more recent and has 2 extra patches:
http://cgit.openembedded.org/openembedded-core/commit/?id=adbf0b1fdf897076e…
http://cgit.openembedded.org/openembedded-core/commit/?id=0b0e4d7aa64feded0…
Signed-off-by: Denys Dmytriyenko <denys(a)ti.com> --- .../glibc/ldconfig-native-2.12.1/32and64bit.patch | 331 --------------- .../glibc/ldconfig-native-2.12.1/README | 8 - .../endian-ness_handling.patch | 454 -------------------- .../ldconfig-native-2.12.1/endianess-header.patch | 113 ----- .../glibc/ldconfig-native-2.12.1/flag_fix.patch | 24 -- .../ldconfig-default-to-all-multilib-dirs.patch | 37 -- .../ldconfig-native-2.12.1.tar.bz2 | Bin 21491 -> 0 bytes .../glibc/ldconfig-native-2.12.1/ldconfig.patch | 471 --------------------- .../ldconfig_aux-cache_path_fix.patch | 36 -- .../recipes-core/glibc/ldconfig-native_2.12.1.bb | 32 -- 10 files changed, 1506 deletions(-) delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/32and64bit.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/README delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endian-ness_handling.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endianess-header.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/flag_fix.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-default-to-all-multilib-dirs.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-native-2.12.1.tar.bz2 delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig_aux-cache_path_fix.patch delete mode 100644 meta-linaro-toolchain/recipes-core/glibc/ldconfig-native_2.12.1.bb diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/32and64bit.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/32and64bit.patch deleted file mode 100644 index cdfeaea..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/32and64bit.patch +++ /dev/null @@ -1,331 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -We run the ldconfig in the cross fashion. make the code bitsize aware so that -we can cross build ldconfig cache for various architectures. - -Richard Purdie <richard.purdie(a)linuxfoundation.org> 2009/05/19 -Nitin A Kamble <nitin.a.kamble(a)intel.com> 2009/03/29 - -Index: ldconfig-native-2.12.1/readelflib.c -=================================================================== ---- ldconfig-native-2.12.1.orig/readelflib.c -+++ ldconfig-native-2.12.1/readelflib.c -@@ -40,39 +40,212 @@ do \ - - /* Returns 0 if everything is ok, != 0 in case of error. */ - int --process_elf_file (const char *file_name, const char *lib, int *flag, -+process_elf_file32 (const char *file_name, const char *lib, int *flag, - unsigned int *osversion, char **soname, void *file_contents, - size_t file_length) - { - int i; - unsigned int j; -- ElfW(Addr) loadaddr; -+ Elf32_Addr loadaddr; - unsigned int dynamic_addr; - size_t dynamic_size; - char *program_interpreter; - -- ElfW(Ehdr) *elf_header; -- ElfW(Phdr) *elf_pheader, *segment; -- ElfW(Dyn) *dynamic_segment, *dyn_entry; -+ Elf32_Ehdr *elf_header; -+ Elf32_Phdr *elf_pheader, *segment; -+ Elf32_Dyn *dynamic_segment, *dyn_entry; - char *dynamic_strings; - -- elf_header = (ElfW(Ehdr) *) file_contents; -+ elf_header = (Elf32_Ehdr *) file_contents; - *osversion = 0; - -- if (elf_header->e_ident [EI_CLASS] != ElfW (CLASS)) -+ if (elf_header->e_type != ET_DYN) - { -- if (opt_verbose) -+ error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name, -+ elf_header->e_type); -+ return 1; -+ } -+ -+ /* Get information from elf program header. */ -+ elf_pheader = (Elf32_Phdr *) (elf_header->e_phoff + file_contents); -+ check_ptr (elf_pheader); -+ -+ /* The library is an elf library, now search for soname and -+ libc5/libc6. */ -+ *flag = FLAG_ELF; -+ -+ loadaddr = -1; -+ dynamic_addr = 0; -+ dynamic_size = 0; -+ program_interpreter = NULL; -+ for (i = 0, segment = elf_pheader; -+ i < elf_header->e_phnum; i++, segment++) -+ { -+ check_ptr (segment); -+ -+ switch (segment->p_type) - { -- if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) -- error (0, 0, _("%s is a 32 bit ELF file.\n"), file_name); -- else if (elf_header->e_ident [EI_CLASS] == ELFCLASS64) -- error (0, 0, _("%s is a 64 bit ELF file.\n"), file_name); -- else -- error (0, 0, _("Unknown ELFCLASS in file %s.\n"), file_name); -+ case PT_LOAD: -+ if (loadaddr == (Elf32_Addr) -1) -+ loadaddr = segment->p_vaddr - segment->p_offset; -+ break; -+ -+ case PT_DYNAMIC: -+ if (dynamic_addr) -+ error (0, 0, _("more than one dynamic segment\n")); -+ -+ dynamic_addr = segment->p_offset; -+ dynamic_size = segment->p_filesz; -+ break; -+ -+ case PT_INTERP: -+ program_interpreter = (char *) (file_contents + segment->p_offset); -+ check_ptr (program_interpreter); -+ -+ /* Check if this is enough to classify the binary. */ -+ for (j = 0; j < sizeof (interpreters) / sizeof (interpreters [0]); -+ ++j) -+ if (strcmp (program_interpreter, interpreters[j].soname) == 0) -+ { -+ *flag = interpreters[j].flag; -+ break; -+ } -+ break; -+ -+ case PT_NOTE: -+ if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) -+ { -+ Elf32_Word *abi_note = (Elf32_Word *) (file_contents -+ + segment->p_offset); -+ Elf32_Addr size = segment->p_filesz; -+ -+ while (abi_note [0] != 4 || abi_note [1] != 16 -+ || abi_note [2] != 1 -+ || memcmp (abi_note + 3, "GNU", 4) != 0) -+ { -+#define ROUND(len) (((len) + sizeof (Elf32_Word)) - 1) & -sizeof (Elf32_Word))) -+ Elf32_Addr) note_size = 3 * sizeof (Elf32_Word)) -+ + ROUND (abi_note[0]) -+ + ROUND (abi_note[1]); -+ -+ if (size - 32 < note_size || note_size == 0) -+ { -+ size = 0; -+ break; -+ } -+ size -= note_size; -+ abi_note = (void *) abi_note + note_size; -+ } -+ -+ if (size == 0) -+ break; -+ -+ *osversion = (abi_note [4] << 24) | -+ ((abi_note [5] & 0xff) << 16) | -+ ((abi_note [6] & 0xff) << 8) | -+ (abi_note [7] & 0xff); -+ } -+ break; -+ -+ default: -+ break; -+ } -+ -+ } -+ if (loadaddr == (Elf32_Addr) -1) -+ { -+ /* Very strange. */ -+ loadaddr = 0; -+ } -+ -+ /* Now we can read the dynamic sections. */ -+ if (dynamic_size == 0) -+ return 1; -+ -+ dynamic_segment = (Elf32_Dyn *) (file_contents + dynamic_addr); -+ check_ptr (dynamic_segment); -+ -+ /* Find the string table. */ -+ dynamic_strings = NULL; -+ for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ ++dyn_entry) -+ { -+ check_ptr (dyn_entry); -+ if (dyn_entry->d_tag == DT_STRTAB) -+ { -+ dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr); -+ check_ptr (dynamic_strings); -+ break; - } -- return 1; - } - -+ if (dynamic_strings == NULL) -+ return 1; -+ -+ /* Now read the DT_NEEDED and DT_SONAME entries. */ -+ for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ ++dyn_entry) -+ { -+ if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME) -+ { -+ char *name = dynamic_strings + dyn_entry->d_un.d_val; -+ check_ptr (name); -+ -+ if (dyn_entry->d_tag == DT_NEEDED) -+ { -+ -+ if (*flag == FLAG_ELF) -+ { -+ /* Check if this is enough to classify the binary. */ -+ for (j = 0; -+ j < sizeof (known_libs) / sizeof (known_libs [0]); -+ ++j) -+ if (strcmp (name, known_libs [j].soname) == 0) -+ { -+ *flag = known_libs [j].flag; -+ break; -+ } -+ } -+ } -+ -+ else if (dyn_entry->d_tag == DT_SONAME) -+ *soname = xstrdup (name); -+ -+ /* Do we have everything we need? */ -+ if (*soname && *flag != FLAG_ELF) -+ return 0; -+ } -+ } -+ -+ /* We reach this point only if the file doesn't contain a DT_SONAME -+ or if we can't classify the library. If it doesn't have a -+ soname, return the name of the library. */ -+ if (*soname == NULL) -+ *soname = xstrdup (lib); -+ -+ return 0; -+} -+ -+int -+process_elf_file64 (const char *file_name, const char *lib, int *flag, -+ unsigned int *osversion, char **soname, void *file_contents, -+ size_t file_length) -+{ -+ int i; -+ unsigned int j; -+ Elf64_Addr loadaddr; -+ unsigned int dynamic_addr; -+ size_t dynamic_size; -+ char *program_interpreter; -+ -+ Elf64_Ehdr *elf_header; -+ Elf64_Phdr *elf_pheader, *segment; -+ Elf64_Dyn *dynamic_segment, *dyn_entry; -+ char *dynamic_strings; -+ -+ elf_header = (Elf64_Ehdr *) file_contents; -+ *osversion = 0; -+ - if (elf_header->e_type != ET_DYN) - { - error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name, -@@ -81,7 +254,7 @@ process_elf_file (const char *file_name, - } - - /* Get information from elf program header. */ -- elf_pheader = (ElfW(Phdr) *) (elf_header->e_phoff + file_contents); -+ elf_pheader = (Elf64_Phdr *) (elf_header->e_phoff + file_contents); - check_ptr (elf_pheader); - - /* The library is an elf library, now search for soname and -@@ -100,7 +273,7 @@ process_elf_file (const char *file_name, - switch (segment->p_type) - { - case PT_LOAD: -- if (loadaddr == (ElfW(Addr)) -1) -+ if (loadaddr == (Elf64_Addr) -1) - loadaddr = segment->p_vaddr - segment->p_offset; - break; - -@@ -129,16 +302,16 @@ process_elf_file (const char *file_name, - case PT_NOTE: - if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) - { -- ElfW(Word) *abi_note = (ElfW(Word) *) (file_contents -+ Elf64_Word *abi_note = (Elf64_Word *) (file_contents - + segment->p_offset); -- ElfW(Addr) size = segment->p_filesz; -+ Elf64_Addr size = segment->p_filesz; - - while (abi_note [0] != 4 || abi_note [1] != 16 - || abi_note [2] != 1 - || memcmp (abi_note + 3, "GNU", 4) != 0) - { --#define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word))) -- ElfW(Addr) note_size = 3 * sizeof (ElfW(Word)) -+#define ROUND(len) (((len) + sizeof (Elf64_Word) - 1) & -sizeof (Elf64_Word)) -+ Elf64_Addr note_size = 3 * sizeof (Elf64_Word) - + ROUND (abi_note[0]) - + ROUND (abi_note[1]); - -@@ -166,7 +339,7 @@ process_elf_file (const char *file_name, - } - - } -- if (loadaddr == (ElfW(Addr)) -1) -+ if (loadaddr == (Elf64_Addr) -1) - { - /* Very strange. */ - loadaddr = 0; -@@ -176,7 +349,7 @@ process_elf_file (const char *file_name, - if (dynamic_size == 0) - return 1; - -- dynamic_segment = (ElfW(Dyn) *) (file_contents + dynamic_addr); -+ dynamic_segment = (Elf64_Dyn *) (file_contents + dynamic_addr); - check_ptr (dynamic_segment); - - /* Find the string table. */ -@@ -233,3 +406,33 @@ process_elf_file (const char *file_name, - - return 0; - } -+/* Returns 0 if everything is ok, != 0 in case of error. */ -+int -+process_elf_file (const char *file_name, const char *lib, int *flag, -+ unsigned int *osversion, char **soname, void *file_contents, -+ size_t file_length) -+{ -+ int i; -+ unsigned int j; -+ ElfW(Addr) loadaddr; -+ unsigned int dynamic_addr; -+ size_t dynamic_size; -+ char *program_interpreter; -+ -+ ElfW(Ehdr) *elf_header; -+ ElfW(Phdr) *elf_pheader, *segment; -+ ElfW(Dyn) *dynamic_segment, *dyn_entry; -+ char *dynamic_strings; -+ -+ elf_header = (ElfW(Ehdr) *) file_contents; -+ *osversion = 0; -+ -+ if (elf_header->e_ident [EI_CLASS] == ELFCLASS32) -+ return process_elf_file32(file_name, lib,flag, osversion, soname, file_contents, file_length); -+ else if (elf_header->e_ident [EI_CLASS] == ELFCLASS64) -+ return process_elf_file64(file_name, lib,flag, osversion, soname, file_contents, file_length); -+ error (0, 0, _("Unknown ELFCLASS in file %s.\n"), file_name); -+ return 1; -+} -+ -+ diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/README b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/README deleted file mode 100644 index 43fb983..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/README +++ /dev/null @@ -1,8 +0,0 @@ -The files are pulled verbatim from glibc 2.5 and then patched to allow -standalone compilation of ldconfig. - -Richard Purdie -OpenedHand Ltd. - -Upgraded the ldconfig recipe to eglibc 2.12.1 -Nitin A Kamble <nitin.a.kamble(a)intel.com> 2011/03/29 diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endian-ness_handling.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endian-ness_handling.patch deleted file mode 100644 index 7f8e4db..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endian-ness_handling.patch +++ /dev/null @@ -1,454 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -Do data input/output handling according to endien-ness of the library file. That -enables use of ldconfig in the cross fashion for any architecture. - -2011/04/04 -Richard Purdie <richard.purdie(a)linuxfoundation.org> -Nitin Kamble <nitin.a.kamble(a)intel.com> - -Index: ldconfig-native-2.12.1/readelflib.c -=================================================================== ---- ldconfig-native-2.12.1.orig/readelflib.c -+++ ldconfig-native-2.12.1/readelflib.c -@@ -38,6 +38,28 @@ do \ - } \ - while (0); - -+int be; -+static uint16_t read16(uint16_t x, int be) -+{ -+ if (be) -+ return be16toh(x); -+ return le16toh(x); -+} -+ -+static uint32_t read32(uint32_t x, int be) -+{ -+ if (be) -+ return be32toh(x); -+ return le32toh(x); -+} -+ -+static uint64_t read64(uint64_t x, int be) -+{ -+ if (be) -+ return be64toh(x); -+ return le64toh(x); -+} -+ - /* Returns 0 if everything is ok, != 0 in case of error. */ - int - process_elf_file32 (const char *file_name, const char *lib, int *flag, -@@ -59,15 +81,17 @@ process_elf_file32 (const char *file_nam - elf_header = (Elf32_Ehdr *) file_contents; - *osversion = 0; - -- if (elf_header->e_type != ET_DYN) -+ be = (elf_header->e_ident[EI_DATA] == ELFDATA2MSB); -+ -+ if (read16(elf_header->e_type, be) != ET_DYN) - { - error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name, -- elf_header->e_type); -+ read16(elf_header->e_type, be)); - return 1; - } - - /* Get information from elf program header. */ -- elf_pheader = (Elf32_Phdr *) (elf_header->e_phoff + file_contents); -+ elf_pheader = (Elf32_Phdr *) (read32(elf_header->e_phoff, be) + file_contents); - check_ptr (elf_pheader); - - /* The library is an elf library, now search for soname and -@@ -79,27 +103,27 @@ process_elf_file32 (const char *file_nam - dynamic_size = 0; - program_interpreter = NULL; - for (i = 0, segment = elf_pheader; -- i < elf_header->e_phnum; i++, segment++) -+ i < read16(elf_header->e_phnum, be); i++, segment++) - { - check_ptr (segment); - -- switch (segment->p_type) -+ switch (read32(segment->p_type, be)) - { - case PT_LOAD: - if (loadaddr == (Elf32_Addr) -1) -- loadaddr = segment->p_vaddr - segment->p_offset; -+ loadaddr = read32(segment->p_vaddr, be) - read32(segment->p_offset, be); - break; - - case PT_DYNAMIC: - if (dynamic_addr) - error (0, 0, _("more than one dynamic segment\n")); - -- dynamic_addr = segment->p_offset; -- dynamic_size = segment->p_filesz; -+ dynamic_addr = read32(segment->p_offset, be); -+ dynamic_size = read32(segment->p_filesz, be); - break; - - case PT_INTERP: -- program_interpreter = (char *) (file_contents + segment->p_offset); -+ program_interpreter = (char *) (file_contents + read32(segment->p_offset, be)); - check_ptr (program_interpreter); - - /* Check if this is enough to classify the binary. */ -@@ -113,20 +137,20 @@ process_elf_file32 (const char *file_nam - break; - - case PT_NOTE: -- if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) -+ if (!*osversion && read32(segment->p_filesz, be) >= 32 && segment->p_align >= 4) - { - Elf32_Word *abi_note = (Elf32_Word *) (file_contents -- + segment->p_offset); -- Elf32_Addr size = segment->p_filesz; -+ + read32(segment->p_offset, be)); -+ Elf32_Addr size = read32(segment->p_filesz, be); - -- while (abi_note [0] != 4 || abi_note [1] != 16 -- || abi_note [2] != 1 -+ while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16 -+ || read32(abi_note [2], be) != 1 - || memcmp (abi_note + 3, "GNU", 4) != 0) - { --#define ROUND(len) (((len) + sizeof (Elf32_Word)) - 1) & -sizeof (Elf32_Word))) -- Elf32_Addr) note_size = 3 * sizeof (Elf32_Word)) -- + ROUND (abi_note[0]) -- + ROUND (abi_note[1]); -+#define ROUND(len) (((len) + sizeof (Elf32_Word) - 1) & -sizeof (Elf32_Word)) -+ Elf32_Addr note_size = 3 * sizeof (Elf32_Word) -+ + ROUND (read32(abi_note[0], be)) -+ + ROUND (read32(abi_note[1], be)); - - if (size - 32 < note_size || note_size == 0) - { -@@ -140,10 +164,10 @@ process_elf_file32 (const char *file_nam - if (size == 0) - break; - -- *osversion = (abi_note [4] << 24) | -- ((abi_note [5] & 0xff) << 16) | -- ((abi_note [6] & 0xff) << 8) | -- (abi_note [7] & 0xff); -+ *osversion = (read32(abi_note [4], be) << 24) | -+ ((read32(abi_note [5], be) & 0xff) << 16) | -+ ((read32(abi_note [6], be) & 0xff) << 8) | -+ (read32(abi_note [7], be) & 0xff); - } - break; - -@@ -167,13 +191,13 @@ process_elf_file32 (const char *file_nam - - /* Find the string table. */ - dynamic_strings = NULL; -- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ for (dyn_entry = dynamic_segment; read32(dyn_entry->d_tag, be) != DT_NULL; - ++dyn_entry) - { - check_ptr (dyn_entry); -- if (dyn_entry->d_tag == DT_STRTAB) -+ if (read32(dyn_entry->d_tag, be) == DT_STRTAB) - { -- dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr); -+ dynamic_strings = (char *) (file_contents + read32(dyn_entry->d_un.d_val, be) - loadaddr); - check_ptr (dynamic_strings); - break; - } -@@ -183,15 +207,15 @@ process_elf_file32 (const char *file_nam - return 1; - - /* Now read the DT_NEEDED and DT_SONAME entries. */ -- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ for (dyn_entry = dynamic_segment; read32(dyn_entry->d_tag, be) != DT_NULL; - ++dyn_entry) - { -- if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME) -+ if (read32(dyn_entry->d_tag, be) == DT_NEEDED || read32(dyn_entry->d_tag, be) == DT_SONAME) - { -- char *name = dynamic_strings + dyn_entry->d_un.d_val; -+ char *name = dynamic_strings + read32(dyn_entry->d_un.d_val, be); - check_ptr (name); - -- if (dyn_entry->d_tag == DT_NEEDED) -+ if (read32(dyn_entry->d_tag, be) == DT_NEEDED) - { - - if (*flag == FLAG_ELF) -@@ -208,7 +232,7 @@ process_elf_file32 (const char *file_nam - } - } - -- else if (dyn_entry->d_tag == DT_SONAME) -+ else if (read32(dyn_entry->d_tag, be) == DT_SONAME) - *soname = xstrdup (name); - - /* Do we have everything we need? */ -@@ -246,15 +270,17 @@ process_elf_file64 (const char *file_nam - elf_header = (Elf64_Ehdr *) file_contents; - *osversion = 0; - -- if (elf_header->e_type != ET_DYN) -+ be = (elf_header->e_ident[EI_DATA] == ELFDATA2MSB); -+ -+ if (read16(elf_header->e_type, be) != ET_DYN) - { - error (0, 0, _("%s is not a shared object file (Type: %d).\n"), file_name, -- elf_header->e_type); -+ read16(elf_header->e_type, be)); - return 1; - } - - /* Get information from elf program header. */ -- elf_pheader = (Elf64_Phdr *) (elf_header->e_phoff + file_contents); -+ elf_pheader = (Elf64_Phdr *) (read64(elf_header->e_phoff, be) + file_contents); - check_ptr (elf_pheader); - - /* The library is an elf library, now search for soname and -@@ -266,27 +292,27 @@ process_elf_file64 (const char *file_nam - dynamic_size = 0; - program_interpreter = NULL; - for (i = 0, segment = elf_pheader; -- i < elf_header->e_phnum; i++, segment++) -+ i < read16(elf_header->e_phnum, be); i++, segment++) - { - check_ptr (segment); - -- switch (segment->p_type) -+ switch (read32(segment->p_type, be)) - { - case PT_LOAD: - if (loadaddr == (Elf64_Addr) -1) -- loadaddr = segment->p_vaddr - segment->p_offset; -+ loadaddr = read64(segment->p_vaddr, be) - read64(segment->p_offset, be); - break; - - case PT_DYNAMIC: - if (dynamic_addr) - error (0, 0, _("more than one dynamic segment\n")); - -- dynamic_addr = segment->p_offset; -- dynamic_size = segment->p_filesz; -+ dynamic_addr = read64(segment->p_offset, be); -+ dynamic_size = read32(segment->p_filesz, be); - break; - - case PT_INTERP: -- program_interpreter = (char *) (file_contents + segment->p_offset); -+ program_interpreter = (char *) (file_contents + read64(segment->p_offset, be)); - check_ptr (program_interpreter); - - /* Check if this is enough to classify the binary. */ -@@ -300,20 +326,21 @@ process_elf_file64 (const char *file_nam - break; - - case PT_NOTE: -- if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) -+ if (!*osversion && read32(segment->p_filesz, be) >= 32 && read32(segment->p_align, be) >= 4) - { - Elf64_Word *abi_note = (Elf64_Word *) (file_contents -- + segment->p_offset); -- Elf64_Addr size = segment->p_filesz; -+ + read64(segment->p_offset, be)); -+ Elf64_Addr size = read32(segment->p_filesz, be); - -- while (abi_note [0] != 4 || abi_note [1] != 16 -- || abi_note [2] != 1 -+ while (read32(abi_note [0], be) != 4 || read32(abi_note [1], be) != 16 -+ || read32(abi_note [2], be) != 1 - || memcmp (abi_note + 3, "GNU", 4) != 0) - { -+#undef ROUND - #define ROUND(len) (((len) + sizeof (Elf64_Word) - 1) & -sizeof (Elf64_Word)) - Elf64_Addr note_size = 3 * sizeof (Elf64_Word) -- + ROUND (abi_note[0]) -- + ROUND (abi_note[1]); -+ + ROUND (read32(abi_note[0], be)) -+ + ROUND (read32(abi_note[1], be)); - - if (size - 32 < note_size || note_size == 0) - { -@@ -327,10 +354,10 @@ process_elf_file64 (const char *file_nam - if (size == 0) - break; - -- *osversion = (abi_note [4] << 24) | -- ((abi_note [5] & 0xff) << 16) | -- ((abi_note [6] & 0xff) << 8) | -- (abi_note [7] & 0xff); -+ *osversion = (read32(abi_note [4], be) << 24) | -+ ((read32(abi_note [5], be) & 0xff) << 16) | -+ ((read32(abi_note [6], be) & 0xff) << 8) | -+ (read32(abi_note [7], be) & 0xff); - } - break; - -@@ -354,13 +381,13 @@ process_elf_file64 (const char *file_nam - - /* Find the string table. */ - dynamic_strings = NULL; -- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ for (dyn_entry = dynamic_segment; read64(dyn_entry->d_tag, be) != DT_NULL; - ++dyn_entry) - { - check_ptr (dyn_entry); -- if (dyn_entry->d_tag == DT_STRTAB) -+ if (read64(dyn_entry->d_tag, be) == DT_STRTAB) - { -- dynamic_strings = (char *) (file_contents + dyn_entry->d_un.d_val - loadaddr); -+ dynamic_strings = (char *) (file_contents + read64(dyn_entry->d_un.d_val, be) - loadaddr); - check_ptr (dynamic_strings); - break; - } -@@ -370,15 +397,15 @@ process_elf_file64 (const char *file_nam - return 1; - - /* Now read the DT_NEEDED and DT_SONAME entries. */ -- for (dyn_entry = dynamic_segment; dyn_entry->d_tag != DT_NULL; -+ for (dyn_entry = dynamic_segment; read64(dyn_entry->d_tag, be) != DT_NULL; - ++dyn_entry) - { -- if (dyn_entry->d_tag == DT_NEEDED || dyn_entry->d_tag == DT_SONAME) -+ if (read64(dyn_entry->d_tag, be) == DT_NEEDED || read64(dyn_entry->d_tag, be) == DT_SONAME) - { -- char *name = dynamic_strings + dyn_entry->d_un.d_val; -+ char *name = dynamic_strings + read64(dyn_entry->d_un.d_val, be); - check_ptr (name); - -- if (dyn_entry->d_tag == DT_NEEDED) -+ if (read64(dyn_entry->d_tag, be) == DT_NEEDED) - { - - if (*flag == FLAG_ELF) -@@ -395,7 +422,7 @@ process_elf_file64 (const char *file_nam - } - } - -- else if (dyn_entry->d_tag == DT_SONAME) -+ else if (read64(dyn_entry->d_tag, be) == DT_SONAME) - *soname = xstrdup (name); - - /* Do we have everything we need? */ -Index: ldconfig-native-2.12.1/readlib.c -=================================================================== ---- ldconfig-native-2.12.1.orig/readlib.c -+++ ldconfig-native-2.12.1/readlib.c -@@ -169,7 +169,8 @@ process_file (const char *real_file_name - ret = 1; - } - /* Libraries have to be shared object files. */ -- else if (elf_header->e_type != ET_DYN) -+ else if ((elf_header->e_ident[EI_DATA] == ELFDATA2MSB && be16toh(elf_header->e_type) != ET_DYN) || -+ (elf_header->e_ident[EI_DATA] == ELFDATA2LSB && le16toh(elf_header->e_type) != ET_DYN)) - ret = 1; - else if (process_elf_file (file_name, lib, flag, osversion, soname, - file_contents, statbuf.st_size)) -Index: ldconfig-native-2.12.1/cache.c -=================================================================== ---- ldconfig-native-2.12.1.orig/cache.c -+++ ldconfig-native-2.12.1/cache.c -@@ -39,6 +39,29 @@ - # define N_(msgid) msgid - #define _(msg) msg - -+extern int be; -+ -+static uint16_t write16(uint16_t x, int be) -+{ -+ if (be) -+ return htobe16(x); -+ return htole16(x); -+} -+ -+static uint32_t write32(uint32_t x, int be) -+{ -+ if (be) -+ return htobe32(x); -+ return htole32(x); -+} -+ -+static uint64_t write64(uint64_t x, int be) -+{ -+ if (be) -+ return htobe64(x); -+ return htole64(x); -+} -+ - struct cache_entry - { - char *lib; /* Library name. */ -@@ -279,7 +302,12 @@ save_cache (const char *cache_name) - /* Number of normal cache entries. */ - int cache_entry_old_count = 0; - -- for (entry = entries; entry != NULL; entry = entry->next) -+ if (be) -+ printf("saving cache in big endian encoding\n"); -+ else -+ printf("saving cache in little endian encoding\n"); -+ -+ for (entry = entries; entry != NULL; entry = entry->next) - { - /* Account the final NULs. */ - total_strlen += strlen (entry->lib) + strlen (entry->path) + 2; -@@ -310,7 +338,7 @@ save_cache (const char *cache_name) - memset (file_entries, '\0', sizeof (struct cache_file)); - memcpy (file_entries->magic, CACHEMAGIC, sizeof CACHEMAGIC - 1); - -- file_entries->nlibs = cache_entry_old_count; -+ file_entries->nlibs = write32(cache_entry_old_count, be); - } - - struct cache_file_new *file_entries_new = NULL; -@@ -330,8 +358,8 @@ save_cache (const char *cache_name) - memcpy (file_entries_new->version, CACHE_VERSION, - sizeof CACHE_VERSION - 1); - -- file_entries_new->nlibs = cache_entry_count; -- file_entries_new->len_strings = total_strlen; -+ file_entries_new->nlibs = write32(cache_entry_count, be); -+ file_entries_new->len_strings = write32(total_strlen, be); - } - - /* Pad for alignment of cache_file_new. */ -@@ -358,9 +386,9 @@ save_cache (const char *cache_name) - /* First the library. */ - if (opt_format != 2 && entry->hwcap == 0) - { -- file_entries->libs[idx_old].flags = entry->flags; -+ file_entries->libs[idx_old].flags = write32(entry->flags, be); - /* XXX: Actually we can optimize here and remove duplicates. */ -- file_entries->libs[idx_old].key = str_offset + pad; -+ file_entries->libs[idx_old].key = write32(str_offset + pad, be); - } - if (opt_format != 0) - { -@@ -368,10 +396,10 @@ save_cache (const char *cache_name) - not doing so makes the code easier, the string table - always begins at the beginning of the the new cache - struct. */ -- file_entries_new->libs[idx_new].flags = entry->flags; -- file_entries_new->libs[idx_new].osversion = entry->osversion; -- file_entries_new->libs[idx_new].hwcap = entry->hwcap; -- file_entries_new->libs[idx_new].key = str_offset; -+ file_entries_new->libs[idx_new].flags = write32(entry->flags, be); -+ file_entries_new->libs[idx_new].osversion = write32(entry->osversion, be); -+ file_entries_new->libs[idx_new].hwcap = write64(entry->hwcap, be); -+ file_entries_new->libs[idx_new].key = write32(str_offset, be); - } - - size_t len = strlen (entry->lib) + 1; -@@ -379,9 +407,9 @@ save_cache (const char *cache_name) - str_offset += len; - /* Then the path. */ - if (opt_format != 2 && entry->hwcap == 0) -- file_entries->libs[idx_old].value = str_offset + pad; -+ file_entries->libs[idx_old].value = write32(str_offset + pad, be); - if (opt_format != 0) -- file_entries_new->libs[idx_new].value = str_offset; -+ file_entries_new->libs[idx_new].value = write32(str_offset, be); - len = strlen (entry->path) + 1; - str = mempcpy (str, entry->path, len); - str_offset += len; diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endianess-header.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endianess-header.patch deleted file mode 100644 index a18b2c2..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/endianess-header.patch +++ /dev/null @@ -1,113 +0,0 @@ -Upstream-Status: Inappropriate [fix poky patch] - -This patch fixes build issues with a previous endian-ness_handling.patch on -distros that don't have macros referenced - -7/20/2011 -Matthew McClintock <msm(a)freescale.com> - -diff -purN ldconfig-native-2.12.1.orig/endian_extra.h ldconfig-native-2.12.1/endian_extra.h ---- ldconfig-native-2.12.1.orig/endian_extra.h 1969-12-31 18:00:00.000000000 -0600 -+++ ldconfig-native-2.12.1/endian_extra.h 2011-07-19 18:09:14.323048417 -0500 -@@ -0,0 +1,64 @@ -+/* Copyright (C) 1992, 1996, 1997, 2000, 2008 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library 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 -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#include <endian.h> -+ -+#ifndef _ENDIAN_EXTRA_H -+#define _ENDIAN_EXTRA_H 1 -+ -+/* Don't redefine these macros if they already exist */ -+#ifndef htobe16 -+#ifdef __USE_BSD -+/* Conversion interfaces. */ -+# include <byteswap.h> -+ -+# if __BYTE_ORDER == __LITTLE_ENDIAN -+# define htobe16(x) __bswap_16 (x) -+# define htole16(x) (x) -+# define be16toh(x) __bswap_16 (x) -+# define le16toh(x) (x) -+ -+# define htobe32(x) __bswap_32 (x) -+# define htole32(x) (x) -+# define be32toh(x) __bswap_32 (x) -+# define le32toh(x) (x) -+ -+# define htobe64(x) __bswap_64 (x) -+# define htole64(x) (x) -+# define be64toh(x) __bswap_64 (x) -+# define le64toh(x) (x) -+# else -+# define htobe16(x) (x) -+# define htole16(x) __bswap_16 (x) -+# define be16toh(x) (x) -+# define le16toh(x) __bswap_16 (x) -+ -+# define htobe32(x) (x) -+# define htole32(x) __bswap_32 (x) -+# define be32toh(x) (x) -+# define le32toh(x) __bswap_32 (x) -+ -+# define htobe64(x) (x) -+# define htole64(x) __bswap_64 (x) -+# define be64toh(x) (x) -+# define le64toh(x) __bswap_64 (x) -+# endif -+#endif -+#endif -+ -+#endif /* endian_extra.h */ -diff -purN ldconfig-native-2.12.1.orig/cache.c ldconfig-native-2.12.1/cache.c ---- ldconfig-native-2.12.1.orig/cache.c 2011-07-19 18:21:28.347041301 -0500 -+++ ldconfig-native-2.12.1/cache.c 2011-07-19 18:22:54.118048064 -0500 -@@ -39,6 +39,8 @@ - # define N_(msgid) msgid - #define _(msg) msg - -+#include "endian_extra.h" -+ - extern int be; - - static uint16_t write16(uint16_t x, int be) -diff -purN ldconfig-native-2.12.1.orig/readelflib.c ldconfig-native-2.12.1/readelflib.c ---- ldconfig-native-2.12.1.orig/readelflib.c 2011-07-19 18:21:28.346041593 -0500 -+++ ldconfig-native-2.12.1/readelflib.c 2011-07-19 18:23:05.324059875 -0500 -@@ -25,6 +25,9 @@ - - /* check_ptr checks that a pointer is in the mmaped file and doesn't - point outside it. */ -+ -+#include "endian_extra.h" -+ - #undef check_ptr - #define check_ptr(ptr) \ - do \ -diff -purN ldconfig-native-2.12.1.orig/readlib.c ldconfig-native-2.12.1/readlib.c ---- ldconfig-native-2.12.1.orig/readlib.c 2011-07-19 18:21:28.346041593 -0500 -+++ ldconfig-native-2.12.1/readlib.c 2011-07-19 18:23:23.877046210 -0500 -@@ -40,6 +40,8 @@ - - #include "ldconfig.h" - -+#include "endian_extra.h" -+ - #define _(msg) msg - - #define Elf32_CLASS ELFCLASS32 diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/flag_fix.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/flag_fix.patch deleted file mode 100644 index 4e9aab9..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/flag_fix.patch +++ /dev/null @@ -1,24 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -The native version of ldconfig was using native definition of LD_SO (i.e. -ld-linux-x86-64.so.2 ) which is not correct for doing the cross ldconfig. -This was causing libc.so on the target marked as ELF lib rather than -FLAG_ELF_LIBC6 in the ld.so.cache. - -Nitin A Kamble <nitin.a.kamble(a)intel.com> 2011/04/4 - -Index: ldconfig-native-2.12.1/readlib.c -=================================================================== ---- ldconfig-native-2.12.1.orig/readlib.c -+++ ldconfig-native-2.12.1/readlib.c -@@ -51,6 +51,10 @@ struct known_names - int flag; - }; - -+/* don't use host's definition of LD_SO */ -+#undef LD_SO -+#define LD_SO "ld.so.1" -+ - static struct known_names interpreters[] = - { - { "/lib/" LD_SO, FLAG_ELF_LIBC6 }, diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-default-to-all-multilib-dirs.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-default-to-all-multilib-dirs.patch deleted file mode 100644 index 5ed4f6f..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-default-to-all-multilib-dirs.patch +++ /dev/null @@ -1,37 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -make ldconfig default to both /lib+/usr/lib, /lib32+/usr/lib32 and -/lib64+/usr/lib64 on bi-ABI architectures. - ---- - ldconfig.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff -urpN a/ldconfig.c b/ldconfig.c ---- a/ldconfig.c -+++ b/ldconfig.c -@@ -52,7 +52,11 @@ - - #define SYSCONFDIR "/etc" - #define LIBDIR "/usr/lib" -+#define LIBDIR32 "/usr/lib32" -+#define LIBDIR64 "/usr/lib64" - #define SLIBDIR "/lib" -+#define SLIBDIR32 "/lib32" -+#define SLIBDIR64 "/lib64" - # define N_(msgid) msgid - #define _(msg) msg - -@@ -1373,6 +1377,12 @@ main (int argc, char **argv) - add_system_dir (SLIBDIR); - if (strcmp (SLIBDIR, LIBDIR)) - add_system_dir (LIBDIR); -+ add_system_dir (SLIBDIR32); -+ if (strcmp (SLIBDIR32, LIBDIR32)) -+ add_system_dir (LIBDIR32); -+ add_system_dir (SLIBDIR64); -+ if (strcmp (SLIBDIR64, LIBDIR64)) -+ add_system_dir (LIBDIR64); - } - - const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE; diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-native-2.12.1.tar.bz2 b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig-native-2.12.1.tar.bz2 deleted file mode 100644 index dc1e79888e9bf28226cf18513ebd4478ec90175f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21491 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%0DHdO4>d<dmgwq7hnwA~>6vabfI8 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 diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch deleted file mode 100644 index 52986e6..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig.patch +++ /dev/null @@ -1,471 +0,0 @@ -Upstream-Status: Inappropriate [embedded specific] - -enable standalone building of ldconfig - ---- - cache.c | 11 +- - chroot_canon.c | 7 + - dl-cache.c | 235 --------------------------------------------------------- - dl-cache.h | 3 - ldconfig.c | 27 ++++-- - readlib.c | 7 + - xstrdup.c | 11 -- - 7 files changed, 45 insertions(+), 256 deletions(-) - -Index: ldconfig-native-2.12.1/cache.c -=================================================================== ---- ldconfig-native-2.12.1.orig/cache.c -+++ ldconfig-native-2.12.1/cache.c -@@ -16,6 +16,9 @@ - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -+#define _LARGEFILE64_SOURCE -+#define _GNU_SOURCE -+ - #include <errno.h> - #include <error.h> - #include <dirent.h> -@@ -31,8 +34,10 @@ - #include <sys/stat.h> - #include <sys/types.h> - --#include <ldconfig.h> --#include <dl-cache.h> -+#include "ldconfig.h" -+#include "dl-cache.h" -+# define N_(msgid) msgid -+#define _(msg) msg - - struct cache_entry - { -Index: ldconfig-native-2.12.1/chroot_canon.c -=================================================================== ---- ldconfig-native-2.12.1.orig/chroot_canon.c -+++ ldconfig-native-2.12.1/chroot_canon.c -@@ -17,6 +17,9 @@ - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -+#define _LARGEFILE64_SOURCE -+#define _GNU_SOURCE -+ - #include <stdlib.h> - #include <string.h> - #include <unistd.h> -@@ -27,7 +30,9 @@ - #include <stddef.h> - #include <stdint.h> - --#include <ldconfig.h> -+#include "ldconfig.h" -+ -+#define __set_errno(Val) errno = (Val) - - #ifndef PATH_MAX - #define PATH_MAX 1024 -Index: ldconfig-native-2.12.1/dl-cache.c -=================================================================== ---- ldconfig-native-2.12.1.orig/dl-cache.c -+++ ldconfig-native-2.12.1/dl-cache.c -@@ -20,12 +20,12 @@ - - #include <assert.h> - #include <unistd.h> --#include <ldsodefs.h> -+//#include "ldsodefs.h" - #include <sys/mman.h> - #include <dl-cache.h> - #include <dl-procinfo.h> - --#include <stdio-common/_itoa.h> -+//#include "_itoa.h" - - #ifndef _DL_PLATFORMS_COUNT - # define _DL_PLATFORMS_COUNT 0 -@@ -39,103 +39,7 @@ static size_t cachesize; - /* 1 if cache_data + PTR points into the cache. */ - #define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size) - --#define SEARCH_CACHE(cache) \ --/* We use binary search since the table is sorted in the cache file. \ -- The first matching entry in the table is returned. \ -- It is important to use the same algorithm as used while generating \ -- the cache file. */ \ --do \ -- { \ -- left = 0; \ -- right = cache->nlibs - 1; \ -- \ -- while (left <= right) \ -- { \ -- __typeof__ (cache->libs[0].key) key; \ -- \ -- middle = (left + right) / 2; \ -- \ -- key = cache->libs[middle].key; \ -- \ -- /* Make sure string table indices are not bogus before using \ -- them. */ \ -- if (! _dl_cache_verify_ptr (key)) \ -- { \ -- cmpres = 1; \ -- break; \ -- } \ -- \ -- /* Actually compare the entry with the key. */ \ -- cmpres = _dl_cache_libcmp (name, cache_data + key); \ -- if (__builtin_expect (cmpres == 0, 0)) \ -- { \ -- /* Found it. LEFT now marks the last entry for which we \ -- know the name is correct. */ \ -- left = middle; \ -- \ -- /* There might be entries with this name before the one we \ -- found. So we have to find the beginning. */ \ -- while (middle > 0) \ -- { \ -- __typeof__ (cache->libs[0].key) key; \ -- \ -- key = cache->libs[middle - 1].key; \ -- /* Make sure string table indices are not bogus before \ -- using them. */ \ -- if (! _dl_cache_verify_ptr (key) \ -- /* Actually compare the entry. */ \ -- || _dl_cache_libcmp (name, cache_data + key) != 0) \ -- break; \ -- --middle; \ -- } \ -- \ -- do \ -- { \ -- int flags; \ -- __typeof__ (cache->libs[0]) *lib = &cache->libs[middle]; \ -- \ -- /* Only perform the name test if necessary. */ \ -- if (middle > left \ -- /* We haven't seen this string so far. Test whether the \ -- index is ok and whether the name matches. Otherwise \ -- we are done. */ \ -- && (! _dl_cache_verify_ptr (lib->key) \ -- || (_dl_cache_libcmp (name, cache_data + lib->key) \ -- != 0))) \ -- break; \ -- \ -- flags = lib->flags; \ -- if (_dl_cache_check_flags (flags) \ -- && _dl_cache_verify_ptr (lib->value)) \ -- { \ -- if (best == NULL || flags == GLRO(dl_correct_cache_id)) \ -- { \ -- HWCAP_CHECK; \ -- best = cache_data + lib->value; \ -- \ -- if (flags == GLRO(dl_correct_cache_id)) \ -- /* We've found an exact match for the shared \ -- object and no general `ELF' release. Stop \ -- searching. */ \ -- break; \ -- } \ -- } \ -- } \ -- while (++middle <= right); \ -- break; \ -- } \ -- \ -- if (cmpres < 0) \ -- left = middle + 1; \ -- else \ -- right = middle - 1; \ -- } \ -- } \ --while (0) -- -- - int --internal_function - _dl_cache_libcmp (const char *p1, const char *p2) - { - while (*p1 != '\0') -@@ -172,139 +76,3 @@ _dl_cache_libcmp (const char *p1, const - } - return *p1 - *p2; - } -- -- --/* Look up NAME in ld.so.cache and return the file name stored there, -- or null if none is found. */ -- --const char * --internal_function --_dl_load_cache_lookup (const char *name) --{ -- int left, right, middle; -- int cmpres; -- const char *cache_data; -- uint32_t cache_data_size; -- const char *best; -- -- /* Print a message if the loading of libs is traced. */ -- if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0)) -- _dl_debug_printf (" search cache=%s\n", LD_SO_CACHE); -- -- if (cache == NULL) -- { -- /* Read the contents of the file. */ -- void *file = _dl_sysdep_read_whole_file (LD_SO_CACHE, &cachesize, -- PROT_READ); -- -- /* We can handle three different cache file formats here: -- - the old libc5/glibc2.0/2.1 format -- - the old format with the new format in it -- - only the new format -- The following checks if the cache contains any of these formats. */ -- if (file != MAP_FAILED && cachesize > sizeof *cache -- && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0) -- { -- size_t offset; -- /* Looks ok. */ -- cache = file; -- -- /* Check for new version. */ -- offset = ALIGN_CACHE (sizeof (struct cache_file) -- + cache->nlibs * sizeof (struct file_entry)); -- -- cache_new = (struct cache_file_new *) ((void *) cache + offset); -- if (cachesize < (offset + sizeof (struct cache_file_new)) -- || memcmp (cache_new->magic, CACHEMAGIC_VERSION_NEW, -- sizeof CACHEMAGIC_VERSION_NEW - 1) != 0) -- cache_new = (void *) -1; -- } -- else if (file != MAP_FAILED && cachesize > sizeof *cache_new -- && memcmp (file, CACHEMAGIC_VERSION_NEW, -- sizeof CACHEMAGIC_VERSION_NEW - 1) == 0) -- { -- cache_new = file; -- cache = file; -- } -- else -- { -- if (file != MAP_FAILED) -- __munmap (file, cachesize); -- cache = (void *) -1; -- } -- -- assert (cache != NULL); -- } -- -- if (cache == (void *) -1) -- /* Previously looked for the cache file and didn't find it. */ -- return NULL; -- -- best = NULL; -- -- if (cache_new != (void *) -1) -- { -- uint64_t platform; -- -- /* This is where the strings start. */ -- cache_data = (const char *) cache_new; -- -- /* Now we can compute how large the string table is. */ -- cache_data_size = (const char *) cache + cachesize - cache_data; -- -- platform = _dl_string_platform (GLRO(dl_platform)); -- if (platform != (uint64_t) -1) -- platform = 1ULL << platform; -- --#define _DL_HWCAP_TLS_MASK (1LL << 63) -- uint64_t hwcap_exclude = ~((GLRO(dl_hwcap) & GLRO(dl_hwcap_mask)) -- | _DL_HWCAP_PLATFORM | _DL_HWCAP_TLS_MASK); -- -- /* Only accept hwcap if it's for the right platform. */ --#define HWCAP_CHECK \ -- if (lib->hwcap & hwcap_exclude) \ -- continue; \ -- if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion)) \ -- continue; \ -- if (_DL_PLATFORMS_COUNT \ -- && (lib->hwcap & _DL_HWCAP_PLATFORM) != 0 \ -- && (lib->hwcap & _DL_HWCAP_PLATFORM) != platform) \ -- continue -- SEARCH_CACHE (cache_new); -- } -- else -- { -- /* This is where the strings start. */ -- cache_data = (const char *) &cache->libs[cache->nlibs]; -- -- /* Now we can compute how large the string table is. */ -- cache_data_size = (const char *) cache + cachesize - cache_data; -- --#undef HWCAP_CHECK --#define HWCAP_CHECK do {} while (0) -- SEARCH_CACHE (cache); -- } -- -- /* Print our result if wanted. */ -- if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0) -- && best != NULL) -- _dl_debug_printf (" trying file=%s\n", best); -- -- return best; --} -- --#ifndef MAP_COPY --/* If the system does not support MAP_COPY we cannot leave the file open -- all the time since this would create problems when the file is replaced. -- Therefore we provide this function to close the file and open it again -- once needed. */ --void --_dl_unload_cache (void) --{ -- if (cache != NULL && cache != (struct cache_file *) -1) -- { -- __munmap (cache, cachesize); -- cache = NULL; -- } --} --#endif -Index: ldconfig-native-2.12.1/dl-cache.h -=================================================================== ---- ldconfig-native-2.12.1.orig/dl-cache.h -+++ ldconfig-native-2.12.1/dl-cache.h -@@ -101,5 +101,4 @@ struct cache_file_new - (((addr) + __alignof__ (struct cache_file_new) -1) \ - & (~(__alignof__ (struct cache_file_new) - 1))) - --extern int _dl_cache_libcmp (const char *p1, const char *p2) -- internal_function; -+extern int _dl_cache_libcmp (const char *p1, const char *p2); -Index: ldconfig-native-2.12.1/ldconfig.c -=================================================================== ---- ldconfig-native-2.12.1.orig/ldconfig.c -+++ ldconfig-native-2.12.1/ldconfig.c -@@ -16,6 +16,9 @@ - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -+#define _LARGEFILE64_SOURCE -+#define _GNU_SOURCE -+ - #define PROCINFO_CLASS static - #include <alloca.h> - #include <argp.h> -@@ -39,10 +42,20 @@ - #include <glob.h> - #include <libgen.h> - --#include <ldconfig.h> --#include <dl-cache.h> -+#include "ldconfig.h" -+#include "dl-cache.h" -+ -+#include "dl-procinfo.h" -+ -+#include "argp.h" -+ -+ -+#define SYSCONFDIR "/etc" -+#define LIBDIR "/usr/lib" -+#define SLIBDIR "/lib" -+# define N_(msgid) msgid -+#define _(msg) msg - --#include <dl-procinfo.h> - - #ifdef _DL_FIRST_PLATFORM - # define _DL_FIRST_EXTRA (_DL_FIRST_PLATFORM + _DL_PLATFORMS_COUNT) -@@ -55,7 +68,7 @@ - #endif - - /* Get libc version number. */ --#include <version.h> -+#include "version.h" - - #define PACKAGE _libc_intl_domainname - -@@ -152,8 +165,8 @@ static const struct argp_option options[ - { NULL, 0, NULL, 0, NULL, 0 } - }; - --#define PROCINFO_CLASS static --#include <dl-procinfo.c> -+//#define PROCINFO_CLASS static -+//#include <dl-procinfo.c> - - /* Short description of program. */ - static const char doc[] = N_("Configure Dynamic Linker Run Time Bindings."); -@@ -291,6 +304,7 @@ parse_opt (int key, char *arg, struct ar - return 0; - } - -+#define REPORT_BUGS_TO "mailing list : poky(a)yoctoproject.org" - /* Print bug-reporting information in the help message. */ - static char * - more_help (int key, const char *text, void *input) -@@ -315,7 +329,7 @@ For bug reporting instructions, please s - static void - print_version (FILE *stream, struct argp_state *state) - { -- fprintf (stream, "ldconfig %s%s\n", PKGVERSION, VERSION); -+ fprintf (stream, "ldconfig (Hacked Poky Version)\n"); - fprintf (stream, gettext ("\ - Copyright (C) %s Free Software Foundation, Inc.\n\ - This is free software; see the source for copying conditions. There is NO\n\ -@@ -1233,6 +1247,7 @@ set_hwcap (void) - hwcap_mask = strtoul (mask, NULL, 0); - } - -+const char _libc_intl_domainname[] = "libc"; - - int - main (int argc, char **argv) -Index: ldconfig-native-2.12.1/readlib.c -=================================================================== ---- ldconfig-native-2.12.1.orig/readlib.c -+++ ldconfig-native-2.12.1/readlib.c -@@ -22,6 +22,9 @@ - development version. Besides the simplification, it has also been - modified to read some other file formats. */ - -+#define _LARGEFILE64_SOURCE -+#define _GNU_SOURCE -+ - #include <a.out.h> - #include <elf.h> - #include <error.h> -@@ -35,7 +38,9 @@ - #include <sys/stat.h> - #include <gnu/lib-names.h> - --#include <ldconfig.h> -+#include "ldconfig.h" -+ -+#define _(msg) msg - - #define Elf32_CLASS ELFCLASS32 - #define Elf64_CLASS ELFCLASS64 -Index: ldconfig-native-2.12.1/xstrdup.c -=================================================================== ---- ldconfig-native-2.12.1.orig/xstrdup.c -+++ ldconfig-native-2.12.1/xstrdup.c -@@ -16,15 +16,10 @@ - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - --#ifdef HAVE_CONFIG_H --# include <config.h> --#endif -+#define _GNU_SOURCE -+ -+#include <string.h> - --#if defined STDC_HEADERS || defined HAVE_STRING_H || _LIBC --# include <string.h> --#else --# include <strings.h> --#endif - void *xmalloc (size_t n) __THROW; - char *xstrdup (char *string) __THROW; - diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig_aux-cache_path_fix.patch b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig_aux-cache_path_fix.patch deleted file mode 100644 index 27bc411..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native-2.12.1/ldconfig_aux-cache_path_fix.patch +++ /dev/null @@ -1,36 +0,0 @@ -Upstream-Status: Pending - -Coming from this bug:
http://sourceware.org/bugzilla/show_bug.cgi?id=11149
- -Nitin A Kamble <nitin.a.kamble(a)intel.com>2011/03/29 - ---- ldconfig-native-2.12.1.orig/ldconfig.c -+++ ldconfig-native-2.12.1/ldconfig.c -@@ -1359,14 +1359,9 @@ main (int argc, char **argv) - - const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE; - if (opt_chroot) -- { -- aux_cache_file = chroot_canon (opt_chroot, aux_cache_file); -- if (aux_cache_file == NULL) -- error (EXIT_FAILURE, errno, _("Can't open cache file %s\n"), -- _PATH_LDCONFIG_AUX_CACHE); -- } -+ aux_cache_file = chroot_canon (opt_chroot, aux_cache_file); - -- if (! opt_ignore_aux_cache) -+ if (! opt_ignore_aux_cache && aux_cache_file) - load_aux_cache (aux_cache_file); - else - init_aux_cache (); -@@ -1376,7 +1371,8 @@ main (int argc, char **argv) - if (opt_build_cache) - { - save_cache (cache_file); -- save_aux_cache (aux_cache_file); -+ if (aux_cache_file) -+ save_aux_cache (aux_cache_file); - } - - return 0; - diff --git a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native_2.12.1.bb b/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native_2.12.1.bb deleted file mode 100644 index 7c34635..0000000 --- a/meta-linaro-toolchain/recipes-core/glibc/ldconfig-native_2.12.1.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "A standalone native ldconfig build" - -LICENSE = "GPLv2+" - -LIC_FILES_CHKSUM = "file://${S}/ldconfig.c;endline=17;md5=1d15f20937c055cb5de2329a4c054399" - -SRC_URI = "file://ldconfig-native-2.12.1.tar.bz2 \ - file://ldconfig.patch \ - file://ldconfig_aux-cache_path_fix.patch \ - file://32and64bit.patch \ - file://endian-ness_handling.patch \ - file://flag_fix.patch \ - file://endianess-header.patch \ - file://ldconfig-default-to-all-multilib-dirs.patch \ -" - -PR = "r2" - -FILESEXTRAPATHS =. "${FILE_DIRNAME}/${P}:" - -inherit native - -S = "${WORKDIR}/${PN}-${PV}" - -do_compile () { - $CC ldconfig.c -std=gnu99 chroot_canon.c xmalloc.c xstrdup.c cache.c readlib.c -I. dl-cache.c -o ldconfig -} - -do_install () { - install -d ${D}/${bindir}/ - install ldconfig ${D}/${bindir}/ -} -- 2.7.4
7 years, 9 months
2
1
0
0
[PATCH] Revert "flex: overlay old recipe"
by Denys Dmytriyenko
From: Denys Dmytriyenko <denys(a)ti.com> oe-core has finally reverted back to 2.6.0, no need to overlay it locally This reverts commit eb86f6d7a079fb9240c466978c6d3b927ba4e0fb. --- ...-target-for-building-tests-without-runnin.patch | 28 ---------- ...oid-c-comments-in-c-code-fails-with-gcc-6.patch | 64 ---------------------- .../flex/flex/CVE-2016-6354.patch | 59 -------------------- .../flex/flex/disable-tests.patch | 19 ------- .../flex/flex/do_not_create_pdf_doc.patch | 17 ------ .../recipes-overlayed/flex/flex/run-ptest | 5 -- .../recipes-overlayed/flex/flex_2.6.0.bb | 62 --------------------- 7 files changed, 254 deletions(-) delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex/0001-tests-add-a-target-for-building-tests-without-runnin.patch delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex/0002-avoid-c-comments-in-c-code-fails-with-gcc-6.patch delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex/CVE-2016-6354.patch delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex/disable-tests.patch delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex/do_not_create_pdf_doc.patch delete mode 100755 meta-linaro-integration/recipes-overlayed/flex/flex/run-ptest delete mode 100644 meta-linaro-integration/recipes-overlayed/flex/flex_2.6.0.bb diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/0001-tests-add-a-target-for-building-tests-without-runnin.patch b/meta-linaro-integration/recipes-overlayed/flex/flex/0001-tests-add-a-target-for-building-tests-without-runnin.patch deleted file mode 100644 index 556c240..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/0001-tests-add-a-target-for-building-tests-without-runnin.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b4aa18d939fc0c8825fa584dfcee1a7da61099cf Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin <alex.kanavin(a)gmail.com> -Date: Thu, 10 Dec 2015 16:09:26 +0200 -Subject: [PATCH] tests: add a target for building tests without running them - -Upstream-Status: Inappropriate [oe specific] -Signed-off-by: Alexander Kanavin <alex.kanavin(a)gmail.com> ---- - tests/Makefile.am | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/tests/Makefile.am b/tests/Makefile.am -index 4ac3c17..0025cfe 100644 ---- a/tests/Makefile.am -+++ b/tests/Makefile.am -@@ -21,6 +21,9 @@ - - TESTS = $(check_PROGRAMS) options.cn - -+# This allows building tests without running them -+buildtests: $(TESTS) -+ - # The script testwrapper.sh will run most tests as is. A couple tests - # in the suite end in .reject, .table and the like so that we can pass - # different arguments to the test runner. We list those extensions so --- -2.6.2 - diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/0002-avoid-c-comments-in-c-code-fails-with-gcc-6.patch b/meta-linaro-integration/recipes-overlayed/flex/flex/0002-avoid-c-comments-in-c-code-fails-with-gcc-6.patch deleted file mode 100644 index 438ca5f..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/0002-avoid-c-comments-in-c-code-fails-with-gcc-6.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 7072befe1397af4eb01c3ff7edf99f0cd5076089 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony(a)googlemail.com> -Date: Tue, 30 Aug 2016 14:25:32 +0200 -Subject: [PATCH] avoid c++ comments in c-code - fails with gcc-6 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -fixes: - -| error: C++ style comments are not allowed in ISO C90 -| num_to_alloc = 1; // After all that talk, this was set to 1 anyways... - -Upstream-Status: Pending - -Signed-off-by: Andreas Müller <schnitzeltony(a)googlemail.com> ---- - src/flex.skl | 2 +- - src/scan.c | 2 +- - src/skel.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/flex.skl b/src/flex.skl -index 73a0b9e..ed71627 100644 ---- a/src/flex.skl -+++ b/src/flex.skl -@@ -2350,7 +2350,7 @@ void yyFlexLexer::yyensure_buffer_stack(void) - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ -- num_to_alloc = 1; // After all that talk, this was set to 1 anyways... -+ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ - YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - M4_YY_CALL_LAST_ARG); -diff --git a/src/scan.c b/src/scan.c -index b55df2d..f1dce75 100644 ---- a/src/scan.c -+++ b/src/scan.c -@@ -4672,7 +4672,7 @@ static void yyensure_buffer_stack (void) - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ -- num_to_alloc = 1; // After all that talk, this was set to 1 anyways... -+ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways...*/ - (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); -diff --git a/src/skel.c b/src/skel.c -index ef657d3..26cc889 100644 ---- a/src/skel.c -+++ b/src/skel.c -@@ -2561,7 +2561,7 @@ const char *skel[] = { - " * scanner will even need a stack. We use 2 instead of 1 to avoid an", - " * immediate realloc on the next call.", - " */", -- " num_to_alloc = 1; // After all that talk, this was set to 1 anyways...", -+ " num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */", - " YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc", - " (num_to_alloc * sizeof(struct yy_buffer_state*)", - " M4_YY_CALL_LAST_ARG);", --- -2.5.5 - diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/CVE-2016-6354.patch b/meta-linaro-integration/recipes-overlayed/flex/flex/CVE-2016-6354.patch deleted file mode 100644 index 216ac7a..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/CVE-2016-6354.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 3939eccdff598f47e5b37b05d58bf1b44d3796e7 Mon Sep 17 00:00:00 2001 -From: Jussi Kukkonen <jussi.kukkonen(a)intel.com> -Date: Fri, 7 Oct 2016 14:15:38 +0300 -Subject: [PATCH] Prevent buffer overflow in yy_get_next_buffer - -This is upstream commit a5cbe929ac3255d371e698f62dc256afe7006466 -with some additional backporting to make binutils build again. - -Upstream-Status: Backport -CVE: CVE-2016-6354 -Signed-off-by: Jussi Kukkonen <jussi.kukkonen(a)intel.com> ---- - src/flex.skl | 2 +- - src/scan.c | 2 +- - src/skel.c | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/flex.skl b/src/flex.skl -index ed71627..814d562 100644 ---- a/src/flex.skl -+++ b/src/flex.skl -@@ -1718,7 +1718,7 @@ int yyFlexLexer::yy_get_next_buffer() - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) -diff --git a/src/scan.c b/src/scan.c -index f1dce75..1949872 100644 ---- a/src/scan.c -+++ b/src/scan.c -@@ -4181,7 +4181,7 @@ static int yy_get_next_buffer (void) - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) -diff --git a/src/skel.c b/src/skel.c -index 26cc889..0344d18 100644 ---- a/src/skel.c -+++ b/src/skel.c -@@ -1929,7 +1929,7 @@ const char *skel[] = { - "", - " else", - " {", -- " yy_size_t num_to_read =", -+ " int num_to_read =", - " YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;", - "", - " while ( num_to_read <= 0 )", --- -2.1.4 - diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/disable-tests.patch b/meta-linaro-integration/recipes-overlayed/flex/flex/disable-tests.patch deleted file mode 100644 index 4dc801d..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/disable-tests.patch +++ /dev/null @@ -1,19 +0,0 @@ -Due to automake stupidity the Makefile in tests/ has an 'all' target that -depends on $(BUILD_SOURCES), which means when building flex parts of the test -suite are built even if they're not needed, resulting in flex needing -flex-native and bison-native to build. - -This patch removes the tests directory from SUBDIRS and will be conditionally -applied by the recipe. - -Upstream-Status: Inappropriate -Signed-off-by: Ross Burton <ross.burton(a)intel.com> - -diff --git a/Makefile.am b/Makefile.am -index 076ccad..0574d7b 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -55,3 +55,2 @@ SUBDIRS = \ - po \ -- tests \ - tools diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/do_not_create_pdf_doc.patch b/meta-linaro-integration/recipes-overlayed/flex/flex/do_not_create_pdf_doc.patch deleted file mode 100644 index 032833a..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/do_not_create_pdf_doc.patch +++ /dev/null @@ -1,17 +0,0 @@ -Upstream-Status: Inappropriate (embedded specific) - -Signed-off-by: Laurentiu Palcu <laurentiu.palcu(a)intel.com> - -Index: flex-2.5.37/doc/Makefile.am -=================================================================== ---- flex-2.5.37.orig/doc/Makefile.am 2012-07-21 04:18:27.000000000 +0300 -+++ flex-2.5.37/doc/Makefile.am 2013-07-30 17:57:09.834834531 +0300 -@@ -2,7 +2,7 @@ - - info_TEXINFOS = flex.texi - dist_man_MANS = flex.1 --dist_doc_DATA= flex.pdf -+EXTRA_DIST= flex.pdf - - CLEANFILES = \ - flex.hks \ diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex/run-ptest b/meta-linaro-integration/recipes-overlayed/flex/flex/run-ptest deleted file mode 100755 index 19db337..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex/run-ptest +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -# make would want to rebuild some files with a compiler otherwise :-/ -make FLEX=/usr/bin/flex -t check-TESTS || true -make FLEX=/usr/bin/flex check-TESTS diff --git a/meta-linaro-integration/recipes-overlayed/flex/flex_2.6.0.bb b/meta-linaro-integration/recipes-overlayed/flex/flex_2.6.0.bb deleted file mode 100644 index ab35b09..0000000 --- a/meta-linaro-integration/recipes-overlayed/flex/flex_2.6.0.bb +++ /dev/null @@ -1,62 +0,0 @@ -SUMMARY = "Flex (The Fast Lexical Analyzer)" -DESCRIPTION = "Flex is a fast lexical analyser generator. Flex is a tool for generating programs that recognize \ -lexical patterns in text." -HOMEPAGE = "
http://sourceforge.net/projects/flex/
" -SECTION = "devel" -LICENSE = "BSD" - -DEPENDS = "${(a)bb.utils.contains('PTEST_ENABLED', '1', 'bison-native flex-native', '', d)}" -BBCLASSEXTEND = "native nativesdk" - -LIC_FILES_CHKSUM = "file://COPYING;md5=e4742cf92e89040b39486a6219b68067" - -SRC_URI = "${SOURCEFORGE_MIRROR}/flex/flex-${PV}.tar.bz2 \ - file://run-ptest \ - file://do_not_create_pdf_doc.patch \ - file://0001-tests-add-a-target-for-building-tests-without-runnin.patch \ - file://0002-avoid-c-comments-in-c-code-fails-with-gcc-6.patch \ - file://CVE-2016-6354.patch \ - ${(a)bb.utils.contains('PTEST_ENABLED', '1', '', 'file://disable-tests.patch', d)} \ - " - -SRC_URI[md5sum] = "266270f13c48ed043d95648075084d59" -SRC_URI[sha256sum] = "24e611ef5a4703a191012f80c1027dc9d12555183ce0ecd46f3636e587e9b8e9" - -# Flex has moved to github from 2.6.1 onwards -UPSTREAM_CHECK_URI = "
https://github.com/westes/flex/releases
" -UPSTREAM_CHECK_REGEX = "flex-(?P<pver>\d+(\.\d+)+)\.tar" - -inherit autotools gettext texinfo ptest - -M4 = "${bindir}/m4" -M4_class-native = "${STAGING_BINDIR_NATIVE}/m4" -EXTRA_OECONF += "ac_cv_path_M4=${M4}" -EXTRA_OEMAKE += "m4=${STAGING_BINDIR_NATIVE}/m4" - -EXTRA_OEMAKE += "${(a)bb.utils.contains('PTEST_ENABLED', '1', 'FLEX=${STAGING_BINDIR_NATIVE}/flex', '', d)}" - -do_install_append_class-native() { - create_wrapper ${D}/${bindir}/flex M4=${M4} -} - -do_install_append_class-nativesdk() { - create_wrapper ${D}/${bindir}/flex M4=${M4} -} - -RDEPENDS_${PN} += "m4" -RDEPENDS_${PN}-ptest += "bash gawk" - -do_compile_ptest() { - oe_runmake -C ${B}/tests -f ${B}/tests/Makefile top_builddir=${B} INCLUDES=-I${S}/src buildtests -} - -do_install_ptest() { - mkdir -p ${D}${PTEST_PATH}/build-aux/ - cp ${S}/build-aux/test-driver ${D}${PTEST_PATH}/build-aux/ - cp -r ${S}/tests/* ${D}${PTEST_PATH} - cp -r ${B}/tests/* ${D}${PTEST_PATH} - sed -e 's/^Makefile:/_Makefile:/' \ - -e 's/^srcdir = \(.*\)/srcdir = ./' -e 's/^top_srcdir = \(.*\)/top_srcdir = ./' \ - -e 's/^builddir = \(.*\)/builddir = ./' -e 's/^top_builddir = \(.*\)/top_builddir = ./' \ - -i ${D}${PTEST_PATH}/Makefile -} -- 2.7.4
7 years, 9 months
2
1
0
0
ldconfig-native
by Denys Dmytriyenko
Hi, Is there a need for a duplicate ldconfig-native recipe in meta-linaro-toolchain:
https://git.linaro.org/openembedded/meta-linaro.git/tree/meta-linaro-toolch…
It is a duplicate of oe-core recipe:
http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-core/glibc…
Both of them share the same exact base, but oe-core one has extra 2 patches added later:
http://cgit.openembedded.org/openembedded-core/commit/?id=adbf0b1fdf897076e…
http://cgit.openembedded.org/openembedded-core/commit/?id=0b0e4d7aa64feded0…
Should meta-linaro-toolchain copy be removed to not mask the one from oe-core? -- Denys
7 years, 9 months
3
2
0
0
external-linaro-toolchain in master with RSS
by Denys Dmytriyenko
BTW, are there plans to fix external-linaro-toolchain flow with recipe specific sysroot in master? Let me know if you need logs or any other help. -- Denys
7 years, 9 months
2
1
0
0
← Newer
1
Older →
Jump to page:
1
Results per page:
10
25
50
100
200