Added a simple crti/n/1 to fix clang compat issues
This commit is contained in:
parent
6a7fd630ce
commit
2809d233b5
@ -154,6 +154,10 @@ conf.Finish()
|
|||||||
|
|
||||||
Export('env')
|
Export('env')
|
||||||
|
|
||||||
|
# Program start/end
|
||||||
|
env["CRTBEGIN"] = [ "#build/lib/libc/crti.o", "#build/lib/libc/crt1.o" ]
|
||||||
|
env["CRTEND"] = [ "#build/lib/libc/crtn.o" ]
|
||||||
|
|
||||||
# Debugging Tools
|
# Debugging Tools
|
||||||
|
|
||||||
# Create include tree
|
# Create include tree
|
||||||
|
@ -10,7 +10,9 @@ src_common = [
|
|||||||
"ethdump.c"
|
"ethdump.c"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
src.append(env["CRTBEGIN"])
|
||||||
src.append(src_common)
|
src.append(src_common)
|
||||||
|
src.append(env["CRTEND"])
|
||||||
|
|
||||||
ethdump_env.Append(LINKFLAGS = ['-nostdlib'])
|
ethdump_env.Append(LINKFLAGS = ['-nostdlib'])
|
||||||
ethdump_env.Append(CPPFLAGS = ['-nostdinc'])
|
ethdump_env.Append(CPPFLAGS = ['-nostdinc'])
|
||||||
|
@ -10,7 +10,9 @@ src_common = [
|
|||||||
"ethinject.c"
|
"ethinject.c"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
src.append(env["CRTBEGIN"])
|
||||||
src.append(src_common)
|
src.append(src_common)
|
||||||
|
src.append(env["CRTEND"])
|
||||||
|
|
||||||
ethinject_env.Append(LINKFLAGS = ['-nostdlib'])
|
ethinject_env.Append(LINKFLAGS = ['-nostdlib'])
|
||||||
ethinject_env.Append(CPPFLAGS = ['-nostdinc'])
|
ethinject_env.Append(CPPFLAGS = ['-nostdinc'])
|
||||||
|
@ -10,7 +10,9 @@ src_common = [
|
|||||||
"shell.c"
|
"shell.c"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
src.append(env["CRTBEGIN"])
|
||||||
src.append(src_common)
|
src.append(src_common)
|
||||||
|
src.append(env["CRTEND"])
|
||||||
|
|
||||||
init_env.Append(LINKFLAGS = ['-nostdlib'])
|
init_env.Append(LINKFLAGS = ['-nostdlib'])
|
||||||
init_env.Append(CPPFLAGS = ['-fno-builtin', '-nostdinc'])
|
init_env.Append(CPPFLAGS = ['-fno-builtin', '-nostdinc'])
|
||||||
|
@ -24,7 +24,7 @@ src_common = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
src_amd64 = [
|
src_amd64 = [
|
||||||
"amd64/entry.S",
|
# "amd64/entry.S",
|
||||||
"amd64/syscall.S",
|
"amd64/syscall.S",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -36,4 +36,7 @@ libc_env.Append(CPPFLAGS = ['-nostdinc'])
|
|||||||
libc_env.Append(CPPPATH = ['#build/include'])
|
libc_env.Append(CPPPATH = ['#build/include'])
|
||||||
|
|
||||||
libc_env.StaticLibrary("libc", src)
|
libc_env.StaticLibrary("libc", src)
|
||||||
|
libc_env.StaticObject("crt1", "crt1.c")
|
||||||
|
libc_env.StaticObject("crti", "crti.S")
|
||||||
|
libc_env.StaticObject("crtn", "crtn.S")
|
||||||
|
|
||||||
|
116
lib/libc/crt1.c
Normal file
116
lib/libc/crt1.c
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/* LINTLIBRARY */
|
||||||
|
/*-
|
||||||
|
* Copyright 1996-1998 John D. Polstra.
|
||||||
|
* Copyright 2012 Konstantin Belousov <kib@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 <stdlib.h>
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
extern int main(int, 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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_start(char **ap)
|
||||||
|
{
|
||||||
|
int argc;
|
||||||
|
char **argv;
|
||||||
|
char **env;
|
||||||
|
|
||||||
|
//argc = *(long *)(void *)ap;
|
||||||
|
//argv = ap + 1;
|
||||||
|
//env = ap + 2 + argc;
|
||||||
|
//handle_argv(argc, argv, env);
|
||||||
|
|
||||||
|
//handle_static_init(argc, argv, env);
|
||||||
|
|
||||||
|
exit(main(argc, argv));
|
||||||
|
}
|
||||||
|
|
40
lib/libc/crti.S
Normal file
40
lib/libc/crti.S
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright 1996, 1997, 1998, 2000 John D. Polstra.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section .init,"ax",@progbits
|
||||||
|
.align 4
|
||||||
|
.globl _init
|
||||||
|
.type _init,@function
|
||||||
|
_init:
|
||||||
|
subq $8,%rsp
|
||||||
|
|
||||||
|
.section .fini,"ax",@progbits
|
||||||
|
.align 4
|
||||||
|
.globl _fini
|
||||||
|
.type _fini,@function
|
||||||
|
_fini:
|
||||||
|
subq $8,%rsp
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
34
lib/libc/crtn.S
Normal file
34
lib/libc/crtn.S
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright 1996, 1997, 1998, 2000 John D. Polstra.
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section .init,"ax",@progbits
|
||||||
|
addq $8,%rsp
|
||||||
|
ret
|
||||||
|
|
||||||
|
.section .fini,"ax",@progbits
|
||||||
|
addq $8,%rsp
|
||||||
|
ret
|
||||||
|
|
||||||
|
.section .note.GNU-stack,"",%progbits
|
@ -10,7 +10,9 @@ src_common = [
|
|||||||
"ifconfig.c"
|
"ifconfig.c"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
src.append(env["CRTBEGIN"])
|
||||||
src.append(src_common)
|
src.append(src_common)
|
||||||
|
src.append(env["CRTEND"])
|
||||||
|
|
||||||
ifconfig_env.Append(LINKFLAGS = ['-nostdlib'])
|
ifconfig_env.Append(LINKFLAGS = ['-nostdlib'])
|
||||||
ifconfig_env.Append(CPPFLAGS = ['-nostdinc'])
|
ifconfig_env.Append(CPPFLAGS = ['-nostdinc'])
|
||||||
|
@ -7,10 +7,12 @@ init_env = env.Clone()
|
|||||||
src = [ ]
|
src = [ ]
|
||||||
|
|
||||||
src_common = [
|
src_common = [
|
||||||
"init.c"
|
"init.c",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
src.append(env["CRTBEGIN"])
|
||||||
src.append(src_common)
|
src.append(src_common)
|
||||||
|
src.append(env["CRTEND"])
|
||||||
|
|
||||||
init_env.Append(LINKFLAGS = ['-nostdlib'])
|
init_env.Append(LINKFLAGS = ['-nostdlib'])
|
||||||
init_env.Append(CPPFLAGS = ['-nostdinc'])
|
init_env.Append(CPPFLAGS = ['-nostdinc'])
|
||||||
|
@ -14,5 +14,7 @@
|
|||||||
|
|
||||||
#define ROUNDUP(_x, _n) (((_x) + (_n) - 1) & ~((_n) - 1))
|
#define ROUNDUP(_x, _n) (((_x) + (_n) - 1) & ~((_n) - 1))
|
||||||
|
|
||||||
|
#define __hidden __attribute__((__visibility__("hidden")))
|
||||||
|
|
||||||
#endif /* __CDEFS_H__ */
|
#endif /* __CDEFS_H__ */
|
||||||
|
|
||||||
|
@ -9,8 +9,17 @@ test_env.Append(CPPFLAGS = ['-fno-builtin', '-nostdinc'])
|
|||||||
test_env.Append(CPPPATH = ['#build/include'])
|
test_env.Append(CPPPATH = ['#build/include'])
|
||||||
test_env.Append(LIBPATH = ['#build/lib/libc'], LIBS = ['c'])
|
test_env.Append(LIBPATH = ['#build/lib/libc'], LIBS = ['c'])
|
||||||
|
|
||||||
test_env.Program("threadtest", ["threadtest.c"])
|
threadtest_src = []
|
||||||
test_env.Program("pthreadtest", ["pthreadtest.c"])
|
threadtest_src.append(env["CRTBEGIN"])
|
||||||
|
threadtest_src.append(["threadtest.c"])
|
||||||
|
threadtest_src.append(env["CRTEND"])
|
||||||
|
test_env.Program("threadtest", threadtest_src)
|
||||||
|
|
||||||
|
pthreadtest_src = []
|
||||||
|
pthreadtest_src.append(env["CRTBEGIN"])
|
||||||
|
pthreadtest_src.append(["threadtest.c"])
|
||||||
|
pthreadtest_src.append(env["CRTEND"])
|
||||||
|
test_env.Program("pthreadtest", pthreadtest_src)
|
||||||
|
|
||||||
test_netenv = env.Clone()
|
test_netenv = env.Clone()
|
||||||
|
|
||||||
@ -20,5 +29,9 @@ test_netenv.Append(CPPPATH = ['#build/include', '#build/include/ipv4'])
|
|||||||
test_netenv.Append(LIBPATH = ['#build/lib/libc', '#build/lib/liblwip'],
|
test_netenv.Append(LIBPATH = ['#build/lib/libc', '#build/lib/liblwip'],
|
||||||
LIBS = ['lwip', 'c'])
|
LIBS = ['lwip', 'c'])
|
||||||
|
|
||||||
test_netenv.Program("lwiptest", ["lwiptest.c"])
|
lwiptest_src = []
|
||||||
|
lwiptest_src.append(env["CRTBEGIN"])
|
||||||
|
lwiptest_src.append(["threadtest.c"])
|
||||||
|
lwiptest_src.append(env["CRTEND"])
|
||||||
|
test_netenv.Program("lwiptest", lwiptest_src)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user