Re: [Patch, libfortran] PR 48931 Async-signal-safety of backtrace signal handler
On Sat, May 14, 2011 at 22:40, Janne Blomqvist blomqvist.ja...@gmail.com wrote: Hi the current version of showing the backtrace is not async-signal-safe as it uses backtrace_symbols() which, in turn, uses malloc(). The attached patch changes the backtrace printing functionality to instead use backtrace_symbols_fd() and pipes. Also, it does some other work on backtrace printing: - Nowadays the main program has the same debug symbol name as whatever the name of the main program is, rather than MAIN__. Therefore remove special case logic related to that. FWIW, I noticed that if debug symbols are not included, the MAIN__ is printed. So should I add back the special casing of MAIN__? - Don't filter out stack frames from inside libgfortran, as this might lose information in case the reason for the crash is in the library. - Reformat the output slightly, so the each stack frame fits on one line, and begins with #NUM, similar to GDB. I reformatted it some more, now it includes the file name, so the output is like Backtrace for this error: #0 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0x18357)[0x7fd385e51357] #1 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0x19de7)[0x7fd385e52de7] #2 /home/janne/src/gfortran/trunk/install/lib64/libgfortran.so.3(+0xe1f69)[0x7fd385f1af69] #3 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400612] in b_ at bt.f90:5 #4 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400620] in b_ at bt.f90:7 #5 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400630] in a_ at bt.f90:11 #6 /home/janne/src/gfortran/my-patches/pr48931-backtrace-abort/a.out[0x400640] in bt at bt.f90:15 Aborted Similar to GDB, the address is now printed before function and file:line number info. And similar to backtrace_symbols_fd() output (3 first stack frames above), the file name is printed before the address. I also improved the logic for figuring out the executable path, as the old way doesn't work if the executable is not in the current working directory. The improved logic is, I believe, Linux-specific, but since the only user of full_exe_path() is the glibc-specific backtracing stuff I don't think that is a big loss. Regtested on x86_64-unknown-linux-gnu, Ok for trunk? 2011-05-15 Janne Blomqvist j...@gcc.gnu.org PR libfortran/48931 * configure.ac: Check for backtrace_symbols_fd instead of backtrace_symbols, check for readlink. * config.h.in: Regenerated. * configure: Regenerated. * runtime/backtrace.c (local_strcasestr): Remove. (bt_header): New function. (dump_glibc_backtrace): Remove. (show_backtrace): Rework to use backtrace_symbols_fd and pipes, reformat output. * runtime/main.c (store_exe_path): Try to check /proc/self/exe first. (full_exe_path): If the path is NULL, try to figure it out before returning. -- Janne Blomqvist diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index cf38fb0..74cfe44 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -264,10 +264,10 @@ AC_CHECK_FUNCS(sleep time ttyname signal alarm clock access fork execl) AC_CHECK_FUNCS(wait setmode execvp pipe dup2 close fdopen strcasestr getrlimit) AC_CHECK_FUNCS(gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd) AC_CHECK_FUNCS(localtime_r gmtime_r strerror_r getpwuid_r ttyname_r) -AC_CHECK_FUNCS(clock_gettime strftime) +AC_CHECK_FUNCS(clock_gettime strftime readlink) # Check for glibc backtrace functions -AC_CHECK_FUNCS(backtrace backtrace_symbols) +AC_CHECK_FUNCS(backtrace backtrace_symbols_fd) # Check libc for getgid, getpid, getuid AC_CHECK_LIB([c],[getgid],[AC_DEFINE([HAVE_GETGID],[1],[libc includes getgid])]) diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c index 10917d3..c591b01 100644 --- a/libgfortran/runtime/backtrace.c +++ b/libgfortran/runtime/backtrace.c @@ -54,57 +54,20 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define CAN_FORK (defined(HAVE_FORK) defined(HAVE_EXECVP) \ defined(HAVE_WAIT)) #define GLIBC_BACKTRACE (defined(HAVE_BACKTRACE) \ - defined(HAVE_BACKTRACE_SYMBOLS)) + defined(HAVE_BACKTRACE_SYMBOLS_FD)) #define CAN_PIPE (CAN_FORK defined(HAVE_PIPE) \ defined(HAVE_DUP2) defined(HAVE_FDOPEN) \ defined(HAVE_CLOSE)) -#if GLIBC_BACKTRACE CAN_PIPE -static char * -local_strcasestr (const char *s1, const char *s2) +/* GDB style #NUM index for each stack frame. */ +static void +bt_header (int num) { -#ifdef HAVE_STRCASESTR - return strcasestr (s1, s2); -#else - - const char *p = s1; - const size_t len = strlen (s2); - const char u = *s2, v = isupper((int) *s2) ? tolower((int) *s2) - : (islower((int) *s2) ? toupper((int) *s2) - : *s2); - - while (1) -{ - while (*p != u *p != v *p) - p++; -
[patch] fix c++/48994
cp/ChangeLog PR c++/48994 * parser.c (cp_parser_perform_range_for_lookup): Call complete_type. testsuite/ChangeLog PR c++/48994 * g++.dg/cpp0x/range-for18.C: New. Tested x86_64-linux, ok for trunk? Index: cp/parser.c === --- cp/parser.c (revision 173683) +++ cp/parser.c (working copy) @@ -8682,7 +8682,7 @@ static tree cp_parser_perform_range_for_lookup (tree range, tree *begin, tree *end) { - if (!COMPLETE_TYPE_P (TREE_TYPE (range))) + if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (range { error (range-based %for% expression of type %qT has incomplete type, TREE_TYPE (range)); Index: testsuite/g++.dg/cpp0x/range-for18.C === --- testsuite/g++.dg/cpp0x/range-for18.C(revision 0) +++ testsuite/g++.dg/cpp0x/range-for18.C(revision 0) @@ -0,0 +1,17 @@ +// PR c++/48994 + +// { dg-do compile } +// { dg-options -std=c++0x } + +template typename T +struct myvec +{ +T* begin() const; +T* end() const; +}; + +void f(const myvecint v) +{ +for (int i : v) +; +}
Re: [Patch, libfortran, committed] PR 48915 Update mixed-language programming section documentation
The previous patch was slightly over-zealous. Committed the following fix: Index: gfortran.texi === --- gfortran.texi (revision 173769) +++ gfortran.texi (working copy) @@ -2611,7 +2611,7 @@ standard error. Default: @code{GFC_STD_ Default: off. @item @var{option}[3] @tab Unused. @item @var{option}[4] @tab If non zero, enable backtracing on run-time -errors. Default: enabled. +errors. Default: off. Note: Installs a signal handler and requires command-line initialization using @code{_gfortran_set_args}. @item @var{option}[5] @tab If non zero, supports signed zeros. Index: ChangeLog === --- ChangeLog (revision 173769) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2011-05-15 Janne Blomqvist j...@gcc.gnu.org + + PR libfortran/48915 + * gfortran.texi (_gfortran_set_options): Even though -fbacktrace + is now the default, the library defaults to backtracing disabled. + 2011-05-14 Tobias Burnus bur...@net-b.de * lang.opt (fdump-core): Re-add as ignored option On Sat, May 14, 2011 at 13:24, Janne Blomqvist blomqvist.ja...@gmail.com wrote: Hi, I committed the attached patch as obvious. It updates the manual section on mixed-language programming to reflect the changes made as part of PR 48915. Index: gfortran.texi === --- gfortran.texi (revision 173750) +++ gfortran.texi (working copy) @@ -2578,7 +2578,7 @@ int main (int argc, char *argv[]) @table @asis @item @emph{Description}: @code{_gfortran_set_options} sets several flags related to the Fortran -standard to be used, whether backtracing or core dumps should be enabled +standard to be used, whether backtracing should be enabled and whether range checks should be performed. The syntax allows for upward compatibility since the number of passed flags is specified; for non-passed flags, the default value is used. See also @@ -2609,10 +2609,9 @@ Possible values are (bitwise or-ed) @cod standard error. Default: @code{GFC_STD_F95_DEL | GFC_STD_LEGACY}. @item @var{option}[2] @tab If non zero, enable pedantic checking. Default: off. -@item @var{option}[3] @tab If non zero, enable core dumps on run-time -errors. Default: off. +@item @var{option}[3] @tab Unused. @item @var{option}[4] @tab If non zero, enable backtracing on run-time -errors. Default: off. +errors. Default: enabled. Note: Installs a signal handler and requires command-line initialization using @code{_gfortran_set_args}. @item @var{option}[5] @tab If non zero, supports signed zeros. @@ -2627,8 +2626,8 @@ Default: enabled. See -frange-check (@p @item @emph{Example}: @smallexample - /* Use gfortran 4.5 default options. */ - static int options[] = @{68, 255, 0, 0, 0, 1, 0, 1@}; + /* Use gfortran 4.7 default options. */ + static int options[] = @{68, 255, 0, 0, 1, 1, 0, 1@}; _gfortran_set_options (8, options); @end smallexample @end table Index: ChangeLog === --- ChangeLog (revision 173750) +++ ChangeLog (working copy) @@ -1,5 +1,12 @@ 2011-05-14 Janne Blomqvist j...@gcc.gnu.org + PR libfortran/48915 + * gfortran.texi: Update mixed-language programming section + reflecting the removal of the fdump-core option, and that + -fbacktrace is enabled by default. + +2011-05-14 Janne Blomqvist j...@gcc.gnu.org + PR libfortran/48915 * gfortran.h (gfc_option_t): Remove flag_dump_core. * gfortran.texi (GFORTRAN_ERROR_DUMPCORE): Remove section. -- Janne Blomqvist -- Janne Blomqvist
Re: [google] support for building Linux kernel with FDO (issue4523061)
On Fri, May 13, 2011 at 5:54 AM, Paolo Bonzini bonz...@gnu.org wrote: On 05/13/2011 03:03 AM, Rong Xu wrote: * gcc/coverage.c (revision 173717): set a flag if building for Linux kernel. * gcc/tree-profile.c (revision 173717): don't emit TLS declarations for Linux kernel builds. I think this should be done without touching at all the profiling machinery in GCC. 1) add a new TLS model -ftls-model=none and make the kernel uses it. The model would simply force targetm.have_tls to false. This is a good idea. 2) as Richi mentioned, gcov-io and libgcov changes then can move to the kernel, and GCC needs no change at all here. In fact -- reuse gcc code profiling machinery for FDO is the KEY objective in this effort --- the effort tries to minimize gcc changes by refactoring gcc code and isolating/abstracting away part of gcc implementation that is user space program specific without using runtime hooks. Aside from the kernel FDO change -- the refactoring itself actually makes the libgcov code more readable -- the existing implementation has many huge functions etc. Kernel source has their implementation of coverage testing -- but it makes lots of data structure assumptions and hard coded -- it can easily out of sync with gcc and is considered unmaintainable. Yep, I think it does make sense to share the implementation, but we need to find resonable way to do so. I guess we could separate out the i/o bits into interface generic enough to cover the needs, move libgcov into its own directory (just like libgcc is these days) and add an configury option that sets the interface. The kernel's interface can then be implemented in a single file instead of tons of ifdefs and I guess can sit either in kernel or gcc tree... Honza Rong will have more explanation on the design. Thanks, David BTW, these parts of LIPO: + if (!is_kernel_build) + DECL_TLS_MODEL (dc_gcov_type_ptr_var) = + decl_default_tls_model (dc_gcov_type_ptr_var); dc_void_ptr_var = build_decl (UNKNOWN_LOCATION, VAR_DECL, @@ -1488,8 +1493,9 @@ ptr_void); DECL_ARTIFICIAL (dc_void_ptr_var) = 1; DECL_EXTERNAL (dc_void_ptr_var) = 1; - DECL_TLS_MODEL (dc_void_ptr_var) = - decl_default_tls_model (dc_void_ptr_var); + if (!is_kernel_build) + DECL_TLS_MODEL (dc_void_ptr_var) = + decl_default_tls_model (dc_void_ptr_var); Probably are missing a !targetm.have_tls. Paolo
Re: [Patch, libfortran] PR 48931 Async-signal-safety of backtrace signal handler
Hi, so, here is take 3 (sigh). Compared to take 2, it no longer uses stdio, since opening a stdio FILE stream probably malloc()'s a buffer, which is not async-signal-safe. Regtested on x86_64-unknown-linux-gnu, Ok for trunk? 2011-05-15 Janne Blomqvist j...@gcc.gnu.org PR libfortran/48931 * configure.ac: Check for backtrace_symbols_fd instead of backtrace_symbols, check for readlink. * config.h.in: Regenerated. * configure: Regenerated. * runtime/backtrace.c (local_strcasestr): Remove. (bt_header): New function. (dump_glibc_backtrace): Remove. (fd_gets): New function. (show_backtrace): Rework to use backtrace_symbols_fd and pipes, reformat output. * runtime/main.c (store_exe_path): Try to check /proc/self/exe first. -- Janne Blomqvist diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac index cf38fb0..74cfe44 100644 --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -264,10 +264,10 @@ AC_CHECK_FUNCS(sleep time ttyname signal alarm clock access fork execl) AC_CHECK_FUNCS(wait setmode execvp pipe dup2 close fdopen strcasestr getrlimit) AC_CHECK_FUNCS(gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd) AC_CHECK_FUNCS(localtime_r gmtime_r strerror_r getpwuid_r ttyname_r) -AC_CHECK_FUNCS(clock_gettime strftime) +AC_CHECK_FUNCS(clock_gettime strftime readlink) # Check for glibc backtrace functions -AC_CHECK_FUNCS(backtrace backtrace_symbols) +AC_CHECK_FUNCS(backtrace backtrace_symbols_fd) # Check libc for getgid, getpid, getuid AC_CHECK_LIB([c],[getgid],[AC_DEFINE([HAVE_GETGID],[1],[libc includes getgid])]) diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c index 10917d3..04246a9 100644 --- a/libgfortran/runtime/backtrace.c +++ b/libgfortran/runtime/backtrace.c @@ -54,59 +54,57 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #define CAN_FORK (defined(HAVE_FORK) defined(HAVE_EXECVP) \ defined(HAVE_WAIT)) #define GLIBC_BACKTRACE (defined(HAVE_BACKTRACE) \ - defined(HAVE_BACKTRACE_SYMBOLS)) + defined(HAVE_BACKTRACE_SYMBOLS_FD)) #define CAN_PIPE (CAN_FORK defined(HAVE_PIPE) \ defined(HAVE_DUP2) defined(HAVE_FDOPEN) \ defined(HAVE_CLOSE)) -#if GLIBC_BACKTRACE CAN_PIPE -static char * -local_strcasestr (const char *s1, const char *s2) -{ -#ifdef HAVE_STRCASESTR - return strcasestr (s1, s2); -#else +/* GDB style #NUM index for each stack frame. */ - const char *p = s1; - const size_t len = strlen (s2); - const char u = *s2, v = isupper((int) *s2) ? tolower((int) *s2) - : (islower((int) *s2) ? toupper((int) *s2) - : *s2); - - while (1) -{ - while (*p != u *p != v *p) - p++; - if (*p == 0) - return NULL; - if (strncasecmp (p, s2, len) == 0) - return (char *)p; -} -#endif +static void +bt_header (int num) +{ + st_printf ( #%d , num); } -#endif -#if GLIBC_BACKTRACE -static void -dump_glibc_backtrace (int depth, char *str[]) -{ - int i; +/* fgets()-like function that reads a line from a fd, without + needing to malloc() a buffer, and does not use locks, hence should + be async-signal-safe. */ - for (i = 0; i depth; i++) +static char * +fd_gets (char *s, int size, int fd) +{ + for (int i = 0; i size; i++) { - estr_write ( + ); - estr_write (str[i]); - estr_write (\n); + char c; + ssize_t nread = read (fd, c, 1); + if (nread == 1) + { + s[i] = c; + if (c == '\n') + { + if (i + 1 size) + s[i+1] = '\0'; + else + s[i] = '\0'; + break; + } + } + else + { + s[i] = '\0'; + break; + } } - - free (str); + return s; } -#endif + /* show_backtrace displays the backtrace, currently obtained by means of the glibc backtrace* functions. */ + void show_backtrace (void) { @@ -116,176 +114,184 @@ show_backtrace (void) #define BUFSIZE 1024 void *trace[DEPTH]; - char **str; int depth; depth = backtrace (trace, DEPTH); if (depth = 0) return; - str = backtrace_symbols (trace, depth); - #if CAN_PIPE -#ifndef STDIN_FILENO -#define STDIN_FILENO 0 -#endif - -#ifndef STDOUT_FILENO -#define STDOUT_FILENO 1 -#endif - -#ifndef STDERR_FILENO -#define STDERR_FILENO 2 -#endif - /* We attempt to extract file and line information from addr2line. */ do { /* Local variables. */ -int f[2], pid, line, i; -FILE *output; -char addr_buf[DEPTH][GFC_XTOA_BUF_SIZE], func[BUFSIZE], file[BUFSIZE]; +int f[2], pid, line, bt[2], inp[2]; +char addr_buf[GFC_XTOA_BUF_SIZE], func[BUFSIZE], file[BUFSIZE]; char *p, *end; -const char *addr[DEPTH]; -/* Write the list of addresses in hexadecimal format. */ -for (i = 0; i depth; i++) - addr[i] = gfc_xtoa ((GFC_UINTEGER_LARGEST) (intptr_t) trace[i], addr_buf[i], - sizeof (addr_buf[i])); +char *exe_path = full_exe_path (); +if
[PING] 2 ARM patches
Hi http://gcc.gnu.org/ml/gcc-patches/2011-03/msg01973.html Use ldrd and strd to access two consecutive words http://gcc.gnu.org/ml/gcc-patches/2011-05/msg00490.html Compute attr length for thumb2 insns thanks Carrot
[C++ Patch] Restore the alphabetical for the type traits RIDs
Hi, just consistently handle the various type traits RIDs in alphabetical order (+ update the comments to mention the most recent ones). Tested x86_64-linux. Ok for mainline? Paolo. /c-family 2011-05-15 Paolo Carlini paolo.carl...@oracle.com * c-common.c (c_common_reswords): Reorder. * c-common.h (rid): Likewise. /cp 2011-05-15 Paolo Carlini paolo.carl...@oracle.com * cxx-pretty-print.c: Update comment. * semantics.c (trait_expr_value, finish_trait_expr): Reorder the cases. * parser.c (cp_parser_primary_expression): Likewise. Index: c-family/c-common.c === --- c-family/c-common.c (revision 173769) +++ c-family/c-common.c (working copy) @@ -437,6 +437,10 @@ const struct c_common_resword c_common_reswords[] { __has_trivial_copy, RID_HAS_TRIVIAL_COPY, D_CXXONLY }, { __has_trivial_destructor, RID_HAS_TRIVIAL_DESTRUCTOR, D_CXXONLY }, { __has_virtual_destructor, RID_HAS_VIRTUAL_DESTRUCTOR, D_CXXONLY }, + { __imag, RID_IMAGPART, 0 }, + { __imag__,RID_IMAGPART, 0 }, + { __inline,RID_INLINE, 0 }, + { __inline__, RID_INLINE, 0 }, { __int128,RID_INT128, 0 }, { __is_abstract, RID_IS_ABSTRACT, D_CXXONLY }, { __is_base_of,RID_IS_BASE_OF, D_CXXONLY }, @@ -444,17 +448,12 @@ const struct c_common_resword c_common_reswords[] { __is_convertible_to, RID_IS_CONVERTIBLE_TO, D_CXXONLY }, { __is_empty, RID_IS_EMPTY, D_CXXONLY }, { __is_enum, RID_IS_ENUM,D_CXXONLY }, + { __is_literal_type, RID_IS_LITERAL_TYPE, D_CXXONLY }, { __is_pod,RID_IS_POD, D_CXXONLY }, { __is_polymorphic,RID_IS_POLYMORPHIC, D_CXXONLY }, { __is_standard_layout, RID_IS_STD_LAYOUT, D_CXXONLY }, { __is_trivial, RID_IS_TRIVIAL, D_CXXONLY }, { __is_union, RID_IS_UNION, D_CXXONLY }, - { __is_literal_type, RID_IS_LITERAL_TYPE, D_CXXONLY }, - { __underlying_type, RID_UNDERLYING_TYPE, D_CXXONLY }, - { __imag, RID_IMAGPART, 0 }, - { __imag__,RID_IMAGPART, 0 }, - { __inline,RID_INLINE, 0 }, - { __inline__, RID_INLINE, 0 }, { __label__, RID_LABEL, 0 }, { __null, RID_NULL, 0 }, { __real, RID_REALPART, 0 }, @@ -466,6 +465,7 @@ const struct c_common_resword c_common_reswords[] { __thread,RID_THREAD, 0 }, { __typeof,RID_TYPEOF, 0 }, { __typeof__, RID_TYPEOF, 0 }, + { __underlying_type, RID_UNDERLYING_TYPE, D_CXXONLY }, { __volatile, RID_VOLATILE, 0 }, { __volatile__,RID_VOLATILE, 0 }, { alignof, RID_ALIGNOF,D_CXXONLY | D_CXX0X | D_CXXWARN }, Index: c-family/c-common.h === --- c-family/c-common.h (revision 173769) +++ c-family/c-common.h (working copy) @@ -135,9 +135,9 @@ enum rid RID_IS_ABSTRACT, RID_IS_BASE_OF, RID_IS_CONVERTIBLE_TO, RID_IS_CLASS, RID_IS_EMPTY,RID_IS_ENUM, - RID_IS_POD, RID_IS_POLYMORPHIC, - RID_IS_STD_LAYOUT, RID_IS_TRIVIAL, - RID_IS_UNION,RID_IS_LITERAL_TYPE, + RID_IS_LITERAL_TYPE, RID_IS_POD, + RID_IS_POLYMORPHIC, RID_IS_STD_LAYOUT, + RID_IS_TRIVIAL, RID_IS_UNION, RID_UNDERLYING_TYPE, /* C++0x */ Index: cp/cxx-pretty-print.c === --- cp/cxx-pretty-print.c (revision 173769) +++ cp/cxx-pretty-print.c (working copy) @@ -394,8 +394,11 @@ pp_cxx_id_expression (cxx_pretty_printer *pp, tree __is_convertible_to ( type-id , type-id ) __is_empty ( type-id ) __is_enum ( type-id ) + __is_literal_type ( type-id ) __is_pod ( type-id ) __is_polymorphic ( type-id ) + __is_std_layout ( type-id ) + __is_trivial ( type-id ) __is_union ( type-id ) */ static void Index: cp/semantics.c === --- cp/semantics.c (revision 173769) +++ cp/semantics.c (working copy) @@ -5165,6 +5165,9 @@ trait_expr_value (cp_trait_kind kind, tree type1, case CPTK_IS_ENUM: return (type_code1 == ENUMERAL_TYPE); +case CPTK_IS_LITERAL_TYPE: + return (literal_type_p (type1)); + case CPTK_IS_POD: return (pod_type_p (type1)); @@ -5180,9 +5183,6 @@ trait_expr_value (cp_trait_kind kind, tree type1, case CPTK_IS_UNION: return (type_code1 == UNION_TYPE); -case CPTK_IS_LITERAL_TYPE: - return (literal_type_p (type1)); - default: gcc_unreachable (); return false; @@ -5227,11 +5227,11 @@ finish_trait_expr (cp_trait_kind kind, tree type1, || kind == CPTK_IS_CONVERTIBLE_TO || kind ==
[PATCH] Fix error: 'previous' may be used uninitialized in this function
2011-05-15 Dmitry Gorbachev d.g.gorbac...@gmail.com * gengtype-state.c (read_state_param_structs): Initialize previous. --- gcc/gengtype-state.c +++ gcc/gengtype-state.c @@ -2137,7 +2137,7 @@ read_state_param_structs (type_p *param_structs) int nbparamstructs = 0; int countparamstructs = 0; type_p head = NULL; - type_p previous; + type_p previous = NULL; type_p tmp; struct state_token_st *t0 = peek_state_token (0); struct state_token_st *t1 = peek_state_token (1);
Re: Cgraph thunk reorg
On Fri, May 6, 2011 at 4:02 PM, Jan Hubicka hubi...@ucw.cz wrote: Hi, given that the patch has received feedback and I have weekend for fixing the fallout, I decided to commit the following version today. It contains fix in visibility handling of thunks that has shown in Mozilla build. * cgraph.c (cgraph_add_thunk): Create real function node instead of alias node; finalize it and mark needed/reachale; arrange visibility to be right and add it into the corresponding same comdat group list. (dump_cgraph_node): Dump thunks. * cgraph.h (cgraph_first_defined_function, cgraph_next_defined_function, cgraph_function_with_gimple_body_p, cgraph_first_function_with_gimple_body, cgraph_next_function_with_gimple_body): New functions. (FOR_EACH_FUNCTION_WITH_GIMPLE_BODY, FOR_EACH_DEFINED_FUNCTION): New macros. * ipa-cp.c (ipcp_need_redirect_p): Thunks can't be redirected. (ipcp_generate_summary): Use FOR_EACH_FUNCTION_WITH_GIMPLE_BODY. * cgraphunit.c (cgraph_finalize_function): Only look into possible devirtualization when optimizing. (verify_cgraph_node): Verify thunks. (cgraph_analyze_function): Analyze thunks. (cgraph_mark_functions_to_output): Output thunks only in combination with function they are assigned to. (assemble_thunk): Turn thunk into non-thunk; don't try to turn alias into normal node. (assemble_thunks): New functoin. (cgraph_expand_function): Use it. * lto-cgraph.c (lto_output_node): Stream thunks. (input_overwrite_node): Stream in thunks. * ipa-pure-const.c (analyze_function): Thunks do nothing interesting. * lto-streamer-out.c (lto_output): Do not try to output thunk's body. * ipa-inline.c (inline_small_functions): Use FOR_EACH_DEFINED_FUNCTION. * ipa-inline-analysis.c (compute_inline_parameters): Analyze thunks. (inline_analyze_function): Do not care about thunk jump functions. (inline_generate_summary):Use FOR_EACH_DEFINED_FUNCTION. * ipa-prop.c (ipa_prop_write_jump_functions): Use cgraph_function_with_gimple_body_p. * passes.c (do_per_function_toporder): Use cgraph_function_with_gimple_body_p. (execute_one_pass);Use FOR_EACH_FUNCTION_WITH_GIMPLE_BODY. (ipa_write_summaries): Use cgraph_function_with_gimple_body_p. (function_called_by_processed_nodes_p): Likewise. * lto.c (lto_materialize_function): Use cgraph_function_with_gimple_body_p. (add_cgraph_node_to_partition): Do not re-add items to partition; handle thunks. (add_varpool_node_to_partition): Do not re-add items to partition. This caused: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48938 H.J.
[v3] Add _GLIBCXX_NOEXCEPT, use it in limits
Hi, let's noexcept-ify ;) Tested x86_64-linux, committed. Paolo. / 2011-05-15 Paolo Carlini paolo.carl...@oracle.com * include/bits/c++config (_GLIBCXX_NOEXCEPT, _GLIBCXX_USE_NOEXCEPT): Add. * include/std/limits: Use the latter everywhere. (numeric_limitschar16_t, numeric_limitschar32_t): Simplify macro usages, the specializations exist only in C++0x mode. * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error line number. Index: include/std/limits === --- include/std/limits (revision 173773) +++ include/std/limits (working copy) @@ -1,7 +1,7 @@ // The template and inlines for the numeric_limits classes. -*- C++ -*- // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, -// 2008, 2009, 2010 Free Software Foundation, Inc. +// 2008, 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -306,47 +306,47 @@ /** The minimum finite value, or for floating types with denormalization, the minimum positive normalized value. */ static _GLIBCXX_CONSTEXPR _Tp - min() throw() { return static_cast_Tp(0); } + min() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The maximum finite value. */ static _GLIBCXX_CONSTEXPR _Tp - max() throw() { return static_cast_Tp(0); } + max() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } #ifdef __GXX_EXPERIMENTAL_CXX0X__ /** A finite value x such that there is no other finite value y * where y x. */ static constexpr _Tp - lowest() throw() { return static_cast_Tp(0); } + lowest() noexcept { return static_cast_Tp(0); } #endif /** The @e machine @e epsilon: the difference between 1 and the least value greater than 1 that is representable. */ static _GLIBCXX_CONSTEXPR _Tp - epsilon() throw() { return static_cast_Tp(0); } + epsilon() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The maximum rounding error measurement (see LIA-1). */ static _GLIBCXX_CONSTEXPR _Tp - round_error() throw() { return static_cast_Tp(0); } + round_error() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The representation of positive infinity, if @c has_infinity. */ static _GLIBCXX_CONSTEXPR _Tp - infinity() throw() { return static_cast_Tp(0); } + infinity() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The representation of a quiet emNot a Number/em, if @c has_quiet_NaN. */ static _GLIBCXX_CONSTEXPR _Tp - quiet_NaN() throw() { return static_cast_Tp(0); } + quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The representation of a signaling emNot a Number/em, if @c has_signaling_NaN. */ static _GLIBCXX_CONSTEXPR _Tp - signaling_NaN() throw() { return static_cast_Tp(0); } + signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } /** The minimum positive denormalized value. For types where @c has_denorm is false, this is the minimum positive normalized value. */ static _GLIBCXX_CONSTEXPR _Tp - denorm_min() throw() { return static_cast_Tp(0); } + denorm_min() _GLIBCXX_USE_NOEXCEPT { return static_cast_Tp(0); } }; #ifdef __GXX_EXPERIMENTAL_CXX0X__ @@ -373,14 +373,14 @@ static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; static _GLIBCXX_CONSTEXPR bool - min() throw() { return false; } + min() _GLIBCXX_USE_NOEXCEPT { return false; } static _GLIBCXX_CONSTEXPR bool - max() throw() { return true; } + max() _GLIBCXX_USE_NOEXCEPT { return true; } #ifdef __GXX_EXPERIMENTAL_CXX0X__ static constexpr bool - lowest() throw() { return min(); } + lowest() noexcept { return min(); } #endif static _GLIBCXX_USE_CONSTEXPR int digits = 1; static _GLIBCXX_USE_CONSTEXPR int digits10 = 0; @@ -393,10 +393,10 @@ static _GLIBCXX_USE_CONSTEXPR int radix = 2; static _GLIBCXX_CONSTEXPR bool - epsilon() throw() { return false; } + epsilon() _GLIBCXX_USE_NOEXCEPT { return false; } static _GLIBCXX_CONSTEXPR bool - round_error() throw() { return false; } + round_error() _GLIBCXX_USE_NOEXCEPT { return false; } static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; @@ -411,16 +411,16 @@ static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; static _GLIBCXX_CONSTEXPR bool - infinity() throw() { return false; } + infinity() _GLIBCXX_USE_NOEXCEPT { return false; } static _GLIBCXX_CONSTEXPR bool - quiet_NaN() throw() {
Re: [PR testsuite/47013] Fix SMS testsuite faliures
The attached patch fixes SMS testsuite failures seen on PowerPC and SPU. On powerpc-apple-darwin9 the patch fixes all the SMS failures but for FAIL: gcc.dg/sms-8.c scan-rtl-dump-times sms SMS loop with subreg in lhs 1 with -m64. Also tested on x86_64-apple-darwin10 without regression. Thanks for the patch. Dominique
[PATCH, i386]: standard_80387_constant_p can return negative values
Hello! 2011-05-15 Uros Bizjak ubiz...@gmail.com * config/i386/i386.md (floating point move splitters): Fix usage of standard_80387_constant_p. * config/i386/i386.c (ix86_preferred_reload_class): Ditto. Tested on x86_64-pc-linux-gnu {,-m32}, committed to mainline SVN. Uros. Index: i386.md === --- i386.md (revision 173773) +++ i386.md (working copy) @@ -3315,7 +3315,7 @@ } else if (FP_REG_P (r)) { - if (!standard_80387_constant_p (c)) + if (standard_80387_constant_p (c) 1) FAIL; } else if (MMX_REG_P (r)) @@ -3347,7 +3347,7 @@ } else if (FP_REG_P (r)) { - if (!standard_80387_constant_p (c)) + if (standard_80387_constant_p (c) 1) FAIL; } else if (MMX_REG_P (r)) Index: i386.c === --- i386.c (revision 173771) +++ i386.c (working copy) @@ -28489,7 +28489,7 @@ ix86_preferred_reload_class (rtx x, reg_ zero above. We only want to wind up preferring 80387 registers if we plan on doing computation with them. */ if (TARGET_80387 - standard_80387_constant_p (x)) + standard_80387_constant_p (x) 0) { /* Limit class to non-sse. */ if (regclass == FLOAT_SSE_REGS)
Re: [patch gimplifier]: Make sure TRUTH_NOT_EXPR has boolean_type_node type and argument
2011/5/15 Kai Tietz ktiet...@googlemail.com: 2011/5/15 Eric Botcazou ebotca...@adacore.com: Well, I mean by artificial here, that gimplification is done via gimplify_expr API. As FE and ME have here different assumptions. The ME uses internally most boolean_type_node and IMHO it should be the variant used there. As this conversation to a single boolean_type (with recast to result FE's boolean type on demand) has some advantages on optimization passes. Additionally it simplifies logic in passes on types. For example there are some expressions, which are in general unexpected in ME as they are transformed in gimplification (like TRUTH_ANDIF/ORIF_EXPR). By adding tree manual, you might cause the same issue as for the logical-expression showing up now. OK, then that's definitely not the case for Ada, so the comment is incorrect. Yes, I will adjust comment here about ADA. Code for ADA looks sane. Just one nit I saw in trans.c, which might be a cause here. Well, this patch might be an alternative, but I see here potential issues in such none-gimplified expressions for comparision and logical not, which not necessariily have BOOLEAN_TYPE. See here the code for fold_truth_not (and some other places) in fold-const. So I think, as long as we have here external gimplication it is more save to check just for integral-kind. Note that, even without external gimplication, we still have integral types down to the tree-cfg.c check. Take ACATS c52103x at -O0. The Ada FE hands over a valid TRUTH_AND_EXPR, i.e. (BOOLEAN_TYPE, BOOLEAN_TYPE, BOOLEAN_TYPE) but the gimplifier builds a (BOOLEAN_TYPE, INTEGER_TYPE, BOOLEAN_TYPE) as it strips, then adds, then re-strips a cast to BOOLEAN_TYPE in gimplify_expr. With this patch (which would describe why it gimplifier sees integer-type nodes here): Index: gcc/gcc/ada/gcc-interface/trans.c === --- gcc.orig/gcc/ada/gcc-interface/trans.c 2011-05-12 20:06:01.0 +0200 +++ gcc/gcc/ada/gcc-interface/trans.c 2011-05-15 15:33:32.305516200 +0200 @@ -7101,7 +7110,7 @@ convert_with_check (Entity_Id gnat_type, { /* Ensure GNU_EXPR only gets evaluated once. */ tree gnu_input = gnat_protect_expr (gnu_result); - tree gnu_cond = integer_zero_node; + tree gnu_cond = boolean_false_node; tree gnu_in_lb = TYPE_MIN_VALUE (gnu_in_basetype); tree gnu_in_ub = TYPE_MAX_VALUE (gnu_in_basetype); tree gnu_out_lb = TYPE_MIN_VALUE (gnu_base_type); I was able to do a bootstrap for ada and run 'make check-ada' without seeing gimplification errors. The only failure I see in testrun is 'cxg2001.adb' test with 'GCC error: in compensate_edge, at reg-stach.c:2781' Error detect around cxg2001.adb:322:5. But well, this bug seems to me unrelated here to gimplication. But maybe I am wrong here. Regards, Kai PS: There are more places to fix, I will sent tomorrow a full patch for this after bootstrap and testsuite-run was completetly successful. I saw in later gnat.dg the described error (but no more the truth-not issue). So I was a bit to early to post here. Regards, Kai
Re: [patch gimplifier]: Make sure TRUTH_NOT_EXPR has boolean_type_node type and argument
The patch is OK, but it doesn't change anything for c52103x as this is a pure gimplifier problem. Try running ACATS at -O0: Or just compile the attached reduced testcase at -O0: c52103x.adb: In function 'C52103X': c52103x.adb:1:1: error: type mismatch in binary truth expression boolean system__unsigned_types__packed_byte boolean D.2363 = D.2361 D.2362; -- Eric Botcazou PROCEDURE C52103X IS BEGIN CONSTR_ERR: -- THIS BLOCK CATCHES CONSTRAINT_ERROR -- FOR THE TYPE DECLARATION. BEGIN DCL_ARR: DECLARE -- THIS BLOCK DECLARES THE ARRAY TYPE TYPE TA42 IS ARRAY( INTEGER RANGE -2..INTEGER'LAST ) OF BOOLEAN ; -- CONSTRAINT_ERROR MAY BE RAISED BY THE -- ARRAY TYPE DECLARATION. PRAGMA PACK (TA42); SUBTYPE TA41 IS TA42 ; BEGIN OBJ_DCL: DECLARE -- THIS BLOCK DECLARES TWO BOOLEAN ARRAYS THAT -- HAVE INTEGER'LAST + 3 COMPONENTS; -- STORAGE_ERROR MAY BE RAISED. ARR41 : TA41 ; ARR42 : TA42 ; BEGIN DO_SLICE: BEGIN -- SLICE ASSIGNMENT: ARR42( -1..INTEGER'LAST ) := ARR41( -2..INTEGER'LAST-1) ; CHK_SLICE: BEGIN FOR I IN -1..2 LOOP IF ARR42( I ) /= FALSE AND I /= 0 THEN raise Program_Error; ELSIF ARR42( I ) /= TRUE AND I = 0 THEN raise Program_Error; END IF; END LOOP; IF ARR42( -2 ) /= TRUE THEN raise Program_Error; END IF; END CHK_SLICE; END DO_SLICE; END OBJ_DCL; END DCL_ARR; END CONSTR_ERR; END C52103X;
Re: [C++ Patch] Restore the alphabetical for the type traits RIDs
OK. Jason
[x32] PATCH: Put back mode on operand 1 in tls_global_dynamic_64 patterns.
Hi, I checked in this patch to put back mode on operand 1 in tls_global_dynamic_64 patterns. H.J. --- commit 6eddaa2187ccb80fe8515705778b5818033cfb2d Author: H.J. Lu hjl.to...@gmail.com Date: Fri May 13 10:35:16 2011 -0700 Rename tls_global_dynamic_64 to tls_global_dynamic_64_mode. diff --git a/gcc/ChangeLog.x32 b/gcc/ChangeLog.x32 index 9426489..15da5cc 100644 --- a/gcc/ChangeLog.x32 +++ b/gcc/ChangeLog.x32 @@ -1,3 +1,13 @@ +2011-05-13 H.J. Lu hongjiu...@intel.com + + PR target/47715 + * config/i386/i386.md (PTR64): New. + (*tls_global_dynamic_64): Rename to ... + (*tls_global_dynamic_64_mode): This. Put PTR64 on operand 1. + (tls_global_dynamic_64): Rename to ... + (tls_global_dynamic_64_mode): This. Put PTR64 on operand 1. + * config/i386/i386.c (legitimize_tls_address): Updated. + 2011-05-06 H.J. Lu hongjiu...@intel.com * config/i386/i386.c (ix86_promote_function_mode): Handle NULL diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b89f558..2edde71 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -12909,9 +12909,22 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov) if (TARGET_64BIT) { rtx rax = gen_rtx_REG (Pmode, AX_REG), insns; + rtx (*tls_global_dynamic) (rtx, rtx, rtx); + + switch (GET_MODE (x)) + { + case SImode: + tls_global_dynamic = gen_tls_global_dynamic_64_si; + break; + case DImode: + tls_global_dynamic = gen_tls_global_dynamic_64_di; + break; + default: + gcc_unreachable (); + } start_sequence (); - emit_call_insn (gen_tls_global_dynamic_64 (rax, x, caddr)); + emit_call_insn (tls_global_dynamic (rax, x, caddr)); insns = get_insns (); end_sequence (); diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 41bfe4e..ead5763 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -967,7 +967,9 @@ ;; ptr_mode sized quantities. (define_mode_iterator PTR [(SI ptr_mode == SImode) (DI ptr_mode == DImode)]) - + +;; Pointer modes in 64bit. +(define_mode_iterator PTR64 [(SI TARGET_X32) DI]) ;; Scheduling descriptions @@ -12603,11 +12605,11 @@ (clobber (match_scratch:SI 5 )) (clobber (reg:CC FLAGS_REG))])]) -(define_insn *tls_global_dynamic_64 +(define_insn *tls_global_dynamic_64_mode [(set (match_operand:DI 0 register_operand =a) (call:DI (mem:QI (match_operand:DI 2 call_insn_operand )) (match_operand:DI 3 ))) - (unspec:DI [(match_operand 1 tls_symbolic_operand )] + (unspec:DI [(match_operand:PTR64 1 tls_symbolic_operand )] UNSPEC_TLS_GD)] TARGET_64BIT { @@ -12620,12 +12622,12 @@ (set (attr length) (symbol_ref TARGET_X32 ? 15 : 16))]) -(define_expand tls_global_dynamic_64 +(define_expand tls_global_dynamic_64_mode [(parallel [(set (match_operand:DI 0 register_operand ) (call:DI (mem:QI (match_operand:DI 2 call_insn_operand )) (const_int 0))) - (unspec:DI [(match_operand 1 tls_symbolic_operand )] + (unspec:DI [(match_operand:PTR64 1 tls_symbolic_operand )] UNSPEC_TLS_GD)])]) (define_insn *tls_local_dynamic_base_32_gnu
Re: [patch] fix c++/48994
On 15 May 2011 23:19, Jason Merrill wrote: OK for trunk and 4.6. The bug isn't present on the 4.6 branch and I'm not sure where the change should go, if it's needed at all, so I've only committed it to trunk.
Re: Patch: New GTY ((atomic)) option
On Sun, May 15, 2011 at 7:13 PM, Nicola Pero nicola.p...@meta-innovation.com wrote: This patch adds a new GTY option, atomic, which is similar to the identical option you have with Boehm GC and which can be used with pointers to inform the GC/PCH machinery that they point to an area of memory that [...] This patch basically implements it, but at this stage requires you to explicitly tell gengtype that the pointer is atomic (and that is safe for gengtype to ignore the memory it points to). then should you not name the attribute ignore? -- Gaby
Re: Patch: New GTY ((atomic)) option
On 05/15/2011 08:49 PM, Gabriel Dos Reis wrote: On Sun, May 15, 2011 at 7:13 PM, Nicola Pero nicola.p...@meta-innovation.com wrote: This patch adds a new GTY option, atomic, which is similar to the identical option you have with Boehm GC and which can be used with pointers to inform the GC/PCH machinery that they point to an area of memory that [...] This patch basically implements it, but at this stage requires you to explicitly tell gengtype that the pointer is atomic (and that is safe for gengtype to ignore the memory it points to). then should you not name the attribute ignore? Or even the existing attribute skip? -Nathan
Re: Patch: New GTY ((atomic)) option
On Sun, May 15, 2011 at 7:52 PM, Nathan Froyd froy...@codesourcery.com wrote: On 05/15/2011 08:49 PM, Gabriel Dos Reis wrote: On Sun, May 15, 2011 at 7:13 PM, Nicola Pero nicola.p...@meta-innovation.com wrote: This patch adds a new GTY option, atomic, which is similar to the identical option you have with Boehm GC and which can be used with pointers to inform the GC/PCH machinery that they point to an area of memory that [...] This patch basically implements it, but at this stage requires you to explicitly tell gengtype that the pointer is atomic (and that is safe for gengtype to ignore the memory it points to). then should you not name the attribute ignore? Or even the existing attribute skip? better, indeed. :-) -- Gaby
Re: [patch] fix c++/48994
On 05/15/2011 07:07 PM, Jonathan Wakely wrote: On 15 May 2011 23:19, Jason Merrill wrote: OK for trunk and 4.6. The bug isn't present on the 4.6 branch and I'm not sure where the change should go, if it's needed at all, so I've only committed it to trunk. Ah, my mistake. Sounds good. Jason
[wwwdocs] Simplify markup for java/faq.html
Per some other changes in the last couple of weeks. It would be really, really good if one of you Java guys could go through the FAQ and remove obsolete entries. (Or just let me know about any changes and I'll make them for you.) Gerald 2011-05-15 Gerald Pfeifer ger...@pfeifer.com * faq.html: Use h2, not fake tables for section headers. Index: faq.html === RCS file: /cvs/gcc/wwwdocs/htdocs/java/faq.html,v retrieving revision 1.64 diff -u -r1.64 faq.html --- faq.html10 Oct 2009 13:32:15 - 1.64 +++ faq.html16 May 2011 04:56:44 - @@ -77,15 +77,9 @@ /ol /li /ol - table border=0 cellpadding=4 width=95% -tr bgcolor=#b0d0ff - th align=left -h2a name=1_0General Questions/a/h2 - /th -/tr - /table - - br / + + h2a name=1_0General Questions/a/h2 + h3a name=1_11.1 What license is used for libgcj?/a/h3 dl dd @@ -150,15 +144,8 @@ /dd /dl - table border=0 cellpadding=4 width=95% -tr bgcolor=#B0D0FF - th align=left -h2a name=2_0Java Feature Support/a/h2 - /th -/tr - /table + h2a name=2_0Java Feature Support/a/h2 - br / h3a name=2_12.1 What Java API's are supported?/a How complete is the support?/h3 dl @@ -286,15 +273,8 @@ /dd /dl - table border=0 cellpadding=4 width=95% -tr bgcolor=#b0d0ff - th align=left -h2a name=3_0Build Issues/a/h2 - /th -/tr - /table + h2a name=3_0Build Issues/a/h2 - br / h3a name=3_13.1 I need something more recent than the last release. How should I build it?/a/h3 dl @@ -366,15 +346,8 @@ /dl - table border=0 cellpadding=4 width=95% -tr bgcolor=#b0d0ff - th align=left -h2a name=4_0Gcj Compile/Link Questions/a/h2 - /th -/tr - /table + h2a name=4_0Gcj Compile/Link Questions/a/h2 - br / h3a name=4_14.1 Why do I get ttundefined reference to `main'/tt errors?/a/h3 dl @@ -479,15 +452,8 @@ /dd /dl - table border=0 cellpadding=4 width=95% -tr bgcolor=#B0D0FF - th align=left -h2a name=5_0Runtime Questions/a/h2 - /th -/tr - /table + h2a name=5_0Runtime Questions/a/h2 - br / h3a name=5_15.1 My program is dumping core! What's going on?/a/h3 dl dd @@ -590,15 +556,8 @@ /dd /dl - table width=100% border=0 -tr bgcolor=#B0D0FF align=left - th -h2a name=6_0/aProgramming Issues /h2 - /th -/tr - /table + h2a name=6_0/aProgramming Issues/h2 - br / h3a name=6_1/a6.1 Are there any examples of how to use CNI?/h3 dl dd
[PATCH, i386] PR 48743 Correctly detect AMD K6-2+ and K6-3+
Misdetected as Athlon by GCC, K6-2+ and K6-3+ are processors that support extended 3DNow! but don't support extended MMX or CMOV. I don't own a K6-2 or Athlon machine. Can anybody have the patch tested? 2011-05-16 Zuxy Meng zuxy.m...@gmail.com PR i386/48743 * config/i386/cpuid.h (bit_MMXEXT): New * config/i386/cpuid.h (bit_3DNOWP): Deleted * config/i386/driver-i386.c (host_detect_local_cpu): Detect Athlon by the presence of extended MMX instead of extended 3DNow! -- Zuxy k6-3+.diff Description: Binary data