[PATCH 11/11] Add test for objdump new feature which display global variable information based on DWARF info section
Guillaume VACHERIAS
guillaume.vacherias@foss.st.com
Thu May 22 11:03:35 GMT 2025
---
.../testsuite/binutils-all/dw5-map-complex.S | 809 ++++++++++++++++++
binutils/testsuite/binutils-all/dw5-map.S | 430 ++++++++++
binutils/testsuite/binutils-all/dw5.Y | 5 +
.../testsuite/binutils-all/objdump-complex.Y | 86 ++
binutils/testsuite/binutils-all/objdump.Y | 25 +
binutils/testsuite/binutils-all/objdump.exp | 68 ++
6 files changed, 1423 insertions(+)
create mode 100644 binutils/testsuite/binutils-all/dw5-map-complex.S
create mode 100644 binutils/testsuite/binutils-all/dw5-map.S
create mode 100644 binutils/testsuite/binutils-all/dw5.Y
create mode 100644 binutils/testsuite/binutils-all/objdump-complex.Y
create mode 100644 binutils/testsuite/binutils-all/objdump.Y
diff --git a/binutils/testsuite/binutils-all/dw5-map-complex.S b/binutils/testsuite/binutils-all/dw5-map-complex.S
new file mode 100644
index 00000000000..33bfa632af1
--- /dev/null
+++ b/binutils/testsuite/binutils-all/dw5-map-complex.S
@@ -0,0 +1,809 @@
+/* Copyright (C) 2017-2023 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/*
+// Original dw5-map-complex.c file
+
+#include <stdio.h>
+
+// Global integer variable
+int globalInt = 42;
+
+// Global character variable
+char globalChar = 'A';
+
+// Global enumeration
+enum Color { RED, GREEN, BLUE };
+enum Color globalColor = GREEN;
+
+// Global array
+int globalArray[5] = {1, 2, 3, 4, 5};
+
+// Global pointer
+int* globalPointer = &globalInt;
+
+// Global constant
+const double globalConstant = 3.14159;
+
+// Global union
+union Data {
+ int intVal;
+ float floatVal;
+ char charVal;
+};
+union Data globalData = { .intVal = 100 };
+
+// Typedef for structure
+struct Person {
+ char name[50];
+ int age;
+};
+
+// Global structure
+struct Person globalPerson = {"Alice", 30};
+
+// Array of structures
+struct Person globalPeople[3] = {
+ {"Bob", 25},
+ {"Charlie", 35},
+ {"Diana", 28}
+};
+
+// Recursive structure
+struct Node {
+ int value;
+ struct Node* next;
+};
+struct Node globalNode = {10, NULL};
+
+// Array of enumeration
+enum Color globalColors[3] = {RED, GREEN, BLUE};
+
+// Array of unions
+union Data globalDataArray[2] = {
+ {.intVal = 200},
+ {.charVal = 'Z'}
+};
+
+// Array of pointers
+int* globalPointerArray[3] = {&globalArray[0], &globalArray[1], &globalArray[2]}; */
+
+ .file "dw5-map-complex.c"
+ .text
+.Ltext0:
+ .cfi_sections .debug_frame
+ .file 1 "dw5-map-complex.c"
+ .global globalInt
+ .data
+ .align 2
+ .type globalInt, %object
+ .size globalInt, 4
+globalInt:
+ .word 42
+ .global globalChar
+ .type globalChar, %object
+ .size globalChar, 1
+globalChar:
+ .byte 65
+ .global globalColor
+ .type globalColor, %object
+ .size globalColor, 1
+globalColor:
+ .byte 1
+ .global globalArray
+ .align 2
+ .type globalArray, %object
+ .size globalArray, 20
+globalArray:
+ .word 1
+ .word 2
+ .word 3
+ .word 4
+ .word 5
+ .global globalPointer
+ .align 2
+ .type globalPointer, %object
+ .size globalPointer, 4
+globalPointer:
+ .word globalInt
+ .global globalConstant
+ .section .rodata
+ .align 3
+ .type globalConstant, %object
+ .size globalConstant, 8
+globalConstant:
+ .word -266631570
+ .word 1074340345
+ .global globalData
+ .data
+ .align 2
+ .type globalData, %object
+ .size globalData, 4
+globalData:
+ .word 100
+ .global globalPerson
+ .align 2
+ .type globalPerson, %object
+ .size globalPerson, 56
+globalPerson:
+ .ascii "Alice\000"
+ .space 44
+ .space 2
+ .word 30
+ .global globalPeople
+ .align 2
+ .type globalPeople, %object
+ .size globalPeople, 168
+globalPeople:
+ .ascii "Bob\000"
+ .space 46
+ .space 2
+ .word 25
+ .ascii "Charlie\000"
+ .space 42
+ .space 2
+ .word 35
+ .ascii "Diana\000"
+ .space 44
+ .space 2
+ .word 28
+ .global globalNode
+ .align 2
+ .type globalNode, %object
+ .size globalNode, 8
+globalNode:
+ .word 10
+ .word 0
+ .global globalColors
+ .align 2
+ .type globalColors, %object
+ .size globalColors, 3
+globalColors:
+ .byte 0
+ .byte 1
+ .byte 2
+ .global globalDataArray
+ .align 2
+ .type globalDataArray, %object
+ .size globalDataArray, 8
+globalDataArray:
+ .word 200
+ .byte 90
+ .space 3
+ .global globalPointerArray
+ .align 2
+ .type globalPointerArray, %object
+ .size globalPointerArray, 12
+globalPointerArray:
+ .word globalArray
+ .word globalArray+4
+ .word globalArray+8
+ .text
+.Letext0:
+ .section .debug_info,"",%progbits
+.Ldebug_info0:
+ .4byte 0x266
+ .2byte 0x5
+ .byte 0x1
+ .byte 0x4
+ .4byte .Ldebug_abbrev0
+ .uleb128 0xa
+ .4byte .LASF36
+ .byte 0x1d
+ .4byte .LASF37
+ .4byte .LASF38
+ .4byte .Ldebug_line0
+ .uleb128 0x1
+ .byte 0x1
+ .byte 0x6
+ .4byte .LASF0
+ .uleb128 0x1
+ .byte 0x1
+ .byte 0x8
+ .4byte .LASF1
+ .uleb128 0x1
+ .byte 0x2
+ .byte 0x5
+ .4byte .LASF2
+ .uleb128 0x1
+ .byte 0x2
+ .byte 0x7
+ .4byte .LASF3
+ .uleb128 0x1
+ .byte 0x4
+ .byte 0x5
+ .4byte .LASF4
+ .uleb128 0x1
+ .byte 0x4
+ .byte 0x7
+ .4byte .LASF5
+ .uleb128 0x1
+ .byte 0x8
+ .byte 0x5
+ .4byte .LASF6
+ .uleb128 0x1
+ .byte 0x8
+ .byte 0x7
+ .4byte .LASF7
+ .uleb128 0xb
+ .byte 0x4
+ .byte 0x5
+ .ascii "int\000"
+ .uleb128 0x1
+ .byte 0x4
+ .byte 0x7
+ .4byte .LASF8
+ .uleb128 0x1
+ .byte 0x8
+ .byte 0x4
+ .4byte .LASF9
+ .uleb128 0x1
+ .byte 0x1
+ .byte 0x8
+ .4byte .LASF10
+ .uleb128 0x2
+ .4byte .LASF11
+ .byte 0x4
+ .byte 0x5
+ .4byte 0x56
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalInt
+ .uleb128 0x2
+ .4byte .LASF12
+ .byte 0x7
+ .byte 0x6
+ .4byte 0x6b
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalChar
+ .uleb128 0xc
+ .4byte .LASF39
+ .byte 0x7
+ .byte 0x1
+ .4byte 0x25
+ .byte 0x1
+ .byte 0xa
+ .byte 0x6
+ .4byte 0xb9
+ .uleb128 0xd
+ .ascii "RED\000"
+ .byte 0
+ .uleb128 0x7
+ .4byte .LASF13
+ .byte 0x1
+ .uleb128 0x7
+ .4byte .LASF14
+ .byte 0x2
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF15
+ .byte 0xb
+ .byte 0xc
+ .4byte 0x94
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalColor
+ .uleb128 0x3
+ .4byte 0x56
+ .4byte 0xda
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x4
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF16
+ .byte 0xe
+ .byte 0x5
+ .4byte 0xca
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalArray
+ .uleb128 0x2
+ .4byte .LASF17
+ .byte 0x11
+ .byte 0x6
+ .4byte 0xfc
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalPointer
+ .uleb128 0x8
+ .4byte 0x56
+ .uleb128 0x2
+ .4byte .LASF18
+ .byte 0x14
+ .byte 0xe
+ .4byte 0x119
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalConstant
+ .uleb128 0x1
+ .byte 0x8
+ .byte 0x4
+ .4byte .LASF19
+ .uleb128 0xe
+ .4byte 0x112
+ .uleb128 0xf
+ .4byte .LASF40
+ .byte 0x4
+ .byte 0x1
+ .byte 0x17
+ .byte 0x7
+ .4byte 0x14d
+ .uleb128 0x5
+ .4byte .LASF20
+ .byte 0x18
+ .byte 0x9
+ .4byte 0x56
+ .uleb128 0x5
+ .4byte .LASF21
+ .byte 0x19
+ .byte 0xb
+ .4byte 0x14d
+ .uleb128 0x5
+ .4byte .LASF22
+ .byte 0x1a
+ .byte 0xa
+ .4byte 0x6b
+ .byte 0
+ .uleb128 0x1
+ .byte 0x4
+ .byte 0x4
+ .4byte .LASF23
+ .uleb128 0x2
+ .4byte .LASF24
+ .byte 0x1c
+ .byte 0xc
+ .4byte 0x11e
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalData
+ .uleb128 0x9
+ .4byte .LASF28
+ .byte 0x38
+ .byte 0x1f
+ .4byte 0x18a
+ .uleb128 0x6
+ .4byte .LASF25
+ .byte 0x20
+ .byte 0xa
+ .4byte 0x18a
+ .byte 0
+ .uleb128 0x10
+ .ascii "age\000"
+ .byte 0x1
+ .byte 0x21
+ .byte 0x9
+ .4byte 0x56
+ .byte 0x34
+ .byte 0
+ .uleb128 0x3
+ .4byte 0x6b
+ .4byte 0x19a
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x31
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF26
+ .byte 0x25
+ .byte 0xf
+ .4byte 0x165
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalPerson
+ .uleb128 0x3
+ .4byte 0x165
+ .4byte 0x1bb
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x2
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF27
+ .byte 0x28
+ .byte 0xf
+ .4byte 0x1ab
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalPeople
+ .uleb128 0x9
+ .4byte .LASF29
+ .byte 0x8
+ .byte 0x2f
+ .4byte 0x1f0
+ .uleb128 0x6
+ .4byte .LASF30
+ .byte 0x30
+ .byte 0x9
+ .4byte 0x56
+ .byte 0
+ .uleb128 0x6
+ .4byte .LASF31
+ .byte 0x31
+ .byte 0x12
+ .4byte 0x1f0
+ .byte 0x4
+ .byte 0
+ .uleb128 0x8
+ .4byte 0x1cc
+ .uleb128 0x2
+ .4byte .LASF32
+ .byte 0x33
+ .byte 0xd
+ .4byte 0x1cc
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalNode
+ .uleb128 0x3
+ .4byte 0x94
+ .4byte 0x216
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x2
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF33
+ .byte 0x36
+ .byte 0xc
+ .4byte 0x206
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalColors
+ .uleb128 0x3
+ .4byte 0x11e
+ .4byte 0x237
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x1
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF34
+ .byte 0x39
+ .byte 0xc
+ .4byte 0x227
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalDataArray
+ .uleb128 0x3
+ .4byte 0xfc
+ .4byte 0x258
+ .uleb128 0x4
+ .4byte 0x5d
+ .byte 0x2
+ .byte 0
+ .uleb128 0x2
+ .4byte .LASF35
+ .byte 0x3f
+ .byte 0x6
+ .4byte 0x248
+ .uleb128 0x5
+ .byte 0x3
+ .4byte globalPointerArray
+ .byte 0
+ .section .debug_abbrev,"",%progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1
+ .uleb128 0x24
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0
+ .byte 0
+ .uleb128 0x2
+ .uleb128 0x34
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0x19
+ .uleb128 0x2
+ .uleb128 0x18
+ .byte 0
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0x1
+ .byte 0x1
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x4
+ .uleb128 0x21
+ .byte 0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2f
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0x5
+ .uleb128 0xd
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x6
+ .uleb128 0xd
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0x7
+ .uleb128 0x28
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1c
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0x8
+ .uleb128 0xf
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0x21
+ .sleb128 4
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x9
+ .uleb128 0x13
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0x21
+ .sleb128 8
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0xa
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1b
+ .uleb128 0xe
+ .uleb128 0x10
+ .uleb128 0x17
+ .byte 0
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0x24
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0
+ .byte 0
+ .uleb128 0xc
+ .uleb128 0x4
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0xd
+ .uleb128 0x28
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x1c
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0xe
+ .uleb128 0x26
+ .byte 0
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0xf
+ .uleb128 0x17
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x10
+ .uleb128 0xd
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0x8
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_aranges,"",%progbits
+ .4byte 0x14
+ .2byte 0x2
+ .4byte .Ldebug_info0
+ .byte 0x4
+ .byte 0
+ .2byte 0
+ .2byte 0
+ .4byte 0
+ .4byte 0
+ .section .debug_line,"",%progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",%progbits,1
+.LASF21:
+ .ascii "floatVal\000"
+.LASF12:
+ .ascii "globalChar\000"
+.LASF29:
+ .ascii "Node\000"
+.LASF31:
+ .ascii "next\000"
+.LASF30:
+ .ascii "value\000"
+.LASF33:
+ .ascii "globalColors\000"
+.LASF17:
+ .ascii "globalPointer\000"
+.LASF23:
+ .ascii "float\000"
+.LASF32:
+ .ascii "globalNode\000"
+.LASF1:
+ .ascii "unsigned char\000"
+.LASF34:
+ .ascii "globalDataArray\000"
+.LASF5:
+ .ascii "long unsigned int\000"
+.LASF27:
+ .ascii "globalPeople\000"
+.LASF3:
+ .ascii "short unsigned int\000"
+.LASF16:
+ .ascii "globalArray\000"
+.LASF19:
+ .ascii "double\000"
+.LASF22:
+ .ascii "charVal\000"
+.LASF40:
+ .ascii "Data\000"
+.LASF2:
+ .ascii "short int\000"
+.LASF13:
+ .ascii "GREEN\000"
+.LASF15:
+ .ascii "globalColor\000"
+.LASF37:
+ .ascii "dw5-map-complex.c\000"
+.LASF11:
+ .ascii "globalInt\000"
+.LASF8:
+ .ascii "unsigned int\000"
+.LASF14:
+ .ascii "BLUE\000"
+.LASF28:
+ .ascii "Person\000"
+.LASF7:
+ .ascii "long long unsigned int\000"
+.LASF20:
+ .ascii "intVal\000"
+.LASF26:
+ .ascii "globalPerson\000"
+.LASF24:
+ .ascii "globalData\000"
+.LASF6:
+ .ascii "long long int\000"
+.LASF39:
+ .ascii "Color\000"
+.LASF25:
+ .ascii "name\000"
+.LASF35:
+ .ascii "globalPointerArray\000"
+.LASF38:
+ .ascii "/home/vacherig/gcc-workdir/upstream/binutils-gdb\000"
+.LASF4:
+ .ascii "long int\000"
+.LASF10:
+ .ascii "char\000"
+.LASF9:
+ .ascii "long double\000"
+.LASF18:
+ .ascii "globalConstant\000"
+.LASF0:
+ .ascii "signed char\000"
diff --git a/binutils/testsuite/binutils-all/dw5-map.S b/binutils/testsuite/binutils-all/dw5-map.S
new file mode 100644
index 00000000000..928ea87374e
--- /dev/null
+++ b/binutils/testsuite/binutils-all/dw5-map.S
@@ -0,0 +1,430 @@
+/* Copyright (C) 2017-2023 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+ .cpu cortex-m0
+ .arch armv6s-m
+ .fpu softvfp
+ .eabi_attribute 20, 1
+ .eabi_attribute 21, 1
+ .eabi_attribute 23, 3
+ .eabi_attribute 24, 1
+ .eabi_attribute 25, 1
+ .eabi_attribute 26, 1
+ .eabi_attribute 30, 6
+ .eabi_attribute 34, 0
+ .eabi_attribute 18, 4
+ .file "dw5-map.c"
+ .text
+.Ltext0:
+ .cfi_sections .debug_frame
+ .global var_base
+ .bss
+ .align 2
+ .type var_base, %object
+ .size var_base, 4
+var_base:
+ .space 4
+ .global var_arry
+ .data
+ .align 2
+ .type var_arry, %object
+ .size var_arry, 4
+var_arry:
+ .ascii "abc\000"
+ .global var_enum
+ .type var_enum, %object
+ .size var_enum, 1
+var_enum:
+ .byte 1
+ .global var_struct
+ .align 2
+ .type var_struct, %object
+ .size var_struct, 12
+var_struct:
+ .word 0
+ .word 0
+ .byte 97
+ .space 3
+ .global var_union
+ .bss
+ .align 2
+ .type var_union, %object
+ .size var_union, 4
+var_union:
+ .space 4
+ .text
+.Letext0:
+ .file 1 "dw5-map.c"
+ .section .debug_info,"",%progbits
+.Ldebug_info0:
+ .4byte 0x111
+ .2byte 0x5
+ .byte 0x1
+ .byte 0x4
+ .4byte .Ldebug_abbrev0
+ .uleb128 0x6
+ .4byte .LASF13
+ .byte 0x1d
+ .4byte .LASF14
+ .4byte .LASF15
+ .4byte .Ldebug_line0
+ .uleb128 0x7
+ .4byte .LASF16
+ .byte 0x7
+ .byte 0x1
+ .4byte 0x3d
+ .byte 0x1
+ .byte 0x1
+ .byte 0x6
+ .4byte 0x3d
+ .uleb128 0x4
+ .4byte .LASF0
+ .byte 0x1
+ .uleb128 0x4
+ .4byte .LASF1
+ .byte 0x2
+ .byte 0
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .4byte .LASF5
+ .uleb128 0x8
+ .4byte .LASF17
+ .byte 0xc
+ .byte 0x1
+ .byte 0x6
+ .byte 0x8
+ .4byte 0x76
+ .uleb128 0x3
+ .4byte .LASF2
+ .byte 0x8
+ .byte 0x9
+ .4byte 0x76
+ .byte 0
+ .uleb128 0x3
+ .4byte .LASF3
+ .byte 0x9
+ .byte 0x9
+ .4byte 0x76
+ .byte 0x4
+ .uleb128 0x3
+ .4byte .LASF4
+ .byte 0xa
+ .byte 0xa
+ .4byte 0x7d
+ .byte 0x8
+ .byte 0
+ .uleb128 0x9
+ .byte 0x4
+ .byte 0x5
+ .ascii "int\000"
+ .uleb128 0x2
+ .byte 0x1
+ .byte 0x8
+ .4byte .LASF6
+ .uleb128 0xa
+ .4byte .LASF18
+ .byte 0x4
+ .byte 0x1
+ .byte 0xd
+ .byte 0x7
+ .4byte 0xa8
+ .uleb128 0x5
+ .4byte .LASF2
+ .byte 0xf
+ .byte 0x9
+ .4byte 0x76
+ .uleb128 0x5
+ .4byte .LASF3
+ .byte 0x10
+ .byte 0xa
+ .4byte 0x7d
+ .byte 0
+ .uleb128 0x1
+ .4byte .LASF8
+ .byte 0x13
+ .byte 0x5
+ .4byte 0x76
+ .uleb128 0x5
+ .byte 0x3
+ .4byte var_base
+ .uleb128 0xb
+ .4byte 0x7d
+ .4byte 0xc9
+ .uleb128 0xc
+ .4byte 0xc9
+ .byte 0x3
+ .byte 0
+ .uleb128 0x2
+ .byte 0x4
+ .byte 0x7
+ .4byte .LASF7
+ .uleb128 0x1
+ .4byte .LASF9
+ .byte 0x14
+ .byte 0x6
+ .4byte 0xb9
+ .uleb128 0x5
+ .byte 0x3
+ .4byte var_arry
+ .uleb128 0x1
+ .4byte .LASF10
+ .byte 0x15
+ .byte 0xd
+ .4byte 0x1e
+ .uleb128 0x5
+ .byte 0x3
+ .4byte var_enum
+ .uleb128 0x1
+ .4byte .LASF11
+ .byte 0x16
+ .byte 0x11
+ .4byte 0x44
+ .uleb128 0x5
+ .byte 0x3
+ .4byte var_struct
+ .uleb128 0x1
+ .4byte .LASF12
+ .byte 0x17
+ .byte 0xf
+ .4byte 0x84
+ .uleb128 0x5
+ .byte 0x3
+ .4byte var_union
+ .byte 0
+ .section .debug_abbrev,"",%progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1
+ .uleb128 0x34
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3f
+ .uleb128 0x19
+ .uleb128 0x2
+ .uleb128 0x18
+ .byte 0
+ .byte 0
+ .uleb128 0x2
+ .uleb128 0x24
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .byte 0
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xd
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x38
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0x4
+ .uleb128 0x28
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1c
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .uleb128 0x5
+ .uleb128 0xd
+ .byte 0
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3a
+ .uleb128 0x21
+ .sleb128 1
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x6
+ .uleb128 0x11
+ .byte 0x1
+ .uleb128 0x25
+ .uleb128 0xe
+ .uleb128 0x13
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x1b
+ .uleb128 0xe
+ .uleb128 0x10
+ .uleb128 0x17
+ .byte 0
+ .byte 0
+ .uleb128 0x7
+ .uleb128 0x4
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x8
+ .uleb128 0x13
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0x9
+ .uleb128 0x24
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3e
+ .uleb128 0xb
+ .uleb128 0x3
+ .uleb128 0x8
+ .byte 0
+ .byte 0
+ .uleb128 0xa
+ .uleb128 0x17
+ .byte 0x1
+ .uleb128 0x3
+ .uleb128 0xe
+ .uleb128 0xb
+ .uleb128 0xb
+ .uleb128 0x3a
+ .uleb128 0xb
+ .uleb128 0x3b
+ .uleb128 0xb
+ .uleb128 0x39
+ .uleb128 0xb
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0xb
+ .uleb128 0x1
+ .byte 0x1
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x1
+ .uleb128 0x13
+ .byte 0
+ .byte 0
+ .uleb128 0xc
+ .uleb128 0x21
+ .byte 0
+ .uleb128 0x49
+ .uleb128 0x13
+ .uleb128 0x2f
+ .uleb128 0xb
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_aranges,"",%progbits
+ .4byte 0x14
+ .2byte 0x2
+ .4byte .Ldebug_info0
+ .byte 0x4
+ .byte 0
+ .2byte 0
+ .2byte 0
+ .4byte 0
+ .4byte 0
+ .section .debug_line,"",%progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",%progbits,1
+.LASF3:
+ .ascii "member2\000"
+.LASF4:
+ .ascii "member3\000"
+.LASF7:
+ .ascii "unsigned int\000"
+.LASF9:
+ .ascii "var_arry\000"
+.LASF11:
+ .ascii "var_struct\000"
+.LASF12:
+ .ascii "var_union\000"
+.LASF10:
+ .ascii "var_enum\000"
+.LASF18:
+ .ascii "union_t\000"
+.LASF15:
+ .ascii "gnu-tools-for-stm32\000"
+.LASF0:
+ .ascii "ENUM_VAL1\000"
+.LASF14:
+ .ascii "dw5-map.c\000"
+.LASF1:
+ .ascii "ENUM_VAL2\000"
+.LASF5:
+ .ascii "unsigned char\000"
+.LASF17:
+ .ascii "struct_t\000"
+.LASF16:
+ .ascii "enum_t\000"
+.LASF6:
+ .ascii "char\000"
+.LASF8:
+ .ascii "var_base\000"
+.LASF2:
+ .ascii "member1\000"
diff --git a/binutils/testsuite/binutils-all/dw5.Y b/binutils/testsuite/binutils-all/dw5.Y
new file mode 100644
index 00000000000..623dd66038d
--- /dev/null
+++ b/binutils/testsuite/binutils-all/dw5.Y
@@ -0,0 +1,5 @@
+.*dw5.o: file format .*
+
+(0x)?1234 (0x)?1238 pvar \(int\)
+(0x)?1234 (0x)?1238 yvar \(int\)
+(0x)?1234 (0x)?1238 xvar \(int\)
\ No newline at end of file
diff --git a/binutils/testsuite/binutils-all/objdump-complex.Y b/binutils/testsuite/binutils-all/objdump-complex.Y
new file mode 100644
index 00000000000..5fce1f1af87
--- /dev/null
+++ b/binutils/testsuite/binutils-all/objdump-complex.Y
@@ -0,0 +1,86 @@
+.*dw5-map-complex.o: file format .*
+
+(0x)?118 (0x)?124 globalPointerArray \(int\)
+ (0x)?118 globalPointerArray\[0\]
+ (0x)?11c globalPointerArray\[1\]
+ (0x)?120 globalPointerArray\[2\]
+(0x)?110 (0x)?118 globalDataArray \(Data\)
+ (0x)?110 globalDataArray\[0\]
+ union type \{
+ (0x)?110 intVal
+ (0x)?110 floatVal
+ (0x)?110 charVal
+ \}
+ (0x)?114 globalDataArray\[1\]
+ union type \{
+ (0x)?114 intVal
+ (0x)?114 floatVal
+ (0x)?114 charVal
+ \}
+(0x)?10c (0x)?10f globalColors \(Color\)
+ (0x)?10c globalColors\[0\]
+ enumeration type \{
+ (0x)?10c BLUE 2
+ (0x)?10c GREEN 1
+ (0x)?10c RED 0
+ \}
+ (0x)?10d globalColors\[1\]
+ enumeration type \{
+ (0x)?10d BLUE 2
+ (0x)?10d GREEN 1
+ (0x)?10d RED 0
+ \}
+ (0x)?10e globalColors\[2\]
+ enumeration type \{
+ (0x)?10e BLUE 2
+ (0x)?10e GREEN 1
+ (0x)?10e RED 0
+ \}
+(0x)?104 (0x)?10c globalNode \(Node\)
+ Node \{
+ (0x)?104 Node\.value
+ (0x)?108 Node\.next
+ \}
+(0x)?5c (0x)?104 globalPeople \(Person\)
+ (0x)?5c globalPeople\[0\]
+ Person \{
+ (0x)?5c Person\.name
+ (0x)?90 Person\.age
+ \}
+ (0x)?94 globalPeople\[1\]
+ Person \{
+ (0x)?94 Person\.name
+ (0x)?c8 Person\.age
+ \}
+ (0x)?cc globalPeople\[2\]
+ Person \{
+ (0x)?cc Person\.name
+ (0x)?100 Person\.age
+ \}
+(0x)?24 (0x)?5c globalPerson \(Person\)
+ Person \{
+ (0x)?24 Person\.name
+ (0x)?58 Person\.age
+ \}
+(0x)?20 (0x)?24 globalData \(Data\)
+ union type \{
+ (0x)?20 intVal
+ (0x)?20 floatVal
+ (0x)?20 charVal
+ \}
+(0x)?0 (0x)?8 globalConstant \(double\)
+(0x)?1c (0x)?20 globalPointer \(int\)
+(0x)?8 (0x)?1c globalArray \(int\)
+ (0x)?8 globalArray\[0\]
+ (0x)?c globalArray\[1\]
+ (0x)?10 globalArray\[2\]
+ (0x)?14 globalArray\[3\]
+ (0x)?18 globalArray\[4\]
+(0x)?5 (0x)?6 globalColor \(Color\)
+ enumeration type \{
+ (0x)?5 BLUE 2
+ (0x)?5 GREEN 1
+ (0x)?5 RED 0
+ \}
+(0x)?4 (0x)?5 globalChar \(char\)
+(0x)?0 (0x)?4 globalInt \(int\)
diff --git a/binutils/testsuite/binutils-all/objdump.Y b/binutils/testsuite/binutils-all/objdump.Y
new file mode 100644
index 00000000000..84853e7d1d1
--- /dev/null
+++ b/binutils/testsuite/binutils-all/objdump.Y
@@ -0,0 +1,25 @@
+
+.*dw5-map.o: file format .*
+
+(0x)?4 (0x)?8 var_union \(union_t\)
+ union type \{
+ (0x)?4 member1
+ (0x)?4 member2
+ \}
+(0x)?8 (0x)?14 var_struct \(struct_t\)
+ struct_t \{
+ (0x)?8 struct_t\.member1
+ (0x)?c struct_t\.member2
+ (0x)?10 struct_t\.member3
+ \}
+(0x)?4 (0x)?5 var_enum \(enum_t\)
+ enumeration type \{
+ (0x)?4 ENUM_VAL2 2
+ (0x)?4 ENUM_VAL1 1
+ \}
+(0x)?0 (0x)?4 var_arry \(char\)
+ (0x)?0 var_arry\[0\]
+ (0x)?1 var_arry\[1\]
+ (0x)?2 var_arry\[2\]
+ (0x)?3 var_arry\[3\]
+(0x)?0 (0x)?4 var_base \(int\)
diff --git a/binutils/testsuite/binutils-all/objdump.exp b/binutils/testsuite/binutils-all/objdump.exp
index f3142b10442..721fcd79903 100644
--- a/binutils/testsuite/binutils-all/objdump.exp
+++ b/binutils/testsuite/binutils-all/objdump.exp
@@ -545,6 +545,74 @@ if { ![is_elf_format]
}
}
+# Test objdump -Y on file containing debug_info
+
+if { ![is_elf_format] } then {
+ unsupported "objdump map-file test"
+} elseif { ![binutils_assemble $srcdir/$subdir/dw5.S tmpdir/dw5.${obj}] } then {
+ fail "objdump map file"
+} else {
+ if [is_remote host] {
+ set map_testfile [remote_download host tmpdir/dw5.${obj}]
+ } else {
+ set map_testfile tmpdir/dw5.${obj}
+ }
+
+ set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -Y $map_testfile" "" "/dev/null" "objdump.out"]
+
+ if { [regexp_diff objdump.out $srcdir/$subdir/dw5.Y] } then {
+ fail "objdump -Y dw5.o"
+ } else {
+ pass "objdump -Y dw5.o"
+ }
+}
+
+# Test objdump -Y on file containing debug_info
+
+if { ![is_elf_format] } then {
+ unsupported "objdump map-file test"
+} elseif { ![binutils_assemble $srcdir/$subdir/dw5-map.S tmpdir/dw5-map.${obj}] } then {
+ fail "objdump map file"
+} else {
+ set result [binutils_assemble $srcdir/$subdir/dw5-map.S tmpdir/dw5-map.${obj}]
+ if [is_remote host] {
+ set map_testfile [remote_download host tmpdir/dw5-map.${obj}]
+ } else {
+ set map_testfile tmpdir/dw5-map.${obj}
+ }
+
+ set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -Y $map_testfile" "" "/dev/null" "objdump.out"]
+
+ if { [regexp_diff objdump.out $srcdir/$subdir/objdump.Y] } then {
+ fail "objdump -Y dw5-map.o"
+ } else {
+ pass "objdump -Y dw5-map.o"
+ }
+}
+
+# Test objdump -Y on file containing debug_info
+
+if { ![is_elf_format] } then {
+ unsupported "objdump map-file test"
+} elseif { ![binutils_assemble $srcdir/$subdir/dw5-map-complex.S tmpdir/dw5-map-complex.${obj}] } then {
+ fail "objdump map file"
+} else {
+ set result [binutils_assemble $srcdir/$subdir/dw5-map-complex.S tmpdir/dw5-map-complex.${obj}]
+ if [is_remote host] {
+ set map_testfile [remote_download host tmpdir/dw5-map-complex.${obj}]
+ } else {
+ set map_testfile tmpdir/dw5-map-complex.${obj}
+ }
+
+ set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -Y $map_testfile" "" "/dev/null" "objdump.out"]
+
+ if { [regexp_diff objdump.out $srcdir/$subdir/objdump-complex.Y] } then {
+ fail "objdump -Y dw5-map-complex.o"
+ } else {
+ pass "objdump -Y dw5-map-complex.o"
+ }
+}
+
# Test objdump -W on a file containing debug_ranges information.
if { ![is_elf_format] } then {
--
2.25.1
More information about the Binutils
mailing list