Re: [patch] update gdb.base/shreloc.exp to use new shared library infrastructure

Wu Zhou
2005-05-09T06:08:57Z

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: multipart/mixed; boundary="-MOQ1115618901005618700ae1a9c93cf03886e26bb139", Size: 32 bytes --]

This message is in MIME format.

[-- Attachment #2: Type: text/plain, Size: 6784 bytes --]

Hi Daniel,

Did you had a chance to review this revised patch? I am now using LTC's
web mail client, which should not do any mangle on the mail. If it still
made trouble to read, please see the attached file for the patch.

Thanks.
- Wu Zhou

Quoting Wu Zhou <woodzltc@cn.ibm.com>:

> > > Can we fix the testcase instead of adding -qdbxextra, by making the
> > > variable referenced? Other compilers do the same optimization, and
> > > some of them don't have a handy option to preserve the variable.
> > >
> >
> > Is it ok to change the following lines in shreloc1.c/shreloc2.c from:
> >
> > ATTRIBUTES void fn_1 (int unused) { }
> > ATTRIBUTES void fn_2 (int unused) { }
> >
> > to:
> >
> > ATTRIBUTES void fn_1 (int refered) { static_var_1 = refered; }
> > ATTRIBUTES void fn_2 (int refered) { static_var_2 = refered; }
> >
> > Please comments. Thanks.
>
> Here goes the revised patch. Wishing that it will not get mangled any more. Please review and comments.
>
> 2005-05-01 Paul Gilliam <pgilliam@us.ibm.com>
> Wu Zhou <woodzltc@cn.ibm.com>
>
> * gdb.base/shreloc.exp: Use gdb_compile_shlib. Add support for
> IBM's xlc compiler.
> * gdb.base/shreloc1.c: Refer variable static_var_1 in fn_1.
> * gdb.base/shreloc2.c: Refer variable static_var_2 in fn_2.
>
> Index: gdb.base/shreloc.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc.exp,v
> retrieving revision 1.2
> diff -c -3 -p -r1.2 shreloc.exp
> *** gdb.base/shreloc.exp 11 Nov 2003 17:58:28 -0000 1.2
> --- gdb.base/shreloc.exp 1 May 2005 02:04:17 -0000
> ***************
> *** 1,4 ****
> ! # Copyright (C) 2003 Free Software Foundation, Inc.
> #
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> --- 1,4 ----
> ! # Copyright (C) 2003, 2005 Free Software Foundation, Inc.
> #
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> ***************
> *** 15,23 ****
> # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
> #
>
> - # Please email any bugs, comments, and/or additions to this file to:
> - # bug-gdb@prep.ai.mit.edu
> -
> # Tests for shared object file relocation. If two shared objects have
> # the same load address (actually, overlapping load spaces), one of
> # them gets relocated at load-time. Check that gdb gets the right
> --- 15,20 ----
> *************** set prms_id 0
> *** 40,71 ****
> set bug_id 0
>
> set workdir ${objdir}/${subdir}
>
> ! foreach module [list "shreloc" "shreloc1" "shreloc2"] {
> ! if {[gdb_compile "${srcdir}/${subdir}/${module}.c" "${workdir}/${module}.o" object {debug}] != ""} {
> ! untested "Couldn't compile ${module}.c"
> ! return -1
> ! }
> }
>
> ! set additional_flags "additional_flags=-shared"
>
> if {([istarget "*pc-cygwin"] || [istarget "*pc-mingw32"]) } {
> ! set additional_flags "${additional_flags} -Wl,--image-base,0x04000000"
> }
>
> ! foreach module [list "shreloc1" "shreloc2"] {
> ! if {[gdb_compile "${workdir}/${module}.o" "${workdir}/${module}.dll" executable [list debug $additional_flags]] != ""} {
> ! untested "Couldn't link ${module}.dll"
> ! return -1
> ! }
> }
>
> ! if {[gdb_compile [list "${workdir}/shreloc.o" "${workdir}/shreloc1.dll" "${workdir}/shreloc2.dll"] "${workdir}/shreloc" executable debug] != ""} {
> ! untested "Couldn't link shreloc executable"
> return -1
> }
>
> gdb_exit
> gdb_start
> gdb_reinitialize_dir $srcdir/$subdir
> --- 37,86 ----
> set bug_id 0
>
> set workdir ${objdir}/${subdir}
> + set testfile "shreloc"
> + set libfile1 "shreloc1"
> + set libfile2 "shreloc2"
> + set srcfile $srcdir/$subdir/$testfile.c
> + set lib1src $srcdir/$subdir/$libfile1.c
> + set lib2src $srcdir/$subdir/$libfile2.c
> + set binfile $objdir/$subdir/$testfile
> + set lib1_sl $objdir/$subdir/$libfile1.sl
> + set lib2_sl $objdir/$subdir/$libfile2.sl
>
> ! if [get_compiler_info ${binfile}] {
> ! return -1
> }
>
> ! set lib_opts "debug"
> ! set exec_opts [list debug shlib=$lib1_sl shlib=$lib2_sl]
>
> if {([istarget "*pc-cygwin"] || [istarget "*pc-mingw32"]) } {
> ! lappend lib_opts "additional_flags=-Wl,--image-base,0x04000000"
> }
>
> ! if [test_compiler_info "xlc-*"] {
> !
> ! # IBM's xlc compiler does not add static variables to the ELF symbol
> ! # table by default. We need this option to make the variables show
> ! # up in "maint print msymbols".
> !
> ! lappend lib_opts "additional_flags=-qstatsym"
> !
> }
>
> ! if { [gdb_compile_shlib $lib1src $lib1_sl $lib_opts] != ""} {
> ! untested "Could not build $lib1_sl."
> ! return -1
> ! } elseif { [gdb_compile_shlib $lib2src $lib2_sl $lib_opts] != ""} {
> ! untested "Could not build $lib1_s2."
> ! return -1
> ! } elseif { [gdb_compile $srcfile $binfile executable $exec_opts] != ""} {
> ! untested "Could not build $binfile."
> return -1
> }
>
> + # Start with a fresh gdb.
> +
> gdb_exit
> gdb_start
> gdb_reinitialize_dir $srcdir/$subdir
> Index: gdb.base/shreloc1.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc1.c,v
> retrieving revision 1.1
> diff -c -3 -p -r1.1 shreloc1.c
> *** gdb.base/shreloc1.c 9 Jun 2003 21:23:53 -0000 1.1
> --- gdb.base/shreloc1.c 1 May 2005 02:04:17 -0000
> ***************
> *** 6,10 ****
>
> static int static_var_1;
>
> ! ATTRIBUTES void fn_1 (int unused) { }
> ATTRIBUTES int extern_var_1 = 0;
> --- 6,10 ----
>
> static int static_var_1;
>
> ! ATTRIBUTES void fn_1 (int refered) { static_var_1 = refered; }
> ATTRIBUTES int extern_var_1 = 0;
> Index: gdb.base/shreloc2.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc2.c,v
> retrieving revision 1.1
> diff -c -3 -p -r1.1 shreloc2.c
> *** gdb.base/shreloc2.c 9 Jun 2003 21:23:53 -0000 1.1
> --- gdb.base/shreloc2.c 1 May 2005 02:04:17 -0000
> ***************
> *** 6,10 ****
>
> static int static_var_2;
>
> ! ATTRIBUTES void fn_2 (int unused) { }
> ATTRIBUTES int extern_var_2 = 0;
> --- 6,10 ----
>
> static int static_var_2;
>
> ! ATTRIBUTES void fn_2 (int refered) { static_var_2 = refered; }
> ATTRIBUTES int extern_var_2 = 0;
> ========================End of this patch================================
>
> Cheers
> - Wu Zhou
>
>

Cheers
- Wu Zhou

[-- Attachment #3: base_shreloc.patch --]
[-- Type: text/plain, Size: 5483 bytes --]

2005-05-01 Paul Gilliam <pgilliam@us.ibm.com>
Wu Zhou <woodzltc@cn.ibm.com>

* gdb.base/shreloc.exp: Use gdb_compile_shlib. Add support for
IBM's xlc compiler.
* gdb.base/shreloc1.c: Refer variable static_var_1 in fn_1.
* gdb.base/shreloc2.c: Refer variable static_var_2 in fn_2.

Index: gdb.base/shreloc.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc.exp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 shreloc.exp
*** gdb.base/shreloc.exp 11 Nov 2003 17:58:28 -0000 1.2
--- gdb.base/shreloc.exp 1 May 2005 02:04:17 -0000
***************
*** 1,4 ****
! # Copyright (C) 2003 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
--- 1,4 ----
! # Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
***************
*** 15,23 ****
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#

- # Please email any bugs, comments, and/or additions to this file to:
- # bug-gdb@prep.ai.mit.edu
-
# Tests for shared object file relocation. If two shared objects have
# the same load address (actually, overlapping load spaces), one of
# them gets relocated at load-time. Check that gdb gets the right
--- 15,20 ----
*************** set prms_id 0
*** 40,71 ****
set bug_id 0

set workdir ${objdir}/${subdir}

! foreach module [list "shreloc" "shreloc1" "shreloc2"] {
! if {[gdb_compile "${srcdir}/${subdir}/${module}.c" "${workdir}/${module}.o" object {debug}] != ""} {
! untested "Couldn't compile ${module}.c"
! return -1
! }
}

! set additional_flags "additional_flags=-shared"

if {([istarget "*pc-cygwin"] || [istarget "*pc-mingw32"]) } {
! set additional_flags "${additional_flags} -Wl,--image-base,0x04000000"
}

! foreach module [list "shreloc1" "shreloc2"] {
! if {[gdb_compile "${workdir}/${module}.o" "${workdir}/${module}.dll" executable [list debug $additional_flags]] != ""} {
! untested "Couldn't link ${module}.dll"
! return -1
! }
}

! if {[gdb_compile [list "${workdir}/shreloc.o" "${workdir}/shreloc1.dll" "${workdir}/shreloc2.dll"] "${workdir}/shreloc" executable debug] != ""} {
! untested "Couldn't link shreloc executable"
return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
--- 37,86 ----
set bug_id 0

set workdir ${objdir}/${subdir}
+ set testfile "shreloc"
+ set libfile1 "shreloc1"
+ set libfile2 "shreloc2"
+ set srcfile $srcdir/$subdir/$testfile.c
+ set lib1src $srcdir/$subdir/$libfile1.c
+ set lib2src $srcdir/$subdir/$libfile2.c
+ set binfile $objdir/$subdir/$testfile
+ set lib1_sl $objdir/$subdir/$libfile1.sl
+ set lib2_sl $objdir/$subdir/$libfile2.sl

! if [get_compiler_info ${binfile}] {
! return -1
}

! set lib_opts "debug"
! set exec_opts [list debug shlib=$lib1_sl shlib=$lib2_sl]

if {([istarget "*pc-cygwin"] || [istarget "*pc-mingw32"]) } {
! lappend lib_opts "additional_flags=-Wl,--image-base,0x04000000"
}

! if [test_compiler_info "xlc-*"] {
!
! # IBM's xlc compiler does not add static variables to the ELF symbol
! # table by default. We need this option to make the variables show
! # up in "maint print msymbols".
!
! lappend lib_opts "additional_flags=-qstatsym"
!
}

! if { [gdb_compile_shlib $lib1src $lib1_sl $lib_opts] != ""} {
! untested "Could not build $lib1_sl."
! return -1
! } elseif { [gdb_compile_shlib $lib2src $lib2_sl $lib_opts] != ""} {
! untested "Could not build $lib1_s2."
! return -1
! } elseif { [gdb_compile $srcfile $binfile executable $exec_opts] != ""} {
! untested "Could not build $binfile."
return -1
}

+ # Start with a fresh gdb.
+
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
Index: gdb.base/shreloc1.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc1.c,v
retrieving revision 1.1
diff -c -3 -p -r1.1 shreloc1.c
*** gdb.base/shreloc1.c 9 Jun 2003 21:23:53 -0000 1.1
--- gdb.base/shreloc1.c 1 May 2005 02:04:17 -0000
***************
*** 6,10 ****

static int static_var_1;

! ATTRIBUTES void fn_1 (int unused) { }
ATTRIBUTES int extern_var_1 = 0;
--- 6,10 ----

static int static_var_1;

! ATTRIBUTES void fn_1 (int refered) { static_var_1 = refered; }
ATTRIBUTES int extern_var_1 = 0;
Index: gdb.base/shreloc2.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/shreloc2.c,v
retrieving revision 1.1
diff -c -3 -p -r1.1 shreloc2.c
*** gdb.base/shreloc2.c 9 Jun 2003 21:23:53 -0000 1.1
--- gdb.base/shreloc2.c 1 May 2005 02:04:17 -0000
***************
*** 6,10 ****

static int static_var_2;

! ATTRIBUTES void fn_2 (int unused) { }
ATTRIBUTES int extern_var_2 = 0;
--- 6,10 ----

static int static_var_2;

! ATTRIBUTES void fn_2 (int refered) { static_var_2 = refered; }
ATTRIBUTES int extern_var_2 = 0;