[PATCH 19/23] objtool: decode instructions and resolve branch targets in parallel

Josh Poimboeuf jpoimboe at kernel.org
Sat Sep 12 16:39:49 PDT 2026


On Tue, Sep 08, 2026 at 09:55:19PM +0100, Lorenzo Stoakes (ARM) wrote:
> +/* Only an object this large, e.g. vmlinux.o, is decoded on several threads. */
> +#define DECODE_THREADED_MIN_TEXT	SZ_8M
> +/* Only decoding and the branch passes are threaded, so more gains nothing. */
> +#define DECODE_MAX_THREADS		16
> +#define DECODE_RANGES_PER_THREAD	4
> +
> +/*
> + * sec_offset_hash() keys on OFFSET_STRIDE windows, so the instructions of a
> + * window share a chain and buckets beyond one per window would sit empty.
> + */
> +#define INSN_HASH_BYTES_PER_BUCKET	OFFSET_STRIDE
> +#define INSN_HASH_MIN_BITS		10
> +
> +static unsigned long total_text_size(struct objtool_file *file)
> +{
> +	unsigned long size = 0;
> +	struct section *sec;
> +
> +	for_each_sec(file->elf, sec)
> +		if (is_text_sec(sec))
> +			size += sec_size(sec);
> +
> +	return size;
> +}
> +
> +static int alloc_insn_hash(struct objtool_file *file, unsigned long text_size)
> +{
> +	const unsigned long nr_buckets = text_size / INSN_HASH_BYTES_PER_BUCKET;
> +	const int bits = ilog2(nr_buckets);
> +
> +	file->insn_hash_bits = max(INSN_HASH_MIN_BITS, bits);
> +	file->insn_hash = calloc(1UL << file->insn_hash_bits,
> +				 sizeof(*file->insn_hash));
> +	if (!file->insn_hash) {
> +		ERROR_GLIBC("calloc");
> +		return -1;
> +	}
> +
> +	if (opts.stats)
> +		printf("insn_hash_bits: %d\n", file->insn_hash_bits);
> +
> +	return 0;
> +}

The dynamic insn hash sizing should probably be its own patch.  It's a
standalone improvement, and much more obviously correct compared to the
rest of patch.  I suspect it will make a big difference on allyesconfig.

The rest of the patch looks ok to me, though it needs to be reviewed
very carefully (which I haven't done yet).  I'd like to see a Sashiko
review (I wasn't able to find these patches on sashiko.dev for some
reason).

-- 
Josh



More information about the linux-riscv mailing list