added my Recipes

This commit is contained in:
2024-07-11 14:16:35 +02:00
parent 38bc4f53ac
commit 09b621d929
7118 changed files with 525762 additions and 3 deletions

View File

@@ -0,0 +1,3 @@
RDEPENDS:packagegroup-meta-oe-graphics +="\
openbox-xdgmenu \
"

View File

@@ -0,0 +1,13 @@
=== modified file 'openbox-xdgmenu.c'
--- openbox-xdgmenu.c 2011-09-03 20:13:39 +0000
+++ openbox-xdgmenu.c 2013-12-28 17:41:04 +0000
@@ -235,7 +235,7 @@
}
g_printf("<item label=\"%s\">\n", g_strjoinv("&amp;", g_strsplit(name,"&",0))),
- g_printf("<action name=\"Execute\"><execute>%s</execute></action>\n", exec),
+ g_printf("<action name=\"Execute\"><command>%s</command></action>\n", exec),
g_printf("</item>\n");
g_free(name);

View File

@@ -0,0 +1,27 @@
Index: openbox-xdgmenu-0.3/openbox-xdgmenu.c
===================================================================
--- openbox-xdgmenu-0.3.orig/openbox-xdgmenu.c
+++ openbox-xdgmenu-0.3/openbox-xdgmenu.c
@@ -197,7 +197,7 @@ void process_entry(GMenuTreeEntry *entry
{
GDesktopAppInfo *appinfo = gmenu_tree_entry_get_app_info (entry);
char *name = g_strdup (g_app_info_get_name(G_APP_INFO(appinfo)));
- char *exec = g_strdup (g_app_info_get_executable(G_APP_INFO(appinfo)));
+ char *exec = g_strdup (g_app_info_get_commandline(G_APP_INFO(appinfo)));
int i;
for (i = 0; i < strlen(exec) - 1; i++) {
@@ -217,8 +217,11 @@ void process_entry(GMenuTreeEntry *entry
}
}
- g_printf("<item label=\"%s\">\n", g_strjoinv("&amp;", g_strsplit(name,"&",0))),
- g_printf("<action name=\"Execute\"><command>%s</command></action>\n", exec),
+ g_printf("<item label=\"%s\">\n", g_strjoinv("&amp;", g_strsplit(name,"&",0)));
+ g_printf("<action name=\"Execute\"><command>%s%s</command></action>\n",
+ g_desktop_app_info_get_boolean(appinfo, G_KEY_FILE_DESKTOP_KEY_TERMINAL) ?
+ "x-terminal-emulator -e " : "",
+ exec);
g_printf("</item>\n");
g_free(name);

View File

@@ -0,0 +1,184 @@
Index: openbox-xdgmenu-0.3/openbox-xdgmenu.c
===================================================================
--- openbox-xdgmenu-0.3.orig/openbox-xdgmenu.c
+++ openbox-xdgmenu-0.3/openbox-xdgmenu.c
@@ -32,7 +32,7 @@
#include <string.h>
#include <glib.h>
#include <glib/gprintf.h>
-#include <gnome-menus/gmenu-tree.h>
+#include <gnome-menus-3.0/gmenu-tree.h>
/*=============================================================================
* Declarations
@@ -42,7 +42,6 @@ static void process_directory(GMenuTreeD
static void process_entry(GMenuTreeEntry *entry);
static void process_separator(GMenuTreeSeparator *entry);
-gboolean option_show_amount_of_entries = 0;
gboolean option_do_not_use_categories = 0;
/*=============================================================================
@@ -61,11 +60,6 @@ int main (int argc, char **argv)
g_free (xdgfile);
return 0;
}
- else if ((strcmp (argv[i], "--show-amount") == 0) ||
- (strcmp (argv[i], "-a") == 0))
- {
- option_show_amount_of_entries = 1;
- }
else if ((strcmp (argv[i], "--plain") == 0) ||
(strcmp (argv[i], "-p") == 0))
{
@@ -93,16 +87,15 @@ int main (int argc, char **argv)
return 1;
}
- FILE * file;
- if (!(file = fopen(xdgfile, "r")))
+ GMenuTree *menuTree = gmenu_tree_new (xdgfile, GMENU_TREE_FLAGS_NONE );
+
+ GError *error = NULL;
+ if (!gmenu_tree_load_sync(menuTree, &error))
{
- g_printf ("Could not read file \"%s\".\n", xdgfile);
- g_free (xdgfile);
- return 2;
+ g_printerr ("Failed to load tree: %s\n", error->message);
+ g_clear_error (&error);
+ return 3;
}
- fclose(file);
-
- GMenuTree *menuTree = gmenu_tree_lookup (xdgfile, GMENU_TREE_FLAGS_NONE );
GMenuTreeDirectory *rootDirectory = gmenu_tree_get_root_directory(menuTree);
@@ -129,11 +122,10 @@ void show_help()
g_printf (" openbox-xdgmenu [options] <Xdg menu file>\n");
g_printf ("\n");
g_printf ("Options:\n");
- g_printf (" -a: Show the amount of items in each category next to its name.\n");
g_printf (" -p: Do not use categories.\n");
g_printf ("\n");
g_printf ("For example:\n");
- g_printf (" openbox-xdgmenu \"/etc/xdg/menus/applications.menu\"\n\n");
+ g_printf (" openbox-xdgmenu \"gnome-applications.menu\"\n\n");
}
/*=============================================================================
@@ -141,72 +133,61 @@ void show_help()
*/
void process_directory(GMenuTreeDirectory *directory, gboolean isRoot)
{
- int hasSeparator = 0;
+ GMenuTreeSeparator *separator = NULL;
int hasMenu = 0;
GMenuTreeItemType entryType;
- GSList *entryList = gmenu_tree_directory_get_contents (directory);
- GSList *l;
-
- if (option_do_not_use_categories == 00 && isRoot == 0 &&
- g_slist_length(entryList) > 0)
+ GMenuTreeIter *iter = gmenu_tree_directory_iter (directory);
+ GMenuTreeItemType next_type;
+
+ while ((next_type = gmenu_tree_iter_next (iter)) != GMENU_TREE_ITEM_INVALID)
{
- hasMenu = 1;
-
- if (option_show_amount_of_entries == 1)
+ if (option_do_not_use_categories == 00 && isRoot == 0 && hasMenu == 0)
{
+ hasMenu = 1;
+
g_printf(
- "<menu id=\"xdg-menu-%s\" label=\"%s (%d)\">\n",
- g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)),
- g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)),
- g_slist_length(entryList));
+ "<menu id=\"xdg-menu-%s\" label=\"%s\">\n",
+ g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)),
+ g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)));
}
- else
- {
- g_printf(
- "<menu id=\"xdg-menu-%s\" label=\"%s\">\n",
- g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)),
- g_strjoinv("&amp;", g_strsplit(gmenu_tree_directory_get_name(directory),"&",0)));
- }
- }
- for (l = entryList; l; l = l->next)
- {
- GMenuTreeItem *item = l->data;
-
- entryType = gmenu_tree_item_get_type (GMENU_TREE_ITEM(item));
-
- switch (entryType)
+ switch (next_type)
{
+ case GMENU_TREE_ITEM_INVALID:
+ break;
case GMENU_TREE_ITEM_DIRECTORY:
- if (hasSeparator)
+ if (separator != NULL)
{
- process_separator(GMENU_TREE_SEPARATOR(item));
- hasSeparator = 0;
+ process_separator(separator);
+ gmenu_tree_item_unref (separator);
+ separator = NULL;
}
- process_directory(GMENU_TREE_DIRECTORY(item), 0);
+ process_directory(gmenu_tree_iter_get_directory(iter), 0);
break;
case GMENU_TREE_ITEM_ENTRY:
- if (hasSeparator)
+ if (separator != NULL)
{
- process_separator(GMENU_TREE_SEPARATOR(item));
- hasSeparator = 0;
+ process_separator(separator);
+ gmenu_tree_item_unref (separator);
+ separator = NULL;
}
- process_entry(GMENU_TREE_ENTRY(item));
+ process_entry(gmenu_tree_iter_get_entry(iter));
break;
case GMENU_TREE_ITEM_SEPARATOR:
- hasSeparator = 1;
+ separator = gmenu_tree_iter_get_separator(iter);
break;
}
-
- gmenu_tree_item_unref (item);
}
if (hasMenu == 1)
{
g_printf("</menu>\n");
}
+
+ if (separator != NULL)
+ gmenu_tree_item_unref (separator);
- g_slist_free (entryList);
+ gmenu_tree_iter_unref (iter);
}
/*=============================================================================
@@ -214,8 +195,9 @@ void process_directory(GMenuTreeDirector
*/
void process_entry(GMenuTreeEntry *entry)
{
- char *name = g_strdup (gmenu_tree_entry_get_name(entry));
- char *exec = g_strdup (gmenu_tree_entry_get_exec(entry));
+ GDesktopAppInfo *appinfo = gmenu_tree_entry_get_app_info (entry);
+ char *name = g_strdup (g_app_info_get_name(G_APP_INFO(appinfo)));
+ char *exec = g_strdup (g_app_info_get_executable(G_APP_INFO(appinfo)));
int i;
for (i = 0; i < strlen(exec) - 1; i++) {

View File

@@ -0,0 +1,36 @@
SUMMARY = "Openbox configuration tool"
AUTHOR = "Siegfried Gevatter"
HOMEPAGE = "https://launchpad.net/openbox-xdgmenu/"
SECTION = "x11/wm"
LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
DEPENDS = " \
gnome-menus \
glib-2.0 \
"
PV = "0.3"
SRC_URI = " \
http://launchpad.net/openbox-xdgmenu/trunk/0.3/+download/openbox-xdgmenu-0.3.tar.gz \
file://7_6.diff;striplevel=0 \
file://port-gnome-menus3.patch \
file://fix-menu-generation.patch \
"
SRC_URI[sha256sum] = "824e099928aab2fb628f0fa4870ef7bba10b95581e47c2d8fa216709a0f399b3"
inherit pkgconfig features_check
# depends on openbox, which is X11-only
REQUIRED_DISTRO_FEATURES = "x11"
EXTRA_OEMAKE = " \
CC='${CC}' \
CFLAGS='${CPPFLAGS} ${CFLAGS} `pkg-config --cflags glib-2.0 libgnome-menu-3.0` -DGMENU_I_KNOW_THIS_IS_UNSTABLE' \
LDFLAGS='${LDFLAGS} `pkg-config --libs glib-2.0 libgnome-menu-3.0`' \
"
do_install() {
install -d ${D}${bindir}
install -m 0755 openbox-xdgmenu ${D}${bindir}
}
RDEPENDS:${PN} += "virtual-x-terminal-emulator"

View File

@@ -0,0 +1,32 @@
From 84e884f99e581515b49d8973538bb17e1e6c0dc0 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 26 Jan 2023 20:45:57 -0800
Subject: [PATCH] include missing <cstdint>
gcc 13 moved some includes around and as a result <cstdint> is no
longer transitively included [1]. Explicitly include it for
uint{32,64}_t.
[1] https://gcc.gnu.org/gcc-13/porting_to.html#header-dep-changes
Upstream-Status: Submitted [https://github.com/tomba/rwmem/pull/7]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
librwmem/helpers.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/librwmem/helpers.h b/librwmem/helpers.h
index a0a738b..8d02c9c 100644
--- a/librwmem/helpers.h
+++ b/librwmem/helpers.h
@@ -1,6 +1,7 @@
#pragma once
#include <cerrno>
+#include <cstdint>
#include <string>
#include <vector>
#include <string.h>
--
2.39.1

View File

@@ -0,0 +1,35 @@
SUMMARY = "A small tool to read/write memory"
DESCRIPTION = "rwmem is a small tool for reading and writing device registers. \
rwmem supports two modes: mmap mode and i2c mode. \
\
In mmap mode rwmem accesses a file by memory mapping it. \
Using /dev/mem as the memory mapped file makes rwmem access memory and \
can thus be used to access devices which have memory mapped registers. \
\
In i2c mode rwmem accesses an i2c peripheral by sending i2c messages to it."
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS += "fmt libinih"
PV .= "+git${SRCPV}"
SRCREV = "8416326777b2aada0706539b8f9f6acefa476b16"
SRC_URI = "git://github.com/tomba/rwmem.git;protocol=https;name=rwmem;branch=master \
file://0001-include-missing-cstdint.patch"
S = "${WORKDIR}/git"
inherit meson pkgconfig python3native
PACKAGECONFIG ?= "python static"
PACKAGECONFIG[python] = "-Dpyrwmem=enabled,-Dpyrwmem=disabled,cmake-native python3 python3-pybind11"
PACKAGECONFIG[static] = "-Dstatic-libc=true,-Dstatic-libc=false,"
do_install:append() {
install -D -m 0644 ${B}/librwmem/librwmem.a ${D}${libdir}/librwmem.a
}
FILES:${PN} += "${libdir}/python3.11/site-packages/pyrwmem"

View File

@@ -0,0 +1,40 @@
From 50a48a7bd8d65a165ce2aac4ba0c1e02bded04aa Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 30 Nov 2019 12:21:31 -0800
Subject: [PATCH] Fix build on 32bit arches with 64bit time_t
time element is deprecated on new input_event structure in kernel's
input.h [1]
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=152194fe9c3f
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
plugins/devinput.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/plugins/devinput.c b/plugins/devinput.c
index d4d733a..feb4a61 100644
--- a/plugins/devinput.c
+++ b/plugins/devinput.c
@@ -34,6 +34,11 @@
#include <linux/uinput.h>
#include <sys/stat.h>
+#ifndef input_event_sec
+#define input_event_sec time.tv_sec
+#define input_event_usec time.tv_usec
+#endif
+
#ifndef EV_SYN
/* previous name */
#define EV_SYN EV_RST
@@ -459,7 +464,7 @@ char* devinput_rec(struct ir_remote* remotes)
return 0;
}
- log_trace("time %ld.%06ld type %d code %d value %d", event.time.tv_sec, event.time.tv_usec, event.type,
+ log_trace("time %ld.%06ld type %d code %d value %d", event.input_event_sec, event.input_event_usec, event.type,
event.code, event.value);
value = (unsigned)event.value;

View File

@@ -0,0 +1,55 @@
From 5e3b74927b4fef03d91518d235e9e3ba8cd7ab2e Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex@linutronix.de>
Date: Wed, 9 Nov 2022 20:49:41 +0100
Subject: [PATCH] Makefile.am: do not clobber PYTHONPATH from build environment
This environment variable has special significance for python,
and so lirc's variable has to be named something else.
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
Makefile.am | 2 +-
pylint.mak | 2 +-
tools/Makefile.am | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 6718af1..fae423e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -128,7 +128,7 @@ endif
pylint: .phony
$(MAKE) -C tools pylint
- -PYTHONPATH=$(PYTHONPATH) $(PYLINT) --rcfile=pylint.conf \
+ -PYTHONPATH=$(LIRCPYTHONPATH) $(PYLINT) --rcfile=pylint.conf \
--msg-template='$(pylint_template)' $(py_PYTHON)
pep8: $(py_PYTHON)
diff --git a/pylint.mak b/pylint.mak
index bf427ab..2692951 100644
--- a/pylint.mak
+++ b/pylint.mak
@@ -1,5 +1,5 @@
PYTHONPATH1 = $(abs_top_srcdir)/python-pkg/lirc:
PYTHONPATH2 = $(abs_top_srcdir)/python-pkg/lirc/lib/.libs
-PYTHONPATH = $(PYTHONPATH1):$(PYTHONPATH2)
+LIRCPYTHONPATH = $(PYTHONPATH1):$(PYTHONPATH2)
PYLINT = python3-pylint
pylint_template = {path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 85d1fd0..96b17f8 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -142,7 +142,7 @@ force-pylint: .phony
pylint: .pylint-stamp
.pylint-stamp: $(py_sources)
- -PYTHONPATH=$(PYTHONPATH) $(PYLINT) --rcfile=../pylint.conf \
+ -PYTHONPATH=$(LIRCPYTHONPATH) $(PYLINT) --rcfile=../pylint.conf \
--msg-template='$(pylint_template)' $? && touch $@
.phony:
--
2.30.2

View File

@@ -0,0 +1,26 @@
From ca126a2832aaff0deef3ba7eaf411dd0dc43b068 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 16 Mar 2023 11:31:14 -0700
Subject: [PATCH] Unbolt ubuntu hack
This bites during cross compiling where the target is different than
build host and build host might be ubuntu but that does not matter in
cross compilation case. This fails builds when usrmerge feature is used
Upstream-Status: Inappropriates [ Cross-compile specific ]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/configure.ac
+++ b/configure.ac
@@ -429,7 +429,7 @@ AC_CHECK_LIB([udev], [udev_device_new_fr
])
dnl Ubuntu's systemd pkg-config seems broken beyond repair. So:
-kernelversion=`cat /proc/version || echo "non-linux"`
+kernelversion="cross-compiled"
AS_CASE([$kernelversion],
[*Ubuntu*],[
AC_MSG_NOTICE([Hardwiring Ubuntu systemd setup])

View File

@@ -0,0 +1,44 @@
From e9e9027d7a324e1ce5e0cb06d4eb51847262a09d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 28 Aug 2022 12:26:52 -0700
Subject: [PATCH] mplay: Fix build with musl
pthread_t is an opaque type, therefore typecast it to avoid warnings on
musl
Fixes
mplay.c:200:12: error: incompatible integer to pointer conversion initializing 'pthread_t' (aka 'struct __pthread *') with an expression of type 'int' [-Wint-conversion]
| .tid = -1
| ^~
Upstream-Status: Submitted [https://sourceforge.net/p/lirc/git/merge-requests/47/]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
plugins/mplay.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/mplay.c b/plugins/mplay.c
index d6d9619..5b9eb4b 100644
--- a/plugins/mplay.c
+++ b/plugins/mplay.c
@@ -197,7 +197,7 @@ static struct {
.latest_button = MPLAY_CODE_ERROR,
.fd = -1,
.pipefd = { -1, -1 },
- .tid = -1
+ .tid = (pthread_t)-1
};
/**
@@ -788,7 +788,7 @@ int mplayfamily_deinit(void)
return 0;
}
pthread_join(mplayfamily_local_data.tid, NULL);
- mplayfamily_local_data.tid = -1;
+ mplayfamily_local_data.tid = (pthread_t)-1;
}
if (mplayfamily_local_data.pipefd[0] != -1) {
close(mplayfamily_local_data.pipefd[0]);
--
2.37.2

View File

@@ -0,0 +1,30 @@
diff --git a/configure.ac b/configure.ac
index 58347d8..8c7fca2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -77,15 +77,10 @@ AC_TYPE_UINT64_T
dnl AC_TYPE_GETGROUPS seems broken on recent MacOS, so:
AC_MSG_CHECKING([Figure out if getgrouplist() needs gid_t or int])
-oldcflags="$CFLAGS"
-export CFLAGS=-Werror
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <unistd.h>
-#include <grp.h>
- ]], [[
-gid_t groups[32]; int ngroups; const char* user = "root";
-getgrouplist(user, 1, groups, &ngroups);
- ]])],[
+int getgroups(int gidsetsize, gid_t grouplist[]);
+ ]], [[ ]])],[
AC_MSG_RESULT(gid_t)
AC_DEFINE(GETGROUPS_T,[gid_t])
],[
@@ -93,7 +88,6 @@ getgrouplist(user, 1, groups, &ngroups);
AC_DEFINE(GETGROUPS_T,[int])
]
)
-export CFLAGS="$oldcflags"
dnl Checks for library functions.
AC_CHECK_FUNCS(gethostname gettimeofday mkfifo select socket strdup \

View File

@@ -0,0 +1 @@
d /run/lirc 0755 root root -

View File

@@ -0,0 +1,24 @@
# These are the default options to lircd, if installed as
# /etc/lirc/lirc_options.conf. See the lircd(8) and lircmd(8)
# manpages for info on the different options.
[lircd]
nodaemon = False
permission = 666
driver = default
device = /dev/lirc0
output = /var/run/lirc/lircd
pidfile = /var/run/lirc/lircd.pid
plugindir = /usr/lib/lirc/plugins
allow-simulate = No
repeat-max = 600
#listen = [address:]port
#connect = host[:port]
#debug = 5
#uinput = ...
#release = ...
#logfile = ...
[lircmd]
uinput = False
nodeamon = False

View File

@@ -0,0 +1,315 @@
# contributed by angelo castello
#
# note: this config file has been deduced starting from the
# raw codes provided to run mode2 utility.
#
# brand: futarque
begin remote
name futarque
bits 8
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 8048 3898
one 555 1436
zero 555 439
gap 113123
ptrail 555
pre_data_bits 8
pre_data 0x54
pre 570 3890
begin codes
MUTE 0x70
EXIT 0xA8
POWER 0xF0
CHANNEL_UP 0x50
CHANNEL_DOWN 0xD0
VOLUME_UP 0x30
VOLUME_DOWN 0xB0
OK 0x98
FAVORITES 0x04
TEXT 0x68
EPG 0xC8
BACK 0x48
MENU 0x88
1 0x00
2 0x80
3 0x40
4 0xC0
5 0x20
6 0xA0
7 0x60
8 0xE0
9 0x10
0 0x90
PAUSE 0x84
INFO 0x38
RED 0xE8
GREEN 0x08
YELLOW 0x28
BLUE 0x78
UP 0xD8
DOWN 0xB8
REWIND 0x44
FASTFORWARD 0x24
PLAYPAUSE 0xC4
STOP 0x64
RECORD 0xA4
AUDIO 0xE4
TAPE 0x14
DVD 0x94
CAPITAL_A 0xF8
CAPITAL_B 0x54
end codes
end remote
# brand: STM PVR-1
begin remote
name stm_pvr_1
bits 16
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 150
header 9000 4500
one 572 1700
zero 572 572
ptrail 572
repeat 9000 2200
pre_data_bits 16
pre_data 0xFE
gap 100000
begin codes
POWER 0x00ff
FAVORITES 0x7887
MUTE 0x28d7
0 0x708F
1 0xc03f
2 0x40bf
3 0x807f
4 0xe01f
5 0x609f
6 0xa05f
7 0xd02f
8 0x50af
9 0x906f
INFO 0x38c7
SUBTITLE 0xe817
MENU 0x9867
EXIT 0x20df
EPG 0xa857
BACK 0x48b7
CURSOR_UP 0x58a7
CURSOR_DOWN 0xd827
CURSOR_LEFT 0x8877
CURSOR_RIGHT 0xb04f
OK 0x10ef
VOLUME_UP 0x22dd
VOLUME_DOWN 0x8a75
CHANNEL_UP 0x12ed
CHANNEL_DOWN 0x4ab5
TEXT 0xf00f
RADIO 0x926d
ZOOM 0x6897
AUDIO 0x08f7
RED 0x42bd
GREEN 0xa25d
YELLOW 0x827d
BLUE 0x02fd
CUSTOM0 0x52ad
CUSTOM1 0x30cf
PLAY 0x629d
PAUSE 0xb24d
PREVIOUS 0xc837
NEXT 0xf807
REWIND 0x32cd
FASTFORWARD 0x0af5
AUX 0x7a85
CUSTOM3 0xb847
PIP 0x3ac5
SWAP 0xba45
end codes
end remote
# brand: STM DTV-2
begin remote
name stm_dtv_2
flags SHIFT_ENC|CONST_LENGTH
bits 13
aeps 150
one 850 850
zero 850 850
plead 850
gap 67800
toggle_bit 2
begin codes
POWER 0x100C
FAVORITES 0x1015
AUX 0x1038
1 0x1001
2 0x1002
3 0x1003
4 0x1004
5 0x1005
6 0x1006
7 0x1007
8 0x1008
9 0x1009
PERIOD 0x1024
0 0x103E
BACK 0x1023
MENU 0x1016
INFO 0x100F
EPG 0x101E
EXIT 0x1018
CURSOR_UP 0x1017
CURSOR_DOWN 0x101D
CURSOR_LEFT 0x1019
CURSOR_RIGHT 0x101B
OK 0x101A
VOLUME_UP 0x1010
VOLUME_DOWN 0x1011
CHANNEL_UP 0x1020
CHANNEL_DOWN 0x1021
TEXT 0x102E
SUBTITLE 0x103C
FREEZE 0x1014
ZOOM 0x102B
RED 0x1028
GREEN 0x102A
YELLOW 0x102F
BLUE 0x1030
CUSTOM10 0x1022
INTERNET 0x1027
CUSTOM11 0x102C
AUDIO 0x1025
RECORD 0x102D
PLAYPAUSE 0x1029
STOP 0x1026
CUSTOM1 0x101C
MUTE 0x100d
CUSTOM12 0x101F
PIP 0x100B
SWAP 0x100E
end codes
end remote
# brand: Comcast
# model no. of remote control: XR2
# 32 bits for the pre-date (should be value 0x170F443E)
# width between pre_bits and data: 12900 microseconds
#
# 24 bits for the data (key code)
# To get key REPEAT, XOR 0x088 with KEY value
# There are 8 post bits (both should be zero)
#
# Gap between keys: 8100 microseconds
begin remote
name Xfinity-XR2
bits 24
flags XMP
eps 20
aeps 300
one 0 137
zero 250 710
ptrail 250
pre_data_bits 32
pre_data 0x170F443E
post_data_bits 8
post_data 0x0
pre 250 12921
gap 81698
toggle_bit_mask 0x0
begin codes
1 0x1E0001
1_repeat 0x168001
2 0x1D0002
2_repeat 0x158002
3 0x1C0003
3_repeat 0x148003
4 0x1B0004
4_repeat 0x138004
5 0x1A0005
5_repeat 0x128005
6 0x190006
6_repeat 0x118006
7 0x180007
7_repeat 0x108007
8 0x170008
8_repeat 0x1F8008
9 0x160009
9_repeat 0x1E8009
0 0x1F0000
0_repeat 0x178000
OK 0x180025
OK_repeat 0x108025
POWER 0x10000F
POWER_repeat 0x18800F
UP 0x1C0021
UP_repeat 0x148021
DOWN 0x1B0022
DOWN_repeat 0x138022
LEFT 0x1A0023
LEFT_repeat 0x128023
RIGHT 0x190024
RIGHT_repeat 0x118024
REWIND 0x190033
REWIND_repeat 0x118033
PLAY 0x1C0030
PLAY_repeat 0x148030
FASTFORWARD 0x180034
FASTFORWARD_repeat 0x108034
RECORD 0x170035
RECORD_repeat 0x1F8035
REPLAY 0x170053
REPLAY_repeat 0x1F8053
A 0x190060
A_repeat 0x118060
B 0x180061
B_repeat 0x108061
C 0x170062
C_repeat 0x1F8062
D 0x160063
D_repeat 0x1E8063
PAGE_UP 0x150028
PAGE_UP_repeat 0x1D8028
PAGE_DOWN 0x140029
PAGE_DOWN_repeat 0x1C8029
GUIDE 0x160027
GUIDE_repeat 0x1E8027
MENU 0x1D0020
MENU_repeat 0x158020
EXIT 0x13002A
EXIT_repeat 0x1B802A
INFO 0x170026
INFO_repeat 0x1F8026
LAST 0x190051
LAST_repeat 0x118051
VOLUME_UP 0x15000A
VOLUME_UP_repeat 0x1D800A
CHANNEL_UP 0x12000D
CHANNEL_UP_repeat 0x1A800D
VOLUME_DOWN 0x14000B
VOLUME_DOWN_repeat 0x1C800B
CHANNEL_DOWN 0x11000E
CHANNEL_DOWN_repeat 0x19800E
MUTE 0x13000C
MUTE_repeat 0x1B800D
end codes
end remote

View File

@@ -0,0 +1,40 @@
#! /bin/sh
#
# This is an init script for Familiar
# Copy it to /etc/init.d/lircd and type
# > update-rc.d lircd defaults 20
#
test -f /usr/sbin/lircd || exit 0
test -f /etc/lircd.conf || exit 0
case "$1" in
start)
echo -n "Starting lirc daemon: lircd"
start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc0
echo "."
;;
stop)
echo -n "Stopping lirc daemon: lircd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
echo "."
;;
reload|force-reload)
start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/lircd
;;
restart)
echo -n "Stopping lirc daemon: lircd"
start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
sleep 1
echo -n "Starting lirc daemon: lircd"
start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- --device=/dev/lirc0
echo "."
;;
*)
echo "Usage: /etc/init.d/lircd {start|stop|reload|restart|force-reload}"
exit 1
esac
exit 0

View File

@@ -0,0 +1,20 @@
[Unit]
Description=LIRC Infrared Signal Decoder
After=network.target
[Service]
Type=forking
EnvironmentFile=/etc/lirc/lircd.conf
PIDFile=/run/lirc/lircd.pid
ExecStartPre=/bin/mkdir -p /run/lirc
ExecStartPre=/bin/rm -f /dev/lircd
ExecStartPre=/bin/rm -f /run/lirc/lircd
ExecStartPre=/bin/ln -s /run/lirc/lircd /dev/lircd
ExecStart=/usr/sbin/lircd --pidfile=/run/lirc/lircd.pid --device=/dev/lirc0
ExecStopPost=/bin/rm -f /dev/lircd
ExecStopPost=/bin/rm -fR /run/lirc
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,37 @@
#! /bin/sh
#
# This is an init script for Familiar
# Copy it to /etc/init.d/lircexecd and type
# > update-rc.d lircexecd defaults 20
# It must be started after lircd (and it does alphabetically :-)
# irexec reads /etc/lircrc by default
test -f /usr/bin/irexec || exit 0
test -f /etc/lircrc || exit 0
case "$1" in
start)
echo -n "Starting lircexec daemon: irexec"
start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
echo "."
;;
stop)
echo -n "Stopping lircexec daemon: irexec"
start-stop-daemon --stop --quiet --exec /usr/bin/irexec
echo "."
;;
restart|force-restart)
echo -n "Stopping lircexec daemon: irexec"
start-stop-daemon --stop --quiet --exec /usr/bin/irexec
sleep 1
echo -n "Starting lircexec daemon: irexec"
start-stop-daemon --start --quiet --exec /usr/bin/irexec -- --daemon
echo "."
;;
*)
echo "Usage: /etc/init.d/lircexec {start|stop|reload|restart|force-restart}"
exit 1
esac
exit 0

View File

@@ -0,0 +1,115 @@
DESCRIPTION = "LIRC is a package that allows you to decode and send infra-red signals of many commonly used remote controls."
DESCRIPTION:append:lirc = " This package contains the lirc daemon, libraries and tools."
DESCRIPTION:append:lirc-exec = " This package contains a daemon that runs programs on IR signals."
DESCRIPTION:append:lirc-remotes = " This package contains some config files for remotes."
DESCRIPTION:append:lirc-nslu2example = " This package contains a working config for RC5 remotes and a modified NSLU2."
HOMEPAGE = "http://www.lirc.org"
SECTION = "console/network"
LICENSE = "GPL-2.0-only"
DEPENDS = "libxslt-native alsa-lib libftdi libusb1 libusb-compat jack portaudio-v19 python3-pyyaml python3-setuptools-native"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "http://prdownloads.sourceforge.net/lirc/lirc-${PV}.tar.bz2 \
file://0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch \
file://fix_build_errors.patch \
file://0001-mplay-Fix-build-with-musl.patch \
file://lircd.service \
file://lircd.init \
file://lircexec.init \
file://lircd.conf \
file://lirc_options.conf \
file://lirc.tmpfiles \
file://0001-Makefile.am-do-not-clobber-PYTHONPATH-from-build-env.patch \
file://0001-Unbolt-ubuntu-hack.patch \
"
SRC_URI[sha256sum] = "3d44ec8274881cf262f160805641f0827ffcc20ade0d85e7e6f3b90e0d3d222a"
SYSTEMD_PACKAGES = "lirc lirc-exec"
SYSTEMD_SERVICE:${PN} = "lircd.service lircmd.service lircd-setup.service lircd-uinput.service"
SYSTEMD_SERVICE:${PN}-exec = "irexec.service"
SYSTEMD_AUTO_ENABLE:lirc = "enable"
SYSTEMD_AUTO_ENABLE:lirc-exec = "enable"
inherit autotools pkgconfig systemd python3native setuptools3-base
PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd"
PACKAGECONFIG[x11] = "--with-x,--with-x=no,libx11,"
PACKAGECONFIG ?= " \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', ' systemd', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', ' x11', '', d)} \
"
CACHED_CONFIGUREVARS = "HAVE_WORKING_POLL=yes SH_PATH=/bin/sh"
#EXTRA_OEMAKE = 'SUBDIRS="lib daemons tools"'
# Ensure python-pkg/VERSION exists
do_configure:append() {
cp ${S}/VERSION ${S}/python-pkg/
}
# Create PYTHON_TARBALL which LIRC needs for install-nodist_pkgdataDATA
do_install:prepend() {
rm -rf ${S}/python-pkg/dist/
mkdir ${S}/python-pkg/dist/
tar --exclude='${S}/python-pkg/*' -czf ${S}/python-pkg/dist/${BP}.tar.gz ${S}
}
# In code, path to python is a variable that is replaced with path to native version of it
# during the configure stage, e.g ../recipe-sysroot-native/usr/bin/python3-native/python3.
# Replace it with #!/usr/bin/env python3
do_install:append() {
sed -i '1c#!/usr/bin/env python3' ${D}${bindir}/lirc-setup \
${D}${PYTHON_SITEPACKAGES_DIR}/lirc-setup/lirc-setup \
${D}${bindir}/irtext2udp \
${D}${bindir}/lirc-init-db \
${D}${bindir}/irdb-get \
${D}${bindir}/pronto2lirc \
${D}${sbindir}/lircd-setup
install -m 0755 -d ${D}${sysconfdir}
install -m 0755 -d ${D}${sysconfdir}/lirc
install -m 0644 ${WORKDIR}/lircd.conf ${D}${sysconfdir}/lirc/
install -m 0644 ${WORKDIR}/lirc_options.conf ${D}${sysconfdir}/lirc/
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -m 0755 -d ${D}${systemd_unitdir}/system ${D}${libdir}/tmpfiles.d
install -m 0644 ${WORKDIR}/lircd.service ${D}${systemd_unitdir}/system/
install -m 0755 ${WORKDIR}/lircexec.init ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/lirc.tmpfiles ${D}${libdir}/tmpfiles.d/lirc.conf
else
rm -rf ${D}/lib
fi
rm -rf ${D}${libdir}/lirc/plugins/*.la
rmdir ${D}/var/run/lirc ${D}/var/run
chown -R root:root ${D}${datadir}/lirc/contrib
}
PACKAGES =+ "${PN}-contrib ${PN}-exec ${PN}-plugins ${PN}-python"
RDEPENDS:${PN} = "bash python3"
RDEPENDS:${PN}-exec = "${PN}"
RDEPENDS:${PN}-python = "python3-shell python3-pyyaml python3-datetime python3-netclient python3-stringold"
RRECOMMENDS:${PN} = "${PN}-exec ${PN}-plugins"
FILES:${PN}-plugins = "${libdir}/lirc/plugins/*.so ${datadir}/lirc/configs"
FILES:${PN}-contrib = "${datadir}/lirc/contrib"
FILES:${PN}-exec = "${bindir}/irexec ${sysconfdir}/lircexec ${systemd_unitdir}/system/irexec.service"
FILES:${PN} += "${systemd_unitdir}/system/lircexec.init"
FILES:${PN} += "${systemd_unitdir}/system/lircd.service"
FILES:${PN} += "${systemd_unitdir}/system/lircd.socket"
FILES:${PN} += "${libdir}/tmpfiles.d/lirc.conf"
FILES:${PN}-dbg += "${libdir}/lirc/plugins/.debug"
FILES:${PN}-python += "${bindir}/irdb-get ${bindir}/irtext2udp ${bindir}/lircd-setup ${bindir}/pronto2lirc ${libdir}/python*/site-packages"
INITSCRIPT_PACKAGES = "lirc lirc-exec"
INITSCRIPT_NAME:lirc-exec = "lircexec"
INITSCRIPT_PARAMS:lirc-exec = "defaults 21"
# this is for distributions that don't use udev
pkg_postinst:${PN}:append() {
if [ ! -c $D/dev/lirc -a ! -f /sbin/udevd ]; then mknod $D/dev/lirc c 61 0; fi
}
SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"

View File

@@ -0,0 +1,26 @@
From a06c77557ed951249d5b344441ad6ec57410e63f Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex@linutronix.de>
Date: Sun, 3 Oct 2021 21:52:16 +0200
Subject: [PATCH] Makefile: do not use -Werror
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
---
Makefile | 1 -
1 file changed, 1 deletion(-)
diff --git a/Makefile b/Makefile
index 97973ce..78273ff 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,6 @@ BUILDFLAGS = \
-DSBINDIR=\"$(SBINDIR)\" \
-I${CURDIR}/include \
-Wall \
- -Werror \
$(NULL)
TESTFLAGS = \
--
2.34.1

View File

@@ -0,0 +1,30 @@
From e0df1f07d1707d5daf0358cc60b30f06121f7e60 Mon Sep 17 00:00:00 2001
From: Zang Ruochen <zangrc.fnst@cn.fujitsu.com>
Date: Fri, 25 Dec 2020 11:41:43 +0900
Subject: [PATCH] don't fail if GLOB_BRACE is not defined
Signed-off-by: Zang Ruochen <zangrc.fnst@cn.fujitsu.com>
---
src/util.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/util.c b/src/util.c
index 841ec12..59595da 100644
--- a/src/util.c
+++ b/src/util.c
@@ -32,6 +32,12 @@
#include "names.h"
#include "yaml-helpers.h"
+/* Don't fail if the standard library
+ * doesn't provide brace expansion */
+#ifndef GLOB_BRACE
+#define GLOB_BRACE 0
+#endif
+
NETPLAN_ABI GHashTable*
wifi_frequency_24;
--
2.25.1

View File

@@ -0,0 +1,67 @@
SUMMARY = "The network configuration abstraction renderer"
DESCRIPTION = "Netplan is a utility for easily configuring networking on a \
linux system. You simply create a YAML description of the required network \
interfaces and what each should be configured to do. From this description \
Netplan will generate all the necessary configuration for your chosen renderer \
tool."
HOMEPAGE = "https://netplan.io"
SECTION = "net/misc"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
S = "${WORKDIR}/git"
SRCREV = "15ce044d1df27b5057556d84d0d14beef8dd4e4d"
PV = "0.106"
SRC_URI = "git://github.com/CanonicalLtd/netplan.git;branch=main;protocol=https \
file://0001-Makefile-do-not-use-Werror.patch \
"
SRC_URI:append:libc-musl = " file://0001-don-t-fail-if-GLOB_BRACE-is-not-defined.patch"
DEPENDS = "glib-2.0 libyaml ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
PACKAGECONFIG ?= ""
PACKAGECONFIG[tests] = ",,,python3-nose python3-coverage python3-netifaces python3-pycodestyle python3-pyflakes python3-pyyaml"
RDEPENDS:${PN} = "python3 python3-core python3-netifaces python3-pyyaml util-linux-libuuid libnetplan python3-dbus python3-rich"
inherit pkgconfig systemd
TARGET_CC_ARCH += "${LDFLAGS}"
EXTRA_OEMAKE = "generate netplan/_features.py"
EXTRA_OEMAKE =+ "${@bb.utils.contains('DISTRO_FEATURES','systemd','netplan-dbus dbus/io.netplan.Netplan.service','',d)}"
do_install() {
install -d ${D}${sbindir} ${D}${libdir} ${D}${base_libdir}/netplan ${D}${datadir}/netplan/netplan/cli/commands ${D}${sysconfdir}/netplan
install -m 755 ${S}/generate ${D}${base_libdir}/netplan/
install -m 644 ${S}/netplan/*.py ${D}${datadir}/netplan/netplan
install -m 644 ${S}/netplan/cli/*.py ${D}${datadir}/netplan/netplan/cli
install -m 644 ${S}/netplan/cli/commands/*.py ${D}${datadir}/netplan/netplan/cli/commands
install -m 755 ${S}/src/netplan.script ${D}${datadir}/netplan/
ln -srf ${D}${datadir}/netplan/netplan.script ${D}${sbindir}/netplan
sed -i -e "s#/lib/netplan/generate#${base_libdir}/netplan/generate#" ${D}${datadir}/netplan/netplan/cli/utils.py
install -d ${D}/${systemd_unitdir}/system ${D}${systemd_unitdir}/system-generators
ln -srf ${D}/${base_libdir}/netplan/generate ${D}${systemd_unitdir}/system-generators
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
install -d ${D}${datadir}/dbus-1/system.d ${D}${datadir}/dbus-1/system-services
install -m 755 ${S}/netplan-dbus ${D}${base_libdir}/netplan
install -m 644 ${S}/dbus/io.netplan.Netplan.conf ${D}${datadir}/dbus-1/system.d
install -m 644 ${S}/dbus/io.netplan.Netplan.service ${D}${datadir}/dbus-1/system-services
sed -i -e "s#^Exec=/lib/#Exec=${base_libdir}/#" ${D}${datadir}/dbus-1/system-services/io.netplan.Netplan.service
fi
install -m 755 ${S}/libnetplan.so.0.0 ${D}${libdir}
ln -rfs ${D}${libdir}/libnetplan.so.0.0 ${D}${libdir}/libnetplan.so
}
PACKAGES += "${PN}-dbus libnetplan"
FILES:libnetplan = "${libdir}/libnetplan.so.0.0"
FILES:${PN} = "${sbindir} ${base_libdir}/netplan/generate ${datadir}/netplan ${sysconfdir}/netplan ${systemd_unitdir}"
FILES:${PN}-dbus = "${base_libdir}/netplan/netplan-dbus ${datadir}/dbus-1"

View File

@@ -0,0 +1,58 @@
{
"general": {
"objectName": "TB_gateway",
"address": "192.168.188.181:1052",
"objectIdentifier": 599,
"maxApduLengthAccepted": 1024,
"segmentationSupported": "segmentedBoth",
"vendorIdentifier": 15
},
"devices": [
{
"deviceName": "BACnet Device ${objectName}",
"deviceType": "default",
"address": "192.168.188.181:10520",
"pollPeriod": 10000,
"attributes": [
{
"key": "temperature",
"type": "string",
"objectId": "analogOutput:1",
"propertyId": "presentValue"
}
],
"timeseries": [
{
"key": "state",
"type": "bool",
"objectId": "binaryValue:1",
"propertyId": "presentValue"
}
],
"attributeUpdates": [
{
"key": "brightness",
"requestType": "writeProperty",
"objectId": "analogOutput:1",
"propertyId": "presentValue"
}
],
"serverSideRpc": [
{
"method": "set_state",
"requestType": "writeProperty",
"requestTimeout": 10000,
"objectId": "binaryOutput:1",
"propertyId": "presentValue"
},
{
"method": "get_state",
"requestType": "readProperty",
"requestTimeout": 10000,
"objectId": "binaryOutput:1",
"propertyId": "presentValue"
}
]
}
]
}

View File

@@ -0,0 +1,53 @@
{
"name": "BLE Connector",
"rescanIntervalSeconds": 100,
"checkIntervalSeconds": 100,
"scanTimeSeconds": 5,
"passiveScanMode": true,
"devices": [
{
"name": "Temperature and humidity sensor",
"MACAddress": "4C:65:A8:DF:85:C0",
"addrType": "public",
"telemetry": [
{
"key": "temperature",
"method": "notify",
"characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
"byteFrom": 2,
"byteTo": 6
},
{
"key": "humidity",
"method": "notify",
"characteristicUUID": "226CAA55-6476-4566-7562-66734470666D",
"byteFrom": 9,
"byteTo": 13
}
],
"attributes": [
{
"key": "name",
"characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
"method": "read",
"byteFrom": 0,
"byteTo": -1
}
],
"attributeUpdates": [
{
"attributeOnThingsBoard": "sharedName",
"characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB"
}
],
"serverSideRpc": [
{
"methodRPC": "rpcMethod1",
"withResponse": true,
"characteristicUUID": "00002A00-0000-1000-8000-00805F9B34FB",
"methodProcessing": "read"
}
]
}
]
}

View File

@@ -0,0 +1,89 @@
{
"interface": "socketcan",
"channel": "vcan0",
"backend": {
"fd": true
},
"reconnectPeriod": 5,
"devices": [
{
"name": "Car",
"sendDataOnlyOnChange": false,
"enableUnknownRpc": true,
"strictEval": false,
"attributes": [
{
"key": "isDriverDoorOpened",
"nodeId": 41,
"command": "2:2:big:8717",
"value": "4:1:int",
"expression": "bool(value & 0b00000100)",
"polling": {
"type": "once",
"dataInHex": "AB CD AB CD"
}
}
],
"timeseries": [
{
"key": "rpm",
"nodeId": 1918,
"isExtendedId": true,
"command": "2:2:big:48059",
"value": "4:2:big:int",
"expression": "value / 4",
"polling": {
"type": "always",
"period": 5,
"dataInHex": "aaaa bbbb aaaa bbbb"
}
},
{
"key": "milliage",
"nodeId": 1918,
"isExtendedId": true,
"value": "4:2:little:int",
"expression": "value * 10",
"polling": {
"type": "always",
"period": 30,
"dataInHex": "aa bb cc dd ee ff aa bb"
}
}
],
"attributeUpdates": [
{
"attributeOnThingsBoard": "softwareVersion",
"nodeId": 64,
"isExtendedId": true,
"dataLength": 4,
"dataExpression": "value + 5",
"dataByteorder": "little"
}
],
"serverSideRpc": [
{
"method": "sendSameData",
"nodeId": 4,
"isExtendedId": true,
"isFd": true,
"bitrateSwitch": true,
"dataInHex": "aa bb cc dd ee ff aa bb aa bb cc d ee ff"
},
{
"method": "setLightLevel",
"nodeId": 5,
"dataLength": 2,
"dataByteorder": "little",
"dataBefore": "00AA"
},
{
"method": "setSpeed",
"nodeId": 16,
"dataAfter": "0102",
"dataExpression": "userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"
}
]
}
]
}

View File

@@ -0,0 +1,33 @@
{
"name": "Custom serial connector",
"devices": [
{
"name": "CustomSerialDevice1",
"type": "default",
"port": "/dev/ttyUSB0",
"baudrate": 9600,
"converter": "CustomSerialUplinkConverter",
"telemetry": [
{
"type": "byte",
"key": "humidity",
"untilDelimiter": "\r"
}
],
"attributes":[
{
"key": "SerialNumber",
"type": "string",
"fromByte": 4,
"toByte": -1
}
],
"attributeUpdates": [
{
"attributeOnThingsBoard": "attr1",
"stringToDevice": "value = ${attr1}\n"
}
]
}
]
}

View File

@@ -0,0 +1,77 @@
[loggers]
keys=root, service, connector, converter, tb_connection, storage, extension
[handlers]
keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler
[formatters]
keys=LogFormatter
[logger_root]
level=ERROR
handlers=consoleHandler
[logger_connector]
level=INFO
handlers=connectorHandler
formatter=LogFormatter
qualname=connector
[logger_storage]
level=INFO
handlers=storageHandler
formatter=LogFormatter
qualname=storage
[logger_tb_connection]
level=INFO
handlers=tb_connectionHandler
formatter=LogFormatter
qualname=tb_connection
[logger_service]
level=INFO
handlers=serviceHandler
formatter=LogFormatter
qualname=service
[logger_converter]
level=INFO
handlers=converterHandler
formatter=LogFormatter
qualname=converter
[logger_extension]
level=INFO
handlers=connectorHandler
formatter=LogFormatter
qualname=extension
[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=LogFormatter
args=(sys.stdout,)
[handler_connectorHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/connector.log", "d", 1, 7,)
[handler_storageHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/storage.log", "d", 1, 7,)
[handler_serviceHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/service.log", "d", 1, 7,)
[handler_converterHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/converter.log", "d", 1, 3,)
[handler_extensionHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/extension.log", "d", 1, 3,)
[handler_tb_connectionHandler]
level=INFO
class=logging.handlers.TimedRotatingFileHandler
formatter=LogFormatter
args=("./logs/tb_connection.log", "d", 1, 3,)
[formatter_LogFormatter]
format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s"
datefmt="%Y-%m-%d %H:%M:%S"

View File

@@ -0,0 +1,169 @@
{
"server": {
"type": "tcp",
"host": "127.0.0.1",
"port": 5020,
"timeout": 35,
"method": "socket",
"byteOrder": "BIG",
"devices": [
{
"unitId": 1,
"deviceName": "Temp Sensor",
"attributesPollPeriod": 5000,
"timeseriesPollPeriod": 5000,
"sendDataOnlyOnChange": true,
"attributes": [
{
"tag": "string_read",
"type": "string",
"functionCode": 4,
"objectsCount": 4,
"address": 1
},
{
"tag": "bits_read",
"type": "bits",
"functionCode": 4,
"objectsCount": 1,
"address": 5
},
{
"tag": "8int_read",
"type": "8int",
"functionCode": 4,
"objectsCount": 1,
"address": 6
},
{
"tag": "16int_read",
"type": "16int",
"functionCode": 4,
"objectsCount": 1,
"address": 7
},
{
"tag": "32int_read_divider",
"type": "32int",
"functionCode": 4,
"objectsCount": 2,
"address": 8,
"divider": 10
},
{
"tag": "8int_read_multiplier",
"type": "8int",
"functionCode": 4,
"objectsCount": 1,
"address": 10,
"multiplier": 10
},
{
"tag": "32int_read",
"type": "32int",
"functionCode": 4,
"objectsCount": 2,
"address": 11
},
{
"tag": "64int_read",
"type": "64int",
"functionCode": 4,
"objectsCount": 4,
"address": 13
}
],
"timeseries": [
{
"tag": "8uint_read",
"type": "8uint",
"functionCode": 4,
"objectsCount": 1,
"address": 17
},
{
"tag": "16uint_read",
"type": "16uint",
"functionCode": 4,
"objectsCount": 2,
"address": 18
},
{
"tag": "32uint_read",
"type": "32uint",
"functionCode": 4,
"objectsCount": 4,
"address": 20
},
{
"tag": "64uint_read",
"type": "64uint",
"functionCode": 4,
"objectsCount": 1,
"address": 24
},
{
"tag": "16float_read",
"type": "16float",
"functionCode": 4,
"objectsCount": 1,
"address": 25
},
{
"tag": "32float_read",
"type": "32float",
"functionCode": 4,
"objectsCount": 2,
"address": 26
},
{
"tag": "64float_read",
"type": "64float",
"functionCode": 4,
"objectsCount": 4,
"address": 28
}
],
"attributeUpdates": [
{
"tag": "shared_attribute_write",
"type": "32int",
"functionCode": 6,
"objectsCount": 2,
"address": 29
}
],
"rpc": [
{
"tag": "setValue",
"type": "bits",
"functionCode": 5,
"objectsCount": 1,
"address": 31
},
{
"tag": "getValue",
"type": "bits",
"functionCode": 1,
"objectsCount": 1,
"address": 31
},
{
"tag": "setCPUFanSpeed",
"type": "32int",
"functionCode": 16,
"objectsCount": 2,
"address": 33
},
{
"tag":"getCPULoad",
"type": "32int",
"functionCode": 4,
"objectsCount": 2,
"address": 35
}
]
}
]
}
}

View File

@@ -0,0 +1,29 @@
{
"server": {
"name": "Modbus Default Server",
"type": "serial",
"method": "rtu",
"port": "/dev/ttyUSB0",
"baudrate": 19200,
"timeout": 35,
"devices": [
{
"unitId": 1,
"deviceName": "Temp Sensor",
"attributesPollPeriod": 5000,
"timeseriesPollPeriod": 5000,
"sendDataOnlyOnChange": true,
"attributes": [
{
"byteOrder": "BIG",
"tag": "test",
"type": "long",
"functionCode": 4,
"registerCount": 1,
"address": 4
}
]
}
]
}
}

View File

@@ -0,0 +1,132 @@
{
"broker": {
"name":"Default Local Broker",
"host":"127.0.0.1",
"port":1883,
"clientId": "ThingsBoard_gateway",
"security": {
"type": "basic",
"username": "user",
"password": "password"
}
},
"mapping": [
{
"topicFilter": "/sensor/data",
"converter": {
"type": "json",
"deviceNameJsonExpression": "${serialNumber}",
"deviceTypeJsonExpression": "${sensorType}",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
},
{
"type": "string",
"key": "${sensorModel}",
"value": "on"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"topicFilter": "/sensor/+/data",
"converter": {
"type": "json",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
"deviceTypeTopicExpression": "Thermometer",
"timeout": 60000,
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"topicFilter": "/custom/sensors/+",
"converter": {
"type": "custom",
"extension": "CustomMqttUplinkConverter",
"extension-config": {
"temperatureBytes" : 2,
"humidityBytes" : 2,
"batteryLevelBytes" : 1
}
}
}
],
"connectRequests": [
{
"topicFilter": "sensor/connect",
"deviceNameJsonExpression": "${SerialNumber}"
},
{
"topicFilter": "sensor/+/connect",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
}
],
"disconnectRequests": [
{
"topicFilter": "sensor/disconnect",
"deviceNameJsonExpression": "${SerialNumber}"
},
{
"topicFilter": "sensor/+/disconnect",
"deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
}
],
"attributeUpdates": [
{
"deviceNameFilter": "SmartMeter.*",
"attributeFilter": "uploadFrequency",
"topicExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
"responseTimeout": 10000,
"valueExpression": "${params}"
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"valueExpression": "${params}"
}
]
}

View File

@@ -0,0 +1,54 @@
{
"connection": {
"str": "Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",
"attributes": {
"autocommit": true,
"timeout": 0
},
"encoding": "utf-8",
"decoding": {
"char": "utf-8",
"wchar": "utf-8",
"metadata": "utf-16le"
},
"reconnect": true,
"reconnectPeriod": 60
},
"pyodbc": {
"pooling": false
},
"polling": {
"query": "SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",
"period": 10,
"iterator": {
"column": "ts",
"query": "SELECT MIN(ts) - 1 FROM ts_kv",
"persistent": false
}
},
"mapping": {
"device": {
"type": "postgres",
"name": "'ODBC ' + entity_id"
},
"sendDataOnlyOnChange": false,
"attributes": "*",
"timeseries": [
{
"name": "value",
"value": "[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]"
}
]
},
"serverSideRpc": {
"enableUnknownRpc": false,
"overrideRpcConfig": true,
"methods": [
"procedureOne",
{
"name": "procedureTwo",
"args": [ "One", 2, 3.0 ]
}
]
}
}

View File

@@ -0,0 +1,49 @@
{
"server": {
"name": "OPC-UA Default Server",
"url": "localhost:4840/freeopcua/server/",
"timeoutInMillis": 5000,
"scanPeriodInMillis": 5000,
"disableSubscriptions":false,
"subCheckPeriodInMillis": 100,
"showMap": false,
"security": "Basic128Rsa15",
"identity": {
"type": "anonymous"
},
"mapping": [
{
"deviceNodePattern": "Root\\.Objects\\.Device1",
"deviceNamePattern": "Device ${Root\\.Objects\\.Device1\\.serialNumber}",
"attributes": [
{
"key": "temperature °C",
"path": "${ns=2;i=5}"
}
],
"timeseries": [
{
"key": "humidity",
"path": "${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"
},
{
"key": "batteryLevel",
"path": "${Battery\\.batteryLevel}"
}
],
"rpc_methods": [
{
"method": "multiply",
"arguments": [2, 4]
}
],
"attributes_updates": [
{
"attributeOnThingsBoard": "deviceName",
"attributeOnDevice": "Root\\.Objects\\.Device1\\.serialNumber"
}
]
}
]
}
}

View File

@@ -0,0 +1,146 @@
"job": "leader"
},
"allowRedirects": true,
"timeout": 0.5,
"scanPeriod": 5,
"converter": {
"type": "json",
"deviceNameJsonExpression": "SD8500",
"deviceTypeJsonExpression": "SD",
"attributes": [
{
"key": "serialNumber",
"type": "string",
"value": "${serial}"
}
],
"telemetry": [
{
"key": "Maintainer",
"type": "string",
"value": "${Developer}"
}
]
}
},
{
"url": "get_info",
"httpMethod": "GET",
"httpHeaders": {
"ACCEPT": "application/json"
},
"allowRedirects": true,
"timeout": 0.5,
"scanPeriod": 100,
"converter": {
"type": "custom",
"deviceNameJsonExpression": "SD8500",
"deviceTypeJsonExpression": "SD",
"extension": "CustomRequestUplinkConverter",
"extension-config": [
{
"key": "Totaliser",
"type": "float",
"fromByte": 0,
"toByte": 4,
"byteorder": "big",
"signed": true,
"multiplier": 1
},
{
"key": "Flow",
"type": "int",
"fromByte": 4,
"toByte": 6,
"byteorder": "big",
"signed": true,
"multiplier": 0.01
},
{
"key": "Temperature",
"type": "int",
"fromByte": 8,
"toByte": 10,
"byteorder": "big",
"signed": true,
"multiplier": 0.01
},
{
"key": "Pressure",
"type": "int",
"fromByte": 12,
"toByte": 14,
"byteorder": "big",
"signed": true,
"multiplier": 0.01
},
{
"key": "deviceStatus",
"type": "int",
"byteAddress": 15,
"fromBit": 4,
"toBit": 8,
"byteorder": "big",
"signed": false
},
{
"key": "OUT2",
"type": "int",
"byteAddress": 15,
"fromBit": 1,
"toBit": 2,
"byteorder": "big"
},
{
"key": "OUT1",
"type": "int",
"byteAddress": 15,
"fromBit": 0,
"toBit": 1,
"byteorder": "big"
}
]
}
}
],
"attributeUpdates": [
{
"httpMethod": "POST",
"httpHeaders": {
"CONTENT-TYPE": "application/json"
},
"timeout": 0.5,
"tries": 3,
"allowRedirects": true,
"deviceNameFilter": "SD.*",
"attributeFilter": "send_data",
"requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTimeout": 1,
"httpMethod": "GET",
"valueExpression": "${params}",
"timeout": 0.5,
"tries": 3,
"httpHeaders": {
"Content-Type": "application/json"
}
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"httpMethod": "POST",
"valueExpression": "${params}",
"httpHeaders": {
"Content-Type": "application/json"
}
}
]
}

View File

@@ -0,0 +1,152 @@
{
"host": "127.0.0.1",
"port": "5000",
"mapping":[
{
"endpoint": "/device1",
"HTTPMethods": [
"POST"
],
"security":
{
"type": "basic",
"username": "user",
"password": "passwd"
},
"converter": {
"type": "json",
"deviceNameExpression": "Device ${name}",
"deviceTypeExpression": "default",
"attributes": [
{
"type": "string",
"key": "model",
"value": "${sensorModel}"
}
],
"timeseries": [
{
"type": "double",
"key": "${sensorModel}",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"endpoint": "/anon1",
"HTTPMethods": [
"GET",
"POST"
],
"security":
{
"type": "anonymous"
},
"converter": {
"type": "json",
"deviceNameExpression": "Device 2",
"deviceTypeExpression": "default",
"attributes": [
{
"type": "string",
"key": "model",
"value": "Model2"
}
],
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
},
{
"endpoint": "/anon2",
"HTTPMethods": [
"POST"
],
"security":
{
"type": "anonymous"
},
"converter": {
"type": "custom",
"deviceNameExpression": "SuperAnonDevice",
"deviceTypeExpression": "default",
"extension": "CustomRestUplinkConverter",
"extension-config": [
{
"key": "Totaliser",
"datatype": "float",
"fromByte": 0,
"toByte": 4,
"byteorder": "big",
"signed": true,
"multiplier": 1
}]
}
}
],
"attributeUpdates": [
{
"HTTPMethod": "POST",
"SSLVerify": false,
"httpHeaders": {
"CONTENT-TYPE": "application/json"
},
"security": {
"type": "basic",
"username": "user",
"password": "passwd"
},
"timeout": 0.5,
"tries": 3,
"allowRedirects": true,
"deviceNameFilter": ".*REST$",
"attributeFilter": "data",
"requestUrlExpression": "sensor/${deviceName}/${attributeKey}",
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
}
],
"serverSideRpc": [
{
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestUrlExpression": "http://127.0.0.1:5001/${deviceName}",
"responseTimeout": 1,
"HTTPMethod": "GET",
"valueExpression": "${params}",
"timeout": 0.5,
"tries": 3,
"httpHeaders": {
"Content-Type": "application/json"
},
"security": {
"type": "anonymous"
}
},
{
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestUrlExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"HTTPMethod": "POST",
"valueExpression": "${params}",
"httpHeaders": {
"Content-Type": "application/json"
}
}
]
}

View File

@@ -0,0 +1,138 @@
{
"devices": [
{
"deviceName": "SNMP router",
"deviceType": "snmp",
"ip": "snmp.live.gambitcommunications.com",
"port": 161,
"pollPeriod": 5000,
"community": "public",
"attributes": [
{
"key": "ReceivedFromGet",
"method": "get",
"oid": "1.3.6.1.2.1.1.1.0",
"timeout": 6
},
{
"key": "ReceivedFromMultiGet",
"method": "multiget",
"oid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.1.2.1.1.2.0"
],
"timeout": 6
},
{
"key": "ReceivedFromGetNext",
"method": "getnext",
"oid": "1.3.6.1.2.1.1.1.0",
"timeout": 6
},
{
"key": "ReceivedFromMultiWalk",
"method": "multiwalk",
"oid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.0.1.2.1"
]
},
{
"key": "ReceivedFromBulkWalk",
"method": "bulkwalk",
"oid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.1.2.1.1.2.0"
]
},
{
"key": "ReceivedFromBulkGet",
"method": "bulkget",
"scalarOid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.1.2.1.1.2.0"
],
"repeatingOid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.1.2.1.1.2.0"
],
"maxListSize": 10
}
],
"telemetry": [
{
"key": "ReceivedFromWalk",
"community": "private",
"method": "walk",
"oid": "1.3.6.1.2.1.1.1.0"
},
{
"key": "ReceivedFromTable",
"method": "table",
"oid": "1.3.6.1.2.1.1"
}
],
"attributeUpdateRequests": [
{
"attributeFilter": "dataToSet",
"method": "set",
"oid": "1.3.6.1.2.1.1.1.0"
},
{
"attributeFilter": "dataToMultiSet",
"method": "multiset",
"mappings": {
"1.2.3": "10",
"2.3.4": "${attribute}"
}
}
],
"serverSideRpcRequests": [
{
"requestFilter": "setData",
"method": "set",
"oid": "1.3.6.1.2.1.1.1.0"
},
{
"requestFilter": "multiSetData",
"method": "multiset"
},
{
"requestFilter": "getData",
"method": "get",
"oid": "1.3.6.1.2.1.1.1.0"
},
{
"requestFilter": "runBulkWalk",
"method": "bulkwalk",
"oid": [
"1.3.6.1.2.1.1.1.0",
"1.3.6.1.2.1.1.2.0"
]
}
]
},
{
"deviceName": "SNMP router",
"deviceType": "snmp",
"ip": "127.0.0.1",
"pollPeriod": 5000,
"community": "public",
"converter": "CustomSNMPConverter",
"attributes": [
{
"key": "ReceivedFromGetWithCustomConverter",
"method": "get",
"oid": "1.3.6.1.2.1.1.1.0"
}
],
"telemetry": [
{
"key": "ReceivedFromTableWithCustomConverter",
"method": "table",
"oid": "1.3.6.1.2.1.1.1.0"
}
]
}
]
}

View File

@@ -0,0 +1,66 @@
thingsboard:
host: demo.thingsboard.io
port: 1883
remoteConfiguration: false
security:
accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE
storage:
type: memory
read_records_count: 100
max_records_count: 100000
# type: file
# data_folder_path: ./data/
# max_file_count: 10
# max_read_records_count: 10
# max_records_per_file: 10000
connectors:
-
name: MQTT Broker Connector
type: mqtt
configuration: mqtt.json
# -
# name: Modbus Connector
# type: modbus
# configuration: modbus.json
#
# -
# name: Modbus Connector
# type: modbus
# configuration: modbus_serial.json
#
# -
# name: OPC-UA Connector
# type: opcua
# configuration: opcua.json
#
# -
# name: BLE Connector
# type: ble
# configuration: ble.json
#
# -
# name: REQUEST Connector
# type: request
# configuration: request.json
#
# -
# name: CAN Connector
# type: can
# configuration: can.json
#
# -
# name: BACnet Connector
# type: bacnet
# configuration: bacnet.json
#
# -
# name: ODBC Connector
# type: odbc
# configuration: odbc.json
#
# -
# name: Custom Serial Connector
# type: serial
# configuration: custom_serial.json
# class: CustomSerialConnector

View File

@@ -0,0 +1,13 @@
[Unit]
Description = Systemd service for Thingsboard Gateway
After = network.target
[Service]
ExecStart = /usr/bin/python3 /usr/bin/thingsboard-gateway
ExecStop = /bin/kill -INT $MAINPID
ExecReload = /bin/kill -TERM $MAINPID
Restart = always
Type = simple
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,67 @@
SUMMARY = "Open-source IoT platform for data collection, processing, visualization, and device management"
DESCRIPTION = "\
The Thingsboard IoT Gateway is an open-source solution that allows you \
to integrate devices connected to legacy and third-party systems with Thingsboard."
HOMEPAGE = "https://thingsboard.io/"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRC_URI[sha256sum] = "06fdb1000cb3f25ff78a2441c0e0f9e5bb2abec3eff907d57f58c1709c110217"
inherit pypi setuptools3
PYPI_PACKAGE = "thingsboard-gateway"
RDEPENDS:${PN} += " python3-jsonpath-rw \
python3-regex \
python3-paho-mqtt \
python3-pyyaml \
python3-simplejson \
python3-requests \
python3-pip \
python3-pyrsistent \
"
SRC_URI += "file://bacnet.json \
file://ble.json \
file://can.json \
file://custom_serial.json \
file://modbus.json \
file://modbus_serial.json \
file://mqtt.json \
file://opcua.json \
file://odbc.json \
file://request.json \
file://rest.json \
file://snmp.json \
file://tb_gateway.yaml \
file://logs.conf \
file://thingsboard-gateway.service \
"
inherit systemd
SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE:${PN} = "thingsboard-gateway.service"
FILES:${PN} += "/etc \
/lib \
/usr \
"
do_install:append(){
install -d ${D}${sysconfdir}/thingsboard-gateway/config
for file in $(find ${WORKDIR} -maxdepth 1 -type f -name *.json); do
install -m 0644 "$file" ${D}${sysconfdir}/thingsboard-gateway/config
done
install -m 0644 ${WORKDIR}/tb_gateway.yaml ${D}${sysconfdir}/thingsboard-gateway/config
install -m 0644 ${WORKDIR}/logs.conf ${D}${sysconfdir}/thingsboard-gateway/config
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/thingsboard-gateway.service ${D}${systemd_system_unitdir}/thingsboard-gateway.service
}

View File

@@ -0,0 +1,24 @@
RDEPENDS:packagegroup-meta-oe-devtools += "\
python3-distutils-extra \
rwmem \
mongodb \
"
RDEPENDS:packagegroup-meta-oe-devtools:remove:riscv64 = "mongodb"
RDEPENDS:packagegroup-meta-oe-devtools:remove:riscv32 = "mongodb"
RDEPENDS:packagegroup-meta-oe-devtools:remove:mipsarch = "mongodb"
RDEPENDS:packagegroup-meta-oe-devtools:remove:powerpc = "mongodb"
RDEPENDS:packagegroup-meta-oe-connectivity += "\
lirc \
"
RDEPENDS:packagegroup-meta-oe-extended += "\
lcdproc \
mozjs-102 \
"
RDEPENDS:packagegroup-meta-oe-support += "\
nvmetcli \
smem \
"
RDEPENDS:packagegroup-meta-oe-extended:remove:libc-musl = "lcdproc"

View File

@@ -0,0 +1,448 @@
From 3690dc5f567906c45f057509305fbaa021b33adb Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Tue, 15 Sep 2020 12:35:46 -0700
Subject: [PATCH] Fix compilation with -fno-common.
Making all other archs consistent with IA64 which should not have this problem.
Also move the FIXME to the correct place.
Also add some minimum comments about this...
Upstream-Status: Backport [https://github.com/libunwind/libunwind/pull/166/commits/29e17d8d2ccbca07c423e3089a6d5ae8a1c9cb6e]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/third_party/unwind/dist/src/aarch64/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/arm/Ginit.c | 15 +++++++--------
.../src/coredump/_UPT_get_dyn_info_list_addr.c | 5 +++++
src/third_party/unwind/dist/src/hppa/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/ia64/Ginit.c | 1 +
.../unwind/dist/src/mi/Gfind_dynamic_proc_info.c | 1 +
src/third_party/unwind/dist/src/mips/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/ppc32/Ginit.c | 11 +++++++----
src/third_party/unwind/dist/src/ppc64/Ginit.c | 11 +++++++----
.../dist/src/ptrace/_UPT_get_dyn_info_list_addr.c | 5 +++++
src/third_party/unwind/dist/src/s390x/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/sh/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/tilegx/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/x86/Ginit.c | 15 +++++++--------
src/third_party/unwind/dist/src/x86_64/Ginit.c | 15 +++++++--------
15 files changed, 89 insertions(+), 80 deletions(-)
diff --git a/src/third_party/unwind/dist/src/aarch64/Ginit.c b/src/third_party/unwind/dist/src/aarch64/Ginit.c
index dec235c829..35389762f2 100644
--- a/src/third_party/unwind/dist/src/aarch64/Ginit.c
+++ b/src/third_party/unwind/dist/src/aarch64/Ginit.c
@@ -61,13 +61,6 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -78,7 +71,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/arm/Ginit.c b/src/third_party/unwind/dist/src/arm/Ginit.c
index 2720d063a2..0bac0d72da 100644
--- a/src/third_party/unwind/dist/src/arm/Ginit.c
+++ b/src/third_party/unwind/dist/src/arm/Ginit.c
@@ -57,18 +57,17 @@ tdep_uc_addr (unw_tdep_context_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
index 0d11905566..739ed0569b 100644
--- a/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
+++ b/src/third_party/unwind/dist/src/coredump/_UPT_get_dyn_info_list_addr.c
@@ -74,6 +74,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
#else
+/* XXX fix me: there is currently no way to locate the dyn-info list
+ by a remote unwinder. On ia64, this is done via a special
+ unwind-table entry. Perhaps something similar can be done with
+ DWARF2 unwind info. */
+
static inline int
get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
int *countp)
diff --git a/src/third_party/unwind/dist/src/hppa/Ginit.c b/src/third_party/unwind/dist/src/hppa/Ginit.c
index 461e4b93da..265455a68c 100644
--- a/src/third_party/unwind/dist/src/hppa/Ginit.c
+++ b/src/third_party/unwind/dist/src/hppa/Ginit.c
@@ -64,13 +64,6 @@ _Uhppa_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -81,7 +74,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/ia64/Ginit.c b/src/third_party/unwind/dist/src/ia64/Ginit.c
index b09a2ad57c..8601bb3ca8 100644
--- a/src/third_party/unwind/dist/src/ia64/Ginit.c
+++ b/src/third_party/unwind/dist/src/ia64/Ginit.c
@@ -68,6 +68,7 @@ get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
if (!_U_dyn_info_list_addr)
return -UNW_ENOINFO;
#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
*dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
index 98d3501286..2e7c62e5e8 100644
--- a/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
+++ b/src/third_party/unwind/dist/src/mi/Gfind_dynamic_proc_info.c
@@ -49,6 +49,7 @@ local_find_proc_info (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
return -UNW_ENOINFO;
#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
list = (unw_dyn_info_list_t *) (uintptr_t) _U_dyn_info_list_addr ();
for (di = list->first; di; di = di->next)
if (ip >= di->start_ip && ip < di->end_ip)
diff --git a/src/third_party/unwind/dist/src/mips/Ginit.c b/src/third_party/unwind/dist/src/mips/Ginit.c
index 3df170c754..bf7a8f5a8f 100644
--- a/src/third_party/unwind/dist/src/mips/Ginit.c
+++ b/src/third_party/unwind/dist/src/mips/Ginit.c
@@ -69,13 +69,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -86,7 +79,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/ppc32/Ginit.c b/src/third_party/unwind/dist/src/ppc32/Ginit.c
index ba302448a3..7b45455807 100644
--- a/src/third_party/unwind/dist/src/ppc32/Ginit.c
+++ b/src/third_party/unwind/dist/src/ppc32/Ginit.c
@@ -91,9 +91,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -104,7 +101,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/ppc64/Ginit.c b/src/third_party/unwind/dist/src/ppc64/Ginit.c
index 4c88cd6e77..7bfb395a79 100644
--- a/src/third_party/unwind/dist/src/ppc64/Ginit.c
+++ b/src/third_party/unwind/dist/src/ppc64/Ginit.c
@@ -95,9 +95,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -108,7 +105,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
index cc5ed04418..16671d453e 100644
--- a/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
+++ b/src/third_party/unwind/dist/src/ptrace/_UPT_get_dyn_info_list_addr.c
@@ -71,6 +71,11 @@ get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
#else
+/* XXX fix me: there is currently no way to locate the dyn-info list
+ by a remote unwinder. On ia64, this is done via a special
+ unwind-table entry. Perhaps something similar can be done with
+ DWARF2 unwind info. */
+
static inline int
get_list_addr (unw_addr_space_t as, unw_word_t *dil_addr, void *arg,
int *countp)
diff --git a/src/third_party/unwind/dist/src/s390x/Ginit.c b/src/third_party/unwind/dist/src/s390x/Ginit.c
index f0886ac933..db01743c06 100644
--- a/src/third_party/unwind/dist/src/s390x/Ginit.c
+++ b/src/third_party/unwind/dist/src/s390x/Ginit.c
@@ -50,8 +50,6 @@ static struct unw_addr_space local_addr_space;
unw_addr_space_t unw_local_addr_space = &local_addr_space;
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
static inline void *
uc_addr (ucontext_t *uc, int reg)
{
@@ -75,11 +73,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -90,7 +83,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/sh/Ginit.c b/src/third_party/unwind/dist/src/sh/Ginit.c
index 52988a721e..9fe96d2bd4 100644
--- a/src/third_party/unwind/dist/src/sh/Ginit.c
+++ b/src/third_party/unwind/dist/src/sh/Ginit.c
@@ -58,13 +58,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -75,7 +68,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/tilegx/Ginit.c b/src/third_party/unwind/dist/src/tilegx/Ginit.c
index 7564a558be..925e641324 100644
--- a/src/third_party/unwind/dist/src/tilegx/Ginit.c
+++ b/src/third_party/unwind/dist/src/tilegx/Ginit.c
@@ -64,13 +64,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -81,7 +74,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) (intptr_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/x86/Ginit.c b/src/third_party/unwind/dist/src/x86/Ginit.c
index f6b8dc27d4..3cec74a216 100644
--- a/src/third_party/unwind/dist/src/x86/Ginit.c
+++ b/src/third_party/unwind/dist/src/x86/Ginit.c
@@ -54,13 +54,6 @@ tdep_uc_addr (ucontext_t *uc, int reg)
# endif /* UNW_LOCAL_ONLY */
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -71,7 +64,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
diff --git a/src/third_party/unwind/dist/src/x86_64/Ginit.c b/src/third_party/unwind/dist/src/x86_64/Ginit.c
index 6161da6401..5c4e4269a6 100644
--- a/src/third_party/unwind/dist/src/x86_64/Ginit.c
+++ b/src/third_party/unwind/dist/src/x86_64/Ginit.c
@@ -49,13 +49,6 @@ static struct unw_addr_space local_addr_space;
unw_addr_space_t unw_local_addr_space = &local_addr_space;
-HIDDEN unw_dyn_info_list_t _U_dyn_info_list;
-
-/* XXX fix me: there is currently no way to locate the dyn-info list
- by a remote unwinder. On ia64, this is done via a special
- unwind-table entry. Perhaps something similar can be done with
- DWARF2 unwind info. */
-
static void
put_unwind_info (unw_addr_space_t as, unw_proc_info_t *proc_info, void *arg)
{
@@ -66,7 +59,13 @@ static int
get_dyn_info_list_addr (unw_addr_space_t as, unw_word_t *dyn_info_list_addr,
void *arg)
{
- *dyn_info_list_addr = (unw_word_t) &_U_dyn_info_list;
+#ifndef UNW_LOCAL_ONLY
+# pragma weak _U_dyn_info_list_addr
+ if (!_U_dyn_info_list_addr)
+ return -UNW_ENOINFO;
+#endif
+ // Access the `_U_dyn_info_list` from `LOCAL_ONLY` library, i.e. libunwind.so.
+ *dyn_info_list_addr = _U_dyn_info_list_addr ();
return 0;
}
--
2.28.0

View File

@@ -0,0 +1,33 @@
From 81eabea4e4da55cddfe8bcfcbc3759fa90948254 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 3 Mar 2023 14:13:29 -0800
Subject: [PATCH] Fix type mismatch on 32bit arches
std::set::size returns an unsigned integral type.
std::max call therefore gets (unsigned int, unsigned long) here.
Type of both arguments is not same, so its ambigous
and there is no matching std::max implementation for mismatching
arguments. std::max expects both input variables to be of
same type, max(int,int) etc..
Fixes
src/mongo/util/processinfo_linux.cpp:424:16: error: no matching function for call to 'max'
return std::max(socketIds.size(), 1ul);
Upstream-Status: Submitted [https://jira.mongodb.org/browse/SERVER-74633]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/util/processinfo_linux.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/src/mongo/util/processinfo_linux.cpp
+++ b/src/mongo/util/processinfo_linux.cpp
@@ -421,7 +421,7 @@ public:
// On ARM64, the "physical id" field is unpopulated, causing there to be 0 sockets found. In
// this case, we default to 1.
- return std::max(socketIds.size(), 1ul);
+ return std::max(static_cast<unsigned long>(socketIds.size()), 1ul);
}
/**

View File

@@ -0,0 +1,35 @@
From 97914aeab52b4d0ea0ab9e5ff985a1c5cddb0fa1 Mon Sep 17 00:00:00 2001
From: Vincent Prince <vincent.prince.fr@gmail.com>
Date: Mon, 16 Sep 2019 13:41:39 +0200
Subject: [PATCH 06/10] IntelRDFPMathLib20U1: Check for __DEFINED_wchar_t
This is defined by musl if wchar_t is already defined
avoids errors like
src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h:46:15: error: typedef redefinition with different types
('int' vs 'unsigned int')
typedef int wchar_t;
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h b/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
index 56775bc..be96a85 100755
--- a/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
+++ b/src/third_party/IntelRDFPMathLib20U1/LIBRARY/src/bid_functions.h
@@ -43,7 +43,7 @@
#if 0 // MongoDB Modification -- just `#include <stddef.h>`
// Fix system header issue on Sun solaris and define required type by ourselves
-#if !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__QNX__)
+#if !defined(_WCHAR_T) && !defined(_WCHAR_T_DEFINED) && !defined(__QNX__) && !defined(__DEFINED_wchar_t)
typedef int wchar_t;
#endif
#else
--
2.7.4

View File

@@ -0,0 +1,31 @@
From ca004968b8d2149f72d4edcfe029489a8c5e10ca Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 23 Sep 2019 12:31:31 -0700
Subject: [PATCH] Mark one of strerror_r implementation glibc specific
glibc has two incompatible strerror_r definitions, one of them is
specific to glibc, mark this one so
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/util/errno_util.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mongo/util/errno_util.cpp b/src/mongo/util/errno_util.cpp
index 564c0071ea..4f7e1d3a38 100644
--- a/src/mongo/util/errno_util.cpp
+++ b/src/mongo/util/errno_util.cpp
@@ -61,7 +61,7 @@ std::string errnoWithDescription(int errNumber) {
char buf[kBuflen];
char* msg{nullptr};
-#if defined(__GNUC__) && defined(_GNU_SOURCE) && \
+#if defined(__GNUC__) && defined(_GNU_SOURCE) && defined(__GLIBC__) && \
(!defined(__ANDROID_API__) || !(__ANDROID_API__ <= 22)) && !defined(EMSCRIPTEN)
msg = strerror_r(errNumber, buf, kBuflen);
#elif defined(_WIN32)
--
2.23.0

View File

@@ -0,0 +1,33 @@
From 8d035e84c2edb44461ef4df9cdef0a6dfce0a1d7 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 24 Aug 2018 12:56:22 -0700
Subject: [PATCH 07/10] Support deprecated resolver functions
Needed for musl libc
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/util/dns_query_posix-impl.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/mongo/util/dns_query_posix-impl.h b/src/mongo/util/dns_query_posix-impl.h
index a5e3629..fb29d2d 100644
--- a/src/mongo/util/dns_query_posix-impl.h
+++ b/src/mongo/util/dns_query_posix-impl.h
@@ -54,6 +54,12 @@
#include <boost/noncopyable.hpp>
+#ifndef res_ninit
+#define res_nclose(arg)
+#define res_ninit(arg) res_init()
+#define res_nsearch(sta, nam, clas, typ, ans, alen) res_search(nam, clas, typ, ans, alen)
+#endif
+
namespace mongo {
namespace dns {
// The anonymous namespace is safe, in this header, as it is not really a header. It is only used
--
2.7.4

View File

@@ -0,0 +1,55 @@
From 8295bb6a60896fed54d6450bca091aea4eea4fb2 Mon Sep 17 00:00:00 2001
From: Vincent Prince <vincent.prince.fr@gmail.com>
Date: Mon, 16 Sep 2019 13:21:44 +0200
Subject: [PATCH 01/10] Tell scons to use build settings from environment
variables
Signed-off-by: Sven Ebenfeld <sven.ebenfeld@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
SConstruct | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/SConstruct b/SConstruct
index 89c044ab78..2044c0ddb8 100644
--- a/SConstruct
+++ b/SConstruct
@@ -593,6 +593,7 @@ def variable_arch_converter(val):
'amd64': 'x86_64',
'emt64': 'x86_64',
'x86': 'i386',
+ 'aarch64': 'arm64',
}
val = val.lower()
@@ -723,7 +724,8 @@ env_vars.Add(
)
env_vars.Add('CC',
- help='Select the C compiler to use')
+ help='Select the C compiler to use',
+ default=os.getenv('CC'))
env_vars.Add('CCFLAGS',
help='Sets flags for the C and C++ compiler',
@@ -743,7 +745,8 @@ env_vars.Add('CPPPATH',
converter=variable_shlex_converter)
env_vars.Add('CXX',
- help='Select the C++ compiler to use')
+ help='Select the C++ compiler to use',
+ default=os.getenv('CXX'))
env_vars.Add('CXXFLAGS',
help='Sets flags for the C++ compiler',
@@ -1127,6 +1130,7 @@ if get_option('build-tools') == 'next' or get_option('ninja') == 'next':
SCons.Tool.DefaultToolpath.insert(0, os.path.abspath('site_scons/site_tools/next'))
env = Environment(variables=env_vars, **envDict)
+env.PrependENVPath('PATH', os.getenv('PATH'))
# Only print the spinner if stdout is a tty
if sys.stdout.isatty():
--
2.24.0

View File

@@ -0,0 +1,40 @@
From f9b55f5a1fab85bf73c95e6372779d6f50f75e84 Mon Sep 17 00:00:00 2001
From: jzmaddock <john@johnmaddock.co.uk>
Date: Mon, 11 Jul 2022 18:26:07 +0100
Subject: [PATCH] The std lib unary/binary_function base classes are
deprecated/removed from libcpp15. Fixes
https://github.com/boostorg/container_hash/issues/24.
Upstream-Status: Backport [https://github.com/boostorg/config/pull/440/commits/f0af4a9184457939b89110795ae2d293582c5f66]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/third_party/boost-1.70.0/boost/config/stdlib/libcpp.hpp | 9 +++++++++
1 file changed, 9 insertions(+)
--- a/src/third_party/boost-1.70.0/boost/config/stdlib/libcpp.hpp
+++ b/src/third_party/boost-1.70.0/boost/config/stdlib/libcpp.hpp
@@ -140,4 +140,13 @@
# define BOOST_NO_CXX14_HDR_SHARED_MUTEX
#endif
+#if _LIBCPP_VERSION >= 15000
+//
+// Unary function is now deprecated in C++11 and later:
+//
+#if __cplusplus >= 201103L
+#define BOOST_NO_CXX98_FUNCTION_BASE
+#endif
+#endif
+
// --- end ---
--- a/src/third_party/boost-1.70.0/boost/container_hash/hash.hpp
+++ b/src/third_party/boost-1.70.0/boost/container_hash/hash.hpp
@@ -118,7 +118,7 @@ namespace boost
{
namespace hash_detail
{
-#if defined(_HAS_AUTO_PTR_ETC) && !_HAS_AUTO_PTR_ETC
+#if defined(BOOST_NO_CXX98_FUNCTION_BASE)
template <typename T>
struct hash_base
{

View File

@@ -0,0 +1,41 @@
From 6332823f9fdcb571305b716330e67d0b38810868 Mon Sep 17 00:00:00 2001
From: Vincent Prince <vincent.prince.fr@gmail.com>
Date: Mon, 16 Sep 2019 13:30:13 +0200
Subject: [PATCH 03/10] Use __GLIBC__ to control use of gnu_get_libc_version
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/mongo/util/processinfo_linux.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/mongo/util/processinfo_linux.cpp b/src/mongo/util/processinfo_linux.cpp
index a968c54727..0d8b8874e2 100644
--- a/src/mongo/util/processinfo_linux.cpp
+++ b/src/mongo/util/processinfo_linux.cpp
@@ -44,10 +44,10 @@
#include <unistd.h>
#ifdef __BIONIC__
#include <android/api-level.h>
-#elif __UCLIBC__
-#include <features.h>
-#else
+#elif defined(__GLIBC__) && !defined(__UCLIBC__)
#include <gnu/libc-version.h>
+#else
+#include <features.h>
#endif
#include <boost/filesystem.hpp>
@@ -617,7 +617,7 @@ void ProcessInfo::SystemInfo::collectSystemInfo() {
std::stringstream ss;
ss << "uClibc-" << __UCLIBC_MAJOR__ << "." << __UCLIBC_MINOR__ << "." << __UCLIBC_SUBLEVEL__;
bExtra.append("libcVersion", ss.str());
-#else
+#elif defined(__GLIBC__)
bExtra.append("libcVersion", gnu_get_libc_version());
#endif
if (!verSig.empty())
--
2.24.0

View File

@@ -0,0 +1,67 @@
From 4e7f15346682482bc2071c7209dec97507d3bc4c Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 2 Sep 2017 10:03:37 -0700
Subject: [PATCH 02/10] Use long long instead of int64_t
Fixes
error: call to member function 'appendNumber' is ambiguous
since this function expects long long as parameter and not int64_t
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/mongo/util/procparser.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/mongo/util/procparser.cpp b/src/mongo/util/procparser.cpp
index 24b9d1e2c9..0f274cfff6 100644
--- a/src/mongo/util/procparser.cpp
+++ b/src/mongo/util/procparser.cpp
@@ -261,7 +261,7 @@ Status parseProcStat(const std::vector<StringData>& keys,
StringData stringValue((*partIt).begin(), (*partIt).end() - (*partIt).begin());
- uint64_t value;
+ long long value;
if (!NumberParser{}(stringValue, &value).isOK()) {
value = 0;
@@ -273,7 +273,7 @@ Status parseProcStat(const std::vector<StringData>& keys,
} else {
StringData stringValue((*partIt).begin(), (*partIt).end() - (*partIt).begin());
- uint64_t value;
+ long long value;
if (!NumberParser{}(stringValue, &value).isOK()) {
value = 0;
@@ -366,7 +366,7 @@ Status parseProcMemInfo(const std::vector<StringData>& keys,
StringData stringValue((*partIt).begin(), (*partIt).end());
- uint64_t value;
+ long long value;
if (!NumberParser{}(stringValue, &value).isOK()) {
value = 0;
@@ -522,7 +522,7 @@ Status parseProcDiskStats(const std::vector<StringData>& disks,
StringData data,
BSONObjBuilder* builder) {
bool foundKeys = false;
- std::vector<uint64_t> stats;
+ std::vector<long long> stats;
stats.reserve(kDiskFieldCount);
using string_split_iterator = boost::split_iterator<StringData::const_iterator>;
@@ -597,7 +597,7 @@ Status parseProcDiskStats(const std::vector<StringData>& disks,
StringData stringValue((*partIt).begin(), (*partIt).end());
- uint64_t value;
+ long long value;
if (!NumberParser{}(stringValue, &value).isOK()) {
value = 0;
--
2.24.0

View File

@@ -0,0 +1,38 @@
From ad37ee80b32a1f740a3197105174d74dff11e4e8 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 13 Apr 2022 13:56:32 -0700
Subject: [PATCH] add explict static_cast<size_t> to maxMemoryUsageBytes
Fixes
src/mongo/db/pipeline/document_source_group.cpp:377:22: error: non-constant-expression cannot be narrowed from type 'long long' to 'size_t' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
maxMemoryUsageBytes ? *maxMemoryUsageBytes
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/mongo/db/pipeline/document_source_group.cpp:377:22: note: insert an explicit cast to silence this issue
maxMemoryUsageBytes ? *maxMemoryUsageBytes
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/db/pipeline/document_source_group.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/mongo/db/pipeline/document_source_group.cpp b/src/mongo/db/pipeline/document_source_group.cpp
index 4a7b48d6cd2..9a6076c6041 100644
--- a/src/mongo/db/pipeline/document_source_group.cpp
+++ b/src/mongo/db/pipeline/document_source_group.cpp
@@ -374,8 +374,8 @@ DocumentSourceGroup::DocumentSourceGroup(const intrusive_ptr<ExpressionContext>&
_usedDisk(false),
_doingMerge(false),
_memoryTracker{pExpCtx->allowDiskUse && !pExpCtx->inMongos,
- maxMemoryUsageBytes ? *maxMemoryUsageBytes
- : internalDocumentSourceGroupMaxMemoryBytes.load()},
+ static_cast<size_t>(maxMemoryUsageBytes ? *maxMemoryUsageBytes
+ : internalDocumentSourceGroupMaxMemoryBytes.load())},
// We spill to disk in debug mode, regardless of allowDiskUse, to stress the system.
_file(!pExpCtx->inMongos && (pExpCtx->allowDiskUse || kDebugBuild)
? std::make_shared<Sorter<Value, Value>::File>(pExpCtx->tempDir + "/" +
--
2.35.2

View File

@@ -0,0 +1,32 @@
From 03047c81b2601362bcf79cae67e06d1fba0a6101 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 2 Mar 2023 20:17:57 -0800
Subject: [PATCH] apply msvc workaround for clang >= 16
This avoids a new Werror found with clang16
boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp:73:31: error: integer value -1 is outside the valid range of values [0, 3] for this enumeration type [-Wenum-constexpr-conversion]
typedef AUX_WRAPPER_INST( BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (value - 1)) ) prior;
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
.../boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/third_party/boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp b/src/third_party/boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp
index 6bc05f7e96e..6bb8d24c9ce 100644
--- a/src/third_party/boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp
+++ b/src/third_party/boost-1.70.0/boost/mpl/aux_/integral_wrapper.hpp
@@ -56,7 +56,7 @@ struct AUX_WRAPPER_NAME
// have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),
// while some other don't like 'value + 1' (Borland), and some don't like
// either
-#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
+#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) || __clang_major__ > 15
private:
BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));
BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));
--
2.39.2

View File

@@ -0,0 +1,29 @@
From 097e8a66930cfa28ac8bfa35f62d0a9ee3b74488 Mon Sep 17 00:00:00 2001
From: Vincent Prince <vincent.prince.fr@gmail.com>
Date: Mon, 16 Sep 2019 13:46:52 +0200
Subject: [PATCH 10/10] asio: Dont use experimental with clang
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/third_party/asio-master/asio/include/asio/detail/string_view.hpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/third_party/asio-master/asio/include/asio/detail/string_view.hpp b/src/third_party/asio-master/asio/include/asio/detail/string_view.hpp
index f09cebc..fa307b5 100644
--- a/src/third_party/asio-master/asio/include/asio/detail/string_view.hpp
+++ b/src/third_party/asio-master/asio/include/asio/detail/string_view.hpp
@@ -33,8 +33,8 @@ namespace asio {
using std::basic_string_view;
using std::string_view;
#elif defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
-using std::experimental::basic_string_view;
-using std::experimental::string_view;
+using std::basic_string_view;
+using std::string_view;
#endif // defined(ASIO_HAS_STD_EXPERIMENTAL_STRING_VIEW)
} // namespace asio
--
2.7.4

View File

@@ -0,0 +1,26 @@
From 5d8218b8a1b5bc71e2a0cf543a000e194daba599 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 29 Jan 2023 17:15:30 -0800
Subject: [PATCH] free_mon: Include missing <cstdint>
gcc 13 moved some includes around and as a result <cstdint> is no
longer transitively included [1]. Explicitly include it
for uintXX_t.
[1] https://gcc.gnu.org/gcc-13/porting_to.html#header-dep-changes
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/db/free_mon/free_mon_options.h | 1 +
1 file changed, 1 insertion(+)
--- a/src/mongo/db/free_mon/free_mon_options.h
+++ b/src/mongo/db/free_mon/free_mon_options.h
@@ -29,6 +29,7 @@
#pragma once
+#include <cstdint>
#include <string>
#include <vector>

View File

@@ -0,0 +1,29 @@
From 383b1dda4800c2514cb31446cd7478692d7d26cf Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 3 Mar 2021 12:43:16 -0800
Subject: [PATCH] include needed c++ header
Fixes
plan_stats.h:214:10: error: 'optional' in namespace 'std' does not name a template type
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/db/exec/plan_stats.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/mongo/db/exec/plan_stats.h b/src/mongo/db/exec/plan_stats.h
index ea75f673b8..0cc9b4636d 100644
--- a/src/mongo/db/exec/plan_stats.h
+++ b/src/mongo/db/exec/plan_stats.h
@@ -31,6 +31,7 @@
#include <cstdint>
#include <cstdlib>
+#include <optional>
#include <string>
#include <vector>
--
2.30.1

View File

@@ -0,0 +1,37 @@
From 5c9e0d0fc9188bab0ae09c9c33df01938b0c1b6c Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 14 Apr 2022 09:25:33 -0700
Subject: [PATCH] server: Adjust the cache alignment assumptions
aarch64 has 256 for hardware_destructive_interference_size and gcc 12
has added a warning to complain about mismatches which results in
static_assert failures
In file included from src/mongo/s/commands/cluster_find_cmd.cpp:39:
src/mongo/db/stats/counters.h:185:47: error: static assertion failed: cache line spill
185 | static_assert(sizeof(decltype(_together)) <= stdx::hardware_constructive_interference_size,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The structure need to ensure true sharing for both the elements
so align it to hardware_constructive_interference_size instead
Upstream-Status: Inappropriate [https://jira.mongodb.org/browse/SERVER-65664]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/db/stats/counters.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
--- a/src/mongo/db/stats/counters.h
+++ b/src/mongo/db/stats/counters.h
@@ -182,8 +182,8 @@ private:
AtomicWord<long long> requests{0};
};
CacheAligned<Together> _together{};
- static_assert(sizeof(decltype(_together)) <= stdx::hardware_constructive_interference_size,
- "cache line spill");
+ static_assert(sizeof(Together) <= stdx::hardware_constructive_interference_size,
+ "cache line spill");
CacheAligned<AtomicWord<long long>> _logicalBytesOut{0};

View File

@@ -0,0 +1,29 @@
From efd79bda1b85a5a4398a71e5ea2bc00ee4b0ea46 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 15 Sep 2020 18:20:27 -0700
Subject: [PATCH] stacktrace: Define ARCH_BITS for x86
stacktrace_somap.cpp:92:33: error: 'ELFCLASSARCH_BITS' was not declared in this scope
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/util/stacktrace_somap.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mongo/util/stacktrace_somap.cpp b/src/mongo/util/stacktrace_somap.cpp
index f7ba66a142..2231948ce8 100644
--- a/src/mongo/util/stacktrace_somap.cpp
+++ b/src/mongo/util/stacktrace_somap.cpp
@@ -83,7 +83,7 @@ void addUnameToSoMap(BSONObjBuilder* soMap) {
#define ARCH_BITS __ELF_NATIVE_CLASS
#elif defined(__x86_64__) || defined(__aarch64__)
#define ARCH_BITS 64
-#elif defined(__arm__)
+#elif defined(__i386__) || defined(__arm__)
#define ARCH_BITS 32
#else
#error Unknown target architecture.
--
2.28.0

View File

@@ -0,0 +1,30 @@
From 0508c1518c2e7c586a231d344e9f93b08507885b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 31 Dec 2022 14:23:40 -0800
Subject: [PATCH] wiredtiger: Avoid using off64_t
off64_t is not available on musl since off_t is already 64bit by
default. Therefore replace using off64_t with off_t
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/third_party/wiredtiger/src/os_posix/os_fs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/third_party/wiredtiger/src/os_posix/os_fs.c b/src/third_party/wiredtiger/src/os_posix/os_fs.c
index 3898eb74343..9ce2d5edb38 100644
--- a/src/third_party/wiredtiger/src/os_posix/os_fs.c
+++ b/src/third_party/wiredtiger/src/os_posix/os_fs.c
@@ -533,7 +533,7 @@ __posix_file_sync_nowait(WT_FILE_HANDLE *file_handle, WT_SESSION *wt_session)
pfh = (WT_FILE_HANDLE_POSIX *)file_handle;
/* See comment in __posix_sync(): sync cannot be retried or fail. */
- WT_SYSCALL(sync_file_range(pfh->fd, (off64_t)0, (off64_t)0, SYNC_FILE_RANGE_WRITE), ret);
+ WT_SYSCALL(sync_file_range(pfh->fd, 0, 0, SYNC_FILE_RANGE_WRITE), ret);
if (ret == 0)
return (0);
--
2.39.0

View File

@@ -0,0 +1,36 @@
From 28f34191eef1e70c24d2f81b66e4dd40dbefcd35 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 2 Sep 2017 12:42:30 -0700
Subject: [PATCH 04/10] Add a definition for the macro __ELF_NATIVE_CLASS
It depends on the native arch's word size.
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/mongo/util/stacktrace_posix.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/mongo/util/stacktrace_posix.cpp b/src/mongo/util/stacktrace_posix.cpp
index 531e21bdc2..fa611499e4 100644
--- a/src/mongo/util/stacktrace_posix.cpp
+++ b/src/mongo/util/stacktrace_posix.cpp
@@ -42,6 +42,15 @@
#include <iostream>
#include <string>
+#if !defined(__GLIBC__)
+#if defined __x86_64__ && !defined __ILP32__
+# define __WORDSIZE 64
+#else
+# define __WORDSIZE 32
+#endif
+#define __ELF_NATIVE_CLASS __WORDSIZE
+#endif
+
#include "mongo/base/init.h"
#include "mongo/bson/json.h"
#include "mongo/config.h"
--
2.24.0

View File

@@ -0,0 +1,39 @@
From ffe6045b190b735601cd209d3e7ac121604c5a4e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Fri, 24 Aug 2018 13:07:01 -0700
Subject: [PATCH 08/10] Fix default stack size to 256K
On musl default stack size is ~80K which is too low
for mongodb
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/mongo/platform/stack_locator_pthread_getattr_np.cpp | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/mongo/platform/stack_locator_pthread_getattr_np.cpp b/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
index 4f3044c..68e47e3 100644
--- a/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
+++ b/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
@@ -36,6 +36,16 @@
#include "mongo/util/assert_util.h"
#include "mongo/util/scopeguard.h"
+__attribute__((constructor))
+static void set_default_stack_size(void)
+{
+ pthread_attr_t attr;
+ invariant(pthread_attr_init(&attr) == 0);
+ invariant(pthread_attr_setstacksize(&attr, 256*1024) == 0);
+ pthread_setattr_default_np(&attr);
+ invariant(pthread_attr_destroy(&attr) == 0);
+}
+
namespace mongo {
StackLocator::StackLocator() {
--
2.7.4

View File

@@ -0,0 +1,19 @@
Index: git/SConstruct
===================================================================
--- git.orig/SConstruct
+++ git/SConstruct
@@ -977,6 +977,14 @@ env_vars.Add('WINDOWS_OPENSSL_BIN',
help='Sets the path to the openssl binaries for packaging',
default='c:/openssl/bin')
+env_vars.Add('PREFIX',
+ help='installation prefix')
+
+env_vars.Add('prefix',
+ help='installation prefix')
+
+
+
# -- Validate user provided options --
# A dummy environment that should *only* have the variables we have set. In practice it has

View File

@@ -0,0 +1,26 @@
From cc95a8878fa581b164dee8fb1f07b05b9d919ef0 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 2 Sep 2017 13:13:15 -0700
Subject: [PATCH 09/10] wiredtiger: Disable strtouq on musl
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/third_party/wiredtiger/build_linux/wiredtiger_config.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/third_party/wiredtiger/build_linux/wiredtiger_config.h b/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
index 82e9994..0399a67 100644
--- a/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
+++ b/src/third_party/wiredtiger/build_linux/wiredtiger_config.h
@@ -104,7 +104,7 @@
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strtouq' function. */
-#define HAVE_STRTOUQ 1
+/* #undef HAVE_STRTOUQ 1 */
/* Define to 1 if you have the `sync_file_range' function. */
/* #undef HAVE_SYNC_FILE_RANGE */
--
2.7.4

View File

@@ -0,0 +1,56 @@
Upstream-Status: submitted https://github.com/mongodb/mongo/pull/1296
From 362be06fc16a5ad0f9e9aa90cc763c5242e8e35c Mon Sep 17 00:00:00 2001
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Date: Sat, 9 Feb 2019 12:41:45 +0100
Subject: [PATCH] ssl_manager.cpp: fix build with gcc 7 and -fpermissive
Change prototype of DERToken::parse function from
parse(ConstDataRange cdr, size_t* outLength);
to parse(ConstDataRange cdr, uint64_t* outLength);
Otherwise, we got the following error:
src/mongo/util/net/ssl_manager.cpp: In static member function 'static mongo::StatusWith<mongo::{anonymous}::DERToken> mongo::{anonymous}::DERToken::parse(mongo::ConstDataRange, size_t*)':
src/mongo/util/net/ssl_manager.cpp:575:79: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
if (mongoUnsignedAddOverflow64(tagAndLengthByteCount, derLength, outLength) ||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
src/mongo/util/net/ssl_manager.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/mongo/util/net/ssl_manager.cpp b/src/mongo/util/net/ssl_manager.cpp
index 455a1662a5..e8497bc0d1 100644
--- a/src/mongo/util/net/ssl_manager.cpp
+++ b/src/mongo/util/net/ssl_manager.cpp
@@ -810,7 +810,7 @@ public:
*
* Returns a DERToken which consists of the (tag, length, value) tuple.
*/
- static StatusWith<DERToken> parse(ConstDataRange cdr, size_t* outLength);
+ static StatusWith<DERToken> parse(ConstDataRange cdr, uint64_t* outLength);
private:
DERType _type{DERType::EndOfContent};
@@ -827,7 +827,7 @@ struct DataType::Handler<DERToken> {
size_t length,
size_t* advanced,
std::ptrdiff_t debug_offset) {
- size_t outLength;
+ uint64_t outLength;
auto swPair = DERToken::parse(ConstDataRange(ptr, length), &outLength);
@@ -889,7 +889,7 @@ StatusWith<DERInteger> readDERInt(ConstDataRangeCursor& cdc) {
}
-StatusWith<DERToken> DERToken::parse(ConstDataRange cdr, size_t* outLength) {
+StatusWith<DERToken> DERToken::parse(ConstDataRange cdr, uint64_t* outLength) {
const size_t kTagLength = 1;
const size_t kTagLengthAndInitialLengthByteLength = kTagLength + 1;
--
2.24.0

View File

@@ -0,0 +1,19 @@
PTHREAD_STACK_MIN is no longer a compile time define in glibc 2.34+ and since
we only care for glibc and musl where PTHREAD_STACK_MIN is always defined there
is no need to check for constant called PTHREAD_STACK_MIN since its already defined
this fix may not work for wider audience but for OE needs its sufficient
Upstream-Status: Inappropriate [OE-only fix]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
--- a/src/third_party/boost-1.70.0/boost/thread/pthread/thread_data.hpp
+++ b/src/third_party/boost-1.70.0/boost/thread/pthread/thread_data.hpp
@@ -57,9 +57,7 @@ namespace boost
#else
std::size_t page_size = ::sysconf( _SC_PAGESIZE);
#endif
-#if PTHREAD_STACK_MIN > 0
if (size<PTHREAD_STACK_MIN) size=PTHREAD_STACK_MIN;
-#endif
size = ((size+page_size-1)/page_size)*page_size;
int res = pthread_attr_setstacksize(&val_, size);
BOOST_VERIFY(!res && "pthread_attr_setstacksize failed");

View File

@@ -0,0 +1,54 @@
From 298d958148f1fb2bb7725fed15c68c09677c14c9 Mon Sep 17 00:00:00 2001
From: Vincent Prince <vincent.prince.fr@gmail.com>
Date: Mon, 16 Sep 2019 13:37:10 +0200
Subject: [PATCH 05/10] Add alises for arm64 which is same as aarch64
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com>
---
SConstruct | 1 +
src/third_party/IntelRDFPMathLib20U1/SConscript | 2 +-
src/third_party/wiredtiger/SConscript | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/SConstruct b/SConstruct
index 448939bdd0..abfd816f3e 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1228,6 +1228,7 @@ if endian == "auto":
processor_macros = {
'arm' : { 'endian': 'little', 'defines': ('__arm__',) },
'aarch64' : { 'endian': 'little', 'defines': ('__arm64__', '__aarch64__')},
+ 'arm64' : { 'endian': 'little', 'defines': ('__arm64__', '__aarch64__')},
'i386' : { 'endian': 'little', 'defines': ('__i386', '_M_IX86')},
'ppc64le' : { 'endian': 'little', 'defines': ('__powerpc64__',)},
's390x' : { 'endian': 'big', 'defines': ('__s390x__',)},
diff --git a/src/third_party/IntelRDFPMathLib20U1/SConscript b/src/third_party/IntelRDFPMathLib20U1/SConscript
index 58e1b7ba65..bffe83b462 100644
--- a/src/third_party/IntelRDFPMathLib20U1/SConscript
+++ b/src/third_party/IntelRDFPMathLib20U1/SConscript
@@ -309,7 +309,7 @@ if processor == 'i386' or processor == 'emscripten':
elif processor == 'arm':
cpp_defines['IA32'] = '1'
cpp_defines['ia32'] = '1'
-elif processor == "aarch64":
+elif processor == "aarch64" or processor == 'arm64':
cpp_defines['efi2'] = '1'
cpp_defines['EFI2'] = '1'
# Using 64 bit little endian
diff --git a/src/third_party/wiredtiger/SConscript b/src/third_party/wiredtiger/SConscript
index d6bd665e23..2f1e656a19 100644
--- a/src/third_party/wiredtiger/SConscript
+++ b/src/third_party/wiredtiger/SConscript
@@ -152,7 +152,7 @@ condition_map = {
'POSIX_HOST' : not env.TargetOSIs('windows'),
'WINDOWS_HOST' : env.TargetOSIs('windows'),
- 'ARM64_HOST' : env['TARGET_ARCH'] == 'aarch64',
+ 'ARM64_HOST' : env['TARGET_ARCH'] in ('aarch64', 'arm64'),
'POWERPC_HOST' : env['TARGET_ARCH'] == 'ppc64le',
'X86_HOST' : env['TARGET_ARCH'] == 'x86_64',
'ZSERIES_HOST' : env['TARGET_ARCH'] == 's390x',
--
2.24.0

View File

@@ -0,0 +1,17 @@
Lets use cached result for this otherwise runtime test, on qemuppc64
when this test is run using gcc11, it returns 1, since we dont worry
about older compilers here, we can cache the result and use it here
Upstream-Status: Inappropriate [Cross-compile specific]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
--- a/SConstruct
+++ b/SConstruct
@@ -3904,7 +3904,7 @@ def doConfigure(myenv):
conf.AddTest('CheckAltivecVbpermqOutput', CheckAltivecVbpermqOutput)
- outputIndex = next((idx for idx in [0,1] if conf.CheckAltivecVbpermqOutput(idx)), None)
+ outputIndex = 1
if outputIndex is not None:
conf.env.SetConfigHeaderDefine("MONGO_CONFIG_ALTIVEC_VEC_VBPERMQ_OUTPUT_INDEX", outputIndex)
else:

View File

@@ -0,0 +1,18 @@
Subject: [PATCH] stacktrace: Define ARCH_BITS for ppc64
src/mongo/util/stacktrace_somap.cpp:89:2: error: #error Unknown target architecture.
stacktrace_somap.cpp:92:33: error: 'ELFCLASSARCH_BITS' was not declared in this scope
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
--- a/src/mongo/util/stacktrace_somap.cpp
+++ b/src/mongo/util/stacktrace_somap.cpp
@@ -81,7 +81,7 @@ void addUnameToSoMap(BSONObjBuilder* soM
#if defined(__ELF_NATIVE_CLASS) // determine ARCH_BITS
#define ARCH_BITS __ELF_NATIVE_CLASS
-#elif defined(__x86_64__) || defined(__aarch64__)
+#elif defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
#define ARCH_BITS 64
#elif defined(__i386__) || defined(__arm__)
#define ARCH_BITS 32

View File

@@ -0,0 +1,147 @@
SUMMARY = "mongodb"
LICENSE = "SSPL-1 & Apache-2.0 & Zlib"
LIC_FILES_CHKSUM = "file://LICENSE-Community.txt;md5=3a865f27f11f43ecbe542d9ea387dcf1 \
file://APACHE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
DEPENDS = "openssl libpcap zlib boost curl python3 \
python3-setuptools-native \
python3-pyyaml-native python3-cheetah-native \
python3-psutil-native python3-regex-native \
"
inherit scons dos2unix siteinfo python3native systemd useradd
PV = "4.4.19"
#v4.4.18
SRCREV = "9a996e0ad993148b9650dc402e6d3b1804ad3b8a"
SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.4;protocol=https \
file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
file://0001-Use-long-long-instead-of-int64_t.patch \
file://0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch \
file://0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch \
file://arm64-support.patch \
file://0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch \
file://0001-Support-deprecated-resolver-functions.patch \
file://0003-Fix-unknown-prefix-env.patch \
file://1296.patch \
file://0001-Fix-compilation-with-fno-common.patch \
file://0001-stacktrace-Define-ARCH_BITS-for-x86.patch \
file://0001-include-needed-c-header.patch \
file://disable_runtime_check.patch \
file://ppc64_ARCH_BITS.patch \
file://PTHREAD_STACK_MIN.patch \
file://0001-add-explict-static_cast-size_t-to-maxMemoryUsageByte.patch \
file://0001-server-Adjust-the-cache-alignment-assumptions.patch \
file://0001-The-std-lib-unary-binary_function-base-classes-are-d.patch \
file://0001-free_mon-Include-missing-cstdint.patch \
file://0001-apply-msvc-workaround-for-clang-16.patch \
file://0001-Fix-type-mismatch-on-32bit-arches.patch \
"
SRC_URI:append:libc-musl ="\
file://0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch \
file://0002-Fix-default-stack-size-to-256K.patch \
file://0004-wiredtiger-Disable-strtouq-on-musl.patch \
file://0001-wiredtiger-Avoid-using-off64_t.patch \
"
SRC_URI:append:toolchain-clang = "\
file://0001-asio-Dont-use-experimental-with-clang.patch \
"
S = "${WORKDIR}/git"
CVE_CHECK_IGNORE += "\
CVE-2014-8180 \
CVE-2017-18381 \
CVE-2017-2665 \
"
COMPATIBLE_HOST ?= '(x86_64|i.86|powerpc64|arm|aarch64).*-linux'
PACKAGECONFIG ??= "tcmalloc system-pcre"
# gperftools compilation fails for arm below v7 because of missing support of
# dmb operation. So we use system-allocator instead of tcmalloc
PACKAGECONFIG:remove:armv6 = "tcmalloc"
PACKAGECONFIG:remove:libc-musl = "tcmalloc"
PACKAGECONFIG:remove:riscv64 = "tcmalloc"
PACKAGECONFIG:remove:riscv32 = "tcmalloc"
PACKAGECONFIG[tcmalloc] = "--use-system-tcmalloc,--allocator=system,gperftools,"
PACKAGECONFIG[shell] = ",--js-engine=none,,"
PACKAGECONFIG[system-pcre] = "--use-system-pcre,,libpcre,"
MONGO_ARCH ?= "${HOST_ARCH}"
MONGO_ARCH:powerpc64le = "ppc64le"
WIREDTIGER ?= "off"
WIREDTIGER:x86-64 = "on"
WIREDTIGER:aarch64 = "on"
# ld.gold: fatal error: build/59f4f0dd/mongo/mongod: Structure needs cleaning
LDFLAGS:append:x86:libc-musl = " -fuse-ld=bfd"
LDFLAGS:remove:toolchain-clang = "-fuse-ld=bfd"
EXTRA_OESCONS = "PREFIX=${prefix} \
DESTDIR=${D} \
MAXLINELENGTH='2097152' \
LIBPATH=${STAGING_LIBDIR} \
LINKFLAGS='${LDFLAGS}' \
CXXFLAGS='${CXXFLAGS}' \
TARGET_ARCH=${MONGO_ARCH} \
MONGO_VERSION=${PV} \
OBJCOPY=${OBJCOPY} \
--ssl \
--disable-warnings-as-errors \
--use-system-zlib \
--nostrip \
--endian=${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
--wiredtiger='${WIREDTIGER}' \
--separate-debug \
${PACKAGECONFIG_CONFARGS}"
USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --no-create-home --home-dir /var/run/${BPN} --shell /bin/false --user-group ${BPN}"
scons_do_compile() {
${STAGING_BINDIR_NATIVE}/scons ${PARALLEL_MAKE} ${EXTRA_OESCONS} install-core ||
die "scons build execution failed."
}
scons_do_install() {
# install binaries
install -d ${D}${bindir}
for i in mongod mongos mongo; do
if [ -f ${B}/build/*/mongo/$i ]; then
install -m 0755 ${B}/build/*/mongo/$i ${D}${bindir}
else
bbnote "$i does not exist"
fi
done
# install config
install -d ${D}${sysconfdir}
install -m 0644 ${S}/debian/mongod.conf ${D}${sysconfdir}
# install systemd service
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${S}/debian/mongod.service ${D}${systemd_system_unitdir}
# install mongo data folder
install -m 755 -d ${D}${localstatedir}/lib/${BPN}
chown ${BPN}:${BPN} ${D}${localstatedir}/lib/${BPN}
# Create /var/log/mongodb in runtime.
if [ "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" ]; then
install -d ${D}${nonarch_libdir}/tmpfiles.d
echo "d ${localstatedir}/log/${BPN} 0755 ${BPN} ${BPN} -" > ${D}${nonarch_libdir}/tmpfiles.d/${BPN}.conf
fi
if [ "${@bb.utils.filter('DISTRO_FEATURES', 'sysvinit', d)}" ]; then
install -d ${D}${sysconfdir}/default/volatiles
echo "d ${BPN} ${BPN} 0755 ${localstatedir}/log/${BPN} none" > ${D}${sysconfdir}/default/volatiles/99_${BPN}
fi
}
CONFFILES:${PN} = "${sysconfdir}/mongod.conf"
SYSTEMD_SERVICE:${PN} = "mongod.service"
FILES:${PN} += "${nonarch_libdir}/tmpfiles.d"

View File

@@ -0,0 +1,67 @@
From 30c79d1b49839a15c05a0d0ca7e54787cd7988c6 Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 4 May 2023 07:17:57 +0000
Subject: [PATCH] CMakeLists.txt: allow to set PYTHON_INSTDIR from outside
CMakeLists.txt used:
find_package(Python REQUIRED COMPONENTS Interpreter)
execute_process(
COMMAND ${Python_EXECUTABLE} -c
"import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))"
OUTPUT_VARIABLE PYTHON_INSTDIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
but with python3native this returns:
nanopb/0.4.7-r0/git $ ../recipe-sysroot-native/usr/bin/python3-native/python3 -c "import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))"
lib/python3.11/site-packages
which doesn't respect target libdir which might be lib64 with multilib and with python3targetconfig
it also doesn't work right because of the long relative path:
nanopb/0.4.7-r0/build $ ../recipe-sysroot-native/usr/bin/python3-native/python3 -c "import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))"
../../../../../../../../../../../../usr/lib64/python3.11/site-packages
CMake Error at cmake_install.cmake:46 (file):
file cannot create directory:
/OE/lge/build/starfish/nanbield/BUILD/work/o22-starfish-linux/nanopb/0.4.7-r0/image/usr/../../../../../../../../../../../../usr/lib64/python3.11/site-packages/proto.
Maybe need administrative privileges.
Let CMake variable to be passed from the recipe to avoid this as we're already using
${D}${PYTHON_SITEPACKAGES_DIR} in do_install:append anyway.
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Upstream-Status: Pending
---
CMakeLists.txt | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d241c5..7d3f993 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,13 +39,15 @@ if(NOT DEFINED CMAKE_INSTALL_CMAKEDIR)
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/nanopb")
endif()
-find_package(Python REQUIRED COMPONENTS Interpreter)
-execute_process(
- COMMAND ${Python_EXECUTABLE} -c
- "import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))"
- OUTPUT_VARIABLE PYTHON_INSTDIR
- OUTPUT_STRIP_TRAILING_WHITESPACE
-)
+if(NOT DEFINED PYTHON_INSTDIR)
+ find_package(Python REQUIRED COMPONENTS Interpreter)
+ execute_process(
+ COMMAND ${Python_EXECUTABLE} -c
+ "import os.path, sys, sysconfig; print(os.path.relpath(sysconfig.get_path('purelib'), start=sys.prefix))"
+ OUTPUT_VARIABLE PYTHON_INSTDIR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+endif()
if(nanopb_BUILD_GENERATOR)
set(generator_protos nanopb)

View File

@@ -0,0 +1,33 @@
DESCRIPTION="Protocol Buffers with small code size"
LICENSE="Zlib"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=9db4b73a55a3994384112efcdb37c01f"
DEPENDS = "protobuf-native"
SRC_URI = "git://github.com/nanopb/nanopb.git;branch=master;protocol=https \
file://0001-CMakeLists.txt-allow-to-set-PYTHON_INSTDIR-from-outs.patch \
"
SRCREV = "b97aa657a706d3ba4a9a6ccca7043c9d6fe41cba"
S = "${WORKDIR}/git"
inherit cmake python3native
EXTRA_OECMAKE += "-DPYTHON_INSTDIR=${PYTHON_SITEPACKAGES_DIR}"
do_install:append() {
install -Dm 0755 ${S}/generator/nanopb_generator.py ${D}${bindir}/nanopb_generator.py
install -Dm 0755 ${S}/generator/protoc-gen-nanopb ${D}${bindir}/protoc-gen-nanopb
install -Dm 0755 ${S}/generator/proto/__init__.py ${D}${PYTHON_SITEPACKAGES_DIR}/proto/__init__.py
}
FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
FILES:${PN}-dev += "${libdir}/cmake/${BPN}"
RDEPENDS:${PN} += "\
${PYTHON_PN}-protobuf \
protobuf-compiler \
"
BBCLASSEXTEND = "native nativesdk"

View File

@@ -0,0 +1,101 @@
DESCRIPTION = "LCDproc is a client/server suite to drive all kinds of LCD (-like) devices. The client \
shipped with this package can be used to acquire various kinds of system stats."
SUMMARY = "Drivers for character-based LCD displays"
HOMEPAGE = "http://lcdproc.org"
SECTION = "utils"
LICENSE = "GPL-2.0-or-later"
DEPENDS = "ncurses lirc"
LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760 \
file://README.md;beginline=107;md5=5db392f043253a2d64b1737068ce6b58"
PV = "0.5.9+git${SRCPV}"
SRCREV = "0e2ce9b9c46c47363436f9ee730f7c71bf455f0f"
SRC_URI = "git://github.com/lcdproc/lcdproc;branch=master;protocol=https"
S = "${WORKDIR}/git"
inherit autotools pkgconfig update-rc.d
LCD_DRIVERS ?= "all,!irman,!svga${SERIALVFD}"
SERIALVFD ?= ""
SERIALVFD:libc-musl = ",!serialVFD"
SERIALVFD:libc-musl:x86 = ""
SERIALVFD:libc-musl:x86-64 = ""
LCD_DEFAULT_DRIVER ?= "curses"
PACKAGECONFIG ??= "usb"
PACKAGECONFIG[usb] = "--enable-libusb,--disable-libusb,virtual/libusb0"
PACKAGECONFIG[ftdi] = "--enable-libftdi,--disable-libftdi,libftdi"
PACKAGECONFIG[g15] = ",,libg15 g15daemon libg15render,"
PACKAGECONFIG[hid] = "--enable-libhid,--disable-libhid,libhid"
PACKAGECONFIG[png] = "--enable-libpng,--disable-libpng,libpng"
LCD_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'g15', '', ',!g15', d)}"
EXTRA_OECONF = "--enable-drivers='${LCD_DRIVERS}'"
do_install () {
# binaries
install -D -m 0755 server/LCDd ${D}${sbindir}/LCDd
install -D -m 0755 clients/lcdproc/lcdproc ${D}${bindir}/lcdproc
# init scripts
install -d ${D}${sysconfdir}/init.d
# so far, not fixed :-( and now even uglier :-((
cat scripts/init-LCDd.debian | sed -e s'/--oknodo//' -e 's/ -s -f / -s 1 -f 1 /' -e 's/force-reload/force-restart/' -e 's/sleep 1/sleep 4/' > ${D}${sysconfdir}/init.d/lcdd
chmod 0755 ${D}${sysconfdir}/init.d/lcdd
install -m 0755 scripts/init-lcdproc.debian ${D}${sysconfdir}/init.d/lcdproc
sed -i s'/--oknodo//' ${D}${sysconfdir}/init.d/lcdproc
# configuration files
install -m 0644 ${S}/LCDd.conf ${D}${sysconfdir}/LCDd.conf
sed -i 's!^DriverPath=.*!DriverPath=${libdir}/lcdproc/!' ${D}${sysconfdir}/LCDd.conf
sed -i 's!^Driver=.*!Driver=${LCD_DEFAULT_DRIVER}!' ${D}${sysconfdir}/LCDd.conf
install -m 0644 ${S}/clients/lcdproc/lcdproc.conf ${D}${sysconfdir}/lcdproc.conf
# driver library files
install -d ${D}${libdir}/lcdproc
for i in server/drivers/*.so; do
install -m 0644 $i ${D}${libdir}/lcdproc/
done
# binaries
install -D -m 0755 clients/lcdvc/lcdvc ${D}${sbindir}/lcdvc
# configuration files
install -D -m 0644 ${S}/clients/lcdvc/lcdvc.conf ${D}${sysconfdir}/lcdvc.conf
}
PACKAGES =+ "lcdd lcdvc"
RRECOMMENDS:${PN} = "lcdd"
FILES:lcdd = "${sysconfdir}/LCDd.conf \
${sbindir}/LCDd \
${sysconfdir}/init.d/lcdd"
CONFFILES:lcdd = "${sysconfdir}/LCDd.conf"
CONFFILES:${PN} = "${sysconfdir}/lcdproc.conf"
CONFFILES:lcdvc = "${sysconfdir}/lcdvc.conf"
FILES:lcdvc = "${sysconfdir}/lcdvc.conf ${sbindir}/lcdvc"
# Driver packages
# USB / no USB trickery
RCONFLICTS:lcdd-driver-hd47780nousb = "lcdd-driver-hd44780"
RCONFLICTS:lcdd-driver-hd47780 = "lcdd-driver-hd44780nousb"
INITSCRIPT_PACKAGES = "lcdd lcdproc"
INITSCRIPT_NAME:lcdd = "lcdd"
INITSCRIPT_NAME:lcdproc = "lcdproc"
INITSCRIPT_PARAMS:lcdd = "defaults 70 21"
INITSCRIPT_PARAMS:lcdproc = "defaults 71 20"
python populate_packages:prepend() {
plugindir = d.expand('${libdir}/lcdproc')
do_split_packages(d, plugindir, r'(.*)\.so$', 'lcdd-driver-%s', 'LCDd driver for %s', prepend=True)
}
PACKAGES_DYNAMIC += "^lcdd-driver-.*"

View File

@@ -0,0 +1,39 @@
SUMMARY = "NVM-Express target user space configuration utility."
DESCRIPTION = "This package contains the command line interface to the NVMe \
over Fabrics nvmet in the Linux kernel. It allows configuring the nvmet \
interactively as well as saving / restoring the configuration to / from a json \
file."
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://COPYING;md5=1dece7821bf3fd70fe1309eaa37d52a2"
inherit systemd setuptools3
# nvmet service will start and stop the NVMe Target configuration on boot and
# shutdown from a saved NVMe Target configuration in the /etc/nvmet/config.json
# file. This file is not installed by default since the configuration will vary
# on real systems. Example configuration files are provided by including the
# nvmetcli-examples package.
SYSTEMD_SERVICE:${PN} = "nvmet.service"
SYSTEMD_AUTO_ENABLE ?= "disable"
RDEPENDS:${PN} += "python3 python3-six python3-pyparsing python3-configshell-fb"
SRCREV = "0a6b088db2dc2e5de11e6f23f1e890e4b54fee64"
SRC_URI = "git://git.infradead.org/users/hch/nvmetcli.git;branch=master"
S = "${WORKDIR}/git"
do_install:append() {
# Install example configuration scripts.
install -d ${D}${datadir}/nvmet
cp -fr ${S}/examples ${D}${datadir}/nvmet/
# Install systemd service file.
install -d ${D}${systemd_unitdir}/system
cp -fr ${S}/nvmet.service ${D}${systemd_unitdir}/system
}
# Examples package contains example json files used to configure nvmet.
PACKAGES += "${PN}-examples"
FILES:${PN}-examples = "${datadir}/nvmet/examples/*"

View File

@@ -0,0 +1,53 @@
From 3ff78f1f00973393d1a7ee4e467a2bacf1c807f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
Date: Wed, 5 Feb 2020 16:14:21 +0000
Subject: [PATCH] smem: fix support for --source option (python3)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Using --source doesn't work without this patch:
Traceback (most recent call last):
File "./smem", line 727, in <module>
showpids()
File "./smem", line 299, in showpids
showtable(pt.keys(), fields, columns.split(), options.sort or 'pss')
File "./smem", line 519, in showtable
mt = totalmem()
File "./smem", line 118, in totalmem
_totalmem = memory()['memtotal']
File "./smem", line 193, in memory
m = f.match(l)
TypeError: cannot use a string pattern on a bytes-like object
python3's tarfile returns bytes, whereas all of the rest of
the code assumes str.
Fix the tarfile usage to convert to str before returning the
results.
Signed-off-by: André Draszik <git@andred.net>
Upstream-Status: Inappropriate [upstream wants to support python2 & python3]
---
smem | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/smem b/smem
index 46a3189..54d40dd 100755
--- a/smem
+++ b/smem
@@ -90,9 +90,9 @@ class tardata(procdata):
d,f = ti.name.split('/')
yield d
def _read(self, f):
- return self.tar.extractfile(f).read()
+ return self.tar.extractfile(f).read().decode()
def _readlines(self, f):
- return self.tar.extractfile(f).readlines()
+ return [l.decode() for l in self.tar.extractfile(f).readlines()]
def piduser(self, p):
t = self.tar.getmember("%d" % p)
if t.uname:
--
2.23.0.rc1

View File

@@ -0,0 +1,43 @@
SUMMARY = "Report application memory usage in a meaningful way"
DESCRIPTION = "smem is a tool that can give numerous reports on memory usage on Linux \
systems. Unlike existing tools, smem can report proportional set size (PSS), \
which is a more meaningful representation of the amount of memory used by \
libraries and applications in a virtual memory system."
HOMEPAGE = "http://www.selenic.com/smem/"
SECTION = "Applications/System"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
HG_CHANGESET = "98273ce331bb"
SRC_URI = "https://selenic.com/repo/${BPN}/archive/${HG_CHANGESET}.tar.bz2;downloadfilename=${BP}.tar.bz2 \
file://0001-smem-fix-support-for-source-option-python3.patch"
SRC_URI[md5sum] = "51c3989779360f42b42ef46b2831be3a"
SRC_URI[sha256sum] = "161131c686a6d9962a0e96912526dd46308e022d62e3f8acaed5a56fda8e08ce"
UPSTREAM_CHECK_URI = "https://selenic.com/repo/smem/tags"
UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)"
S = "${WORKDIR}/${BPN}-${HG_CHANGESET}"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} smemcap.c -o smemcap
}
do_install() {
install -d ${D}/${bindir}/
install -d ${D}/${mandir}/man8
install -m 0755 ${S}/smem ${D}${bindir}/
sed -i -e '1s,#!.*python.*,#!${USRBINPATH}/env python3,' ${D}${bindir}/smem
install -m 0755 ${S}/smemcap ${D}${bindir}/
install -m 0644 ${S}/smem.8 ${D}/${mandir}/man8/
}
RDEPENDS:${PN} = "python3-core python3-compression"
RRECOMMENDS:${PN} = "python3-matplotlib python3-numpy"
PACKAGE_BEFORE_PN = "smemcap"
FILES:smemcap = "${bindir}/smemcap"
BBCLASSEXTEND = "native"

View File

@@ -0,0 +1,2 @@
RDEPENDS:packagegroup-meta-oe-support:append:x86 = "${@bb.utils.contains('BBFILE_COLLECTIONS', 'filesystems-layer', ' open-vm-tools', '', d)}"
RDEPENDS:packagegroup-meta-oe-support:append:x86-64 = "${@bb.utils.contains('BBFILE_COLLECTIONS', 'filesystems-layer', ' open-vm-tools', '', d)}"

View File

@@ -0,0 +1 @@
RDEPENDS:packagegroup-meta-oe-support += "debsums rasdaemon"

View File

@@ -0,0 +1,56 @@
SUMMARY = "Miscellaneous utilities specific to Debian"
SUMMARY:${PN}-cron = "Cron scripts to control automatic debsum checking"
DESCRIPTION = "A tool for verification of installed package files against \
MD5 checksums debsums can verify the integrity of installed package files \
against MD5 checksums installed by the package, or generated from a .deb \
archive."
DESCRIPTION:${PN}-cron = "Cron scripts to control automatic system integrity \
checking via debsums."
SECTION = "base"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://debian/copyright;md5=770d751553e6559e9eaefd2e11ccf7e9"
SRC_URI = "http://snapshot.debian.org/archive/debian/20170530T212108Z/pool/main/d/debsums/debsums_2.2.2.tar.xz"
SRC_URI[md5sum] = "82b0710855a7e5212d4358163a269e79"
SRC_URI[sha256sum] = "aa61896f93a6bbfe0161c21dcd67529ae8e1ec8c3ccf244523c52c4ad8253d97"
# the package is taken from snapshots.debian.org; that source is static and goes stale
# so we check the latest upstream from a directory that does get updated
UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/"
inherit perlnative gettext
DEPENDS += "po4a-native"
do_install() {
install -d ${D}/${sysconfdir}/cron.daily ${D}/${sysconfdir}/cron.weekly
install -d ${D}/${sysconfdir}/cron.monthly ${D}${sbindir} ${D}${bindir}
install -d ${D}${mandir}/man1 ${D}${mandir}/man8
install -m 0755 debsums ${D}${bindir}/
install -m 0755 rdebsums ${D}${bindir}/
install -m 0755 debsums_init ${D}${sbindir}
install -m 0644 man/debsums.1 ${D}${mandir}/man1/
install -m 0644 man/rdebsums.1 ${D}${mandir}/man1/
install -m 0644 man/debsums_init.8 ${D}${mandir}/man8/
install -m 0644 debian/cron.daily \
${D}/${sysconfdir}/cron.daily/debsums
install -m 0644 debian/cron.weekly \
${D}/${sysconfdir}/cron.weekly/debsums
install -m 0644 debian/cron.monthly \
${D}/${sysconfdir}/cron.monthly/debsums
# Must exist, defaults to empty.
touch ${D}/${sysconfdir}/debsums-ignore
}
PACKAGES =+ "${PN}-cron"
RDEPENDS:${PN} = "dpkg dpkg-perl libfile-fnmatch-perl perl \
perl-module-constant perl-module-digest-md5 \
perl-module-errno perl-module-fcntl \
perl-module-file-basename perl-module-file-copy \
perl-module-file-find perl-module-file-glob \
perl-module-file-path perl-module-file-spec \
perl-module-file-temp perl-module-getopt-long \
perl-module-posix"
FILES:${PN}-cron = "${sysconfdir}/cron.*"

View File

@@ -0,0 +1,35 @@
From e415152b51eacab8705b6b3274cc0d1a274772e0 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 30 Aug 2022 19:54:35 -0700
Subject: [PATCH] libtrace: Use XSI version of strerror_r on non glibc systems
The version used is glibc specific therefore make it so
and provide a fallback for non-glibc systems
Upstream-Status: Submitted [https://github.com/mchehab/rasdaemon/pull/70]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
libtrace/event-parse.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/libtrace/event-parse.c b/libtrace/event-parse.c
index 6c705c3..6b651d5 100644
--- a/libtrace/event-parse.c
+++ b/libtrace/event-parse.c
@@ -5071,7 +5071,13 @@ int pevent_strerror(struct pevent *pevent, enum pevent_errno errnum,
const char *msg;
if (errnum >= 0) {
+#if defined(__GLIBC__)
msg = strerror_r(errnum, buf, buflen);
+#else
+ if (strerror_r(errnum, buf, buflen) != 0)
+ snprintf(buf, buflen, "unknown error %i", errnum);
+ msg = buf;
+#endif
if (msg != buf) {
size_t len = strlen(msg);
memcpy(buf, msg, min(buflen - 1, len));
--
2.37.3

View File

@@ -0,0 +1,43 @@
#! /bin/sh
# /etc/init.d/rasdaemon: start rasdaemon service
. /etc/init.d/functions
# Defaults
PIDFILE=/var/run/rasdaemon.pid
BINFILE=/usr/sbin/rasdaemon
SCRIPTNAME=/etc/init.d/rasdaemon
[ -x $BINFILE ] || exit 0
case "$1" in
start)
echo -n "Starting RASdaemon services: "
if [ ! -f "$PIDFILE" ]; then
start-stop-daemon --start --quiet --exec $BINFILE -- --enable &> /dev/null
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $BINFILE -- --record
pidof $BINFILE > $PIDFILE
fi
[ -f $PIDFILE ] && echo "done." || echo "fail."
;;
stop)
echo -n "Stopping RASdaemon services: "
if [ -f "$PIDFILE" ] ; then
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $BINFILE -- --disable &> /dev/null
killproc $BINFILE
rm $PIDFILE
fi
[ ! -f $PIDFILE ] && echo "done." || echo "fail."
;;
restart)
$0 stop
sleep 1
$0 start
;;
status)
status $BINFILE
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|status}"
exit 1
esac

View File

@@ -0,0 +1,12 @@
[Unit]
Description=RAS daemon to log the RAS events
After=syslog.target
[Service]
ExecStart=/usr/sbin/rasdaemon -f -r
ExecStartPost=/usr/sbin/rasdaemon --enable
ExecStop=/usr/sbin/rasdaemon --disable
Restart=on-abort
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,51 @@
DESCRIPTION = "Tools to provide a way to get Platform Reliability, Availability and Serviceability (RAS) reports made via the Kernel tracing events"
HOMEPAGE = "http://git.infradead.org/users/mchehab/rasdaemon.git"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=d3070efe0afa3dc41608bd82c00bb0dc"
SRC_URI = "git://github.com/mchehab/rasdaemon.git;branch=master;protocol=https \
file://0001-libtrace-Use-XSI-version-of-strerror_r-on-non-glibc-.patch \
file://rasdaemon.service \
file://init"
SRCREV = "c2255178a49f62c53009a456bc37dd5e37332f09"
S = "${WORKDIR}/git"
RDEPENDS:${BPN} = "perl perl-module-file-basename perl-module-file-find perl-module-file-spec perl-module-getopt-long \
perl-module-posix perl-module-file-glob libdbi-perl libdbd-sqlite-perl"
inherit autotools pkgconfig update-rc.d systemd
PACKAGECONFIG ??= "sqlite3 mce aer extlog devlink diskerror"
PACKAGECONFIG[sqlite3] = "--enable-sqlite3,--disable-sqlite3,sqlite3"
PACKAGECONFIG[mce] = "--enable-mce,--disable-mce"
PACKAGECONFIG[aer] = "--enable-aer,--disable-aer"
PACKAGECONFIG[extlog] = "--enable-extlog,--disable-extlog"
PACKAGECONFIG[devlink] = "--enable-devlink,--disable-devlink"
PACKAGECONFIG[diskerror] = "--enable-diskerror,--disable-diskerror"
PACKAGECONFIG[arm] = "--enable-arm,--disable-arm"
PACKAGECONFIG[hisi-ns-decode] = "--enable-hisi-ns-decode,--disable-hisi-ns-decode"
PACKAGECONFIG[non-standard] = "--enable-non-standard,--disable-non-standard"
PACKAGECONFIG[abrt-report] = "--enable-abrt-report,--disable-abrt-report"
DEPENDS:append:libc-musl = " argp-standalone"
LDFLAGS:append:libc-musl = " -largp"
do_install:append() {
install -d ${D}${sysconfdir}/init.d
install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/rasdaemon
install -d ${D}${systemd_unitdir}/system
install -m 0644 ${WORKDIR}/rasdaemon.service ${D}${systemd_unitdir}/system
}
FILES:${PN} += "${sbindir}/rasdaemon \
${sysconfdir}/init.d \
${systemd_unitdir}/system/rasdaemon.service"
SYSTEMD_SERVICE:${PN} = "rasdaemon.service"
SYSTEMD_AUTO_ENABLE = "enable"
INITSCRIPT_PACKAGES = "${PN}"
INITSCRIPT_NAME:${PN} = "rasdaemon"
INITSCRIPT_PARAMS:${PN} = "defaults 89"

View File

@@ -0,0 +1,4 @@
[Service]
ExecStartPre=/usr/bin/android-gadget-setup
ExecStartPost=/usr/bin/android-gadget-start
ExecStopPost=/usr/bin/android-gadget-cleanup

View File

@@ -0,0 +1,24 @@
#!/bin/sh
[ -d /sys/kernel/config/usb_gadget ] || exit 0
cd /sys/kernel/config/usb_gadget
cd adb
echo "" > UDC || true
killall adbd || true
umount /dev/usb-ffs/adb
rm configs/c.1/ffs.usb0
rmdir configs/c.1/strings/0x409
rmdir configs/c.1
rmdir functions/ffs.usb0
rmdir strings/0x409
cd ..
rmdir adb

View File

@@ -0,0 +1,35 @@
#!/bin/sh
set -e
manufacturer=RPB
model="Android device"
serial=0123456789ABCDEF
if [ -r /etc/android-gadget-setup.machine ] ; then
. /etc/android-gadget-setup.machine
fi
[ -d /sys/kernel/config/usb_gadget ] || modprobe libcomposite
cd /sys/kernel/config/usb_gadget
[ -d adb ] && /usr/bin/android-gadget-cleanup || true
mkdir adb
cd adb
mkdir configs/c.1
mkdir functions/ffs.usb0
mkdir strings/0x409
mkdir configs/c.1/strings/0x409
echo 0x18d1 > idVendor
echo 0xd002 > idProduct
echo "$serial" > strings/0x409/serialnumber
echo "$manufacturer" > strings/0x409/manufacturer
echo "$model" > strings/0x409/product
echo "Conf 1" > configs/c.1/strings/0x409/configuration
ln -s functions/ffs.usb0 configs/c.1
mkdir -p /dev/usb-ffs/adb
mount -t functionfs usb0 /dev/usb-ffs/adb

View File

@@ -0,0 +1,7 @@
#!/bin/sh
set -e
sleep 3
ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/adb/UDC

View File

@@ -0,0 +1,35 @@
DESCRIPTION = "Various utilities from Android - corresponding configuration files for using ConfigFS"
SECTION = "console/utils"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = " \
file://android-gadget-setup \
file://android-gadget-start \
file://android-gadget-cleanup \
file://10-adbd-configfs.conf \
"
PACKAGE_ARCH = "${MACHINE_ARCH}"
do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/android-gadget-setup ${D}${bindir}
install -m 0755 ${WORKDIR}/android-gadget-start ${D}${bindir}
install -m 0755 ${WORKDIR}/android-gadget-cleanup ${D}${bindir}
if [ -r ${WORKDIR}/android-gadget-setup.machine ] ; then
install -d ${D}${sysconfdir}
install -m 0644 ${WORKDIR}/android-gadget-setup.machine ${D}${sysconfdir}
fi
install -d ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
install -m 0644 ${WORKDIR}/10-adbd-configfs.conf ${D}${systemd_unitdir}/system/android-tools-adbd.service.d
}
FILES:${PN} += " \
${systemd_unitdir}/system/ \
"
PROVIDES += "android-tools-conf"
RPROVIDES:${PN} = "android-tools-conf"

View File

@@ -0,0 +1,37 @@
#!/bin/sh
[ ! -e /dev/pts ] && mkdir -p /dev/pts
[ ! -e /dev/pts/0 ] && mount devpts /dev/pts -t devpts
# TODO enable the lines below once we have support for getprop
# retrieve the product info from Android
# manufacturer=$(getprop ro.product.manufacturer Android)
# model=$(getprop ro.product.model Android)
# serial=$(getprop ro.serialno 0123456789ABCDEF)
#below are now needed in order to use FunctionFS for ADB, tested to work with 3.4+ kernels
if grep -q functionfs /proc/filesystems; then
mkdir -p /dev/usb-ffs/adb
mount -t functionfs adb /dev/usb-ffs/adb
#android-gadget-setup doesn't provide below 2 and without them it won't work, so we provide them here.
echo adb > /sys/class/android_usb/android0/f_ffs/aliases
echo ffs > /sys/class/android_usb/android0/functions
fi
manufacturer="$(cat /system/build.prop | grep -o 'ro.product.manufacturer=.*' | cut -d'=' -f 2)"
model="$(cat /system/build.prop | grep -o 'ro.product.model=.*' | cut -d'=' -f 2)"
# get the device serial number from /proc/cmdline directly(since we have no getprop on
# GNU/Linux)
serial="$(cat /proc/cmdline | sed 's/.*androidboot.serialno=//' | sed 's/ .*//')"
echo $serial > /sys/class/android_usb/android0/iSerial
echo $manufacturer > /sys/class/android_usb/android0/iManufacturer
echo $model > /sys/class/android_usb/android0/iProduct
echo "0" > /sys/class/android_usb/android0/enable
echo "18d1" > /sys/class/android_usb/android0/idVendor
echo "D002" > /sys/class/android_usb/android0/idProduct
echo "adb" > /sys/class/android_usb/android0/functions
echo "1" > /sys/class/android_usb/android0/enable
sleep 4

View File

@@ -0,0 +1,18 @@
DESCRIPTION = "Different utilities from Android - corresponding configuration files"
SECTION = "console/utils"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://android-gadget-setup"
do_install() {
install -d ${D}${bindir}
install -m 0755 ${WORKDIR}/android-gadget-setup ${D}${bindir}
}
python () {
pn = d.getVar('PN')
profprov = d.getVar("PREFERRED_PROVIDER_" + pn)
if profprov and pn != profprov:
raise bb.parse.SkipRecipe("PREFERRED_PROVIDER_%s set to %s, not %s" % (pn, profprov, pn))
}

View File

@@ -0,0 +1,162 @@
From 5de85f8273c7284aa93e35c40f025d4d43d42df9 Mon Sep 17 00:00:00 2001
From: Etienne Cordonnier <ecordonnier@snap.com>
Date: Thu, 16 Mar 2023 18:59:35 +0100
Subject: [PATCH] Fixes for yocto build
Signed-off-by: JJ Robertson <jrobertson@snapchat.com>
[rebased on version 29]
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
system/core/adb/daemon/file_sync_service.cpp | 4 ++--
system/core/adb/daemon/framebuffer_service.h | 2 --
system/core/adb/daemon/main.cpp | 5 +++--
system/core/adb/daemon/restart_service.h | 2 --
system/core/adb/daemon/services.cpp | 6 ++----
system/core/adb/daemon/shell_service.cpp | 5 ++++-
system/core/adb/types.h | 1 +
7 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/system/core/adb/daemon/file_sync_service.cpp b/system/core/adb/daemon/file_sync_service.cpp
index d6af7087..92e7087a 100644
--- a/system/core/adb/daemon/file_sync_service.cpp
+++ b/system/core/adb/daemon/file_sync_service.cpp
@@ -111,7 +111,7 @@ static bool secure_mkdirs(const std::string& path) {
partial_path += path_component;
if (should_use_fs_config(partial_path)) {
- fs_config(partial_path.c_str(), 1, nullptr, &uid, &gid, &mode, &capabilities);
+ // fs_config(partial_path.c_str(), 1, nullptr, &uid, &gid, &mode, &capabilities);
}
if (adb_mkdir(partial_path.c_str(), mode) == -1) {
if (errno != EEXIST) {
@@ -469,7 +469,7 @@ static bool do_send(int s, const std::string& spec, std::vector<char>& buffer) {
uint64_t capabilities = 0;
if (should_use_fs_config(path)) {
unsigned int broken_api_hack = mode;
- fs_config(path.c_str(), 0, nullptr, &uid, &gid, &broken_api_hack, &capabilities);
+ // fs_config(path.c_str(), 0, nullptr, &uid, &gid, &broken_api_hack, &capabilities);
mode = broken_api_hack;
}
diff --git a/system/core/adb/daemon/framebuffer_service.h b/system/core/adb/daemon/framebuffer_service.h
index bab44be3..264da597 100644
--- a/system/core/adb/daemon/framebuffer_service.h
+++ b/system/core/adb/daemon/framebuffer_service.h
@@ -18,6 +18,4 @@
#include "adb_unique_fd.h"
-#if defined(__ANDROID__)
void framebuffer_service(unique_fd fd);
-#endif
diff --git a/system/core/adb/daemon/main.cpp b/system/core/adb/daemon/main.cpp
index 3322574c..e807d13d 100644
--- a/system/core/adb/daemon/main.cpp
+++ b/system/core/adb/daemon/main.cpp
@@ -208,6 +208,9 @@ int adbd_main(int server_port) {
umask(0);
signal(SIGPIPE, SIG_IGN);
+ signal(SIGINT, SIG_DFL);
+ signal(SIGQUIT, SIG_DFL);
+
#if defined(__BIONIC__)
auto fdsan_level = android_fdsan_get_error_level();
@@ -254,13 +257,11 @@ int adbd_main(int server_port) {
bool is_usb = false;
-#if defined(__ANDROID__)
if (access(USB_FFS_ADB_EP0, F_OK) == 0) {
// Listen on USB.
usb_init();
is_usb = true;
}
-#endif
// If one of these properties is set, also listen on that port.
// If one of the properties isn't set and we couldn't listen on usb, listen
diff --git a/system/core/adb/daemon/restart_service.h b/system/core/adb/daemon/restart_service.h
index 19840bd5..7a97614b 100644
--- a/system/core/adb/daemon/restart_service.h
+++ b/system/core/adb/daemon/restart_service.h
@@ -18,9 +18,7 @@
#include "adb_unique_fd.h"
-#if defined(__ANDROID__)
void restart_root_service(unique_fd fd);
void restart_unroot_service(unique_fd fd);
void restart_tcp_service(unique_fd fd, int port);
void restart_usb_service(unique_fd fd);
-#endif
diff --git a/system/core/adb/daemon/services.cpp b/system/core/adb/daemon/services.cpp
index 4ec90d27..d8541c23 100644
--- a/system/core/adb/daemon/services.cpp
+++ b/system/core/adb/daemon/services.cpp
@@ -156,7 +156,7 @@ static void spin_service(unique_fd fd) {
}
#endif
// Fall through
- std::string cmd = "/system/bin/reboot ";
+ std::string cmd = "/sbin/reboot ";
cmd += name;
return StartSubprocess(cmd, nullptr, SubprocessType::kRaw, SubprocessProtocol::kNone);
}
@@ -265,11 +265,10 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) {
}
#endif
-#if defined(__ANDROID__)
if (name.starts_with("framebuffer:")) {
return create_service_thread("fb", framebuffer_service);
} else if (android::base::ConsumePrefix(&name, "remount:")) {
- std::string cmd = "/system/bin/remount ";
+ std::string cmd = "/sbin/remount ";
cmd += name;
return StartSubprocess(cmd, nullptr, SubprocessType::kRaw, SubprocessProtocol::kNone);
} else if (android::base::ConsumePrefix(&name, "reboot:")) {
@@ -303,7 +302,6 @@ unique_fd daemon_service_to_fd(std::string_view name, atransport* transport) {
} else if (name.starts_with("usb:")) {
return create_service_thread("usb", restart_usb_service);
}
-#endif
if (android::base::ConsumePrefix(&name, "dev:")) {
return unique_fd{unix_open(name, O_RDWR | O_CLOEXEC)};
diff --git a/system/core/adb/daemon/shell_service.cpp b/system/core/adb/daemon/shell_service.cpp
index f62032d0..ebcfe18d 100644
--- a/system/core/adb/daemon/shell_service.cpp
+++ b/system/core/adb/daemon/shell_service.cpp
@@ -273,13 +273,16 @@ bool Subprocess::ForkAndExec(std::string* error) {
env["HOSTNAME"] = GetHostName();
env["LOGNAME"] = pw->pw_name;
env["SHELL"] = pw->pw_shell;
- env["TMPDIR"] = "/data/local/tmp";
env["USER"] = pw->pw_name;
}
if (!terminal_type_.empty()) {
env["TERM"] = terminal_type_;
}
+ if (env.find("PS1") == env.end()) {
+ env["PS1"] = "\\h:\\w\\$ ";
+ }
+
std::vector<std::string> joined_env;
for (const auto& it : env) {
diff --git a/system/core/adb/types.h b/system/core/adb/types.h
index c619fffc..f8e0f521 100644
--- a/system/core/adb/types.h
+++ b/system/core/adb/types.h
@@ -22,6 +22,7 @@
#include <memory>
#include <utility>
#include <vector>
+#include <string.h>
#include <android-base/logging.h>

View File

@@ -0,0 +1,366 @@
From fe211cbc305a9316c1d4da2f086d6a50f1c92188 Mon Sep 17 00:00:00 2001
From: Etienne Cordonnier <ecordonnier@snap.com>
Date: Fri, 17 Mar 2023 10:33:11 +0100
Subject: [PATCH] android-tools: modifications to make it build in yocto
- Fix relocation errors on aarch64, e.g.:
"relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `_ZTV19SparseFileBufSource' which may bind externally can not be used when making a shared object; recompile with -fPIC"
- use ln -f to avoid error "File exists" on incremental builds
- fix missing headers
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
debian/external/boringssl/libcrypto.mk | 1 +
debian/system/core/append2simg.mk | 2 +-
debian/system/core/fastboot.mk | 2 +-
debian/system/core/img2simg.mk | 2 +-
debian/system/core/libbacktrace.mk | 8 ++++----
debian/system/core/libbase.mk | 5 +++--
debian/system/core/libcutils.mk | 5 +++--
debian/system/core/liblog.mk | 3 ++-
debian/system/core/libsparse.mk | 5 +++--
debian/system/core/libutils.mk | 2 +-
debian/system/core/libziparchive.mk | 5 +++--
debian/system/core/simg2img.mk | 2 +-
debian/system/core/simg2simg.mk | 2 +-
frameworks/native/libs/adbd_auth/adbd_auth.cpp | 2 ++
system/core/adb/adb_listeners.cpp | 12 ++++++------
system/core/adb/transport_local.cpp | 2 +-
16 files changed, 34 insertions(+), 26 deletions(-)
diff --git a/debian/external/boringssl/libcrypto.mk b/debian/external/boringssl/libcrypto.mk
index c0ea54f4..b3a77bfd 100644
--- a/debian/external/boringssl/libcrypto.mk
+++ b/debian/external/boringssl/libcrypto.mk
@@ -27,6 +27,7 @@ CPPFLAGS += \
-DBORINGSSL_IMPLEMENTATION \
-DBORINGSSL_SHARED_LIBRARY \
-DOPENSSL_SMALL \
+ -DOPENSSL_NO_ASM \
-Iexternal/boringssl/src/crypto \
-Iexternal/boringssl/src/include \
diff --git a/debian/system/core/append2simg.mk b/debian/system/core/append2simg.mk
index 1599bdb8..598c751d 100644
--- a/debian/system/core/append2simg.mk
+++ b/debian/system/core/append2simg.mk
@@ -11,7 +11,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN/../lib/android' \
-lbase \
-llog \
-lpthread \
diff --git a/debian/system/core/fastboot.mk b/debian/system/core/fastboot.mk
index d5c9a285..a59ba1a4 100644
--- a/debian/system/core/fastboot.mk
+++ b/debian/system/core/fastboot.mk
@@ -49,7 +49,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN/../lib/android' \
-fuse-ld=gold \
-lbase \
-lcutils \
diff --git a/debian/system/core/img2simg.mk b/debian/system/core/img2simg.mk
index 11adf014..8baf5ba5 100644
--- a/debian/system/core/img2simg.mk
+++ b/debian/system/core/img2simg.mk
@@ -11,7 +11,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN/../lib/android' \
-lbase \
-llog \
-lpthread \
diff --git a/debian/system/core/libbacktrace.mk b/debian/system/core/libbacktrace.mk
index e3411d76..86e69874 100644
--- a/debian/system/core/libbacktrace.mk
+++ b/debian/system/core/libbacktrace.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
include /usr/share/dpkg/architecture.mk
NAME = libbacktrace
@@ -83,10 +84,9 @@ CPPFLAGS += \
LDFLAGS += \
-L/usr/lib/p7zip \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/p7zip \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
- -l:7z.so \
+ -l7z \
-lbase \
-llog \
-lpthread \
@@ -101,7 +101,7 @@ endif
build: $(OBJECTS_CXX) $(OBJECTS_ASSEMBLY) debian/out/external/libunwind/libunwind.a
mkdir -p debian/out/system/core
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS_CXX): %.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/libbase.mk b/debian/system/core/libbase.mk
index d2b074ba..8a90d6de 100644
--- a/debian/system/core/libbase.mk
+++ b/debian/system/core/libbase.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
NAME = libbase
SOURCES = \
@@ -30,7 +31,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
-llog \
-lpthread \
@@ -44,7 +45,7 @@ endif
build: $(OBJECTS)
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS): %.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/libcutils.mk b/debian/system/core/libcutils.mk
index 9d928b56..c22b0965 100644
--- a/debian/system/core/libcutils.mk
+++ b/debian/system/core/libcutils.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
NAME = libcutils
libcutils_nonwindows_sources = \
@@ -47,7 +48,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
-lbase \
-llog \
@@ -56,7 +57,7 @@ LDFLAGS += \
build: $(OBJECTS_C) $(OBJECTS_CXX)
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS_C): %.o: %.c
$(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/liblog.mk b/debian/system/core/liblog.mk
index f8c3d7fe..34a07341 100644
--- a/debian/system/core/liblog.mk
+++ b/debian/system/core/liblog.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
NAME = liblog
liblog_sources = \
@@ -35,7 +36,7 @@ LDFLAGS += \
build: $(OBJECTS)
mkdir -p debian/out/system/core
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS): %.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/libsparse.mk b/debian/system/core/libsparse.mk
index c2b2694c..2da12b8e 100644
--- a/debian/system/core/libsparse.mk
+++ b/debian/system/core/libsparse.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
NAME = libsparse
SOURCES = \
@@ -19,7 +20,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
-lbase \
-lz \
@@ -27,7 +28,7 @@ LDFLAGS += \
build: $(OBJECTS)
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS): %.o: %.cpp
$(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/libutils.mk b/debian/system/core/libutils.mk
index c37b1d2d..332492c1 100644
--- a/debian/system/core/libutils.mk
+++ b/debian/system/core/libutils.mk
@@ -41,7 +41,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
-lbacktrace \
-lcutils \
diff --git a/debian/system/core/libziparchive.mk b/debian/system/core/libziparchive.mk
index 1b286b4e..1b7499be 100644
--- a/debian/system/core/libziparchive.mk
+++ b/debian/system/core/libziparchive.mk
@@ -1,3 +1,4 @@
+include rules_yocto.mk
NAME = libziparchive
SOURCES = \
@@ -19,7 +20,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN' \
-Wl,-soname,$(NAME).so.0 \
-lbase \
-llog \
@@ -29,7 +30,7 @@ LDFLAGS += \
build: $(OBJECTS)
$(CXX) $^ -o debian/out/system/core/$(NAME).so.0 $(LDFLAGS)
- cd debian/out/system/core && ln -s $(NAME).so.0 $(NAME).so
+ cd debian/out/system/core && ln -sf $(NAME).so.0 $(NAME).so
$(OBJECTS): %.o: %.cc
$(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPFLAGS)
diff --git a/debian/system/core/simg2img.mk b/debian/system/core/simg2img.mk
index f6e3f59d..df4f44f3 100644
--- a/debian/system/core/simg2img.mk
+++ b/debian/system/core/simg2img.mk
@@ -13,7 +13,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN/../lib/android' \
-lbase \
-llog \
-lpthread \
diff --git a/debian/system/core/simg2simg.mk b/debian/system/core/simg2simg.mk
index ed53b04c..646ab030 100644
--- a/debian/system/core/simg2simg.mk
+++ b/debian/system/core/simg2simg.mk
@@ -13,7 +13,7 @@ CPPFLAGS += \
LDFLAGS += \
-Ldebian/out/system/core \
- -Wl,-rpath=/usr/lib/$(DEB_HOST_MULTIARCH)/android \
+ -Wl,-rpath='$$ORIGIN/../lib/android' \
-lbase \
-llog \
-lpthread \
diff --git a/frameworks/native/libs/adbd_auth/adbd_auth.cpp b/frameworks/native/libs/adbd_auth/adbd_auth.cpp
index a9c23110..6ca334ba 100644
--- a/frameworks/native/libs/adbd_auth/adbd_auth.cpp
+++ b/frameworks/native/libs/adbd_auth/adbd_auth.cpp
@@ -23,8 +23,10 @@
#include <sys/eventfd.h>
#include <sys/uio.h>
+#include <atomic>
#include <chrono>
#include <deque>
+#include <optional>
#include <string>
#include <string_view>
#include <tuple>
diff --git a/system/core/adb/adb_listeners.cpp b/system/core/adb/adb_listeners.cpp
index 29909a55..440cdbd4 100644
--- a/system/core/adb/adb_listeners.cpp
+++ b/system/core/adb/adb_listeners.cpp
@@ -109,7 +109,7 @@ static void listener_event_func(int _fd, unsigned ev, void* _l)
}
// Called as a transport disconnect function. |arg| is the raw alistener*.
-static void listener_disconnect(void* arg, atransport*) EXCLUDES(listener_list_mutex) {
+static void listener_disconnect(void* arg, atransport*) {
std::lock_guard<std::mutex> lock(listener_list_mutex);
for (auto iter = listener_list.begin(); iter != listener_list.end(); ++iter) {
if (iter->get() == arg) {
@@ -121,7 +121,7 @@ static void listener_disconnect(void* arg, atransport*) EXCLUDES(listener_list_m
}
// Write the list of current listeners (network redirections) into a string.
-std::string format_listeners() EXCLUDES(listener_list_mutex) {
+std::string format_listeners() {
std::lock_guard<std::mutex> lock(listener_list_mutex);
std::string result;
for (auto& l : listener_list) {
@@ -140,7 +140,7 @@ std::string format_listeners() EXCLUDES(listener_list_mutex) {
}
InstallStatus remove_listener(const char* local_name, atransport* transport)
- EXCLUDES(listener_list_mutex) {
+{
std::lock_guard<std::mutex> lock(listener_list_mutex);
for (auto iter = listener_list.begin(); iter != listener_list.end(); ++iter) {
if (local_name == (*iter)->local_name) {
@@ -151,7 +151,7 @@ InstallStatus remove_listener(const char* local_name, atransport* transport)
return INSTALL_STATUS_LISTENER_NOT_FOUND;
}
-void remove_all_listeners() EXCLUDES(listener_list_mutex) {
+void remove_all_listeners() {
std::lock_guard<std::mutex> lock(listener_list_mutex);
auto iter = listener_list.begin();
while (iter != listener_list.end()) {
@@ -164,7 +164,7 @@ void remove_all_listeners() EXCLUDES(listener_list_mutex) {
}
}
-void close_smartsockets() EXCLUDES(listener_list_mutex) {
+void close_smartsockets() {
std::lock_guard<std::mutex> lock(listener_list_mutex);
auto pred = [](const std::unique_ptr<alistener>& listener) {
return listener->local_name == "*smartsocket*";
@@ -174,7 +174,7 @@ void close_smartsockets() EXCLUDES(listener_list_mutex) {
InstallStatus install_listener(const std::string& local_name, const char* connect_to,
atransport* transport, int no_rebind, int* resolved_tcp_port,
- std::string* error) EXCLUDES(listener_list_mutex) {
+ std::string* error) {
std::lock_guard<std::mutex> lock(listener_list_mutex);
for (auto& l : listener_list) {
if (local_name == l->local_name) {
diff --git a/system/core/adb/transport_local.cpp b/system/core/adb/transport_local.cpp
index c7261860..5988ec4d 100644
--- a/system/core/adb/transport_local.cpp
+++ b/system/core/adb/transport_local.cpp
@@ -333,7 +333,7 @@ struct EmulatorConnection : public FdConnection {
/* Only call this function if you already hold local_transports_lock. */
static atransport* find_emulator_transport_by_adb_port_locked(int adb_port)
- REQUIRES(local_transports_lock) {
+{
auto it = local_transports.find(adb_port);
if (it == local_transports.end()) {
return nullptr;

View File

@@ -0,0 +1,126 @@
From 02b6b6977d80af4b9b806054fadb5a06cedf011d Mon Sep 17 00:00:00 2001
From: Etienne Cordonnier <ecordonnier@snap.com>
Date: Tue, 14 Mar 2023 11:33:50 +0100
Subject: [PATCH] Update usage of usbdevfs_urb to match new kernel UAPI
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Linux kernel API has been changed by commit 94dfc73e7cf4 ("treewide: uapi: Replace zero-length arrays with flexible-array members")
where zero-length array iso_frame_desc in struct usbdevfs_urb was replaced with a proper flexible-array member.
Current USB API usage causes a compilation error at Linux 6.0:
In file included from /home/mae/.cache/kiss/proc/121205/build/android-tools/vendor/adb/client/usb_linux.cpp:28:
/usr/include/linux/usbdevice_fs.h:134:41: error: flexible array member usbdevfs_urb::iso_frame_desc not at end of struct usb_handle
134 | struct usbdevfs_iso_packet_desc iso_frame_desc[];
| ^~~~~~~~~~~~~~
/home/mae/.cache/kiss/proc/121205/build/android-tools/vendor/adb/client/usb_linux.cpp:76:18: note: next member usbdevfs_urb usb_handle::urb_out declared here
76 | usbdevfs_urb urb_out;
| ^~~~~~~
/home/mae/.cache/kiss/proc/121205/build/android-tools/vendor/adb/client/usb_linux.cpp:61:8: note: in the definition of struct usb_handle
61 | struct usb_handle {
| ^~~~~~~~~~
Fix it by using pointers to a struct with flexible-array members.
Current fix works both with the old and the new API.
See https://github.com/nmeum/android-tools/issues/74 for more context.
Tested: built on Linux against kernel 5.19 and 6.0; 'adb shell' over USB
cable
Acked-by: Gustavo A. R. Silva gustavoars@kernel.org
Change-Id: I7f0f7b35d9a3ab980d3520b541b60c7857a6b101
Signed-off-by: Anatol Pomozov <anatol.pomozov@gmail.com>
[Backported on version 10]
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
system/core/adb/client/usb_linux.cpp | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/system/core/adb/client/usb_linux.cpp b/system/core/adb/client/usb_linux.cpp
index 343e7b59..6a4479f3 100644
--- a/system/core/adb/client/usb_linux.cpp
+++ b/system/core/adb/client/usb_linux.cpp
@@ -71,8 +71,8 @@ struct usb_handle : public ::usb_handle {
unsigned zero_mask;
unsigned writeable = 1;
- usbdevfs_urb urb_in;
- usbdevfs_urb urb_out;
+ usbdevfs_urb *urb_in;
+ usbdevfs_urb *urb_out;
bool urb_in_busy = false;
bool urb_out_busy = false;
@@ -305,7 +305,7 @@ static int usb_bulk_write(usb_handle* h, const void* data, int len) {
std::unique_lock<std::mutex> lock(h->mutex);
D("++ usb_bulk_write ++");
- usbdevfs_urb* urb = &h->urb_out;
+ usbdevfs_urb* urb = h->urb_out;
memset(urb, 0, sizeof(*urb));
urb->type = USBDEVFS_URB_TYPE_BULK;
urb->endpoint = h->ep_out;
@@ -344,7 +344,7 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) {
std::unique_lock<std::mutex> lock(h->mutex);
D("++ usb_bulk_read ++");
- usbdevfs_urb* urb = &h->urb_in;
+ usbdevfs_urb* urb = h->urb_in;
memset(urb, 0, sizeof(*urb));
urb->type = USBDEVFS_URB_TYPE_BULK;
urb->endpoint = h->ep_in;
@@ -389,7 +389,7 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) {
}
D("[ urb @%p status = %d, actual = %d ]", out, out->status, out->actual_length);
- if (out == &h->urb_in) {
+ if (out == h->urb_in) {
D("[ reap urb - IN complete ]");
h->urb_in_busy = false;
if (urb->status != 0) {
@@ -398,7 +398,7 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) {
}
return urb->actual_length;
}
- if (out == &h->urb_out) {
+ if (out == h->urb_out) {
D("[ reap urb - OUT compelete ]");
h->urb_out_busy = false;
h->cv.notify_all();
@@ -502,10 +502,10 @@ void usb_kick(usb_handle* h) {
** but this ensures that a reader blocked on REAPURB
** will get unblocked
*/
- ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_in);
- ioctl(h->fd, USBDEVFS_DISCARDURB, &h->urb_out);
- h->urb_in.status = -ENODEV;
- h->urb_out.status = -ENODEV;
+ ioctl(h->fd, USBDEVFS_DISCARDURB, h->urb_in);
+ ioctl(h->fd, USBDEVFS_DISCARDURB, h->urb_out);
+ h->urb_in->status = -ENODEV;
+ h->urb_out->status = -ENODEV;
h->urb_in_busy = false;
h->urb_out_busy = false;
h->cv.notify_all();
@@ -521,6 +521,8 @@ int usb_close(usb_handle* h) {
D("-- usb close %p (fd = %d) --", h, h->fd);
+ delete h->urb_in;
+ delete h->urb_out;
delete h;
return 0;
@@ -556,6 +558,8 @@ static void register_device(const char* dev_name, const char* dev_path, unsigned
usb->ep_out = ep_out;
usb->zero_mask = zero_mask;
usb->max_packet_size = max_packet_size;
+ usb->urb_in = new usbdevfs_urb;
+ usb->urb_out = new usbdevfs_urb;
// Initialize mark so we don't get garbage collected after the device scan.
usb->mark = true;

View File

@@ -0,0 +1,48 @@
From e4a29888cb52c1eafd3ab57a6e220b38147ecfbe Mon Sep 17 00:00:00 2001
From: Etienne Cordonnier <ecordonnier@snap.com>
Date: Tue, 14 Mar 2023 13:39:23 +0100
Subject: [PATCH] adb: Fix build on big endian systems
The usb_linux_client.c file defines cpu_to_le16/32 by using the C
library htole16/32 function calls. However, cpu_to_le16/32 are used
when initializing structures, i.e in a context where a function call
is not allowed.
It works fine on little endian systems because htole16/32 are defined
by the C library as no-ops. But on big-endian systems, they are
actually doing something, which might involve calling a function,
causing build failures.
To solve this, we simply open-code cpu_to_le16/32 in a way that allows
them to be used when initializing structures.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
[Forward-ported to version 29]
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
system/core/adb/daemon/usb_ffs.cpp | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/system/core/adb/daemon/usb_ffs.cpp b/system/core/adb/daemon/usb_ffs.cpp
index b19fa5d5..ef2291ca 100644
--- a/system/core/adb/daemon/usb_ffs.cpp
+++ b/system/core/adb/daemon/usb_ffs.cpp
@@ -39,8 +39,15 @@
#define USB_EXT_PROP_UNICODE 1
-#define cpu_to_le16(x) htole16(x)
-#define cpu_to_le32(x) htole32(x)
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define cpu_to_le16(x) (x)
+# define cpu_to_le32(x) (x)
+#else
+# define cpu_to_le16(x) ((((x) >> 8) & 0xffu) | (((x) & 0xffu) << 8))
+# define cpu_to_le32(x) \
+ ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) | \
+ (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
+#endif
// clang-format off
struct func_desc {

View File

@@ -0,0 +1,23 @@
From 4ef35041ba5c02df48c31f2382e7c3c4316ad936 Mon Sep 17 00:00:00 2001
From: Etienne Cordonnier <ecordonnier@snap.com>
Date: Tue, 14 Mar 2023 13:53:51 +0100
Subject: [PATCH] adb: Allow adbd to be run as root
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
---
system/core/adb/daemon/main.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/system/core/adb/daemon/main.cpp b/system/core/adb/daemon/main.cpp
index e807d13d..309663a2 100644
--- a/system/core/adb/daemon/main.cpp
+++ b/system/core/adb/daemon/main.cpp
@@ -75,6 +75,7 @@ static bool should_drop_capabilities_bounding_set() {
}
static bool should_drop_privileges() {
+ return true;
// "adb root" not allowed, always drop privileges.
if (!ALLOW_ADBD_ROOT && !is_device_unlocked()) return true;

View File

@@ -0,0 +1,87 @@
include rules_yocto.mk
NAME = adbd
SOURCES = \
adb/adbconnection/adbconnection_server.cpp \
adb/daemon/auth.cpp \
adb/daemon/file_sync_service.cpp \
adb/daemon/file_sync_service.h \
adb/daemon/framebuffer_service.cpp \
adb/daemon/framebuffer_service.h \
adb/daemon/jdwp_service.cpp \
adb/daemon/main.cpp \
adb/daemon/restart_service.cpp \
adb/daemon/restart_service.h \
adb/daemon/services.cpp \
adb/daemon/shell_service.cpp \
adb/daemon/shell_service.h \
adb/daemon/usb_ffs.cpp \
adb/daemon/usb_legacy.cpp \
adb/daemon/usb.cpp \
adb/shell_service_protocol.cpp \
adb/adb.cpp \
adb/adb_io.cpp \
adb/adb_listeners.cpp \
adb/adb_trace.cpp \
adb/adb_unique_fd.cpp \
adb/adb_utils.cpp \
adb/fdevent/fdevent.cpp \
adb/fdevent/fdevent_epoll.cpp \
adb/services.cpp \
adb/sockets.cpp \
adb/socket_spec.cpp \
adb/sysdeps/errno.cpp \
adb/sysdeps/posix/network.cpp \
adb/sysdeps_unix.cpp \
adb/transport.cpp \
adb/transport_fd.cpp \
adb/transport_local.cpp \
adb/transport_usb.cpp \
adb/types.cpp \
diagnose_usb/diagnose_usb.cpp \
libasyncio/AsyncIO.cpp \
SOURCES := $(foreach source, $(SOURCES), system/core/$(source))
SOURCES += \
frameworks/native/libs/adbd_auth/adbd_auth.cpp
CXXFLAGS += -std=gnu++20
CPPFLAGS += -Isystem/coreinclude -Isystem/core/adb -Isystem/core/base/include -Idebian/out/system/core -Isystem/tools/mkbootimg/include/bootimg -Isystem/core/fs_mgr/include \
-Isystem/core/fs_mgr/include_fstab \
-DADB_VERSION='"$(DEB_VERSION)"' -D_GNU_SOURCE
LDFLAGS += -Wl,-rpath='$$ORIGIN/../lib/android' -Wl,-rpath-link='$$ORIGIN/../lib/android' \
-lpthread -Ldebian/out/system/core -Ldebian/out/external/boringssl -lbase -lcrypto_utils -l:libcrypto.a -lcutils -llog -lresolv
PAGE_SIZE ?= 4096
CXXFLAGS += -UADB_HOST
CXXFLAGS += -DADB_HOST=0
CXXFLAGS += -DALLOW_ADBD_DISABLE_VERITY
CXXFLAGS += -DALLOW_ADBD_NO_AUTH
CXXFLAGS += -DPLATFORM_TOOLS_VERSION='"28.0.2"'
CXXFLAGS += -Isystem/core/diagnose_usb/include
CXXFLAGS += -Isystem/core/adb/daemon/include
CXXFLAGS += -Isystem/core/adb/adbconnection/include
CXXFLAGS += -Isystem/core/libasyncio/include
CXXFLAGS += -Isystem/core/libcutils/include
CXXFLAGS += -Isystem/core/libcrypto_utils/include
CXXFLAGS += -Isystem/core/liblog/include/
CXXFLAGS += -Isystem/core/libutils/include
CXXFLAGS += -Iframeworks/native/libs/adbd_auth/include
CXXFLAGS += -Wno-c++11-narrowing
CXXFLAGS += -DPAGE_SIZE=$(PAGE_SIZE)
# -latomic should be the last library specified
# https://github.com/android/ndk/issues/589
ifneq ($(filter armel mipsel,$(DEB_HOST_ARCH)),)
LDFLAGS += -latomic
endif
build: $(SOURCES)
mkdir --parents debian/out/system/core
$(CXX) $^ -o debian/out/system/core/adbd $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
clean:
$(RM) debian/out/system/core/adbd

View File

@@ -0,0 +1,13 @@
[Unit]
Description=Android Debug Bridge
ConditionPathExists=/var/usb-debugging-enabled
Before=android-system.service
[Service]
Type=simple
Restart=on-failure
ExecStartPre=-/usr/bin/android-gadget-setup adb
ExecStart=/usr/bin/adbd
[Install]
WantedBy=basic.target

View File

@@ -0,0 +1,651 @@
From: Guo Ren <guoren@linux.alibaba.com>
Date: Wed, 29 Jun 2022 16:46:46 +0800
Subject: Add riscv64 support
This patch contains the dwarf unwind support for 64bit risc-v.
* DwarfCfa.cpp (cfa_def_cfa_register): setup register if CFA_REG is
not setup for riscv64
* Elf.cpp (GetRelPc): convert offset to virtual address for riscv64.
* ElfInterface.cpp (GetVirtAddrFromOffset): New for riscv64.
* RegsRiscv64.cpp (StepIfSignalHandler): Fix signal frame check.
libunwindstack/include/unwindstack/
* ElfInterface.h (GetVirtAddrFromOffset): New for riscv64.
libunwindstack/tests/
* DwarfCfaTest.cpp (cfa_def_cfa_register): ok for riscv64.
* RegsStepIfSignalHandlerTest.cpp (riscv64_step_if_signal_handler): Fix
testcase for riscv64
Test: Builds.
Test: All unit tests pass.
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Lifang Xia <lifang_xia@linux.alibaba.com>
Signed-off-by: Mao Han <han_mao@linux.alibaba.com>
Change-Id: Ib21ddf23cc83f332af202df7bffcaceec16063e0
---
system/core/libunwindstack/Android.bp | 1 +
system/core/libunwindstack/Elf.cpp | 2 +
system/core/libunwindstack/Regs.cpp | 10 ++
system/core/libunwindstack/RegsRiscv64.cpp | 156 +++++++++++++++++++++
.../core/libunwindstack/include/unwindstack/Elf.h | 5 +
.../include/unwindstack/MachineRiscv64.h | 59 ++++++++
.../include/unwindstack/RegsGetLocal.h | 43 ++++++
.../include/unwindstack/RegsRiscv64.h | 59 ++++++++
.../include/unwindstack/UcontextRiscv64.h | 80 +++++++++++
.../include/unwindstack/UserRiscv64.h | 37 +++++
system/core/libunwindstack/tools/unwind.cpp | 3 +
.../core/libunwindstack/tools/unwind_symbols.cpp | 3 +
12 files changed, 458 insertions(+)
create mode 100644 system/core/libunwindstack/RegsRiscv64.cpp
create mode 100644 system/core/libunwindstack/include/unwindstack/MachineRiscv64.h
create mode 100644 system/core/libunwindstack/include/unwindstack/RegsRiscv64.h
create mode 100644 system/core/libunwindstack/include/unwindstack/UcontextRiscv64.h
create mode 100644 system/core/libunwindstack/include/unwindstack/UserRiscv64.h
diff --git a/system/core/libunwindstack/Android.bp b/system/core/libunwindstack/Android.bp
index 3695f72..f1f9c68 100644
--- a/system/core/libunwindstack/Android.bp
+++ b/system/core/libunwindstack/Android.bp
@@ -70,6 +70,7 @@ cc_library {
"RegsArm64.cpp",
"RegsX86.cpp",
"RegsX86_64.cpp",
+ "RegsRiscv64.cpp",
"RegsMips.cpp",
"RegsMips64.cpp",
"Unwinder.cpp",
diff --git a/system/core/libunwindstack/Elf.cpp b/system/core/libunwindstack/Elf.cpp
index f01b092..3c2088b 100644
--- a/system/core/libunwindstack/Elf.cpp
+++ b/system/core/libunwindstack/Elf.cpp
@@ -290,6 +290,8 @@ ElfInterface* Elf::CreateInterfaceFromMemory(Memory* memory) {
arch_ = ARCH_X86_64;
} else if (e_machine == EM_MIPS) {
arch_ = ARCH_MIPS64;
+ } else if (e_machine == EM_RISCV) {
+ arch_ = ARCH_RISCV64;
} else {
// Unsupported.
ALOGI("64 bit elf that is neither aarch64 nor x86_64 nor mips64: e_machine = %d\n",
diff --git a/system/core/libunwindstack/Regs.cpp b/system/core/libunwindstack/Regs.cpp
index c7dec52..447a554 100644
--- a/system/core/libunwindstack/Regs.cpp
+++ b/system/core/libunwindstack/Regs.cpp
@@ -27,12 +27,14 @@
#include <unwindstack/RegsArm64.h>
#include <unwindstack/RegsMips.h>
#include <unwindstack/RegsMips64.h>
+#include <unwindstack/RegsRiscv64.h>
#include <unwindstack/RegsX86.h>
#include <unwindstack/RegsX86_64.h>
#include <unwindstack/UserArm.h>
#include <unwindstack/UserArm64.h>
#include <unwindstack/UserMips.h>
#include <unwindstack/UserMips64.h>
+#include <unwindstack/UserRiscv64.h>
#include <unwindstack/UserX86.h>
#include <unwindstack/UserX86_64.h>
@@ -67,6 +69,8 @@ Regs* Regs::RemoteGet(pid_t pid) {
return RegsMips::Read(buffer.data());
case sizeof(mips64_user_regs):
return RegsMips64::Read(buffer.data());
+ case sizeof(riscv64_user_regs):
+ return RegsRiscv64::Read(buffer.data());
}
return nullptr;
}
@@ -85,6 +89,8 @@ Regs* Regs::CreateFromUcontext(ArchEnum arch, void* ucontext) {
return RegsMips::CreateFromUcontext(ucontext);
case ARCH_MIPS64:
return RegsMips64::CreateFromUcontext(ucontext);
+ case ARCH_RISCV64:
+ return RegsRiscv64::CreateFromUcontext(ucontext);
case ARCH_UNKNOWN:
default:
return nullptr;
@@ -104,6 +110,8 @@ ArchEnum Regs::CurrentArch() {
return ARCH_MIPS;
#elif defined(__mips__) && defined(__LP64__)
return ARCH_MIPS64;
+#elif defined(__riscv)
+ return ARCH_RISCV64;
#else
abort();
#endif
@@ -123,6 +131,8 @@ Regs* Regs::CreateFromLocal() {
regs = new RegsMips();
#elif defined(__mips__) && defined(__LP64__)
regs = new RegsMips64();
+#elif defined(__riscv)
+ regs = new RegsRiscv64();
#else
abort();
#endif
diff --git a/system/core/libunwindstack/RegsRiscv64.cpp b/system/core/libunwindstack/RegsRiscv64.cpp
new file mode 100644
index 0000000..887762a
--- /dev/null
+++ b/system/core/libunwindstack/RegsRiscv64.cpp
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdint.h>
+#include <string.h>
+
+#include <functional>
+
+#include <unwindstack/Elf.h>
+#include <unwindstack/MachineRiscv64.h>
+#include <unwindstack/MapInfo.h>
+#include <unwindstack/Memory.h>
+#include <unwindstack/RegsRiscv64.h>
+#include <unwindstack/UcontextRiscv64.h>
+#include <unwindstack/UserRiscv64.h>
+
+namespace unwindstack {
+
+RegsRiscv64::RegsRiscv64()
+ : RegsImpl<uint64_t>(RISCV64_REG_MAX, Location(LOCATION_REGISTER, RISCV64_REG_RA)) {}
+
+ArchEnum RegsRiscv64::Arch() {
+ return ARCH_RISCV64;
+}
+
+uint64_t RegsRiscv64::pc() {
+ return regs_[RISCV64_REG_PC];
+}
+
+uint64_t RegsRiscv64::sp() {
+ return regs_[RISCV64_REG_SP];
+}
+
+void RegsRiscv64::set_pc(uint64_t pc) {
+ regs_[RISCV64_REG_PC] = pc;
+}
+
+void RegsRiscv64::set_sp(uint64_t sp) {
+ regs_[RISCV64_REG_SP] = sp;
+}
+
+uint64_t RegsRiscv64::GetPcAdjustment(uint64_t rel_pc, Elf*) {
+ if (rel_pc < 8) {
+ return 0;
+ }
+ // For now, just assume no compact branches
+ return 8;
+}
+
+bool RegsRiscv64::SetPcFromReturnAddress(Memory*) {
+ uint64_t ra = regs_[RISCV64_REG_RA];
+ if (regs_[RISCV64_REG_PC] == ra) {
+ return false;
+ }
+
+ regs_[RISCV64_REG_PC] = ra;
+ return true;
+}
+
+void RegsRiscv64::IterateRegisters(std::function<void(const char*, uint64_t)> fn) {
+ fn("pc", regs_[RISCV64_REG_PC]);
+ fn("ra", regs_[RISCV64_REG_RA]);
+ fn("sp", regs_[RISCV64_REG_SP]);
+ fn("gp", regs_[RISCV64_REG_GP]);
+ fn("tp", regs_[RISCV64_REG_TP]);
+ fn("t0", regs_[RISCV64_REG_T0]);
+ fn("t1", regs_[RISCV64_REG_T1]);
+ fn("t2", regs_[RISCV64_REG_T2]);
+ fn("t3", regs_[RISCV64_REG_T3]);
+ fn("t4", regs_[RISCV64_REG_T4]);
+ fn("t5", regs_[RISCV64_REG_T5]);
+ fn("t6", regs_[RISCV64_REG_T6]);
+ fn("s0", regs_[RISCV64_REG_S0]);
+ fn("s1", regs_[RISCV64_REG_S1]);
+ fn("s2", regs_[RISCV64_REG_S2]);
+ fn("s3", regs_[RISCV64_REG_S3]);
+ fn("s4", regs_[RISCV64_REG_S4]);
+ fn("s5", regs_[RISCV64_REG_S5]);
+ fn("s6", regs_[RISCV64_REG_S6]);
+ fn("s7", regs_[RISCV64_REG_S7]);
+ fn("s8", regs_[RISCV64_REG_S8]);
+ fn("s9", regs_[RISCV64_REG_S9]);
+ fn("s10", regs_[RISCV64_REG_S10]);
+ fn("s11", regs_[RISCV64_REG_S11]);
+ fn("a0", regs_[RISCV64_REG_A0]);
+ fn("a1", regs_[RISCV64_REG_A1]);
+ fn("a2", regs_[RISCV64_REG_A2]);
+ fn("a3", regs_[RISCV64_REG_A3]);
+ fn("a4", regs_[RISCV64_REG_A4]);
+ fn("a5", regs_[RISCV64_REG_A5]);
+ fn("a6", regs_[RISCV64_REG_A6]);
+ fn("a7", regs_[RISCV64_REG_A7]);
+}
+
+Regs* RegsRiscv64::Read(void* remote_data) {
+ riscv64_user_regs* user = reinterpret_cast<riscv64_user_regs*>(remote_data);
+
+ RegsRiscv64* regs = new RegsRiscv64();
+ memcpy(regs->RawData(), &user->regs[0], RISCV64_REG_MAX * sizeof(uint64_t));
+ // uint64_t* reg_data = reinterpret_cast<uint64_t*>(regs->RawData());
+ return regs;
+}
+
+Regs* RegsRiscv64::CreateFromUcontext(void* ucontext) {
+ riscv64_ucontext_t* riscv64_ucontext = reinterpret_cast<riscv64_ucontext_t*>(ucontext);
+
+ RegsRiscv64* regs = new RegsRiscv64();
+ memcpy(regs->RawData(), &riscv64_ucontext->uc_mcontext.__gregs[0],
+ RISCV64_REG_MAX * sizeof(uint64_t));
+ return regs;
+}
+
+bool RegsRiscv64::StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) {
+ uint64_t data;
+ Memory* elf_memory = elf->memory();
+ // Read from elf memory since it is usually more expensive to read from
+ // process memory.
+ if (!elf_memory->ReadFully(elf_offset, &data, sizeof(data))) {
+ return false;
+ }
+ // Look for the kernel sigreturn function.
+ // __kernel_rt_sigreturn:
+ // li a7, __NR_rt_sigreturn
+ // scall
+
+ const uint8_t li_scall[] = {0x93, 0x08, 0xb0, 0x08, 0x73, 0x00, 0x00, 0x00};
+ if (memcmp(&data, &li_scall, 8) != 0) {
+ return false;
+ }
+
+ // SP + sizeof(siginfo_t) + uc_mcontext offset + PC offset.
+ if (!process_memory->ReadFully(regs_[RISCV64_REG_SP] + 0x80 + 0xb0 + 0x00, regs_.data(),
+ sizeof(uint64_t) * (RISCV64_REG_MAX))) {
+ return false;
+ }
+ return true;
+}
+
+Regs* RegsRiscv64::Clone() {
+ return new RegsRiscv64(*this);
+}
+
+} // namespace unwindstack
diff --git a/system/core/libunwindstack/include/unwindstack/Elf.h b/system/core/libunwindstack/include/unwindstack/Elf.h
index 472ed92..88fa0ff 100644
--- a/system/core/libunwindstack/include/unwindstack/Elf.h
+++ b/system/core/libunwindstack/include/unwindstack/Elf.h
@@ -32,6 +32,10 @@
#define EM_AARCH64 183
#endif
+#if !defined(EM_RISCV)
+#define EM_RISCV 243
+#endif
+
namespace unwindstack {
// Forward declaration.
@@ -46,6 +50,7 @@ enum ArchEnum : uint8_t {
ARCH_X86_64,
ARCH_MIPS,
ARCH_MIPS64,
+ ARCH_RISCV64,
};
class Elf {
diff --git a/system/core/libunwindstack/include/unwindstack/MachineRiscv64.h b/system/core/libunwindstack/include/unwindstack/MachineRiscv64.h
new file mode 100644
index 0000000..397e680
--- /dev/null
+++ b/system/core/libunwindstack/include/unwindstack/MachineRiscv64.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+namespace unwindstack {
+
+enum Riscv64Reg : uint16_t {
+ RISCV64_REG_PC,
+ RISCV64_REG_RA,
+ RISCV64_REG_SP,
+ RISCV64_REG_GP,
+ RISCV64_REG_TP,
+ RISCV64_REG_T0,
+ RISCV64_REG_T1,
+ RISCV64_REG_T2,
+ RISCV64_REG_S0,
+ RISCV64_REG_S1,
+ RISCV64_REG_A0,
+ RISCV64_REG_A1,
+ RISCV64_REG_A2,
+ RISCV64_REG_A3,
+ RISCV64_REG_A4,
+ RISCV64_REG_A5,
+ RISCV64_REG_A6,
+ RISCV64_REG_A7,
+ RISCV64_REG_S2,
+ RISCV64_REG_S3,
+ RISCV64_REG_S4,
+ RISCV64_REG_S5,
+ RISCV64_REG_S6,
+ RISCV64_REG_S7,
+ RISCV64_REG_S8,
+ RISCV64_REG_S9,
+ RISCV64_REG_S10,
+ RISCV64_REG_S11,
+ RISCV64_REG_T3,
+ RISCV64_REG_T4,
+ RISCV64_REG_T5,
+ RISCV64_REG_T6,
+ RISCV64_REG_MAX,
+};
+
+} // namespace unwindstack
diff --git a/system/core/libunwindstack/include/unwindstack/RegsGetLocal.h b/system/core/libunwindstack/include/unwindstack/RegsGetLocal.h
index f0b5e3a..698eba2 100644
--- a/system/core/libunwindstack/include/unwindstack/RegsGetLocal.h
+++ b/system/core/libunwindstack/include/unwindstack/RegsGetLocal.h
@@ -81,6 +81,49 @@ inline __attribute__((__always_inline__)) void AsmGetRegs(void* reg_data) {
: "x12", "x13", "memory");
}
+#elif defined(__riscv)
+
+inline __attribute__((__always_inline__)) void AsmGetRegs(void* reg_data) {
+ asm volatile(
+ "1:\n"
+ "sd ra, 8(%[base])\n"
+ "sd sp, 16(%[base])\n"
+ "sd gp, 24(%[base])\n"
+ "sd tp, 32(%[base])\n"
+ "sd t0, 40(%[base])\n"
+ "sd t1, 48(%[base])\n"
+ "sd t2, 56(%[base])\n"
+ "sd s0, 64(%[base])\n"
+ "sd s1, 72(%[base])\n"
+ "sd a0, 80(%[base])\n"
+ "sd a1, 88(%[base])\n"
+ "sd a2, 96(%[base])\n"
+ "sd a3, 104(%[base])\n"
+ "sd a4, 112(%[base])\n"
+ "sd a5, 120(%[base])\n"
+ "sd a6, 128(%[base])\n"
+ "sd a7, 136(%[base])\n"
+ "sd s2, 144(%[base])\n"
+ "sd s3, 152(%[base])\n"
+ "sd s4, 160(%[base])\n"
+ "sd s5, 168(%[base])\n"
+ "sd s6, 176(%[base])\n"
+ "sd s7, 184(%[base])\n"
+ "sd s8, 192(%[base])\n"
+ "sd s9, 200(%[base])\n"
+ "sd s10, 208(%[base])\n"
+ "sd s11, 216(%[base])\n"
+ "sd t3, 224(%[base])\n"
+ "sd t4, 232(%[base])\n"
+ "sd t5, 240(%[base])\n"
+ "sd t6, 248(%[base])\n"
+ "la t1, 1b\n"
+ "sd t1, 0(%[base])\n"
+ : [base] "+r"(reg_data)
+ :
+ : "t1", "memory");
+}
+
#elif defined(__i386__) || defined(__x86_64__) || defined(__mips__)
extern "C" void AsmGetRegs(void* regs);
diff --git a/system/core/libunwindstack/include/unwindstack/RegsRiscv64.h b/system/core/libunwindstack/include/unwindstack/RegsRiscv64.h
new file mode 100644
index 0000000..eb09397
--- /dev/null
+++ b/system/core/libunwindstack/include/unwindstack/RegsRiscv64.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+#include <functional>
+
+#include <unwindstack/Elf.h>
+#include <unwindstack/Regs.h>
+
+namespace unwindstack {
+
+// Forward declarations.
+class Memory;
+
+class RegsRiscv64 : public RegsImpl<uint64_t> {
+ public:
+ RegsRiscv64();
+ virtual ~RegsRiscv64() = default;
+
+ ArchEnum Arch() override final;
+
+ uint64_t GetPcAdjustment(uint64_t rel_pc, Elf* elf) override;
+
+ bool SetPcFromReturnAddress(Memory* process_memory) override;
+
+ bool StepIfSignalHandler(uint64_t elf_offset, Elf* elf, Memory* process_memory) override;
+
+ void IterateRegisters(std::function<void(const char*, uint64_t)>) override final;
+
+ uint64_t pc() override;
+ uint64_t sp() override;
+
+ void set_pc(uint64_t pc) override;
+ void set_sp(uint64_t sp) override;
+
+ Regs* Clone() override final;
+
+ static Regs* Read(void* data);
+
+ static Regs* CreateFromUcontext(void* ucontext);
+};
+
+} // namespace unwindstack
diff --git a/system/core/libunwindstack/include/unwindstack/UcontextRiscv64.h b/system/core/libunwindstack/include/unwindstack/UcontextRiscv64.h
new file mode 100644
index 0000000..c6c82b1
--- /dev/null
+++ b/system/core/libunwindstack/include/unwindstack/UcontextRiscv64.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <sys/cdefs.h>
+
+typedef uint64_t __riscv_mc_gp_state[32]; // unsigned long
+
+struct __riscv_mc_f_ext_state {
+ uint32_t __f[32];
+ uint32_t __fcsr;
+};
+
+struct __riscv_mc_d_ext_state {
+ uint64_t __f[32];
+ uint32_t __fcsr;
+};
+
+struct __riscv_mc_q_ext_state {
+ uint64_t __f[64] __attribute__((__aligned__(16)));
+ uint32_t __fcsr;
+ uint32_t __reserved[3];
+};
+
+union __riscv_mc_fp_state {
+ struct __riscv_mc_f_ext_state __f;
+ struct __riscv_mc_d_ext_state __d;
+ struct __riscv_mc_q_ext_state __q;
+};
+
+struct __riscv_stack_t {
+ uint64_t ss_sp;
+ int32_t ss_flags;
+ uint64_t ss_size;
+};
+
+struct riscv64_sigset_t {
+ uint64_t sig; // unsigned long
+};
+
+struct riscv64_mcontext_t {
+ __riscv_mc_gp_state __gregs;
+ union __riscv_mc_fp_state __fpregs;
+};
+
+struct riscv64_ucontext_t {
+ uint64_t uc_flags; // unsigned long
+ struct riscv64_ucontext_t* uc_link;
+ __riscv_stack_t uc_stack;
+ riscv64_sigset_t uc_sigmask;
+ /* The kernel adds extra padding here to allow sigset_t to grow. */
+ int8_t __padding[128 - sizeof(riscv64_sigset_t)]; // char
+ riscv64_mcontext_t uc_mcontext;
+};
diff --git a/system/core/libunwindstack/include/unwindstack/UserRiscv64.h b/system/core/libunwindstack/include/unwindstack/UserRiscv64.h
new file mode 100644
index 0000000..1e91228
--- /dev/null
+++ b/system/core/libunwindstack/include/unwindstack/UserRiscv64.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#pragma once
+
+namespace unwindstack {
+
+struct riscv64_user_regs {
+ uint64_t regs[32];
+};
+
+} // namespace unwindstack
diff --git a/system/core/libunwindstack/tools/unwind.cpp b/system/core/libunwindstack/tools/unwind.cpp
index 1812e50..ae20891 100644
--- a/system/core/libunwindstack/tools/unwind.cpp
+++ b/system/core/libunwindstack/tools/unwind.cpp
@@ -83,6 +83,9 @@ void DoUnwind(pid_t pid) {
case unwindstack::ARCH_MIPS64:
printf("mips64");
break;
+ case unwindstack::ARCH_RISCV64:
+ printf("riscv64");
+ break;
default:
printf("unknown\n");
return;
diff --git a/system/core/libunwindstack/tools/unwind_symbols.cpp b/system/core/libunwindstack/tools/unwind_symbols.cpp
index 8df2284..976db56 100644
--- a/system/core/libunwindstack/tools/unwind_symbols.cpp
+++ b/system/core/libunwindstack/tools/unwind_symbols.cpp
@@ -77,6 +77,9 @@ int main(int argc, char** argv) {
case EM_AARCH64:
printf("ABI: arm64\n");
break;
+ case EM_RISCV:
+ printf("ABI: riscv64\n");
+ break;
case EM_386:
printf("ABI: x86\n");
break;

View File

@@ -0,0 +1,44 @@
Description: Added missing headers causing compile errors
Author: Umang Parmar <umangjparmar@gmail.com>
Forwarded: not-needed
--- a/system/core/adb/sysdeps/posix/network.cpp
+++ b/system/core/adb/sysdeps/posix/network.cpp
@@ -22,6 +22,7 @@
#include <sys/socket.h>
#include <string>
+#include <cstring>
#include <android-base/logging.h>
#include <android-base/stringprintf.h>
--- a/system/core/base/file.cpp
+++ b/system/core/base/file.cpp
@@ -26,6 +26,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <cstring>
#include <memory>
#include <mutex>
--- a/system/core/libbacktrace/BacktraceMap.cpp
+++ b/system/core/libbacktrace/BacktraceMap.cpp
@@ -21,6 +21,7 @@
#include <stdint.h>
#include <sys/types.h>
#include <unistd.h>
+#include <algorithm>
#include <log/log.h>
--- a/system/core/libbacktrace/UnwindStackMap.cpp
+++ b/system/core/libbacktrace/UnwindStackMap.cpp
@@ -20,6 +20,7 @@
#include <string>
#include <vector>
+#include <algorithm>
#include <backtrace/BacktraceMap.h>
#include <unwindstack/Elf.h>

View File

@@ -0,0 +1,20 @@
Description: Bring Clang's _Nonnull keyword to GCC
Author: Kai-Chung Yan
Forwarded: not-needed
--- a/system/core/adb/sysdeps.h
+++ b/system/core/adb/sysdeps.h
@@ -40,11 +40,12 @@
#include "sysdeps/network.h"
#include "sysdeps/stat.h"
+#define _Nonnull
+#define _Nullable
+
#ifdef _WIN32
// Clang-only nullability specifiers
-#define _Nonnull
-#define _Nullable
#include <ctype.h>
#include <direct.h>

View File

@@ -0,0 +1,14 @@
Description: Fix the weird error by GCC7 that fails to match the correct parent method.
Author: Kai-Chung Yan
Forwarded: not-needed
--- a/system/core/libutils/include/utils/Vector.h
+++ b/system/core/libutils/include/utils/Vector.h
@@ -256,7 +256,7 @@
template<class TYPE> inline
const Vector<TYPE>& Vector<TYPE>::operator = (const Vector<TYPE>& rhs) const {
- VectorImpl::operator = (static_cast<const VectorImpl&>(rhs));
+ VectorImpl::operator = (rhs);
return *this;
}

View File

@@ -0,0 +1,41 @@
Forwarded: not-needed
--- a/system/core/fs_mgr/liblp/reader.cpp
+++ b/system/core/fs_mgr/liblp/reader.cpp
@@ -22,6 +22,7 @@
#include <unistd.h>
#include <functional>
+#include <cstring>
#include <android-base/file.h>
#include <android-base/unique_fd.h>
--- a/system/core/fs_mgr/liblp/writer.cpp
+++ b/system/core/fs_mgr/liblp/writer.cpp
@@ -21,6 +21,7 @@
#include <unistd.h>
#include <string>
+#include <cstring>
#include <android-base/file.h>
#include <android-base/unique_fd.h>
--- a/system/core/liblog/logger_write.cpp
+++ b/system/core/liblog/logger_write.cpp
@@ -27,6 +27,7 @@
#include <android/set_abort_message.h>
#endif
+#include <mutex>
#include <shared_mutex>
#include <android-base/errno_restorer.h>
--- a/system/core/libziparchive/zip_archive_stream_entry.cc
+++ b/system/core/libziparchive/zip_archive_stream_entry.cc
@@ -23,6 +23,7 @@
#include <sys/types.h>
#include <unistd.h>
+#include <limits>
#include <memory>
#include <vector>

View File

@@ -0,0 +1,13 @@
Description: Off-by-one error in the dwarf_to_unw_regnum function in include/dwarf_i.h in
libunwind 1.1 allows local users to have unspecified impact via invalid dwarf opcodes.
--- a/external/libunwind/include/dwarf_i.h
+++ b/external/libunwind/include/dwarf_i.h
@@ -20,7 +20,7 @@
extern const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH];
/* REG is evaluated multiple times; it better be side-effects free! */
# define dwarf_to_unw_regnum(reg) \
- (((reg) <= DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
+ (((reg) < DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
#endif
#ifdef UNW_LOCAL_ONLY

View File

@@ -0,0 +1,26 @@
Description: Replace the legacy __sync built-in functions with __atomic ones
libunwind uses the built-in __sync_* functions which are deprecated by GCC and
should be replaced by __atomic_* ones. See the official manuals [1].
.
The legacy __sync functions do not require to specify the memory order but
__atomic ones do, so we choose the strongest one: __ATOMIC_SEQ_CST.
.
We do this because __sync_fetch_and_add() is not supported on armel.
.
[1]: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html
Author: Kai-Chung Yan ()
Last-Update: 2016-10-04
Forwarded: not-needed
--- a/external/libunwind/include/libunwind_i.h
+++ b/external/libunwind/include/libunwind_i.h
@@ -155,8 +155,8 @@ cmpxchg_ptr (void *addr, void *old, void
u.vp = addr;
return __sync_bool_compare_and_swap(u.vlp, (long) old, (long) new);
}
-# define fetch_and_add1(_ptr) __sync_fetch_and_add(_ptr, 1)
-# define fetch_and_add(_ptr, value) __sync_fetch_and_add(_ptr, value)
+# define fetch_and_add1(_ptr) __atomic_fetch_add(_ptr, 1, __ATOMIC_SEQ_CST)
+# define fetch_and_add(_ptr, value) __atomic_fetch_add(_ptr, value, __ATOMIC_SEQ_CST)
# define HAVE_CMPXCHG
# define HAVE_FETCH_AND_ADD
#endif

Some files were not shown because too many files have changed in this diff Show More