From 54d5e1445c952909f7dd1b042afddc3429c3dc99 Mon Sep 17 00:00:00 2001 From: John Dallaway Date: Sun, 2 Jul 2023 14:49:00 +0100 Subject: [PATCH] Support DWARF attribute form DW_FORM_implicit_const --- .../.settings/.api_filters | 6 +++++ .../org.eclipse.cdt.core/META-INF/MANIFEST.MF | 2 +- .../eclipse/cdt/utils/debug/dwarf/Dwarf.java | 26 +++++++++++++++---- .../cdt/utils/debug/dwarf/DwarfConstants.java | 5 ++++ 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core/.settings/.api_filters b/core/org.eclipse.cdt.core/.settings/.api_filters index dda81c3a1bc..51035270037 100644 --- a/core/org.eclipse.cdt.core/.settings/.api_filters +++ b/core/org.eclipse.cdt.core/.settings/.api_filters @@ -1,6 +1,12 @@ + + + + + + diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF index 82693b61112..8d1303efaa9 100644 --- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.core; singleton:=true -Bundle-Version: 8.2.200.qualifier +Bundle-Version: 8.3.0.qualifier Bundle-Activator: org.eclipse.cdt.core.CCorePlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java index 8750f348af2..fca32d3f41c 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/debug/dwarf/Dwarf.java @@ -13,6 +13,7 @@ * Salvatore Culcasi - Bug 322475 * Serge Beauchamp - Bug 409916 * John Dallaway - Support DW_FORM_line_strp (#198) + * John Dallaway - Support DW_FORM_implicit_const (#443) *******************************************************************************/ package org.eclipse.cdt.utils.debug.dwarf; @@ -109,17 +110,21 @@ class Attribute { long name; /* unsigned */ long form; + /* signed (for DW_FORM_implicit_const) */ + long value; - Attribute(long n, long f) { + Attribute(long n, long f, long v) { name = n; form = f; + value = v; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("name: ").append(Long.toHexString(name)); //$NON-NLS-1$ - sb.append(" value: ").append(Long.toHexString(form)); //$NON-NLS-1$ + sb.append(" form: ").append(Long.toHexString(form)); //$NON-NLS-1$ + sb.append(" value: ").append(Long.toHexString(value)); //$NON-NLS-1$ return sb.toString(); } } @@ -579,11 +584,17 @@ Map parseDebugAbbreviation(CompilationUnitHeader header do { name = read_unsigned_leb128(data); form = read_unsigned_leb128(data); + long value = 0; + if (DwarfConstants.DW_FORM_implicit_const == form) { + value = read_signed_leb128(data); + } if (name != 0) { - entry.attributes.add(new Attribute(name, form)); + entry.attributes.add(new Attribute(name, form, value)); } if (printEnabled) - System.out.println("\t\t " + Long.toHexString(name) + " " + Long.toHexString(form)); //$NON-NLS-1$ //$NON-NLS-2$ + System.out.println("\t\t " + Long.toHexString(name) //$NON-NLS-1$ + + " " + Long.toHexString(form) //$NON-NLS-1$ + + " " + Long.toHexString(value)); //$NON-NLS-1$ } while (name != 0 && form != 0); abbrevs.put(Long.valueOf(code), entry); } @@ -603,7 +614,12 @@ void parseDebugInfoEntry(IDebugEntryRequestor requestor, ByteBuffer in, Map