summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/x86_64')
-rw-r--r--libc/sysdeps/linux/x86_64/__syscall_error.c4
-rw-r--r--libc/sysdeps/linux/x86_64/bits/fcntl.h9
-rw-r--r--libc/sysdeps/linux/x86_64/bits/fenv.h10
-rw-r--r--libc/sysdeps/linux/x86_64/bits/kernel_stat.h2
-rw-r--r--libc/sysdeps/linux/x86_64/bits/msq.h10
-rw-r--r--libc/sysdeps/linux/x86_64/bits/sem.h8
-rw-r--r--libc/sysdeps/linux/x86_64/bits/shm.h18
-rw-r--r--libc/sysdeps/linux/x86_64/bits/stat.h12
-rw-r--r--libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h3
-rw-r--r--libc/sysdeps/linux/x86_64/crt1.S12
10 files changed, 53 insertions, 35 deletions
diff --git a/libc/sysdeps/linux/x86_64/__syscall_error.c b/libc/sysdeps/linux/x86_64/__syscall_error.c
index 448f50983..7f0f388c4 100644
--- a/libc/sysdeps/linux/x86_64/__syscall_error.c
+++ b/libc/sysdeps/linux/x86_64/__syscall_error.c
@@ -10,8 +10,8 @@
/* This routine is jumped to by all the syscall handlers, to stash
* an error number into errno. */
-int __syscall_error(void) attribute_hidden;
-int __syscall_error(void)
+long __syscall_error(void) attribute_hidden;
+long __syscall_error(void)
{
register int err_no __asm__ ("%rcx");
__asm__ ("mov %rax, %rcx\n\t"
diff --git a/libc/sysdeps/linux/x86_64/bits/fcntl.h b/libc/sysdeps/linux/x86_64/bits/fcntl.h
index bb75b76e0..821b2e3cc 100644
--- a/libc/sysdeps/linux/x86_64/bits/fcntl.h
+++ b/libc/sysdeps/linux/x86_64/bits/fcntl.h
@@ -54,6 +54,7 @@
# define O_DIRECT 040000 /* Direct disk access. */
# define O_NOATIME 01000000 /* Do not set atime. */
# define O_PATH 010000000 /* Resolve pathname but do not open file. */
+# define O_TMPFILE 020200000 /* Atomically create nameless file. */
#endif
/* For now Linux has synchronisity options for data and read operations.
@@ -115,11 +116,13 @@
# define F_SETLEASE 1024 /* Set a lease. */
# define F_GETLEASE 1025 /* Enquire what lease is active. */
# define F_NOTIFY 1026 /* Request notfications on a directory. */
-# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
- close-on-exit set on new fd. */
# define F_SETPIPE_SZ 1031 /* Set pipe page size array. */
# define F_GETPIPE_SZ 1032 /* Get pipe page size array. */
#endif
+#if defined __USE_XOPEN2K8 || defined __USE_GNU
+# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
+ close-on-exit set on new fd. */
+#endif
/* For F_[GET|SET]FD. */
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
@@ -256,3 +259,5 @@ extern ssize_t tee (int __fdin, int __fdout, size_t __len,
#endif
__END_DECLS
+/* Include generic Linux declarations. */
+#include <bits/fcntl-linux.h>
diff --git a/libc/sysdeps/linux/x86_64/bits/fenv.h b/libc/sysdeps/linux/x86_64/bits/fenv.h
index 8e38c16ec..f16b64ad3 100644
--- a/libc/sysdeps/linux/x86_64/bits/fenv.h
+++ b/libc/sysdeps/linux/x86_64/bits/fenv.h
@@ -69,18 +69,18 @@ typedef unsigned short int fexcept_t;
typedef struct
{
unsigned short int __control_word;
- unsigned short int __unused1;
+ unsigned short int __uclibc_unused1;
unsigned short int __status_word;
- unsigned short int __unused2;
+ unsigned short int __uclibc_unused2;
unsigned short int __tags;
- unsigned short int __unused3;
+ unsigned short int __uclibc_unused3;
unsigned int __eip;
unsigned short int __cs_selector;
unsigned int __opcode:11;
- unsigned int __unused4:5;
+ unsigned int __uclibc_unused4:5;
unsigned int __data_offset;
unsigned short int __data_selector;
- unsigned short int __unused5;
+ unsigned short int __uclibc_unused5;
#if __WORDSIZE == 64
unsigned int __mxcsr;
#endif
diff --git a/libc/sysdeps/linux/x86_64/bits/kernel_stat.h b/libc/sysdeps/linux/x86_64/bits/kernel_stat.h
index e194a7f76..d01d81d69 100644
--- a/libc/sysdeps/linux/x86_64/bits/kernel_stat.h
+++ b/libc/sysdeps/linux/x86_64/bits/kernel_stat.h
@@ -21,7 +21,7 @@ struct kernel_stat {
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
- long __unused[3];
+ long __uclibc_unused[3];
};
/* x86-64 stat64 is same as stat */
diff --git a/libc/sysdeps/linux/x86_64/bits/msq.h b/libc/sysdeps/linux/x86_64/bits/msq.h
index 838910713..3141266bc 100644
--- a/libc/sysdeps/linux/x86_64/bits/msq.h
+++ b/libc/sysdeps/linux/x86_64/bits/msq.h
@@ -39,23 +39,23 @@ struct msqid_ds
struct ipc_perm msg_perm; /* structure describing operation permission */
__time_t msg_stime; /* time of last msgsnd command */
#if __WORDSIZE == 32
- unsigned long int __unused1;
+ unsigned long int __uclibc_unused1;
#endif
__time_t msg_rtime; /* time of last msgrcv command */
#if __WORDSIZE == 32
- unsigned long int __unused2;
+ unsigned long int __uclibc_unused2;
#endif
__time_t msg_ctime; /* time of last change */
#if __WORDSIZE == 32
- unsigned long int __unused3;
+ unsigned long int __uclibc_unused3;
#endif
unsigned long int __msg_cbytes; /* current number of bytes on queue */
msgqnum_t msg_qnum; /* number of messages currently on queue */
msglen_t msg_qbytes; /* max number of bytes allowed on queue */
__pid_t msg_lspid; /* pid of last msgsnd() */
__pid_t msg_lrpid; /* pid of last msgrcv() */
- unsigned long int __unused4;
- unsigned long int __unused5;
+ unsigned long int __uclibc_unused4;
+ unsigned long int __uclibc_unused5;
};
#ifdef __USE_MISC
diff --git a/libc/sysdeps/linux/x86_64/bits/sem.h b/libc/sysdeps/linux/x86_64/bits/sem.h
index 8c09031c7..9dfab87cb 100644
--- a/libc/sysdeps/linux/x86_64/bits/sem.h
+++ b/libc/sysdeps/linux/x86_64/bits/sem.h
@@ -39,12 +39,12 @@ struct semid_ds
{
struct ipc_perm sem_perm; /* operation permission struct */
__time_t sem_otime; /* last semop() time */
- unsigned long int __unused1;
+ unsigned long int __uclibc_unused1;
__time_t sem_ctime; /* last time changed by semctl() */
- unsigned long int __unused2;
+ unsigned long int __uclibc_unused2;
unsigned long int sem_nsems; /* number of semaphores in set */
- unsigned long int __unused3;
- unsigned long int __unused4;
+ unsigned long int __uclibc_unused3;
+ unsigned long int __uclibc_unused4;
};
/* The user should define a union like the following to use it for arguments
diff --git a/libc/sysdeps/linux/x86_64/bits/shm.h b/libc/sysdeps/linux/x86_64/bits/shm.h
index 3a25de562..316895853 100644
--- a/libc/sysdeps/linux/x86_64/bits/shm.h
+++ b/libc/sysdeps/linux/x86_64/bits/shm.h
@@ -52,21 +52,21 @@ struct shmid_ds
size_t shm_segsz; /* size of segment in bytes */
__time_t shm_atime; /* time of last shmat() */
#if __WORDSIZE == 32
- unsigned long int __unused1;
+ unsigned long int __uclibc_unused1;
#endif
__time_t shm_dtime; /* time of last shmdt() */
#if __WORDSIZE == 32
- unsigned long int __unused2;
+ unsigned long int __uclibc_unused2;
#endif
__time_t shm_ctime; /* time of last change by shmctl() */
#if __WORDSIZE == 32
- unsigned long int __unused3;
+ unsigned long int __uclibc_unused3;
#endif
__pid_t shm_cpid; /* pid of creator */
__pid_t shm_lpid; /* pid of last shmop */
shmatt_t shm_nattch; /* number of current attaches */
- unsigned long int __unused4;
- unsigned long int __unused5;
+ unsigned long int __uclibc_unused4;
+ unsigned long int __uclibc_unused5;
};
#ifdef __USE_MISC
@@ -88,10 +88,10 @@ struct shminfo
unsigned long int shmmni;
unsigned long int shmseg;
unsigned long int shmall;
- unsigned long int __unused1;
- unsigned long int __unused2;
- unsigned long int __unused3;
- unsigned long int __unused4;
+ unsigned long int __uclibc_unused1;
+ unsigned long int __uclibc_unused2;
+ unsigned long int __uclibc_unused3;
+ unsigned long int __uclibc_unused4;
};
struct shm_info
diff --git a/libc/sysdeps/linux/x86_64/bits/stat.h b/libc/sysdeps/linux/x86_64/bits/stat.h
index e25f01521..a8c75feaa 100644
--- a/libc/sysdeps/linux/x86_64/bits/stat.h
+++ b/libc/sysdeps/linux/x86_64/bits/stat.h
@@ -77,7 +77,7 @@ struct stat
#else
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
#endif
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
/* Nanosecond resolution timestamps are stored in a format
equivalent to 'struct timespec'. This is the type used
whenever possible but the Unix namespace rules do not allow the
@@ -99,11 +99,11 @@ struct stat
unsigned long int st_ctimensec; /* Nsecs of last status change. */
#endif
#if __WORDSIZE == 64
- long int __unused[3];
+ long int __uclibc_unused[3];
#else
# ifndef __USE_FILE_OFFSET64
- unsigned long int __unused4;
- unsigned long int __unused5;
+ unsigned long int __uclibc_unused4;
+ unsigned long int __uclibc_unused5;
# else
__ino64_t st_ino; /* File serial number. */
# endif
@@ -138,7 +138,7 @@ struct stat64
#endif
__blksize_t st_blksize; /* Optimal block size for I/O. */
__blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
-#ifdef __USE_MISC
+#if defined(__USE_MISC) || defined(__USE_XOPEN2K8)
/* Nanosecond resolution timestamps are stored in a format
equivalent to 'struct timespec'. This is the type used
whenever possible but the Unix namespace rules do not allow the
@@ -160,7 +160,7 @@ struct stat64
unsigned long int st_ctimensec; /* Nsecs of last status change. */
#endif
#if __WORDSIZE == 64
- long int __unused[3];
+ long int __uclibc_unused[3];
#else
__ino64_t st_ino; /* File serial number. */
#endif
diff --git a/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h b/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
index 43801699e..400cfe3b9 100644
--- a/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
+++ b/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
@@ -11,6 +11,9 @@
/* can your target use syscall6() for mmap ? */
#define __UCLIBC_MMAP_HAS_6_ARGS__
+/* does your target use statx */
+#undef __UCLIBC_HAVE_STATX__
+
/* does your target align 64bit values in register pairs ? (32bit arches only) */
#undef __UCLIBC_SYSCALL_ALIGN_64BIT__
diff --git a/libc/sysdeps/linux/x86_64/crt1.S b/libc/sysdeps/linux/x86_64/crt1.S
index 87777dd5d..151aeffeb 100644
--- a/libc/sysdeps/linux/x86_64/crt1.S
+++ b/libc/sysdeps/linux/x86_64/crt1.S
@@ -80,6 +80,16 @@ _start:
the outermost frame obviously. */
xorl %ebp, %ebp
+#ifdef L_rcrt1
+ pushq %rdi /* save rdi (but should be 0...) */
+ pushq %rdx /* store rdx (rtld_fini) */
+ lea __ehdr_start(%rip), %rdi /* "Calculate" load address... */
+ call reloc_static_pie /* relocate dynamic addrs */
+ xorq %rax, %rax /* cleanup */
+ popq %rdx
+ popq %rdi
+#endif
+
/* Extract the arguments as encoded on the stack and set up
the arguments for __libc_start_main (int (*main) (int, char **, char **),
int argc, char *argv,
@@ -107,7 +117,7 @@ _start:
which grow downwards). */
pushq %rsp
-#if defined(L_Scrt1)
+#if defined(L_Scrt1) || defined(L_rcrt1)
/* Give address for main() */
movq main@GOTPCREL(%rip), %rdi