#! /bin/sh
# Test for displaying DW_AT_const_types with the "correct" sign.
# Copyright (C) 2018 Red Hat, Inc.
# This file is part of elfutils.
#
# This file 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.
#
# elfutils 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/>.
. $srcdir/test-subr.sh
# = s.c
#
# int s()
# {
# int i = -1;
# int j = -1;
#
# return i - j;
# }
#
# = m.c
#
# extern int s();
#
# int
# main ()
# {
# const signed char sc = -2;
# const unsigned char uc = 254;
#
# const signed short ss = -16;
# const unsigned short us = 65520;
#
# const signed int si = -3;
# const unsigned int ui = 4200000000;
#
# signed long sl = -1;
# unsigned long ul = 0xffffffffffffffffUL;
#
# return s ();
# }
#
# gcc -gdwarf-5 -O2 -c s.c
# gcc -gdwarf-4 -O2 -c m.c
# gcc -o testfile-const-values s.o m.o
# eu-strip -g -f testfile-const-values.debug testfile-const-values
testfiles testfile-const-values.debug
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info testfile-const-values.debug << EOF
DWARF section [28] '.debug_info' at offset 0x2e0:
[Offset]
Compilation unit at offset 0:
Version: 5, Abbreviation section offset: 0, Address size: 8, Offset size: 4
Unit type: compile (1)
[ c] compile_unit abbrev: 2
producer (strp) "GNU C11 7.3.1 20180303 (Red Hat 7.3.1-5) -mtune=generic -march=x86-64 -gdwarf-5 -O2"
language (data1) C11 (29)
name (string) "s.c"
comp_dir (strp) "/home/mark/build/elfutils-obj"
low_pc (addr) 0x00000000004004d0
high_pc (data8) 3 (0x00000000004004d3)
stmt_list (sec_offset) 0
[ 2e] subprogram abbrev: 3
external (flag_present) yes
name (string) "s"
decl_file (data1) s.c (1)
decl_line (data1) 1
type (ref4) [ 5e]
low_pc (addr) 0x00000000004004d0
high_pc (data8) 3 (0x00000000004004d3)
frame_base (exprloc)
[ 0] call_frame_cfa
call_all_calls (flag_present) yes
sibling (ref4) [ 5e]
[ 4d] variable abbrev: 1
name (string) "i"
decl_file (implicit_const) s.c (1)
decl_line (data1) 3
type (ref4) [ 5e]
const_value (implicit_const) -1
[ 55] variable abbrev: 1
name (string) "j"
decl_file (implicit_const) s.c (1)
decl_line (data1) 4
type (ref4) [ 5e]
const_value (implicit_const) -1
[ 5e] base_type abbrev: 4
byte_size (data1) 4
encoding (data1) signed (5)
name (string) "int"
Compilation unit at offset 102:
Version: 4, Abbreviation section offset: 73, Address size: 8, Offset size: 4
[ 71] compile_unit abbrev: 1
producer (strp) "GNU C11 7.3.1 20180303 (Red Hat 7.3.1-5) -mtune=generic -march=x86-64 -gdwarf-4 -O2"
language (data1) C99 (12)
name (string) "m.c"
comp_dir (strp) "/home/mark/build/elfutils-obj"
ranges (sec_offset) range list [ 0]
low_pc (addr) 000000000000000000
stmt_list (sec_offset) 54
[ 8f] subprogram abbrev: 2
external (flag_present) yes
name (strp) "main"
decl_file (data1) m.c (1)
decl_line (data1) 4
type (ref4) [ 119]
low_pc (addr) 0x00000000004003e0
high_pc (data8) 7 (0x00000000004003e7)
frame_base (exprloc)
[ 0] call_frame_cfa
GNU_all_call_sites (flag_present) yes
sibling (ref4) [ 119]
[ b0] variable abbrev: 3
name (string) "sc"
decl_file (data1) m.c (1)
decl_line (data1) 6
type (ref4) [ 12c]
const_value (sdata) -2
[ bb] variable abbrev: 3
name (string) "uc"
decl_file (data1) m.c (1)
decl_line (data1) 7
type (ref4) [ 138]
const_value (sdata) 254 (-2)
[ c6] variable abbrev: 3
name (string) "ss"
decl_file (data1) m.c (1)
decl_line (data1) 9
type (ref4) [ 144]
const_value (sdata) -16
[ d1] variable abbrev: 3
name (string) "us"
decl_file (data1) m.c (1)
decl_line (data1) 10
type (ref4) [ 150]
const_value (sdata) 65520 (-16)
[ dc] variable abbrev: 3
name (string) "si"
decl_file (data1) m.c (1)
decl_line (data1) 12
type (ref4) [ 120]
const_value (sdata) -3
[ e7] variable abbrev: 3
name (string) "ui"
decl_file (data1) m.c (1)
decl_line (data1) 13
type (ref4) [ 15c]
const_value (sdata) 4200000000 (-94967296)
[ f5] variable abbrev: 3
name (string) "sl"
decl_file (data1) m.c (1)
decl_line (data1) 15
type (ref4) [ 161]
const_value (sdata) -1
[ 100] variable abbrev: 3
name (string) "ul"
decl_file (data1) m.c (1)
decl_line (data1) 16
type (ref4) [ 168]
const_value (sdata) 18446744073709551615 (-1)
[ 10b] GNU_call_site abbrev: 4
low_pc (addr) 0x00000000004003e7
GNU_tail_call (flag_present) yes
abstract_origin (ref4) [ 16f]
[ 119] base_type abbrev: 5
byte_size (data1) 4
encoding (data1) signed (5)
name (string) "int"
[ 120] const_type abbrev: 6
type (ref4) [ 119]
[ 125] base_type abbrev: 7
byte_size (data1) 1
encoding (data1) signed_char (6)
name (strp) "signed char"
[ 12c] const_type abbrev: 6
type (ref4) [ 125]
[ 131] base_type abbrev: 7
byte_size (data1) 1
encoding (data1) unsigned_char (8)
name (strp) "unsigned char"
[ 138] const_type abbrev: 6
type (ref4) [ 131]
[ 13d] base_type abbrev: 7
byte_size (data1) 2
encoding (data1) signed (5)
name (strp) "short int"
[ 144] const_type abbrev: 6
type (ref4) [ 13d]
[ 149] base_type abbrev: 7
byte_size (data1) 2
encoding (data1) unsigned (7)
name (strp) "short unsigned int"
[ 150] const_type abbrev: 6
type (ref4) [ 149]
[ 155] base_type abbrev: 7
byte_size (data1) 4
encoding (data1) unsigned (7)
name (strp) "unsigned int"
[ 15c] const_type abbrev: 6
type (ref4) [ 155]
[ 161] base_type abbrev: 7
byte_size (data1) 8
encoding (data1) signed (5)
name (strp) "long int"
[ 168] base_type abbrev: 7
byte_size (data1) 8
encoding (data1) unsigned (7)
name (strp) "long unsigned int"
[ 16f] subprogram abbrev: 8
external (flag_present) yes
declaration (flag_present) yes
linkage_name (string) "s"
name (string) "s"
decl_file (data1) m.c (1)
decl_line (data1) 1
EOF
exit 0