]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/contrib/gdb-add-index.sh
DWARF-5: .debug_names index producer
[thirdparty/binutils-gdb.git] / gdb / contrib / gdb-add-index.sh
index 0cd4ce3c9d679f52da9897bcd59cabd9d5f63350..02b17f0fc060840ef00ef5cfc8c67b412adf594f 100755 (executable)
@@ -37,11 +37,15 @@ fi
 
 dir="${file%/*}"
 test "$dir" = "$file" && dir="."
-index="${file}.gdb-index"
+index4="${file}.gdb-index"
+index5="${file}.debug_names"
+debugstr="${file}.debug_str"
+debugstrmerge="${file}.debug_str.merge"
+debugstrerr="${file}.debug_str.err"
 
-rm -f $index
+rm -f $index4 $index5 $debugstr $debugstrmerge $debugstrerr
 # Ensure intermediate index file is removed when we exit.
-trap "rm -f $index" 0
+trap "rm -f $index4 $index5 $debugstr $debugstrmerge $debugstrerr" 0
 
 $GDB --batch -nx -iex 'set auto-load no' \
     -ex "file $file" -ex "save gdb-index $dir" || {
@@ -57,9 +61,46 @@ $GDB --batch -nx -iex 'set auto-load no' \
 # already stripped binary, it's a no-op.
 status=0
 
-if test -f "$index"; then
-    $OBJCOPY --add-section .gdb_index="$index" \
-       --set-section-flags .gdb_index=readonly "$file" "$file"
+if test -f "$index4" -a -f "$index5"; then
+    echo "$myname: Both index types were created for $file" 1>&2
+    status=1
+elif test -f "$index4" -o -f "$index5"; then
+    if test -f "$index4"; then
+       index="$index4"
+       section=".gdb_index"
+    else
+       index="$index5"
+       section=".debug_names"
+    fi
+    debugstradd=false
+    debugstrupdate=false
+    if test -s "$debugstr"; then
+       if ! $OBJCOPY --dump-section .debug_str="$debugstrmerge" "$file" /dev/null \
+                2>$debugstrerr; then
+           cat >&2 $debugstrerr
+           exit 1
+       fi
+       if grep -q "can't dump section '.debug_str' - it does not exist" \
+                 $debugstrerr; then
+           debugstradd=true
+       else
+           debugstrupdate=true
+           cat >&2 $debugstrerr
+       fi
+       cat "$debugstr" >>"$debugstrmerge"
+    fi
+
+    $OBJCOPY --add-section $section="$index" \
+       --set-section-flags $section=readonly \
+       $(if $debugstradd; then \
+             echo --add-section .debug_str="$debugstrmerge"; \
+             echo --set-section-flags .debug_str=readonly; \
+         fi; \
+         if $debugstrupdate; then \
+             echo --update-section .debug_str="$debugstrmerge"; \
+         fi) \
+       "$file" "$file"
+
     status=$?
 else
     echo "$myname: No index was created for $file" 1>&2