aboutsummaryrefslogtreecommitdiffstats
path: root/src/amd/common/ac_rtld.c
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2018-12-07 10:31:41 +0100
committerMarek Olšák <[email protected]>2019-06-19 20:30:32 -0400
commit1ee0f0d315546766c584f7af3ca1974d18e8f3e4 (patch)
tree5bcc0f04170e81a511e525eb7afea2e2836b11d8 /src/amd/common/ac_rtld.c
parent87182200c7dc3528ccb10b5da97cf49545403503 (diff)
radeonsi: add s_sethalt to shaders for debugging
Tested-by: Dieter Nützel <[email protected]>
Diffstat (limited to 'src/amd/common/ac_rtld.c')
-rw-r--r--src/amd/common/ac_rtld.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/amd/common/ac_rtld.c b/src/amd/common/ac_rtld.c
index 92020c5f0dd..c750dbfa9cb 100644
--- a/src/amd/common/ac_rtld.c
+++ b/src/amd/common/ac_rtld.c
@@ -243,6 +243,7 @@ bool ac_rtld_open(struct ac_rtld_binary *binary,
elf_version(EV_CURRENT);
memset(binary, 0, sizeof(*binary));
+ memcpy(&binary->options, &i.options, sizeof(binary->options));
binary->num_parts = i.num_parts;
binary->parts = calloc(sizeof(*binary->parts), i.num_parts);
if (!binary->parts)
@@ -290,6 +291,9 @@ bool ac_rtld_open(struct ac_rtld_binary *binary,
* sections in the memory image, and collect and layout private LDS symbols. */
uint32_t lds_end_align = 0;
+ if (binary->options.halt_at_entry)
+ pasted_text_size += 4;
+
for (unsigned part_idx = 0; part_idx < i.num_parts; ++part_idx) {
struct ac_rtld_part *part = &binary->parts[part_idx];
unsigned part_lds_symbols_begin =
@@ -692,6 +696,11 @@ bool ac_rtld_upload(struct ac_rtld_upload_info *u)
} \
} while (false)
+ if (u->binary->options.halt_at_entry) {
+ /* s_sethalt 1 */
+ *(uint32_t *)u->rx_ptr = util_cpu_to_le32(0xbf8d0001);
+ }
+
/* First pass: upload raw section data and lay out private LDS symbols. */
for (unsigned i = 0; i < u->binary->num_parts; ++i) {
struct ac_rtld_part *part = &u->binary->parts[i];