Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -150,10 +150,11 @@ ;; esac AC_PROG_OBJC($potential_compilers) AC_PROG_OBJCPP AC_PROG_EGREP +AC_PROG_SED AC_PROG_LN_S BUILDSYS_CHECK_IOS AC_ARG_WITH(wii, @@ -595,19 +596,19 @@ } @finally { foo(); } ]) ], [ - AS_IF([tr -dc "[[:print:]]" /dev/null], [ exception_type="DWARF" ]) - AS_IF([tr -dc "[[:print:]]" /dev/null], [ exception_type="SjLj" ]) - AS_IF([tr -dc "[[:print:]]" /dev/null], [ exception_type="SEH" ]) case "$exception_type" in @@ -815,18 +816,18 @@ AC_COMPILE_IFELSE([ AC_LANG_SOURCE([ double endianess = 2.993700760838795055656993580068609688772747263874402942272934826871811872228512759832626847251963763755836687759498519784550143745834860002945223766052808125982053455555265216112722718870586961456110693379343178124592311441022662940307099598578775368547768968914916965731708568179631324904813506101190853720749196062963892799499230635163056742330563321122389331703618066046034494287335316842529021563862331183541255013987734473643350285400060357711238514186776429325214739886098119655678483017894951556639821088508565036657794343031121375178126860889964700274558728491825977274341798997758923017217660272136611938897932105874133412726223468780517578125e-259; ]) ], [ - AS_IF([tr -dc "[[:print:]]" /dev/null], [ AC_DEFINE(OF_FLOAT_BIG_ENDIAN, 1, [Whether floats are big endian]) fp_endianess="big endian" ], [ - AS_IF([tr -dc "[[:print:]]" /dev/null], [ + AS_IF([$SED 's/[[^[:print:]]]//g' \ + /dev/null], [ fp_endianess="little endian" ]) ]) ]) ], [ @@ -1280,30 +1281,10 @@ ]) AC_CHECK_FUNCS([lstat]) AC_CHECK_MEMBERS([struct stat.st_birthtime], [], [], [ #include ]) - - old_OBJCFLAGS="$OBJCFLAGS" - OBJCFLAGS="$OBJCFLAGS -Werror" - AC_MSG_CHECKING(for readdir_r) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([ - #include - ], [ - DIR *dir = 0; - struct dirent entry, *result; - - readdir_r(dir, &entry, &result); - ]) - ], [ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_READDIR_R, 1, [Whether we have readdir_r()]) - ], [ - AC_MSG_RESULT(no) - ]) - OBJCFLAGS="$old_OBJCFLAGS" ]) AC_CHECK_HEADERS(dirent.h) AC_CHECK_FUNCS([sysconf gmtime_r localtime_r]) Index: src/OFFileIRIHandler.m ================================================================== --- src/OFFileIRIHandler.m +++ src/OFFileIRIHandler.m @@ -138,11 +138,11 @@ releasePasswdMutex(void) { [passwdMutex release]; } #endif -#if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS) && !defined(OF_WINDOWS) +#if defined(OF_HAVE_THREADS) && !defined(__GLIBC__) && !defined(OF_WINDOWS) static OFMutex *readdirMutex; static void releaseReaddirMutex(void) { @@ -773,11 +773,11 @@ #if defined(OF_FILE_MANAGER_SUPPORTS_OWNER) && defined(OF_HAVE_THREADS) passwdMutex = [[OFMutex alloc] init]; atexit(releasePasswdMutex); #endif -#if !defined(HAVE_READDIR_R) && !defined(OF_WINDOWS) && defined(OF_HAVE_THREADS) +#if defined(OF_HAVE_THREADS) && !defined(__GLIBC__) && !defined(OF_WINDOWS) readdirMutex = [[OFMutex alloc] init]; atexit(releaseReaddirMutex); #endif #ifdef OF_WINDOWS @@ -1420,11 +1420,11 @@ if ((dir = opendir([path cStringWithEncoding: encoding])) == NULL) @throw [OFOpenItemFailedException exceptionWithIRI: IRI mode: nil errNo: errno]; -# if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS) +# if defined(OF_HAVE_THREADS) && !defined(__GLIBC__) @try { [readdirMutex lock]; } @catch (id e) { closedir(dir); @throw e; @@ -1432,25 +1432,12 @@ # endif @try { for (;;) { struct dirent *dirent; -# ifdef HAVE_READDIR_R - struct dirent buffer; -# endif OFString *file; -# ifdef HAVE_READDIR_R - if (readdir_r(dir, &buffer, &dirent) != 0) - @throw [OFReadFailedException - exceptionWithObject: self - requestedLength: 0 - errNo: errno]; - - if (dirent == NULL) - break; -# else errno = 0; if ((dirent = readdir(dir)) == NULL) { if (errno == 0) break; else @@ -1457,11 +1444,10 @@ @throw [OFReadFailedException exceptionWithObject: self requestedLength: 0 errNo: errno]; } -# endif if (strcmp(dirent->d_name, ".") == 0 || strcmp(dirent->d_name, "..") == 0) continue; @@ -1474,11 +1460,11 @@ [file release]; } } } @finally { closedir(dir); -# if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS) +# if defined(OF_HAVE_THREADS) && !defined(__GLIBC__) [readdirMutex unlock]; # endif } #endif @@ -1996,10 +1982,11 @@ attributes: [OFDictionary dictionary] failedAttribute: @"" errNo: errNo]; } # elif defined(OF_HAIKU) + const char *cName = [name cStringWithEncoding: encoding]; int fd; if ((fd = open(cPath, O_WRONLY)) == -1) { int errNo = errno; Index: src/forwarding/apple-forwarding-arm64.S ================================================================== --- src/forwarding/apple-forwarding-arm64.S +++ src/forwarding/apple-forwarding-arm64.S @@ -40,26 +40,25 @@ _OFForward_stret: #ifdef HAVE_BTI bti c #endif - stp fp, lr, [sp, #-208]! + stp fp, lr, [sp, #-224]! mov fp, sp - sub sp, sp, #208 /* Save all arguments, x8 and x19 */ - stp x0, x1, [sp] - stp x2, x3, [sp, #16] - stp x4, x5, [sp, #32] - stp x6, x7, [sp, #48] - stp x8, x19, [sp, #64] + stp x0, x1, [sp, #16] + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp x6, x7, [sp, #64] + stp x8, x19, [sp, #80] /* Save all foating point arguments */ - stp q0, q1, [sp, #80] - stp q2, q3, [sp, #112] - stp q4, q5, [sp, #144] - stp q6, q7, [sp, #176] + stp q0, q1, [sp, #96] + stp q2, q3, [sp, #128] + stp q4, q5, [sp, #160] + stp q6, q7, [sp, #192] bl _object_getClass adrp x19, Lsel_forwardingTargetForSelector_@PAGE add x19, x19, Lsel_forwardingTargetForSelector_@PAGEOFF @@ -68,40 +67,36 @@ mov x1, x19 bl _class_respondsToSelector cbz x0, 0f - ldp x0, x2, [sp] + ldp x0, x2, [sp, #16] mov x1, x19 bl _objc_msgSend cbz x0, 0f - ldr x1, [sp] + ldr x1, [sp, #16] cmp x0, x1 b.eq 0f /* Restore all arguments, x8 and x19, but not x0 */ - ldr x1, [sp, #8] - ldp x2, x3, [sp, #16] - ldp x4, x5, [sp, #32] - ldp x6, x7, [sp, #48] - ldp x8, x19, [sp, #64] + ldr x1, [sp, #24] + ldp x2, x3, [sp, #32] + ldp x4, x5, [sp, #48] + ldp x6, x7, [sp, #64] + ldp x8, x19, [sp, #80] /* Restore all foating point arguments */ - ldp q0, q1, [sp, #80] - ldp q2, q3, [sp, #112] - ldp q4, q5, [sp, #144] - ldp q6, q7, [sp, #176] - - mov sp, fp - ldp fp, lr, [sp], #208 - + ldp q0, q1, [sp, #96] + ldp q2, q3, [sp, #128] + ldp q4, q5, [sp, #160] + ldp q6, q7, [sp, #192] + + ldp fp, lr, [sp], #224 b _objc_msgSend 0: - ldp x0, x1, [sp] - ldr x19, [sp, #72] + ldp x0, x1, [sp, #16] + ldr x19, [sp, #88] - mov sp, fp - ldp fp, lr, [sp], #208 - + ldp fp, lr, [sp], #224 b _OFMethodNotFound Index: src/forwarding/forwarding-arm64-elf.S ================================================================== --- src/forwarding/forwarding-arm64-elf.S +++ src/forwarding/forwarding-arm64-elf.S @@ -29,26 +29,25 @@ OFForward_stret: #ifdef HAVE_BTI bti c #endif - stp fp, lr, [sp, #-208]! + stp fp, lr, [sp, #-224]! mov fp, sp - sub sp, sp, #208 /* Save all arguments, x8 and x19 */ - stp x0, x1, [sp] - stp x2, x3, [sp, #16] - stp x4, x5, [sp, #32] - stp x6, x7, [sp, #48] - stp x8, x19, [sp, #64] + stp x0, x1, [sp, #16] + stp x2, x3, [sp, #32] + stp x4, x5, [sp, #48] + stp x6, x7, [sp, #64] + stp x8, x19, [sp, #80] /* Save all foating point arguments */ - stp q0, q1, [sp, #80] - stp q2, q3, [sp, #112] - stp q4, q5, [sp, #144] - stp q6, q7, [sp, #176] + stp q0, q1, [sp, #96] + stp q2, q3, [sp, #128] + stp q4, q5, [sp, #160] + stp q6, q7, [sp, #192] bl object_getClass adrp x19, .Lsel_forwardingTargetForSelector_ add x19, x19, :lo12:.Lsel_forwardingTargetForSelector_ @@ -56,56 +55,52 @@ mov x1, x19 bl class_respondsToSelector cbz x0, 0f - ldr x0, [sp] + ldr x0, [sp, #16] mov x1, x19 bl objc_msg_lookup mov x1, x19 mov x19, x0 - ldp x0, x2, [sp] + ldp x0, x2, [sp, #16] blr x19 cbz x0, 0f - ldr x1, [sp] + ldr x1, [sp, #16] cmp x0, x1 b.eq 0f mov x19, x0 - ldr x1, [sp, #8] + ldr x1, [sp, #24] bl objc_msg_lookup mov x16, x0 mov x0, x19 /* Restore all arguments, x8 and x19, but not x0 */ - ldr x1, [sp, #8] - ldp x2, x3, [sp, #16] - ldp x4, x5, [sp, #32] - ldp x6, x7, [sp, #48] - ldp x8, x19, [sp, #64] + ldr x1, [sp, #24] + ldp x2, x3, [sp, #32] + ldp x4, x5, [sp, #48] + ldp x6, x7, [sp, #64] + ldp x8, x19, [sp, #80] /* Restore all foating point arguments */ - ldp q0, q1, [sp, #80] - ldp q2, q3, [sp, #112] - ldp q4, q5, [sp, #144] - ldp q6, q7, [sp, #176] - - mov sp, fp - ldp fp, lr, [sp], #208 - + ldp q0, q1, [sp, #96] + ldp q2, q3, [sp, #128] + ldp q4, q5, [sp, #160] + ldp q6, q7, [sp, #192] + + ldp fp, lr, [sp], #224 br x16 0: - ldp x0, x1, [sp] - ldr x19, [sp, #72] + ldp x0, x1, [sp, #16] + ldr x19, [sp, #88] - mov sp, fp - ldp fp, lr, [sp], #208 - + ldp fp, lr, [sp], #224 b OFMethodNotFound .type OFForward, %function .size OFForward, .-OFForward .type OFForward_stret, %function .size OFForward_stret, .-OFForward_stret Index: src/platform/POSIX/OFSystemInfo+NetworkInterfaces.m ================================================================== --- src/platform/POSIX/OFSystemInfo+NetworkInterfaces.m +++ src/platform/POSIX/OFSystemInfo+NetworkInterfaces.m @@ -634,11 +634,11 @@ forKey: OFNetworkInterfaceHardwareAddress]; } return true; #elif defined(HAVE_IOCTL) && defined(HAVE_NET_IF_H) && \ - defined(HAVE_STRUCT_SOCKADDR_DL) + defined(HAVE_STRUCT_SOCKADDR_DL) && defined(IFT_ETHER) OFStringEncoding encoding = [OFLocale encoding]; int sock = socket(AF_INET, SOCK_DGRAM, 0); struct ifconf ifc; struct ifreq *ifrs; Index: src/runtime/lookup-asm/lookup-asm-amd64-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-amd64-elf.S +++ src/runtime/lookup-asm/lookup-asm-amd64-elf.S @@ -102,10 +102,12 @@ .LreturnNilMethod: leaq .LnilMethod(%rip), %rax ret .LnilMethod: + _CET_ENDBR + xorq %rax, %rax ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits Index: src/runtime/lookup-asm/lookup-asm-amd64-macho.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-amd64-macho.S +++ src/runtime/lookup-asm/lookup-asm-amd64-macho.S @@ -96,7 +96,9 @@ LreturnNilMethod: leaq LnilMethod(%rip), %rax ret LnilMethod: + _CET_ENDBR + xorq %rax, %rax ret Index: src/runtime/lookup-asm/lookup-asm-amd64-win64.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-amd64-win64.S +++ src/runtime/lookup-asm/lookup-asm-amd64-win64.S @@ -111,7 +111,9 @@ .LreturnNilMethod: leaq .LnilMethod(%rip), %rax ret .LnilMethod: + _CET_ENDBR + xorq %rax, %rax ret Index: src/runtime/lookup-asm/lookup-asm-arm64-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-arm64-elf.S +++ src/runtime/lookup-asm/lookup-asm-arm64-elf.S @@ -33,12 +33,11 @@ bti c #endif cbz x0, .LreturnNilMethod - tst x0, #1 - b.ne .LtaggedPointer_\name + tbnz x0, #0, .LtaggedPointer_\name ldr x2, [x0] ldr x2, [x2, #64] .Lmain_\name: @@ -100,11 +99,15 @@ .LreturnNilMethod: adr x0, .LnilMethod ret .LnilMethod: +#ifdef HAVE_BTI + bti c +#endif + mov x0, #0 ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits #endif Index: src/runtime/lookup-asm/lookup-asm-x86-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-elf.S +++ src/runtime/lookup-asm/lookup-asm-x86-elf.S @@ -115,10 +115,12 @@ addl $_GLOBAL_OFFSET_TABLE_, %eax leal .LnilMethod@GOTOFF(%eax), %eax ret .LnilMethod: + _CET_ENDBR + xorl %eax, %eax ret .LgetEIP: movl (%esp), %eax Index: src/runtime/lookup-asm/lookup-asm-x86-win32.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-win32.S +++ src/runtime/lookup-asm/lookup-asm-x86-win32.S @@ -104,7 +104,9 @@ .LreturnNilMethod: movl $.LnilMethod, %eax ret .LnilMethod: + _CET_ENDBR + xorl %eax, %eax ret