From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 113169 invoked by alias); 15 Apr 2016 12:32:24 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 113150 invoked by uid 89); 15 Apr 2016 12:32:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_PASS autolearn=ham version=3.3.2 spammy=strcpy, 57,7, evaluated, 128349 X-HELO: eu-smtp-delivery-143.mimecast.com From: Wilco Dijkstra To: 'GNU C Library' CC: nd Subject: [PATCH 2/2 v3] Remove ancient GCC string inlines Date: Fri, 15 Apr 2016 12:32:00 -0000 Message-ID: References: In-Reply-To: x-ms-office365-filtering-correlation-id: 2854faf9-2ba7-45e0-0356-08d36529f55f x-microsoft-exchange-diagnostics: 1;AM3PR08MB0088;5:FKm8AAG6qO11mICvuZX88jy592asXEgcyl3AcEeCZj4w+LQtv/NXp0wA4cg/Hc0fxEje642tcuIW4aG5e6X5WG4DqN/Sh7QBWH7hextM0MuV26aZJymlbngtaIluZnwuijRnBSgrKli6xUcsijQdjw==;24:weGD6leFDz8HaxG4h6fBq0L5fUciQcCY9Hzih0PnbGyVsRjKcia8WWWCRFtslDXX7NSo5R+109vWPqB242xY+ehU/jlvMBKjEE2SvfKpE2o=;20:goc9Wt31alq4E4oKokHwZYA4xNOkYTm18SOuiM5tvURvTCSyeHX9oXLp1E8H+5c4Frgyoamazp3xuG7xOUcE5RGhfblD1gmFJT7ZR0KRipXHZuMDPjmSEbrP0DD1fhmh7+PKlNFG8f3YGniyCfaJnBEAd7ANsewwL9MYDSDu8YY= x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0088; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(9101521026)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026);SRVR:AM3PR08MB0088;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0088; x-forefront-prvs: 0913EA1D60 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(377424004)(86362001)(2900100001)(189998001)(2950100001)(110136002)(81166005)(92566002)(5008740100001)(5003600100002)(5002640100001)(450100001)(229853001)(5004730100002)(106116001)(50986999)(76176999)(54356999)(87936001)(33656002)(11100500001)(74316001)(66066001)(3846002)(1096002)(2906002)(6116002)(19580395003)(1220700001)(9686002)(102836003)(76576001)(586003)(4326007)(3280700002)(19580405001)(5250100002)(3660700001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR08MB0088;H:AM3PR08MB0088.eurprd08.prod.outlook.com;FPR:;SPF:None;MLV:sfv;LANG:en; spamdiagnosticoutput: 1:23 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2016 12:32:07.3299 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR08MB0088 X-MC-Unique: B5vz-gSwSbyeP4wtoLBBGw-1 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable X-SW-Source: 2016-04/txt/msg00381.txt.bz2 Move mempcpy, strcpy and stpcpy inlines to string/string-inlines.c as compa= tibility symbols as they are no longer used. Fix compat symbols for __strpbrk inline= s. Passes AArch64, x86 and x64 regression. OK for commit? ChangeLog: 2016-04-15 Wilco Dijkstra [BZ #18712] * string/string-inlines.c (__STRING2_COPY_TYPE): Add, moved from string2.h. (__old_mempcpy_small): Likewise. (__old_strcpy_small): Likewise. (__old_stpcpy_small): Likewise. (__old_strpbrk_c2): Fix compat symbol name. (__old_strpbrk_c3): Likewise. * string/bits/string2.h (__STRING2_COPY_TYPE): Remove. (__mempcpy_small): Remove. (__strcpy_small): Remove. (__stpcpy_small): Remove. -- diff --git a/string/bits/string2.h b/string/bits/string2.h index 9b06bd456fef9ca72d50d8d39e5543cda13e9bfa..13a8c2f1a35236211029940f507= 4839d355236be 100644 --- a/string/bits/string2.h +++ b/string/bits/string2.h @@ -46,24 +46,6 @@ # endif #endif =20 -#if _STRING_INLINE_unaligned -# include -#else -/* These are a few types we need for the optimizations if we cannot - use unaligned memory accesses. */ -# define __STRING2_COPY_TYPE(N) \ - typedef struct { unsigned char __arr[N]; } \ - __attribute__ ((__packed__)) __STRING2_COPY_ARR##N -__STRING2_COPY_TYPE (2); -__STRING2_COPY_TYPE (3); -__STRING2_COPY_TYPE (4); -__STRING2_COPY_TYPE (5); -__STRING2_COPY_TYPE (6); -__STRING2_COPY_TYPE (7); -__STRING2_COPY_TYPE (8); -# undef __STRING2_COPY_TYPE -#endif - /* Dereferencing a pointer arg to run sizeof on it fails for the void pointer case, so we use this instead. Note that __x is evaluated twice. */ @@ -75,122 +57,7 @@ __STRING2_COPY_TYPE (8); # define __bzero(s, n) __builtin_memset (s, '\0', n) #endif =20 -# if defined _FORCE_INLINES -# if _STRING_INLINE_unaligned -__STRING_INLINE void * -__mempcpy_small (void *__dest1, - char __src0_1, char __src2_1, char __src4_1, char __src6_1, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - __uint32_t __ui; - __uint16_t __usi; - unsigned char __uc; - unsigned char __c; - } *__u =3D __dest1; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D __src0_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 2: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__c =3D __src2_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 4: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__c =3D __src4_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__c =3D __src6_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - __u =3D __extension__ ((void *) __u + 4); - break; - } - return (void *) __u; -} -# else -__STRING_INLINE void * -__mempcpy_small (void *__dest, char __src1, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D __src1; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __extension__ ((void *) __u + __srclen); -} -# endif -#endif - =20 -/* Return pointer to C in S. */ #ifndef _HAVE_STRING_ARCH_strchr extern void *__rawmemchr (const void *__s, int __c); # define strchr(s, c) \ @@ -201,227 +68,13 @@ extern void *__rawmemchr (const void *__s, int __c); #endif =20 =20 -/* Copy SRC to DEST. */ -#if defined _FORCE_INLINES -# if _STRING_INLINE_unaligned -__STRING_INLINE char * -__strcpy_small (char *__dest, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - __uint32_t __ui; - __uint16_t __usi; - unsigned char __uc; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__uc =3D '\0'; - break; - case 2: - __u->__usi =3D __src0_2; - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 4: - __u->__ui =3D __src0_4; - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__uc =3D '\0'; - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - break; - } - return __dest; -} -# else -__STRING_INLINE char * -__strcpy_small (char *__dest, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D '\0'; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __dest; -} -# endif -#endif - - /* Copy SRC to DEST, returning pointer to final NUL byte. */ #ifdef __USE_GNU # ifndef _HAVE_STRING_ARCH_stpcpy # define __stpcpy(dest, src) __builtin_stpcpy (dest, src) /* In glibc we use this function frequently but for namespace reasons we have to use the name `__stpcpy'. */ -# define stpcpy(dest, src) __stpcpy (dest, src) -# endif - -# if defined _FORCE_INLINES -# if _STRING_INLINE_unaligned -__STRING_INLINE char * -__stpcpy_small (char *__dest, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - unsigned int __ui; - unsigned short int __usi; - unsigned char __uc; - char __c; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__uc =3D '\0'; - break; - case 2: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 1); - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 4: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 3); - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__uc =3D '\0'; - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 1); - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - __u =3D __extension__ ((void *) __u + 3); - break; - } - return &__u->__c; -} -# else -__STRING_INLINE char * -__stpcpy_small (char *__dest, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D '\0'; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __dest + __srclen - 1; -} +# define stpcpy(dest, src) __stpcpy (dest, src) # endif # endif #endif diff --git a/string/string-inlines.c b/string/string-inlines.c index 06483760c369e5635382a3feb99967966fa1a6a2..1091468519e1561ac2a4e9c3ed6= eb75ee9fdf43f 100644 --- a/string/string-inlines.c +++ b/string/string-inlines.c @@ -108,7 +108,7 @@ __old_strspn_c3 (const char *__s, int __accept1, int __= accept2, compat_symbol (libc, __old_strspn_c3, __strspn_c3, GLIBC_2_1_1); =20 char * -__strpbrk_c2 (const char *__s, int __accept1, int __accept2) +__old_strpbrk_c2 (const char *__s, int __accept1, int __accept2) { /* Please note that __accept1 and __accept2 never can be '\0'. */ while (*__s !=3D '\0' && *__s !=3D __accept1 && *__s !=3D __accept2) @@ -118,7 +118,7 @@ __strpbrk_c2 (const char *__s, int __accept1, int __acc= ept2) compat_symbol (libc, __old_strpbrk_c2, __strpbrk_c2, GLIBC_2_1_1); =20 char * -__strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __accept3) +__old_strpbrk_c3 (const char *__s, int __accept1, int __accept2, int __acc= ept3) { /* Please note that __accept1 to __accept3 never can be '\0'. */ while (*__s !=3D '\0' && *__s !=3D __accept1 && *__s !=3D __accept2 @@ -128,4 +128,349 @@ __strpbrk_c3 (const char *__s, int __accept1, int __a= ccept2, int __accept3) } compat_symbol (libc, __old_strpbrk_c3, __strpbrk_c3, GLIBC_2_1_1); =20 +/* These are a few types we need for the optimizations if we cannot + use unaligned memory accesses. */ +# define __STRING2_COPY_TYPE(N) \ + typedef struct { unsigned char __arr[N]; } \ + __attribute__ ((__packed__)) __STRING2_COPY_ARR##N +__STRING2_COPY_TYPE (2); +__STRING2_COPY_TYPE (3); +__STRING2_COPY_TYPE (4); +__STRING2_COPY_TYPE (5); +__STRING2_COPY_TYPE (6); +__STRING2_COPY_TYPE (7); +__STRING2_COPY_TYPE (8); +# undef __STRING2_COPY_TYPE + + +# if _STRING_INLINE_unaligned +void * +__old_mempcpy_small (void *__dest1, + char __src0_1, char __src2_1, char __src4_1, char __src6_1, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + __uint32_t __ui; + __uint16_t __usi; + unsigned char __uc; + unsigned char __c; + } *__u =3D __dest1; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D __src0_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 2: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__c =3D __src2_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 4: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__c =3D __src4_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__c =3D __src6_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + __u =3D __extension__ ((void *) __u + 4); + break; + } + return (void *) __u; +} + +# else + +void * +__old_mempcpy_small (void *__dest, char __src1, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D __src1; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __extension__ ((void *) __u + __srclen); +} +# endif +compat_symbol (libc, __old_mempcpy_small, __mempcpy_small, GLIBC_2_1_1); + +# if _STRING_INLINE_unaligned +char * +__old_strcpy_small (char *__dest, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + __uint32_t __ui; + __uint16_t __usi; + unsigned char __uc; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__uc =3D '\0'; + break; + case 2: + __u->__usi =3D __src0_2; + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 4: + __u->__ui =3D __src0_4; + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__uc =3D '\0'; + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + break; + } + return __dest; +} + +# else + +char * +__old_strcpy_small (char *__dest, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D '\0'; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __dest; +} +# endif +compat_symbol (libc, __old_strcpy_small, __strcpy_small, GLIBC_2_1_1); + +# if _STRING_INLINE_unaligned +char * +__old_stpcpy_small (char *__dest, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + unsigned int __ui; + unsigned short int __usi; + unsigned char __uc; + char __c; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__uc =3D '\0'; + break; + case 2: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 1); + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 4: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 3); + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__uc =3D '\0'; + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 1); + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + __u =3D __extension__ ((void *) __u + 3); + break; + } + return &__u->__c; +} + +# else + +char * +__old_stpcpy_small (char *__dest, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D '\0'; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __dest + __srclen - 1; +} +# endif +compat_symbol (libc, __old_stpcpy_small, __stpcpy_small, GLIBC_2_1_1); + #endif