libbsd: Fix build with musl

a.out.h support is not across all architectures only
x86/x86_64 support is in linux/a.out.h, this patch
abstracts the minimum needed constructs into itself

(From OE-Core rev: 757224640bbf4ebf17aea22fa1419c9c3bcd89ce)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2016-11-06 23:25:26 -08:00 committed by Richard Purdie
parent cbc5914180
commit 9bf3f80e88
4 changed files with 553 additions and 0 deletions

View File

@ -0,0 +1,363 @@
From 88adbe1a855b7aa95bd925c80ed83c86f3fc42e3 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 6 Nov 2016 09:39:31 -0800
Subject: [PATCH 1/3] Replace __BEGIN_DECLS and __END_DECLS
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
include/bsd/err.h | 10 ++++++++--
include/bsd/libutil.h | 10 ++++++++--
include/bsd/md5.h | 10 ++++++++--
include/bsd/nlist.h | 10 ++++++++--
include/bsd/readpassphrase.h | 10 ++++++++--
include/bsd/stdio.h | 10 ++++++++--
include/bsd/stdlib.h | 10 ++++++++--
include/bsd/string.h | 10 ++++++++--
include/bsd/stringlist.h | 10 ++++++++--
include/bsd/unistd.h | 10 ++++++++--
include/bsd/vis.h | 10 ++++++++--
include/bsd/wchar.h | 10 ++++++++--
src/hash/sha512.h | 10 ++++++++--
13 files changed, 104 insertions(+), 26 deletions(-)
diff --git a/include/bsd/err.h b/include/bsd/err.h
index 12fd051..43dfc32 100644
--- a/include/bsd/err.h
+++ b/include/bsd/err.h
@@ -42,7 +42,10 @@
#include <stdarg.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
void warnc(int code, const char *format, ...)
__printflike(2, 3);
void vwarnc(int code, const char *format, va_list ap)
@@ -51,6 +54,9 @@ void errc(int status, int code, const char *format, ...)
__printflike(3, 4);
void verrc(int status, int code, const char *format, va_list ap)
__printflike(3, 0);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
diff --git a/include/bsd/libutil.h b/include/bsd/libutil.h
index ebb6160..28b919d 100644
--- a/include/bsd/libutil.h
+++ b/include/bsd/libutil.h
@@ -53,7 +53,10 @@ struct pidfh {
ino_t pf_ino;
};
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
int humanize_number(char *buf, size_t len, int64_t bytes,
const char *suffix, int scale, int flags);
int expand_number(const char *_buf, uint64_t *_num);
@@ -66,7 +69,10 @@ int pidfile_close(struct pidfh *pfh);
int pidfile_remove(struct pidfh *pfh);
char *fparseln(FILE *, size_t *, size_t *, const char[3], int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
/* humanize_number(3) */
#define HN_DECIMAL 0x01
diff --git a/include/bsd/md5.h b/include/bsd/md5.h
index 9a75fad..3531fd6 100644
--- a/include/bsd/md5.h
+++ b/include/bsd/md5.h
@@ -30,7 +30,10 @@ typedef struct MD5Context {
#include <sys/cdefs.h>
#include <sys/types.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
void MD5Init(MD5_CTX *);
void MD5Update(MD5_CTX *, const uint8_t *, size_t)
__attribute__((__bounded__(__string__,2,3)));
@@ -49,6 +52,9 @@ char *MD5FileChunk(const char *, char *, off_t, off_t)
char *MD5Data(const uint8_t *, size_t, char *)
__attribute__((__bounded__(__string__,1,2)))
__attribute__((__bounded__(__minbytes__,3,MD5_DIGEST_STRING_LENGTH)));
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif /* _MD5_H_ */
diff --git a/include/bsd/nlist.h b/include/bsd/nlist.h
index 2730237..0389ab7 100644
--- a/include/bsd/nlist.h
+++ b/include/bsd/nlist.h
@@ -30,8 +30,14 @@
#include <sys/cdefs.h>
#include <a.out.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int nlist(const char *filename, struct nlist *list);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
diff --git a/include/bsd/readpassphrase.h b/include/bsd/readpassphrase.h
index e1dacc3..76e0d33 100644
--- a/include/bsd/readpassphrase.h
+++ b/include/bsd/readpassphrase.h
@@ -34,8 +34,14 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
char * readpassphrase(const char *, char *, size_t, int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif /* !_READPASSPHRASE_H_ */
diff --git a/include/bsd/stdio.h b/include/bsd/stdio.h
index 7697425..b5b3efd 100644
--- a/include/bsd/stdio.h
+++ b/include/bsd/stdio.h
@@ -41,7 +41,10 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
const char *fmtcheck(const char *, const char *);
/* XXX: The function requires cooperation from the system libc to store the
@@ -69,7 +72,10 @@ FILE *funopen(const void *cookie,
#define fwopen(cookie, fn) funopen(cookie, NULL, fn, NULL, NULL)
int fpurge(FILE *fp);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
#endif
diff --git a/include/bsd/stdlib.h b/include/bsd/stdlib.h
index 0604cad..b9f0515 100644
--- a/include/bsd/stdlib.h
+++ b/include/bsd/stdlib.h
@@ -46,7 +46,10 @@
#include <sys/stat.h>
#include <stdint.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
uint32_t arc4random(void);
void arc4random_stir(void);
void arc4random_addrandom(u_char *dat, int datlen);
@@ -73,6 +76,9 @@ long long strtonum(const char *nptr, long long minval, long long maxval,
const char **errstr);
char *getbsize(int *headerlenp, long *blocksizep);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
diff --git a/include/bsd/string.h b/include/bsd/string.h
index ee2f953..fbf8c54 100644
--- a/include/bsd/string.h
+++ b/include/bsd/string.h
@@ -36,13 +36,19 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
size_t strlcpy(char *dst, const char *src, size_t siz);
size_t strlcat(char *dst, const char *src, size_t siz);
char *strnstr(const char *str, const char *find, size_t str_len);
void strmode(mode_t mode, char *str);
void explicit_bzero(void *buf, size_t len);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
diff --git a/include/bsd/stringlist.h b/include/bsd/stringlist.h
index e3c42e9..40d0a52 100644
--- a/include/bsd/stringlist.h
+++ b/include/bsd/stringlist.h
@@ -43,12 +43,18 @@ typedef struct _stringlist {
size_t sl_cur;
} StringList;
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
StringList *sl_init(void);
int sl_add(StringList *, char *);
void sl_free(StringList *, int);
char *sl_find(StringList *, const char *);
int sl_delete(StringList *, const char *, int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif /* _STRINGLIST_H */
diff --git a/include/bsd/unistd.h b/include/bsd/unistd.h
index 1f9c5f8..5b2f4c7 100644
--- a/include/bsd/unistd.h
+++ b/include/bsd/unistd.h
@@ -45,7 +45,10 @@
#define S_ISTXT S_ISVTX
#endif
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
extern int optreset;
#ifdef LIBBSD_OVERLAY
@@ -68,6 +71,9 @@ void setproctitle(const char *fmt, ...)
__printflike(1, 2);
int getpeereid(int s, uid_t *euid, gid_t *egid);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
diff --git a/include/bsd/vis.h b/include/bsd/vis.h
index 835d2d6..63c951e 100644
--- a/include/bsd/vis.h
+++ b/include/bsd/vis.h
@@ -74,7 +74,10 @@
#include <sys/cdefs.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
char *vis(char *, int, int, int);
int strvis(char *, const char *, int);
int strvisx(char *, const char *, size_t, int);
@@ -83,6 +86,9 @@ int strunvis(char *, const char *);
int strunvisx(char *, const char *, int);
ssize_t strnunvis(char *, const char *, size_t);
int unvis(char *, int, int *, int);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif /* !_VIS_H_ */
diff --git a/include/bsd/wchar.h b/include/bsd/wchar.h
index 33a500e..aa70742 100644
--- a/include/bsd/wchar.h
+++ b/include/bsd/wchar.h
@@ -43,12 +43,18 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
wchar_t *fgetwln(FILE *stream, size_t *len);
size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size);
size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif
#endif
diff --git a/src/hash/sha512.h b/src/hash/sha512.h
index 4f368a1..27ddc24 100644
--- a/src/hash/sha512.h
+++ b/src/hash/sha512.h
@@ -39,7 +39,10 @@ typedef struct SHA512Context {
unsigned char buf[128];
} SHA512_CTX;
-__BEGIN_DECLS
+/* __BEGIN_DECLS */
+#ifdef __cplusplus
+extern "C" {
+#endif
void SHA512_Init(SHA512_CTX *);
void SHA512_Update(SHA512_CTX *, const void *, size_t);
@@ -48,6 +51,9 @@ char *SHA512_End(SHA512_CTX *, char *);
char *SHA512_File(const char *, char *);
char *SHA512_FileChunk(const char *, char *, off_t, off_t);
char *SHA512_Data(const void *, unsigned int, char *);
-__END_DECLS
+#ifdef __cplusplus
+}
+#endif
+/* __END_DECLS */
#endif /* !_SHA512_H_ */
--
2.10.2

View File

@ -0,0 +1,55 @@
From 28fc66e8b848709a2e69dba7f07694248e0154e8 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 6 Nov 2016 09:40:43 -0800
Subject: [PATCH 2/3] Remove funopen()
Musl doesnt have prerequisites for it.
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Inappropriate [musl specific]
man/Makefile.am | 1 -
src/Makefile.am | 1 -
test/Makefile.am | 1 -
3 files changed, 3 deletions(-)
diff --git a/man/Makefile.am b/man/Makefile.am
index e4d6e4a..c701d94 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -29,7 +29,6 @@ dist_man_MANS = \
flopen.3 \
fmtcheck.3 \
fparseln.3 \
- funopen.3bsd \
getbsize.3 \
getmode.3 \
getpeereid.3 \
diff --git a/src/Makefile.am b/src/Makefile.am
index ad83dbf..13225a3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -76,7 +76,6 @@ libbsd_la_SOURCES = \
fmtcheck.c \
fparseln.c \
fpurge.c \
- funopen.c \
getbsize.c \
getpeereid.c \
hash/md5.c \
diff --git a/test/Makefile.am b/test/Makefile.am
index a75c8ff..e3a1d41 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -36,7 +36,6 @@ check_PROGRAMS = \
endian \
humanize \
fgetln \
- funopen \
fparseln \
fpurge \
md5 \
--
2.10.2

View File

@ -0,0 +1,130 @@
From a1b93c25311834f2f411e9bfe2e616899ba2122d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 6 Nov 2016 10:23:55 -0800
Subject: [PATCH 3/3] Fix build breaks due to missing a.out.h
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
include/bsd/nlist.h | 1 -
include/bsd/nlist.h => src/local-aout.h | 47 ++++++++++++++++++++++-----------
src/nlist.c | 9 +++++++
3 files changed, 41 insertions(+), 16 deletions(-)
copy include/bsd/nlist.h => src/local-aout.h (63%)
diff --git a/include/bsd/nlist.h b/include/bsd/nlist.h
index 0389ab7..9c7e3d8 100644
--- a/include/bsd/nlist.h
+++ b/include/bsd/nlist.h
@@ -28,7 +28,6 @@
#define LIBBSD_NLIST_H
#include <sys/cdefs.h>
-#include <a.out.h>
/* __BEGIN_DECLS */
#ifdef __cplusplus
diff --git a/include/bsd/nlist.h b/src/local-aout.h
similarity index 63%
copy from include/bsd/nlist.h
copy to src/local-aout.h
index 0389ab7..2adb93e 100644
--- a/include/bsd/nlist.h
+++ b/src/local-aout.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009 Guillem Jover <guillem@hadrons.org>
+ * Copyright © 2016 Khem Raj <raj.khem@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -24,20 +24,37 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef LIBBSD_NLIST_H
-#define LIBBSD_NLIST_H
+#ifndef LIBBSD_LOCAL_AOUT_H
+#define LIBBSD_LOCAL_AOUT_H
-#include <sys/cdefs.h>
-#include <a.out.h>
+#define N_UNDF 0
+#define N_ABS 2
+#define N_TEXT 4
+#define N_DATA 6
+#define N_BSS 8
+#define N_FN 15
+#define N_EXT 1
+#define N_TYPE 036
+#define N_STAB 0340
+#define N_INDR 0xa
+#define N_SETA 0x14 /* Absolute set element symbol. */
+#define N_SETT 0x16 /* Text set element symbol. */
+#define N_SETD 0x18 /* Data set element symbol. */
+#define N_SETB 0x1A /* Bss set element symbol. */
+#define N_SETV 0x1C /* Pointer to set vector in data area. */
-/* __BEGIN_DECLS */
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern int nlist(const char *filename, struct nlist *list);
-#ifdef __cplusplus
-}
-#endif
-/* __END_DECLS */
+struct nlist
+{
+ union
+ {
+ char *n_name;
+ struct nlist *n_next;
+ long n_strx;
+ } n_un;
+ unsigned char n_type;
+ char n_other;
+ short n_desc;
+ unsigned long n_value;
+};
-#endif
+#endif /* LIBBSD_LOCAL_AOUT_H */
diff --git a/src/nlist.c b/src/nlist.c
index 0cffe55..625d310 100644
--- a/src/nlist.c
+++ b/src/nlist.c
@@ -40,7 +40,11 @@ static char sccsid[] = "@(#)nlist.c 8.1 (Berkeley) 6/4/93";
#include <errno.h>
#include <fcntl.h>
+#ifdef __GLIBC__
#include <a.out.h>
+#else
+#define __NO_A_OUT_SUPPORT
+#endif
#include <stdio.h>
#include <string.h>
#include <unistd.h>
@@ -48,12 +52,17 @@ static char sccsid[] = "@(#)nlist.c 8.1 (Berkeley) 6/4/93";
#if !defined(__NO_A_OUT_SUPPORT)
#define _NLIST_DO_AOUT
#endif
+
#define _NLIST_DO_ELF
#ifdef _NLIST_DO_ELF
#include "local-elf.h"
#endif
+#ifdef _NLIST_DO_ELF
+#include "local-aout.h"
+#endif
+
#define SIZE_T_MAX 0xffffffffU
#ifdef _NLIST_DO_AOUT
--
2.10.2

View File

@ -36,6 +36,11 @@ SECTION = "libs"
SRC_URI = " \
http://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz \
"
SRC_URI_append_libc-musl = " \
file://0001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch \
file://0002-Remove-funopen.patch \
file://0003-Fix-build-breaks-due-to-missing-a.out.h.patch \
"
SRC_URI[md5sum] = "e935c1bb6cc98a4a43cb1da22795493a"
SRC_URI[sha256sum] = "934b634f4dfd865b6482650b8f522c70ae65c463529de8be907b53c89c3a34a8"