[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r3273 - in /fsf/trunk/libc: ./ debug/ iconvdata/ locale/programs/ nis/ posix/ stdio-common/ sunrpc/ sysdeps/x86_64/
- To: commits@xxxxxxxxxx
- Subject: [commits] r3273 - in /fsf/trunk/libc: ./ debug/ iconvdata/ locale/programs/ nis/ posix/ stdio-common/ sunrpc/ sysdeps/x86_64/
- From: eglibc@xxxxxxxxxx
- Date: Sun, 26 Aug 2007 07:03:33 -0000
Author: eglibc
Date: Sun Aug 26 00:03:31 2007
New Revision: 3273
Log:
Import glibc-mainline for 2007-08-26
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/Makerules
fsf/trunk/libc/config.make.in
fsf/trunk/libc/debug/Makefile
fsf/trunk/libc/iconvdata/iso-2022-cn.c
fsf/trunk/libc/iconvdata/iso-2022-kr.c
fsf/trunk/libc/locale/programs/ld-collate.c
fsf/trunk/libc/nis/nis_xdr.c
fsf/trunk/libc/nis/yp_xdr.c
fsf/trunk/libc/posix/regex_internal.h
fsf/trunk/libc/posix/tst-rfc3484-2.c
fsf/trunk/libc/posix/tst-rfc3484.c
fsf/trunk/libc/stdio-common/Makefile
fsf/trunk/libc/sunrpc/key_prot.c
fsf/trunk/libc/sysdeps/x86_64/cacheinfo.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Sun Aug 26 00:03:31 2007
@@ -1,3 +1,48 @@
+2007-08-25 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ * iconvdata/iso-2022-kr.c (BODY): Fake initialization of array buf
+ to keep gcc quiet.
+ * iconvdata/iso-2022-cn.c (BODY): Likewise.
+
+ * locale/programs/ld-collate.c (collate_output): Avoid warning if
+ NDEBUG is defined.
+
+ * Makerules: Use -p option with mkdir.
+
+ * sunrpc/key_prot.c (xdr_unixcred): Work around gcc alias warning.
+ * nis/nis_xdr.c (_xdr_nis_server): Likewise.
+ (_xdr_directory_obj): Likewise.
+ (xdr_entry_obj): Likewise.
+ (xdr_group_obj): Likewise.
+ (xdr_link_obj): Likewise.
+ (xdr_table_obj): Likewise.
+ (_xdr_nis_result): Likewise.
+ (_xdr_ns_request): Likewise.
+ (_xdr_ib_request): Likewise.
+ (_xdr_nis_taglist): Likewise.
+ (xdr_cback_data): Likewise.
+ * nis/yp_xdr.c (xdr_ypmaplist): Likewise.
+ (xdr_ypresp_maplist): Likewise.
+
+ * stdio-common/Makefile: Avoid format string warning for tst-sprint.
+
+ * posix/regex_internal.h: Prevent some declarations and definitions
+ to be seen when used in tests.
+
+ * posix/tst-rfc3484.c (__idna_to_unicode_lzlz): Initialize *OUTPUT.
+ * posix/tst-rfc3484-2.c (__idna_to_unicode_lzlz): Likewise.
+
+ * debug/Makefile: Disable format checking when compiling tst-chk?.c.
+
+ * config.make.in (datarootdir): Add to shut up configure.
+
+ * sysdeps/x86_64/cacheinfo.c (handle_amd): Fix computation of
+ associativity for fully-associative caches.
+
+ * sysdeps/x86_64/cacheinfo.c (handle_amd): Handle L3 cache
+ requests. Fill on more associativity values for L2.
+ Patch mostly by Evandro Menezes.
+
2007-08-24 Ulrich Drepper <drepper@xxxxxxxxxx>
* sysdeps/unix/sysv/linux/x86_64/init-first.c
@@ -7,7 +52,7 @@
* resolv/arpa/nameser.h (NS_OPT_DNSSEC_OK): Define.
* sysdeps/unix/sysv/linux/i386/syscalls.list: No reason to mark
- fallocate64 as EXTRA< it is not referenced if the symbol isn't
+ fallocate64 as EXTRA. It is not referenced if the symbol isn't
defined.
2007-08-23 Ulrich Drepper <drepper@xxxxxxxxxx>
Modified: fsf/trunk/libc/Makerules
==============================================================================
--- fsf/trunk/libc/Makerules (original)
+++ fsf/trunk/libc/Makerules Sun Aug 26 00:03:31 2007
@@ -732,7 +732,9 @@
# Generic rule for making directories.
%/:
# mkdir isn't smart enough to strip a trailing /.
- mkdir $(@:%/=%)
+# We always require a mkdir which supports the -p option to avoid error
+# messages in case of races.
+ mkdir -p $(@:%/=%)
# Make sure that object files are not removed
# when they are intermediates between sources and library members.
Modified: fsf/trunk/libc/config.make.in
==============================================================================
--- fsf/trunk/libc/config.make.in (original)
+++ fsf/trunk/libc/config.make.in Sun Aug 26 00:03:31 2007
@@ -17,6 +17,7 @@
rootsbindir = @libc_cv_rootsbindir@
infodir = @infodir@
includedir = @includedir@
+datarootdir = @datarootdir@
# Should we use and build ldconfig?
use-ldconfig = @use_ldconfig@
Modified: fsf/trunk/libc/debug/Makefile
==============================================================================
--- fsf/trunk/libc/debug/Makefile (original)
+++ fsf/trunk/libc/debug/Makefile Sun Aug 26 00:03:31 2007
@@ -72,6 +72,11 @@
CFLAGS-recv_chk.c = -fexceptions -fasynchronous-unwind-tables
CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables
+# We know these tests have problems with format strings, this is what
+# we are testing. Disable that warning.
+CFLAGS-tst-chk1.c = -Wno-format
+CFLAGS-tst-chk2.c = -Wno-format
+CFLAGS-tst-chk3.c = -Wno-format
tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata
tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata
tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata
Modified: fsf/trunk/libc/iconvdata/iso-2022-cn.c
==============================================================================
--- fsf/trunk/libc/iconvdata/iso-2022-cn.c (original)
+++ fsf/trunk/libc/iconvdata/iso-2022-cn.c Sun Aug 26 00:03:31 2007
@@ -264,6 +264,9 @@
else \
{ \
unsigned char buf[2]; \
+ /* Fake initialization to keep gcc quiet. */ \
+ asm ("" : "=m" (buf)); \
+ \
int used; \
size_t written = 0; \
\
Modified: fsf/trunk/libc/iconvdata/iso-2022-kr.c
==============================================================================
--- fsf/trunk/libc/iconvdata/iso-2022-kr.c (original)
+++ fsf/trunk/libc/iconvdata/iso-2022-kr.c Sun Aug 26 00:03:31 2007
@@ -200,9 +200,7 @@
#define LOOPFCT TO_LOOP
#define BODY \
{ \
- uint32_t ch; \
- \
- ch = get32 (inptr); \
+ uint32_t ch = get32 (inptr); \
\
/* First see whether we can write the character using the currently \
selected character set. */ \
@@ -224,10 +222,10 @@
else \
{ \
unsigned char buf[2]; \
- size_t written; \
- \
- written = ucs4_to_ksc5601 (ch, buf, 2); \
- \
+ /* Fake initialization to keep gcc quiet. */ \
+ asm ("" : "=m" (buf)); \
+ \
+ size_t written = ucs4_to_ksc5601 (ch, buf, 2); \
if (__builtin_expect (written, 0) == __UNKNOWN_10646_CHAR) \
{ \
UNICODE_TAG_HANDLER (ch, 4); \
Modified: fsf/trunk/libc/locale/programs/ld-collate.c
==============================================================================
--- fsf/trunk/libc/locale/programs/ld-collate.c (original)
+++ fsf/trunk/libc/locale/programs/ld-collate.c Sun Aug 26 00:03:31 2007
@@ -2518,7 +2518,9 @@
uint32_t namelen = strlen (runp->name);
uint32_t hash = elem_hash (runp->name, namelen);
size_t idx = hash % elem_size;
+#ifndef NDEBUG
size_t start_idx = idx;
+#endif
if (elem_table[idx * 2] != 0)
{
Modified: fsf/trunk/libc/nis/nis_xdr.c
==============================================================================
--- fsf/trunk/libc/nis/nis_xdr.c (original)
+++ fsf/trunk/libc/nis/nis_xdr.c Sun Aug 26 00:03:31 2007
@@ -1,4 +1,4 @@
-/* Copyright (c) 1997, 1998, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (c) 1997, 1998, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@xxxxxxxxxxxxxxxxxxx>, 1997.
@@ -87,7 +87,7 @@
bool_t res = xdr_nis_name (xdrs, &objp->name);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->ep.ep_val, &objp->ep.ep_len,
+ res = xdr_array (xdrs, (void *) &objp->ep.ep_val, &objp->ep.ep_len,
~0, sizeof (endpoint), (xdrproc_t) xdr_endpoint);
if (__builtin_expect (res, TRUE))
{
@@ -108,7 +108,7 @@
res = xdr_nstype (xdrs, &objp->do_type);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->do_servers.do_servers_val,
+ res = xdr_array (xdrs, (void *) &objp->do_servers.do_servers_val,
&objp->do_servers.do_servers_len, ~0,
sizeof (nis_server), (xdrproc_t) _xdr_nis_server);
if (__builtin_expect (res, TRUE))
@@ -116,7 +116,7 @@
res = xdr_uint32_t (xdrs, &objp->do_ttl);
if (__builtin_expect (res, TRUE))
res = xdr_array (xdrs,
- (char **) &objp->do_armask.do_armask_val,
+ (void *) &objp->do_armask.do_armask_val,
&objp->do_armask.do_armask_len, ~0,
sizeof (oar_mask), (xdrproc_t) xdr_oar_mask);
}
@@ -140,7 +140,7 @@
{
bool_t res = xdr_string (xdrs, &objp->en_type, ~0);
if (__builtin_expect (res, TRUE))
- res = xdr_array (xdrs, (char **) &objp->en_cols.en_cols_val,
+ res = xdr_array (xdrs, (void *) &objp->en_cols.en_cols_val,
&objp->en_cols.en_cols_len, ~0,
sizeof (entry_col), (xdrproc_t) xdr_entry_col);
return res;
@@ -151,7 +151,7 @@
{
bool_t res = xdr_u_int (xdrs, &objp->gr_flags);
if (__builtin_expect (res, TRUE))
- res = xdr_array (xdrs, (char **) &objp->gr_members.gr_members_val,
+ res = xdr_array (xdrs, (void *) &objp->gr_members.gr_members_val,
&objp->gr_members.gr_members_len, ~0,
sizeof (nis_name), (xdrproc_t) _xdr_nis_name);
return res;
@@ -163,7 +163,7 @@
bool_t res = xdr_zotypes (xdrs, &objp->li_rtype);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->li_attrs.li_attrs_val,
+ res = xdr_array (xdrs, (void *) &objp->li_attrs.li_attrs_val,
&objp->li_attrs.li_attrs_len, ~0,
sizeof (nis_attr), (xdrproc_t) xdr_nis_attr);
if (__builtin_expect (res, TRUE))
@@ -197,7 +197,7 @@
res = xdr_u_char (xdrs, &objp->ta_sep);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->ta_cols.ta_cols_val,
+ res = xdr_array (xdrs, (void *) &objp->ta_cols.ta_cols_val,
&objp->ta_cols.ta_cols_len, ~0,
sizeof (table_col), (xdrproc_t) xdr_table_col);
if (__builtin_expect (res, TRUE))
@@ -296,7 +296,7 @@
bool_t res = xdr_nis_error (xdrs, &objp->status);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->objects.objects_val,
+ res = xdr_array (xdrs, (void *) &objp->objects.objects_val,
&objp->objects.objects_len, ~0,
sizeof (nis_object), (xdrproc_t) _xdr_nis_object);
if (__builtin_expect (res, TRUE))
@@ -327,7 +327,7 @@
{
bool_t res = xdr_nis_name (xdrs, &objp->ns_name);
if (__builtin_expect (res, TRUE))
- res = xdr_array (xdrs, (char **) &objp->ns_object.ns_object_val,
+ res = xdr_array (xdrs, (void *) &objp->ns_object.ns_object_val,
&objp->ns_object.ns_object_len, 1,
sizeof (nis_object), (xdrproc_t) _xdr_nis_object);
return res;
@@ -339,7 +339,7 @@
bool_t res = xdr_nis_name (xdrs, &objp->ibr_name);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->ibr_srch.ibr_srch_val,
+ res = xdr_array (xdrs, (void *) &objp->ibr_srch.ibr_srch_val,
&objp->ibr_srch.ibr_srch_len, ~0,
sizeof (nis_attr), (xdrproc_t) xdr_nis_attr);
if (__builtin_expect (res, TRUE))
@@ -347,14 +347,14 @@
res = xdr_u_int (xdrs, &objp->ibr_flags);
if (__builtin_expect (res, TRUE))
{
- res = xdr_array (xdrs, (char **) &objp->ibr_obj.ibr_obj_val,
+ res = xdr_array (xdrs, (void *) &objp->ibr_obj.ibr_obj_val,
&objp->ibr_obj.ibr_obj_len, 1,
sizeof (nis_object),
(xdrproc_t) _xdr_nis_object);
if (__builtin_expect (res, TRUE))
{
res = xdr_array (xdrs,
- (char **) &objp->ibr_cbhost.ibr_cbhost_val,
+ (void *) &objp->ibr_cbhost.ibr_cbhost_val,
&objp->ibr_cbhost.ibr_cbhost_len, 1,
sizeof (nis_server),
(xdrproc_t) _xdr_nis_server);
@@ -406,7 +406,7 @@
bool_t
_xdr_nis_taglist (XDR *xdrs, nis_taglist *objp)
{
- return xdr_array (xdrs, (char **) &objp->tags.tags_val,
+ return xdr_array (xdrs, (void *) &objp->tags.tags_val,
&objp->tags.tags_len, ~0, sizeof (nis_tag),
(xdrproc_t) _xdr_nis_tag);
}
@@ -452,7 +452,7 @@
bool_t
xdr_cback_data (XDR *xdrs, cback_data *objp)
{
- return xdr_array (xdrs, (char **)&objp->entries.entries_val,
+ return xdr_array (xdrs, (void *) &objp->entries.entries_val,
&objp->entries.entries_len, ~0,
sizeof (obj_p), (xdrproc_t) xdr_obj_p);
}
Modified: fsf/trunk/libc/nis/yp_xdr.c
==============================================================================
--- fsf/trunk/libc/nis/yp_xdr.c (original)
+++ fsf/trunk/libc/nis/yp_xdr.c Sun Aug 26 00:03:31 2007
@@ -195,8 +195,9 @@
{
if (!xdr_mapname (xdrs, &objp->map))
return FALSE;
- return xdr_pointer (xdrs, (char **) &objp->next, sizeof (ypmaplist),
- (xdrproc_t) xdr_ypmaplist);
+ /* Prevent gcc warning about alias violation. */
+ char **tp = (void *) &objp->next;
+ return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist);
}
libnsl_hidden_def (xdr_ypmaplist)
@@ -205,8 +206,9 @@
{
if (!xdr_ypstat (xdrs, &objp->stat))
return FALSE;
- return xdr_pointer (xdrs, (char **) &objp->maps, sizeof (ypmaplist),
- (xdrproc_t) xdr_ypmaplist);
+ /* Prevent gcc warning about alias violation. */
+ char **tp = (void *) &objp->maps;
+ return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist);
}
libnsl_hidden_def (xdr_ypresp_maplist)
Modified: fsf/trunk/libc/posix/regex_internal.h
==============================================================================
--- fsf/trunk/libc/posix/regex_internal.h (original)
+++ fsf/trunk/libc/posix/regex_internal.h Sun Aug 26 00:03:31 2007
@@ -1,5 +1,5 @@
/* Extended regular expression matching and search library.
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Isamu Hasegawa <isamu@xxxxxxxxxxxxxx>.
@@ -385,18 +385,20 @@
# endif
#endif
+#ifndef NOT_IN_libc
static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
int new_buf_len)
internal_function;
-#ifdef RE_ENABLE_I18N
+# ifdef RE_ENABLE_I18N
static void build_wcs_buffer (re_string_t *pstr) internal_function;
static int build_wcs_upper_buffer (re_string_t *pstr) internal_function;
-#endif /* RE_ENABLE_I18N */
+# endif /* RE_ENABLE_I18N */
static void build_upper_buffer (re_string_t *pstr) internal_function;
static void re_string_translate_buffer (re_string_t *pstr) internal_function;
static unsigned int re_string_context_at (const re_string_t *input, int idx,
int eflags)
internal_function __attribute ((pure));
+#endif
#define re_string_peek_byte(pstr, offset) \
((pstr)->mbs[(pstr)->cur_idx + offset])
#define re_string_fetch_byte(pstr) \
@@ -732,15 +734,16 @@
return (wint_t) pstr->wcs[idx];
}
+# ifndef NOT_IN_libc
static int
internal_function __attribute ((pure))
re_string_elem_size_at (const re_string_t *pstr, int idx)
{
-# ifdef _LIBC
+# ifdef _LIBC
const unsigned char *p, *extra;
const int32_t *table, *indirect;
int32_t tmp;
-# include <locale/weight.h>
+# include <locale/weight.h>
uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
if (nrules != 0)
@@ -755,9 +758,10 @@
return p - pstr->mbs - idx;
}
else
-# endif /* _LIBC */
+# endif /* _LIBC */
return 1;
}
+# endif
#endif /* RE_ENABLE_I18N */
#endif /* _REGEX_INTERNAL_H */
Modified: fsf/trunk/libc/posix/tst-rfc3484-2.c
==============================================================================
--- fsf/trunk/libc/posix/tst-rfc3484-2.c (original)
+++ fsf/trunk/libc/posix/tst-rfc3484-2.c Sun Aug 26 00:03:31 2007
@@ -26,6 +26,7 @@
int
__idna_to_unicode_lzlz (const char *input, char **output, int flags)
{
+ *output = NULL;
return 0;
}
Modified: fsf/trunk/libc/posix/tst-rfc3484.c
==============================================================================
--- fsf/trunk/libc/posix/tst-rfc3484.c (original)
+++ fsf/trunk/libc/posix/tst-rfc3484.c Sun Aug 26 00:03:31 2007
@@ -26,6 +26,7 @@
int
__idna_to_unicode_lzlz (const char *input, char **output, int flags)
{
+ *output = NULL;
return 0;
}
Modified: fsf/trunk/libc/stdio-common/Makefile
==============================================================================
--- fsf/trunk/libc/stdio-common/Makefile (original)
+++ fsf/trunk/libc/stdio-common/Makefile Sun Aug 26 00:03:31 2007
@@ -94,6 +94,8 @@
CFLAGS-errlist.c = $(fno-unit-at-a-time)
CFLAGS-siglist.c = $(fno-unit-at-a-time)
+# We know the test has a format string problem.
+CFLAGS-tst-sprintf.c = -Wno-format
tst-sscanf-ENV = LOCPATH=$(common-objpfx)localedata
tst-swprintf-ENV = LOCPATH=$(common-objpfx)localedata
test-vfprintf-ENV = LOCPATH=$(common-objpfx)localedata
Modified: fsf/trunk/libc/sunrpc/key_prot.c
==============================================================================
--- fsf/trunk/libc/sunrpc/key_prot.c (original)
+++ fsf/trunk/libc/sunrpc/key_prot.c Sun Aug 26 00:03:31 2007
@@ -115,7 +115,7 @@
return FALSE;
if (!INTUSE(xdr_u_int) (xdrs, &objp->gid))
return FALSE;
- if (!INTUSE(xdr_array) (xdrs, (char **) &objp->gids.gids_val,
+ if (!INTUSE(xdr_array) (xdrs, (void *) &objp->gids.gids_val,
(u_int *) & objp->gids.gids_len, MAXGIDS,
sizeof (u_int), (xdrproc_t) INTUSE(xdr_u_int)))
return FALSE;
Modified: fsf/trunk/libc/sysdeps/x86_64/cacheinfo.c
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/cacheinfo.c (original)
+++ fsf/trunk/libc/sysdeps/x86_64/cacheinfo.c Sun Aug 26 00:03:31 2007
@@ -259,7 +259,8 @@
: "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
: "0" (0x80000000));
- if (name >= _SC_LEVEL3_CACHE_SIZE)
+ /* No level 4 cache (yet). */
+ if (name > _SC_LEVEL3_CACHE_LINESIZE)
return 0;
unsigned int fn = 0x80000005 + (name >= _SC_LEVEL2_CACHE_SIZE);
@@ -280,36 +281,87 @@
{
case _SC_LEVEL1_DCACHE_SIZE:
return (ecx >> 14) & 0x3fc00;
+
case _SC_LEVEL1_DCACHE_ASSOC:
ecx >>= 16;
if ((ecx & 0xff) == 0xff)
/* Fully associative. */
return (ecx << 2) & 0x3fc00;
return ecx & 0xff;
+
case _SC_LEVEL1_DCACHE_LINESIZE:
return ecx & 0xff;
+
case _SC_LEVEL2_CACHE_SIZE:
return (ecx & 0xf000) == 0 ? 0 : (ecx >> 6) & 0x3fffc00;
+
case _SC_LEVEL2_CACHE_ASSOC:
- ecx >>= 12;
- switch (ecx & 0xf)
+ switch ((ecx >> 12) & 0xf)
{
case 0:
case 1:
case 2:
case 4:
- return ecx & 0xf;
+ return (ecx >> 12) & 0xf;
case 6:
return 8;
case 8:
return 16;
- case 0xf:
- return (ecx << 6) & 0x3fffc00;
+ case 10:
+ return 32;
+ case 11:
+ return 48;
+ case 12:
+ return 64;
+ case 13:
+ return 96;
+ case 14:
+ return 128;
+ case 15:
+ return ((ecx >> 6) & 0x3fffc00) / (ecx & 0xff);
default:
return 0;
}
+ /* NOTREACHED */
+
case _SC_LEVEL2_CACHE_LINESIZE:
return (ecx & 0xf000) == 0 ? 0 : ecx & 0xff;
+
+ case _SC_LEVEL3_CACHE_SIZE:
+ return (edx & 0xf000) == 0 ? 0 : (edx & 0x3ffc0000) << 1;
+
+ case _SC_LEVEL3_CACHE_ASSOC:
+ switch ((edx >> 12) & 0xf)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 4:
+ return (edx >> 12) & 0xf;
+ case 6:
+ return 8;
+ case 8:
+ return 16;
+ case 10:
+ return 32;
+ case 11:
+ return 48;
+ case 12:
+ return 64;
+ case 13:
+ return 96;
+ case 14:
+ return 128;
+ case 15:
+ return ((edx & 0x3ffc0000) << 1) / (edx & 0xff);
+ default:
+ return 0;
+ }
+ /* NOTREACHED */
+
+ case _SC_LEVEL3_CACHE_LINESIZE:
+ return (edx & 0xf000) == 0 ? 0 : edx & 0xff;
+
default:
assert (! "cannot happen");
}