[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: display word wrapping
From: |
Juanma Barranquero |
Subject: |
Re: display word wrapping |
Date: |
Sun, 30 May 2004 18:50:27 +0200 |
On 30 May 2004 08:12:41 +0200, Eli Zaretskii <address@hidden> wrote:
> Does it crash (it _is_ a crash, isn't it?) under a debugger, or does
> that, too, cause the bug to change its behavior?
Yes, it is a crash. No, it fails the same way under debugging.
> If the former, run an unmodified optimized code under a debugger and
> use debugger facilities instead of debugging code to see what's wrong.
Yeah, I've already tried, and I see *where* it is failing, but debugging
optimized code is a bit of a pain.
> Comparison of machine code in the optimized and unoptimized versions
> might also tell you something useful.
It would, if I were more sure about what the code is exactly supposed to
do. I'm no expert in the image code.
> Finally, assuming that we are talking about a crash, posting the
> detailed description of the crash (exception number, register dump,
> stack dump, etc.) here could give some further ideas.
When I try to load a 811-byte .gif, I get:
Unhandled exception at 0x0106dd08 in emacs.exe: 0xC0000005: Access
violation reading location 0x00000004.
The stack trace is:
image_spec_value(int spec=-536870912, int key=557610632, int *
found=0x00000000) Line 931 + 0x8 C
lookup_image(frame * f=0x015dbe00, int spec=-1572937664) Line 1682 C
handle_single_display_prop(it * it=0x00000000, int prop=5, int
object=-2109577216, text_pos * position=0x0082f04c, int
display_replaced_before_p=0) Line 3702 C
handle_display_prop(it * it=0x0082f04c) Line 3339 + 0x10 C
handle_stop(it * it=0x0082efb0) Line 2591 + 0x3 C
reseat(it * it=0x00000000, text_pos pos={...}, int force_p=1) Line 4676 + 0x6
C
init_iterator(it * it=0x0082efb0, window * w=0x015dbe00, int charpos=1, int
bytepos=1, glyph_row * row=0x02426800, face_id base_face_id=DEFAULT_FACE_ID)
Line 2269 + 0x18 C
start_display(it * it=0x0082efb0, window * w=0x0211ac00, text_pos pos={...})
Line 2288 + 0x1f C
try_window(int window=-2112771072, text_pos pos={...}) Line 12211 + 0x20
C
redisplay_window(int window=-2112771072, int just_this_one_p=0) Line 11858 +
0xc C
redisplay_window_0(int window=-2112771072) Line 10588 + 0xa C
internal_condition_case_1(int (void)* bfun=0x0103fbcb, int arg=-2112771072,
int handlers=-1589824248, int (void)* hfun=0x01029d11) Line 1374 + 0x35 C
redisplay_windows(int window=-2112771072) Line 10569 + 0x1d C
redisplay_internal(int preserve_echo_area=0) Line 10152 + 0x8 C
redisplay() Line 9386 + 0x7 C
read_char(int commandflag=1, int nmaps=5, int * maps=0x0082fbec, int
prev_event=557609984, int * used_mouse_menu=0x0082fc44) Line 2487 C
read_key_sequence(int * keybuf=0x0082fce8, int bufsize=30, int
prompt=557609984, int dont_downcase_last=0, int can_return_switch_frame=1, int
fix_current_buffer=1) Line 8783 + 0x24 C
command_loop_1() Line 1490 + 0x25 C
internal_condition_case(int (void)* bfun=0x0105b380, int handlers=557688384,
int (void)* hfun=0x01058003) Line 1334 C
command_loop_2() Line 1271 + 0x15 C
internal_catch(int tag=557684672, int (void)* func=0x0105c094, int
arg=557609984) Line 1094 + 0x6 C
command_loop() Line 1251 C
recursive_edit_1() Line 961 + 0x5 C
Frecursive_edit() Line 1023 C
main() Line 1693 + 0x5 C
mainCRTStartup() Line 259 + 0x12 C
GetCurrentDirectoryW() + 0x44
lookup_image is calling image_spec_value with the following code:
if (! img->background_valid)
{
bg = image_spec_value (img->spec, QCbackground, NULL);
if (!NILP (bg))
{
img->background
= x_alloc_image_color (f, img, bg,
FRAME_BACKGROUND_PIXEL (f));
img->background_valid = 1;
}
}
At that point, img->spec is not valid. Previously, img has been
initialized from spec (the arg passed to the function), so spec and
img->spec should be equal, but they aren't anymore. If you change the
call to do
bg = image_spec_value (spec, QCbackground, NULL);
it succeeds, but then the call to postprocess_image
if (!EQ (*img->type->type, Qpostscript))
postprocess_image (f, img);
fails for the same reason (img->spec is not valid).
On optimized code, img is not on the stack, but on a register. In fact,
if I change
struct image *img;
to
static struct image *img;
Emacs works fine. So it looks like it *is* really a bug in the optimizer
code, which is clobbering a register or something like that.
/L/e/k/t/u
- Re: display word wrapping, (continued)
- Re: display word wrapping, Jason Rumney, 2004/05/31
- Re: display word wrapping, David Kastrup, 2004/05/31
- Re: display word wrapping, Jason Rumney, 2004/05/28
- Re: display word wrapping, Kim F. Storm, 2004/05/28
- Re: display word wrapping, Juanma Barranquero, 2004/05/28
- Re: display word wrapping, Juanma Barranquero, 2004/05/29
- Re: display word wrapping, Juanma Barranquero, 2004/05/29
- Re: display word wrapping, Eli Zaretskii, 2004/05/30
- Re: display word wrapping,
Juanma Barranquero <=
- Re: display word wrapping, Eli Zaretskii, 2004/05/30
- Re: display word wrapping, Juanma Barranquero, 2004/05/30
- Re: display word wrapping, Eli Zaretskii, 2004/05/31
- Re: display word wrapping, Juanma Barranquero, 2004/05/31
- Re: display word wrapping, Andreas Schwab, 2004/05/31
- Re: display word wrapping, Eli Zaretskii, 2004/05/31
- Re: display word wrapping, Eli Zaretskii, 2004/05/31
- Re: display word wrapping, Juanma Barranquero, 2004/05/31
- Re: display word wrapping, Juanma Barranquero, 2004/05/31
- Re: display word wrapping, Andreas Schwab, 2004/05/31