]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Do not use ld.so to open statically linked programs in debugglibc.sh
authorGabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Wed, 4 Dec 2019 01:40:38 +0000 (22:40 -0300)
committerGabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Wed, 4 Dec 2019 12:17:06 +0000 (09:17 -0300)
Debugging programs that have been dynamically linked against an
uninstalled glibc requires unusual steps, such as letting gdb know where
the thread db library is located and explicitly calling the loader.
However, when the program under test is statically linked, these steps
are not required (as a matter of fact, using the dynamic loader to run a
statically linked program is wrong and will fail), and gdb should be
called the usual way.

This patch modifies debugglibc.sh so that it checks if the program under
test is statically linked, then runs the debugger appropriately.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Makefile

index 924fdb6c0f5f6bb57a0593f9fcbdf983f60de85d..b43226c35ae7c5ad87ed0c58292ed27d001fa58a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -209,6 +209,7 @@ BUILD_DIR="$(common-objpfx)"
 CMD_FILE="$(common-objpfx)debugglibc.gdb"
 CONTAINER=false
 DIRECT=true
+STATIC=false
 SYMBOLSFILE=true
 unset TESTCASE
 unset BREAKPOINTS
@@ -297,8 +298,8 @@ do
   shift
 done
 
-# Check for required argument
-if [ ! -v TESTCASE ]
+# Check for required argument and if the testcase exists
+if [ ! -v TESTCASE ] || [ ! -f $${TESTCASE} ]
 then
   usage
   exit 1
@@ -318,6 +319,14 @@ else
   DIRECT=""
 fi
 
+# Check if the test case is static
+if file $${TESTCASE} | grep "statically linked" >/dev/null
+then
+  STATIC=true
+else
+  STATIC=false
+fi
+
 # Expand symbols loading command
 if [ "$$SYMBOLSFILE" == true ]
 then
@@ -366,6 +375,9 @@ then
 # automatically attach GDB to it.
 WAIT_FOR_DEBUGGER=1 $(common-objpfx)testrun.sh --tool=container $${TESTCASE} &
 gdb -x $${TESTCASE}.gdb
+elif [ "$$STATIC" == true ]
+then
+gdb $${TESTCASE}
 else
 # Start the test case debugging in two steps:
 #   1. the following command invokes gdb to run the loader;