Merge branch 'newlib'
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -5,3 +5,6 @@ | |||||||
| [submodule "third_party/src/github.com/0intro/drawterm"] | [submodule "third_party/src/github.com/0intro/drawterm"] | ||||||
| 	path = third_party/src/github.com/0intro/drawterm | 	path = third_party/src/github.com/0intro/drawterm | ||||||
| 	url = https://github.com/JehanneOS/devtools-drawterm.git | 	url = https://github.com/JehanneOS/devtools-drawterm.git | ||||||
|  | [submodule "cross/pkgs/newlib/src"] | ||||||
|  | 	path = cross/pkgs/newlib/src | ||||||
|  | 	url = https://github.com/JehanneOS/newlib.git | ||||||
|   | |||||||
| @@ -30,10 +30,10 @@ | |||||||
| #define MD_STARTFILE_PREFIX "/arch/amd64/lib/" | #define MD_STARTFILE_PREFIX "/arch/amd64/lib/" | ||||||
|  |  | ||||||
| #undef GPLUSPLUS_INCLUDE_DIR | #undef GPLUSPLUS_INCLUDE_DIR | ||||||
| #define GPLUSPLUS_INCLUDE_DIR "/posix/include/g++" | #define GPLUSPLUS_INCLUDE_DIR "/sys/posix/g++" | ||||||
|  |  | ||||||
| #undef GCC_INCLUDE_DIR | #undef GCC_INCLUDE_DIR | ||||||
| #define GCC_INCLUDE_DIR "/posix/include/gcc" | #define GCC_INCLUDE_DIR "/sys/posix/gcc" | ||||||
|  |  | ||||||
| /* Architecture specific header (u.h) goes here (from config.gcc) */ | /* Architecture specific header (u.h) goes here (from config.gcc) */ | ||||||
| #define ARCH_INCLUDE_DIR NATIVE_SYSTEM_HEADER_DIR  | #define ARCH_INCLUDE_DIR NATIVE_SYSTEM_HEADER_DIR  | ||||||
| @@ -41,15 +41,15 @@ | |||||||
| /* The default include dir is /sys/include but... */ | /* The default include dir is /sys/include but... */ | ||||||
| #define PORTABLE_INCLUDE_DIR "/sys/include" | #define PORTABLE_INCLUDE_DIR "/sys/include" | ||||||
|  |  | ||||||
| /* ...we have to wrap libc.h and stdio.h with POSIX headers */ | /* ...we have to wrap libc.h and stdio.h with basic POSIX headers */ | ||||||
| #define POSIX_INCLUDE_DIR "/sys/include/apw" | #define BASIC_POSIX_INCLUDE_DIR "/sys/include/apw" | ||||||
|  |  | ||||||
| #undef INCLUDE_DEFAULTS | #undef INCLUDE_DEFAULTS | ||||||
| #define INCLUDE_DEFAULTS				\ | #define INCLUDE_DEFAULTS				\ | ||||||
|   {							\ |   {							\ | ||||||
|     { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 1, 0 },	\ |     { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1, 1, 0 },	\ | ||||||
|     { GCC_INCLUDE_DIR, 0, 0, 0, 1, 0 },			\ |     { GCC_INCLUDE_DIR, 0, 0, 0, 1, 0 },			\ | ||||||
|     { POSIX_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ |     { BASIC_POSIX_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ | ||||||
|     { ARCH_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ |     { ARCH_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ | ||||||
|     { PORTABLE_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ |     { PORTABLE_INCLUDE_DIR, 0, 0, 0, 1, 0 },		\ | ||||||
|     { ".", 0, 0, 0, 1, 0 },				\ |     { ".", 0, 0, 0, 1, 0 },				\ | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								cross/pkgs/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								cross/pkgs/README.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | # Jehanne cross-compiled packages | ||||||
|  |  | ||||||
|  | This folder contains those development tools that need to be | ||||||
|  | cross-compiled to bootstrap a selfhosted system. | ||||||
|  |  | ||||||
|  | Mainly this means a native compiler and its dependencies.  | ||||||
							
								
								
									
										35
									
								
								cross/pkgs/newlib.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								cross/pkgs/newlib.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | # This file is part of Jehanne. | ||||||
|  | # | ||||||
|  | # Copyright (C) 2017 Giacomo Tesio <giacomo@tesio.it> | ||||||
|  | # | ||||||
|  | # Jehanne is free software: you can redistribute it and/or modify | ||||||
|  | # it under the terms of the GNU General Public License as published by | ||||||
|  | # the Free Software Foundation, version 2 of the License. | ||||||
|  | # | ||||||
|  | # Jehanne is distributed in the hope that it will be useful, | ||||||
|  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  | # GNU General Public License for more details. | ||||||
|  | # | ||||||
|  | # You should have received a copy of the GNU General Public License | ||||||
|  | # along with Jehanne.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | if [ "$JEHANNE" = "" ]; then | ||||||
|  |         echo $0 requires the shell started by ./hacking/devshell.sh | ||||||
|  |         exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # To create a Jehanne version of GCC, we need specific OUTDATED versions | ||||||
|  | # of Autotools that won't compile easily in a modern Linux distro. | ||||||
|  |  | ||||||
|  | function failOnError { | ||||||
|  | 	# $1 -> exit status on a previous command | ||||||
|  | 	# $2 -> task description | ||||||
|  | 	if [ $1 -ne 0 ]; then | ||||||
|  | 		echo "ERROR $2" | ||||||
|  | 		exit $1 | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								cross/pkgs/newlib/src
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								cross/pkgs/newlib/src
									
									
									
									
									
										Submodule
									
								
							 Submodule cross/pkgs/newlib/src added at 0f0315dbff
									
								
							| @@ -7,6 +7,7 @@ | |||||||
| export JEHANNE=`git rev-parse --show-toplevel` | export JEHANNE=`git rev-parse --show-toplevel` | ||||||
| export PATH="$JEHANNE/hacking/bin:$PATH" | export PATH="$JEHANNE/hacking/bin:$PATH" | ||||||
| export PATH="$JEHANNE/hacking/cross/toolchain/bin:$PATH" | export PATH="$JEHANNE/hacking/cross/toolchain/bin:$PATH" | ||||||
|  | export CPATH="$JEHANNE/hacking/cross/toolchain/lib/gcc/x86_64-jehanne/4.9.4/include:$JEHANNE/hacking/cross/toolchain/lib/gcc/x86_64-jehanne/4.9.4/include-fixed" | ||||||
| export ARCH=amd64 | export ARCH=amd64 | ||||||
|  |  | ||||||
| export TOOLPREFIX=x86_64-jehanne- | export TOOLPREFIX=x86_64-jehanne- | ||||||
|   | |||||||
| @@ -97,18 +97,18 @@ func sysret(t string) string { | |||||||
| func formatArg(i int, t string) string{ | func formatArg(i int, t string) string{ | ||||||
| 	switch(t){ | 	switch(t){ | ||||||
| 	case "int", "int32_t": | 	case "int", "int32_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%d\", a%d);\n", i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%d\", a%d);\n", i) | ||||||
| 	case "unsigned int", "uint32_t": | 	case "unsigned int", "uint32_t": | ||||||
| 		/* unsigned int is reserved for flags */ | 		/* unsigned int is reserved for flags */ | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#ux\", a%d);\n", i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#ux\", a%d);\n", i) | ||||||
| 	case "long", "int64_t": | 	case "long", "int64_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%lld\", a%d);\n", i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%lld\", a%d);\n", i) | ||||||
| 	case "unsigned long", "uint64_t": | 	case "unsigned long", "uint64_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#lud\", a%d);\n", i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#lud\", a%d);\n", i) | ||||||
| 	case "void*", "uint8_t*", "const void*", "const uint8_t*": | 	case "void*", "uint8_t*", "const void*", "const uint8_t*": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#p\", a%d);\n", i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#p\", a%d);\n", i) | ||||||
| 	case "int32_t*", "int*", "const int32_t*", "const int*": | 	case "int32_t*", "int*", "const int32_t*", "const int*": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#p(%%d)\", a%d, a%d);\n", i, i) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#p(%%d)\", a%d, a%d);\n", i, i) | ||||||
| 	case "const char*", "char*": | 	case "const char*", "char*": | ||||||
| 		return fmt.Sprintf("\tfmtuserstring(fmt, a%d);\n", i) | 		return fmt.Sprintf("\tfmtuserstring(fmt, a%d);\n", i) | ||||||
| 	case "const char**", "char**": | 	case "const char**", "char**": | ||||||
| @@ -120,18 +120,18 @@ func formatArg(i int, t string) string{ | |||||||
| func formatRet(t string) string{ | func formatRet(t string) string{ | ||||||
| 	switch(t){ | 	switch(t){ | ||||||
| 	case "int", "int32_t": | 	case "int", "int32_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%d\", ret->%s);\n", sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%d\", ret->%s);\n", sysret(t)) | ||||||
| 	case "unsigned int", "uint32_t": | 	case "unsigned int", "uint32_t": | ||||||
| 		/* unsigned int is reserved for flags */ | 		/* unsigned int is reserved for flags */ | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#ux\", ret->%s);\n", sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#ux\", ret->%s);\n", sysret(t)) | ||||||
| 	case "long", "int64_t": | 	case "long", "int64_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%lld\", ret->%s);\n", sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%lld\", ret->%s);\n", sysret(t)) | ||||||
| 	case "unsigned long", "uint64_t", "void": | 	case "unsigned long", "uint64_t", "void": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#llud\", ret->%s);\n", sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#llud\", ret->%s);\n", sysret(t)) | ||||||
| 	case "void*", "uintptr_t", "const void*", "const uintptr_t": | 	case "void*", "uintptr_t", "const void*", "const uintptr_t": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#p\", ret->%s);\n", sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#p\", ret->%s);\n", sysret(t)) | ||||||
| 	case "int32_t*", "int*",  "const int32_t*", "const int*": | 	case "int32_t*", "int*",  "const int32_t*", "const int*": | ||||||
| 		return fmt.Sprintf("\tfmtprint(fmt, \" %%#p(%%d)\", ret->%s, *ret->%s);\n", sysret(t), sysret(t)) | 		return fmt.Sprintf("\tjehanne_fmtprint(fmt, \" %%#p(%%d)\", ret->%s, *ret->%s);\n", sysret(t), sysret(t)) | ||||||
| 	} | 	} | ||||||
| 	return " [?? " + t + "]" | 	return " [?? " + t + "]" | ||||||
| } | } | ||||||
| @@ -285,7 +285,7 @@ enter_{{ .Name }}(Fmt* fmt, Ureg* ureg) | |||||||
| 	{{ range .Vars }}{{.}} | 	{{ range .Vars }}{{.}} | ||||||
| 	{{ end }} | 	{{ end }} | ||||||
| {{ .CommonCode }} | {{ .CommonCode }} | ||||||
| 	fmtprint(fmt, "{{ .Name }} %#p > ", ureg->ip); | 	jehanne_fmtprint(fmt, "{{ .Name }} %#p > ", ureg->ip); | ||||||
| {{ .EntryPrint }} | {{ .EntryPrint }} | ||||||
| } | } | ||||||
| {{ end }} | {{ end }} | ||||||
| @@ -294,8 +294,8 @@ char* | |||||||
| syscallfmt(int syscall, Ureg* ureg) | syscallfmt(int syscall, Ureg* ureg) | ||||||
| { | { | ||||||
| 	Fmt fmt; | 	Fmt fmt; | ||||||
| 	fmtstrinit(&fmt); | 	jehanne_fmtstrinit(&fmt); | ||||||
| 	fmtprint(&fmt, "%d %s ", up->pid, up->text); | 	jehanne_fmtprint(&fmt, "%d %s ", up->pid, up->text); | ||||||
|  |  | ||||||
| 	switch(syscall){ | 	switch(syscall){ | ||||||
| 	{{ range .Wrappers }}case {{ .Id }}: | 	{{ range .Wrappers }}case {{ .Id }}: | ||||||
| @@ -306,14 +306,14 @@ syscallfmt(int syscall, Ureg* ureg) | |||||||
| 		panic("syscallfmt: bad sys call number %d pc %#p\n", syscall, ureg->ip); | 		panic("syscallfmt: bad sys call number %d pc %#p\n", syscall, ureg->ip); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return fmtstrflush(&fmt); | 	return jehanne_fmtstrflush(&fmt); | ||||||
| } | } | ||||||
|  |  | ||||||
| {{ range .Wrappers }} | {{ range .Wrappers }} | ||||||
| static void | static void | ||||||
| exit_{{ .Name }}(Fmt* fmt, Ureg* ureg, ScRet* ret) | exit_{{ .Name }}(Fmt* fmt, Ureg* ureg, ScRet* ret) | ||||||
| { | { | ||||||
| 	fmtprint(fmt, "{{ .Name }} %#p < ", ureg->ip); | 	jehanne_fmtprint(fmt, "{{ .Name }} %#p < ", ureg->ip); | ||||||
| {{ .ExitPrint }} | {{ .ExitPrint }} | ||||||
| } | } | ||||||
| {{ end }} | {{ end }} | ||||||
| @@ -322,8 +322,8 @@ char* | |||||||
| sysretfmt(int syscall, Ureg* ureg, ScRet* ret, uint64_t start, uint64_t stop) | sysretfmt(int syscall, Ureg* ureg, ScRet* ret, uint64_t start, uint64_t stop) | ||||||
| { | { | ||||||
| 	Fmt fmt; | 	Fmt fmt; | ||||||
| 	fmtstrinit(&fmt); | 	jehanne_fmtstrinit(&fmt); | ||||||
| 	fmtprint(&fmt, "%d %s ", up->pid, up->text); | 	jehanne_fmtprint(&fmt, "%d %s ", up->pid, up->text); | ||||||
|  |  | ||||||
| 	switch(syscall){ | 	switch(syscall){ | ||||||
| 	{{ range .Wrappers }}case {{ .Id }}: | 	{{ range .Wrappers }}case {{ .Id }}: | ||||||
| @@ -335,12 +335,12 @@ sysretfmt(int syscall, Ureg* ureg, ScRet* ret, uint64_t start, uint64_t stop) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if(0 > ret->vl){ | 	if(0 > ret->vl){ | ||||||
| 		fmtprint(&fmt, " %s %#llud %#llud\n", up->syserrstr, start, stop-start); | 		jehanne_fmtprint(&fmt, " %s %#llud %#llud\n", up->syserrstr, start, stop-start); | ||||||
| 	} else { | 	} else { | ||||||
| 		fmtprint(&fmt, " \"\" %#llud %#llud\n", start, stop-start); | 		jehanne_fmtprint(&fmt, " \"\" %#llud %#llud\n", start, stop-start); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return fmtstrflush(&fmt); | 	return jehanne_fmtstrflush(&fmt); | ||||||
| } | } | ||||||
|  |  | ||||||
| `) | `) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user