From: "Andreas Bießmann" <andreas@biessmann.de>
To: linux-kernel@vger.kernel.org
Cc: "Andreas Bießmann" <andreas@biessmann.de>,
"Rusty Russell" <rusty@rustcorp.com.au>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jochen Friedrich" <jochen@scram.de>,
"Samuel Ortiz" <sameo@linux.intel.com>,
"K. Y. Srinivasan" <kys@microsoft.com>
Subject: [PATCH v2] mod/file2alias: make modpost compile on darwin again
Date: Fri, 24 Feb 2012 08:23:53 +0100 [thread overview]
Message-ID: <1330068233-12713-1-git-send-email-andreas@biessmann.de> (raw)
In-Reply-To: <1329947735-4331-1-git-send-email-andreas@biessmann.de>
commit e49ce14150c64b29a8dd211df785576fa19a9858 breaks cross compiling
the linux kernel on darwin hosts.
This fix introduce some minimal glue to adopt linker section handling
for darwin hosts.
Signed-off-by: Andreas Bießmann <andreas@biessmann.de>
CC: Rusty Russell <rusty@rustcorp.com.au>
CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
CC: Jochen Friedrich <jochen@scram.de>
CC: Samuel Ortiz <sameo@linux.intel.com>
CC: "K. Y. Srinivasan" <kys@microsoft.com>
---
since v1:
* change 'checkpatch' whitespace fixews back
scripts/mod/file2alias.c | 35 +++++++++++++++++++++++++++++++----
1 files changed, 31 insertions(+), 4 deletions(-)
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index d0de2a2..b89efe6 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -46,11 +46,37 @@ struct devtable {
void *function;
};
+#define ___cat(a,b) a ## b
+#define __cat(a,b) ___cat(a,b)
+
+/* we need some special handling for this host tool running eventually on
+ * Darwin. The Mach-O section handling is a bit different than ELF section
+ * handling. The differnces in detail are:
+ * a) we have segments which have sections
+ * b) we need a API call to get the respective section symbols */
+#if defined(__MACH__)
+#include <mach-o/getsect.h>
+
+#define INIT_SECTION(name) do { \
+ unsigned long name ## _len; \
+ char *__cat(pstart_,name) = getsectdata("__TEXT", \
+ #name, &__cat(name,_len)); \
+ char *__cat(pstop_,name) = __cat(pstart_,name) + \
+ __cat(name, _len); \
+ __cat(__start_,name) = (void *)__cat(pstart_,name); \
+ __cat(__stop_,name) = (void *)__cat(pstop_,name); \
+ } while (0)
+#define SECTION(name) __attribute__((section("__TEXT, " #name)))
+
+struct devtable **__start___devtable, **__stop___devtable;
+#else
+#define INIT_SECTION(name) /* no-op for ELF */
+#define SECTION(name) __attribute__((section(#name)))
+
/* We construct a table of pointers in an ELF section (pointers generally
* go unpadded by gcc). ld creates boundary syms for us. */
extern struct devtable *__start___devtable[], *__stop___devtable[];
-#define ___cat(a,b) a ## b
-#define __cat(a,b) ___cat(a,b)
+#endif /* __MACH__ */
#if __GNUC__ == 3 && __GNUC_MINOR__ < 3
# define __used __attribute__((__unused__))
@@ -65,8 +91,8 @@ extern struct devtable *__start___devtable[], *__stop___devtable[];
(type *)NULL, \
(char *)NULL)), \
sizeof(type), (function) }; \
- static struct devtable *__attribute__((section("__devtable"))) \
- __used __cat(devtable_ptr,__LINE__) = &__cat(devtable,__LINE__)
+ static struct devtable *SECTION(__devtable) __used \
+ __cat(devtable_ptr,__LINE__) = &__cat(devtable,__LINE__)
#define ADD(str, sep, cond, field) \
do { \
@@ -1080,6 +1106,7 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
do_pnp_card_entries(symval, sym->st_size, mod);
else {
struct devtable **p;
+ INIT_SECTION(__devtable);
for (p = __start___devtable; p < __stop___devtable; p++) {
if (sym_is(name, namelen, (*p)->device_id)) {
--
1.7.9.1
next prev parent reply other threads:[~2012-02-24 7:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-22 21:55 [PATCH] mod/file2alias: make modpost compile on darwin again Andreas Bießmann
2012-02-22 23:08 ` Rusty Russell
2012-02-23 6:28 ` Andreas Bießmann
2012-02-24 4:04 ` Rusty Russell
2012-02-24 7:23 ` Andreas Bießmann [this message]
2012-02-25 3:51 ` [PATCH v2] " Rusty Russell
2012-02-26 16:27 ` Bernhard Walle
2012-02-27 0:03 ` [PULL] modpost fix for cross-compiling Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1330068233-12713-1-git-send-email-andreas@biessmann.de \
--to=andreas@biessmann.de \
--cc=gregkh@linuxfoundation.org \
--cc=jochen@scram.de \
--cc=kys@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=sameo@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).