[Bug debug/106718] New: Behavior does not follow the standard for DW_AT_ranges and DW_FORM_sec_offset
navidr at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 23 06:17:26 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106718
Bug ID: 106718
Summary: Behavior does not follow the standard for DW_AT_ranges
and DW_FORM_sec_offset
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: navidr at gcc dot gnu.org
Target Milestone: ---
gcc-trunk sort.c -O3 -gdwarf-5 -gsplit-dwarf -g3 -o sort
.
.
.
36> DW_TAG_inlined_subroutine
DW_AT_abstract_origin DW_FORM_ref4
DW_AT_entry_pc DW_FORM_addrx
DW_FORM_data1
DW_AT_ranges DW_FORM_rnglistx
.
.
.
DWARF5 standard explicitly mentions that you should not use "DW_FORM_rnglistx"
form when your header does have offset_entry_count=0.
"If the offset_entry_count is zero, then DW_FORM_rnglistx cannot be used to
access a range list; DW_FORM_sec_offset must be used instead. If the
offset_entry_count is non-zero, then DW_FORM_rnglistx may be used to access a
range list; this is necessary in split units and may be more compact than using
DW_FORM_sec_offsetin non-split units. (Page 242, DWARF5 Specification
document)."
I didn't try to bisect to find exact commit, but I didn't have this problem 1
year ago.
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#define ARRAY_LEN 50000
static struct timeval tm1;
static inline void start() {
gettimeofday(&tm1, NULL);
}
static inline void stop() {
struct timeval tm2;
gettimeofday(&tm2, NULL);
unsigned long long t = 1000 * (tm2.tv_sec - tm1.tv_sec) +\
(tm2.tv_usec - tm1.tv_usec) / 1000;
printf("%llu ms\n", t);
}
void bubble_sort (int *a, int n) {
int i, t, s = 1;
while (s) {
s = 0;
for (i = 1; i < n; i++) {
if (a[i] < a[i - 1]) {
t = a[i];
a[i] = a[i - 1];
a[i - 1] = t;
s = 1;
}
}
}
}
void sort_array() {
printf("Bubble sorting array of %d elements\n", ARRAY_LEN);
int data[ARRAY_LEN], i;
for(i=0; i<ARRAY_LEN; ++i){
data[i] = rand();
}
bubble_sort(data, ARRAY_LEN);
}
int main(){
start();
sort_array();
stop();
return 0;
}
More information about the Gcc-bugs
mailing list