[PATCH] Fix for incorect breakpoint set in case of clang compiled binary

Mark Kettenis mark.kettenis@xs4all.nl
Tue Dec 4 07:10:00 GMT 2012


> Date: Tue, 04 Dec 2012 06:09:29 +0000 (GMT)
> From: KARTHIKVENKATESH BHAT <kv.bhat@samsung.com>
> 
> Hi Mark/Tom/Palves,
> Thanks for taking your time out for review.
> I have implemented the review comments. Please let me know if i can commit the same.
> 
> cvs diff: Diffing .
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/src/src/gdb/ChangeLog,v
> retrieving revision 1.14880
> diff -u -p -r1.14880 ChangeLog
> --- ChangeLog	3 Dec 2012 22:31:02 -0000	1.14880
> +++ ChangeLog	4 Dec 2012 05:06:29 -0000
> @@ -1,3 +1,10 @@
> +2012-12-04  Karthik Bhat  <kv.bhat@samsung.com>
> +
> +	* i386-tdep.c (i386_skip_prologue): Using symbol table
> +	to find the end of prologue for clang compiled binaries.
> +	* amd64-tdep.c (amd64_skip_prologue):Using symbol table
> +	to find the end of prologue for clang compiled binaries.

Missing space between : and Using in your ChangeLog entry.  Otherwise
this looks ok to me.

> Index: amd64-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/amd64-tdep.c,v
> retrieving revision 1.115
> diff -u -p -r1.115 amd64-tdep.c
> --- amd64-tdep.c	26 Oct 2012 19:34:09 -0000	1.115
> +++ amd64-tdep.c	4 Dec 2012 05:06:30 -0000
> @@ -2252,6 +2252,22 @@ amd64_skip_prologue (struct gdbarch *gdb
>  {
>    struct amd64_frame_cache cache;
>    CORE_ADDR pc;
> +  CORE_ADDR func_addr;
> +
> +  if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
> +    {
> +      CORE_ADDR post_prologue_pc
> +	= skip_prologue_using_sal (gdbarch, func_addr);
> +      struct symtab *s = find_pc_symtab (func_addr);
> +
> +      /* Clang always emits a line note before the prologue and another
> +	 one after.  We trust clang to emit usable line notes.  */
> +      if (post_prologue_pc
> +	  && (s != NULL
> +	      && s->producer != NULL
> +	      && strncmp (s->producer, "clang ", sizeof ("clang ") - 1) == 0))
> +        return max (start_pc, post_prologue_pc);
> +    }
>  
>    amd64_init_frame_cache (&cache);
>    pc = amd64_analyze_prologue (gdbarch, start_pc, 0xffffffffffffffffLL,
> Index: i386-tdep.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/i386-tdep.c,v
> retrieving revision 1.364
> diff -u -p -r1.364 i386-tdep.c
> --- i386-tdep.c	21 Nov 2012 14:09:10 -0000	1.364
> +++ i386-tdep.c	4 Dec 2012 05:06:30 -0000
> @@ -1582,7 +1582,23 @@ i386_skip_prologue (struct gdbarch *gdba
>    CORE_ADDR pc;
>    gdb_byte op;
>    int i;
> +  CORE_ADDR func_addr;
>  
> +  if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
> +    {
> +      CORE_ADDR post_prologue_pc
> +	= skip_prologue_using_sal (gdbarch, func_addr);
> +      struct symtab *s = find_pc_symtab (func_addr);
> +
> +      /* Clang always emits a line note before the prologue and another
> +	 one after.  We trust clang to emit usable line notes.  */
> +      if (post_prologue_pc
> +	  && (s != NULL
> +	      && s->producer != NULL
> +	      && strncmp (s->producer, "clang ", sizeof ("clang ") - 1) == 0))
> +        return max (start_pc, post_prologue_pc);
> +    }
> + 
>    cache.locals = -1;
>    pc = i386_analyze_prologue (gdbarch, start_pc, 0xffffffff, &cache);
>    if (cache.locals < 0)
> 



More information about the Gdb-patches mailing list