[Midnightbsd-cvs] src [10423] trunk/lib/csu/common: fixup branding.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Tue Jun 5 18:43:44 EDT 2018
Revision: 10423
http://svnweb.midnightbsd.org/src/?rev=10423
Author: laffer1
Date: 2018-06-05 18:43:43 -0400 (Tue, 05 Jun 2018)
Log Message:
-----------
fixup branding.
Modified Paths:
--------------
trunk/lib/csu/common/crtbrand.c
Added Paths:
-----------
trunk/lib/csu/common/ignore_init.c
Modified: trunk/lib/csu/common/crtbrand.c
===================================================================
--- trunk/lib/csu/common/crtbrand.c 2018-06-05 22:40:42 UTC (rev 10422)
+++ trunk/lib/csu/common/crtbrand.c 2018-06-05 22:43:43 UTC (rev 10423)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright 2008 Lucas Holt
* Copyright 2000 David E. O'Brien, John D. Polstra.
@@ -28,26 +29,40 @@
__MBSDID("$MidnightBSD$");
#include <sys/param.h>
+#include "notes.h"
-#define ABI_VENDOR "MidnightBSD"
-#define ABI_SECTION ".note.ABI-tag"
-#define ABI_NOTETYPE 1
-
/*
* Special ".note" entry specifying the ABI version. See
* http://www.netbsd.org/Documentation/kernel/elf-notes.html
* for more information.
+ *
+ * For all arches except sparc, gcc emits the section directive for the
+ * following struct with a PROGBITS type. However, newer versions of binutils
+ * (after 2.16.90) require the section to be of NOTE type, to guarantee that the
+ * .note.ABI-tag section correctly ends up in the first page of the final
+ * executable.
+ *
+ * Unfortunately, there is no clean way to tell gcc to use another section type,
+ * so this C file (or the C file that includes it) must be compiled in multiple
+ * steps:
+ *
+ * - Compile the .c file to a .s file.
+ * - Edit the .s file to change the 'progbits' type to 'note', for the section
+ * directive that defines the .note.ABI-tag section.
+ * - Compile the .s file to an object file.
+ *
+ * These steps are done in the invididual Makefiles for each applicable arch.
*/
static const struct {
- int32_t namesz;
- int32_t descsz;
- int32_t type;
- char name[sizeof ABI_VENDOR];
- int32_t desc;
-} abitag __attribute__ ((section (ABI_SECTION), aligned(4))) __used = {
- sizeof ABI_VENDOR,
- sizeof(int32_t),
- ABI_NOTETYPE,
- ABI_VENDOR,
- __MidnightBSD_version
+ int32_t namesz;
+ int32_t descsz;
+ int32_t type;
+ char name[sizeof(NOTE_MIDNIGHTBSD_VENDOR)];
+ int32_t desc;
+} abitag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
+ .namesz = sizeof(NOTE_MIDNIGHTBSD_VENDOR),
+ .descsz = sizeof(int32_t),
+ .type = ABI_NOTETYPE,
+ .name = NOTE_MIDNIGHTBSD_VENDOR,
+ .desc = __MidnightBSD_version
};
Added: trunk/lib/csu/common/ignore_init.c
===================================================================
--- trunk/lib/csu/common/ignore_init.c (rev 0)
+++ trunk/lib/csu/common/ignore_init.c 2018-06-05 22:43:43 UTC (rev 10423)
@@ -0,0 +1,119 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright 2012 Konstantin Belousov <kib at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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 AUTHOR ``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 AUTHOR 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.
+ */
+
+#include <sys/cdefs.h>
+__MBSDID("$MidnightBSD$");
+
+#include "notes.h"
+
+extern int main(int, char **, char **);
+
+extern void (*__preinit_array_start[])(int, char **, char **) __hidden;
+extern void (*__preinit_array_end[])(int, char **, char **) __hidden;
+extern void (*__init_array_start[])(int, char **, char **) __hidden;
+extern void (*__init_array_end[])(int, char **, char **) __hidden;
+extern void (*__fini_array_start[])(void) __hidden;
+extern void (*__fini_array_end[])(void) __hidden;
+extern void _fini(void) __hidden;
+extern void _init(void) __hidden;
+
+extern int _DYNAMIC;
+#pragma weak _DYNAMIC
+
+char **environ;
+const char *__progname = "";
+
+static void
+finalizer(void)
+{
+ void (*fn)(void);
+ size_t array_size, n;
+
+ array_size = __fini_array_end - __fini_array_start;
+ for (n = array_size; n > 0; n--) {
+ fn = __fini_array_start[n - 1];
+ if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
+ (fn)();
+ }
+ _fini();
+}
+
+static inline void
+handle_static_init(int argc, char **argv, char **env)
+{
+ void (*fn)(int, char **, char **);
+ size_t array_size, n;
+
+ if (&_DYNAMIC != NULL)
+ return;
+
+ atexit(finalizer);
+
+ array_size = __preinit_array_end - __preinit_array_start;
+ for (n = 0; n < array_size; n++) {
+ fn = __preinit_array_start[n];
+ if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
+ fn(argc, argv, env);
+ }
+ _init();
+ array_size = __init_array_end - __init_array_start;
+ for (n = 0; n < array_size; n++) {
+ fn = __init_array_start[n];
+ if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
+ fn(argc, argv, env);
+ }
+}
+
+static inline void
+handle_argv(int argc, char *argv[], char **env)
+{
+ const char *s;
+
+ if (environ == NULL)
+ environ = env;
+ if (argc > 0 && argv[0] != NULL) {
+ __progname = argv[0];
+ for (s = __progname; *s != '\0'; s++) {
+ if (*s == '/')
+ __progname = s + 1;
+ }
+ }
+}
+
+static const struct {
+ int32_t namesz;
+ int32_t descsz;
+ int32_t type;
+ char name[sizeof(NOTE_MIDNIGHTBSD_VENDOR)];
+ uint32_t desc;
+} crt_noinit_tag __attribute__ ((section (NOTE_SECTION),
+ aligned(4))) __used = {
+ .namesz = sizeof(NOTE_MIDNIGHTBSD_VENDOR),
+ .descsz = sizeof(uint32_t),
+ .type = CRT_NOINIT_NOTETYPE,
+ .name = NOTE_MIDNIGHTBSD_VENDOR,
+ .desc = 0
+};
Property changes on: trunk/lib/csu/common/ignore_init.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list