Re-introduce '_start' labels and add alignment in dw2-dir-file-name test case.

On ppc64-linux a function symbol does not point to code, but to the
function descriptor.  Thus the previous change for this test case
broke it:

      https://sourceware.org/ml/gdb-patches/2014-01/msg00275.html

This patch reverts to the original method, re-introducing '_start'
symbols.  In addition, it adds sufficient alignment before the label,
such that the label never points into an alignment gap.

gdb/testsuite/ChangeLog:
	* gdb.dwarf2/dw2-dir-file-name.c (FUNC): Insert alignment and
	define "*_start" label.  Make "name" static.
	* gdb.dwarf2/dw2-dir-file-name.exp: Replace references to
	${name} by references to ${name}_start.
This commit is contained in:
Andreas Arnez 2014-01-22 15:33:00 +00:00 committed by Andreas Krebbel
parent 7846671423
commit 20fa339009
3 changed files with 19 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2014-01-22 Andreas Arnez <arnez@vnet.linux.ibm.com>
* gdb.dwarf2/dw2-dir-file-name.c (FUNC): Insert alignment and
define "*_start" label. Make "name" static.
* gdb.dwarf2/dw2-dir-file-name.exp: Replace references to
${name} by references to ${name}_start.
2014-01-22 Andreas Arnez <arnez@vnet.linux.ibm.com>
* gdb.base/info-macros.exp: Remove "debug" from the compile

View File

@ -63,8 +63,16 @@ FUNC (compdir_absolute_ldir_absolute_file_relative_different) \
FUNC (compdir_absolute_ldir_absolute_file_absolute_same) \
FUNC (compdir_absolute_ldir_absolute_file_absolute_different)
/* Notes: (1) The '*_start' label below is needed because 'name' may
point to a function descriptor instead of to the actual code. (2)
The '.balign' should specify the highest possible function
alignment across all supported architectures, such that the label
never points into the alignment gap. */
#define FUNC(name) \
void \
asm (".balign 8"); \
asm (#name "_start: .globl " #name "_start\n"); \
static void \
name (void) \
{ \
v++; \

View File

@ -54,7 +54,7 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.ascii \"GNU C\\0\" /* DW_AT_producer */
.byte 2 /* DW_AT_language (DW_LANG_C) */
.4byte .Lline_${name}_begin /* DW_AT_stmt_list */
.4byte ${name} /* DW_AT_low_pc */
.4byte ${name}_start /* DW_AT_low_pc */
.4byte ${name}_end /* DW_AT_high_pc */
"
if { $cu_dir != "" } {
@ -65,7 +65,7 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.uleb128 3 /* Abbrev: DW_TAG_subprogram */
.asciz \"${name}\" /* DW_AT_name */
.4byte ${name} /* DW_AT_low_pc */
.4byte ${name}_start /* DW_AT_low_pc */
.4byte ${name}_end /* DW_AT_high_pc */
.byte 0 /* End of children of CU */
@ -122,7 +122,7 @@ proc out_line { name cu_dir cu_name line_dir line_name } {
.byte 0 /* DW_LNE_set_address */
.uleb128 5
.byte 2
.4byte ${name}
.4byte ${name}_start
.byte 1 /* DW_LNS_copy */
.byte 3 /* DW_LNS_advance_line */
.sleb128 1 /* ... to 1000 */