This bug has been opened here: http://bugzilla.ubuntu.com/show_bug.cgi?id=15091 "Overview Description: Gnome-terminal crashes and its probably error in libcairo2 package. Steps to reproduce: Open gnome-terminal, Click on Edit->Current profile in main menu. Actual results: It crashes. (gdb) thread apply all bt Thread 2 (Thread -1236739152 (LWP 19944)): #0 0xb779f231 in __read_nocancel () from /lib/tls/libpthread.so.0 #1 0xb773a2ad in g_timeout_add () from /usr/lib/libglib-2.0.so.0 #2 0xb7754844 in g_static_private_free () from /usr/lib/libglib-2.0.so.0 #3 0xb779a1ee in start_thread () from /lib/tls/libpthread.so.0 #4 0xb76af03e in clone () from /lib/tls/libc.so.6 Thread 1 (Thread -1225021760 (LWP 19930)): #0 0xb757d254 in _cairo_pixman_have_mmx () from /usr/lib/libcairo.so.2 #1 0xb757d2ee in _cairo_pixman_compose_setup_mmx () from /usr/lib/libcairo.so.2 #2 0xb756be0f in _cairo_pixman_region_intersect () from /usr/lib/libcairo.so.2 #3 0xb75519ea in cairo_image_surface_get_height () from /usr/lib/libcairo.so.2 #4 0xb75566f9 in cairo_surface_set_device_offset () from /usr/lib/libcairo.so.2 #5 0xb75604fb in cairo_ft_scaled_font_lock_face () from /usr/lib/libcairo.so.2 #6 0xb754d55a in cairo_scaled_font_glyph_extents () from /usr/lib/libcairo.so.2 #7 0xb754b5b4 in cairo_status_to_string () from /usr/lib/libcairo.so.2 #8 0xb755e54f in cairo_ft_scaled_font_unlock_face () from /usr/lib/libcairo.so.2 #9 0xb754cdb3 in cairo_scaled_font_destroy () from /usr/lib/libcairo.so.2 #10 0xb754d2fc in cairo_scaled_font_glyph_extents () from /usr/lib/libcairo.so.2 #11 0xb75e3eba in pango_cairo_fc_font_get_type () from /usr/lib/libpangocairo-1.0.so.0 #12 0xb78fffb5 in pango_font_get_glyph_extents () from /usr/lib/libpango-1.0.so.0 #13 0xb6559cc0 in ?? () from /usr/lib/pango/1.4.0/modules/pango-basic-fc.so #14 0x0839fc90 in ?? () #15 0x000001e3 in ?? () #16 0x00000000 in ?? () #17 0xbff1470c in ?? () #18 0x084e8780 in ?? () #19 0x00000000 in ?? () #20 0x084e7d88 in ?? () #21 0xb7349bca in pango_fc_font_lock_face () from /usr/lib/libpangoft2-1.0.so.0 #22 0xb6559e6c in ?? () from /usr/lib/pango/1.4.0/modules/pango-basic-fc.so #23 0x00000000 in ?? () #24 0x000001e3 in ?? () #25 0xb77037ef in in6addr_any () from /lib/tls/libc.so.6 #26 0xb7904bd7 in pango_context_get_base_dir () from /usr/lib/libpango-1.0.so.0 ---Type <return> to continue, or q <return> to quit--- #27 0xb7906bc7 in pango_engine_shape_get_type () from /usr/lib/libpango-1.0.so.0 #28 0xb79159d9 in pango_shape () from /usr/lib/libpango-1.0.so.0 #29 0xb790a3c4 in pango_layout_set_width () from /usr/lib/libpango-1.0.so.0 #30 0xb790c6fb in pango_layout_iter_get_char_extents () from /usr/lib/libpango-1.0.so.0 #31 0xb790cf58 in pango_layout_iter_get_char_extents () from /usr/lib/libpango-1.0.so.0 #32 0xb790d887 in pango_layout_iter_get_char_extents () from /usr/lib/libpango-1.0.so.0 #33 0xb7ba8b97 in gtk_label_get_use_underline () from /usr/lib/libgtk-x11-2.0.so.0 #34 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #35 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #36 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #37 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #38 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #39 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #40 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #41 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #42 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #43 0xb7b7d4eb in gtk_hbox_new () from /usr/lib/libgtk-x11-2.0.so.0 #44 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #45 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #46 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #47 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #48 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #49 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #50 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #51 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #52 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #53 0xb7af6a14 in gtk_button_set_relief () from /usr/lib/libgtk-x11-2.0.so.0 #54 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #55 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #56 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #57 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #58 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #59 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #60 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #61 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #62 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 ---Type <return> to continue, or q <return> to quit--- #63 0xb7b7d4eb in gtk_hbox_new () from /usr/lib/libgtk-x11-2.0.so.0 #64 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #65 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #66 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #67 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #68 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #69 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #70 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #71 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #72 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #73 0xb7c94a2f in gtk_vbox_new () from /usr/lib/libgtk-x11-2.0.so.0 #74 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #75 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #76 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #77 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #78 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #79 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #80 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #81 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #82 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #83 0xb7b79cef in gtk_frame_get_shadow_type () from /usr/lib/libgtk-x11-2.0.so.0 #84 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #85 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #86 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #87 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #88 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #89 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #90 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #91 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #92 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #93 0xb7bd0c02 in gtk_notebook_next_page () from /usr/lib/libgtk-x11-2.0.so.0 #94 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #95 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #96 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #97 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #98 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 ---Type <return> to continue, or q <return> to quit--- #99 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #100 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #101 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #102 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #103 0xb7c94a2f in gtk_vbox_new () from /usr/lib/libgtk-x11-2.0.so.0 #104 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #105 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #106 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #107 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #108 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #109 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #110 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #111 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #112 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #113 0xb7ca8a7b in gtk_window_reshow_with_initial_size () from /usr/lib/libgtk-x11-2.0.so.0 #114 0xb77de315 in g_cclosure_marshal_VOID__BOXED () from /usr/lib/libgobject-2.0.so.0 #115 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #116 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #117 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #118 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #119 0xb77e54f0 in g_signal_emit_by_name () from /usr/lib/libgobject-2.0.so.0 #120 0xb7bff9fd in gtk_size_group_remove_widget () from /usr/lib/libgtk-x11-2.0.so.0 #121 0xb7bffd99 in _gtk_size_group_compute_requisition () from /usr/lib/libgtk-x11-2.0.so.0 #122 0xb7c987d8 in gtk_widget_size_request () from /usr/lib/libgtk-x11-2.0.so.0 #123 0xb7ca9beb in _gtk_window_constrain_size () from /usr/lib/libgtk-x11-2.0.so.0 #124 0xb7caaafa in gtk_window_get_position () from /usr/lib/libgtk-x11-2.0.so.0 #125 0xb77ddab3 in g_cclosure_marshal_VOID__VOID () from /usr/lib/libgobject-2.0.so.0 #126 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #127 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #128 0xb77e0769 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #129 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #130 0xb77e24c3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #131 0xb7c9f786 in gtk_widget_show () from /usr/lib/libgtk-x11-2.0.so.0 #132 0xb7cab348 in gtk_window_present_with_time () from /usr/lib/libgtk-x11-2.0.so.0 #133 0xb7cab3b1 in gtk_window_present () from /usr/lib/libgtk-x11-2.0.so.0 #134 0x0805a3cf in ?? () ---Type <return> to continue, or q <return> to quit--- #135 0x08469728 in ?? () #136 0x080ffe68 in ?? () #137 0x08058e90 in ?? () #138 0x081150a0 in ?? () #139 0x00000000 in ?? () #140 0x00000000 in ?? () #141 0xbff18118 in ?? () #142 0xb77e24c3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #143 0x08072fd4 in ?? () #144 0x081150a0 in ?? () #145 0x081313a8 in ?? () #146 0x081313a8 in ?? () #147 0xb77d1744 in g_closure_ref () from /usr/lib/libgobject-2.0.so.0 #148 0xb77ddab3 in g_cclosure_marshal_VOID__VOID () from /usr/lib/libgobject-2.0.so.0 #149 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #150 0xb77e0b13 in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #151 0xb77e2150 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #152 0xb77e24c3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #153 0xb7c996ad in gtk_widget_activate () from /usr/lib/libgtk-x11-2.0.so.0 #154 0xb7bc6409 in gtk_menu_shell_activate_item () from /usr/lib/libgtk-x11-2.0.so.0 #155 0xb7bc66dd in gtk_menu_shell_activate_item () from /usr/lib/libgtk-x11-2.0.so.0 #156 0xb7bbce0e in gtk_menu_reorder_child () from /usr/lib/libgtk-x11-2.0.so.0 #157 0xb7bb77cc in _gtk_marshal_BOOLEAN__BOXED () from /usr/lib/libgtk-x11-2.0.so.0 #158 0xb77d1d75 in g_cclosure_new_swap () from /usr/lib/libgobject-2.0.so.0 #159 0xb77d23a8 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0 #160 0xb77e0c9f in g_signal_stop_emission () from /usr/lib/libgobject-2.0.so.0 #161 0xb77e1ec3 in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0 #162 0xb77e24c3 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0 #163 0xb7c9988f in gtk_widget_activate () from /usr/lib/libgtk-x11-2.0.so.0 #164 0xb7bb5f08 in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0 #165 0xb7bb6340 in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0 #166 0xb7a59b1d in _gdk_events_queue () from /usr/lib/libgdk-x11-2.0.so.0 #167 0xb773848e in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #168 0xb773b496 in g_main_context_check () from /usr/lib/libglib-2.0.so.0 #169 0xb773b783 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0 #170 0xb7bb5606 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0 ---Type <return> to continue, or q <return> to quit--- #171 0x08061567 in ?? () #172 0x080c6228 in ?? () #173 0x0807daea in ?? () #174 0x0805e3c8 in ?? () #175 0x00000000 in ?? () #176 0x00000000 in ?? () #177 0x00000000 in ?? () #178 0x08083120 in ?? () #179 0x0807da4b in ?? () #180 0x0807da46 in ?? () #181 0x0807da37 in ?? () #182 0x0807da32 in ?? () #183 0x0807da26 in ?? () #184 0x0807da1b in ?? () #185 0x0807da10 in ?? () #186 0x0807da07 in ?? () #187 0x00000000 in ?? () #188 0x00000000 in ?? () #189 0x00000794 in ?? () #190 0xb75f6b4e in ?? () from /lib/tls/libc.so.6 #191 0xb75f19fc in ?? () from /lib/tls/libc.so.6 #192 0xb75e932c in ?? () from /lib/tls/libc.so.6 #193 0x080a64d8 in ?? () #194 0x00000027 in ?? () #195 0xb6fd2598 in ?? () #196 0x0000001c in ?? () #197 0x00000051 in ?? () #198 0x00000000 in ?? () #199 0x080b4918 in ?? () #200 0x03c00003 in ?? () #201 0x00000027 in ?? () #202 0x019a4462 in ?? () #203 0x00000000 in ?? () #204 0x00000000 in ?? () #205 0x00000000 in ?? () #206 0x00000000 in ?? () ---Type <return> to continue, or q <return> to quit--- #207 0x00000000 in ?? () #208 0x00000000 in ?? () #209 0x00000000 in ?? () #210 0x00000000 in ?? () #211 0x00000000 in ?? () #212 0x00000000 in ?? () #213 0x00000000 in ?? () #214 0x00000000 in ?? () #215 0x00000000 in ?? () #216 0x00000000 in ?? () #217 0x00000000 in ?? () #218 0x00000000 in ?? () #219 0x00000000 in ?? () #220 0x00000000 in ?? () #221 0x00000000 in ?? () #222 0x00000000 in ?? () #223 0x00000000 in ?? () #224 0x00000000 in ?? () #225 0x0177ff8e in ?? () #226 0xbff18e50 in ?? () #227 0xb7f04000 in ?? () #228 0x08050ec5 in ?? () #229 0x00000000 in ?? () #230 0x00420000 in ?? () #231 0xb7647ace in _IO_str_pbackfail () from /lib/tls/libc.so.6 #232 0xb75faeb4 in __libc_start_main () from /lib/tls/libc.so.6 #233 0x08056fe1 in ?? ()"
What's the output of /proc/cpuinfo?
The upstream user has an AMD-K6 which supports MMX/3DNow but not SSE. The problem is that using -msse causes gcc to generate SSE instructions in the CPU detection routine (fbHasMMX). The gcc documentation is rather misleading on this point. The current documentation states that these options (-mmmx, -msse) enable use of the compiler built-ins, and not that it allows gcc to generate MMX/SSE code. I have filed this bug upstream with gcc: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23809 Unfortunately, the fix is not as simple as removing the -msse. We need to isolate the MMX/SSE code in a separate file from the runtime detection code if we intend to keep using the compiler intrinsics. Paul Brook on #gcc confirmed the bad news.
Looks like this came up before, with a patch, and I guess it didn't make it (or made it into Xorg but not xserver/pixman?). http://lists.freedesktop.org/pipermail/xorg/2005-July/008782.html
do you have a fix for this bug? I would like to get cairo fixed for Ubuntu before the 5.10 version
I'll try and put together a final patch tonight.
Created attachment 3291 [details] [review] Proposed patch Here's what I intend to commit. otaylor and cworth, OK for 1.0.2? There's actually one other issue not addressed by this patch. The MMX code is currently being compiled with both -mmmx and -msse. The detection code seems to only check for MMX, not full SSE, so I think this is a problem. I see three possible solutions: 1. Change the detection code to check for SSE, giving up on pre-SSE chips, and turn on the USE_SSE define in fbmmx.c. 2. Compile fbmmx.c twice, once for MMX and once for SSE. 3. Modify cairo's configure.in to drop -msse For 1.0.2 I think the only option is 3, as the other two are more risky and I'd hate to cause new SIGILLs, but I'm confused about why -msse was in there at all. Maybe for futureproofing the USE_SSE code? The current code seems to compile fine without it. Am I missing something?
Looks fine for me, assuming the obvious Makefile.am changes.
The Makefile.am already only applies the MMX flags to the fbmmx.* code. Was this what you meant?
Oh, for some reason I thought your patch moved stuff into a new file rather than into fbpict.c, so would have required Makefile.am changes. Moving it into fbpict.c should be OK.
Fixing accidental reassignment.
Looks fine to me, (just having read it, not tested). I assume you've tested, so please commit.
I tested as well as I could, I don't have access to a non-SSE supporting CPU. Fix committed to both the 1.0 branch and HEAD.
Fix applied to xserver/fb (but it doesn't really help yet, see bug 4501).
*** Bug 5465 has been marked as a duplicate of this bug. ***
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.