* [RFA] Don't SEGV on invalid dwarf2 frame info
@ 2003-07-10 1:03 Richard Henderson
2003-07-10 20:59 ` Mark Kettenis
0 siblings, 1 reply; 11+ messages in thread
From: Richard Henderson @ 2003-07-10 1:03 UTC (permalink / raw)
To: ezannoni; +Cc: gdb-patches
Elena, this is the patch I was thinking about.
For the audience, there is at least one bug in current cvs ld's .eh_frame
optimization code that results in padding being added between sections.
But we saw similar problems when we added support for .eh_frame generation
within the assembler (and didn't .align sections), so the discussion in
the patch is a bit more broad than that.
Does this seem reasonable?
r~
* dwarf2-frame.c (decode_frame_entry_1): Rename from
decode_frame_entry; return NULL for invalid data; tidy some
variable initialization.
(decode_frame_entry): New.
Index: dwarf2-frame.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2-frame.c,v
retrieving revision 1.7
diff -c -p -d -r1.7 dwarf2-frame.c
*** dwarf2-frame.c 8 Jun 2003 18:27:13 -0000 1.7
--- dwarf2-frame.c 10 Jul 2003 00:31:49 -0000
*************** add_fde (struct comp_unit *unit, struct
*** 1058,1076 ****
#define DW64_CIE_ID ~0
#endif
! /* Read a CIE or FDE in BUF and decode it. */
static char *
! decode_frame_entry (struct comp_unit *unit, char *buf, int eh_frame_p)
{
LONGEST length;
unsigned int bytes_read;
! int dwarf64_p = 0;
! ULONGEST cie_id = DW_CIE_ID;
ULONGEST cie_pointer;
- char *start = buf;
char *end;
length = read_initial_length (unit->abfd, buf, &bytes_read);
buf += bytes_read;
end = buf + length;
--- 1058,1078 ----
#define DW64_CIE_ID ~0
#endif
! /* Read a CIE or FDE in BUF and decode it. Return NULL in invalid input,
! otherwise the next byte to be processed. */
static char *
! decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p)
{
+ char *buf;
LONGEST length;
unsigned int bytes_read;
! int dwarf64_p;
! ULONGEST cie_id;
ULONGEST cie_pointer;
char *end;
+ buf = start;
length = read_initial_length (unit->abfd, buf, &bytes_read);
buf += bytes_read;
end = buf + length;
*************** decode_frame_entry (struct comp_unit *un
*** 1078,1092 ****
if (length == 0)
return end;
! if (bytes_read == 12)
! dwarf64_p = 1;
! /* In a .eh_frame section, zero is used to distinguish CIEs from
! FDEs. */
if (eh_frame_p)
cie_id = 0;
else if (dwarf64_p)
cie_id = DW64_CIE_ID;
if (dwarf64_p)
{
--- 1080,1095 ----
if (length == 0)
return end;
! /* Distinguish between 32 and 64-bit encoded frame info. */
! dwarf64_p = (bytes_read == 12);
! /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */
if (eh_frame_p)
cie_id = 0;
else if (dwarf64_p)
cie_id = DW64_CIE_ID;
+ else
+ cie_id = DW_CIE_ID;
if (dwarf64_p)
{
*************** decode_frame_entry (struct comp_unit *un
*** 1124,1130 ****
cie->encoding = encoding_for_size (unit->addr_size);
/* Check version number. */
! gdb_assert (read_1_byte (unit->abfd, buf) == DW_CIE_VERSION);
buf += 1;
/* Interpret the interesting bits of the augmentation. */
--- 1127,1134 ----
cie->encoding = encoding_for_size (unit->addr_size);
/* Check version number. */
! if (read_1_byte (unit->abfd, buf) != DW_CIE_VERSION)
! return NULL;
buf += 1;
/* Interpret the interesting bits of the augmentation. */
*************** decode_frame_entry (struct comp_unit *un
*** 1159,1164 ****
--- 1163,1170 ----
length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
buf += bytes_read;
+ if (buf > end)
+ return NULL;
cie->initial_instructions = buf + length;
augmentation++;
}
*************** decode_frame_entry (struct comp_unit *un
*** 1211,1226 ****
/* This is a FDE. */
struct dwarf2_fde *fde;
if (eh_frame_p)
{
- /* In an .eh_frame section, the CIE pointer is the delta
- between the address within the FDE where the CIE pointer
- is stored and the address of the CIE. Convert it to an
- offset into the .eh_frame section. */
cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
cie_pointer -= (dwarf64_p ? 8 : 4);
}
fde = (struct dwarf2_fde *)
obstack_alloc (&unit->objfile->psymbol_obstack,
sizeof (struct dwarf2_fde));
--- 1217,1236 ----
/* This is a FDE. */
struct dwarf2_fde *fde;
+ /* In an .eh_frame section, the CIE pointer is the delta between the
+ address within the FDE where the CIE pointer is stored and the
+ address of the CIE. Convert it to an offset into the .eh_frame
+ section. */
if (eh_frame_p)
{
cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer;
cie_pointer -= (dwarf64_p ? 8 : 4);
}
+ /* In either case, validate the result is still within the section. */
+ if (cie_pointer >= unit->dwarf_frame_size)
+ return NULL;
+
fde = (struct dwarf2_fde *)
obstack_alloc (&unit->objfile->psymbol_obstack,
sizeof (struct dwarf2_fde));
*************** decode_frame_entry (struct comp_unit *un
*** 1252,1257 ****
--- 1262,1269 ----
length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
buf += bytes_read + length;
+ if (buf > end)
+ return NULL;
}
fde->instructions = buf;
*************** decode_frame_entry (struct comp_unit *un
*** 1261,1266 ****
--- 1273,1361 ----
}
return end;
+ }
+
+ static char *
+ decode_frame_entry (struct comp_unit *unit, char *start, int eh_frame_p)
+ {
+ enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE;
+ char *ret;
+ const char *msg;
+ ptrdiff_t start_offset;
+
+ while (1)
+ {
+ ret = decode_frame_entry_1 (unit, start, eh_frame_p);
+
+ if (ret != NULL)
+ break;
+
+ /* We have corrupt input data of some form. */
+
+ /* ??? Try, weakly, to work around compiler/assembler/linker bugs
+ and mismatches wrt padding and alignment of debug sections. */
+ /* Note that there is no requirement in the standard for any
+ alignment at all in the frame unwind sections. Testing for
+ alignment before trying to interpret data would be incorrect.
+
+ However, GCC traditionally arranged for frame sections to be
+ sized such that the FDE length and CIE fields happen to be
+ aligned (in theory, for performance). This, unfortunately,
+ was done with .align directives, which had the side effect of
+ forcing the section to be aligned by the linker.
+
+ This becomes a problem when you have some other producer that
+ creates frame sections that are not as strictly aligned. That
+ produces a hole in the frame info that gets filled by the
+ linker with zeros.
+
+ The GCC behaviour is arguably a bug, but it's effectively now
+ part of the ABI, so we're now stuck with it, at least at the
+ object file level. A smart linker may decide, in the process
+ of compressing duplicate CIE information, that it can rewrite
+ the entire output section without this extra padding. */
+
+ start_offset = start - unit->dwarf_frame_buffer;
+ if (workaround <= ALIGN4 && (start_offset & 3) != 0)
+ {
+ start += 4 - (start_offset & 3);
+ workaround = ALIGN4;
+ continue;
+ }
+ if (workaround <= ALIGN8 && (start_offset & 7) != 0)
+ {
+ start += 8 - (start_offset & 7);
+ workaround = ALIGN8;
+ continue;
+ }
+
+ /* Nothing left to try. Arrange to return as if we've consumed
+ the entire input section. Hopefully we'll get valid info from
+ the other of .debug_frame/.eh_frame. */
+ workaround = FAIL;
+ ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size;
+ break;
+ }
+
+ switch (workaround)
+ {
+ case NONE:
+ return ret;
+ case ALIGN4:
+ msg = "Corrupt data in %s:%s; align 4 workaround apparently succeeded";
+ break;
+ case ALIGN8:
+ msg = "Corrupt data in %s:%s; align 8 workaround apparently succeeded";
+ break;
+ case FAIL:
+ msg = "Corrupt data in %s:%s";
+ break;
+ }
+
+ complaint (&symfile_complaints, msg,
+ unit->dwarf_frame_section->owner->filename,
+ unit->dwarf_frame_section->name);
+ return ret;
}
\f
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 1:03 [RFA] Don't SEGV on invalid dwarf2 frame info Richard Henderson @ 2003-07-10 20:59 ` Mark Kettenis 2003-07-10 21:21 ` Elena Zannoni 2003-07-10 22:19 ` Elena Zannoni 0 siblings, 2 replies; 11+ messages in thread From: Mark Kettenis @ 2003-07-10 20:59 UTC (permalink / raw) To: Richard Henderson; +Cc: ezannoni, gdb-patches Richard Henderson <rth@twiddle.net> writes: > Elena, this is the patch I was thinking about. > > For the audience, there is at least one bug in current cvs ld's .eh_frame > optimization code that results in padding being added between sections. > But we saw similar problems when we added support for .eh_frame generation > within the assembler (and didn't .align sections), so the discussion in > the patch is a bit more broad than that. > > Does this seem reasonable? It does to me. It's unfortunately that this is necessary, but it makes things more robust, so please check this in. Mark ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 20:59 ` Mark Kettenis @ 2003-07-10 21:21 ` Elena Zannoni 2003-07-10 22:44 ` Richard Henderson 2003-07-10 22:19 ` Elena Zannoni 1 sibling, 1 reply; 11+ messages in thread From: Elena Zannoni @ 2003-07-10 21:21 UTC (permalink / raw) To: Mark Kettenis; +Cc: Richard Henderson, ezannoni, gdb-patches Mark Kettenis writes: > Richard Henderson <rth@twiddle.net> writes: > > > Elena, this is the patch I was thinking about. > > > > For the audience, there is at least one bug in current cvs ld's .eh_frame > > optimization code that results in padding being added between sections. > > But we saw similar problems when we added support for .eh_frame generation > > within the assembler (and didn't .align sections), so the discussion in > > the patch is a bit more broad than that. > > > > Does this seem reasonable? > > It does to me. It's unfortunately that this is necessary, but it > makes things more robust, so please check this in. > > Mark As is, the patch doesn't compile. I'll have updated one in a minute. I also think that there should be a check after reading the initial_length, that such length is within the section. In my case, that's where gdb encounters the first bogus value. elena ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 21:21 ` Elena Zannoni @ 2003-07-10 22:44 ` Richard Henderson 2003-07-10 22:59 ` Elena Zannoni 0 siblings, 1 reply; 11+ messages in thread From: Richard Henderson @ 2003-07-10 22:44 UTC (permalink / raw) To: Elena Zannoni; +Cc: Mark Kettenis, gdb-patches On Thu, Jul 10, 2003 at 05:28:19PM -0400, Elena Zannoni wrote: > As is, the patch doesn't compile. Eh? Certainly it did. > I also think that there should be a check after reading the > initial_length, that such length is within the section. Oops. That got lost during a code rearrangement. I should put it back in... r~ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 22:44 ` Richard Henderson @ 2003-07-10 22:59 ` Elena Zannoni 2003-07-10 23:48 ` Richard Henderson 0 siblings, 1 reply; 11+ messages in thread From: Elena Zannoni @ 2003-07-10 22:59 UTC (permalink / raw) To: Richard Henderson; +Cc: Elena Zannoni, Mark Kettenis, gdb-patches Richard Henderson writes: > On Thu, Jul 10, 2003 at 05:28:19PM -0400, Elena Zannoni wrote: > > As is, the patch doesn't compile. > > Eh? Certainly it did. > there was an include missing, and I was getting a few warnings from the lack of a prototype. > > I also think that there should be a check after reading the > > initial_length, that such length is within the section. > > Oops. That got lost during a code rearrangement. > I should put it back in... > It's in the version I posted. elena > > r~ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 22:59 ` Elena Zannoni @ 2003-07-10 23:48 ` Richard Henderson 0 siblings, 0 replies; 11+ messages in thread From: Richard Henderson @ 2003-07-10 23:48 UTC (permalink / raw) To: Elena Zannoni; +Cc: Mark Kettenis, gdb-patches On Thu, Jul 10, 2003 at 07:06:47PM -0400, Elena Zannoni wrote: > there was an include missing, and I was getting a few warnings from > the lack of a prototype. Hmm. Must have sent the wrong version of the patch. Sorry about that. r~ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 20:59 ` Mark Kettenis 2003-07-10 21:21 ` Elena Zannoni @ 2003-07-10 22:19 ` Elena Zannoni 2003-07-10 22:48 ` Richard Henderson 1 sibling, 1 reply; 11+ messages in thread From: Elena Zannoni @ 2003-07-10 22:19 UTC (permalink / raw) To: Mark Kettenis; +Cc: Richard Henderson, ezannoni, gdb-patches Mark Kettenis writes: > Richard Henderson <rth@twiddle.net> writes: > > > Elena, this is the patch I was thinking about. > > > > For the audience, there is at least one bug in current cvs ld's .eh_frame > > optimization code that results in padding being added between sections. > > But we saw similar problems when we added support for .eh_frame generation > > within the assembler (and didn't .align sections), so the discussion in > > the patch is a bit more broad than that. > > > > Does this seem reasonable? > > It does to me. It's unfortunately that this is necessary, but it > makes things more robust, so please check this in. > > Mark This one seems to work for me (almost no changes, from the original, just added makefile, and other few things, including a check on initial_length.) hmm, wonder if this new output will break some tests... I am checking now. GNU gdb 5.3.90_2003-07-07-cvs Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-unknown-linux-gnu"... Setting up the environment for debugging gdb. .gdbinit:5: Error in sourced command file: Function "internal_error" not defined. (gdb) r Starting program: /home/ezannoni/gdb-6/toomany/gdb/testsuite/gdb.base/break During symbol reading...Corrupt data in /lib64/tls/libm.so.6:.eh_frame; align 4 workaround apparently succeeded... During symbol reading...Corrupt data in /lib64/tls/libc.so.6:.eh_frame; align 4 workaround apparently succeeded... 720 Program exited normally. elena Index: Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/Makefile.in,v retrieving revision 1.410.2.4 diff -u -p -r1.410.2.4 Makefile.in --- Makefile.in 7 Jul 2003 15:57:29 -0000 1.410.2.4 +++ Makefile.in 10 Jul 2003 22:16:39 -0000 @@ -1703,7 +1703,7 @@ dwarf2loc.o: dwarf2loc.c $(defs_h) $(ui_ dwarf2-frame.o: $(defs_h) $(dwarf2expr_h) $(elf_dwarf2_h) $(frame_h) \ $(frame_base_h) $(frame_unwind_h) $(gdbcore_h) $(gdbtypes_h) \ $(symtab_h) $(objfiles_h) $(regcache_h) $(gdb_assert_h) \ - $(gdb_string_h) $(dwarf2_frame_h) + $(gdb_string_h) $(dwarf2_frame_h) $(complaints_h) dwarf2read.o: dwarf2read.c $(defs_h) $(bfd_h) $(symtab_h) $(gdbtypes_h) \ $(symfile_h) $(objfiles_h) $(elf_dwarf2_h) $(buildsym_h) \ $(demangle_h) $(expression_h) $(filenames_h) $(macrotab_h) \ Index: dwarf2-frame.c =================================================================== RCS file: /cvs/uberbaum/gdb/dwarf2-frame.c,v retrieving revision 1.7 diff -u -p -r1.7 dwarf2-frame.c --- dwarf2-frame.c 8 Jun 2003 18:27:13 -0000 1.7 +++ dwarf2-frame.c 10 Jul 2003 22:17:44 -0000 @@ -36,6 +36,7 @@ #include "gdb_assert.h" #include "gdb_string.h" +#include "complaints.h" #include "dwarf2-frame.h" /* Call Frame Information (CFI). */ @@ -1058,35 +1059,44 @@ add_fde (struct comp_unit *unit, struct #define DW64_CIE_ID ~0 #endif -/* Read a CIE or FDE in BUF and decode it. */ +static char *decode_frame_entry (struct comp_unit *unit, char *start, + int eh_frame_p); +/* Decode the next CIE or FDE. Return NULL if invalid input, otherwise + the next byte to be processed. */ static char * -decode_frame_entry (struct comp_unit *unit, char *buf, int eh_frame_p) +decode_frame_entry_1 (struct comp_unit *unit, char *start, int eh_frame_p) { + char *buf; LONGEST length; unsigned int bytes_read; - int dwarf64_p = 0; - ULONGEST cie_id = DW_CIE_ID; + int dwarf64_p; + ULONGEST cie_id; ULONGEST cie_pointer; - char *start = buf; char *end; + buf = start; length = read_initial_length (unit->abfd, buf, &bytes_read); buf += bytes_read; end = buf + length; + /* Are we still within the section? */ + if (end > unit->dwarf_frame_buffer + unit->dwarf_frame_size) + return NULL; + if (length == 0) return end; - if (bytes_read == 12) - dwarf64_p = 1; + /* Distinguish between 32 and 64-bit encoded frame info. */ + dwarf64_p = (bytes_read == 12); - /* In a .eh_frame section, zero is used to distinguish CIEs from - FDEs. */ + /* In a .eh_frame section, zero is used to distinguish CIEs from FDEs. */ if (eh_frame_p) cie_id = 0; else if (dwarf64_p) cie_id = DW64_CIE_ID; + else + cie_id = DW_CIE_ID; if (dwarf64_p) { @@ -1124,7 +1134,8 @@ decode_frame_entry (struct comp_unit *un cie->encoding = encoding_for_size (unit->addr_size); /* Check version number. */ - gdb_assert (read_1_byte (unit->abfd, buf) == DW_CIE_VERSION); + if (read_1_byte (unit->abfd, buf) != DW_CIE_VERSION) + return NULL; buf += 1; /* Interpret the interesting bits of the augmentation. */ @@ -1159,6 +1170,8 @@ decode_frame_entry (struct comp_unit *un length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read); buf += bytes_read; + if (buf > end) + return NULL; cie->initial_instructions = buf + length; augmentation++; } @@ -1211,16 +1224,20 @@ decode_frame_entry (struct comp_unit *un /* This is a FDE. */ struct dwarf2_fde *fde; + /* In an .eh_frame section, the CIE pointer is the delta between the + address within the FDE where the CIE pointer is stored and the + address of the CIE. Convert it to an offset into the .eh_frame + section. */ if (eh_frame_p) { - /* In an .eh_frame section, the CIE pointer is the delta - between the address within the FDE where the CIE pointer - is stored and the address of the CIE. Convert it to an - offset into the .eh_frame section. */ cie_pointer = buf - unit->dwarf_frame_buffer - cie_pointer; cie_pointer -= (dwarf64_p ? 8 : 4); } + /* In either case, validate the result is still within the section. */ + if (cie_pointer >= unit->dwarf_frame_size) + return NULL; + fde = (struct dwarf2_fde *) obstack_alloc (&unit->objfile->psymbol_obstack, sizeof (struct dwarf2_fde)); @@ -1252,6 +1269,8 @@ decode_frame_entry (struct comp_unit *un length = read_unsigned_leb128 (unit->abfd, buf, &bytes_read); buf += bytes_read + length; + if (buf > end) + return NULL; } fde->instructions = buf; @@ -1262,6 +1281,97 @@ decode_frame_entry (struct comp_unit *un return end; } + +/* Read a CIE or FDE in BUF and decode it. */ +static char * +decode_frame_entry (struct comp_unit *unit, char *start, int eh_frame_p) +{ + enum { NONE, ALIGN4, ALIGN8, FAIL } workaround = NONE; + char *ret; + const char *msg; + ptrdiff_t start_offset; + + while (1) + { + ret = decode_frame_entry_1 (unit, start, eh_frame_p); + + if (ret != NULL) + break; + + /* We have corrupt input data of some form. */ + + /* ??? Try, weakly, to work around compiler/assembler/linker bugs + and mismatches wrt padding and alignment of debug sections. */ + /* Note that there is no requirement in the standard for any + alignment at all in the frame unwind sections. Testing for + alignment before trying to interpret data would be incorrect. + + However, GCC traditionally arranged for frame sections to be + sized such that the FDE length and CIE fields happen to be + aligned (in theory, for performance). This, unfortunately, + was done with .align directives, which had the side effect of + forcing the section to be aligned by the linker. + + This becomes a problem when you have some other producer that + creates frame sections that are not as strictly aligned. That + produces a hole in the frame info that gets filled by the + linker with zeros. + + The GCC behaviour is arguably a bug, but it's effectively now + part of the ABI, so we're now stuck with it, at least at the + object file level. A smart linker may decide, in the process + of compressing duplicate CIE information, that it can rewrite + the entire output section without this extra padding. */ + + start_offset = start - unit->dwarf_frame_buffer; + if (workaround <= ALIGN4 && (start_offset & 3) != 0) + { + start += 4 - (start_offset & 3); + workaround = ALIGN4; + continue; + } + if (workaround <= ALIGN8 && (start_offset & 7) != 0) + { + start += 8 - (start_offset & 7); + workaround = ALIGN8; + continue; + } + + /* Nothing left to try. Arrange to return as if we've consumed + the entire input section. Hopefully we'll get valid info from + the other of .debug_frame/.eh_frame. */ + workaround = FAIL; + ret = unit->dwarf_frame_buffer + unit->dwarf_frame_size; + break; + } + + switch (workaround) + { + case NONE: + return ret; + case ALIGN4: + complaint (&symfile_complaints, + "Corrupt data in %s:%s; align 4 workaround apparently succeeded", + unit->dwarf_frame_section->owner->filename, + unit->dwarf_frame_section->name); + break; + case ALIGN8: + complaint (&symfile_complaints, + "Corrupt data in %s:%s; align 8 workaround apparently succeeded", + unit->dwarf_frame_section->owner->filename, + unit->dwarf_frame_section->name); + break; + case FAIL: + complaint (&symfile_complaints, + "Corrupt data in %s:%s", + unit->dwarf_frame_section->owner->filename, + unit->dwarf_frame_section->name); + break; + } + + return ret; +} + \f /* FIXME: kettenis/20030504: This still needs to be integrated with @@ -1307,9 +1417,9 @@ dwarf2_build_frame_info (struct objfile unit.dwarf_frame_section = dwarf_eh_frame_section; /* FIXME: kettenis/20030602: This is the DW_EH_PE_datarel base - that for the i386/amd64 target, which currently is the only - target in GCC that supports/uses the DW_EH_PE_datarel - encoding. */ + that for the i386/amd64 target, which currently is the only + target in GCC that supports/uses the DW_EH_PE_datarel + encoding. */ got = bfd_get_section_by_name (unit.abfd, ".got"); if (got) unit.dbase = got->vma; ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 22:19 ` Elena Zannoni @ 2003-07-10 22:48 ` Richard Henderson 2003-07-10 22:58 ` Elena Zannoni 0 siblings, 1 reply; 11+ messages in thread From: Richard Henderson @ 2003-07-10 22:48 UTC (permalink / raw) To: Elena Zannoni; +Cc: Mark Kettenis, gdb-patches On Thu, Jul 10, 2003 at 06:26:37PM -0400, Elena Zannoni wrote: > + if (workaround <= ALIGN4 && (start_offset & 3) != 0) > + if (workaround <= ALIGN8 && (start_offset & 7) != 0) Just noticed these should be <, not <=. r~ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 22:48 ` Richard Henderson @ 2003-07-10 22:58 ` Elena Zannoni 2003-07-11 16:24 ` Richard Henderson 0 siblings, 1 reply; 11+ messages in thread From: Elena Zannoni @ 2003-07-10 22:58 UTC (permalink / raw) To: Richard Henderson; +Cc: Elena Zannoni, Mark Kettenis, gdb-patches Richard Henderson writes: > On Thu, Jul 10, 2003 at 06:26:37PM -0400, Elena Zannoni wrote: > > + if (workaround <= ALIGN4 && (start_offset & 3) != 0) > > + if (workaround <= ALIGN8 && (start_offset & 7) != 0) > > Just noticed these should be <, not <=. > > > r~ Richard, fix up as you need, I'll let you check it in, so we don't cross in mid air. Feel free to get rid of my name in the changelogs. elena ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-10 22:58 ` Elena Zannoni @ 2003-07-11 16:24 ` Richard Henderson 2003-07-11 16:40 ` Elena Zannoni 0 siblings, 1 reply; 11+ messages in thread From: Richard Henderson @ 2003-07-11 16:24 UTC (permalink / raw) To: Elena Zannoni; +Cc: Mark Kettenis, gdb-patches On Thu, Jul 10, 2003 at 07:05:46PM -0400, Elena Zannoni wrote: > Richard, fix up as you need, I'll let you check it in, so we don't > cross in mid air. Feel free to get rid of my name in the > changelogs. Done. Is separate approval needed for the 6.0 branch? The same patch applies without fuzz there, and tests out ok as well. r~ ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [RFA] Don't SEGV on invalid dwarf2 frame info 2003-07-11 16:24 ` Richard Henderson @ 2003-07-11 16:40 ` Elena Zannoni 0 siblings, 0 replies; 11+ messages in thread From: Elena Zannoni @ 2003-07-11 16:40 UTC (permalink / raw) To: Richard Henderson; +Cc: Elena Zannoni, Mark Kettenis, gdb-patches Richard Henderson writes: > On Thu, Jul 10, 2003 at 07:05:46PM -0400, Elena Zannoni wrote: > > Richard, fix up as you need, I'll let you check it in, so we don't > > cross in mid air. Feel free to get rid of my name in the > > changelogs. > > Done. Is separate approval needed for the 6.0 branch? The same > patch applies without fuzz there, and tests out ok as well. > > > r~ No. Go ahead! thanks elena ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2003-07-11 16:40 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2003-07-10 1:03 [RFA] Don't SEGV on invalid dwarf2 frame info Richard Henderson 2003-07-10 20:59 ` Mark Kettenis 2003-07-10 21:21 ` Elena Zannoni 2003-07-10 22:44 ` Richard Henderson 2003-07-10 22:59 ` Elena Zannoni 2003-07-10 23:48 ` Richard Henderson 2003-07-10 22:19 ` Elena Zannoni 2003-07-10 22:48 ` Richard Henderson 2003-07-10 22:58 ` Elena Zannoni 2003-07-11 16:24 ` Richard Henderson 2003-07-11 16:40 ` Elena Zannoni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox