element DW_OP_call_frame_cfa before decoding the opcodes. Remove the later
DW_OP_call_frame_cfa push to RESULT.
Signed-off-by: Jan Kratochvil <jan.kratochvil@redhat.com>
2012-10-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+ * dwarf_getlocation.c (__libdw_intern_expression) <cfap>: Make new
+ loclist element DW_OP_call_frame_cfa before decoding the opcodes.
+ Remove the later DW_OP_call_frame_cfa push to RESULT.
+
+2012-10-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Code cleanup.
* fde.c (binary_search_fde): Remove always true <address >= start>
conditional. Move L initialization upwards.
struct loclist *loclist = NULL;
unsigned int n = 0;
+
+ if (cfap)
+ {
+ /* Synthesize the operation to push the CFA before the expression. */
+ struct loclist *newloc;
+ newloc = (struct loclist *) alloca (sizeof (struct loclist));
+ newloc->atom = DW_OP_call_frame_cfa;
+ newloc->number = 0;
+ newloc->number2 = 0;
+ newloc->offset = -1;
+ newloc->next = loclist;
+ loclist = newloc;
+ ++n;
+ }
+
/* Decode the opcodes. It is possible in some situations to have a
block of size zero. */
while (data < end_data)
++n;
}
- if (cfap)
- ++n;
-
/* Allocate the array. */
Dwarf_Op *result;
if (dbg != NULL)
*llbuf = result;
*listlen = n;
- if (cfap)
- {
- /* Synthesize the operation to push the CFA before the expression. */
- --n;
- result[0].atom = DW_OP_call_frame_cfa;
- result[0].number = 0;
- result[0].number2 = 0;
- result[0].offset = -1;
- }
-
do
{
/* We populate the array from the back since the list is backwards. */