Commit 1ee0f0d3 authored by Nicolai Hähnle's avatar Nicolai Hähnle Committed by Marek Olšák

radeonsi: add s_sethalt to shaders for debugging

Tested-by: Dieter Nützel's avatarDieter Nützel <Dieter@nuetzel-hh.de>
parent 87182200
......@@ -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];
......
......@@ -42,8 +42,16 @@ struct ac_rtld_symbol {
unsigned part_idx; /* shader part in which this symbol appears */
};
struct ac_rtld_options {
/* Loader will insert an s_sethalt 1 instruction as the
* first instruction. */
bool halt_at_entry:1;
};
/* Lightweight wrapper around underlying ELF objects. */
struct ac_rtld_binary {
struct ac_rtld_options options;
/* Required buffer sizes, currently read/executable only. */
uint64_t rx_size;
......@@ -75,6 +83,7 @@ typedef bool (*ac_rtld_get_external_symbol_cb)(
*/
struct ac_rtld_open_info {
const struct radeon_info *info;
struct ac_rtld_options options;
unsigned num_parts;
const char * const *elf_ptrs; /* in-memory ELF objects of each part */
......
......@@ -4,6 +4,7 @@ OPT_BOOL(aux_debug, false, "Generate ddebug_dumps for the auxiliary context")
OPT_BOOL(sync_compile, false, "Always compile synchronously (will cause stalls)")
OPT_BOOL(dump_shader_binary, false, "Dump shader binary as part of ddebug_dumps")
OPT_BOOL(debug_disassembly, false, "Report shader disassembly as part of driver debug messages (for shader db)")
OPT_BOOL(halt_shaders, false, "Halt shaders at the start (will hang)")
OPT_BOOL(vs_fetch_always_opencode, false, "Always open code vertex fetches (less efficient, purely for testing)")
OPT_BOOL(prim_restart_tri_strips_only, false, "Only enable primitive restart for triangle strips")
......
......@@ -5133,6 +5133,9 @@ static bool si_shader_binary_open(struct si_screen *screen,
bool ok = ac_rtld_open(rtld, (struct ac_rtld_open_info){
.info = &screen->info,
.options = {
.halt_at_entry = screen->options.halt_shaders,
},
.num_parts = num_parts,
.elf_ptrs = part_elfs,
.elf_sizes = part_sizes,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment