1
0

12 کامیت‌ها c47ad25ea3 ... ae3a8c93a6

نویسنده SHA1 پیام تاریخ
  Rich Felker ae3a8c93a6 fix strcasestr failing to find zero-length needle 1 ماه پیش
  Rich Felker 23febbd3c5 align mbsnrtowcs behavior on partial character with new requirements 1 ماه پیش
  Rich Felker 6915b34860 dns resolver: reorder sockaddr union to make initialization safe 1 ماه پیش
  Rich Felker a34ca6ead1 termios: fix input speed handling 3 ماه پیش
  Alex Rønne Petersen b6b81f697b clone: clear the frame pointer in the child process on relevant ports 6 ماه پیش
  Alex Rønne Petersen 5e03c03fcd clone: align the given stack pointer on or1k and riscv 4 ماه پیش
  Lihua Zhao 06c5e4e832 signal: check sigpause() input parameter 6 ماه پیش
  Xing Li b0dc340b38 loongarch64: add bits/hwcap.h for cpu feature bits in AT_HWCAP auxv entry 7 ماه پیش
  Rich Felker cabbd8697d bind_textdomain_codeset: fix return value 3 ماه پیش
  Rich Felker 00fb7107ca shadow.h: remove declaration of function not implemented 3 ماه پیش
  Alex Rønne Petersen 362fc54572 riscv: mark __restore and __restore_rt hidden 6 ماه پیش
  Alex Rønne Petersen f1cda422cd i386, x86_64, x32: set the symbol type for the crt1 START function 6 ماه پیش

+ 1 - 0
arch/i386/crt_arch.h

@@ -3,6 +3,7 @@ __asm__(
 ".weak _DYNAMIC \n"
 ".hidden _DYNAMIC \n"
 ".global " START "\n"
+".type " START ",%function \n"
 START ":\n"
 "	xor %ebp,%ebp \n"
 "	mov %esp,%eax \n"

+ 14 - 0
arch/loongarch64/bits/hwcap.h

@@ -0,0 +1,14 @@
+#define HWCAP_LOONGARCH_CPUCFG          (1 << 0)
+#define HWCAP_LOONGARCH_LAM             (1 << 1)
+#define HWCAP_LOONGARCH_UAL             (1 << 2)
+#define HWCAP_LOONGARCH_FPU             (1 << 3)
+#define HWCAP_LOONGARCH_LSX             (1 << 4)
+#define HWCAP_LOONGARCH_LASX            (1 << 5)
+#define HWCAP_LOONGARCH_CRC32           (1 << 6)
+#define HWCAP_LOONGARCH_COMPLEX         (1 << 7)
+#define HWCAP_LOONGARCH_CRYPTO          (1 << 8)
+#define HWCAP_LOONGARCH_LVZ             (1 << 9)
+#define HWCAP_LOONGARCH_LBT_X86         (1 << 10)
+#define HWCAP_LOONGARCH_LBT_ARM         (1 << 11)
+#define HWCAP_LOONGARCH_LBT_MIPS        (1 << 12)
+#define HWCAP_LOONGARCH_PTW             (1 << 13)

+ 1 - 0
arch/x32/crt_arch.h

@@ -1,6 +1,7 @@
 __asm__(
 ".text \n"
 ".global " START " \n"
+".type " START ",%function \n"
 START ": \n"
 "	xor %rbp,%rbp \n"
 "	mov %rsp,%rdi \n"

+ 1 - 0
arch/x86_64/crt_arch.h

@@ -1,6 +1,7 @@
 __asm__(
 ".text \n"
 ".global " START " \n"
+".type " START ",%function \n"
 START ": \n"
 "	xor %rbp,%rbp \n"
 "	mov %rsp,%rdi \n"

+ 0 - 1
include/shadow.h

@@ -28,7 +28,6 @@ void setspent(void);
 void endspent(void);
 struct spwd *getspent(void);
 struct spwd *fgetspent(FILE *);
-struct spwd *sgetspent(const char *);
 int putspent(const struct spwd *, FILE *);
 
 struct spwd *getspnam(const char *);

+ 4 - 2
src/locale/bind_textdomain_codeset.c

@@ -5,7 +5,9 @@
 
 char *bind_textdomain_codeset(const char *domainname, const char *codeset)
 {
-	if (codeset && strcasecmp(codeset, "UTF-8"))
+	if (codeset && strcasecmp(codeset, "UTF-8")) {
 		errno = EINVAL;
-	return NULL;
+		return 0;
+	}
+	return "UTF-8";
 }

+ 4 - 2
src/multibyte/mbsnrtowcs.c

@@ -2,11 +2,13 @@
 
 size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, size_t wn, mbstate_t *restrict st)
 {
+	static unsigned internal_state;
 	size_t l, cnt=0, n2;
 	wchar_t *ws, wbuf[256];
 	const char *s = *src;
 	const char *tmp_s;
 
+	if (!st) st = (void *)&internal_state;
 	if (!wcs) ws = wbuf, wn = sizeof wbuf / sizeof *wbuf;
 	else ws = wcs;
 
@@ -41,8 +43,8 @@ size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si
 				s = 0;
 				break;
 			}
-			/* have to roll back partial character */
-			*(unsigned *)st = 0;
+			s += n;
+			n -= n;
 			break;
 		}
 		s += l; n -= l;

+ 1 - 1
src/network/res_msend.c

@@ -83,8 +83,8 @@ int __res_msend_rc(int nqueries, const unsigned char *const *queries,
 	int fd;
 	int timeout, attempts, retry_interval, servfail_retry;
 	union {
-		struct sockaddr_in sin;
 		struct sockaddr_in6 sin6;
+		struct sockaddr_in sin;
 	} sa = {0}, ns[MAXNS] = {{0}};
 	socklen_t sl = sizeof sa.sin;
 	int nns = 0;

+ 2 - 0
src/signal/riscv32/restore.s

@@ -1,7 +1,9 @@
 .global __restore
+.hidden __restore
 .type __restore, %function
 __restore:
 .global __restore_rt
+.hidden __restore_rt
 .type __restore_rt, %function
 __restore_rt:
 	li a7, 139 # SYS_rt_sigreturn

+ 2 - 0
src/signal/riscv64/restore.s

@@ -1,7 +1,9 @@
 .global __restore
+.hidden __restore
 .type __restore, %function
 __restore:
 .global __restore_rt
+.hidden __restore_rt
 .type __restore_rt, %function
 __restore_rt:
 	li a7, 139 # SYS_rt_sigreturn

+ 1 - 1
src/signal/sigpause.c

@@ -4,6 +4,6 @@ int sigpause(int sig)
 {
 	sigset_t mask;
 	sigprocmask(0, 0, &mask);
-	sigdelset(&mask, sig);
+	if (sigdelset(&mask, sig)) return -1;
 	return sigsuspend(&mask);
 }

+ 1 - 0
src/string/strcasestr.c

@@ -4,6 +4,7 @@
 char *strcasestr(const char *h, const char *n)
 {
 	size_t l = strlen(n);
+	if (!l) return (char *)h;
 	for (; *h; h++) if (!strncasecmp(h, n, l)) return (char *)h;
 	return 0;
 }

+ 1 - 1
src/termios/cfgetospeed.c

@@ -9,5 +9,5 @@ speed_t cfgetospeed(const struct termios *tio)
 
 speed_t cfgetispeed(const struct termios *tio)
 {
-	return cfgetospeed(tio);
+	return (tio->c_cflag & CIBAUD) / (CIBAUD/CBAUD);
 }

+ 7 - 3
src/termios/cfsetospeed.c

@@ -16,7 +16,11 @@ int cfsetospeed(struct termios *tio, speed_t speed)
 
 int cfsetispeed(struct termios *tio, speed_t speed)
 {
-	return speed ? cfsetospeed(tio, speed) : 0;
+	if (speed & ~CBAUD) {
+		errno = EINVAL;
+		return -1;
+	}
+	tio->c_cflag &= ~CIBAUD;
+	tio->c_cflag |= speed * (CIBAUD/CBAUD);
+	return 0;
 }
-
-weak_alias(cfsetospeed, cfsetspeed);

+ 11 - 0
src/termios/cfsetspeed.c

@@ -0,0 +1,11 @@
+#define _BSD_SOURCE
+#include <termios.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+
+int cfsetspeed(struct termios *tio, speed_t speed)
+{
+	int r = cfsetospeed(tio, speed);
+	if (!r) cfsetispeed(tio, 0);
+	return r;
+}

+ 2 - 1
src/thread/aarch64/clone.s

@@ -24,7 +24,8 @@ __clone:
 	// parent
 	ret
 	// child
-1:	ldp x1,x0,[sp],#16
+1:	mov fp, 0
+	ldp x1,x0,[sp],#16
 	blr x1
 	mov x8,#93 // SYS_exit
 	svc #0

+ 2 - 1
src/thread/arm/clone.s

@@ -19,7 +19,8 @@ __clone:
 	ldmfd sp!,{r4,r5,r6,r7}
 	bx lr
 
-1:	mov r0,r6
+1:	mov fp,#0
+	mov r0,r6
 	bl 3f
 2:	mov r7,#1
 	svc 0

+ 1 - 0
src/thread/loongarch64/clone.s

@@ -22,6 +22,7 @@ __clone:
 	beqz    $a0, 1f         # whether child process
 	jirl    $zero, $ra, 0   # parent process return
 1:
+	move    $fp, $zero
 	ld.d    $t8, $sp, 0     # function pointer
 	ld.d    $a0, $sp, 8     # argument pointer
 	jirl    $ra, $t8, 0     # call the user's function

+ 2 - 1
src/thread/m68k/clone.s

@@ -18,7 +18,8 @@ __clone:
 	beq 1f
 	movem.l (%sp)+,%d2-%d5
 	rts
-1:	move.l %a1,-(%sp)
+1:	suba.l %fp,%fp
+	move.l %a1,-(%sp)
 	jsr (%a0)
 	move.l #1,%d0
 	trap #0

+ 2 - 1
src/thread/microblaze/clone.s

@@ -22,7 +22,8 @@ __clone:
 	rtsd    r15, 8
 	nop
 
-1:	lwi     r3, r1, 0
+1:	add     r19, r0, r0
+	lwi     r3, r1, 0
 	lwi     r5, r1, 4
 	brald   r15, r3
 	nop

+ 2 - 1
src/thread/mips/clone.s

@@ -27,7 +27,8 @@ __clone:
 	addu $sp, $sp, 16
 	jr $ra
 	nop
-1:	lw $25, 0($sp)
+1:	move $fp, $0
+	lw $25, 0($sp)
 	lw $4, 4($sp)
 	jalr $25
 	nop

+ 2 - 1
src/thread/mips64/clone.s

@@ -25,7 +25,8 @@ __clone:
 	nop
 	jr	$ra
 	nop
-1:	ld	$25, 0($sp)	# function pointer
+1:	move	$fp, $0
+	ld	$25, 0($sp)	# function pointer
 	ld	$4, 8($sp)	# argument pointer
 	jalr	$25		# call the user's function
 	nop

+ 2 - 1
src/thread/mipsn32/clone.s

@@ -25,7 +25,8 @@ __clone:
 	nop
 	jr	$ra
 	nop
-1:	lw	$25, 0($sp)	# function pointer
+1:	move	$fp, $0
+	lw	$25, 0($sp)	# function pointer
 	lw	$4, 4($sp)	# argument pointer
 	jalr	$25		# call the user's function
 	nop

+ 4 - 1
src/thread/or1k/clone.s

@@ -6,6 +6,8 @@
 .hidden __clone
 .type   __clone,@function
 __clone:
+	l.xori	r11, r0, -4
+	l.and	r4, r4, r11
 	l.addi	r4, r4, -8
 	l.sw	0(r4), r3
 	l.sw	4(r4), r6
@@ -23,7 +25,8 @@ __clone:
 	l.jr	r9
 	 l.nop
 
-1:	l.lwz	r11, 0(r1)
+1:	l.ori	r2, r0, 0
+	l.lwz	r11, 0(r1)
 	l.jalr	r11
 	 l.lwz	r3, 4(r1)
 

+ 1 - 0
src/thread/riscv32/clone.s

@@ -8,6 +8,7 @@
 .type  __clone, %function
 __clone:
 	# Save func and arg to stack
+	andi a1, a1, -16
 	addi a1, a1, -16
 	sw a0, 0(a1)
 	sw a3, 4(a1)

+ 1 - 0
src/thread/riscv64/clone.s

@@ -8,6 +8,7 @@
 .type  __clone, %function
 __clone:
 	# Save func and arg to stack
+	andi a1, a1, -16
 	addi a1, a1, -16
 	sd a0, 0(a1)
 	sd a3, 8(a1)