opensaf: Upgrade to 5.17.07
PATCH 1/2 opensaf: Upgrade to 5.17.07
---
.../opensaf/0001-Remove-unused-variables.patch | 43 --------
..._dump.cc-Use-sys-wait.h-instead-of-wait.h.patch | 34 ++++++
...sing-header-limits.h-for-_POSIX_HOST_NAME.patch | 122 +++++++++++++++++++++
.../{opensaf_5.2.0.bb => opensaf_5.17.07.bb} | 7 +-
4 files changed, 160 insertions(+), 46 deletions(-)
delete mode 100644 meta-networking/recipes-daemons/opensaf/opensaf/0001-Remove-unused-variables.patch
create mode 100644 meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch
create mode 100644 meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch
rename meta-networking/recipes-daemons/opensaf/{opensaf_5.2.0.bb => opensaf_5.17.07.bb} (89%)meta-networking/recipes-daemons/opensaf/opensaf/0001-Remove-unused-variables.patch deleted +0 -43
@@ -1,43 +0,0 @@ -From a441a75fbb8451268a8a57616c7158cddc1823aa Mon Sep 17 00:00:00 2001 -From: Khem Raj <[email protected]> -Date: Sat, 22 Apr 2017 12:40:19 -0700 -Subject: [PATCH] Remove unused variables - -Fixes build errors with gcc7 e.g. - -../opensaf-5.2.0/src/amf/amfd/imm.cc: In member function 'bool ImmObjCreate::immobj_update_required()': -../opensaf-5.2.0/src/amf/amfd/imm.cc:2174:28: error: unused variable 'pos' [-Werror=unused-variable] - std::string::size_type pos; - ^~~ -../opensaf-5.2.0/src/amf/amfd/imm.cc:2215:28: error: unused variable 'pos' [-Werror=unused-variable] - std::string::size_type pos; - ^~~ - -Signed-off-by: Khem Raj <[email protected]> ---- - src/amf/amfd/imm.cc | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/src/amf/amfd/imm.cc b/src/amf/amfd/imm.cc -index 7932364..4f47b65 100644 ---- a/src/amf/amfd/imm.cc -+++ b/src/amf/amfd/imm.cc -@@ -2171,7 +2171,6 @@ bool ImmObjCreate::immobj_update_required() { - if (class_type == AVSV_SA_AMF_SI_ASSIGNMENT) { - std::string su_name; - std::string sisu_name; -- std::string::size_type pos; - while ((attribute = attrValues_[i++]) != nullptr) { - if (!strcmp(attribute->attrName, "safSISU")) { - sisu_name = Amf::to_string( -@@ -2212,7 +2211,6 @@ bool ImmObjCreate::immobj_update_required() { - } else if (class_type == AVSV_SA_AMF_CSI_ASSIGNMENT) { - std::string comp_name; - std::string csicomp_name; -- std::string::size_type pos; - AVD_CSI *csi = nullptr; - AVD_COMP *comp = nullptr; - AVD_COMP_CSI_REL *compcsi = nullptr; --- -2.12.2 -
meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch new file +34 -0
@@ -0,0 +1,34 @@ +From 508ea7c0d67243feb1684eaa83569cb687561d64 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 10:09:03 -0700 +Subject: [PATCH] immpbe_dump.cc: Use sys/wait.h instead of wait.h + +Fixes +redirecting incorrect #include <wait.h> to <sys/wait.h> + +Signed-off-by: Khem Raj <[email protected]> +--- + src/imm/common/immpbe_dump.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/imm/common/immpbe_dump.cc b/src/imm/common/immpbe_dump.cc +index 100222f37..33e47ce3c 100644 +--- a/src/imm/common/immpbe_dump.cc ++++ b/src/imm/common/immpbe_dump.cc +@@ -26,12 +26,12 @@ + #include <stdlib.h> + #include <stdio.h> + #include <time.h> +-#include <wait.h> + #include <unistd.h> + #include <iostream> + #include <sstream> + #include <stdint.h> + #include <sys/stat.h> ++#include <sys/wait.h> + #include <libgen.h> + + #include <saAis.h> +-- +2.14.1 +
meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch new file +122 -0
122 lines not on this page · raw message
meta-networking/recipes-daemons/opensaf/opensaf_5.17.07.bb renamed from meta-networking/recipes-daemons/opensaf/opensaf_5.2.0.bb +4 -3
@@ -22,10 +22,11 @@ SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}" SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/releases/${BPN}-${PV}.tar.gz \ file://0001-configure-Pass-linker-specific-options-with-Wl.patch \ file://0001-configure-Disable-format-overflow-if-supported-by-gc.patch \ - file://0001-Remove-unused-variables.patch \ + file://0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch \ + file://0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch \ " -SRC_URI[md5sum] = "08991fd467ae9dcea3c8747be8e3981e" -SRC_URI[sha256sum] = "903478244afe37e329be93050f1d48fa18c84ea17862134c4217b920e267a04a" +SRC_URI[md5sum] = "125bcd9aabd7412aedcbfbf73f4e6196" +SRC_URI[sha256sum] = "3fb2239bb2c9328c8b45368ff8d8de979ea286a27edc9871d218200e88bb91cc" inherit autotools useradd systemd pkgconfig
Signature · 1 line
2.14.1
PATCH 2/2 android-tools: Fix build with musl
--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644 meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch create mode 100644 meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +351 -0
@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-) + create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c b/system/core/adb/adb_auth_client.c +index 55e9dca..104b413 100644 +--- a/system/core/adb/adb_auth_client.c ++++ b/system/core/adb/adb_auth_client.c +@@ -75,7 +75,7 @@ static void read_keys(const char *file, struct listnode *list) + if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644 +index 0000000..95da284 +--- /dev/null ++++ b/system/core/adb/base64.c +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS ++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES ++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE ++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL ++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++ * SOFTWARE. ++ */ ++ ++/* ++ * Portions Copyright (c) 1995 by International Business Machines, Inc. ++ * ++ * International Business Machines, Inc. (hereinafter called IBM) grants ++ * permission under its copyrights to use, copy, modify, and distribute this ++ * Software with or without fee, provided that the above copyright notice and ++ * all paragraphs of this notice appear in all copies, and that the name of IBM ++ * not be used in connection with the marketing of any product incorporating ++ * the Software or modifications thereof, without specific, written prior ++ * permission. ++ * ++ * To the extent it has a right to do so, IBM grants an immunity from suit ++ * under its patents, if any, for the use, sale or manufacture of products to ++ * the extent that such products are used for performing Domain Name System ++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is ++ * granted for any product per se or for any other function of any product. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, ++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, ++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING ++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN ++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ */ ++ ++#if !defined(LINT) && !defined(CODECENTER) ++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $"; ++#endif /* not lint */ ++ ++#include <sys/types.h> ++#include <sys/param.h> ++#include <sys/socket.h> ++ ++#include <netinet/in.h> ++#include <arpa/inet.h> ++#include <arpa/nameser.h> ++ ++#include <ctype.h> ++#include <resolv.h> ++#include <stdio.h> ++#include <stdlib.h> ++#include <stdint.h> ++#include <string.h> ++ ++#define Assert(Cond) if (!(Cond)) abort() ++ ++static const char Base64[] = ++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static const char Pad64 = '='; ++ ++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt) ++ The following encoding technique is taken from RFC 1521 by Borenstein ++ and Freed. It is reproduced here in a slightly edited form for ++ convenience. ++ ++ A 65-character subset of US-ASCII is used, enabling 6 bits to be ++ represented per printable character. (The extra 65th character, "=", ++ is used to signify a special processing function.) ++ ++ The encoding process represents 24-bit groups of input bits as output ++ strings of 4 encoded characters. Proceeding from left to right, a ++ 24-bit input group is formed by concatenating 3 8-bit input groups. ++ These 24 bits are then treated as 4 concatenated 6-bit groups, each ++ of which is translated into a single digit in the base64 alphabet. ++ ++ Each 6-bit group is used as an index into an array of 64 printable ++ characters. The character referenced by the index is placed in the ++ output string. ++ ++ Table 1: The Base64 Alphabet ++ ++ Value Encoding Value Encoding Value Encoding Value Encoding ++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 / ++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y ++ ++ Special processing is performed if fewer than 24 bits are available ++ at the end of the data being encoded. A full encoding quantum is ++ always completed at the end of a quantity. When fewer than 24 input ++ bits are available in an input group, zero bits are added (on the ++ right) to form an integral number of 6-bit groups. Padding at the ++ end of the data is performed using the '=' character. ++ ++ Since all base64 input is an integral number of octets, only the ++ ------------------------------------------------- ++ following cases can arise: ++ ++ (1) the final quantum of encoding input is an integral ++ multiple of 24 bits; here, the final unit of encoded ++ output will be an integral multiple of 4 characters ++ with no "=" padding, ++ (2) the final quantum of encoding input is exactly 8 bits; ++ here, the final unit of encoded output will be two ++ characters followed by two "=" padding characters, or ++ (3) the final quantum of encoding input is exactly 16 bits; ++ here, the final unit of encoded output will be three ++ characters followed by one "=" padding character. ++ */ ++ ++int ++b64_ntop(const uint8_t* src, size_t srclength, char* target, size_t targsize) ++{ ++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i; ++ ++ while (2 < srclength) { ++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]]; ++ } ++ ++ /* Now we worry about padding. */ ++ if (0 != srclength) { ++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++) ++ input[i] = *src++; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1) ++ target[datalength++] = Pad64; ++ else ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Pad64; ++ } ++ if (datalength >= targsize) ++ return (-1); ++ target[datalength] = '\0'; /* Returned value doesn't count \0. */ ++ return (datalength); ++} ++ ++/* skips all whitespace anywhere. ++ converts characters, four at a time, starting at (or after) ++ src from base - 64 numbers into three 8 bit bytes in the target area. ++ it returns the number of data bytes stored at the target, or -1 on error. ++ */ ++ ++int b64_pton(const char* src, uint8_t* target, size_t targsize) ++{ ++ int tarindex, state, ch; ++ char *pos; ++ ++ state = 0; ++ tarindex = 0; ++ ++ while ((ch = *src++) != '\0') { ++ if (isspace(ch)) /* Skip whitespace anywhere. */ ++ continue; ++ ++ if (ch == Pad64) ++ break; ++ ++ pos = strchr(Base64, ch); ++ if (pos == 0) /* A non-base64 character. */ ++ return (-1); ++ ++ switch (state) { ++ case 0: ++ if (target) { ++ if ((size_t)tarindex >= targsize) ++ return (-1); ++ target[tarindex] = (pos - Base64) << 2; ++ } ++ state = 1; ++ break; ++ case 1: ++ if (target) { ++ if ((size_t)tarindex + 1 >= targsize) ++ return (-1); ++ target[tarindex] |= (pos - Base64) >> 4; ++ target[tarindex+1] = ((pos - Base64) & 0x0f) ++ << 4 ; ++ } ++ tarindex++; ++ state = 2; ++ break; ++ case 2: ++ if (target) { ++ if ((size_t)tarindex + 1 >= targsize) ++ return (-1); ++ target[tarindex] |= (pos - Base64) >> 2; ++ target[tarindex+1] = ((pos - Base64) & 0x03) ++ << 6; ++ } ++ tarindex++; ++ state = 3; ++ break; ++ case 3: ++ if (target) { ++ if ((size_t)tarindex >= targsize) ++ return (-1); ++ target[tarindex] |= (pos - Base64); ++ } ++ tarindex++; ++ state = 0; ++ break; ++ default: ++ abort(); ++ } ++ } ++ ++ /* ++ * We are done decoding Base-64 chars. Let's see if we ended ++ * on a byte boundary, and/or with erroneous trailing characters. ++ */ ++ ++ if (ch == Pad64) { /* We got a pad char. */ ++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */ ++ return (-1); ++ ++ case 2: /* Valid, means one byte of info */ ++ /* Skip any number of spaces. */ ++ for ((void)NULL; ch != '\0'; ch = *src++) ++ if (!isspace(ch)) ++ break; ++ /* Make sure there is another trailing = sign. */ ++ if (ch != Pad64) ++ return (-1); ++ ch = *src++; /* Skip the = */ ++ /* Fall through to "single trailing =" case. */ ++ /* FALLTHROUGH */ ++ ++ case 3: /* Valid, means two bytes of info */ ++ /* ++ * We know this char is an =. Is there anything but ++ * whitespace after it? ++ */ ++ for ((void)NULL; ch != '\0'; ch = *src++) ++ if (!isspace(ch)) ++ return (-1); ++ ++ /* ++ * Now make sure for cases 2 and 3 that the "extra" ++ * bits that slopped past the last full byte were ++ * zeros. If we don't check them, they become a ++ * subliminal channel. ++ */ ++ if (target && target[tarindex] != 0) ++ return (-1); ++ } ++ } else { ++ /* ++ * We ended by seeing the end of the string. Make sure we ++ * have no partial bytes lying around. ++ */ ++ if (state != 0) ++ return (-1); ++ } ++ ++ return (tarindex); ++} ++ +-- +2.14.1 +
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +134 -0
134 lines not on this page · raw message
meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1 -0
@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)
meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb +2 -0
@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \
Signature · 1 line
2.14.1
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
Even without this patch android-tools fail to build for qemuarm:
http://errors.yoctoproject.org/Errors/Details/156104/
It's probably broken for long time, the recipe was shadowed by meta-android copy until recently when I've removed it from meta-android (and then the layer as well from world builds).
Can you please check what's going on so that I can at least build test this properly?
Quoted 583 lines · Khem Raj
Signed-off-by Khem Raj <[email protected]>--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644 meta-oe/recipes-devtools/android-tools/android-tools/ 0001-add-base64-implementation.patch create mode 100644 meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
(quoted diff) +0
-00001-add-base64-implementation.patch b/meta-oe/recipes-devtools/
android-tools/android-tools/0001-add-base64-implementation.patchnew file mode 100644
index 000000000..680d21f3ameta-oe/recipes-devtools/android-tools/android-tools/ new file +0
-00001-add-base64-implementation.patch
meta-oe/recipes-devtools/android-tools/android-tools/ new file +16
-0@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++ ++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-) + create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c
b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+---a/system/core/adb/adb_auth_client.c
++++b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static voidread_keys(const char *file, struct listnode *list)meta-oe/recipes-devtools/android-tools/android-tools/ new file +22
-0+ if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); ++ ret = b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4); + if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644 +index 0000000..95da284 +--- /dev/null ++++ b/system/core/adb/base64.c +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUMDISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE ++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines, Inc. ++ *
++ * International Business Machines, Inc. (hereinafter called IBM) grants ++ * permission under its copyrights to use, copy, modify, and distribute this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that the name of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior ++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunity from suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing Domain Name System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, ++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, ++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond))abort()
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567
89+/";
++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)++ The following encoding technique is taken from RFC 1521 by Borenstein ++ and Freed. It is reproduced here in a slightly edited form for ++ convenience. ++ ++ A 65-character subset of US-ASCII is used, enabling 6 bits to be ++ represented per printable character. (The extra 65th character, "=", ++ is used to signify a special processing function.) ++ ++ The encoding process represents 24-bit groups of input bits as output ++ strings of 4 encoded characters. Proceeding from left to right, a ++ 24-bit input group is formed by concatenating 3 8-bit input groups. ++ These 24 bits are then treated as 4 concatenated 6-bit groups, each ++ of which is translated into a single digit in the base64 alphabet. ++ ++ Each 6-bit group is used as an index into an array of 64 printable ++ characters. The character referenced by the index is placed in the ++ output string.++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding Value Encoding++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 / ++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y ++ ++ Special processing is performed if fewer than 24 bits are available ++ at the end of the data being encoded. A full encoding quantum is ++ always completed at the end of a quantity. When fewer than 24 input ++ bits are available in an input group, zero bits are added (on the ++ right) to form an integral number of 6-bit groups. Padding at the ++ end of the data is performed using the '=' character.++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src,size_tsrclength, char* target,size_ttargsize)
++{++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i; ++ ++ while (2 < srclength) { ++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]];++ }
++
++ /* Now we worry about padding. */
++ if (0 != srclength) {++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++) ++ input[i] = *src++; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1)++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);
++ target[datalength] = '\0'; /* Returned value doesn't count
\0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.++ converts characters, four at a time, starting at (or after) ++ src from base - 64 numbers into three 8 bit bytes in the target area. ++ it returns the number of data bytes stored at the target, or -1 onerror.
++ */
++
++intb64_pton(const char* src, uint8_t* target, size_t targsize)++{
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere. */
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos =strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) << 2;++ } ++ state = 1; ++ break;++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >> 4;
++ target[tarindex+1] = ((pos - Base64) &0x0f)
++ << 4 ;++ } ++ tarindex++; ++ state = 2; ++ break;++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >> 2;
++ target[tarindex+1] = ((pos - Base64) &0x03)
++ << 6;++ } ++ tarindex++; ++ state = 3; ++ break;++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);++ } ++ tarindex++; ++ state = 0; ++ break;++ default:
++abort();
++ }
++ }
++
++ /*++ * We are done decoding Base-64 chars. Let's see if we ended ++ * on a byte boundary, and/or with erroneous trailing characters. ++ */ ++ ++ if (ch == Pad64) { /* We got a pad char. */ ++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing = sign. */
++ if (ch != Pad64)
++ return (-1);++ ch = *src++; /* Skip the = */ ++ /* Fall through to "single trailing =" case. */ ++ /* FALLTHROUGH */++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there anything
but
++ * whitespace after it?
++ */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ return (-1);
++
++ /*++ * Now make sure for cases 2 and 3 that the "extra" ++ * bits that slopped past the last full byte were ++ * zeros. If we don't check them, they become a ++ * subliminal channel. ++ */++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*++ * We ended by seeing the end of the string. Make sure we ++ * have no partial bytes lying around. ++ */++ if (state != 0)
++ return (-1);
++ }
++
++ return (tarindex);
++}
++
+--
+2.14.1meta-oe/recipes-devtools/android-tools/android-tools/ new file +1
-0+meta-oe/recipes-devtools/android-tools/android-tools/ renamed from meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch +0
-00002-adb-Musl-fixes.patch
new file mode 100644
index 000000000..c7aebb641meta-oe/recipes-devtools/android-tools/android-tools/ new file +0
-00002-adb-Musl-fixes.patch
meta-oe/recipes-devtools/android-tools/android-tools/ new file +32
-0@@ -0,0 +1,134 @@ +From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:50:57 -0700 +Subject: [PATCH 2/2] adb: Musl fixes + +__nonnull is gcc specific +include sys/types.h for size_t +Do not redefine close() and lseek() + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb.h | 2 ++ + system/core/adb/disable_verity_service.c | 13 ++++++++----- + system/core/adb/framebuffer_service.c | 7 ++++--- + system/core/adb/sysdeps.h | 12 ++++++------ + 4 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h +index 44e5981..bcdc49f 100644 +--- a/system/core/adb/adb.h ++++ b/system/core/adb/adb.h +@@ -18,7 +18,9 @@ + #define __ADB_H + + #include <limits.h> ++#include <sys/types.h> + ++#include "fdevent.h" + #include "adb_trace.h" + #include "transport.h" /* readx(), writex() */ + +diff --git a/system/core/adb/disable_verity_service.c
b/system/core/adb/disable_verity_service.cmeta-oe/recipes-devtools/android-tools/android-tools/ new file +38
-0+index ed3da52..29fa3d6 100644 +--- a/system/core/adb/disable_verity_service.c ++++ b/system/core/adb/disable_verity_service.c +@@ -14,25 +14,28 @@ + * limitations under the License. + */ + +-#include "sysdeps.h" + + #define TRACE_TAG TRACE_ADB + #include "adb.h" ++#include "sysdeps.h" ++#include "cutils/properties.h" ++#include "ext4_sb.h" ++#include <fs_mgr.h> + + #include <stdio.h> + #include <stdarg.h> + #include <sys/stat.h> + #include <fcntl.h> + #include <inttypes.h> ++#include <unistd.h> ++#include <errno.h> ++#include <stdbool.h> + +-#include "cutils/properties.h" +-#include "ext4_sb.h" +-#include <fs_mgr.h> + + #define FSTAB_PREFIX "/fstab." + struct fstab *fstab; + +-__attribute__((__format__(printf, 2, 3))) __nonnull((2)) ++__attribute__((__format__(printf, 2, 3))) __attribute__((nonnull((2)))) + static void write_console(int fd, const char* format, ...) + { + char buffer[256]; +diff --git a/system/core/adb/framebuffer_service.c
b/system/core/adb/framebuffer_service.cmeta-oe/recipes-devtools/android-tools/android-tools/ new file +51
-0+index 8cbe840..8f0ccfb 100644 +--- a/system/core/adb/framebuffer_service.c ++++ b/system/core/adb/framebuffer_service.c +@@ -14,6 +14,10 @@ + * limitations under the License. + */ + ++#include "fdevent.h" ++#include "adb.h" ++#include "sysdeps.h" ++ + #include <stdlib.h> + #include <stdio.h> + #include <unistd.h> +@@ -23,9 +27,6 @@ + #include <sys/types.h> + #include <sys/wait.h> + +-#include "fdevent.h" +-#include "adb.h" +- + #include <linux/fb.h> + #include <sys/ioctl.h> + #include <sys/mman.h> +diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h +index cc1f839..ea39ac3 100644 +--- a/system/core/adb/sysdeps.h ++++ b/system/core/adb/sysdeps.h +@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + static __inline__ int unix_read(int fd, void* buf, size_t len) + { +@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + + static __inline__ int adb_read(int fd, void* buf, size_t len) +@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, int pos,int where)
+ {meta-oe/recipes-devtools/android-tools/android-tools/ new file +12
-0+ return lseek(fd, pos, where); + } +-#undef lseek +-#define lseek ___xxx_lseek ++//#undef lseek ++//#define lseek ___xxx_lseek + + static __inline__ int adb_unlink(const char* path) + { +-- +2.14.1 +meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1
-0@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)(quoted diff) +0
-01.1.r37.bb b/meta-oe/recipes-devtools/android-tools/android-tools_5. 1.1.r37.bb
index34fddcbda..75f5b9e26100644meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb +2
-1@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \ --2.14.1
--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
Quoted 10 lines · Martin Jansa
Even without this patch android-tools fail to build for qemuarm:
http://errors.yoctoproject.org/Errors/Details/156104/It's probably broken for long time, the recipe was shadowed by meta-android copy until recently when I've removed it from meta-android (and then the layer as well from world builds).
Can you please check what's going on so that I can at least build test this properly?
it build ok for armv7(rpi3) its using armv6+ instructions for atomics which wont work for qemuarm, did it build on qemuarm ever before ?
/tmp/cc7WvkQH.s: Assembler messages:/tmp/cc7WvkQH.s:159: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:162: Error: selected processor does not support `strexeq r4,r1,[r3]' in ARM mode/tmp/cc7WvkQH.s:262: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:264: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:351: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:353: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:396: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:398: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode
<builtin>: recipe for target 'atomic.o' failed
Quoted 592 lines · Khem Raj
Quoted 589 lines
Signed-off-by Khem Raj <[email protected]>--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644 meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch create mode 100644
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchdiff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchb/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchnew file mode 100644
index 000000000..680d21f3a
---/dev/null
+++b/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchmeta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +16
-0@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-) + create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c
b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+---a/system/core/adb/adb_auth_client.c
++++b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static voidread_keys(const char *file, struct listnode *list)meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +4
-0+ if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) +4);
++ ret =b64_pton(buf, (u_char *)&key->key, sizeof(key->key) + 4);meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +14
-0+ if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644 +index 0000000..95da284 +--- /dev/null ++++ b/system/core/adb/base64.c +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ * ++ * Permission to use, copy, modify, and distribute this software for any ++ * purpose with or without fee is hereby granted, provided that theabove
++ * copyright notice and this permission notice appear in all copies. ++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE ++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines, Inc. ++ *
++ * International Business Machines, Inc. (hereinafter called IBM) grants ++ * permission under its copyrights to use, copy, modify, and distribute this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that the name of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior
++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunity from suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing Domain Name System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, ++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, ++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33 vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond))abort()
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)++ The following encoding technique is taken from RFC 1521 by Borenstein ++ and Freed. It is reproduced here in a slightly edited form for ++ convenience. ++ ++ A 65-character subset of US-ASCII is used, enabling 6 bits to be ++ represented per printable character. (The extra 65th character, "=", ++ is used to signify a special processing function.) ++ ++ The encoding process represents 24-bit groups of input bits as output ++ strings of 4 encoded characters. Proceeding from left to right, a ++ 24-bit input group is formed by concatenating 3 8-bit input groups. ++ These 24 bits are then treated as 4 concatenated 6-bit groups, each ++ of which is translated into a single digit in the base64 alphabet. ++ ++ Each 6-bit group is used as an index into an array of 64 printable ++ characters. The character referenced by the index is placed in the ++ output string.++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding Value Encoding++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 / ++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y ++ ++ Special processing is performed if fewer than 24 bits are available ++ at the end of the data being encoded. A full encoding quantum is ++ always completed at the end of a quantity. When fewer than 24 input ++ bits are available in an input group, zero bits are added (on the ++ right) to form an integral number of 6-bit groups. Padding at the ++ end of the data is performed using the '=' character.++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src,size_tsrclength, char* target,size_ttargsize)
++{++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i; ++ ++ while (2 < srclength) { ++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]];++ }
++
++ /* Now we worry about padding. */
++ if (0 != srclength) {++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++) ++ input[i] = *src++; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1)++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);
++ target[datalength] = '\0'; /* Returned value doesn't count
\0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.++ converts characters, four at a time, starting at (or after) ++ src from base - 64 numbers into three 8 bit bytes in the target area. ++ it returns the number of data bytes stored at the target, or -1 onerror.
++ */
++
++intb64_pton(const char* src, uint8_t* target, size_t targsize)++{
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere. */
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos =strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) << 2;++ } ++ state = 1; ++ break;++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >>
4;
++ target[tarindex+1] = ((pos - Base64) &0x0f)
++ << 4 ;++ } ++ tarindex++; ++ state = 2; ++ break;++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >>
2;
++ target[tarindex+1] = ((pos - Base64) &0x03)
++ << 6;++ } ++ tarindex++; ++ state = 3; ++ break;++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);++ } ++ tarindex++; ++ state = 0; ++ break;++ default:
++abort();
++ }
++ }
++
++ /*++ * We are done decoding Base-64 chars. Let's see if we ended ++ * on a byte boundary, and/or with erroneous trailing characters. ++ */ ++ ++ if (ch == Pad64) { /* We got a pad char. */ ++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing = sign. */
++ if (ch != Pad64)
++ return (-1);++ ch = *src++; /* Skip the = */ ++ /* Fall through to "single trailing =" case. */ ++ /* FALLTHROUGH */++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there anything
but
++ * whitespace after it?
++ */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ return (-1);
++
++ /*
++ * Now make sure for cases 2 and 3 that the
"extra"++ * bits that slopped past the last full byte were ++ * zeros. If we don't check them, they become a ++ * subliminal channel. ++ */++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*++ * We ended by seeing the end of the string. Make sure we ++ * have no partial bytes lying around. ++ */++ if (state != 0)
++ return (-1);
++ }
++
++ return (tarindex);
++}
++
+--
+2.14.1
+
diff --gita/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchb/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchnew file mode 100644
index 000000000..c7aebb641
---/dev/null
+++b/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +32
-0@@ -0,0 +1,134 @@ +From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:50:57 -0700 +Subject: [PATCH 2/2] adb: Musl fixes + +__nonnull is gcc specific +include sys/types.h for size_t +Do not redefine close() and lseek() + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb.h | 2 ++ + system/core/adb/disable_verity_service.c | 13 ++++++++----- + system/core/adb/framebuffer_service.c | 7 ++++--- + system/core/adb/sysdeps.h | 12 ++++++------ + 4 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h +index 44e5981..bcdc49f 100644 +--- a/system/core/adb/adb.h ++++ b/system/core/adb/adb.h +@@ -18,7 +18,9 @@ + #define __ADB_H + + #include <limits.h> ++#include <sys/types.h> + ++#include "fdevent.h" + #include "adb_trace.h" + #include "transport.h" /* readx(), writex() */ + +diff --git a/system/core/adb/disable_verity_service.c
b/system/core/adb/disable_verity_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +38
-0+index ed3da52..29fa3d6 100644 +--- a/system/core/adb/disable_verity_service.c ++++ b/system/core/adb/disable_verity_service.c +@@ -14,25 +14,28 @@ + * limitations under the License. + */ + +-#include "sysdeps.h" + + #define TRACE_TAG TRACE_ADB + #include "adb.h" ++#include "sysdeps.h" ++#include "cutils/properties.h" ++#include "ext4_sb.h" ++#include <fs_mgr.h> + + #include <stdio.h> + #include <stdarg.h> + #include <sys/stat.h> + #include <fcntl.h> + #include <inttypes.h> ++#include <unistd.h> ++#include <errno.h> ++#include <stdbool.h> + +-#include "cutils/properties.h" +-#include "ext4_sb.h" +-#include <fs_mgr.h> + + #define FSTAB_PREFIX "/fstab." + struct fstab *fstab; + +-__attribute__((__format__(printf, 2, 3))) __nonnull((2)) ++__attribute__((__format__(printf, 2, 3))) __attribute__((nonnull((2)))) + static void write_console(int fd, const char* format, ...) + { + char buffer[256]; +diff --git a/system/core/adb/framebuffer_service.c
b/system/core/adb/framebuffer_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +51
-0+index 8cbe840..8f0ccfb 100644 +--- a/system/core/adb/framebuffer_service.c ++++ b/system/core/adb/framebuffer_service.c +@@ -14,6 +14,10 @@ + * limitations under the License. + */ + ++#include "fdevent.h" ++#include "adb.h" ++#include "sysdeps.h" ++ + #include <stdlib.h> + #include <stdio.h> + #include <unistd.h> +@@ -23,9 +27,6 @@ + #include <sys/types.h> + #include <sys/wait.h> + +-#include "fdevent.h" +-#include "adb.h" +- + #include <linux/fb.h> + #include <sys/ioctl.h> + #include <sys/mman.h> +diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h +index cc1f839..ea39ac3 100644 +--- a/system/core/adb/sysdeps.h ++++ b/system/core/adb/sysdeps.h +@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + static __inline__ int unix_read(int fd, void* buf, size_t len) + { +@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + + static __inline__ int adb_read(int fd, void* buf, size_t len) +@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, int pos,int where)
+ {meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +12
-0+ return lseek(fd, pos, where); + } +-#undef lseek +-#define lseek ___xxx_lseek ++//#undef lseek ++//#define lseek ___xxx_lseek + + static __inline__ int adb_unlink(const char* path) + { +-- +2.14.1 +meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1
-0@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)diff --git a/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb index
34fddcbda..75f5b9e26100644meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb +2
-1@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \ --2.14.1
--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
I don't know if this version (moved from meta-android to meta-oe) ever built OK for qemuarm, I was always building the version from meta-android which built OK.
Quoted 666 lines · Khem Raj
Quoted 4 lines · Martin Jansa
Even without this patch android-tools fail to build for qemuarm:
http://errors.yoctoproject.org/Errors/Details/156104/It's probably broken for long time, the recipe was shadowed by
meta-android
Quoted 4 lines
copy until recently when I've removed it from meta-android (and then the layer as well from world builds).
Can you please check what's going on so that I can at least build test
this
Quoted 2 lines
properly?
it build ok for armv7(rpi3) its using armv6+ instructions for atomics which wont work for qemuarm, did it build on qemuarm ever before ?
/tmp/cc7WvkQH.s: Assembler messages:/tmp/cc7WvkQH.s:159: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:162: Error: selected processor does not support `strexeq r4,r1,[r3]' in ARM mode/tmp/cc7WvkQH.s:262: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:264: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:351: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:353: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:396: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:398: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode
<builtin>: recipe for target 'atomic.o' failedQuoted 12 lines · Khem Raj
Quoted 11 lines
Signed-off-by Khem Raj <[email protected]>--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-
implementation.patch
Quoted 2 lines
Quoted 2 lines
create mode 100644meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 3 lines
Quoted 3 lines
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-
implementation.patch
Quoted 1 line
Quoted 1 line
b/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-
implementation.patch
Quoted 5 lines
Quoted 5 lines
new file mode 100644
index 000000000..680d21f3a
---/dev/null
+++
b/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch
Quoted 14 lines
Quoted 14 lines
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +13
-0@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-)Quoted 8 lines
Quoted 8 lines
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +3
-0+ create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c
b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+---a/system/core/adb/adb_auth_client.c
++++b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static void read_keys(const char *file, structlistnode
Quoted 7 lines
Quoted 7 lines
*list)
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +4
-0+ if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) +4);
++ ret = b64_pton(buf, (u_char*)&key->key,sizeof(key->key)+4);
Quoted 5 lines
Quoted 5 lines
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +5
-0+ if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644Quoted 8 lines
Quoted 8 lines
+index 0000000..95da284
+---/dev/null
++++b/system/core/adb/base64.c
+@@ -0,0 +1,315 @@
++/*
++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ *
++ * Permission to use, copy, modify, and distribute this software forany
Quoted 4 lines
Quoted 4 lines
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies. ++ *Quoted 8 lines
Quoted 8 lines
++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE ++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATAOR
Quoted 9 lines
Quoted 9 lines
++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines,Inc.
Quoted 2 lines
Quoted 2 lines
++ *
++ * International Business Machines, Inc. (hereinafter called IBM)grants
Quoted 1 line
Quoted 1 line
++ * permission under its copyrights to use, copy, modify, and
distribute
Quoted 4 lines
Quoted 4 lines
this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that thename
Quoted 12 lines
Quoted 12 lines
of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior
++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunity from suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing Domain NameQuoted 8 lines
Quoted 8 lines
System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, ++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A
Quoted 1 line
Quoted 1 line
++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY
SPECIAL,
Quoted 1 line
Quoted 1 line
++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER
Quoted 2 lines
Quoted 2 lines
ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THISSOFTWARE,
Quoted 6 lines
Quoted 6 lines
EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/1316:39:33
Quoted 19 lines
Quoted 19 lines
vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond))abort()Quoted 8 lines
Quoted 8 lines
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
++ The following encoding technique is taken from RFC 1521 byBorenstein
Quoted 5 lines
Quoted 5 lines
++ and Freed. It is reproduced here in a slightly edited form for
++ convenience.
++
++ A 65-character subset of US-ASCII is used, enabling 6 bits to be
++ represented per printable character. (The extra 65th character,"=",
Quoted 3 lines
Quoted 3 lines
++ is used to signify a special processing function.)
++
++ The encoding process represents 24-bit groups of input bits asoutput
Quoted 25 lines
Quoted 25 lines
++ strings of 4 encoded characters. Proceeding from left to right, a ++ 24-bit input group is formed by concatenating 3 8-bit input groups. ++ These 24 bits are then treated as 4 concatenated 6-bit groups, each ++ of which is translated into a single digit in the base64 alphabet. ++ ++ Each 6-bit group is used as an index into an array of 64 printable ++ characters. The character referenced by the index is placed in the ++ output string.++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding Value Encoding++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 /Quoted 8 lines
Quoted 8 lines
++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y ++ ++ Special processing is performed if fewer than 24 bits are available ++ at the end of the data being encoded. A full encoding quantum is ++ always completed at the end of a quantity. When fewer than 24input
Quoted 78 lines
Quoted 78 lines
++ bits are available in an input group, zero bits are added (on the ++ right) to form an integral number of 6-bit groups. Padding at the ++ end of the data is performed using the '=' character.++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src,size_tsrclength, char* target,size_ttargsize)
++{++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i; ++ ++ while (2 < srclength) { ++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]];++ }
++
++ /* Now we worry about padding. */
++ if (0 != srclength) {++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++) ++ input[i] = *src++; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1)++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);Quoted 8 lines
Quoted 8 lines
++ target[datalength] = '\0'; /* Returned value doesn't count
\0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.
++ converts characters, four at a time, starting at (or after)
++ src from base - 64 numbers into three 8 bit bytes in the targetarea.
Quoted 67 lines
Quoted 67 lines
++ it returns the number of data bytes stored at the target, or -1 on
error.
++ */
++
++intb64_pton(const char* src, uint8_t* target, size_t targsize)++{
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere. */
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos =strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) << 2;++ } ++ state = 1; ++ break;++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >>
4;
++ target[tarindex+1] = ((pos - Base64) &0x0f)
++ << 4 ;++ } ++ tarindex++; ++ state = 2; ++ break;++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64) >>
2;
++ target[tarindex+1] = ((pos - Base64) &0x03)
++ << 6;++ } ++ tarindex++; ++ state = 3; ++ break;++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);++ } ++ tarindex++; ++ state = 0; ++ break;Quoted 8 lines
Quoted 8 lines
++ default:
++abort();
++ }
++ }
++
++ /*
++ * We are done decoding Base-64 chars. Let's see if we ended
++ * on a byte boundary, and/or with erroneous trailingcharacters.
Quoted 7 lines
Quoted 7 lines
++ */
++
++ if (ch == Pad64) { /* We got a pad char. */++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */Quoted 8 lines
Quoted 8 lines
++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing = sign.*/
Quoted 12 lines
Quoted 12 lines
++ if (ch != Pad64)
++ return (-1);++ ch = *src++; /* Skip the = */ ++ /* Fall through to "single trailing =" case. */ ++ /* FALLTHROUGH */++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there anything
but
++ * whitespace after it?
++ */Quoted 8 lines
Quoted 8 lines
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ return (-1);
++
++ /*
++ * Now make sure for cases 2 and 3 that the
"extra"
++ * bits that slopped past the last full bytewere
Quoted 9 lines
Quoted 9 lines
++ * zeros. If we don't check them, they become a ++ * subliminal channel. ++ */++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*
++ * We ended by seeing the end of the string. Make surewe
Quoted 6 lines
Quoted 6 lines
++ * have no partial bytes lying around.
++ */
++ if (state != 0)
++ return (-1);
++ }
++Quoted 8 lines
Quoted 8 lines
++ return (tarindex);
++}
++
+--
+2.14.1
+
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
Quoted 1 line
Quoted 1 line
b/meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 5 lines
Quoted 5 lines
new file mode 100644
index 000000000..c7aebb641
---/dev/null
+++
b/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
Quoted 60 lines
Quoted 60 lines
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +32
-0@@ -0,0 +1,134 @@ +From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:50:57 -0700 +Subject: [PATCH 2/2] adb: Musl fixes + +__nonnull is gcc specific +include sys/types.h for size_t +Do not redefine close() and lseek() + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb.h | 2 ++ + system/core/adb/disable_verity_service.c | 13 ++++++++----- + system/core/adb/framebuffer_service.c | 7 ++++--- + system/core/adb/sysdeps.h | 12 ++++++------ + 4 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h +index 44e5981..bcdc49f 100644 +--- a/system/core/adb/adb.h ++++ b/system/core/adb/adb.h +@@ -18,7 +18,9 @@ + #define __ADB_H + + #include <limits.h> ++#include <sys/types.h> + ++#include "fdevent.h" + #include "adb_trace.h" + #include "transport.h" /* readx(), writex() */ + +diff --git a/system/core/adb/disable_verity_service.c
b/system/core/adb/disable_verity_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +26
-0+index ed3da52..29fa3d6 100644 +--- a/system/core/adb/disable_verity_service.c ++++ b/system/core/adb/disable_verity_service.c +@@ -14,25 +14,28 @@ + * limitations under the License. + */ + +-#include "sysdeps.h" + + #define TRACE_TAG TRACE_ADB + #include "adb.h" ++#include "sysdeps.h" ++#include "cutils/properties.h" ++#include "ext4_sb.h" ++#include <fs_mgr.h> + + #include <stdio.h> + #include <stdarg.h> + #include <sys/stat.h> + #include <fcntl.h> + #include <inttypes.h> ++#include <unistd.h> ++#include <errno.h> ++#include <stdbool.h> + +-#include "cutils/properties.h"Quoted 8 lines
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
Quoted 8 lines
+-#include "ext4_sb.h" +-#include <fs_mgr.h>meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +6
-0+ + #define FSTAB_PREFIX "/fstab." + struct fstab *fstab; + +-__attribute__((__format__(printf, 2, 3))) __nonnull((2)) ++__attribute__((__format__(printf, 2, 3)))__attribute__((nonnull((2))))
Quoted 48 lines
Quoted 48 lines
+ static void
write_console(int fd, const char* format, ...)
+ {(quoted diff) +2
-0+ char buffer[256]; +diff --git a/system/core/adb/framebuffer_service.c
b/system/core/adb/framebuffer_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +43
-0+index 8cbe840..8f0ccfb 100644 +--- a/system/core/adb/framebuffer_service.c ++++ b/system/core/adb/framebuffer_service.c +@@ -14,6 +14,10 @@ + * limitations under the License. + */ + ++#include "fdevent.h" ++#include "adb.h" ++#include "sysdeps.h" ++ + #include <stdlib.h> + #include <stdio.h> + #include <unistd.h> +@@ -23,9 +27,6 @@ + #include <sys/types.h> + #include <sys/wait.h> + +-#include "fdevent.h" +-#include "adb.h" +- + #include <linux/fb.h> + #include <sys/ioctl.h> + #include <sys/mman.h> +diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h +index cc1f839..ea39ac3 100644 +--- a/system/core/adb/sysdeps.h ++++ b/system/core/adb/sysdeps.h +@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + static __inline__ int unix_read(int fd, void* buf, size_t len) + { +@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd) + { + return close(fd); + }Quoted 8 lines
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
Quoted 8 lines
+-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_closemeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +4
-0+ + + static __inline__ int adb_read(int fd, void* buf, size_t len) +@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, intpos,
Quoted 7 lines
Quoted 7 lines
int where)
+ {
+ returnlseek(fd, pos, where);
+ }+-#undef lseek +-#define lseek ___xxx_lseek ++//#undef lseekQuoted 8 lines
Review
Quoted 8 lines
++//#define lseek
___xxx_lseekmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +6
-0+ + static __inline__ int adb_unlink(const char* path) + { +-- +2.14.1 +(quoted diff) +0
-0bd.mk
Quoted 37 lines
Quoted 35 lines
b/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mkindex84cd06b10..31452ae10100644meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1
-0@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)diff --git a/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb index
34fddcbda..75f5b9e26100644meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb +2
-1@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \ --2.14.1
--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
Quoted 3 lines · Martin Jansa
I don't know if this version (moved from meta-android to meta-oe) ever built OK for qemuarm, I was always building the version from meta-android which built OK.
it was building 4.2.2 version and I am guessing it probably did not using atomics back then. Can we try to use ARM_INSTRUCTION_SET = "arm" on armv5 and see if it work ? It works ok for thumb2
Quoted 680 lines · Khem Raj
Quoted 676 lines
Quoted 12 lines · Martin Jansa
Even without this patch android-tools fail to build for qemuarm:
http://errors.yoctoproject.org/Errors/Details/156104/It's probably broken for long time, the recipe was shadowed by meta-android
copy until recently when I've removed it from meta-android (and then the layer as well from world builds).Can you please check what's going on so that I can at least build test this
properly?it build ok for armv7(rpi3) its using armv6+ instructions for atomics which wont work for qemuarm, did it build on qemuarm ever before ?
/tmp/cc7WvkQH.s: Assembler messages:/tmp/cc7WvkQH.s:159: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:162: Error: selected processor does not support `strexeq r4,r1,[r3]' in ARM mode/tmp/cc7WvkQH.s:262: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:264: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:351: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:353: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:396: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:398: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode
<builtin>: recipe for target 'atomic.o' failedQuoted 635 lines · Khem Raj
Quoted 632 lines
Signed-off-by Khem Raj <[email protected]>--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchcreate mode 100644
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchdiff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch
b/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchnew file mode 100644
index 000000000..680d21f3a
---/dev/null
+++
b/meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patchmeta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +16
-0@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-) + create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c
b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+---a/system/core/adb/adb_auth_client.c
++++b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static void read_keys(const char *file, struct listnode
*list)meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +4
-0+ if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key, sizeof(key->key) +4);
++ ret = b64_pton(buf, (u_char*)&key->key,sizeof(key->key)+
4);meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +13
-0+ if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644 +index 0000000..95da284 +--- /dev/null ++++ b/system/core/adb/base64.c +@@ -0,0 +1,315 @@ ++/* ++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ * ++ * Permission to use, copy, modify, and distribute this software forany
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in all copies. ++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines, Inc.
++ *
++ * International Business Machines, Inc. (hereinafter called IBM) grants
++ * permission under its copyrights to use, copy, modify, and distribute
this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that the name
of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior
++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunity from suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing Domain Name System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE,
EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33
vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond))abort()
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
++ The following encoding technique is taken from RFC 1521 by
Borenstein
++ and Freed. It is reproduced here in a slightly edited form for
++ convenience.
++
++ A 65-character subset of US-ASCII is used, enabling 6 bits to be
++ represented per printable character. (The extra 65th character,
"=",
++ is used to signify a special processing function.)
++
++ The encoding process represents 24-bit groups of input bits as
output
++ strings of 4 encoded characters. Proceeding from left to right, a
++ 24-bit input group is formed by concatenating 3 8-bit input
groups.
++ These 24 bits are then treated as 4 concatenated 6-bit groups,
each
++ of which is translated into a single digit in the base64 alphabet.
++++ Each 6-bit group is used as an index into an array of 64 printable ++ characters. The character referenced by the index is placed in the ++ output string.++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding Value Encoding++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 / ++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y++
++ Special processing is performed if fewer than 24 bits are
available
++ at the end of the data being encoded. A full encoding quantum is
++ always completed at the end of a quantity. When fewer than 24
input++ bits are available in an input group, zero bits are added (on the ++ right) to form an integral number of 6-bit groups. Padding at the ++ end of the data is performed using the '=' character.++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src,size_tsrclength, char* target,size_ttargsize)
++{++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i; ++ ++ while (2 < srclength) { ++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]];++ }
++
++ /* Now we worry about padding. */
++ if (0 != srclength) {++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++) ++ input[i] = *src++; ++ ++ output[0] = input[0] >> 2; ++ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); ++ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1)++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);
++ target[datalength] = '\0'; /* Returned value doesn't count
\0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.
++ converts characters, four at a time, starting at (or after)
++ src from base - 64 numbers into three 8 bit bytes in the target
area.
++ it returns the number of data bytes stored at the target, or -1 on
error.
++ */
++
++intb64_pton(const char* src, uint8_t* target, size_t targsize)++{
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere. */
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos =strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) << 2;++ } ++ state = 1; ++ break;++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64)Quoted 1 line
Quoted 1 line
4;
++ target[tarindex+1] = ((pos - Base64) &0x0f)
++ << 4 ;++ } ++ tarindex++; ++ state = 2; ++ break;++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64)Quoted 1 line
Quoted 1 line
2;
++ target[tarindex+1] = ((pos - Base64) &0x03)
++ << 6;++ } ++ tarindex++; ++ state = 3; ++ break;++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);++ } ++ tarindex++; ++ state = 0; ++ break;++ default:
++abort();
++ }
++ }
++
++ /*
++ * We are done decoding Base-64 chars. Let's see if we ended
++ * on a byte boundary, and/or with erroneous trailing
characters.
++ */
++
++ if (ch == Pad64) { /* We got a pad char. */++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing = sign.
*/
++ if (ch != Pad64)
++ return (-1);++ ch = *src++; /* Skip the = */ ++ /* Fall through to "single trailing =" case. */ ++ /* FALLTHROUGH */++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there
anything
but
++ * whitespace after it?
++ */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ return (-1);
++
++ /*
++ * Now make sure for cases 2 and 3 that the
"extra"
++ * bits that slopped past the last full byte
were
++ * zeros. If we don't check them, they become
a
++ * subliminal channel.
++ */
++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*
++ * We ended by seeing the end of the string. Make sure
we
++ * have no partial bytes lying around.
++ */
++ if (state != 0)
++ return (-1);
++ }
++
++ return (tarindex);
++}
++
+--
+2.14.1
+
diff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch
b/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchnew file mode 100644
index 000000000..c7aebb641
---/dev/null
+++
b/meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patchmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +32
-0@@ -0,0 +1,134 @@ +From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:50:57 -0700 +Subject: [PATCH 2/2] adb: Musl fixes + +__nonnull is gcc specific +include sys/types.h for size_t +Do not redefine close() and lseek() + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb.h | 2 ++ + system/core/adb/disable_verity_service.c | 13 ++++++++----- + system/core/adb/framebuffer_service.c | 7 ++++--- + system/core/adb/sysdeps.h | 12 ++++++------ + 4 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h +index 44e5981..bcdc49f 100644 +--- a/system/core/adb/adb.h ++++ b/system/core/adb/adb.h +@@ -18,7 +18,9 @@ + #define __ADB_H + + #include <limits.h> ++#include <sys/types.h> + ++#include "fdevent.h" + #include "adb_trace.h" + #include "transport.h" /* readx(), writex() */ + +diff --git a/system/core/adb/disable_verity_service.c
b/system/core/adb/disable_verity_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +34
-0+index ed3da52..29fa3d6 100644 +--- a/system/core/adb/disable_verity_service.c ++++ b/system/core/adb/disable_verity_service.c +@@ -14,25 +14,28 @@ + * limitations under the License. + */ + +-#include "sysdeps.h" + + #define TRACE_TAG TRACE_ADB + #include "adb.h" ++#include "sysdeps.h" ++#include "cutils/properties.h" ++#include "ext4_sb.h" ++#include <fs_mgr.h> + + #include <stdio.h> + #include <stdarg.h> + #include <sys/stat.h> + #include <fcntl.h> + #include <inttypes.h> ++#include <unistd.h> ++#include <errno.h> ++#include <stdbool.h> + +-#include "cutils/properties.h" +-#include "ext4_sb.h" +-#include <fs_mgr.h> + + #define FSTAB_PREFIX "/fstab." + struct fstab *fstab; + +-__attribute__((__format__(printf, 2, 3))) __nonnull((2)) ++__attribute__((__format__(printf, 2, 3)))__attribute__((nonnull((2))))
+ static voidwrite_console(int fd, const char* format, ...)
+ {(quoted diff) +2
-0+ char buffer[256]; +diff --git a/system/core/adb/framebuffer_service.c
b/system/core/adb/framebuffer_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +51
-0+index 8cbe840..8f0ccfb 100644 +--- a/system/core/adb/framebuffer_service.c ++++ b/system/core/adb/framebuffer_service.c +@@ -14,6 +14,10 @@ + * limitations under the License. + */ + ++#include "fdevent.h" ++#include "adb.h" ++#include "sysdeps.h" ++ + #include <stdlib.h> + #include <stdio.h> + #include <unistd.h> +@@ -23,9 +27,6 @@ + #include <sys/types.h> + #include <sys/wait.h> + +-#include "fdevent.h" +-#include "adb.h" +- + #include <linux/fb.h> + #include <sys/ioctl.h> + #include <sys/mman.h> +diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h +index cc1f839..ea39ac3 100644 +--- a/system/core/adb/sysdeps.h ++++ b/system/core/adb/sysdeps.h +@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + static __inline__ int unix_read(int fd, void* buf, size_t len) + { +@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + + static __inline__ int adb_read(int fd, void* buf, size_t len) +@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, intpos,
int where)
+ {meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +12
-0+ return lseek(fd, pos, where); + } +-#undef lseek +-#define lseek ___xxx_lseek ++//#undef lseek ++//#define lseek ___xxx_lseek + + static __inline__ int adb_unlink(const char* path) + { +-- +2.14.1 +diff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mkb/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mkindex84cd06b10..31452ae10100644meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1
-0@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)diff --git a/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb index
34fddcbda..75f5b9e26100644meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb +2
-1@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \ --2.14.1
--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
That was 1st thing I've checked and it's already using arm as the meta-android version did:
Quoted 736 lines · Khem Raj
Quoted 1 line · Martin Jansa
I don't know if this version (moved from meta-android to meta-oe) ever
built
Quoted 2 lines
OK for qemuarm, I was always building the version from meta-android which built OK.
it was building 4.2.2 version and I am guessing it probably did not using atomics back then. Can we try to use
ARM_INSTRUCTION_SET= "arm" on armv5 and see if it work ? It works ok for thumb2Quoted 11 lines · Khem Raj
Quoted 9 lines
Quoted 6 lines · Martin Jansa
Even without this patch android-tools fail to build for qemuarm:
http://errors.yoctoproject.org/Errors/Details/156104/It's probably broken for long time, the recipe was shadowed by meta-android
copy until recently when I've removed it from meta-android (and thenthe
Quoted 33 lines
Quoted 33 lines
Quoted 6 lines
layer as well from world builds).
Can you please check what's going on so that I can at least build test this
properly?it build ok for armv7(rpi3) its using armv6+ instructions for atomics which wont work for qemuarm, did it build on qemuarm ever before ?
/tmp/cc7WvkQH.s: Assembler messages:/tmp/cc7WvkQH.s:159: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:162: Error: selected processor does not support `strexeq r4,r1,[r3]' in ARM mode/tmp/cc7WvkQH.s:262: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:264: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:351: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:353: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode/tmp/cc7WvkQH.s:396: Error: selected processor does not support `ldrex ip,[r3]' in ARM mode/tmp/cc7WvkQH.s:398: Error: selected processor does not support `strex r4,r0,[r3]' in ARM mode
<builtin>: recipe for target 'atomic.o' failedQuoted 1 line
On Sat, Sep 16, 2017 at 12:58 AM, Khem Raj <[email protected]>
Quoted 11 lines · wrote:
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
Signed-off-by Khem Raj <[email protected]>--- .../0001-add-base64-implementation.patch | 351 +++++++++++++++++++++ .../android-tools/0002-adb-Musl-fixes.patch | 134 ++++++++ .../android-tools/android-tools/adbd.mk | 1 + .../android-tools/android-tools_5.1.1.r37.bb | 2 + 4 files changed, 488 insertions(+) create mode 100644Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
meta-oe/recipes-devtools/android-tools/android-tools/
0001-add-base64-implementation.patch
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
create mode 100644meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
diff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/
0001-add-base64-implementation.patch
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
b/meta-oe/recipes-devtools/android-tools/android-tools/
0001-add-base64-implementation.patch
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
new file mode 100644
index 000000000..680d21f3a
---/dev/null
+++b/meta-oe/recipes-devtools/android-tools/android-tools/
0001-add-base64-implementation.patch
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Review line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,351 @@ +From bbeb72f11c64f190b23abbed5f44311bd021bdc9 Mon Sep 17 00:00:002001
Quoted 18 lines
Quoted 18 lines
Quoted 18 lines
Quoted 18 lines
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +15
-0+From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:46:38 -0700 +Subject: [PATCH 1/2] add base64 implementation + +musl needs it + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb_auth_client.c | 2 +- + system/core/adb/base64.c | 315 ++++++++++++++++++++++++++++++++++++++ + 2 files changed, 316 insertions(+), 1 deletion(-) + create mode 100644 system/core/adb/base64.c + +diff --git a/system/core/adb/adb_auth_client.c
b/system/core/adb/adb_auth_client.c
+index 55e9dca..104b413 100644
+---a/system/core/adb/adb_auth_client.cQuoted 8 lines
Quoted 8 lines
Quoted 8 lines
meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch
Quoted 8 lines
++++
b/system/core/adb/adb_auth_client.c
+@@ -75,7 +75,7 @@ static void read_keys(const char *file, struct listnode
*list)meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +4
-0+ if (sep) + *sep = '\0'; + +- ret = __b64_pton(buf, (u_char *)&key->key,
sizeof(key->key)+Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
4);
++ ret = b64_pton(buf, (u_char*)&key->key,sizeof(key->key)+
4);meta-oe/recipes-devtools/android-tools/android-tools/0001-add-base64-implementation.patch new file +5
-0+ if (ret != sizeof(key->key)) { + D("%s: Invalid base64 data ret=%d\n", file, ret); + free(key); +diff --git a/system/core/adb/base64.c b/system/core/adb/base64.c +new file mode 100644Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
+index 0000000..95da284
+---/dev/null
++++b/system/core/adb/base64.c
+@@ -0,0 +1,315 @@
++/*
++ * Copyright (c) 1996-1999 by Internet Software Consortium. ++ *
++ * Permission to use, copy, modify, and distribute this softwarefor
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
any
++ * purpose with or without fee is hereby granted, provided that the above
++ * copyright notice and this permission notice appear in allcopies.
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARECONSORTIUM
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
DISCLAIMS
++ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALLIMPLIED
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
++ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
++ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,DATA
Quoted 22 lines
Quoted 22 lines
Quoted 22 lines
Quoted 22 lines
OR
++ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
++ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
OF THIS
++ * SOFTWARE.
++ */
++
++/*
++ * Portions Copyright (c) 1995 by International Business Machines, Inc.
++ *
++ * International Business Machines, Inc. (hereinafter called IBM) grants
++ * permission under its copyrights to use, copy, modify, and distribute
this
++ * Software with or without fee, provided that the above copyright notice and
++ * all paragraphs of this notice appear in all copies, and that the nameQuoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
of IBM
++ * not be used in connection with the marketing of any product incorporating
++ * the Software or modifications thereof, without specific, written prior
++ * permission.
++ *
++ * To the extent it has a right to do so, IBM grants an immunityfrom
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
Quoted 4 lines
suit
++ * under its patents, if any, for the use, sale or manufacture of products to
++ * the extent that such products are used for performing DomainName
Quoted 55 lines
Quoted 55 lines
Quoted 55 lines
Quoted 55 lines
System
++ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
++ * granted for any product per se or for any other function of any product.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
++ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
ARISING
++ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE,
EVEN
++ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ */
++
++#if !defined(LINT) && !defined(CODECENTER)
++static const char rcsid[] = "$BINDId: base64.c,v 8.7 1999/10/13 16:39:33
vixie Exp $";
++#endif /* not lint */
++
++#include <sys/types.h>
++#include <sys/param.h>
++#include <sys/socket.h>
++
++#include <netinet/in.h>
++#include <arpa/inet.h>
++#include <arpa/nameser.h>
++
++#include <ctype.h>
++#include <resolv.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <string.h>
++
++#define Assert(Cond) if (!(Cond))abort()
++
++static const char Base64[] =
++ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; ++static const char Pad64 = '=';
++
++/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt)
++ The following encoding technique is taken from RFC 1521 by
Borenstein
++ and Freed. It is reproduced here in a slightly edited form for
++ convenience.
++Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ A 65-character subset of US-ASCII is used, enabling 6 bits to be
++ represented per printable character. (The extra 65th character,
"=",
++ is used to signify a special processing function.)
++
++ The encoding process represents 24-bit groups of input bits as
output
++ strings of 4 encoded characters. Proceeding from left to right,a
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
++ 24-bit input group is formed by concatenating 3 8-bit input
groups.
++ These 24 bits are then treated as 4 concatenated 6-bit groups,
each
++ of which is translated into a single digit in the base64alphabet.
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
++
++ Each 6-bit group is used as an index into an array of 64printable
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
++ characters. The character referenced by the index is placed in
the
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
++ output string.
++
++ Table 1: The Base64 Alphabet
++
++ Value Encoding Value Encoding Value Encoding ValueEncoding
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
++ 0 A 17 R 34 i 51 z ++ 1 B 18 S 35 j 52 0 ++ 2 C 19 T 36 k 53 1 ++ 3 D 20 U 37 l 54 2 ++ 4 E 21 V 38 m 55 3 ++ 5 F 22 W 39 n 56 4 ++ 6 G 23 X 40 o 57 5 ++ 7 H 24 Y 41 p 58 6 ++ 8 I 25 Z 42 q 59 7 ++ 9 J 26 a 43 r 60 8 ++ 10 K 27 b 44 s 61 9 ++ 11 L 28 c 45 t 62 + ++ 12 M 29 d 46 u 63 /Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ 13 N 30 e 47 v ++ 14 O 31 f 48 w (pad) = ++ 15 P 32 g 49 x ++ 16 Q 33 h 50 y++
++ Special processing is performed if fewer than 24 bits are
available
++ at the end of the data being encoded. A full encoding quantumis
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
++ always completed at the end of a quantity. When fewer than 24
input
++ bits are available in an input group, zero bits are added (onthe
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
++ right) to form an integral number of 6-bit groups. Padding at
the
Quoted 27 lines
Quoted 27 lines
Quoted 27 lines
Quoted 27 lines
++ end of the data is performed using the '=' character.
++
++ Since all base64 input is an integral number of octets, only the
++ -------------------------------------------------
++ following cases can arise:
++
++ (1) the final quantum of encoding input is an integral
++ multiple of 24 bits; here, the final unit of encoded
++ output will be an integral multiple of 4 characters
++ with no "=" padding,
++ (2) the final quantum of encoding input is exactly 8 bits;
++ here, the final unit of encoded output will be two
++ characters followed by two "=" padding characters, or
++ (3) the final quantum of encoding input is exactly 16 bits;
++ here, the final unit of encoded output will be three
++ characters followed by one "=" padding character.
++ */
++
++int
++b64_ntop(const uint8_t* src,size_tsrclength, char* target,size_ttargsize)
++{++ size_t datalength = 0; ++ uint8_t input[3]; ++ uint8_t output[4]; ++ size_t i;++
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ while (2 < srclength) {
++ input[0] = *src++; ++ input[1] = *src++; ++ input[2] = *src++; ++ srclength -= 3;++
++ output[0] = input[0] >> 2;
++ output[1] = ((input[0] &0x03) << 4) + (input[1] >>4);
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
++ output[2] = ((input[1] &
0x0f) << 2) + (input[2] >>6);
Quoted 15 lines
Quoted 15 lines
Quoted 15 lines
Quoted 15 lines
++ output[3] = input[2] & 0x3f; ++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ Assert(output[3] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ target[datalength++] = Base64[output[2]]; ++ target[datalength++] = Base64[output[3]];++ }
++
++ /* Now we worry about padding. */Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ if (0 != srclength) {
++ /* Get what's left. */ ++ input[0] = input[1] = input[2] = '\0'; ++ for (i = 0; i < srclength; i++)++ input[i] = *src++;
++
++ output[0] = input[0] >> 2;
++ output[1] = ((input[0] &0x03) << 4) + (input[1] >>4);
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
++ output[2] = ((input[1] &
0x0f) << 2) + (input[2] >>6);
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
++ Assert(output[0] < 64); ++ Assert(output[1] < 64); ++ Assert(output[2] < 64); ++ ++ if (datalength + 4 > targsize) ++ return (-1); ++ target[datalength++] = Base64[output[0]]; ++ target[datalength++] = Base64[output[1]]; ++ if (srclength == 1)Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ target[datalength++] = Pad64;
++ else
++ target[datalength++] = Base64[output[2]];
++ target[datalength++] = Pad64;
++ }
++ if (datalength >= targsize)
++ return (-1);
++ target[datalength] = '\0'; /* Returned value doesn'tcount
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
\0. */
++ return (datalength);
++}
++
++/* skips all whitespace anywhere.
++ converts characters, four at a time, starting at (or after)
++ src from base - 64 numbers into three 8 bit bytes in the target
area.
++ it returns the number of data bytes stored at the target, or -1on
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
error.
++ */
++
++intb64_pton(const char* src, uint8_t* target, size_t targsize)++{Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ int tarindex, state, ch;
++ char *pos;
++
++ state = 0;
++ tarindex = 0;
++
++ while ((ch = *src++) != '\0') {
++ if (isspace(ch)) /* Skip whitespace anywhere.*/
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
Quoted 7 lines
++ continue;
++
++ if (ch == Pad64)
++ break;
++
++ pos =strchr(Base64, ch);
++ if (pos == 0) /* A non-base64 character. */Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ return (-1);
++
++ switch (state) {
++ case 0:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] = (pos - Base64) <<2;
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
++ } ++ state = 1; ++ break;++ case 1:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64)Quoted 1 line
Quoted 1 line
4;
++ target[tarindex+1] = ((pos -Base64) &
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
0x0f)
++ << 4 ;++ } ++ tarindex++; ++ state = 2; ++ break;++ case 2:
++ if (target) {
++ if ((size_t)tarindex + 1 >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64)Quoted 1 line
Quoted 1 line
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
2;
++ target[tarindex+1] = ((pos -Base64) &
Quoted 31 lines
Quoted 31 lines
Quoted 31 lines
Quoted 31 lines
0x03)
++ << 6;++ } ++ tarindex++; ++ state = 3; ++ break;++ case 3:
++ if (target) {
++ if ((size_t)tarindex >= targsize)
++ return (-1);
++ target[tarindex] |= (pos - Base64);++ } ++ tarindex++; ++ state = 0; ++ break;++ default:
++abort();
++ }
++ }
++
++ /*
++ * We are done decoding Base-64 chars. Let's see if we ended
++ * on a byte boundary, and/or with erroneous trailing
characters.
++ */
++
++ if (ch == Pad64) { /* We got a pad char. */++ ch = *src++; /* Skip it, get next. */ ++ switch (state) { ++ case 0: /* Invalid = in first position */ ++ case 1: /* Invalid = in second position */Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ return (-1);
++
++ case 2: /* Valid, means one byte of info */
++ /* Skip any number of spaces. */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))
++ break;
++ /* Make sure there is another trailing =sign.
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
*/
++ if (ch != Pad64)
++ return (-1);
++ ch = *src++; /* Skip the = */
++ /* Fall through to "single trailing =" case.*/
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
++ /* FALLTHROUGH */
++
++ case 3: /* Valid, means two bytes of info */
++ /*
++ * We know this char is an =. Is there
anything
but
++ * whitespace after it?
++ */
++ for ((void)NULL; ch != '\0'; ch = *src++)
++ if (!isspace(ch))Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
++ return (-1);
++
++ /*
++ * Now make sure for cases 2 and 3 that the
"extra"
++ * bits that slopped past the last full byte
were
++ * zeros. If we don't check them, theybecome
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
a
++ * subliminal channel.
++ */
++ if (target && target[tarindex] != 0)
++ return (-1);
++ }
++ } else {
++ /*
++ * We ended by seeing the end of the string. Makesure
Quoted 15 lines
Quoted 15 lines
Quoted 15 lines
Quoted 15 lines
we
++ * have no partial bytes lying around.
++ */
++ if (state != 0)
++ return (-1);
++ }
++
++ return (tarindex);
++}
++
+--
+2.14.1
+
diff --gitQuoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
a/meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
b/meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
Quoted 6 lines
new file mode 100644
index 000000000..c7aebb641
---/dev/null
+++b/meta-oe/recipes-devtools/android-tools/android-tools/
0002-adb-Musl-fixes.patch
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Review line 1
Quoted 2 lines
(quoted diff) +1
-0@@ -0,0 +1,134 @@ +From f8653ed0ede4aa781ab758fcd44fdc05ffbe0b0a Mon Sep 17 00:00:002001
Quoted 152 lines
Quoted 152 lines
Quoted 152 lines
Quoted 152 lines
meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +31
-0+From: Khem Raj <[email protected]> +Date: Fri, 15 Sep 2017 15:50:57 -0700 +Subject: [PATCH 2/2] adb: Musl fixes + +__nonnull is gcc specific +include sys/types.h for size_t +Do not redefine close() and lseek() + +Signed-off-by: Khem Raj <[email protected]> +--- + system/core/adb/adb.h | 2 ++ + system/core/adb/disable_verity_service.c | 13 ++++++++----- + system/core/adb/framebuffer_service.c | 7 ++++--- + system/core/adb/sysdeps.h | 12 ++++++------ + 4 files changed, 20 insertions(+), 14 deletions(-) + +diff --git a/system/core/adb/adb.h b/system/core/adb/adb.h +index 44e5981..bcdc49f 100644 +--- a/system/core/adb/adb.h ++++ b/system/core/adb/adb.h +@@ -18,7 +18,9 @@ + #define __ADB_H + + #include <limits.h> ++#include <sys/types.h> + ++#include "fdevent.h" + #include "adb_trace.h" + #include "transport.h" /* readx(), writex() */ + +diff --git a/system/core/adb/disable_verity_service.c
b/system/core/adb/disable_verity_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +34
-0+index ed3da52..29fa3d6 100644 +--- a/system/core/adb/disable_verity_service.c ++++ b/system/core/adb/disable_verity_service.c +@@ -14,25 +14,28 @@ + * limitations under the License. + */ + +-#include "sysdeps.h" + + #define TRACE_TAG TRACE_ADB + #include "adb.h" ++#include "sysdeps.h" ++#include "cutils/properties.h" ++#include "ext4_sb.h" ++#include <fs_mgr.h> + + #include <stdio.h> + #include <stdarg.h> + #include <sys/stat.h> + #include <fcntl.h> + #include <inttypes.h> ++#include <unistd.h> ++#include <errno.h> ++#include <stdbool.h> + +-#include "cutils/properties.h" +-#include "ext4_sb.h" +-#include <fs_mgr.h> + + #define FSTAB_PREFIX "/fstab." + struct fstab *fstab; + +-__attribute__((__format__(printf, 2, 3))) __nonnull((2)) ++__attribute__((__format__(printf, 2, 3)))__attribute__((nonnull((2))))
+ static voidwrite_console(int fd, const char* format, ...)
+ {(quoted diff) +2
-0+ char buffer[256]; +diff --git a/system/core/adb/framebuffer_service.c
b/system/core/adb/framebuffer_service.cmeta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +51
-0+index 8cbe840..8f0ccfb 100644 +--- a/system/core/adb/framebuffer_service.c ++++ b/system/core/adb/framebuffer_service.c +@@ -14,6 +14,10 @@ + * limitations under the License. + */ + ++#include "fdevent.h" ++#include "adb.h" ++#include "sysdeps.h" ++ + #include <stdlib.h> + #include <stdio.h> + #include <unistd.h> +@@ -23,9 +27,6 @@ + #include <sys/types.h> + #include <sys/wait.h> + +-#include "fdevent.h" +-#include "adb.h" +- + #include <linux/fb.h> + #include <sys/ioctl.h> + #include <sys/mman.h> +diff --git a/system/core/adb/sysdeps.h b/system/core/adb/sysdeps.h +index cc1f839..ea39ac3 100644 +--- a/system/core/adb/sysdeps.h ++++ b/system/core/adb/sysdeps.h +@@ -123,8 +123,8 @@ static __inline__ int unix_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + static __inline__ int unix_read(int fd, void* buf, size_t len) + { +@@ -369,8 +369,8 @@ static __inline__ int adb_close(int fd) + { + return close(fd); + } +-#undef close +-#define close ____xxx_close ++//#undef close ++//#define close ____xxx_close + + + static __inline__ int adb_read(int fd, void* buf, size_t len) +@@ -392,8 +392,8 @@ static __inline__ int adb_lseek(int fd, intpos,
int where)
+ {meta-oe/recipes-devtools/android-tools/android-tools/0002-adb-Musl-fixes.patch new file +12
-0+ return lseek(fd, pos, where); + } +-#undef lseek +-#define lseek ___xxx_lseek ++//#undef lseek ++//#define lseek ___xxx_lseek + + static __inline__ int adb_unlink(const char* path) + { +-- +2.14.1 +diff --git
a/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mkb/meta-oe/recipes-devtools/android-tools/android-tools/adbd.mkindex84cd06b10..31452ae10100644meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +1
-0@@ -16,6 +16,7 @@ adbd_SRC_FILES += jdwp_service.c adbd_SRC_FILES += framebuffer_service.c adbd_SRC_FILES += remount_service.c adbd_SRC_FILES += disable_verity_service.c +adbd_SRC_FILES += base64.c adbd_SRC_FILES += usb_linux_client.c adbd_OBJS := $(adbd_SRC_FILES:.c=.o)Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
diff --git a/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb index
34fddcbda..75f5b9e26100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
+++ b/meta-oe/recipes-devtools/android-tools/android-tools_5.
1.1.r37.bb
Quoted 21 lines
Quoted 19 lines
Quoted 19 lines
Quoted 17 lines
meta-oe/recipes-devtools/android-tools/android-tools/adbd.mk +2
-1@@ -32,6 +32,8 @@ SRC_URI = " \ file://define-shell-command.patch \ file://implicit-declaration-function-strlcat-strlcopy.patch \ file://fix-big-endian-build.patch \ + file://0001-add-base64-implementation.patch \ + file://0002-adb-Musl-fixes.patch \ file://android-tools-adbd.service \ file://.gitignore;subdir=git \ file://adb.mk;subdir=${BPN} \ --2.14.1
--
_______________________________________________
Openembedded-devel mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-devel
Re: [meta-oe][PATCH 2/2] android-tools: Fix build with musl
Quoted 5 lines · Martin Jansa
That was 1st thing I've checked and it's already using arm as the meta-android version did:
OK. then I think it needs to be debugged a bit, since I dont have a qemuarm build handy, it will be a while I can look into it myself.