mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
klibc: version 1.0.14
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
This commit is contained in:
parent
c07669bd66
commit
9607c4222c
@ -69,4 +69,9 @@ local-install: $(CROSS)klcc
|
||||
$(INSTALL_DATA) klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
|
||||
$(INSTALL_EXEC) $(KCROSS)klcc $(INSTALLROOT)$(bindir)
|
||||
|
||||
# This does all the prep work needed to turn a freshly exported git repository
|
||||
# into a release tarball tree
|
||||
release: klibc.spec
|
||||
rm -f maketar.sh
|
||||
|
||||
-include MCONFIG
|
||||
|
1
klibc/include/netpacket/packet.h
Normal file
1
klibc/include/netpacket/packet.h
Normal file
@ -0,0 +1 @@
|
||||
#include <linux/if_packet.h>
|
@ -82,10 +82,6 @@ __extern int sigaction(int, const struct sigaction *, struct sigaction *);
|
||||
__extern int sigprocmask(int, const sigset_t *, sigset_t *);
|
||||
__extern int sigpending(sigset_t *);
|
||||
__extern int sigsuspend(const sigset_t *);
|
||||
__extern int rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t);
|
||||
__extern int rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t);
|
||||
__extern int rt_sigpending(sigset_t *, size_t);
|
||||
__extern int rt_sigsuspend(const sigset_t *, size_t);
|
||||
__extern int raise(int);
|
||||
__extern int kill(pid_t, int);
|
||||
|
||||
|
43
klibc/klcc.1
43
klibc/klcc.1
@ -1,4 +1,4 @@
|
||||
.\" $Id: klcc.1,v 1.2 2005/03/02 02:24:17 hpa Exp $
|
||||
.\" $Id: klcc.1,v 1.3 2005/04/19 23:27:46 hpa Exp $
|
||||
.\" -----------------------------------------------------------------------
|
||||
.\"
|
||||
.\" Copyright 2005 H. Peter Anvin - All Rights Reserved
|
||||
@ -39,7 +39,9 @@ klcc \- compile a program against klibc
|
||||
.B klcc
|
||||
is a wrapper around
|
||||
.BR gcc (1)
|
||||
to compile a program against the
|
||||
and
|
||||
.BR ld (1)
|
||||
which compiles and links a program against the
|
||||
.B klibc
|
||||
tiny C library. It supports most
|
||||
.B gcc
|
||||
@ -63,7 +65,12 @@ or
|
||||
option to use the default optimization level; this will generally
|
||||
result in the smallest binaries. You may want to use
|
||||
.B \-s
|
||||
when linking, however.
|
||||
when linking, however. Use
|
||||
.B \-O0
|
||||
to compile without any optimization whatsoever; this may not work depending
|
||||
on the version of
|
||||
.B gcc
|
||||
used.
|
||||
.PP
|
||||
Use the
|
||||
.B \-shared
|
||||
@ -72,10 +79,38 @@ or
|
||||
option to compile for and link against shared or static klibc. Note
|
||||
that shared klibc only supports running against the exact same klibc
|
||||
binary as the binary was linked with.
|
||||
.PP
|
||||
In addition to standard
|
||||
.B gcc
|
||||
options,
|
||||
.B klcc
|
||||
supports options of the form \fB\-print-klibc-\fP\fIoption\fP,
|
||||
which prints the corresponding klibc configuration option.
|
||||
.SH AUTHOR
|
||||
Written by H. Peter Anvin <hpa@zytor.com>.
|
||||
.SH COPYRIGHT
|
||||
Copyright \(co 2005 H. Peter Anvin.
|
||||
Copyright \(co 2005 H. Peter Anvin \- All Rights Reserved
|
||||
.PP
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom
|
||||
the Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
.PP
|
||||
The above copyright notice and this permission notice shall
|
||||
be included in all copies or substantial portions of the Software.
|
||||
.PP
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
.SH "SEE ALSO"
|
||||
.BR gcc (1)
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
# -*- perl -*-
|
||||
|
||||
use IPC::Open3;
|
||||
|
||||
# Standard includes
|
||||
@includes = ("-I${prefix}/${KCROSS}include/arch/${ARCH}",
|
||||
"-I${prefix}/${KCROSS}include/bits${BITSIZE}",
|
||||
@ -57,7 +59,7 @@ sub files_with_lang($$) {
|
||||
|
||||
# Skip object files
|
||||
if ( $need ne 'obj' ) {
|
||||
unless ( $xopt eq $need ) {
|
||||
unless ( $xopt eq $need || $need eq 'stdin') {
|
||||
push(@as, '-x', $need);
|
||||
$xopt = $need;
|
||||
}
|
||||
@ -79,7 +81,11 @@ sub syserr($) {
|
||||
# Run a program; printing out the command line if $verbose is set
|
||||
sub mysystem(@) {
|
||||
print STDERR join(' ', @_), "\n" if ( $verbose );
|
||||
return system(@_);
|
||||
my $cmd = shift;
|
||||
open(INPUT, "<&STDIN"); # dup STDIN filehandle to INPUT
|
||||
my $childpid = open3("<&INPUT", ">&STDOUT", ">&STDERR", $cmd, @_);
|
||||
waitpid ($childpid, 0);
|
||||
return $?;
|
||||
}
|
||||
|
||||
#
|
||||
@ -117,6 +123,11 @@ while ( defined($a = shift(@ARGV)) ) {
|
||||
# Not an option. Must be a filename then.
|
||||
push(@files, $a);
|
||||
$flang{$a} = $lang || filename2lang($a);
|
||||
} elsif ( $a eq '-' ) {
|
||||
# gcc gets its input from stdin
|
||||
push(@files, $a);
|
||||
# prevent setting -x
|
||||
$flang{$a} = 'stdin'
|
||||
} elsif ( $a =~ /^-print-klibc-(.*)$/ ) {
|
||||
# This test must precede -print
|
||||
if ( defined($conf{$1}) ) {
|
||||
|
@ -145,17 +145,29 @@ ssize_t pwrite64,pwrite::pwrite(int, void *, size_t, off_t)
|
||||
;
|
||||
; Signal operations
|
||||
;
|
||||
int kill(pid_t, int)
|
||||
; We really should get rid of the non-rt_* of these, but that takes
|
||||
; sanitizing <signal.h> for all architectures, sigh...
|
||||
<?> int sigaction(int, const struct sigaction *, struct sigaction *)
|
||||
<?> int sigsuspend(const sigset_t *)
|
||||
<?> int sigpending(sigset_t *)
|
||||
<?> int sigprocmask(int, const sigset_t *, sigset_t *)
|
||||
int rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t)
|
||||
int rt_sigsuspend(const sigset_t *, size_t)
|
||||
int rt_sigpending(sigset_t *, size_t)
|
||||
int rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t)
|
||||
; sanitizing <signal.h> for all architectures, sigh.
|
||||
#ifdef __NR_sigaction
|
||||
int sigaction::__sigaction(int, const struct sigaction *, struct sigaction *)
|
||||
#else
|
||||
int rt_sigaction::__rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t)
|
||||
#endif
|
||||
#ifdef __NR_sigsuspend
|
||||
int sigsuspend(const sigset_t *)
|
||||
#else
|
||||
int rt_sigsuspend::__rt_sigsuspend(const sigset_t *, size_t)
|
||||
#endif
|
||||
#ifdef __NR_sigpending
|
||||
int sigpending(sigset_t *)
|
||||
#else
|
||||
int rt_sigpending::__rt_sigpending(sigset_t *, size_t)
|
||||
#endif
|
||||
#ifdef __NR_sigprocmask
|
||||
int sigprocmask(int, const sigset_t *, sigset_t *)
|
||||
#else
|
||||
int rt_sigprocmask::__rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t)
|
||||
#endif
|
||||
int kill(pid_t, int)
|
||||
<?> unsigned int alarm(unsigned int)
|
||||
int getitimer(int, struct itimerval *)
|
||||
int setitimer(int, const struct itimerval *, struct itimerval *)
|
||||
|
@ -13,6 +13,7 @@ ARCHOBJS = \
|
||||
arch/$(ARCH)/setjmp.o \
|
||||
arch/$(ARCH)/syscall.o \
|
||||
arch/$(ARCH)/open.o \
|
||||
arch/$(ARCH)/sigreturn.o \
|
||||
arch/$(ARCH)/libgcc/__ashldi3.o \
|
||||
arch/$(ARCH)/libgcc/__ashrdi3.o \
|
||||
arch/$(ARCH)/libgcc/__lshrdi3.o \
|
||||
|
@ -15,8 +15,13 @@
|
||||
# debugging using gdb.
|
||||
#
|
||||
ARCHREQFLAGS = -m64
|
||||
ifeq ($(DEBUG),y)
|
||||
OPTFLAGS = -Os -fomit-frame-pointer \
|
||||
-falign-functions=0 -falign-jumps=0 -falign-loops=0
|
||||
else
|
||||
OPTFLAGS = -Os -fno-asynchronous-unwind-tables -fomit-frame-pointer \
|
||||
-falign-functions=0 -falign-jumps=0 -falign-loops=0
|
||||
endif
|
||||
BITSIZE = 64
|
||||
LDFLAGS = -m elf_x86_64
|
||||
|
||||
|
@ -10,7 +10,8 @@
|
||||
ARCHOBJS = \
|
||||
arch/$(ARCH)/exits.o \
|
||||
arch/$(ARCH)/setjmp.o \
|
||||
arch/$(ARCH)/syscall.o
|
||||
arch/$(ARCH)/syscall.o \
|
||||
arch/$(ARCH)/sigreturn.o
|
||||
|
||||
ARCHSOOBJS = $(patsubst %.o,%.lo,$(ARCHOBJS))
|
||||
|
||||
|
@ -15,14 +15,14 @@ __syscall_common:
|
||||
syscall
|
||||
|
||||
cmpq $-4095,%rax
|
||||
jb 1f
|
||||
jnb 1f
|
||||
ret
|
||||
|
||||
# Error return, must set errno
|
||||
1:
|
||||
negl %eax
|
||||
movl %eax,errno(%rip) # errno is type int, so 32 bits
|
||||
orq $-1,%rax # orq $-1 smaller than movq $-1
|
||||
|
||||
1:
|
||||
ret
|
||||
|
||||
.size __syscall_common,.-__syscall_common
|
||||
|
@ -20,6 +20,7 @@ char *fgets(char *s, int n, FILE *f)
|
||||
return NULL;
|
||||
}
|
||||
*p++ = ch;
|
||||
n--;
|
||||
if ( ch == '\n' )
|
||||
break;
|
||||
}
|
||||
|
@ -5,11 +5,40 @@
|
||||
#include <signal.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#ifndef __NR_sigaction
|
||||
__extern void __sigreturn(void);
|
||||
__extern int __sigaction(int, const struct sigaction *, struct sigaction *);
|
||||
__extern int __rt_sigaction(int, const struct sigaction *, struct sigaction *, size_t);
|
||||
|
||||
int sigaction(int sig, const struct sigaction *act, struct sigaction *oact)
|
||||
{
|
||||
return rt_sigaction(sig, act, oact, sizeof(sigset_t));
|
||||
}
|
||||
int rv;
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
/* x86-64, and the Fedora i386 kernel, are broken without SA_RESTORER */
|
||||
struct sigaction sa;
|
||||
|
||||
if ( act && !(act->sa_flags & SA_RESTORER) ) {
|
||||
sa = *act;
|
||||
act = &sa;
|
||||
|
||||
/* The kernel can't be trusted to have a valid default restorer */
|
||||
sa.sa_flags |= SA_RESTORER;
|
||||
sa.sa_restorer = &__sigreturn;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __NR_sigaction
|
||||
rv = __sigaction(sig, act, oact);
|
||||
#else
|
||||
rv = __rt_sigaction(sig, act, oact, sizeof(sigset_t));
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
if ( oact && (oact->sa_restorer == &__sigreturn) ) {
|
||||
oact->sa_flags &= ~SA_RESTORER;
|
||||
}
|
||||
#endif
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
@ -7,9 +7,11 @@
|
||||
|
||||
#ifndef __NR_sigpending
|
||||
|
||||
__extern __rt_sigpending(sigset_t *, size_t);
|
||||
|
||||
int sigpending(sigset_t *set)
|
||||
{
|
||||
return rt_sigpending(set, sizeof(sigset_t));
|
||||
return __rt_sigpending(set, sizeof(sigset_t));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -7,9 +7,11 @@
|
||||
|
||||
#ifndef __NR_sigprocmask
|
||||
|
||||
__extern __rt_sigprocmask(int, const sigset_t *, sigset_t *, size_t);
|
||||
|
||||
int sigprocmask(int how, const sigset_t *set, sigset_t *oset)
|
||||
{
|
||||
return rt_sigprocmask(how, set, oset, sizeof(sigset_t));
|
||||
return __rt_sigprocmask(how, set, oset, sizeof(sigset_t));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -7,9 +7,11 @@
|
||||
|
||||
#ifndef __NR_sigsuspend
|
||||
|
||||
__extern int __rt_sigsuspend(const sigset_t *, size_t);
|
||||
|
||||
int sigsuspend(const sigset_t *mask)
|
||||
{
|
||||
return rt_sigsuspend(mask, sizeof *mask);
|
||||
return __rt_sigsuspend(mask, sizeof *mask);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -33,12 +33,13 @@ uintmax_t strntoumax(const char *nptr, char **endptr, int base, size_t n)
|
||||
}
|
||||
|
||||
/* Single optional + or - */
|
||||
if ( n && *nptr == '-' ) {
|
||||
minus = 1;
|
||||
nptr++;
|
||||
n--;
|
||||
} else if ( n && *nptr == '+' ) {
|
||||
nptr++;
|
||||
if ( n ) {
|
||||
char c = *nptr;
|
||||
if ( c == '-' || c == '+' ) {
|
||||
minus = (c == '-');
|
||||
nptr++;
|
||||
n--;
|
||||
}
|
||||
}
|
||||
|
||||
if ( base == 0 ) {
|
||||
|
0
klibc/makeklcc.pl
Normal file → Executable file
0
klibc/makeklcc.pl
Normal file → Executable file
@ -1 +1 @@
|
||||
1.0.7
|
||||
1.0.14
|
||||
|
Loading…
x
Reference in New Issue
Block a user