forked from Imagelibrary/binutils-gdb
Another complex DWARF expression operations, that are usefull for SIMD/SIMT like architectures are: DW_OP_LLVM_overlay and DW_OP_LLVM_bit_overlay. These operations pop four stack entries, where the first must be an integral that represents an overlay size, the second must be an integral that represents a starting point of the overlay from the base location, the third must be a location description that represents the overlay location description and the forth must be a location description that represents the base location description. Resulting composite location description contains parts from base location description, overlayed by the overlay location description, starting from the overlay offset, ending at a sum of the overlay offset and overlay size. A new test in gdb.dwarf2 called dw2-llvm-overlay has been also added to test the support for both operations.
34 lines
1.0 KiB
C
34 lines
1.0 KiB
C
/* This testcase is part of GDB, the GNU debugger.
|
|
|
|
Copyright 2022 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/>. */
|
|
|
|
unsigned buff[] = {0, 1, 2, 3, 4, 5, 6, 7};
|
|
|
|
void foo (unsigned dst[], unsigned src[], int len)
|
|
{
|
|
asm volatile ("foo_label: .globl foo_label");
|
|
for (int i = 0; i < len; ++i)
|
|
dst[i] += src[i];
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
asm volatile ("main_label: .globl main_label");
|
|
foo (buff, buff, 1);
|
|
return 0;
|
|
}
|